Министерство образования Республики Беларусь Учреждение образования «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ» Институт информационных технологий
Специальность ИТ и УТС
КОНТРОЛЬНАЯ РАБОТА №1
По курсу «Основы алгоритмизации и програмирования»
Вариант № 3
Минск, 2010
1. Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях:
Приx = 3.7410-2, y = –0.825, z = 0.16102 v = 1.0553.
Cхема алгоритма:
Кодпрограммы: #include #include #include int main() { double x, y, z, a, b, c, v; puts("\n x, y, z = \n"); scanf("%lf %lf %lf", &x, &y, &z); a=1+pow(sin(x+y),2); b=fabs(x-(2*y/(1+x*x*y*y))); c=pow(cos(atan(1/z)),2); v=(a/b)*pow(x,fabs(y))+c; printf("\n x = %5.1lf\n y = %5.1lf\n z = %5.1lf\n v = %5.4lf\n", x, y, z, v); puts("Press any key ... "); getch(); return 0;}
Результат выполнения программы:
2.Составить программу для вычисления значения rez в зависимости от поставленного условия. Для получения результатов подобрать исходные данные так, чтобы выполнялись все возможные ветви алгоритма. Перед выводом полученного результата должно выводиться сообщение о ветви, при прохождении которой он получен. rez =
Схема алгоритма:
Код программы: #include #include #include void main() { double k1, k2, rez; puts("\n Vvedite k1, k2: "); scanf("%lf%lf",&k1,&k2); if (((k1*k2)>0)&&((k1*k2)<=1)) {rez=sqrt(fabs(2*k1-5*pow(k2,2)))*exp(k1+k2); printf(" Vvedennye znachenija udovletvorjajut 1-mu usloviju \n\t rez=%5.3lf",rez);} else if ((k1*k2)>1) {rez=sqrt(fabs(2*pow(k1,2)+5*k2))*exp(k1-k2); printf("\n Vvedennye znachenija udovletvorjajut 2-mu usloviju \n\t rez=%5.3lf",rez);} else printf("\n Vvedennye znachenija ne udovletvorjajut ni odnomu iz uslovij"); puts("\n Press any key ... "); getch();} Результат выполнения программы: 1)
2)
3)
3. Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметраn выбрать в зависимости от задания.
4.В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить сумму элементов массива, расположенных до последнего положительного элемента.
Схема алгоритма:
Код программы:
#include #include #include #define n 10 void main() { int a[n],i,s=0,k=0; puts("Vvedite elementy massiva\n"); for(i=0;i printf(" Massiv\n"); for(i=0;i for(i=0;i0) k=i; if(k==0) printf("\nPolozhitelnyh elementov net"); for(i=0;i printf("\n Summa ravna %i",s); puts("\nPress any key ... "); getch(); }
Результат выполнения программы:
1)
2)
5. В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных. Найти максимальный элемент и поменять его с первым элементом.
Кодпрограммы:
#include #include #include voidchangeMaxAndMin(int **a, int n, int m); void main() { int **a, i, j, n, m; puts("Vvedite N, M :"); scanf("%d%d", &n, &m); a = new int*[n]; for (i = 0; i < n; i++) { a[i] = new int[m]; } puts("Vvediteelementymassiva:"); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } puts("\n Ishodnyjmassiv: "); for (i = 0; i< n; i++) { for (j = 0; j < m; j++) { printf(" %4d ", a[i][j]); } printf("\n"); } changeMaxAndMin(a, n, m); puts("Poluchennyjmassiv: "); for (i = 0; i< n; i++) { for (j = 0; j < m; j++) { printf(" %4d ", a[i][j]); } printf("\n"); } puts("Press any key ... "); getch(); } voidchangeMaxAndMin(int **a, int n, int m) { int i, j, max1, max2, max_value; max_value = a[0][0]; max1 = 0; max2 = 0; for(i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (a[i][j] >max_value) { max_value = a[i][j]; max1 = i; max2 = j; } } } a[max1][max2] = a[0][0]; a[0][0] = max_value; }
Результат выполнения программы:
6. Написать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания». Каждая запись должна содержать следующую информацию о студентах: – фамилия и инициалы; – год рождения; – номер группы; – оценки за семестр: по физике, математике, информатике, химии; – средний балл. Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.Содержимое всего файла и результаты решения индивидувльного задания записать в текстовый файл. Распечатать анкетные данные студентов-отличников из интересующей вас группы.
Код программы:
#include #include #include #include #include #pragma hdrstop #pragma argsused struct TZap{char FIO[30]; int DataRojd; int NomGr; int Fizika; int Math; int Inform; int Himia; double s_b; }Zap; int size = sizeof(TZap); FILE *Fz, *Ft; char File_Zap[ ]="zapisi.dat"; char File_Rez[ ]="rezult.txt"; void Out(TZap); void main() { int kod, D_f,i=0,j,kol; long len; TZap st, *mas_Z; Ft = fopen(File_Rez, "w"); while(1){ puts("\n SOZDANIE-1\n REDAKTIROVANIE-2\n PROSMOTR-3\n RESHENIE INDIVIDUALNOGO ZADANIA-4\n VIHOD-0"); scanf("%d",&kod); switch(kod){ case 1: if((Fz=fopen(File_Zap, "wb"))==NULL){ puts("\nCREATE ERROR!"); return; } fclose(Fz); printf("\nCreate New File %s!\n",File_Zap); break; case 2: Fz=fopen(File_Zap,"ab"); printf("\nF.I.O. - "); fflush(stdin); gets(Zap.FIO); printf("\nData rozdenia - "); scanf("%d",&Zap.DataRojd); printf("\nNomer gruppi - "); scanf("%d",&Zap.NomGr); printf("\nOcenka po fizike - "); scanf("%d",&Zap.Fizika); printf("\nOcenka po matematike - "); scanf("%d",&Zap.Math); printf("\nOcenka po informatike - "); scanf("%d",&Zap.Inform); printf("\nOcenka po himii - "); scanf("%d",&Zap.Himia); Zap.s_b=(Zap.Fizika+Zap.Math+Zap.Inform+Zap.Himia)/4.; fwrite(&Zap,size,1,Fz); fclose(Fz); break; case 3: if((Fz=fopen(File_Zap,"rb"))==NULL){ puts("\nOPEN ERROR!"); return; } printf("\n\t------INFORMATIONS------"); fprintf(Ft,"\n\t------INFORMATIONS------"); while(1){ if(!fread(&Zap,size,1,Fz))break; Out(Zap); } fclose(Fz); break; case 4: Fz=fopen(File_Zap,"rb"); D_f=fileno(Fz); len=filelength(D_f); kol=len/size; mas_Z=new TZap[kol]; for(i=0;i fread((mas_Z+i),size,1,Fz); fclose(Fz); printf("\n\t------OTLICHNIKI------"); fprintf(Ft,"\n\t------OTLICHNIKI------"); for(i=0;i {if(mas_Z[i].s_b>=9) Out(mas_Z[i]);} delete []mas_Z; break; case 0: fclose(Ft); return; }}} void Out(TZap z) { printf("\n%20s,%d,%6d,%d,%d,%d,%d,%5.2lf.", z.FIO, z.DataRojd, z.NomGr, z.Fizika, z.Math, z.Inform, z.Himia, z.s_b); fprintf(Ft,"\n%20s,%d,%d,%d,%d,%d,%d,%5.2lf.",z.FIO,z.DataRojd,z.NomGr, z.Fizika, z.Math, z.Inform, z.Himia, z.s_b); }
Результат выполнения программы:
ЛИТЕРАТУРА
1. Основы алгоритмизации и программирования. Язык Си : учеб. пособие / М. П. Батура, В. Л. Бусько, А. Г. Корбит, Т. М. Кривоносова. – Минск : БГУИР, 2007. 2. Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. / Бусько В.Л., Корбит А.Г., Кривоносова Т.М.- Мн.: БГУИР, 2004. 3. Методические указания по выполнению контрольной работыпо курсу «Основы алгоритмизации и программирования» для студентов заочного отделения ИИТ. / Корбит А.Г., Кривоносова Т.М. – Минск: БГУИР, 2007.