Программа дисциплины для студентов



бет33/45
Дата06.01.2022
өлшемі0,76 Mb.
#12433
түріБағдарламасы
1   ...   29   30   31   32   33   34   35   36   ...   45
Тапсырма варианттары:
LU координацияларды анқытау

#include

#include

#include
void init_matrix(int n, double (*a)[n][n]) {

int i,j;
for(i=0;i<n;i++)

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

(*a)[i][j]=10.;



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

(*a)[i][i]=10.*n;

}
void print_matrix(int n, double (*a)[n][n]) {

int i,j;
for(i=0;i<n;i++) {

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

printf("%lf\t",(*a)[i][j]);

printf("\n");

}

}


int [*]main(int [host]argc, char *[host]argv[]){

[host]:

{

int n, i, j;

n = atoi(argv[1]);

if(n<=0)

printf("Wrong input: n = %d\n", n);

else {

double a[n][n];

init_matrix(n,&a);

printf("\n Source matrix :\n");

print_matrix(n,&a);

for(i=0; i<n-1; i++) {

for(j=i+1; j<n; j++) {

double t;

t = a[j][i] / a[i][i];

if(a[j][i]!=0)

a[j][i:n-1] -= t * a[i][i:n-1];

}

}



printf("\n Matrix after LU transformation: \n");

print_matrix(n,&a);

}

}



}

Бақылау сұрақтары:
1. mpC жүйесіндегі афметикалық операторлар ға сипаттама беріңдер
2. Қандай қатынас операция қолданылады?
3. Сұрасныста қате хабарламалары қандай жағдайда пайда болады?
4. Қандай математикалық функциялар қолданылады.

5 Тәжірибелік жұмыс



Жұмыстың мақсаты: Рекурсия анықтамасын білу, рекурсияның көмегімен есептердің шешімін табу білу, рекурсивті, шекті шарттардың қойылуын білу, өзін-өзі шақыруды қолданатын ережелерді құрастыруды оқып үйрену.

Материалдар және жабдықтар: ДК, mpC программалау ортасы



Жұмыстың мазмұны және орындалу тәртібі:
1. Вариант бойынша тапсырманы алу
2. Есептің қойылымы
3. Есепті шешу алгоритмі
4. Есепті шешу программасын mpC программалау ортасында құру
5. Программа листингі
6. Орындалған жұмыс жөнінде есеп беру

Қысқаша мәлімет
Программада бір есепті бірнеше рет орындау қажет болған жағдайда қайталау ережесі және рекурсия қолданылады. Өз-өзін компонента түрінде құрастыратын ереже - рекурсия деп талады.

Рекурсияны басқару үшін рекурсияның аяқталу шартын беруіміз қажет. Бұл тізімдерді өңдеу кезінде эффективті болып келеді.



2. Тапсырмалар және оларды орындау реті

2.1 Рекурсияны қолданатын кі программа берілген. Программаның қай бөлігінде рекурсия қолданылатынын түсіндіріңіз.



Тапсырмалар:
LU координацияларын екі ретпен орналастыру

#include

#include

#include


void print_matrix(int n, double (*a)[n][n]) {

int i,j;
for(i=0;i<n;i++) {

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

printf("%lf\t",(*a)[i][j]);

printf("\n");

}

}


int [*]main(int [host]argc, char *[host]argv[]){

[host]:

{

int n, i, j;

n = atoi(argv[1]);

if(n<=0)

printf("Wrong input: n = %d\n", n);

else {

double a[n][n];

init_matrix(n,&a);

printf("\n Source matrix :\n");

print_matrix(n,&a);

for(i=0; i<n-1; i++) {

for(j=i+1; j<n; j++) {

double t;

t = a[j][i] / a[i][i];

if(a[j][i]!=0)

a[j][i:n-1] -= t * a[i][i:n-1];

}

}



printf("\n Matrix after LU transformation: \n");

print_matrix(n,&a);

}

}



}

Бақылау сұрақтары:
1. Рекурсия дегеніміз не?
2. ! таңбасы нені білдіреді?
3. Шекті шарты қалай қойылады?

6 Тәжірибелік жұмыс.



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

Материалдар және жабдықтар: ДК, mpC программалау ортасы



Жұмыстың мазмұны және орындалу тәртібі:
1. Вариант бойынша тапсырманы алу
2. Есептің қойылымы
3. Есепті шешу алгоритмі
4. Есепті шешу программасын mpC программалау ортасында құру
5. Программа листингі
6. Орындалған жұмыс жөнінде есеп беру

Қысқаша мәлімет
Тізімдер – mpC жиі қолданылатын құрылымдардың бірі. Тізімді жазу кезінде оны квадрат жақшаға алып жазады, ал оның элементтері үтірмен ажыратылады, мысалы,
[піл, жылқы, маймыл, ит]
бұл тізім төрт атомнан тұрады – піл, жылқы, маймыл, ит.
mpCтың кез келген термы тізімнің элементі болуы мүмкін, яғни, атомдар, сандар, айнымалылар және құрама термдер.
Бос тізім [ ] түрінде жазылады.
Төменде күрделі құрылымды тізім келтірілген:
[піл, [ ], X, атаана(Х, том), [a,b,c], f(22)]

Бос емес тізімнің бірінші элементі басы деп аталады, ал қалған бөлігі аяғы (хвост).

Бір ғана элементтен тұратын тізімнің басы сол жалғыз ғана элемент болып табылады, ал аяғы – бос тізім. [H|T] белгілеуі Н басы және Т аяғы бар тізімді көрсету үшін қолданылады.

Егер | символы тізімдегі соңғы термінің алында орналасқан болса, онда бұл соңғы терм басқа тізімді анықтайды.

Келесі мысалда, 1 – тізімнің басы, ал [2, 3, 4, 5] – аяғы.
?- [1, 2, 3, 4, 5] = [Head | Tail].
Head = 1
Tail = [2, 3, 4, 5]
Yes

Мұндағы, Head и Tail – тек айнымалылардың аты. Бұдан басқа айнымалыларды да қолдануға болады, нәтижесі сәтті аяқталады.


Мысал

Егер бізге тізімнің 2-ші элементі қажет болса, онда басы және тізім үшін анонимді айнымалыларды қолданамыз:


?- [піл, жылқы, есек, ит] = [_, X | _ ].
X = жылқы
Yes

1. Тізімді өңдеуге бірқатар процедураларды қолданайық.


Мысал:

Сандық тізімнің барлық элементтердің қосындысын есептейтін предикатты жазайық.


тізім_қосындысы([],0).
тізім_қосындысы([H|T],S):- number(H), тізім_қосындысы(T,S1),
S is S1+H.
Мысал

Орын/3 предикаты сәтті, егер екінші аргумент болып табылатын тізімнің кез келген орнына бірінші элементті қою арқылы алынған 3-ші аргумент тізім болса.


орын(E, L, [E|L]).
орын(E, [H|L], [H|Y]):- орын(E, L,Y).

Бұл предикатты қолданатын кейбір сұраныс мысалдары:


?- орын(1,[2,3],X).
X = [1, 2, 3] ;
X = [2, 1, 3] ;
X = [2, 3, 1] ;
No
?- орын(1,L,[2,1,3]).
L = [2, 3] ;
No
?- орын(X,[2,3],[2,1,3]).
X = 1 ;
No



Достарыңызбен бөлісу:
1   ...   29   30   31   32   33   34   35   36   ...   45




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

    Басты бет