Министерство образования республики Беларусь Учреждение образования "БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ" Институт информационных технологий
Специальность Промышленная Электроника
КОНТРОЛЬНАЯ РАБОТА
По курсу Основы Алгоритмизации и Программирования
Вариант №12
Студент-заочник 1 курса Группы №183123 ФИО Адрес г.Минск Тел. +375
Минск, 2011
Задание №1 Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.
При x = 3.251, y = 0.325, z = 0.466 10-4 c = 4.025. 4.25143 Текст программы с использованием стандартных функций ввода-вывода, может иметь следующий вид:
#include <stdio.h> #include <conio.h> #include <math.h> double const pi=3.1415926; void main() { double x, y, z, a, b ,c; puts("Enter x, y, z = "); scanf("%lf %lf %lf", &x, &y, &z); a=pow(2,(pow(y,x)))+pow(pow(3,x),y); b=y*(atan(z)-pi/6)/(fabs(x)+1/(y*y+1)); c=a-b; printf("\n x = %lf\n y = %lf\n z = %lf\nRezult = %lf\n", x, y, z, c); puts("Press any key ... "); getch(); }
Задание №2 Составить программу для вычисления значения rez в зависимости от поставленного условия. Для получения результатов подобрать исходные данные так, чтобы выполнялись все возможные ветви алгоритма. Перед выводом полученного результата должно выводиться сообщение о ветви, при прохождении которой он получен. Обратите внимание, что возможен случай, при котором исходные данные не будут подходить ни для одного из предложенных условий. rez = Текст программы может иметь следующий вид: #include <conio.h> #include <stdio.h> #include <math.h> void main() { double x, t, rez; puts("Input t, x"); scanf("%lf%lf",&t, &x); if (x >= 10*t){ rez=sqrt(fabs(x*exp(sin(x))+t*exp((-2)*x))); puts(" x >= 10*t"); } else { if(x>=3*t && x<10*t) { rez=sqrt(fabs(x+t)*exp(cos(x))); puts(" 3*t <= x < 10*t"); } else{puts("x < 3*t"); return;} } printf("\n\t Rez = %8.6lf\n", rez); 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 <stdio.h> #include <conio.h> #include <math.h> void main() { double a, b, x, h, y, f, s=0, mod; int j, n, z, k=0, fac; puts("Input a,b,h,n"); scanf("%lf%lf%lf%d", &a, &b, &h, &n);
for(x = a; x<=b; x+=h) { if(k%2==0) z=1; else z=-1; if(k==0) fac=1; else{ j=1; fac = 1; while(j<=2*k){fac*=j; j++;} } f=z*(2*pow(k,2)+1)/fac*pow(x,2*k); s+=f; y=((1-(pow(x,2)/2))*cos(x))-((x/2)*sin(x)); printf("\n x= %8.2lf sum= %8.7lf y=%lf mod=%lf", x,s,y,mod); k++; if(k==n)break; } puts("\nPress any key ... "); getch(); } Результат программы с введенными в одной строке значениями a=0.1, b=1.0, h=0.1 и n=10, будет иметь следующий вид:
Задание №4 В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить: Сумму элементов массива, расположенных после первого положительного элемента. Текст программы с использованием ввода-вывода в потоках может иметь следующий вид: #include <iostream.h> #include <conio.h> void main() { int a[20], n, i, j, z, s = 0; 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]; } for(i=0; i<n;i++) if(a[i] > 0){ z = i; break;} for(j=z+1; j<n; j++) s += a[j]; cout << "\n\t Summa = " << s << endl; cout << "\n Press any key ... " << endl; getch(); }
Блок-схема программы тогда будет иметь вид:
Результат выполнения программы может иметь следующий вид:
Задание №5 В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных. Найти число элементов массива < T (вводится с клавиатуры) и перемножить эти элементы. Текст программы может иметь следующий вид: #include <iostream.h> #include <conio.h> int Fun_Prod_Kol(int, int, int**, int*); void main() { int **a, i, j, n, m, proiz, kol; 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 A" << endl; for(i=0; i<n; i++) for(j=0; j<m; j++){ cout << "\t a[" << i+1 << "][" << j+1 << "] = "; cin >> a[i][j];} cout <<"\n Matrix A:" << endl; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout << "\t" << a[i][j]; cout << endl;} proiz = Fun_Prod_Kol(n, m, a, &kol); cout << "\n Kol-vo = " << kol << "\t Proizvedenie = " << proiz << endl; delete []a; cout << "\n\t Delete !" << endl; cout << " Press any key ... " << endl; getch();} int Fun_Prod_Kol(int a, int b, int **x, int *k) { int i, j, T, pr=1; *k = 0; cout << "Enter T" << endl; cin >> T; for(i=0; i<a;i++) for(j=0; j<b;j++) if(x[i][j] < T){ (*k)++; pr *= x[i][j]; } return pr; } Блок-схема программы тогда будет иметь вид:
Блок-схема подпрограммы пользователя будет иметь вид:
Из функции мы должны получить два скалярных результата - количество элементов массива меньших заданного Т и их сумму. С помощью оператора return мы возвращаем сумму, а второе значение мы передаем в точку вызова с помощью указателя (адреса): при обращении к функции в качестве четвертого параметра передаем адрес &kol, а в функции используем "содержимое, находящееся по указанному адресу" *k ( * - операция разадресации). При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат: