Манипуляторхои чараёнхо
- Подробности
- Обновлено 10.01.2011 17:57
- Просмотров: 1075
Дар C++ ба воситаи манипуляторхои чараён дарозии маълумоти хоричшаванда, сахехияти ададхо, символи пуркунанда ва гайраро муайян кардан мумкин аст.
Асоси ададхои бутун. Ададхои бутун одатан хамчун дахи маънидод карда мешаванд (бо асоси 10). Барои ададхоро бо асоси 16 ифода кардан дар чараён манипулятори hex навиштан зарур аст. Барои ададхоро бо асоси 8 ифода кардан дар чараён манипулятори oct навиштан зарур аст. Барои ба асоси дахи баргаштан дар чараён манипулятори dec навишта мешавад. Барои имконпазир гаштани истифодаи ин манипуляторхо файли сарлавхавии ба программа бояд хамрох карда шавад. Мисол:
//namuna35.cpp
using namespace std;
#include <iostream>
#include <iomanip>
int main() {
int x, y;
for(x=10; x<21; x++) {
y=x*x;
cout<<"8-i : "<<oct<<y<<'\t';
cout<<"10-i: "<<dec<<y<<'\t';
cout<<"16-i: "<<hex<<y<endl;
}
return 0;
}
Дар ин чо '\t' - табуляция барои гузоштани фосила байни ададхо истифода мешавад.
Сахехияти ададхо. Мо метавонем сахехияти ададхои хоричшавандаро идора кунем, яъне ба воситаи функсияи precision(), ки аъзои синфи ios мебошад (cout намояндаи ин синф аст), дар адади хакики баъди нукта чандто ракам чоп шудаданаш даркор муайян карда метавонем. Мисол:
//namuna36.cpp
using namespace std;
#include <iostream>
#include <iomanip>
#include <math>
int main() {
double y=sqrt(2);
for(int x=1; x<20; x++) {
cout.precision(x);
cout<<x<<'\t'<<y<<endl;
}
cout.precision();
cout<<y<<endl;
return 0;
}
Кайд мекунем, ки истифодаи функсияи precision() бе аргумент сахехияти ибтидоии тагйирёбандаро баркарор мекунад.
Дарозии майдон. Функсия width(), аъзои синфи ios, дарозии майдони хоричкуниро муайян мекунад, яъне микдори мавкеъхои хоричкуние, ки банд карда мешаванд ё ки микдори рамзхое, ки хорич карда мешаванд. Агар микдори рамзхои кимати хоричшаванда аз дарозии муайяншуда хурд бошад, барои пур кардани мавкеъхои холи аз рамзи пуркунанда истифода мебаранд. Агар микдори рамзхои кимати хоричшаванда аз дарозии муайяншуда зиёд бошад, кимат ихтисор карда намешавад ва пурра чоп карда мешавад. Муайян намудани дарозии майдон факат ба хоричкунии минбаъда таъсир мекунаду халос, баъди ин кимати дарози 0 муайян карда мешавад. Ба 0 баробар будани кимати дарози чунин маъно дорад, ки ба маълумоти хоричшаванда чи кадаре, ки мавкеъ лозим бошад, хамон кадар чудо карда мешавад. Барои он ки дар ададхои хакики хатман нуктаи дахи ва нулхои кисми касри чоп шаванд аз нишони (flag) showpoint истифода мебаранд. Барои гузоштани нишон аз функсияи setf() истифода мебаранд. Мисол:
//namuna37.cpp
using namespace std;
#include <iostream>
#include <iomanip>
#include <math>
int main() {
const double PI=3.14159265358979;
double x,t;
for(x=0; x<=2; x+=0.125) {
cout.setf(ios::showpoint);
cout.width(5);
cout.precision(3);
cout<<x<<"|";
t=PI*x;
cout.width(8);
cout.precision(5);
cout<<t<<"|";
cout.width(8);
cout.precision(5);
cout<<cos(t)<<"|";
cout.width(20);
cout.precision(9);
cout<<sin(t)<<"|"<<endl;
}
return 0;
}
Рост кардан. Нишонхои left ва right имконият медиханд, ки маълумот аз тарафи чап ва рости майдон хорич шаванд, мавкехои холи аз рост ва чап, мувофикан, бо рамзи пуркунанда пур карда мешаванд. Рамзи барои пур кардани мавкеъхои холи истифодашаванда бо ёрии функсия-аъзо fill() муайян карда мешавад.
//namuna38.cpp
using namespace std;
#include <iostream>
#include <iomanip>
#include <math>
int main() {
const double PI=3.14159265358979;
double x,t;
for(x=0; x<=2; x+=0.125) {
cout.width(7);
cout.precision(3);
cout.setf(ios::showpoint);
cout.setf(ios::right | ios::adjustfield);
cout.fill(' ');
cout<<x<<"|";
t=PI*x;
cout.width(9);
cout.precision(5);
cout.setf(ios::left | ios::adjustfield);
cout.fill('_');
cout<<t<<"|";
cout.width(16);
cout.precision(5);
cout.setf(ios::right | ios::adjustfield);
cout.fill('*');
cout<<cos(t)<<"|";
cout.width(16);
cout.precision(9);
cout.setf(ios::left | ios::adjustfield);
cout.fill('^');
cout<<sin(t)<<"|"<<endl;
}
return 0;
}
Дар ин мисол аргументи ios::adjustfield барои муайян кардани танхо яке аз нишонхои left ё right зарур аст.
Намудхои мустахкамшуда ва экспонентсиалии ададхо. Нишони scientific намуди экпонентсиалии хоричкунии ададхои хакикиро муайян мекунад, масалан 4.6224e-015. Нишони fixed намуди мустахкамшудаи хоричкунии ададхои хакикиро муайян мекунад, яъне баъди нуктаи дахи микдори муайяншудаи ракамхо хорич мешавад. Хар дуи ин нишон хамрохи нишони floatfield истифода мешаванд. Мисол:
//namuna39.cpp
using namespace std;
#include <iostream>
#include <iomanip>
#include <math>
int main() {
const float PI=3.141592;
cout.width(17);
cout.setf(ios::scientific);
cout<<cos(PI/2)<<endl;
cout.setf(0,ios::floatfield);
cout.width(17);
cout.setf(ios::fixed);
cout<<cos(PI/2)<<endl;
return 0;
}
cout.setf(0,ios::floatfield) киматхои аз руи хомуши муайяншударо баркарор мекунад.
Ба воситаи функсия-аъзо unsetf() нишонхои гузошташударо гирифтан мумкин аст. Мисол, cout.unsetf(ios::left).
САВОЛХО БАРОИ МУСТАХКАМКУНИ
1. Тарзи табдил додани ифодаи адад аз як асос ба асоси дигарро такрор кунед.
2. Сахехияти ададхои хоричшаванда чи тавр идора карда мешавад?
3. Нишонхои left ва right барои чи лозиманд?
4. Холатхоеро, ки намудхои мустахкамшуда ё экспонентсиалии ададхо истифода бурда мешаванд номбар кунед.