Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия Си лекция каз.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
3.05 Mб
Скачать

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

4- мысал. NxN өлшемді бүтін сандар жиымын (50-ден көп емес) енгізіп, функция арқылы оның оң мәндерінің қосындысын табу керек.

#include <stdio.h>

#include <conio.h>

void summa(int,int a1[ ][50]);//функцияны сипаттау

void main(void)

{

int a[50][50];

int i,j,N;

clrscr();

puts("\n Жиым өлшемін N(<50) енгізіңіз \n");

scanf(“%d”,&N);

printf("\n Мәліметтерді енгізіңіз \n");

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

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

{

printf("\n a[%d][%d]=", i+1, j+1);

scanf("%d", &a[i][j]);

}

summa(N,a);

}

void summa(int n,int a1[ ][50])//функцияны анықтау

{

int i,j,s;

/* Жиымның оң элементтерінің қосындысын есептеу*/

for (s=0,i=0; i<n; i++)

{

printf("\n");

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

if (a1[i][j]>0)

s+=a1[i][j];

}

printf("\a Қосынды = %d, Press any key... ",s);

getch();

}

5- мысал. Берілген s1 символдар тізбегінен k-сыншы символдан бастап ұзындығы L болатындай бағыныңқы s2 тізбегін бөліп алатын substr функциясын қарастырайық:

substr(s1,s2,L,k,m)

char s1[],s2[]; int L,k,m;

{

int i,j;

if(L+k>=m)k=m-L-1;

for (i=1,j=0;i<L+k; i++,j++)

s2[j]=s1[i];

}

#include <stdio.h>

#include <conio.h>

Void main(void)

{

char str1[80],str2[80]; int L,k,m=0;

clrscr();

puts("\n сөз тізбегін енгізіңіз \n:");

while((str1[m++]=getchar())!=’\n’)

;

printf("\n");

/* m өз мәнін сақтап қалады */

printf("\n L және k мәндерін енгізіңіз:\n");

scanf(“%d %d”,&L,&k);

substr(str1,str2,L,k,m);

printf("%s\n",str2);

}

6-мысал. Берілген s1 символдар тізбегінің құрамында бағыныңқы s2 тізбегінің бар жоқтығын анықтайтын index функциясын қарасты­райық. Егер s2 тізбегі s1 символдар тізбегінің құрамында бар болса, онда index функциясы s2 тізбегінің s1-дегі орнын (индексін) анықтайды:

Index(s1,s2)

char s1[],s2[];

{

int i,j,k;

for (i=0,s[1]!=’\0’;i++)

{

for (j=i,k=0;s2[k]!=’\0’&& s1[j]==s2[k];j++,k++)

;

if(s2[k]==’\0’)

return(i);

}

return(-1);

}

char str1[]= “информатика;

char str2[]= “форма;

#include <stdio.h>

#include <conio.h>

Void main(void)

{clrscr();

printf("%d\n", index(str1,str2));

}

7-мысал. Функцияның параметрі ретінде оған нұсқауышты пайдалану мысалын қарастырайық. Функция cos(x)-тің туындысын есептейді.

double proiz(double x,double dx,double(*f)(double x));

double fun(double z);

Int main()

{

double x; /*туынды есептелетін нүкте*/

double dx; /*ығысу*/

double z; /*туындының мәні*/

scanf("%f,%f",&x,&dx);

z=proiz(x,dx,fun); /* функцияны шақыру */

printf("%f",z);

return 0;

}

double proiz(double x,double dx,double(*f)(double z))

{

double xk,xk1,pr;

xk=fun(x);

xk1=fun(x+dx);

pr=(xk1/xk-1e0)*xk/dx;

return pr;

}

double fun( double z)

{

return (cos(z));

}

Жоғарыда қарастырылған fun функциясы­н кез келген функцияның туындысын табу үшін қолдануға болады. Ол үшін анықталған fun функциясы­ның тұлғасын өзгерту керек немесе proiz функциясын шақырған кезде туындысы қарастырылып отырған функцияның атымен шақырса болғаны. Мысалы, sin(x) функциясының туындысын табу үшін жоғарыда қарастырылған proiz функциясын

z=proiz(x,dx,sin);

түрінде шақыру жеткілікті болып саналады.