Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Контрольная ОАиП 12в

..doc
Скачиваний:
20
Добавлен:
01.04.2014
Размер:
165.38 Кб
Скачать

Министерство образования республики Беларусь

Учреждение образования

«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»

Институт информационных технологий

Специальность Промышленная Электроника

КОНТРОЛЬНАЯ РАБОТА

По курсу Основы Алгоритмизации и Программирования

Вариант №12

Студент-заочник 1 курса

Группы №183123

ФИО

Адрес г.Минск

Тел. +375

Минск, 2011

Задание №1

Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.

При x = 3.251, y = 0.325, z = 0.46610-4c = 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 ( * – операция разадресации).

При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат:

12