Функцияның ішінде хабарланатын айнымалылар локальды айнымалылар деп аталады. Локальды (жергілікті) айнымалының аты мен мәні тек функцияның ішінде ғана хабарланған айнымалы ретінде белгілі.
Есептің әрбір бөлігін функция түрінде жазыңыз.
б) тым болмағанда бір теріс элементі бар жолдың элементтерінің қосындысын тап.
Есепті шешудің блок-сұлбасы №5 зертханалық жұмыста берілген.
#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);
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 зертханалық жұмыстағы А тапсырмасының нұсқаларына сәйкес келеді.
Достарыңызбен бөлісу: