Министерство образования Республики Беларусь Учреждение образования «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Кафедра «Вычислительные методы и программирование»
КОНТРОЛЬНАЯ РАБОТА № 1 по дисциплине «ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ» Вариант № 14
Выполнил: студент группы 400441 Гусаров С. В.
Минск БГУИР 2015 ЗАДАНИЕ №1 Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях. При x = 12.310-1, y = 15.4, z = 0.252103 : 82.825623.
#include <iostream.h> #include <math.h> #include <conio.h> int main () { double x, y, z, g, a, b, c, d, e, f, i, h;
cout << "Vvedite x: "; cin >> x; cout << "Vvedite y: "; cin >> y; cout << "Vvedite z: "; cin >> z; a = pow(y,x+1); b = pow(fabs(y-2),1/3.)+3; c = a/b; d = x+y/2; e = 2*fabs(x+y); f = d/e; i = pow(x+1,-1/sin(z)); h = f*i; g = h+c; cout << "Result g=" << g << endl; cout << "press any key ..." << endl; getch(); return 0; }
ЗАДАНИЕ №2 Вычислить значение y в зависимости от выбранной функции (x), аргумент которой определяется из поставленного условия. Возможные значения функции (x): 2x, x2, х/3 (в оконном приложениии выбор выполнить с помощью компоненты RadioGroup). Предусмотреть вывод сообщений, показывающих, при каком условии и с какой функцией производились вычисления у. , где #include <iostream.h> #include <math.h> #include <conio.h> int main () { double y, x, a, b, f, z; int kod; cout << "Vvedite a:"; cin >> a; cout << "Vvedite b:"; cin >> b; cout << "Vvedite z:"; cin >> z; if (z>0) { x = sqrt(z); cout << " Z > 0, x = " << x << endl; } else { x = 3*z+1; cout << " Z <= 0, x = " << x << endl; } cout << "\n 1 - 2x (for Default)\n 2 - x^2\n 3 - x/3" << endl; cin >> kod; switch(kod) { case 1: default: f = 2*x; cout << " f = 2x (defaul) = " << f << endl; break; case 2: f = x*x; cout << " f = x*x = " << f << endl; break; case 3: f = x/3; cout << " f = x/3 = " << f << endl; break; } y = b*cos(a*f)+sin(x/5)+a*exp(x); cout << " y = " << y << endl; cout << "\n\tPress any key ..." << endl; getch(); return 0; }
ЗАДАНИЕ №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 выбрать в зависимости от задания (10, 20, 50, 100). , . #include <iostream.h> #include <math.h> #include <conio.h> int main () { double x, a, b, h, n, r, s, y, g; int k; cout << "Vvedite a: "; cin >> a; cout << "Vvedite b: "; cin >> b; cout << "Vvedite h: "; cin >> h; cout << "Vvedite n: "; cin >> n; for(x = a; x<=b; x+=h) { r = s = x; for(k = 1; k<=n; k++) { r = r * x*x/(2*k*(2*k+1)); s += r; } y = (exp(x) - exp(-x))/2; g = fabs(y-s); cout << "\n x = " << x << "\t sum = " << s << "\t y = " << y << "\t g = " << g; } cout << "\nPress any key ... " << endl; getch(); return 0; }
ЗАДАНИЕ №4 По заданию лабораторной работы №3 написать программу расчета выбранной функции Y(x), или S(x) (желательно и |Y(x)–S(x)|), вид которой определяется в функции вывода (Out_Rez) в зависимости от переданного ей параметра kod. #include <iostream.h> #include <math.h> #include <conio.h> double fun(double); double sum(double, int); int main () { double x, a = 0.1, b = 1.0, h = 0.1, y, g, s; int n = 10; char code; cout << "1 - Test, Else - Input " << endl; code = getch(); if(code != '1') { cout << "Vvedite a: "; cin >> a; cout << "Vvedite b: "; cin >> b; cout << "Vvedite h: "; cin >> h; cout << "Vvedite n: "; cin >> n; } for(x = a; x<=b; x+=h) { s = sum(x, n); y = fun(x); g = fabs(y-s); cout << "\n x = " << x << "\t sum = " << s << "\t y = " << y << "\t g = " << g; } cout << "\nPress any key ... " << endl; getch(); return 0; } //------------------------------------------ double fun(double x) { return (exp(x) - exp(-x))/2; } //------------------------------------------ double sum(double x, int n) { double r, s; int k; r = s = x; for(k = 1; k <= n; k++) { r = r * x*x/(2*k*(2*k+1)); s += r; } return s; }
ЗАДАНИЕ №5 Написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. В консольном приложении предусмотреть возможность ввода данных как с клавиатуры, так и с использованием функции random(). Сумму модулей элементов массива, расположенных после первого элемента, рав¬ного нулю. #include <iostream.h> #include <math.h> void main() { const int N = 50; int n, i, s=0, massiv[N]; cout << "Vvedite razmer: "; cin >> n; if(n < 1 || n > 50) { cout << "Error Size, for Default size = 5" << endl; n = 5; } cout<<"Vvedite massiv\n"; for(i=0;i<n;i++) cin >> massiv[i]; for(i=0;i<n;i++) cout<<"\n massiv["<<i<<"] = "<<massiv[i]; for(i=0; i<n; i++) { if(massiv[i]==0) { for(i=i+1; i<n; i++) s += abs(massiv[i]); break; } } if(s == 0) cout << "\nNet 0, ili 0 poslednij!" << endl; else cout<<"\nSumma = "<<s << endl; }
ЗАДАНИЕ №6 Написать программу по обработке динамических массивов. Размеры массивов вводить с клавиатуры. В матрице размером NM поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением. #include <iostream.h> #include <iomanip.h> #include <conio.h> #include <math.h> int main() { double **a, tmp; int i, j, n, m, imin, jmin, imax, jmax; cout << "Vvedite razmer: n, m" << endl; cin >> n >> m; a = new double*[n]; for(i=0; i<n; i++) a[i] = new double[m]; for (i=0; i<n; i++) for (j=0; j<m; j++) { cout << "Vvedite a[" << i << "][" << j << "]: " ; cin >> a[i][j]; } cout << "Massiv A:" << endl; for (i=0; i<n; i++) { for (j=0; j<m; j++) cout << setw (9) << a[i][j] << " "; cout << endl; } imin=jmin=imax=jmax=0; for (i=0; i<n; i++) for (j=0; j<m; j++) { if (a[i][j]<a[imin][jmin]) { imin=i; jmin=j; } if (a[i][j]>a[imax][jmax]) { imax=i; jmax=j; } } for (j=0; j<m; j++) { tmp = a[imin][j]; a[imin][j] = a[imax][j]; a[imax][j] = tmp; } cout << "Result :" << endl; for (i=0; i<n; i++) { for (j=0; j<m; j++) cout << setw (9) << a[i][j] << " "; cout << endl; } for(i=0; i<n; i++) delete [] a[i]; delete []a; a = NULL; getch(); return 0; }
ЗАДАНИЕ №7 Дана строка, состоящая из слов, разделенных пробелами. Вывести на экран порядковый номер слова максимальной длины и номер позиции строки с которой оно начинается. #include <iostream.h> #include <iomanip.h> #include <conio.h> #include <stdio.h> #include <string.h> void main() { int n, i, k, pos, nom, max,nmax; char st[81]; char sl[30]; puts(" Vvedite stroku "); gets(st); strcat(st," "); n = strlen(st); if (n < 3) return; sl[0] = '\0'; k=0; nom=0; max=0; for (i=0; i<n; i++) if (st[i+1] != ' ') { sl[k] = st[i+1]; sl[k+1] = '\0'; k++; } else {
nom++; if (strlen(sl)>max) {max=strlen(sl); nmax=nom; pos=i-max+2;} sl[0] = '\0'; k = 0; } cout << "Nomer slova maksimal`noj dlini = " << nmax << endl; cout << "Ono nachinaetsja s pozicii " << pos << endl; puts("\nPress any key ... "); getch(); }