Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Blok_II.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
532.22 Кб
Скачать

9.Программаларды өңдеудің негізгі принциптері. Құрылымдық программалау, принциптері

10.Функциялар және көрсеткіштер. Көрсеткішпен жіберуде көрсеткіштерді функцияның нақты аргументі ретінде пайдалану.

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

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

#include<stdio.h>

#include <string.h>

void check(char *a, char *b,

int (*cmp)(const char *, const char *));

int main(void)

{

char s1[80], s2[80];

int (*p)(const char *, const char *);

/* указатель на функцию */

p = strcmp;

/* strcmp функция адресін р көрсеткішіне меншіктейді */

printf("Введите две строки.\n");

gets(s1);

gets(s2);

check(s1, s2, p); /* p көрсеткіші арқылы strcmp функция адресін жібереді. */

return 0;

}

void check(char *a, char *b,

int (*cmp)(const char *, const char *))

{

printf("Проверка на совпадение.\n");

if(!(*cmp)(a, b)) printf("Равны");

elseprintf("Не равны");

}

main()-де р көрсеткішінің жариялауын қарастырайық:

int (*p)(const char *, const char *);

Бұл жариялау компиляторға р-ның const char* типті екі параметрі бар функцияға көрсеткіш және int типті мәнді қайтарады. р-ның айналасындағы компилятормен жариялаудың дұрыс интерпретациясы үшін қажет. Жариялаудың осындай түрі басқа да функцияларға көрсеткіштер үшін де қолданылады.Тек ол үшін қайтарылатын типтер мен функция параметрін өзгерту керек.

check() функциясын қарастырайық. Онда 3 параметр жарияланған: (a және b) символдық типіне көрсеткіш және cmp функциясына көрсеткіш. cmp функциясының көрсеткіш форматы р көрсеткішінікіндей. Сондықтан cmp-да  constchar * типті екі параметрі бар және int мәнін қайтаратын фугкцияға көрсеткішті сақтауға болады. р-ның жарияламасында айтылғандай, *cmp айналасына қойылатын дөңгелек жақшалар осы жарияны компилятор көмегімен дұрыс интерпритациялау үшін қажет.

Программа басында р көрсеткішіне жолдарды салыстырумен айналысатын стандартты кітапханалық strcmp() функциясының адресі еншіленеді.Одан кейін программа қолданушыдан екі жолды енгізуді сұрайды да, передает указатели на них функции check(), которая их сравнивает.

 check() ішінде көрсетілген

(*cmp)(a, b)

a және b аргументтері бар, cmp-ға нұсқайтын strcmp() функциясын қосады. *cmp айналасындағы жақшалар міндетті түрде қойылады. Бұдан басқа да, көрсеткіштің көмегімен функцияны іске қосу тәсілдері бар:

cmp(a, b);

Бірақ бірінші тәсіл жиірек қолданылады (біз де сол тәсілді қолдануға кеңес береміз), себебі екінші тәсілде cmp көрсеткіші фунцияның атына ұқсап кетеді де, программаны оқу кезінде шатастыруы мүмкін. Бірінші тәсілдің өз кезегінде артықшылықтары бар: мысалы, функция функцияның атына емес, фунцияға сілтеу арқылы іске қосылатыны жақсы көрініп тұр. С-да алғашында бірінші тәсілдің жұмыс істегенін де ескерген жөн.

check() функциясын шақыруды strcmp() атын қолдану арқылы жазуға болады:

check(s1, s2, strcmp);

Бқл жағдайда бағдарламаға қосымша көрсеткіш р-ны енгізу қажеттілігі болмайды.

11-14.Массивтер. Массивтерді анықтау және хабарлау. Көрсеткіштер көмегімен функция массивтерін өңдеу.

Массив дегеніміз - бір атпен аталған, әртүрлі индекстелген бір типті

элементтер жиынтығы.

Қасиеттері:

Массивтің қасиеттерін анықтайтын 4 негізгі принципі бар:

-массивте элементтер деп аталатын мәндер сақталады;

-массивтің барлық элементтері бір типті болуы керек;

-жадыда массивтің барлық элементі тізбектеліп орналасады және бірінші

элемент адрестің нөлдік индексін білдіреді;

-массив атауы тұрақты болып табылады және массивтің бірінші элементінің

адресінен тұрады.

Mассивтің сипатталуы:

<элементтің типі> <массив аты> [<элементтер саны>];

Мысалы, int a[12]; {12 элементтен тұратын массив}

char s[20]; {20 элементтен тұратын массив}

#define KOL 10 {}

int [KOL];

Массивті инициялизациялау 3 тәсілмен анықталады:

- массивті құру барысында;

- массивті құру барысында бастапқы тұрақтыларды көрсету;

- программаның орындалу барысында;

- құру барысында массивтің бастапқы мәндері берілмесе, онда автоматты

түрде массив 0-мен толтырылады(NULL).

Массив элементін қолданғанда индекс ретінде үш түрлі мән беруге болады:

1. Сандық тұрақты.

2. Айнымалы.

3. Өрнек.

include<stdio.h>

#include<conio.h>

#define SIZE 5 // массив өлшемі

void main()

{

int a SIZE ; // массив

int n=0; // санағыш

int i; // индекс

clrscr();

puts(" \n Бүтін сандар массивін анықтау ");

puts(" Әр санды енгізген сайын Enter пернесін басыңыз ");

for (i=0; i SIZE; i++)

{

printf("a%i=", i+1);

scanf(“%i”, & ai);

if (ai!=0) n++;

}

printf(" массивте %i нөлдік емес элемент бар\n", n);

puts("\nЖұмысты аяқтау үшңн Enter пернесін басыңыз ");

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]