
Курс 1. Семестр 1.Вариант 3
.docx
Министерство образования республики Беларусь
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Институт информационных технологий
Специальность ИТиУТС
КОНТРОЛЬНАЯ РАБОТА
По курсу Основы алгоритмизации и программирования
Вариант № 3
Минск, 2010
Вариант 3
Задание №1. Линейный вычислительный процесс
Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.
3.
|
При x = 3.7410-2, y = –0.825, z = 0.16102 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.