Добавлен: 06.02.2019

Просмотров: 412

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Міністерство освіти і науки України

Національний авіаційний університет

Кафедра прикладної інформатики









Лабораторна работа №5

З дисципліни: “Алгоритмізація та програмування”



















Виконав

Студент ТП-113

Односумов Микола Сергійович













Киів 2015





Лабораторна робота № 5.

Тема: Організація циклічного обчислювального процесу.

Цикл з передумовою while.

Цикл з післяумовою do while.

Одновимірні масиви.

Завдання:

Для наведених нижче задач

  1. зробити математичну постановку;

  2. скласти алгоритм програми;

  3. скласти програму мовою С++ для обчислення;

  4. проаналізувати результати роботи програми;

  5. оформити протокол.



Варіант 16

Задача 1. Цикли. Обчислення нескінченних сум. Утворити нескінченно спадну числову послідовність:
7а) де і- номер варіанта, k=1,2…;

7b)

де і – номер варіанта, х – довільне дане з проміжку (01), к=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");

}




Перевірка:

Блок-схема: