Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / z9411_КафкаРС_лр_3_fix3

.docx
Скачиваний:
5
Добавлен:
18.05.2022
Размер:
134.54 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

      1. федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

(ГУАП)

КАФЕДРА № 44

Преподаватель

канд. техн. наук, доцент Бариков Л. Н.

Отчёт

по лабораторной работе №3

по дисциплине ОСНОВЫ ПРОГРАММИРОВАНИЯ

на тему: «Операторы цикла: заданное число повторений»

Работу выполнил

студент гр. Z9411 Кафка Р. С.

Санкт-Петербург

2020

Лабораторная работа №3

Операторы цикла: заданное число повторений

Цель лабораторной работы: изучение концепций и освоение технологии процедурного программирования, приобретение навыков процедурного программирования на языке C/C++ циклических вычислений.

Задание на программирование: используя технологию процедурного программирования разработать программу решения индивидуальной задачи тремя видами циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром).

Порядок выполнения работы:

1. Получить у преподавателя индивидуальное задание. Выполнить постановку задачи: сформулировать условие, определить входные и выходные данные.

2. Разработать математическую модель.

3. Построить схемы алгоритмов трёх функций, использующих для решения задачи циклические управляющие структуры с операторами while, dowhile, for соответственно.

4. Составить программу на языке C/C++.

5. Входные данные вводятся один раз с клавиатуры по запросу.

6. Ввод исходных данных и вывод результатов должен осуществляться в функции main(). Выходные данные выводить на экран в развернутой форме с пояснениями.

7. Использовать стандартные потоковые объекты ввода/вывода cin и cout.

8. Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов.

9. Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схемы алгоритмов трёх функций, текст программы, контрольные примеры (скриншоты).

10. Вариант задания определяется как две последних цифры номера зачетной книжки (цц), взятых по модулю 50, плюс 1 (цц mod 50 + 1). Например, 00 – 1-й вариант, 01 – 2-ой вариант, 49 – 50-ый вариант, 60 – 11-ый вариант, и т.д.

Вариант №4. (студ. билет 2019/3603)

Для введенного с клавиатуры значения m вычислить S:

Разработка математической модели и схем алгоритмов решения задачи для варианта 4 задания вида:

Для введенного с клавиатуры значения m вычислить S:

Математическая модель

Вводится значение m.

Задаётся начальный номер слагаемого (i=1). Обнуляется начальное значение суммы.

Вычисляется значение x по заданной формуле x= -2.5 + m/i.

Вычисляется величина очередного слагаемого, и на эту величину увеличивается текущее значение суммы.

Увеличивается на 1 значение i.

Для нового значения параметра i вычисляется значение x, вычисляется величина очередного слагаемого, и на эту величину увеличивается текущее значение суммы.

Действия повторяются до превышения параметром i значения m.

Задача решена.

Схемы алгоритмов решения

а) решение с использованием цикла while (функция recur1)

recur1(m)

factorial = 6

i++

sum+=

i<=m

sum=0

x=-2.5+m/i

i=1

factorial *= i + 2

return(sum)

б) решение с использованием цикла do…while (функция recur2)

recur1(m)

factorial = 6

sum=0

x=-2.5+m/i

sum+=

i++

i=1

factorial *= i + 2

return(sum)

i<=m

в) решение с использованием цикла for (функция recur3)

recur1(m)

factorial = 6

sum+=

x=-2.5+m/i

sum=0

i=1; i<=m; i++

i=1

factorial *=(i+1)+2

return(sum)

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

//Вариант 4. Для введенного с клавиатуры значения m вычислить

//значение суммы заданного вида, если значение x вычисляется

//по формуле x = -2.5 + m / i

#include<iostream>;

#include<locale.h>

#include<cmath>

using namespace std;

float recur1(int m);

float recur2(int m);

float recur3(int m);

//main_begin________________________________________________________________

int main()

{

int var, //выбор действия

m; //входные данные

float re1, re2, re3; //результаты вычислений суммы

setlocale(LC_ALL, "Russian");

for (;;)

{//Выбор действия

cout << "\n Вид действия:" << endl;

cout << " 1 - вычисление значения суммы" << endl;

cout << " 2 - завершение задачи" << endl;

printf(" Введите вид действия ->");

cin >> var;

switch (var)

{

case 1://Ввод исходных данных

cout << " Введите значение m ";

cin >> m;

re1 = recur1(m);

re2 = recur2(m);

re3 = recur3(m);

//Вывод результата

cout.precision(3); //число знаков после запятой при выводе

cout << " Для цикла WHILE результат = " << re1 << endl;

cout << " Для цикла DO..WHILE результат = " << re2 << endl;

cout << " Для цикла FOR результат = " << re3 << endl;

break;

default: return 1;

}//switch

}//for

}

//main_end__________________________________________________________________

//recur1_beg________________________________________________________________

//вычисление значения суммы циклом while

float recur1(int m)

{

int i = 1, //начальное значение номера слагаемого

factorial = 6; //начальное значение факториала (i + 2)!

float x,

sum = 0; //исходное значение суммы

while (i <= m)

{

x = -2.5 + m * 1. / i;

sum += log((2.5 * x * x + 5. * i / m) / factorial);

i++;

factorial *= i + 2;

}

return(sum);

}

//recur1_end________________________________________________________________

//recur2_beg________________________________________________________________

//вычисление значения суммы циклом do..while

float recur2(int m)

{

int i = 1, //начальное значение номера слагаемого

factorial = 6; //начальное значение факториала (i + 2)!

float x,

sum = 0; //исходное значение суммы

do

{

x = -2.5 + m * 1. / i;

sum += log((2.5 * x * x + 5. * i / m) / factorial);

i++;

factorial *= i + 2;

} while (i <= m);

return(sum);

}

//recur2_end________________________________________________________________

//recur3_beg________________________________________________________________

//вычисление значения суммы циклом for

float recur3(int m)

{

int i = 1, //начальное значение номера слагаемого

factorial = 6; //начальное значение факториала (i + 2)!

float x,

sum = 0; //исходное значение суммы

for (i = 1; i <= m; i++)

{

x = -2.5 + m * 1. / i;

sum += log((2.5 * x * x + 5. * i / m) / factorial);

factorial *= (i + 1) + 2;

}

return(sum);

}

//recur3_end________________________________________________________________

Скриншот результатов выполнения программы