Манипуляторҳои ҷараёнҳо

Печать

Дар 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) қиматҳои аз рӯи хомушӣ (default) муайяншударо барқарор мекунад.

Ба воситаи функсия-аъзо unsetf() нишонҳои гузошташударо гирифтан мумкин аст. Мисол, cout.unsetf(ios::left).

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Тарзи табдил додани ифодаи адад аз як асос ба асоси дигарро такрор кунед.
2. Саҳеҳияти ададҳои хориҷшаванда чӣ тавр идора карда мешавад?
3. Нишонҳои left ва right барои чӣ лозиманд?
4. Ҳолатҳоеро, ки намудҳои мустаҳкамшуда ё экспонентсиалии ададҳо истифода бурда мешаванд номбар кунед.

Добавить комментарий


Защитный код
Обновить

Произведение «OFTOB.COM» публикуется на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Непортированная.