мұндағы
p-
өрнек
; fscanf(fp, “спецификация шаблоны”,адрес); Мысал: Бүтін сандар тізбегін n=5 пернелерден енгізіп, оларды файлға жазу керек
болсын.
// файл ашып, оған 5 сан жазу #include #include main() { int k,i,n=5; char fname[]="a:\\num.txt\0"; clrscr(); FILE *fp; fp=fopen(fname,"w"); printf(" Енгізілген сандар
%s
файлына жазылады
\n", fname); puts(" Әр сан енгізілген соң, Enter басыңыз
\n"); for(i=0; i {scanf("%i",&k); fprintf(fp,"%d ",k); } fclose(fp); printf(" Енгізілген сандар %s файлына жазылды
\n",fname); getch(); } Бақылау сұрақтары 1. Файл дегеніміз не? Ол не үшін пайдаланылады? 2. Файл қайда орналасады және қалай белгіленеді? 3. Файл ашу функциясы қалай жазылады? 4. Файл атын программада қалай анықтаймыз? 5. Файлдың қолданылу режимдері қалай көрсетіледі? 6. Файлға мәлімет жазу/оқу функциялары. 7. Файлға жаңа элемент қалай қосылады? 8. Мәлімет оқылған файлға мәлімет жазуға бола ма? 9. Файлдан ақпарат оқу үшін не істеу керек? 10. Файлға ақпарат жазу үшін не істеу керек? 11. Символдар мен сөз тіркестерін файлға жазу үшін не істеу керек? 12. Құрылымдарды пайдаланатын файлдар қандай функцияларды пайдаланады? 53
13 дәріс. Графикалық режимде жұмыс істеу
С тілінде растрлық графика жұмыс істейді, оның тақырыптық файлы
graph.h .
График нүктелерден – пиксельдерден тұрады. Пиксель – экранның адрестелетін ең кіші элементі. Алдымен графика шығара алатын бейнережимді іске қосу керек.
Мұнда экранның пиксельмен берілген мөлшері және түстер саны беріледі.
Графикада үш координаталық жүйе: абсолюттік, салыстырмалы және
масштабталған жүйе қолданылады. Тіке және көлденең өстер бойынша пиксельдер
саны экран типіне байланысты болады.
Абсолюттік координатада координаталар басы – (0;0) нүктесі сол жақ жоғарғы
бұрышта болып саналады, х координатасы солдан оңға қарай, у координатасы
жоғарыдан төмен қарай өседі. Салыстырмалы режимде координаталар басы экранның кез келген нүктесіне
ауыстырыла алады.
Масштабталатын режимде экран бетінде масштабталған координаталар беруге
болады, онда х пен у өстері бойынша минимум және максимум мәндер енгізіп, жұмыс
істеуге мүмкіндік бар.
Жалпы абсолюттік графикалық режимде
−
әрбір пиксель берілген 16 түстің біріне боялады;
−
(0,0) –
экранның сол жақ жоғарғы бұрышы координатасы;
−
әр түрлі фигураларды экранға шығару үшін алдын ала графикалық режимді іске
қосып алу керек.
Жалпы дисплей адаптерлері графикалық режимде 200, 350, 600 нүктелерден
тұратын экран жолдарының әрқайсысында 640, 720, 800 нүктелер тізбегін бейнеле
алады. Мұндағы нүкте деп отырғанымыз – көлемі 0,8х1 мм2 шамасында болып
келген (CGA) кішкентай тіктөртбұрыш, яғни пиксель.
Әрбір нүктенің координаталары екі бүтін санмен (Х, У) анықталады. Дисплей
экранына график салу үшін оның нүктелерінің координаталарын көрсету қажет.
Координаталар басы (0,0) болып экранның сол жақ жоғарғы бұрышы есептеледі. Х координаталары (бағаналар немесе позициялар нөмірлері) солдан оңға қарай, ал У мәндері (жолдар немесе қатарлар) жоғарыдан төмен қарай өсіп отырады. Мысалы,
VGA адапте-рінің экран бұрыштарының координаталарын Х=0..799, Y=0..599
аралығында көрсету қажет. Экранда Х өсі солдан оңға қарай, Y өсі жоғарыдан төмен
қарай бағытталған, ал оның шеткі нүктелерінің координаталары суретте көрсетілген.
Олардың ең жоғарғы мәндері пайдаланылған экран адаптеріне тәуелді болады,
яғни (0,0)..(320х200), (0,0)..(640х480), (0,0)..(800х600) аралықтарында және т.б. болуы
мүмкін. Сонымен, графикалық режимде экрандағы кез келген объект көрініп тұрған
нүктелер тобынан тұрады. Мәтіндік режимнен графикалық режимге көшкенде экран
тазартылады. Графикалық режимде экраннан курсор көрінбейді. Дисплей экранының
бетіне (кейін қағазға) нүкте, түзу немесе қисық сызық, шеңбер, эллипс және кез
келген тұйық сызық сызып шығаруға болады. Сонымен қатар тұйық сызықтардың
ішін әр түрлі түске бояп қою мүмкіндіктері де бар. Сызықтарды жылжыту, айналдыру
және басқа орынға көшіру арқылы көрнекі бейнелер мен мультфильмдер жасауға
болады.
График тұрғызу үшін оны шығару немесе бастау нүктесін көрсету қажет. Мәтіндік
режимде ол курсор позициясы болып саналады, ал графикалық режимде көрініп
тұратын курсор жоқ, бірақ экранда көрінбейтін курсор тәрізді сілтеме белгі CP
(current poіnter) бар. Негізінде оны да курсор деп қабылдауға болады.
54
Графикалық режимдегі жұмыстарды атқаратын Турбо Си нұсқасында бірсыпыра
графикалық функциялар бар, енді біз солардың негізгілеріне тоқталып өтеміз.
Графикалық режимде жұмыс істеу былай басталады:
#include #include #include void main ( ) { int gdriver = DETECT; // драйвер int gmode; // режим аты int errorcode; // қате коды initgraph (&gdriver,&mode, "C:\\TC\\bgi\\"); errorcode = graphresult(); if errorcode != grOk) // іске қосу қатесі {printf(" Қате : %d\n", errorcode); puts("Аяқтау үшін Enter басыңыз") ; getch (); } ... Ары қарай программа мәтіні... getch(); closegraph ( ); }
13 .1. Графикалық режим орнату, одан шығу, мәтін жазу, сызық салу функциялары
Графикалық режим драйверін іске қосу функциясы
initgraph(&Driver,&Mode,Path); Driver параметрі бейнелік жүйе драйверін анықтайды, Mode параметрі – бейнелік
жүйе жұмыс режимін береді, ал Path параметрі – драйвер файлының орнын көрсетеді.
Көбінесе
Driver параметрі мәніретінде detect болатын бүтін константа
қолданылады. Мұндайда initgraph функциясының өзі графикалық драйвер типін
анықтап, ең дұрыс режимді таңдап алады. Тақырыптық файлы:
Драйвер дұрыс оқылған соң, initgraph( ) функциясы 4К көлемінде (келісім
бойынша) ішкі графикалық буфер ұйымдастырады да, экран түсі, сызықтар түсі
анықталып, дисплей адаптері графикалық режимге кіреді. Экран тазаланып, курсор
сол жақ жоғарғы бұрышқа орнатылады.
Егер BGI-файлдар ағымдағы бумада болса, initgraph() функциясының үшінші
параметрі ретінде бос орын мәнін беруге болады
initgraph(&Driver,&Mode," "); Графикалық режимнен шығу және оған бөлініп берілген жады бөлігін босату
үшін, яғни бейнеадаптер буферін тазартып, бұған дейінгі мәтіндік режимді қалпына
келтіру мақсатында мына функция қолданылады
closegraph(); Графикалық режимде сызық түстерін, тұйық сызықтар ішін түрлі түске бояуға
болады. Ол үшін мәтіндік режимдегідей түстер кодтары және олардың ағылшынша
атаулары қолданылады.
Курсор орнын анықтау функциялары getx(); gety(); Функциялары курсор тұрған орын координаталарын х (у) береді.
maxx(); getmaxy(); 55
getmaxx() функциясы экранның оң жақтағы ең шеткі нүктесінің x координатасын
анықтайды, ал getmaxy() функциясы — экранның ең төменгі у нүктесі координатасын
анықтайды. Сызықтар түсін тағайындау функциясы setcolor(col);
мұндағы
сol – түс атауы немесе түс коды. Сызық және мәтіндер түсі осы
функциямен беріледі. Ал сызық типі
setlinestyle()
функциясы арқылы
тағайындалады.
Түстер бүтін сан түріндегі кодпен немесе константа түрінде бас әріппен жазылатын
ағылшынша түс атауларымен беріледі.
Түстердің стандартты белгіленулері төмендегідей:
Көмескі түстер Кодтары Ашық түстер Кодтары
Қара (BLACK)
0
Қара қошқыл (DARKGRAY)
8
Көк (BLUE)
1
Көкшіл (LIGHTBLUE)
9
Жасыл (GREEN)
2
Ақ жасыл (LIGHTGREEN )
10
Көгілдір (CYAN)
3
Ақшыл көк (LIGHTCYAN)
11
Қызыл (RED)
4
Қызғылт (LIGHTRED)
12
Күлгін (MAGENTA)
5
Қызғыш (LIGHTMAGENTA)
13
Қоңыр (BROWN)
6
Сары (YELLOW)
14
Сұр (LIGHTGRAY)
7
Ақ (WHITE)
15
Мысалы:
setcolor(YELLOW); setcolor(3); setcolor(5); Экранның фоны түсінөзгерту функциясы setbkcolor (түсі); Мысалы:
setbkcolor(BLUE); setbkcolor(14);
Мәтіншығаруфункциялары Графикалық режимде экранға мәтін шығарарда символдар көлемін, бағытын (тік,
көлденең), бекітілген бірнеше қаріп түрінің бірін таңдау мүмкіндіктері бар. Осындай
символдар параметрлері мынадай функция арқылы беріледі: settextstyle (Қаріп,Бағыты , Көлемі ); outtextxy және outtext функциялары арқылы шығарылатын мәтіндердің қаріп түрін,
көлемін және бағытын тағайындайды.
Қаріп (шрифт) параметрі ретінде төмендегі
константалардың бірін пайдалануға болады.
Константа Мәні Қаріп типі DEFAULT_FONT
0 Стандартты. Әрбір символ 8 х 8 пиксел көлемдегі
квадрат ішіне шығарылады.
TRIPLEX_FONT
1
Triplex шрифті (TRIP.CHR файлы)
SMALL_FONT
2
Майда шрифт (LITT.CHR файлы)
SANSSERIF_FONT
3
SansSerif
тік шрифті (SANS.CHR файлы)
GOTHIC_FONT
4
Готикалық шрифт (GOTH.CHR файлы)
Орысшрифтері тек стандартты түрде ғана (default_font) шығарылады.
Бағыты параметріберілгенмәтінді тік немесе көлденең беруді тағайындайды, оның мәндері:
HORIZ_DIR
0
Солдан оңға қарай
VERT_DIR
1
Төменнен жоғары қарай 56
Көлемі 1-ден 10-ға дейін өзгере алады. Бұл шама DEFAULT_FONT стандартты
қарпі (8х8 пиксел) үшін әр символды неше есе үлкейту керек екендігін көрсетеді
(стандартты матрица 8*8 болғандықтан, егер көлемі 4 болса, онда символдар 32*32
пикселдік матрицаға дейін үлкейеді).
Экранға мәтін шығару функциясы outtext (" Мәтін "); қостырнақшаға алынған мәтінді курсор тұрған орыннан бастап экранға шығарады.
Мәтін ішінде басқару символдары болмауы тиіс, мысалы, \n. Шығарылатын
символдар түсі setcolor, шрифт типі — settextstyle функцияларымен беріледі.
Мысалы:
setcolor(4); moveto(250,10);outtext(" Омаров Марат "); Экрандағы көрсетілген орынға мәтін шығару функциясы outtextxy(x,y, " мәтін ");
Курсорды алдымен х, у нүктесіне орналастырып алып барып, мәтінді экранға
шығарады. Мәтін шығарылған соң, курсор бұрынғы орнында
(х,у)қалады.
Шығарылатын символдар түсін – setcolor(), қаріп типін — settextstyle() функциясымен беруге болады. Мысалы:
setcolor(4); outtextxy(250,2," Омарова Айман "); Компьютер бейнежадына пиксел жазу функциясы putpixel(x,y, Түсі) ; координатасы (
х, у) пиксел-нүктені Түсі санынабайланысты бояп шығады.Түсі ағылшынша сөзбеннемесекодпен беріледі. Бұл функцияны цикл ішіне орнатып,
сызықтар сызуға болады. Мысалы:
setcolor(BLUE); for (x=20; x<=200; x++) putpixel(x,100, BLUE); for (y=100; y<=280;y++) putpixel(200,y, BLUE); line(200,280,20,100); Түрлі сызықтар салу үш функция арқылы орындалады 1) line (x1,y1,x2,y2); x1,y1 нүктесінен x2,y2 нүктесіне дейін сызық сызады, бірақ мұнда курсор орны
өзгермейді.
2) lineto (x,y); Курсор тұрған нүктеден
х , у нүктесіне дейін сызық салады, мұнда курсор бұрынғы
орнынан жаңа орынға ауысады.
3)
linerel (dx,dy);
Курсор тұрған
х,у нүктесінен х+dx,у+dy нүктесіне дейін сызық салады, яғни
сызық координаталары салыстырмалы түрде беріледі. Мұнда да курсор бұрынғы
орнынан жаңа орынға ауысады.
Сызықтар осыған дейінгі setcolor() функциясы тағайындаған түспен және
setlinestyle() функциясы арқылы орнатылған стильмен сызылады. Мысалы, ромб
сызудың екі тәсілін келтірейік.1 тәсіл setcolor (GREEN); moveto(100,10); lineto(50,90); lineto(100,170); setcolor(RED); lineto(150,90); lineto(100,10); A(20,100)
B(200,100)
C(200,280)
13.1 сурет. Түзу сызықтар салу 57
2 тәсіл setbkcolor (WHITE); setcolor (GREEN); line(100,10, 50,90); line(50,90, 100,170); setbkcolor (RED); line(100,170,150,90); line(150,90, 100,10); 13.2. Сызық стильдерін беру Геометриялық фигуралар сызықтарының қалыңдығы мен түр сипатын беру функциясы setlinestyle(tip,obr,tol); сызықтар стилін береді, мұндағы
tip –
алдын ала анықталған константа, ол сызық
ти-пін береді.
tol –
сызық қалыңдығын
анықтайтын константа
(NORM_WIDTH -
қалыпты,
THICK_WIDTH -
қалыңырақ). Егер программалаушы анықтаған сызық
типі қолданылатын болса, онда
obr
мәні төрт таңбалы оналтылық константа болып,
ол ұзындығы 16 пиксел сызық кесіндісін кодтау үлгісі болуы тиіс.
tip константасының мүмкінмәндері (сызықтық элементтер үшін)
0
SOLID_LINE (
жай сызық )
1
DOTTED_LINE (
пунктир сызық – нүктелерден тұрады)
2
CENTER_LINE (
штрих-пунктир сызық – нүктелер мен сызықшалардан тұрады)
3
DASHED_LINE (DOTTED_LINE сызығынан ұзындау келген пунктир сызық)
4
USERBIT_LINE (программалаушы анықтаған сызық)
tol –
қалыңдығы параметрінің мүмкін мәндері
1
NORM_WIDTH (қалыңдығы бір пиксел)
3
THICK_WIDTH (қалыңдығы үш пиксел)
obr
параметрі
tip константасымәндері 4-ке тең болғанда ғана жұмыс
істейді (қалған жағдайларда ол қарастырылмайды, сондықтан оны 0 деп алуға
болады). Оның көмегімен кез келген периодты түрде қайталанатын сызық түрін
бере аламыз, оның периоды 16 пиксел болуы тиіс. Егер сызықта жарықтанатын
пиксел керек болса, үлгіде 1-ге тең бит, болмаса – 0-ге тең бит алу керек.
Сонымен,
obr
мәні төрт таңбалы оналтылық константа болып, ол ұзындығы 16
пиксел сызық кесіндісін кодтау үлгісі болуы тиіс.
Мысалы, шаблон для пунктир сызық үшін алынған үлгі мынадай болуы
мүмкін: 0x3333, бұл мынадай биттер тізбегіне сәйкес келеді 0011 0011 0011 0011.
Графикалық режимде экрандағы тұйық сызық іші белгілі бір түспен боялуы
мүмкін.
Шеңбер сызу функциясы circle(x,y,r); радиусы r (бүтін сан), центрінің координаталары (х, у)болатын шеңбер сызады.
Сызық түсі setcolor () функциясымен беріледі. Мысалы, қызыл түсті 5 шеңбер
сызайық:
центрінің
координатасы
(х, у),
радиусы берілген
доға
сызады.
БұрышБасы , БұрышСоңы параметрлері бұрышты градуспен горизонталь х өсінен
бастап, сағат тіліне қарсы бағытта береді. Радиуспараметрідоға радиусын бүтін
санмен береді. Бұрыштар мәні периодына сәйкес эквивалентті түрде [0..360]
интервалындағы мәндерге келтіріледі. Мысалы,
arc(х,у, -45,45,r)
және
arc(х,у,675, -315,r)
шеңбердің бір ширегіне сәйкес бір доғаның екі түрде
берілуін көрсетеді.
Эллипс доғасын сызу функциясы ellipse(x,y, БұрышБасы , БұрышСоңы , rх,rу ); центрінің координаталары (х, у) эллипс немесе эллипс доғасын сызады.
БұрышБасы , БұрышСоңыпараметрлері доғаның басы мен соңын градуспен сағат
тіліне қарсы береді.
rx,
ry параметрлері эллипстің көлденең және тік радиустарын
береді. Эллипс өстері координаталар өстеріне параллель болады.
Іші боялған контурлы эллипс салу функциясы
fillellipse (х,у, rх,rу); мұндағы х, у – центр координаталары; rх, rу – пикселмен берілген эллипс жарты
өстері радиустары. Эллипс өстері координат өстеріне параллель болады. Эллипс
ағымдағы түспен боялып шығады.
Тұйық сызықпен қоршалған аймақтың ішін бояу функциясы floodfill (x,у, шекара); мұндағы х, у – боялатын аймақ ішіндегі нүкте координатасы. Тұйық аймақты
қоршаған сызық контурында тесік болмауы тиіс, әйтпесе бояу бүкіл экранды сол
түске бояп жібереді. Контур түсі шекара түсімен бірдей болуы тиіс. Бояу түсі мен
типі setfillstyle() функциясымен орнатылады. Енді бір мысал келтірейік.
// боялған шеңберлер, эллипстер салу – kr_krug.cpp #include #include #include void main () { int gd=DETECT,gm,r,x=120,y=240; initgraph(&gd, &gm,"C:\\TC\\BGI"); setcolor(RED); //сызықтар жасыл түсті setbkcolor(BLUE); // фон көк түсті for(r=0; r<80; r++) //концентрлі circle(x,y,r); //80 қызыл шеңбер салу setfillstyle(SOLID_FILL,RED); x+=200; circle(x,y,80); // қызыл шеңбер floodfill(x,y,RED); // іші де қызыл x+=200; fillellipse(x,y-150,80,50); //қызыл эллипс setfillstyle(SOLID_FILL,GREEN); fillellipse(x,y,80,50); //жасыл эллипс setfillstyle(SOLID_FILL,YELLOW); fillellipse(x,y+150,80,50); //сары эллипс getch(); closegraph(); }
59
15 дәріс. С программасын орындау ортасы ТурбоС редакторы терезесі TurboС программалау жүйесі программаны теріп, оны орындауға мүмкіндік береді.
Жалпы тұтынушы мынадай әрекеттерді орындай білуі керек: программаның
мәтінін жазып, дискіде программа файлы ретінде сақтау; программаны компиляция- дан өткізіп, егер синтаксистік қателері бар болса, оларды түзету; программаны
орындап, нәтижесін алу.
Сонымен, кез келген программа оны теру, компиляциялау, құрастыру,
атқарылушы модульді жасау және орындап нәтиже алу сатыларынан өтуі тиіс.
С тілінің біріктірілген (интегралданған) ортасында программа орындау төменде-
гідей қадамдардан тұрады:
1) компилятор қажет файлдарды іздеп тауып алуы үшін ортаның параметрлерін
тағайындау;
2) программалық файлды редактор орасына жүктеу немесе теру;
3) атқарылатын модульді (орындалатын файлды) жасау;
4) программаны іске қосу және орындау;
5) программада қате болса, оны жөндеп түзету.
Программа құру үшін, ең алдымен ТурбоС біріктірілген ортасымен жұмыс істей
білу керек.
ТурбоС ортасы – арнайы көп терезелі мәтіндік редактор. Ол
көбінесе
С:\TC\BIN\tс.exe файлын іске қосу арқылы немесе
соның жарлықтарының бірін іске қосу жолымен жүктеледі:
ТС.ЕХЕ файлының жұмыс істеу барысында экранда ТурбоС
ортасының негізгі терезесі ашылады (15.1-сурет). Осы орта
ДА
орыс (қазақ) әріптерін теру мүмкіндігін беретін C.bat пакеттік файлының мәтінін
мынадай түрде құрастыруға болады:
C.bat файлын немесе оның жарлығын шерту арқылы да ТурбоС ортасы ашылады.
Ол іске қосылған соң, орыс әріптеріне және ағылшын әріптеріне ауысу қос Shift
пернелерін (ол басқаша да болуы мүмкін) қатар басу арқылы орындалады.
TурбоС редакторы DOS ортасында жұмыс істейтін көкшіл экранға шығады. Ол
төрт бөліктен тұрады (18.1-сурет): меню жолы, түзету/теру терезесі, мәлімедеме
хабарлар терезесі, қалып қатары.