Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.
При x = 16.5510-3, y = –2.75, z = 0.15 = –38.902. –40.6307
Структурная схема алгоритма:
Листинг:
#include <iostream> using namespace std; #include <conio.h> #include <math.h> int main() { double x, y, z, a, b , rez; cout << "\n\t x,y,z = " << endl; // Вводим исходные данные cin >> x >> y >> z; // Разбиваем наш пример на несколько частей; вычисляем первую часть a = sqrt(10*(pow(x,1*1.0/3)+pow(x,y+2))); // Вычисляем вторую часть b = pow(asin(z),2)-fabs(x-y); // Вычисляем ответ rez = a*b; cout << "\n x = " << x << "\n y = " << y << "\n z = " << z // Выводим на экран << "\nRezult = " << rez << endl; cout << "Press any key ... " << endl; getch(); return 0; }
Задание №2 Составить программу для вычисления значения rez в зависимости от поставленного условия. Для получения результатов подобрать исходные данные так, чтобы выполнялись все возможные ветви алгоритма. Перед выводом полученного результата должно выводиться сообщение о ветви, при прохождении которой он получен. rez =
Структурная схема алгоритма:
Листинг:
#include <conio.h> #include <math.h> #include <iostream> #include <iomanip> using namespace std; int main() { double n1, n2, rez, nsum; cout << "Input n1, n2" << endl; // Вводим исходные дынные cin >> n1 >> n2; nsum=n1+n2; // Находим ответ в соответствии с условиями if ((nsum>=M_PI)&&(nsum<5.0)) { rez = pow(sin(M_PI*n1+exp(n2)),2); cout << " pi <= n1+n2 < 5" << endl; } else if (nsum>=5.0) { rez = pow(sin(M_PI*n2+n1),2); cout << " n1+n2>=5 " << endl; } else cout << "n1+n2<PI \t Net otveta" << endl; cout.unsetf(ios::showpos); // Вывовим ответ на экран cout << "\n\t Rezult U = " << rez; cout <<"\nPress any key ... " << endl; getch(); }
Задание №3
Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Так как значение S(x) является рядом разложения функции Y(x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.
Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания.
. Структурная схема алгоритма:
Листинг:
#include <conio.h> #include <stdio.h> #include <math.h> // Описываем функцию вычиления факториала double fact(int n) { int i, nfact; nfact=1; for (i=1; i<=n; i++) nfact=nfact*i; return nfact; } int main() { double x, a, b, h, s, y, rez; int k, n; // Вводим исходные данные puts("Input a,b,h,n"); scanf("%lf%lf%lf%d", &a, &b, &h, &n); // Производим необходимые вычисления в соответсвии с заданием for(x = a; x<=b; x+=h) { s = 1; y=(1+2*pow(x,2))*exp(pow(x,2)); for(k = 1; k<=n; k++) { rez=((2*k+1)/fact(k))*pow(x,2*k); s+=rez; } // Выводим результаты вычислений printf("\n x= %1.1f sum= %8.5lf fun= %8.5lf |Y(x) - S(x)| = %8.5lf ", x,s,y,fabs(y-s)); } puts("\nPress any key ... "); getch(); }
Экранная форма:
Задание №4. Обработка одномерных массивов
В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами. Структурная схема алгоритма:
Листинг:
#include <conio.h> #include <iostream> #include <iomanip> #include <stdio.h> using namespace std; int main() { int a[20], n, i, pos1, pos2, s = 0; // Вводим N <=20 cout << "\t Input N (<=20) "; cin >> n; // Вводим элементы массива cout <<"\n\t Massiv A" << endl; for(i = 0; i < n; i++) { cout << "\t a[ " << i+1 << " ] = "; cin >> a[i]; } // Выводим наш массив cout <<"\n a[n]=" << endl; for(i = 0; i < n; i++) printf(" %d ", a[i]); // Выполняем необходимые вычисления i=0; while (a[i] >= 0) i++; pos1=i+1; i++; while (a[i] >= 0) i++; pos2=i-1; for(i = pos1; i <= pos2; i++) s+=a[i]; // Выводим полученный результат cout << "\n Summa ot pos " << pos1 << " do pos " << pos2+2 << " ravna : " << s; cout << "\n Press any key ... " << endl; getch(); }
Экранная форма:
Задание №5. Обработка двухмерных динамических массивов. Функции пользователя
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных. Найти минимальный элемент и поменять его с последним элементом.
Структурная схема алгоритма:
Листинг: #include <iostream> using namespace std; #include <conio.h> // Описываем функцию обработки массива int Fun_Mas_Change(int n, int m, int **mas) { int i, j, min=mas[0][0], p1=0, p2=0; for(i=0; i<n;i++) for(j=0; j<m;j++) if(mas[i][j] < min){ min=mas[i][j]; p1=i; p2=j; } mas[p1][p2]=mas[n-1][m-1]; mas[n-1][m-1]=min; cout <<"\n Matrix (after changes) :" << endl; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout << "\t" << mas[i][j]; cout << endl; }
} int main () { int **a, i, j, n, m; // Вводим размерность массива cout << "\t Input N, M : "; cin >> n >> m; // Резервируем под данный массив память a = new int*[n]; for(i=0; i<n;i++) a[i] = new int[m]; // Вводим массив cout <<"\n Input Massiv" << endl; for(i=0; i<n; i++) for(j=0; j<m; j++){ cout << "\t mas[" << i+1 << "][" << j+1 << "] = "; cin >> a[i][j]; } // Выводим исходный массив cout <<"\n Matrix :" << endl; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout << "\t" << a[i][j]; cout << endl; } // Выполняем функцию обработки массива Fun_Mas_Change(n, m, a); delete []a; cout << "\n\t Delete !" << endl; cout << " Press any key ... " << endl; getch(); }
Экранная форма:
Дополнительное задание №6. Обработка структур с использо-ванием файлов
Написать программу обработки файла типа запись, содержащую сле-дующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания». Каждая запись должна содержать следующую информацию о студен-тах: – фамилия и инициалы; – год рождения; – номер группы; – оценки за семестр: по физике, математике, информатике, химии; – средний балл. Организовать ввод исходных данных, средний балл рассчитать по введен-ным оценкам. Содержимое всего файла и результаты решения индивидувльного за-дания записать в текстовый файл. Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.
int main() { int kod, i=0, j, kod2, x=0, pos; char qgroup[10];
Ft = fopen(File_Rez, "w"); while(true) { ouch: puts("\n\n Create: 1 \n Edit: 2 \n View: 3 \n My Task: 4 \n EXIT: 0"); scanf("%d", &kod); switch(kod) { case 1: if ((Fz=fopen(File_Zap,"wb"))==NULL) { puts("\n Create ERROR!"); return 0; } fclose(Fz); printf ("\n Create New File %s !\n", File_Zap); break; case 2: puts ("\n Add: 1 \n Correct: 2 \n Back: 0"); scanf("%d", &kod2); switch(kod2) { case 1: Fz= fopen(File_Zap,"ab"); printf("\n F.I.O.: "); fflush(stdin); gets(BD.FIO); printf("\n The year of birth: "); scanf("%lf", &BD.g_r); printf("\n Group: "); cin>>BD.group; printf("\n Phisics: "); scanf("%lf", &BD.o_f); printf("\n Math: "); scanf("%lf", &BD.o_m); printf("\n IT knowledge: "); scanf("%lf", &BD.o_i); printf("\n Chemistry: "); scanf("%lf", &BD.o_h); BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4; fwrite(&BD, 1,size, Fz); fclose(Fz); break; case 2: puts("\nInput number of unit: "); scanf("%d",&pos); pos--; Fz= fopen(File_Zap,"r+b"); fseek(Fz, pos*size, SEEK_SET); fread(&BD,1,size,Fz); printf("\n F.I.O.: "); fflush(stdin); gets(BD.FIO); printf("\n The year of birth: "); scanf("%lf", &BD.g_r); printf("\n Group: "); cin>>BD.group; printf("\n Phisics: "); scanf("%lf", &BD.o_f); printf("\n Math: "); scanf("%lf", &BD.o_m); printf("\n IT knowledge: "); scanf("%lf", &BD.o_i); printf("\n Chemistry: "); scanf("%lf", &BD.o_h); BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4; fseek(Fz, pos*size, SEEK_SET); fwrite(&BD, 1, size, Fz); fclose(Fz); break; case 3: goto ouch; break; } break; case 3: if ((Fz=fopen(File_Zap,"rb"))==NULL) { puts("\n Open ERROR!"); return 0; } // Вывод на экран printf ("\n\t--------- Informations ---------"); // Запись такой же информации в текстовый файл Ft fprintf (Ft, "\n\t--------- Informations ---------"); while(1) { if(!fread(&BD,size,1,Fz)) break; Out(BD); } fclose(Fz); break; case 4: Fz = fopen(File_Zap,"rb"); if ((Fz=fopen(File_Zap,"rb"))==NULL) { puts("\n Open ERROR!"); return 0; } j=0; while(1) { if(!fread(&BD,size,1,Fz)) break; j++; } fclose(Fz); Fz = fopen(File_Zap,"rb"); if ((Fz=fopen(File_Zap,"r"))==NULL) { puts("\n Open ERROR!"); return 0; } cout << "\n Input group:"; cin >> qgroup; cout <<"\n----- T A S K -----\n"; for(i=0;i<j;i++) {fread(&BD,size,1,Fz); if (stricmp(BD.group, qgroup)==0) { x++; if (BD.FIO[0] == 'V') Out(BD); if (BD.FIO[0] == 'G') Out(BD); if (BD.FIO[0] == 'D') Out(BD); } } if (x==0) {puts("No unit's");}
fclose(Fz); break; case 0: fclose(Ft); return 0; } } } //----------------- Функция вывода одной записи на экран и в файл -------------------- void Out(T_BD z) { printf(" \n %s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b); fprintf(Ft, "%s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b); }
Основная литература
1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007. 2. Бусько В.Л., Карцев В.Т., Кривоносова Т.М., Навроцкий А.А. Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч.1 . – Минск: БГУИР, 2007.
Дополнительная литература
1. Страуструп, Б. Язык программирования C++ / Б. Страуструп: 2-е изд.: В 2 т. – Киев: ДиаСофт, 1993. 2. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.