Лабораторные работы / z9411_КафкаРС_лр_3_fix3
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
(ГУАП)
КАФЕДРА № 44
Преподаватель
канд. техн. наук, доцент Бариков Л. Н.
Отчёт
по лабораторной работе №3
по дисциплине ОСНОВЫ ПРОГРАММИРОВАНИЯ
на тему: «Операторы цикла: заданное число повторений»
Работу выполнил
студент гр. Z9411 Кафка Р. С.
Санкт-Петербург
2020
Лабораторная работа №3
Операторы цикла: заданное число повторений
Цель лабораторной работы: изучение концепций и освоение технологии процедурного программирования, приобретение навыков процедурного программирования на языке C/C++ циклических вычислений.
Задание на программирование: используя технологию процедурного программирования разработать программу решения индивидуальной задачи тремя видами циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром).
Порядок выполнения работы:
1. Получить у преподавателя индивидуальное задание. Выполнить постановку задачи: сформулировать условие, определить входные и выходные данные.
2. Разработать математическую модель.
3. Построить схемы алгоритмов трёх функций, использующих для решения задачи циклические управляющие структуры с операторами while, do…while, 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________________________________________________________________
Скриншот результатов выполнения программы