Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мой сборник 2014-2015.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

1.5 Тақырып. Функциялар Зертханалық жұмыстар №16,17,18,19 Функциялар. Функцияны шақыру. Жергілікті, ауқымды айнымалылар. Стандартты кітапханалық функциялар. Функцияны қолданып бағдарлама құру.

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

Тип функция_аты ();

Мұнда функцияның аты және қайтаратын мәнің типі баяндалған.

Қазіргі стиль ANSI ұсынған Си тілінің кеңейтілген түрлерінде қолданылады. Бұл Си тілінің түрінде функцияны баяндау кезінде «функция прототипі» деген аталатын тілдің арнайы құралдары қолданылады. Оның прототипін қолданып функцияны баяндау кезінде параметрлері туралы қосымша ақпарат болады:

Тип функция _аты (парам_ақпар1, парам _ақпар2,...);

Бұндағы парам_ақпар1 параметрі – формальді параметрлердің аты және типі туралы мәлімет.

1. Тапсырма

# include<iostream.h>

# include<math.h>

# include<conio.h>

tupedef double D; // double типінің атын өзгерту.

D line (D,D,D,D); // line функциясының прототипі.

D Geron (D,D,D,D,D,D); // Герон функциясының прототипі.

// негізгі функция.

void main ( )

{D x1,y2,x1,y2,x3,y3,x4,y4,S1234;

clrscr ();

cout <<”x1=”; cin>>x1; cout <<”y1=”; cin>>y1;

cout <<”x2=”; cin>>x2; cout <<”y2=”; cin>>y2;

cout <<”x3=”; cin>>x3; cout <<”y3=”; cin>>y3;

cout <<”x4=”; cin>>x4; cout <<”y4=”; cin>>y4;

S1234=Geron(x1,y1,x2,y2,x3,y3,)+Geron (x1,y1,x2,y2,x3,y3,x4,y4);

cout<<”төртбұрыш ауданы =” ;<< S 1234}

//line функциясын анықтау.

D line (Da,Db,De,Dd);

{return sgrt ((a-c)*(a-c)+(b-c)+(b-d)*(b-d);}

//Geron функциясын анықтау.

D Geron (Da1,Db2,Db1,Db2,Dc1,Dc2);

{Dp,ab,bc,ca;

ab=line (a1,a2,b1,b2); bc=line (b1,b2,c1,c2);

ca=line (c1,c2,a1,a2);

p=(ab+bc+ca)/2;

return sgrt (p*(p-ab)*(p-bc)*(p-ca));

}

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

Фамилия

Аты

Бойы

Салмағы

Дәрібаева

Алия

165

53

Мамбеталина

Сандуғаш

170

55

Ибрагимова

Гаухар

160

49

Қазыбаева

Айжан

158

45

Барсаев

Ертай

175

73

Ұзын-m

Қысқа-k

Орташа бойы-s

#include<stdio.h>

#include<conio.h>

main( )

{ const N=5; int i, s, m, k;

struct student {char fam[15];

char name[7];

int rost;

int ves;}

student stud[N];

clrscr( );

for(i=0; i<N; i++)

{printf(“%d-й студент”, i);

printf(“\n Фамилия:”); scanf(“%s”,& stud[i].fam);

printf(“Имя:”); scanf(“%s”,& stud[i].name);

scanf(“%d”,& stud[i].rost);

scanf(“%d”,& stud[i].ves); }

s=0;

for(i=0; i<N; i++)

s=(s+ stud[i].rost)/5;

printf(“s=%d\n”,s);

m=0;

for(i=0; i<N; i++)

if(stud[i].rost>m) m= stud[i].rost;

printf(“\n Рост самого высокого студента %d метр”,m);

k= stud[i].rost;

for(i=0; i<N; i++)

if(stud[i].rost<k) k= stud[i].rost;

printf(“\n Рост самого низкого студента %d метр”,k);

}

Жауабы: Ең ұзын бойлы студент-175 см.

Ең қысқа бойлы студент-158 см.

Си тілінде жалпы глобальные және жеке локальные объектілер болуы мүмкін.

Глобальды-функциясынан тыс анықталады. Сондықтан кез-келген функция үшін жұмыс.

Локальды-функцияның ішінде қолданылады.

Int a/*-Жалпы айнымалыны анықтау.*/

int function (int b, char c)-/*Функцияны хабарлау.*/

{ /*программа денесі.*/

int d,l; //жеке айнымалыларды сипаттау.

float. f

int function (int b, char c) / * - функцияны және оның формальдық параметрлерін анықтау. */

{ /*функция денесі.*/

char g;

}

Функцияны баяндау сияқты оны анықтау кезінде де екі стильді қолдануға болады – классикалық және қазіргі. Функцияны анықтаудың классикалық форматы келесідей:

Тип функция _аты (параметрлер аты) параметрлер анықтамасы,

{

Локальдық баяндау;

Операторлар;

}

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

Тип функция _аты (парам_ақпар, парам _ақпар,...);

Бұндағы, параметр анықтамасы парам_ақпар – берілетін параметр (тип және идентификатор) туралы ақпаратты сақтайды.

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

Функциялар программа ішінде әр түрлі ретте тұра береді және программанын барлық жеріне глобальды деп есептеледі.

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

Функцияның орындалу нәтижесі return операторы көмегімен қайтарылады. Жалпы түрі:

Return (өрнек);

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

Return операторын мына түрде қолдануға болады:

Return;

Return 0;

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

Return операторы көмегімен шақырушы программаға тек бір ғана мән ғана беріледі. Егер екі шама берілу керек болса, онда көрсеткіштерді қолдану керек.

Функция анықталуы атымен, формалды параметрлерімен және функция денесімен ерекшеленеді. Ол тағы да қайтаратын мәнінің типі және функцияның жады класы бойынша ерекшеленеді. Функцияның анықтау синтаксисі келесідей:

[<ЖК түрі>][<тип түрі>] <сипаттаушы> ([<параметрлер тізбегі>]) [<параметрлерді баяндау>] <функция денесі>

Жады класының түрі <ЖК түрі> функцияның жады класын береді. <Тип түрі>] сипаттаушымен бірге қайтаратын мәнінің типін және функция атын анықтайды. <Параметрлер тізбегі> өз кезегіде функцияны шақыру кезінде мәні берілетін формалды параметрлер атынаң тұратын тізбек (бос болуы мүмкін). <Параметрлерді баяндау> формалды параметрлердің типтерін және идентификаторларды береді. <Функция денесі> - жергілікті айнымалыларды баяндаудан және операторлардан тұратын кұрамды оператор.

Қазіргі кұрылымы:

[<ЖК түрі>][<тип түрі>]<сипаттаушы> ([<параметрлерді баяндау тізімі>]) <функция денесі>

Функцияны баяндау: классикалық түрі

[<ЖКтүрі>][<тип түрі>]<сипаттаушы>([<аргументтер типінің тізбегі>]);

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

Баяндаудың қазіргі стилі (прототиптсрді баяндау). Прототип-те аргументтер типінің тізбегінде осы аргументтердің идентификаторлары болуы мүмкін.

3 тапсырма. 10 бүтін саннан құралған массив берілген.Массив элементтерінің ең үлкен элементінің және оның рет номерін (индиксін) шығаруға арналған программа.

#include<stdio.h>

#include<conio.h>

main( )

{int a[10], i, p, k;

clrscr( );

for( i=1; i<=10; i++)

scanf(“%d”, & a[i]);

p=a[1];

for( i=2; i<=10; i++)

if (p < a[i] )

{p=a[i];

k=i;}

printf(“p[%d]=%d\n”, k, p);

return ‘0’; }