«ЖҮйелік программалау технологиясы»


С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн.Задачи по  программированию - Москва:Наука-1988.-224 бет



жүктеу 0.8 Mb.
Pdf просмотр
бет7/8
Дата25.04.2017
өлшемі0.8 Mb.
1   2   3   4   5   6   7   8

 

С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн.Задачи по 

программированию - Москва:Наука-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 



MCGA 

EGA 



EGAMONO 


IBM8514 


HERCMONO 

ATT400 


VGA 


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 

320х200 



CGAC1 



320х200 


CGAC2 



320х200 


CGAC3 



320х200 


CGACHI 



320х200 


 

MCGACO 



640x200 


MCGAC1 



320х200 


MCGAC2 



320х200 


MCGAC3 



320х200 


MCGAMED 



640x200 


 

MCGAHI 



640x480 


 

EGALO 



640x200 


16 түс 

EGA64LO 



640x200 


16 түс 

EGAHI 



640x350 


16 түс 

EGA64HI 



640x350 


4 түс 

EGAMONOHI 



640x350 


HERCMONOHІ  0 



720x348 

 



ATT400 

320х200 



ATT400C1 



320х200 


ATT400C2 



320х200 


ATT400C3 



320х200 


ATT400MED 



640x200 


 

ATT400HI 



640x400 


 

VGALO 



640x200 


16 түс 

VGAHI 



640x480 


16 түс 

VGAMED 



640x350 


16 түс 

IBM8514LO 



640x480 


256 түс 

 

IBM8514 



720x350 


 

 

IBM8514HI 



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’) 



Каталог: dmdocuments
dmdocuments -> Қазақ филологиясы кафедрасы
dmdocuments -> Айса байтабынов эпик жыршы
dmdocuments -> Мүхамбетқалиев С., Ахметов К.Ғ, Ғабдуллин Х. А. Байүлы мен Жетіру және Төре, Төлеңгіт
dmdocuments -> Көпбаева М. Р. ф.ғ. к., М. Әуезов атындағы Оңтүстік
dmdocuments -> Н. С. Тілеуханов
dmdocuments -> Т.ӘЛімқҰловтың «Қараой» ӘҢгімесіндегі махамбет тұЛҒасы акбулатова С. Б
dmdocuments -> Батыс қазақстандық КҮй дәСТҮрін әлемге мойындатқан қҰрманғазы рухы с. Ә. Күзембай
dmdocuments -> Кафедрасының отырысы шешімімен бекітілген. Педагогикалық жоғары оқу орындарының студенттеріне арналған. Орал, 2011

жүктеу 0.8 Mb.

Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8




©emirb.org 2020
әкімшілігінің қараңыз

    Басты бет