Добавлен: 06.02.2019
Просмотров: 412
Скачиваний: 5
Міністерство освіти і науки України
Національний авіаційний університет
Кафедра прикладної інформатики
Лабораторна работа №5
З дисципліни: “Алгоритмізація та програмування”
Виконав
Студент ТП-113
Односумов Микола Сергійович
Киів 2015
Лабораторна робота № 5.
Тема: Організація циклічного обчислювального процесу.
Цикл з передумовою while.
Цикл з післяумовою do – while.
Одновимірні масиви.
Завдання:
Для наведених нижче задач
-
зробити математичну постановку;
-
скласти алгоритм програми;
-
скласти програму мовою С++ для обчислення;
-
проаналізувати результати роботи програми;
-
оформити протокол.
Варіант 16
Задача
1. Цикли. Обчислення нескінченних сум.
Утворити нескінченно спадну числову
послідовність:
7а)
де і- номер варіанта, k=1,2…;
7b)
де і – номер варіанта, х – довільне дане з проміжку (0 – 1), к=1,2,…. Обчислити суму елементів ak , bk нескінчених послідовностей з точністю е=0.001. Скільки потрібно доданків для досягнення заданої точності? Вивести на екран результати обчислень: елементи послідовності, кількість елементів, суму елементів послідовності.
Обидві послідовності розрахувати в одній програмі, задавши в режимі діалогу № послідовності, яку потрібно розрахувати.
Виконайте програму тричі для різних значень точності згідно з завданням.
Код програми:
#include "stdafx.h"
#include <math.h>
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
int nom, k = 1;
float a = 0, b = 0, e = 0.001, sum1 = 0, sum2 = 0, x;
char q, Y, N;
cout << "\tНомер последовательности (1/2) ";
cin >> nom;
cout << "\t\t\tЭлементы" << endl;
if (nom == 1)
{
do
{
a = ((-8.5*pow(1, -2 * k)) + (((5 * (k + 4) + (k - 0.2)) / ((k + 2)*k - 0.6)))) / k;
cout << '\t' << k << '\t';
k++;
sum1 += a;
} while (fabs(a) > e);
k -= 1;
cout << "\t\t\tКоличество элементов " << k << endl << "\t\t\tСумма элементов " << sum1 << endl;
}
else if (nom == 2)
{
srand(time(NULL));
x = rand() % 1000 + 1;
x /= 1000;
cout << "Случайный выбор х=" << x << endl;
k = 0;
long factk = 1;
b = 1;
while (fabs(b) > e)
{
k++;
factk = factk*k;
b = (pow(-1, k)*((-8.5*pow(2.7, -2 * k)) + ((5 * (k + 4) + log(abs(k - 0.2)) / ((k + 2)*k - 0.6))))*pow(x, k)) / factk;
sum2 += b;
cout << '\t' << k << endl;
}
cout << "Количество элементов " << k << endl << "Сумма элементов " << sum2 << endl;
}
system("pause");
}
Перевірка:
Задача2. Одновимірні масиви.
Розглянемо фінансову діяльність форми протягом декількох останніх років. Нехай дохід фірми за k-тий рік обчислюється формулою умовних одиниць, де k=2001,2002,…,2015, і- номер варіанта. Якщо , то вважатимемо, що фірма у відповідний рік мала прибуток, а у випадку – збитки. Вивести на екран таблицю: номер року, величина доходу (або збитку). Виконати індивідуальне завдання. Якщо шуканих даних немає, вивести про це повідомлення.
Визначити найбільший збиток. У якому році фірма мала найбільший прибуток?
Текст програми:
#include "stdafx.h"
#include <math.h>
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
int x = 0, k, o = 0;
float y = 0, MaxMin = 0, TopDoh = 0;
int const N = 15;
int year[N] = { 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 };
cout << "\t Год" << "\t Доход" << endl;
cout << "\t______________________" << endl;
for (o; o < 15; o++)
{
k = year[o];
y = 100 * ((((3.5*k - 1)*sin(5 * k) / ((k + 2)*(2 * k - 7))) + 2 * pow(k, 3)));
cout << "\t " << k << "\t " << y << endl;
if (y > TopDoh) {
TopDoh = y;
x = k;
}
if (y < MaxMin) {
MaxMin = y;
}
};
cout << "\t______________________" << endl;
cout << "\tГод в котором был максимальная прибыль " << x << endl;
cout << "\tМаксимальный расход " << MaxMin << endl;
system("pause");
}
Перевірка:
Блок-схема: