Коммерциялық емес акционерлік қоғам алматы энергетика



бет16/21
Дата07.02.2022
өлшемі1,2 Mb.
#94147
түріПрограмма
1   ...   13   14   15   16   17   18   19   20   21
Байланысты:
is 3
инт тен лек 5-6
Төменгі деңгей 1 Төменгі деңгей 2 Төменгі деңгей 3 Төменгі деңгей 4 Жоғарғы деңгей 4 Жоғарғы деңгей 3 Жоғарғы деңгей 2 Жоғарғы деңгей 1

Программа жұмысының нәтижелері былай түсіндіріледі. Басында main() функциясы up_and_down() функциясын 1 аргументімен шақырады. Нәтижесінде осы функцияның n аргументі 1 мәнін қабылдайды және printf() функциясы бірінші жолды басып шығарады. Сонан соң тексеру орындалады, егер n < 4, онда қайтадан up_and_down() функциясын 1 аргументімен n+1-ден үлкен мәнімен шақырылады. Нәтижесінде қайтадан шақырылған функция екінші жолды баспаға шығарады. Осы үрдіс аргументтің мәні 4-ке тең болғанша жалғаса береді. Бұл жағдайда if операторы жұмыс істемейді және бесінші жол «Жоғарғы деңгей 4»-ті баспаға шығаратын printf() функциясы шақырылады. Сонан соң функция өзінің жұмысын аяқтайды және басқару осы функцияны шақыратын функцияға беріледі. Аргументі n=3-ке тең up_and_down() функциясы өзінің жұмысын жалғастыра отырып, «Жоғарғы деңгей 3» 6-шы жолды баспаға шығаратын printf() операторына көшеді. Бұл үрдіс бастапқы деңгейге жеткенге дейін жалғаса береді, яғни басқару up_and_down() функциясын алғашқы рет шақырған main() функциясына беріледі де, программаның жұмысы аяқталады.



42

Функция күрделі жұмыстарды орындау кезінде олар өздерінің есептерін іске асыру үшін өзінің айнымалыларын қолдануы тиіс.

Функцияның ішінде хабарланатын айнымалылар локальды айнымалылар деп аталады. Локальды (жергілікті) айнымалының аты мен мәні тек функцияның ішінде ғана хабарланған айнымалы ретінде белгілі.




Локальды айнымалыларға қосымша С тілінде сіздің программаңыздың барлық аймақтарында толық белгілі болатын глобальды (ауқымды) айнымалыларды хабарлауға мүмкіндік береді (барлық функциялар үшін глобальды). Глобальды айнымалы функциядан тыс қандай да бір файлда хабарланады.


А тапсырмасы.
Функцияны пайдаланып жиымды өңдеу программасын құрыңыз.

Есептің әрбір бөлігін функция түрінде жазыңыз.


Мысалы.
Өлшемі 8-де 8 бүтін санды жиым берілген. Табыңыз:
а) жиымның k-ншы жолымен k-ншы бағаны сәйкес келетін k-ларды;

б) тым болмағанда бір теріс элементі бар жолдың элементтерінің қосындысын тап.


Есепті шешудің блок-сұлбасы №5 зертханалық жұмыста берілген.


Программа келесі түрде болады:


#include
#define m1 8
#define n1 8
/* Функция прототиптерін хабарлау */

void func(int *mat, int m, int n);


void func2(int *mat, int m, int n);
int main(int argc, char* argv[])
{int i, j,matrix[n1][m1];
/* 8х8 жиымды хабарлап, инициализациялаймыз */
/* жиымды кездейсоқ сандар генераторымен толтырамыз */
for (i = 0; i < m1; i++)

for (j = 0; j < n1; j++)


matrix[i][j]=rand()%10-1;
printf("\n Генерацияланған жиым мынандай болады:\n ");
/* жиымды шығару */
for (i = 0; i < m1; i++)
{ for (j = 0; j < n1; j++)

printf(“%d “,matrix[i][j]);


printf("\n ");
}
func1(&matrix[0][0], 8, 8);
func2(&matrix[0][0], 8, 8);

43

system("PAUSE");/* экранды тоқтату*/

return 0;


}
void func1(int *mat, int m, int n)

{ int i, j, p; /* Санауыш және сәйкес келу белгісі */ for (i = 0; i < m; i++)


{ p = 1;

for (j = 0; j < n; j++)
{

/* i-нші жолдың j-нші бағанындағы элементті j-нші жолдың i-нші бағанымен салыстырамыз. Олар сәйкес келмесе Флагқа Жалған мәнін меншіктейміз және j бойынша циклды break операторымен үземіз */


if (mat[i * m + j] != mat[j * m + i])


{ p =0; break;


}
}
printf("\n \t\t\t №1 Функцияның нәтижесі");


/* экранға сәйкес жолдың нөмірін шығарамыз */ if (p==1) printf("i=%d ", i);


} if (p==0) printf("\n бірдей жол мен бағандар жоқ ");


}
void func2(int *mat, int m, int n)
{
int i, j; /* Санауыш және қосындыны сақтайтын айнымалы */
int p1, iSumm; /* теріс элементті табатын белгі және қосындыны

сақтайтын айнымалы */


printf("\n\n");

printf("\n \t\t\t№2 Функцияның нәтижесі \n"); for (i = 0; i < m; i++)


{/* Айнымалыларға бастапқы мәндерді меншіктейміз */ p1 = 0;


iSumm = 0;


for (j = 0; j < n; j++)


егер де бір ғана теріс элементі табылса, қосындыны экранға шығаруды қажет деп белгілейтін, p1=1 меншіктейміз


{/* егер де бір ғана теріс элементі табылса, қосындыны экранға шығаруды қажет деп белгілейтін, p1=1 меншіктейміз */


if (mat[i * m + j] < 0) p1 = 1;


/* i-нші жолдың элементтерінің мәнін қосындылаймыз */ iSumm += mat[i * m + j];


}


/* егерде жолда бір ғана теріс элемент болса, онда экранға i-нші жолдың элементтерінің қосындысын шығарамыз */

44

if (p1) printf("Summ of elements of row #%d = %d\n", i, iSumm);

}
}



Программаның орындалу нәтижесі:

Генерацияланған жиымның түрі мынадай:


27271403
10760-835


27181493
92852006
71139391
82491-649

03909488
18328280


№1 функцияның нәтижесі


Сәйкес жолдар мен бағандар
k = 2
k = 6

№2 функцияның нәтижесі #1 жолдың элементтерінің қосындысы = 14 #5 жолдың элементтерінің қосындысы = 31





  • тапсырмасының нұсқалары.




  • тапсырмасының нұсқалары №5 зертханалық жұмыстың А тапсырмасының нұсқаларымен сәйкес келеді.



Б тапсырмасы.

«Зертханалық жұмыс №3. Циклдік алгоритмдерді программалау» бөлімінен факториалды есептейтін, рекурсивті функцияны пайдаланып жаттығуларды орындаңыз.




Тапсырма: келесі қосындыны есептейтін программаны құрыңыз:



n

cos(kx)




S

.

k!

k 1




Зертханалық жұмыс №3-тегі есептің шешімінің блок-сұлбасы.


Программа келесі түрде болады:

#include


#include
long fact( int m)
{ if (m<=1) return (1);

45


else return (m * fact ( m -1 )); // fact функциясы өзін-өзі шақырады

}
int main()


{
int n, x, f, i;
float S;
printf ("\n Мәнді енгізіңіз n\n n=");

scanf ("%d", &n);


printf ("\n Мәнді енгізіңіз x\n x=");
scanf ("%d", &x);
S=0;
for (i=1; i<=n; i++)
{

f=fact(i);


S=S+(cos(i*x)/ f);}
printf ("\n Қосынды S=%f", S);
getch();
return 0;
}


Программаның орындалу нәтижесі:

Мәнді енгізіңіз n


n=4
Мәнді енгізіңіз x
x=1

Қосынды S=0.139995





  • тапсырмасының нұсқасы.




  • тапсырмасының нұсқалары №3 зертханалық жұмыстағы А тапсырмасының нұсқаларына сәйкес келеді.





Достарыңызбен бөлісу:
1   ...   13   14   15   16   17   18   19   20   21




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет