
- •1.Си программалау тілі туралы түсінік
- •2.Сызықтық құрылымды алгоритм. Мысал.
- •3.Си тілінде жазылған программаның құрылымы
- •4.Файлдармен жұмыс
- •5.Си тілінің қарапайым элементтері
- •6.Берілгендерді енгізу операторлары. Мысал
- •7.Float және double жылжымалы нүктелі нақты сандар типтері
- •8.Файлға мәлімет жазу және оқу
- •10. Графикалық режим орнату, одан шығу, мәтін жазу, сызық салу функциялары
- •11.Си тілндегі негізгі операторлар
- •12.Си программасын орындау ортасы
- •13.Программа жұмысын басқару операторлары
- •14.While операторы. Қолдану мысалдары
- •15.Шартты операторлар
- •16.Бүтін сан түріндегі мәліметтерді сипаттау
- •18. Екі өлшемді массивтер.Мысалдары.
- •19.Тұтынушы функциясын пайдалану
- •20. Блок-схема және оның қызметі
- •21. Алгоритмнің циклдік құрылымы
- •22.Айнымалылардың әрекет ету аймағы
- •23.Do... While цикл операторы
- •24.Массив дегенымыз- реттелген бір текті элементтердің жиыны
- •25.Таңдау операторлары - бұлар шартты оператор және ауыстырғыш.
- •26.Құрылымдарды пайдалану
- •27.Си тілінде кездейсоқ сандарды пайдалану
- •28.Қарапайым программа.Препроцессор.
- •29.1.Массивтерді өңдеу есептерінің түрлері (кластары)
- •30.Символдық тіркестер (жолдар, қатарлар)
- •32.Блок-схемада қолданылатын геометриялық фигуралардың атқаратын қызметі
- •33.Массивті сұрыптау (іріктеу, реттеу).
- •34. Си тілінің графиктік операторлары.
- •35. Жай алмастыру арқылы сұрыптау.
- •36. Бір өлшемді массивтер және оларды енгізу, шығару
- •37. Адрестік операциялар
- •38. Printf () функциясы
- •39. Массивтер және массивтерге қолданылатын нұсқауыштар
- •40. Бір өлшемді массивтер және оларды енгізу, шығару
- •41.Нұсқауыштарға қолданылатын операциялар
- •42.Return () функциясы
- •43.Көрсеткіштерді пайдаланып жиымдармен жұмыс істеу
- •44.Тақырыпта қолданылатын стандартты файлдар
- •45.Символдық тіркестер
- •46.Getch() функциясы
- •47. Матрицаның барлық элементтерін өңдейтін алгоритмдер
- •48. Басқарушы символдар
- •49. Символдық таңбаларды енгізу/шығару
- •50. Формат символдары
- •51. Сөз тіркестерін енгізу және шығару функциялары
- •52. Препроцессордың қызметі
4.Файлдармен жұмыс
Файл – сыртқы есте сақтау құрылғыларында (магниттік дискілерде) орналастырылған және мәлімет өңдеу, тасымалдау кездерінде біртұтас күйде қарастырылатын мәліметтер жиыны.
Файлдармен жұмыс істеу үшін оларды алдымен ашу керек, яғни файл туралы мәліметті – атын, адресін программаға белгілі ету қажет.
Си тілінде файл ашу fopen() функциясы арқылы орындалады. Ол сыртқы құрылғыдағы физикалық файлды, мысалы, А:\NUR.DAT, программадағы оның логикалық атымен байланыстырады. Логикалық ат дегеніміз – файлға нұсқауыш, яғни файл туралы мәлімет сақталатын жады аймағына сілтеме жасау. Файлға нұсқауыш сипатталуы тиіс.
Сонымен, файлдармен жұмыс істегенде нұсқауыштар қолданылады. Файлға нұсқауыш мынадай түрде сипатталады:
FILE *fp;
мұндағы FILE типі – <stdio.h>тақырыптық файлында анықталған құрылым. Бұл нұсқауышты көрсетілген файлмен сол файл ашылғаннан бастап, байланыстырып қоюға болады. Ол үшін келесі функция пайдаланылады:
fopen ("файл адресі/аты","қатынасу типі");
ол файлға нұсқауыш мәнін қайтарады немесе қате болса, NULL мәнін береді.
Мысалы, мынадай оператор орындалуы нәтижесінде
fp = fopen ("ex1.txt", "w");
жұмыс бумасындағы ex1.txt файлы оған мәлімет жазу (write) үшін ашылады, ал программада бұл файлды fp нұсқауышы арқылы пайдаланамыз (яғни fopen() функциясы файлдың сыртқы атын оның программада қолданылатын ішкі логикалық атымен байланыстырады).
Сонымен, файлды ашатын fopen() функцияcының жалпы жазылуы:
fp = fopen(name,mode)
мұнда fp – файлға сілтейтін нұсқауыш; name – файлдың адресін де көрсетуге болатын аты, көбінесе символдық тіркес арқылы жазылады; mode – файл қандай режимде қолданылатынын көрсететін параметр, бұл да символдар тіркесімен төмендегідей түрде жазылады:
"r" – файлды оқу үшін ашу (файл бұрын ашылған болуы тиіс);
"w" – бос файлды информация жазу үшін ашу;
"a" – файл соңына мәлімет қосып жазу үшін оны ашу;
"r+"– файлдан информация оқу және оған информация жазу үшін ашу);
"w+"– бос файлдан информация оқу және оған мәлімет жазу үшін файл ашу (бұрын файл болса, ол өшіріледі);
"a+"– файлдан информация оқу және оның соңына информация қосып жазу үшін ашу).
"t" – файл мәтіндік (текстік) режимде ашылады, ол rt, wt, at, т.с.с. болып көрсетіле береді.
"b" – файл екілік режимде ашылады, rb, wb, ab, т.с.с. болып көрсетіле береді.
Келісім бойынша файл көбінесе мәтіндік режимде ашылады.
Файлмен жұмыс істеп болған соң, оны жабу үшін келесі функция қолданылады:
fclose(файл_нұсқауышы).
Файлға мәлімет жазу/оқу үшін жалпы енгізу/шығару функциялары тәріздес бірсыпыра функциялар пайдаланылады:
fprintf(), fscanf(), fputs(), fgets(), getc(), putc(), fgetc(), fputc().
Бұлардың ішіндегі getc()/fgetc(), putc()/fputc() функциялары әрекеттері ұқсас, айырмашылықтары тек getc() пен putc() макроанықтаулар да, aл fgetc() және fputc() – нағыз функциялар болып табылады.
Барлық файлдық функциялар прототиптері <stdio.h> файлында орналасқан.
Файлдардан мәлімет жазу/оқу әрекеттерін үш топқа бөлуге болады:
- символдарды енгізу/шығару операциялары;
- сөз тіркестері жолдарын енгізу/шығару операциялары;
- блок бойынша енгізу/шығару операциялары.
Символдарды енгізу/шығару операцияларында файлдан бір ғана символ оқылады немесе оған бір символ жазылады. Мысалы:
fgetc(FILE *fp); ашылған файлдан символ оқиды.
fputc(int ch,FILE *fp); ch символы кодын файлға жазады.
Сөз тіркестері жолдарын енгізу/шығару операцияларында бір мәлімет алмасуы кезінде файлдан сөз тіркесі жолдары оқылады немесе оған сөз тіркесі жазылады. Мысалы:
gets(char *S); файлдан мәлімет байттарын '\n' символы кездескенше біртіндеп оқиды да, оларды S тіркесіне орналастырып, '\n' символын ‘\0’ (нөл-терминатор) белгісіне айналдырады.
fgets(char *S,int m,FILE *fp); fp түрінде сипатталған файлдан байттарды оқып, оларды '\n' символы кездескенше немесе m байт оқылып біткенше S тіркесі мәні ретінде жазып шығады.
Блок бойынша енгізу/шығару операцияларында мәліметтер алмасу олардың бір блогын толық қамтиды. Мысалы:
fread (void *ptv, int size, int n, FILE *fp);
мұнда fp файлынан әрқайсысы size байттан тұратын мәліметтің n блогы ptv нұсқауышы көрсетіп тұрған жады аймағына оқылады (оқылатын блок үшін алдын ала орын дайындап қою қажет).
fwrite (void *ptv, int size, int n, FILE *fp);
мұнда ptv нұсқауышы көрсетіп тұрған жады аймағында орналасқан әрқайсысы size байттан тұратын мәліметтің n блогы ашық тұрған fp файлына жазылады.
fprintf және fscanf функцияларын пайдалану
fprintf - файлға информация жазу үшін, ал fscanf – файлдан информация оқу үшін қолданылады. Олардың жалпы жазылу түрі:
fprintf(fp, “спецификация шаблоны”,p);
мұндағы p-өрнек;
fscanf(fp, “спецификация шаблоны”,адрес);
Мысал: Бүтін сандар тізбегін n=5 пернелерден енгізіп, оларды файлға жазу керек болсын.
// файл ашып, оған 5 сан жазу
#include <stdio.h>
#include <conio.h>
main()
{ int k,i,n=5;
char fname[]="a:\\num.txt\0";
clrscr();
FILE *fp;
fp=fopen(fname,"w");
clrscr();
printf("Енгізілген сандар %s файлына жазылады\n",
fname);
puts("Әр сан енгізілген соң, Enter басыңыз\n");
for(i=0; i<n;i++)
{scanf("%i",&k);
fprintf(fp,"%d ",k);
}
fclose(fp);
printf("Енгізілген сандар %s файлына жазылды\n",
fname);
getch();
}
Нәтижесі:
Енгізілген сандар a:\num.txt файлына жазылады
Әр сан енгізілген соң, Enter басыңыз
1
2
3
4
5
Енгізілген сандар a:\num.txt файлына жазылды
Файлдағы мәлімет: 1 2 3 4 5
fgets және fputs функцияларын пайдалану
Сөз тіркестерімен жұмыс істегенде fgets және fputs функциялары қолданылады:
fgets функциясының жалпы жазылу түрі:
fgets(нұсқауыш,MAXLEN,fp);
нұсқауыш – ЭЕМ жадындағы орынға сілтейтін нұсқауыш; MAXLEN – оқылатын тіркестің максимальды ұзындығы; fp - файл нұсқауышы.
Мысалы:
#define L 20
main()
{
FILE *fp;
char *st[n];
fp=fopen(“stroka”,”r”);
while(fgets(st,L,fp)!=NULL)
puts (st);
}
Файлдарға сөз тіркестерін жазу үшін fputs функциясы келесі түрде қолданылады:
status=fputs(қатар нұсқауышы,fp);
status – бүтін сан, оның мәні eof функциясында жазылады, егер fputs()функциясы файлдың соңына шыққан болса немесе қате тапса, fputs функциясы жазылатын жолдың соңына /0символын жазбайды.
Төменде осы функцияларды пайдалану мысалы келтірілген.
#include <stdio.h>
void main ()
{
int n;
char str[50], str1[50], ch;
FILE *fp;
// Файлға мәлімет жазу
fp = fopen("ex.txt","w");
puts ("Бүтін сан енгізіңіз: "); scanf("%d",&n);
fprintf (fp, "%d\n", n) ;
puts ("Символ енгізіңіз: "); ch=getchar();
putc (ch, fp);
puts ("Сөз тіркесін енгізіңіз: "); gets(str);
fputs(str, fp);
fclose(fp);
// Файлдан мәлімет оқу
if((fp = fopen("ex.txt","r")) != NULL)
{
fscanf (fp, "%d", &n); printf ("n=%d\n", n) ;
ch = getc (fp); putchar (ch);
fgets(str1, 50, fp); puts (str1);
fclose (fp);
}
else printf ("\nФайлдан мәлімет оқылмайды!");
}
Мұндағы fgets()функциясының екінші параметрі N – оқылатын символдар саны, оған '\0' белгісі де қосылады.Бұл функция өз жұмысын N-1 символын оқығаннан кейін немесе '\0' белгісі кездескенде аяқтайды. Екеуінде де сөз тіркесі соңына '\0' белгісі қосылады. fgets() функциясы оқылған сөз тіркесі адресін қайтарады немесе файл оқылып болғанда (не қате шықса), NULL белгісін береді.
fputs()функциясы әрекет дұрыс орындалса, соңғы оқылған символ кодын қайтарады, ал қате болса, EOF (файл соңы) белгісін береді. Бұл функция курсорды автоматты түрде келесі жолға көшірмейді.
Жоғарыдағы функциялар файл мәліметтерін біртіндеп, символдан соң келесі символды қарастыра отырып өңдейді. Си тілі файлдармен жиым сияқты жұмыс істеуге де мүмкіндік береді, яғни кез келген байтты жеке өңдеуге де болады. Файл ішіндегі белгілі бір орынды айқындау үшін мына функция қолданылады:
fseek(файлға нұсқауыш,бастапқы нүктеден ығысу, бастапқы нүкте);
Екінші аргумент типі long, оның мәні оң да, теріс те болуы мүмкін. Ол бастапқы нүктеден қанша орынға (байтпен) ығысу керек екендігін көрсетеді. Үшінші аргумент файлдағы бастапқы нүкте орнын анықтайтын код болып табылады. Осы код үшін мынадай мәндер тағайындалған:
0 - файл басы;
1 - ағымдағы позиция;
2 - файл соңы.
Дұрыс орындалғанда, fseek()функциясы 0 мәнін береді, ал егер қате (мысалы, файлдың сол жақ шекарасынан ары аспақшы болғанда) болса, онда -1 береді.
fwrite және fread функцияларын пайдалану
Құрылымдарды пайдаланатын файлдармен жұмыс істеу кезінде fread()/fwrite()функцияларын пайдаланған ыңғайлы. Олардың жазылуы:
fread(ptr,size,n,fp);
мұнда fp файлынан әрқайсысы size байттан тұратын мәліметтің n блогы ptv нұсқауышы көрсетіп тұрған жады аймағына оқылады (оқылатын блок үшін алдын ала орын дайындап қою қажет).
fwrite (ptr,size,n,fp);
мұнда ptr нұсқауышы көрсетіп тұрған жады аймағында орналасқан әрқайсысы size байттан тұратын мәліметтің n блогы ашық тұрған fp файлына жазылады.
Осы функцияларды қолданудың бір мысалын келтірейік:
typedef struct
{
char author [30];
char title [50];
int pages;
} BOOK;
BOOK b1={"Kernighan", "С Language", 256},b2;
FILE *fp;
void main()
{...
fp=fopen("struct.txt", "w+");
// файл әрі оқу, әрі жазу үшін ашылды
fwrite(&b1, sizeof(BOOK), 1, fp);
fseek(fp,0,0); // маркерфайл басына
fread(&b2, sizeof(BOOK), 1, fp);
printf("Авторы – %s,аты – %s,беттер саны –
%d\n",b2.author, b2.title, b2.pages);
}