Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Программалау.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
166.05 Кб
Скачать

14.Атаулар кеңістігі, түрлену қызметі, кластың статикалық мүшелері, кластың тұрақты және модификацияланатын мүшелері.

Егер кластың берілгендер өрісі static қызметші сөзімен сипатталса, онда бұл өрістің мәні сол кластың барлық объектілері үшін бірдей болады. Кластың статикалық берілгендері барлық объектілер қандай да бірдей мәндерді бірлесе қолданғанда пайдалы. Статикалық өріс өз мінездемесі бойынша статикалық айнымалыға ұқсас: ол класс ішіде ғана көрінеді, ал оның өмірінің уақыты программаның өмір сүру уақытымен сәйкес келеді. Бірде бір класс объектісі болмаса да, статикалық айнымалысынан өзгешелігі – кластың статикалық өріс бар болады. Кластың статикалық айнымалысын қолдану мысалын қарастырайық. Берілген мезетте әр объекті өзі сияқты жадыда қанша объект бар екендігін білу қажет болсын. Бұл жағдайда класқа count есімді статикалық айнымалыны енгізіеміз. count айнымалысын барлық объектілір көре алады және олардың бәрі бірдей мәнді көреді. // statdata. cpp # include < iostream. h> class foo {private:

Static int count; public: foo ( ) { count ++;} int getcount ( ) { return count; } }; int foo : : count = 0; // count анықтамасы int main( ) { foo f1, f2, f3; cout << ”Объект саны = “ < cout << “Объект саны = “ < cout << “Объект саны =” < return 0; }

f1, f2, f3 объектілері үшін main( ) функциясында конструктор үш рет шақырылады, count өрістерін инкременттеу де үш рет болады. getcount ( ) әдісі count –ты қайтарады. Барлық жағдайда да бұл әдіс бір мәнді қайтарады. Объект саны =3 Объект саны =3 Объект саны =3 Егер статикалық емес, автоматты count өрісін қолдансақ, онда конструктор әр объекті үшін бұл өрістің мәнін бірге арттырар еді. Объект саны =1 Объект саны =1 Объект саны =1

15.Тапсырмалардың паралелді орындалуы.

Си тіліндегі екі процесс арасындағы хабар алмасу мысалы

#include "mpi.h"

#include <stdio.h>

int main(int argc, char **argv)

{

int rank;

float a, b;

MPI_Status status;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

a = 0.0;

b = 0.0;

if(rank == 0)

{

b = 1.0;

MPI_Send(&b, 1, MPI_FLOAT, 1, 5, MPI_COMM_WORLD);

MPI_Recv(&a, 1, MPI_FLOAT, 1, 5, MPI_COMM_WORLD, &status);

}

if(rank == 1)

{

a = 2.0;

MPI_Recv(&b, 1, MPI_FLOAT, 0, 5, MPI_COMM_WORLD, &status);

MPI_Send(&a, 1, MPI_FLOAT, 0, 5, MPI_COMM_WORLD);

}

printf("process %d a = %f, b = %f\n", rank, a, b);

MPI_Finalize();

}

MPI технологияларын қолданып пи санын Си тілінде есептеп шығару

#include <stdio.h>

#include <mpi.h>

double f(double y) {return(4.0/(1.0+y*y));}

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

{

double w, x, sum, locpi, pi, t1, t2;

int i, rank, size;

int n = 1000000000;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Barrier(MPI_COMM_WORLD);

t1=MPI_Wtime();

w = 1.0/(double)n;

sum = 0.0;

for(i=rank+1; i <= n; i+=size)

{

x = w*(i-0.5);

sum = sum + f(x);

}

locpi = w*sum;

MPI_Reduce(&locpi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

MPI_Barrier(MPI_COMM_WORLD);

t2=MPI_Wtime();

if(rank==0) printf("N= %d, Nproc=%d, pi = %lf, Time=%lf \n", n, size, pi, t2-t1);

MPI_Finalize();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]