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

Курс 1. Семестр 1.Вариант 3

.docx
Скачиваний:
22
Добавлен:
01.04.2014
Размер:
464.15 Кб
Скачать

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

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

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

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

Специальность ИТиУТС

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

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

Вариант № 3

Минск, 2010

Вариант 3

Задание №1. Линейный вычислительный процесс

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

3. .

При x = 3.7410-2,

y = –0.825,

z = 0.16102 v = 1.0553.

Рисунок 1 – Блок - схема к заданию 1.

Текст кода программы 1:

#include "stdafx.h"

#include "conio.h"

#include "iostream"

#include "math.h"

using namespace std; //объявляем пространство имён std

void main()

{

double x,y,z,a,b,c,res; //объявляем наши исходные,промежуточные и конечные переменные

cout << "Enter x,y,z\n"; //при помощи ф-ии cout выводим на экран текст

cin >> x >> y >> z; //при помощи ф-ии cin вводим с клавиатуры переменные x y z

a = (1+pow(sin(x+y),2))*pow(x,fabs(y)); //подсчитываем первый промежуточный результат

b = fabs(x-2*y/(1+x*x*y*y)); //подсчитываем второй промежуточный результат

c = pow(cos(atan(1/z)),2); //подсчитываем третий промежуточный результат

res = a/b+c; //получаем конечный результат перемножая промежуточные

cout << "x=" << x << "\ny=" << y << "\nz=" << z; //выводим на экран введённые с клавиатуры значения

cout << "\nResult = " << res << endl; //выводит на экран результат

getch();

}

Рисунок 2 – Результат выполнения программы 1

Задание №2. Реализация разветвляющихся алгоритмов

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

3. rez =

Рисунок 3 – Результат выполнения программы 2

Текст кода программы 2:

#include "stdafx.h"

#include "conio.h"

#include "math.h"

void main()

{

double k1,k2,res; //объявляем наши исходные,промежуточные и конечные переменные, тип double чтобы они могли хранить дробные числа

puts("Enter k1,k2"); //выводим на экран сообщение при помощи puts

scanf("%lf%lf",&k1,&k2); //считываем введённые с клавиатуры данные

if ((k1*k2)>0 && (k1*k2)<=1) //секция If - в ней проверяются условия

{

res = sqrt(fabs(2*k1-5*k2*k2))*exp(k1+k2); //записываем нашу формулу вычисления

puts("0<k1*k2<=1"); //выводим на экран условия, которым удовлетворяют наши k1 и k2

}

else

{

if ((k1*k2)>1)

{

res = sqrt(fabs(2*k1*k1-5*k2))*exp(k1-k2); //записываем нашу формулу вычисления

puts("k1*k2>1"); //выводим на экран условия, которым удовлетворяют наши k1 и k2

}

else //секция else

{

puts("k1*k2<=0"); //выводим на экран условия

puts("No rezult"); //сообщение об отсутствии результата

getch(); //ждём нажатия клавиши

return;

}

}

printf("Result = %.6lf",res); //выводим на экран результат

getch();

}

Рисунок 4 – Результат выполнения программы 2

Задание №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 выбрать в зависимости от задания.

3. .

Рисунок 5 – Результат выполнения программы 3

#include "stdafx.h"

#include "conio.h"

#include "math.h"

#define p 3.14159265 //объявляем константу пи

void main()

{

double Y,S,a,b,h,n,x,k,f; //объявляем наши исходные,промежуточные и конечные переменные

puts("Enter a,b,h,n\n"); //puts выводим на экран текст

scanf("%lf%lf%lf%lf",&a,&b,&h,&n); //вводим с клавиатуры a,b,h и n

for (x = a;x <= b;x += h) //в этом цикле будем считать значения Y и S для разных значений х

{

S = 1; //сумме изначально присваиваем значение 1

printf("x = %lf",x); //выводим на экран текущее значение х

f = 1; //с помощью этой переменной будем считать факториал

for (k = 1;k <= n;k++) //в этом цикле будем считать значение S для конкретного х

{

f*=k;

S+=cos(k*p/4)*pow(x,k)/f; //вычисляем один элемент формулы

}

printf(" S(x) = %.6lf",S); //выводим на экран значение суммы

Y = cos(x*sin(p/4))*exp(x*cos(p/4)); //вычисляем Y по данной нам формуле

printf(" Y(x) = %.6lf\n",Y); //выводим Y на экран

}

getch(); //эта функция ждёт пока мы нажмём любую клавишу

}

Рисунок 6 – Результат выполнения программы 3

Задание №4. Обработка одномерных массивов

В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить:

3. Сумму элементов массива, расположенных до последнего положительного элемента.

Рисунок 7 – Результат выполнения программы 4

#include "stdafx.h"

#include "conio.h"

#include "iostream"

#include "math.h"

using namespace std;

void main()

{

int mas[20],n,i,sum=0,last=0; //объявляем переменные

//mas[20]-массив с 20 элементами, каждый элемент - типа int,n - число элементов массива, с которыми мы будем работать

//i- счётчик ,last - будет хранить номер последнего положительного числа в массиве

//sum - получившаяся сумма

cout << "Enter N(<=20)";

cin >> n;

cout << "4tobi uvidet' korrektnuu rabotu, massiv dolgen zakan4iavat'sa na oticatel'nie 4isl\n";

cout << "\nMassiv\n";

for (i = 0;i < n;i++) //в этом цикле проходим по n элементам массива и инициализируем их (заносим значения)

{

cout << "\t a[" << i+1 << "]=";

cin >>mas[i];

}

for (i = n-1;i >= 0;i--) //в этом цикле проходим по всем элементам массива с конца, пока не встретим положительный.Его номер присвоим переменной last

{

if (mas[i] > 0) //проверяем, больше ли нуля текущий элемент массива

{

last = i; //если да - записываем его номер в переменную last как последнее положительное число в массиве

break;

}

}

for (i = 0;i <= last;i++) //в этом цикле считаем сумму элементов массива, с нулевого до last

sum+=mas[i]; //прибавляем к sum значение текущего элемента массива

cout << "\nSumma =" <<sum;

getch();

}

Рисунок 8 – Результат выполнения программы 4

Задание №5. Обработка двухмерных динамических массивов. Функции пользователя

В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.

3. Найти максимальный элемент и поменять его с первым элементом.

Рисунок 9 – Результат выполнения программы 5

#include "stdafx.h"

#include "conio.h"

#include "iostream"

#include "math.h"

using namespace std;

void find_min(int &,int &,int,int,int **); //это прототип подпрограммы

void main()

{

int **mas,i,j,n,m,x,y,buf=0; //объявляем переменные типа int

//mas - наш двухмерный массив

//I,j - счётчики

//n,m - размер массива

//x,y - координаты в массиве наименьшего элемента

//buf - буфер обмена

cout << "Enter n,m :\n";

cin >> n >> m;

mas = new int *[n]; //создаём массив указателей (мы отводим для него память)

for (i = 0;i < n;i++) //в цикле создаем массив для каждого указателя в массиве указателей

mas[i] = new int[m];

cout <<"\nEnter the massive\n";

for (i = 0;i < n;i++) //в этом цикле вводим элементы массива

for (j = 0;j < m;j++)

{

cout << "a["<< i+1 << "][" << j+1 << "]=";

cin >> mas[i][j];

}

cout << "\n Matrix:\n";

for (i = 0;i < n;i++) //здесь выводим массив в виде матрицы

{

for (j = 0;j < m;j++)

cout << "\t" << mas[i][j];

cout << endl;

}

find_min(x,y,n,m,mas); //вызываем нашу функцию.Она найдёт наибольший элемент массива.Его координаты будут храниться в х,у

buf = mas [x][y]; //меняем местами искомое и первое значение при помощи переменной buf

mas [x][y] = mas [0][0];

mas [0][0] = buf;

cout <<"---------------------------------------------\n";

for (i = 0;i < n;i++) //выводим на экран преобразованный массив

{

for (j = 0;j < m;j++)

cout << "\t" << mas[i][j];

cout << endl;

}

getch();

delete []mas; //удаляем память, отведённую под переменную mas

}

void find_min(int &a,int &b,int n,int m,int **mas) //при помощи ссылок обращаемся к нашим переменным x и y

{

int max = mas[0][0]; //присваиваем max значение первого эл-та массива

a = b = 0; //обнуляем переменные положения в массиве, если больших элементов не найдётся

for (int i = 0;i < n;i++) //в цикле проходим все значения массива, если какое-то больше текущего - заменяем max и записываем его координаты

{

for (int j = 0;j < m;j++)

{

if (mas[i][j] > max)

{

max = mas [i][j];

a = i;

b = j;

}

}

}

}

Рисунок 10 – Результат выполнения программы 5

Литература

1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007.

2. Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. - Мн.: БГУИР, 2004.

3. Бусько В.Л., Карцев В.Т., Кривоносова Т.М., Навроцкий А.А. Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч.1 . – Минск: БГУИР, 2007.

18