С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн.Задачи по
программированию - Москва:Наука-1988.-224 бет.
ОСӨЖ №31-36
Енгізу - шығару кітапханасымен жұмыс істеу
Жұмыс мақсаты
: Файлдан жəне клавиатурадан форматталған берілгендерді енгізу жəне
нəтижені экранға жəне файлға шығаруды оқып- үйрену.
Қысқаша теориялық бөлiм
Си тіліндегі енгізу-шығару операциялар кітапханалық функциялар көмегімен
ұйымдастырылады. Си-дің стандарттық кітапханасында енгізу/шығару функциялары
файлдардан берілгендерді оқуды немесе оларды енгізу құрылғысынан алуды жəне
файлдарға берілгендерді жазуды немесе оларды əртүрлі құрылғыларға енгізуге мүмкіндік
береді.
Енгізу/шығару функциялары үш класқа бөлінеді:
1.
Жоғарғы деңгейдегі енгізу/шығару (“ағын” түсінігін пайдалану арқылы).
2.
Консольдық терминал үшін енгізу/шығару
3.
Төменгі деңгейдегі енгзу/шығару(“дескриптор” түсінігін пайдалану арқылы).
Жоғарғы
деңгейдегі
енгізу/шығару
функциялары.
(Жоғарғы
деңгейдегі
енгізу/шығару функцияларының барлығының прототипі stdio.h файлында бар)
Функция
Қысқаша түсініктеме
clearerr
ағын үшін қате жалаушасын тазалау
fclose
Ағынды жабу
fcloseall
Барлық ашылған файлдарды жабу
fdopen
төменгі деңгейде алдыңда ашылған файл
үшін
ағынды
құру,
дескрипторды
пайдаланып
feof
ағынның соңын тексеру
ferror
ағынның жалауша қатесін тексеру
flush
cыртқы құрылғымен байланысқан ағын
буферін тазалау
fgets
ағыннан символды оқу
fileno
ағынмен
байланысқан
файлдың
дескрипторын алу
fgetchar
stdin
стандартты
ағынды
енгізуден
символды оқу
fgets
ағыннан жолды оқу
flushall
Барлық ағынның буферден тазалау
fopen
ағынның ашылуы (файлды ашу жəне оны
ағынмен байланыстыру)
fprint
Формат бойынша ағынға берілгендерді жазу
fputs
ағынға символдарды жазу
fputchar
stdout
стандарттық
шығару
ағынына
символды жазу
fputs
ағынға жолды жазу
fread
ағыннан форматталмаған берілгендерді оқу
freopen
жаңа режимде ағынның жаңадан ашылуы
fscanf
Формат бойынша ағыннан оқылуы
Функция
Қысқаша түсініктеме
fseek
берілген позицияға файлдың көрсеткішін
орналастыру
ftell
файлдың көрсеткішінің ағымды позициясын
алу
fwrite
Ағынға форматталмаған берілгендерді жазу
getc
ағыннан символды оқу (макро анықталу
арқылы таратылады)
getchar
stdin
стандарттық
шығару
ағынынан
символды оқу
gets
stdin ағынынан жолды оқу
getw
ағыннан сөз форматында екі байтты (int
өлшемі бойынша) оқу.
Printf
stdout
ағынына
формат
бойынша
берілгендерді жазу
putc
ағынға символдарды жазу (макро версиясы)
putchar
stdout
стандарттық
шығару
ағынына
символды жазу (макро версиясы)
puts
ағынға жолды жазу
putw
ағыннан сөз форматында екі байтты (int
өлшемі бойынша) жазу
rewind
файл бойынша файлдың басына көрсеткішін
орналастыру
scanf
stdin
ағынынан
формат
бойынша
берілгендерді оқу
setbuf
ағынның буферленуін басқару
setvbuf
ағынның буферленуін жəне буфердің
өлшемін басқару
sprintf
Формат бойынша берілгендерді жолға жазу
sscanf
Формат бойынша жолдан берілгендерді оқу
tempnam
берілген каталогта уақытша файлдың атын
генерациялау
tmpfile
уақытша фа47йлды құру
ungetc
ағынға символды қайтару
vfprintf
Формат бойынша ағынға берілгндерді жазу
vspintf
Формат бойынша жолға берілгндерді жазу
Төменгі деңгейдегі енгізу/шығару функциясы. (Төменгі деңгейдегі енгізу/шығару
функциясының барлық прототиптері іo.h файлында бар. Файлдардың ашылуына fcntl.h
файлын қосу керек. Кейбір жағдайларда sys\types.h жəне sys\stat.h файлдары қосылуы
керек.)
Функция
Қысқаша түсініктеме
close
файлды жабу
creat
файлды құру
dup
файл үшін екінші дескриптор (handle)
құру
dup2
файл
үшін
дескрипторды
қайта
тағайындау
eof
файлдың соңын тексеру
lseek
берілген жерге файлдың көрсеткішін
позициялау
open
файлды ашу
read
файлдан берілгендерді оқу
sopen
бөліну режимінде файлды ашу
tell
файлдың
көрсеткішінің
ағымды
позициясын алу
write
файлға берілгендерді жазу
Консольдық терминалдан жəне порттан енгізу/шығару функциялары. (Төменгі
деңгейдегі енгізу/шығару функциясының барлық прототиптері conіo.h файлында бар.)
Функция
Қысқаша түсініктеме
cgets
консольдан жолды оқу
сprintf
консольдық терминалға формат бойынша
берілгендерді жазу
cputs
консольдық терминалға жолды шығару
getch
консолдан символды оқу
getche
консолбдан
баспа-жаңғырығымен
символды оқу
kbhit
консольға пернелерді басуды тексеру
putch
консольдық терминалға символды шығару
ungetch
консольдық символдан cоңғы оқылған
символды, келесі оқу үшін символ болу
үшін қайтару
сsanf
консольдан берілгендерді оқу
getpass
пароль
терминалынан
баспа-
жаңғырықсыз енгізу
Бір варианттың орындалуы
ґ1 Тапсырма
Символдар қатары берілген. Текст симметриялық екен бе, соны анықтау керек.
Шешімі:
#include
#include
#include
#include
main()
{
int m,s, pozicia;
double k, n;
char otvet[13]=””;
char *stroka=” Ароза упала на лапу азорА упал ан алапу азорА”;
clrscr ();
n=strlen (stroka);
printf (“\n Алғашқы текст:\n%s\n”,stroka);
m=int(n/2);
k=fmod(n,2.00);
if (m= =k) s= n-2; s=n-1;
for (pozisia=0; pozisia
if (stroka[pozisia]і = stroka[s- pozisia])
{strepy (otvet,”симметриялық”); break;}
streat (otvet, “емес”);
printf (“Берілген текст%s\n”,otvet); }
Нəтижесі:
Алғашқы текст:
Ароза упала на лапу азорА упал ан алапу азорА
Берілген текст симметриялық
Алғашқы текст:
ароза упала на лапу азора упала на лапу азора
Берілген текст симметриялық емес
С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн.Задачи по
программированию - Москва:Наука-1988.-224 бет.
ОСӨЖ №37-45
Енгізу - шығару кітапханасымен
жұмыс істеу
Жұмыс мақсаты
: Файлдан жəне клавиатурадан форматталған берілгендерді енгізу жəне
нəтижені экранға жəне файлға шығаруды оқып- үйрену.
Қысқаша теориялық бөлiм
C++ графикасына кірісне
Экранда сонымен қатар графикалық режимді орнатуға болады. Осы адаптерге
сəйкес, сіздің компьютеріңізде графикалық адаптердің бірі жəне монитор орнатылған.
Графикалық режимде экранды басқару функция жиындарымен орындалады, олардың
прототиптері GRAPHICS.H бас файлында орналасқан. Ол жерде тұрақтылар жəне
макростар жарияланған. GRAPHICS.H файлы С тілінің препроцессора #INCLUDE
директивасының көмегімен қосылуы керек.
Текстік режимдегідей, барлық графикалық функциялар терезелермен іске
асырылады. Borland C++ терминологиясында терезелер viewpor деп аталады. Графикалық
терезенің текстік терезеден айырмашылығы, терезенің сол жақ жоғарғы бұрышының
координатасы (1,1) емес (0,0). Үнсіздік бойынша графикалық терезе барлық экранды
алады.
Графикалық редакторларды пайдаланбастан бұрын, графикалық режимге
видеоадаптер орнату керек. Видоеадаптерді орнату үшін GRAPHICS.H функциясы
пайдаланады. Оның прототипі:
void far initgrah(int far *driver, int far *mode, char far *path);
Графикалық пакеттің құрамына GRAPHICS.H тақырыпты файлы, GRAPHICS.LIB
кітапханалық файлы, графикалық құрылғының (*BGI) драйверлері жəне символдық
қаріптер (*CHR).
Initgraph( ) функциясы жадыға сəйкес драйверлерді санайды, mode аргументіне
сəйкес видеорежимді орнатады жəне *BGI сəйкес драйвері орналасқан, директорияның
маршрутын анықтайды. Егер маршрут көрсетілмесе, онда файл ағымды директорияда
орналасқан деп есептейді.
Бас файл драйверлерге сəйкес макростарды анықтайды:
Detect 0
ең көп мүмкiндiктi графикалық
режимдерді автоматты орнату
CGA
1
MCGA
2
EGA
3
EGAMONO
5
IBM8514
6
HERCMONO
7
ATT400
8
VGA
9
PC3270
10
CURRENT_DRI
VER
-1
Initgrah () пайдалануда нақты драйвердi немесе видеоадаптердiң типiнiң автоматты
детектерленуiн берудi жəне программаның (DETECT) орындалу уақтысында сəйкес
драйверлердi таңдауды көрсетуге болады. Бұл -программаларды өзгерiссiз басқа
видеоадаптерлi компьютерге ауыстыруға мүмкiншiлiк бередi.
Mode мəнi төменде көрсетiлгендердiң бiрi болады:
Драйвер
мəнi
кеңейтiлуi
палитра бе
т.
са
ны
CGAC0
0
320х200
0
1
CGAC1
1
320х200
1
1
CGAC2
2
320х200
2
1
CGAC3
3
320х200
3
1
CGACHI
4
320х200
1
MCGACO
0
640x200
0
1
MCGAC1
1
320х200
1
1
MCGAC2
2
320х200
2
1
MCGAC3
3
320х200
3
1
MCGAMED
4
640x200
1
MCGAHI
5
640x480
1
EGALO
0
640x200
16 түс
4
EGA64LO
0
640x200
16 түс
1
EGAHI
1
640x350
16 түс
2
EGA64HI
1
640x350
4 түс
1
EGAMONOHI
0
640x350
1
4
HERCMONOHІ 0
720x348
2
ATT400
0
320х200
0
1
ATT400C1
1
320х200
1
1
ATT400C2
2
320х200
2
1
ATT400C3
3
320х200
3
1
ATT400MED
4
640x200
1
ATT400HI
5
640x400
1
VGALO
0
640x200
16 түс
4
VGAHI
2
640x480
16 түс
1
VGAMED
1
640x350
16 түс
2
IBM8514LO
0
640x480
256 түс
IBM8514
0
720x350
IBM8514HI
1
1024x768
256 түс
Графикалық режимнен шығып, текстiк режимге көшу үшiн, мына функцияны
пайдалану керек:
void far closegraph (void);
жəне
void far restorecrtmode (void);
closegraph ( ) функциясы программа текстiк режимде жұмыс iстеуiн жалғастыратын
болса, пайдаланады. Бұл функция графикалық функциялар пайдаланатын жадыны
босатады жəне initgraph () функциясын шақырғанға дейiнгi, текстiк режимдi орнатады.
Егер программа жұмысын бiтiрсе, онда restorecrtmode ( ) функциясын пайдалануға
болады. Initgraph () функциясын алғашқы шақырғандағы, текстiк режимде видеоадаптердi
орнатады.
Сiздiң компьютерiңiзде орнатылған графикалық видеоадаптердiң типi, графикалық
режимде қанша түстер саны жəне қандай түстер пайдаланатындығын анықтайды. CGA
жəне EGA адаптерлерiнiң арасында бiршама айырмашылық бар. Алдыңғы таблицада
түстер саны келтiрiлген.
Фонның түсiн орнату мына функция бойынша:
void far setbkcolor (int color);
ал палитраны өзгерту мына функция бойынша:
void far setpalette (int index, int color);
бұл функция CGA видеоадаптерiнде қолданылмайды.
Графикалық экранды пиксельдер массивi деп қарастырылады. Əрбiр пиксель
экрандағы бiр нүктеге сəйкес келедi жəне өзiнiң түсi болады. Экран нүктесiнде (x,y)
координаттарымен пиксельдiң түсiн орнату үшiн, мына функцияның көмегiмен
орындалады:
void far putpixel (int x, int y, int color);
Негiзгi line() жəне circle()«сурет салатын» функциялар болып табылады. Олардың
прототиптерi-
void far line (int x, int y, int x1, int y1);
void far circle (int x, int y, int radius);
line () функциясы экранда (x,y) координаталы нүктеден (x1,y1) координаталы
нүктеге дейiнгi, ағымды түспен түзу сызықты сызады.
Circle () функциясы экранда ортасы (x,y) координаталы нүктеде, радиусы radius
(өлшем бiрлiгi - пиксель) бойынша жəне ағымды түспен дөңгелектi салады. Үнсiздiк
бойынша ағымды түс -ақ болады. Ағымды түстi, яғни сызық салынатын түстi, setcolor ()
функциясын прототипi арқылы өзгертуге болады.
void far setcolor (int color);
Басқа да «сурет салатын» функцияларға мыналар жатады:
arc()
дөңгелектiң доғасын салады;
drawpoly
көпбұрыштың контурын салады;
ellipse()
эллипстi салады;
lineral
ағымды нүктеден, салыстырмалы арақашықтықпен берiлген нүктенiң
сызығын салады;
lineto()
ағымды нүктеден, (x,y) координаталы нүктеге дейiнгi сызықты
салады;
mofeto()
ағымды нүктенi, (x,y) координаталы нүктеге орналастырады;
rectangle()
төртбұрыш салады;
setspestratio() үнсiздiк бойынша орнатылған сығылу коэффициентiн өзгертедi;
setlinestyle() сызықтың стилiн жəне енiн орнатады.
Прототиптi сипаттау мысалы ретiнде, rectangle() функциясының прототипiн келтiремiз:
void far rectangle(int left, int top, int right, int bottom);
Тұйық контурды бояу үшiн floodfill () функциясы қолданылады, берiлген шаблон
бойынша, беiлген түспен облысты бояйды. Оның прототипi-
void far floodfill (int x, inty int bordecolor);
мұндағы х жəне у -контур iшiндегi нүктенiң координаттары, bordecolor -контур түсi.
void far setfillstyle (int pattern, int color);
функциясы бойынша толтырудың түсi мен шаблонын орнатады.
Сонымен қатар, контурды сызатын жəне контурдың iшiндегi облысты бояйтын
функциялар жиыны бар:
bar()
толтырылған төртбұрыш,
bar3d() толтырылған бағана,
fillelipse()
толтырылған эллипс,
pieslice()
доғаның толтырылған секторы,
sector()
эллипстiк сектордың толтырылуы.
Borland C++ жүйесiнiң графикалық функциясының кейбiр функциясын атап өтейiк:
setfillpattern() пайдаланушы анықтайтын, шаблонды бередi;
getfillpattern() толтырудың шаблонының типiн қайтарады;
getfillsetting()
шаблон жəне толтыру түсi туралы информацияны қайтарады;
getlinesetting()
ағымды стиль, сызықтың түсi жəне енi туралы информацияны
қайтарады;
getpixel()
(x,y) нүктесiнде пиксельдiң түсi туралы хабарлайды.
Графикалық режимде текстi экранға шығару үшiн, төмендегi функциялар
пайдаланады.
Outtext()
ағымды позициядан бастап, экранға жолды шығарады.
Outtextху() берiлген позициядан бастап, экранға жолды шығарады;
settextjustify()
текстi түзетудiң режимiн орнатады;
setusercharsize()
текстiң үлкейтудiң коэффи-циентiн, шрифтiн, стилiн орнатады;
textheight() пиксель бойынша жолдың биіктігін қайтарады;
textwith()
пиксель бойынша жолдың енін қайтарады;
Программанының жұмыс істеу уақтысында, графикалық операцияларды орындау
барысында қателер пайда болуы мүмкін. Программалардың жұмыс істеуін қауіпсіздендіру
үшін, қателерді өңдеуде, келесі функциялар пайдаланады:
graphresult() орындалудың қате кодын, соңғы графикалық операция үшін
қайтарады;
grapherrormsg()
берілген қате коды арқылы қате жолы туралы хабарламаны
қайтарады.
Borland C++ графикалық кітапхананы пайдаланудың программасына мысал:
ґ1 Mысалы
# include
/*Вorland C++ графикалық функцияларды пайдалану*/
main (void)
{int driver, mode, errorcode;
register int i;
driver= DETECT;
initgraph (&driver, &mode, “”);
errorcode=gaphresult();
if (errorcode і= grOK) /*егер қате болса */
{ printf (“Қате: s\n”,grapherrormsg (errorcode));
printf (“Тоқтату үшін кез келген пернені басыңыз\n”);
getch();
exit(1); /*программаның жұмысының аяқталуы */
}
rectangle (0,0,639,349);
setcolor (RED);
line (0,0,639,349);
line (0,349,639,0);
setfillstyle (5, GREEN);
getch();
clesrviewport();
for (i=3;i<38;i+=3)
circle (50,50,i);
getch();
restorecrtmode();
return 0;}
Тағы бір мысал - палитрамен жұмыс істейтін функцияларды пайдалану.
ґ2. Мысалы
# include
# include
# include
# include
void main (void)
{int gd=DETECT,gm;
initgraph (&gd,&gm, “F:\\BC31\\BGI”);
struct palettetype save , palette;
getpalette (&save);
getpalette (&palette);
for (int i=o; i<10; i++)
{setfillstyle (SOLOID_FILL, 6+i);
setcolor (6+i);
fillellipse(getmaxx()/2,getmaxe()/2,(10-i)*10,(10-i)*10);
}
while (і Kbhit())
{int temp=palette.colors[6];
for (int i=7; i<16; i++) //Shift palette
palette.colors[i-1]=palette.colors[i];
palette.colors[15]=temp;
setallpalette(&palette);
delay(100);
}
getch();
closegraph(); }
Бір варианттың орындалу үлгісі
ґ1 Тапсырма
Функцияның графигін құру.
# include
/*Тамаша картинкалар*/
/*псевдополярлық координанатадағы график*/
# include
# include
# include
# include
# define PI 3.141593
void main (void)
{int A,B,C,M;
double step =0.01;
int x,y,r;
M=100; /*Масштабты көпмүшелік */
printf (“Бүтін санды енгіз:\n A=”);
scanf (“%d”,&A);
printf (“B=”);
scanf (“%d”,&B);
printf (“C=”);
scanf (“%d”,&C);
int gd=DETECT ,gm;/*Графиканың инициализациясы*/
initgraph (&gd,&gm,””);
setbkcolor(BLUE);
cleardevice ();
set color (YELLOW);
setlinestyle (SOLID_LINE,0,NORM_WIDTH);
/*Графиканың құрылуы*/
moveto (320,160);
for (double fi=0;fi<2*PI; fi+=step);
{r=M*sin(C*fi);
x=320+r*sin(A*fi);
y=160+ r*cos(B*fi);
lineto (x,y)
}
getch ();
closegraph();}
Нəтижесі:
Бүтін санды енгіз:
A=4
B=5
C=7
BGI Error: Graphics not initialized (use ‘initgraph’)
Поделитесь с Вашими друзьями: |