ТП для экзаменов


1.Си программалау тілі туралы түсінік

Си тілі өткен ғасырдың 70-жылдары басында АҚШ-та Bell Telephon Laboratories компаниясының қызметкері Дэннис Ритчидің бастауымен дүниеге келді. Бұл тілдің негізі Алголдан басталып,  Паскаль және ПЛ/1 тілдерімен қатар пайда болды.

Си тілінің шығуы UNIX операциялық жүйесінде программалаумен тығыз байланысты, өйткені бұл жүйе ассемлерде және осы Си тілінде жазылып шыққан болатын. UNIX жұмыс істеу ортасы Си тілін жүйелік программалау тілі ретінде елге таныстырды, ол компиляторлар мен операциялық жүйелер жазу үшін қолайлы деп саналды, кейіннен Си тілі кез келген салада программалар жазуға да өте қолайлы тіл болып табылатыны анықталды.

Алғаш рет UNIX 1969 жылы Нью-Джерси штатындағы Bell фирмасының лабораториясында PDP-7 мини-ЭЕМ-інде жасалып шықты. UNIX  PDP-7 компьютерінің ассемблер тілінде жазылды. Бұдан соң сол лабораторияның жетекшісі Кен Томпсон 1970 жылы В деп аталған жаңа тілге арнап компилятор жасап шықты. Осы тілді Си (ағылшынша С) тілінің негізі деп атауға болады. 

Жалпы Си тілінің тез дамуына 1983 ж. оның стандартын жасау мақсатында Америка ұлттық стандарттар институтында  (ANSI) Техникалық комиссияның құрылуы себепші болды.  Комиссия  жұмысына сол кездегі алдыңғы қатарлы мамандардың көпшілігі араласып, олар тек программалау мәселелерін ғана қарастырмай, кең таралып келе жатқан IBM PC компьютерлеріне арналған компиляторлар  жасауды да осы стандартқа енгізді.

Си тілінің негізінде 1983-жылы Си++  тілі жасалып шықты, сол кезден бері тілдің бірнеше нұсқалары пайда болып, ол қазіргі ең көп тараған тілдердің біріне айналды. Біздің елде Си тілінің алғашқы нұсқасы орыс тілінде Б.Керниган мен Д.Ритчидің “С программалау тілі” деген кітабы арқылы бірнеше рет жарық көрді (1985-1991 жж.).

Бірсыпыра фирмалар осы тілге арнап компиляторлар жазды, мысалы, Borland International фирмасы 1989 ж. жасаған біріктірілген программалау ортасы TurboC++ жүйесін дүниеге келтірді. Ол DOS ортасында жақсы жұмыс істеді. Ал 1992 ж. жасалған Borland C++ жүйесі Windows ортасында да жұмыс істейтін жақсы компилятор болып табылады. 

Сонымен Си/Си++ программалары Паскаль тілінің біріктірілген (интегралданған) ортасы сияқты DOS ортасында да және Windows жүйесінде де  жұмыс істей береді.

Біз қарастырғалы отырған Си тілінің негізгі ұғымдары мен операторлары кез келген мектептің немесе жоғары оқу орнының компьютерлерінде жүре беретін біріктірілген ортаның редакторы арқылы теріліп жұмыс істей береді.

2.Сызықтық құрылымды алгоритм. Мысал.

Арифметикалық операциялар символдар арқылы жазылады. Си тілінде мынадай операциялар бар:

*  – көбейту,  / – бөлу,  % – модуль бойынша бөлу (қалдықты анықтау),              + –  қосу,  -  – азайту.



Модуль бойынша бөлу бүтін санды бүтін санға бөлген кездегі  қалдықты анықтайды. Мысалы:     20 % 3 = 2.

 

Меншіктеу операторы TC «3.1. Меншіктеу операторы» \f C \l «2″

Меншіктеу операторы символдар арқылы жазылады. Кез келген ; таңбасымен аяқталатын өрнек меншіктеу операторы болып табылады. Өрнектің бір түріне бос оператор жатады, ол жай  ;  операторы.

Си тілінде  меншіктеу операторының бірнеше түрі бар. Жалпы меншіктеу операторының жазылу форматы мынадай болады:

<айнымалы> = <айнымалы> <операция> <өрнек>;

Мұны Си тілінде қысқаша былай жазуға болады:

<айнымалы> <операция> = <өрнек>;

Төменде бірнеше мысал келтірілген.

a=a+b; ® a+=b;              a=a*b; ® a*=b;

a=a-b; ® a-=b;                a=a/b; ® a/=b;

Ситіліндетізбектележазылғанменшіктеуоперацияларындақолдануғаболады. Мысалы:

sum = a = b;

Мұндаменшіктеуоператорыоңнансолғақарайорындалады, яғни b-ныңмәні a-ға  меншіктеледі, ал  а-ныңмәні sum-ғаменшіктеледі.

Меншіктеу операторын былай да жазуға болады:

1) a = (b = 1) +2; 

мұнда  a=3, b=1.

2) a = b = 1 + 2; 

 ал  мұнда a = 3, b = 3.

Дөңгелекжақшағаалынғанкезкелгенменшіктеуоператорыанықталғанмәнібарөрнекболыптабылады, мысалы:((s=13+12)<=30) дегенөрнекақиқатмәндіболыптабылады.

Арттыру немесе кеміту (инкремент және декремент) операциялары ++ және – – түрінде жазылады. Бұлар кез келген операндтың мәндерін бірге арттыруға немесе кемітуге мүмкіндік береді.

Инкремент, яғни арттыру операциясы (++) және декремент (—), кеміту операциясы айнымалы (тек айнымалы мәнін) мәнін бірге арттырады немесе кемітеді. Олар айнымалы мәнін өзгертеді, яғни жасырын түрдегі меншіктеу амалы болып табылады. Кейде олар жеке оператор түрінде жазылады:

i++; немесе ++i;

Бұл екеуі де мынадай амалмен бірдей болып саналады

i = i + 1;

Бұл екеуін өрнектерде жиі қолданады. Мысалы:

sum = sum + х * —i;

Инкремент пен декремент екі формада жазылады: префикстік  және постфикстік. Постфикстік арттыру былай жазылады: х++ , ал префикстік арттыру былай жазылады:  ++х . Префикстік амалдар негізгі операция алдында, ал  постфикстік амалдар негізгі амалдан кейін орындалады.

Постфикстік формада х айнымалысының мәні оны қолданғаннан кейін өзгереді, ал префикстік формада – айнымалы мәні оны қолданғанға дейін өзгереді, яғни бір деген санға артады. Мысалы:

k=10;

x=k++;  /* x=10  k=11  */

x=++k;  /* x=12  k=12  */

Арттыру/кеміту операцияларын өрнек ішінде де орындау мүмкіндігі бар. Мысалы:

sum=a+b++;/*алдымен a,b қосылады, сонан соң b 1-ге артады */

sum=a+ ++b;/*алдымен b 1-ге артады, сосын барып a,b қосылады */

Арттыру/кеміту операцияларының приоритеттері өте жоғары, тек жақша ішіндегі операциялардың приоритеті олардан жоғары болады.

Құрама оператор  бірнеше операторды жүйелік жақшаға алып біріктіру үшін қолданылады. Ол шартты және циклдік операторларда жиі қолданылады. Мысалы:

#include

#include

main()

{

  int a = 5, b = 6, c = 7, d;

  clrscr();

  d = (a++ — (—b)) + (c — a—); //d=2  a=5

  printf(«d=%i a=%d»,d,a);

  getch();

}

3.Си тілінде жазылған программаның құрылымы

Кез келген программа бір немесе бірнеше функциялардан тұрады. Олар программа құруға керекті негізгі модульдер болып табылады. Кез келген программаның жазылған алғашқы мәтіні  бастапқы код деп аталады. Оны біріктірілген программалау ортасында теріп, сонан соң компилятор арқылы машиналық кодқа түрлендіріп орындаймыз.

   Сонымен, Си программасы бірнеше функциялардан (main, f1, f2…)  құралады және олардың біреуі міндетті түрде  main() болуы қажет. 

Қарапайым программаның мысалын қарастырайық. Жалпы кез келген функция оның тақырыбы мен тұлғасынан (денесінен) тұрады.

Алдымен программа препроцессор арқылы өңделіп, оның директиваларын (командаларын) орындайды. Мұнда программаға тақырыптық файлдар – программаға қосымша элементтер енгізетін мәтіндік файлдар жазылады. Олар мәліметтерді енгізу/шығару операцияларын немесе экран сипаттамаларын өзгерту үшін қажет.  

Программадағы кез келген функция тақырыбы препроцессордың директивасынан және функция атынан тұрады. Функция атына жалғасып, жақша ішіне параметрлер жазылуы мүмкін, кейде параметрлер болмайды, ондайда жақша ішіне ешнәрсе жазылмайды.

Препроцессор  директивалары

Си тілінің препроцессоры — макропроцессор, компиляцияның нөлдік фазасында бастапқы файл үшін қолданылады. Препроцессор директивалары — Си тіліндегі алдыңғы программада жазылған инструкциялары. Директивалары программаның кез келген жерінде жазылуы мүмкін, бірақ олардың әрекеттері программаның жазылған нүктесінен ғана басталады.

Атауланған константалар және макроанықтаулар

#define директивасы жиі қолданылатын константаларды, шешуші сөздер, операторларды түсінікті сөздермен аустыру үшін қолданылады.

Сандық және мәтіндік константаларды ауыстыратынидентификаторлар  атауланған константалар деп аталады.

Си тілінің әрекеттер тізбегі операторлар тізбегі түрінде берілгенидентификаторлар макроанықтаулар деп аталады. Макроанықтауларда аргументтер болуы мүмкін. Макроанықтауға жолығу программадамакрошақыру деп аталады.

#undef директивасы атуланған константанаң ағымдық анықтамасын тоқтатады. Тек анықтау тоқтатылғаннан кейін ғана атауланған константаға басқа мән сәйкестендіріле алады.

#define директивасы                                                   

#define <идентификатор> <мәтін>

#define <идентификатор>(<параметрлер тізімі>) <мәтін>

Директива барлық <идентификаторлар> болған файлында <мәтінге> ауыстырады.

Бұл процесс макроподстановка деп аталады. Егерде олөзімен өзгеше  лексем түрінде болса, осы жағдайда ғана <Идентификатор> өзгертіледі.

Мысалы, егер <идентификатор> жол бөлігі немесе одан әрі ұзын идентификатор болып табылса, онда ол өзгертілмейді. Егер <идентификатордан> <параметрлер тізімі> жүрсе, онда директива  аргументтермен  макроанықтаманыанықтайды.

<Мәтін> өзімен лексемдер теруін ұсынады, оның құрамына кілттік сөздер, константтар, идентификаторлар немесе өрнектер кіреді. Егер <мәтін> жолға симайтын болса, онда онда ол келесі жолда жалғастырылады; ол үшін бірінші жол соңында  кері слеш \ қойылады.

Егер < параметрлер тізімі > тапсырылса, үтірлермен бөлінген бір немесе идентификатор құрайды. Тізімде идентификаторларбір-бірінен өзге болу керек. Олардыңқозғалу обласыолардың тапсырылуымен макроопределенияменшектелген. Тізім дөңгелек жақшалармен аяқталуы керек. <Мәтінде> формалды параметрлерді макрошақырудағы фактылық аргументтер позициясымен белгіленеді.

Макрошақырудаидентификатор соңымен дөңгелек жақшада <параметр тізіміндегі> формалды параметрлер құрамынан фактылық аргументтер жазылады.

#define директивасында <Мәтін> құрамында басқада макроанықтамаларжәне констант атаулары қойылуы мүмкін. Олардың өсуіосы мәтін <идентификатор> өсуімен ғана болады, ал #define директивасының анықтамасында емес.

Макроподстановка орындалғаннан соң алынған жол тағы да басқада констант және макроанықтамалар атауларын іздеуіне қарастырылады. Қайталанып қаралғаннан ерте құралған макроподстановканы қарау қабылданбайды. Сондықтан директива

#define x x

 препроцессор зацикливаниясына әкелмейді.

Макроподстановажәне макроанықтамалар мысалдары:

#define WIDTH 80

#define LENGTH (WIDTH+10)

#define FILEMESSAGE «файлды құру мүмкіндігі дұрыс емес болды»

#define MAX(x,y) ((x)>(y)) ? (x):(y)

#define MULT (a,b) ((a)*(b))

#undef директивасы

#undef <идентификатор>

Директива <идентификатор> үшін #define болған анықтама қозғалысын тоқтатады.  #undef директива әсерімен макроопределенияны тоқтату үшін оның идентификаторын беру жеткілікті. Параметр тізімінің тапсымасы қажетті емес.

#undef директивсын бұрын анықталған идентификаторға енгізу қате емес.

Директивада кейбір бұрын анықталған идентификатордың өткен  программа обласын құрау үшін қолданылады .

4.Файлдармен жұмыс

Файл – сыртқы есте сақтау құрылғыларында (магниттік дискілерде) орналастырылған және мәлімет өңдеу, тасымалдау кездерінде біртұтас күйде қарастырылатын мәліметтер жиыны.

Файлдармен жұмыс істеу үшін оларды алдымен ашу керек, яғни файл туралы мәліметті – атын, адресін программаға белгілі ету қажет.

Си тілінде файл ашу fopen() функциясы арқылы орындалады. Ол сыртқы құрылғыдағы физикалық файлды, мысалы, А:\NUR.DAT, программадағы оның логикалық атымен байланыстырады. Логикалық ат дегеніміз – файлға нұсқауыш, яғни файл туралы мәлімет сақталатын жады аймағына сілтеме жасау. Файлға нұсқауыш сипатталуы тиіс.

Сонымен, файлдармен жұмыс істегенде нұсқауыштар қолданылады. Файлға нұсқауыш мынадай түрде сипатталады:

FILE  *fp;

мұндағы FILE типі – тақырыптық файлында анықталған құрылым. Бұл нұсқауышты көрсетілген файлмен сол файл ашылғаннан бастап, байланыстырып қоюға болады. Ол үшін келесі функция пайдаланылады:

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() – нағыз функциялар болып табылады.

Барлық файлдық функциялар прототиптері файлында орналасқан.

Файлдардан мәлімет жазу/оқу әрекеттерін үш топқа бөлуге болады:

- символдарды енгізу/шығару операциялары;

- сөз тіркестері жолдарын енгізу/шығару операциялары;

- блок бойынша енгізу/шығару операциялары.

Символдарды енгізу/шығару операцияларында файлдан бір ғана символ оқылады немесе оған бір символ жазылады. Мысалы:

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

#include

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

  {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символын жазбайды.

Төменде осы функцияларды пайдалану мысалы келтірілген.



Страницы: Первая | 1 | 2 | 3 | ... | Вперед → | Последняя | Весь текст


Предыдущий:

Следующий: