
1 семестр / Отчет Прога Лаба 1
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Факультет компьютерных технологий и информатики
Кафедра САПР
ОТЧЁТ
по лабораторной работе № 1
по дисциплине «Программирование»
Тема: «Вычисление значения полинома»
Студент группы |
|
|
Преподаватель |
|
Калмычков В.А. |
Санкт-Петербург
2024
Содержание:
Исходная формулировка программы. (стр.3)
Цель работы. (стр.3)
Анализ задания и устранение неясности и неточности. (стр.3)
Математическая постановка задачи. (стр.3-4)
Контрольные примеры. (стр.4-5)
Ограничения. (стр.5)
Разработка интерфейсов пользователя. (стр.5-6)
Реализация ввода и вывода. (стр.6)
Внутреннее представление данных в программе. (стр.6-7)
Представление алгоритма. (стр,7)
Код программы. (стр.7-9)
Вывод программы. (стр.9)
Общий вывод. (стр.9-10)
Исходная формулировка программы.
Написать программу для вычисления частного от значений полиномов:
Представить программу в виде трех версий:
Полно с помощью библиотек <iostream> и <iomanip>
Коротко с помощь <iostream> и <iomanip>
Полно с помощью библиотеки <stdio.h> и <stdlib.h>
Цель работы.
– практическое использование вещественного типа данных,
– организация линейного процесса вычислений, изучение арифметических действий (их эффективное выполнение при расчете степени),
– изучение ввода-вывода с использованием разных библиотек, форматированный вывод,
– практическое использование символьного типа для формирования сообщений при организации пользовательского интерфейса
Анализ задания и устранение неясности и неточности.
В ходе анализа заданий неясностей и неточностей не возникло.
Математическая постановка задачи.
Дано: вводимое число вещественного типа.
Найти: разность значений полиномов:
P(x)
= (
)
Q(x)
= (
)
Способ решения: Разложение полиномов с помощью выноса за скобку x с самой маленькой степенью, пока в итоге не получим выражения:
+ 0,0002)
Особенности решения задачи на компьютере: Для вывода на экран значения полинома и промежуточного значения в первой версии программы отведено 10 позиций после запятой.
Организация: Программа просит пользователя ввести значение x. Выводятся промежуточные значения и результат вычислений.
Формат представления данных: Вводится вещественное значение x. В первой и второй версиях программы с помощью методов setw и setprecision библиотеки <iomanip> устанавливается формат вывода переменной x. В третьей программе формат вывода устанавливается с помощью "%20.10lf\n" библиотеки <stdio.h>.
Определение внутреннего формата представления данных: x(2,5), p1((3218.5325322 * x) + 6.54), p2((p1 * x) + 53.3424), p3(p2 * y * x), y(x*x), q1((-21.98 * y * x) + 25.3), q2((q1 * y * x) + 0.0002), q3(q2 * x), rez(p3 / q3) - переменные типа float. По введённому значению x находится промежуточное значения p3 и q3, а затем выводится rez - конечный результат работы алгоритма.
Описание алгоритма: Разложение полиномов с помощью выноса за скобку x с самой маленькой степенью, пока в итоге не получим выражения:
+ 0,0002)
Контрольные примеры.
Код 1:
X = 2,5
Шаг 1:
Шаг 2:
Шаг 3:
Шаг 4:
Шаг 5:
Шаг 6:
Шаг 7:
Код 2:
X = 2,5
Шаг 1:
Шаг 2:
Шаг 3:
Код 3:
X = 2,5
Шаг 1:
Шаг 2:
Шаг 3:
Шаг 4:
Шаг 5:
Шаг 6:
Шаг 7:
Ограничения.
По
условию, введены ограничения
.
Разработка интерфейсов пользователя.
O1: Задание:
Автор:
группа: 4353
Ограничения:
Версия: 1.1.1
Дата: 04.09.2024 - не сейчас
O2: "Введите х от -10^20 до 10^20:"
I1: Тип переменных: вещественный(float), +\- ddd/d___d(10)
O3: i-й шаг: +\- d___d/d___d(10)
I2: Тип переменных: вещественный(float), +\- ddd/d___d(10)
O4: "Для x = " +\- d___d.d___d(10) . Результат: d___d.d___d(10)
Реализация ввода и вывода.
Название библиотеки |
Вывод чисел |
Вывод текста |
Переход к новой строке |
Ввод |
stdio |
printf %s |
printf %s |
\n |
scanf |
Iostream |
cout |
cout |
\n |
cin |
iomanip |
|
setw setprecision |
|
|
Внутреннее представление данных в программе.
Имя
Тип
Назначение
x
float
аргумент
y
p1,p2
промежуточное значение полинома
q1,q2
промежуточное значение полинома
p3
результат полинома
q3
результат полинома
rez
частное полиномов
Представление алгоритма
Код программы.
/*
Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 +25,3х^4 +0,0002х)
Автор:
Ограничения:
Версия: 1.1.1
Дата: 04.09.2024 - примерно в ночь с 04.09.2024 на 05.09.2024
*/
#include <iostream>
#include <iomanip>
#include <locale.h>
void main(void) {
setlocale(LC_ALL, "ru");
float x, p1, p2, p3, y, q1, q2, q3, rez;
std::cout << " Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 +25,3х^4 +0,0002х) \n"
<< " Автор: \n Ограничения: \n Версия : 1.1.1 \n Дата : 04.09.2024 - не сейчас\n";
std::cout << " Введите х от -10^20 до 10^20:";
std::cin >> x;
y = x * x;
p1 = (3218.5325322 * x) + 6.54;
std::cout << "1й шаг:" << std::setw(20) << std::setprecision(10) << p1 << "\n";
p2 = (p1 * x) + 53.3424;
std::cout << "2й шаг:" << std::setw(20) << std::setprecision(10) << p2 << "\n";
p3 = (p2 * y * x);
std::cout << "3й шаг:" << std::setw(20) << std::setprecision(10) << p3 << "\n";
q1 = (-21.98 * y * x) + 25.3;
std::cout << "4й шаг:" << std::setw(20) << std::setprecision(10) << q1 << "\n";
q2 = (q1 * y * x) + 0.0002;
std::cout << "5й шаг:" << std::setw(20) << std::setprecision(10) << q2 << "\n";
q3 = q2 * x;
std::cout << "6й шаг:" << std::setw(20) << std::setprecision(10) << q3 << "\n";
rez = p3 / q3;
std::cout << "7й шаг:" << std::setw(20) << std::setprecision(10) << rez << "\n";}
/*
Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 +25,3х^4 +0,0002х)
Автор:
Ограничения:
Версия: 1.2.1
Дата: ночь 05.09.2024 - не сейчас
*/
#include <iostream>
#include <iomanip>
#include <locale.h>
void main(void) {
setlocale(LC_ALL, "ru");
float x, y, p1, rez;
std::cout << " Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 +25,3х^4 +0,0002х) \n"
<< " Автор: \n Ограничения: \n Версия : 1.2.1 \n Дата : 04.09.2024 - не сейчас";
std::cout << "Введите х от -10^20 до 10^20:"; std::cin >> x; y = x * x;
std::cout << std::setw(20) << std::setprecision(10) << ((((3218.5325322 * x) + 6.54) * x) + 53.3424) * (y * x) /
(((((-21.98 * (y * x)) + 25.3) * (y * x)) + 0.0002) * x);}
/*
Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 +25,3х^4 +0,0002х)
Автор:
Ограничения:
Версия: 1.3.1
Дата: 06.09.2024 -
*/
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
void main(void) {
setlocale(LC_ALL, "Russian");
double x, p1, p2, p3, y, q1, q2, q3, rez;
printf("%s" ,"Задание: (3218,5325322x^5 + 53,3424x^3 + 6,54x^4) / (-21,98х^7 + 25,3х^4 + 0,0002х) \n Автор: \n Ограничения: \n Версия : 1.3.1 \n Дата : 07.09.2024 - не сейчас \n");
printf("%s","Введите х от -10^20 до 10^20:");
scanf_s("%lf", &x);
y = x * x;
p1 = (3218.5325322 * x) + 6.54;
printf("1й шаг:");
printf("%20.10lf\n",p1);
p2 = (p1 * x) + 53.3424;
printf("2й шаг:");
printf("%10.10lf\n", p2);
p3 = (p2 * y * x);
printf("3й шаг:");
printf("%10.10lf\n", p3);
q1 = (-21.98 * y * x) + 25.3;
printf("4й шаг:");
printf("%10.10lf\n", q1);
q2 = (q1 * y * x) + 0.0002;
printf("5й шаг:");
printf("%10.10lf\n", q2);
q3 = q2 * x;
printf("6й шаг:");
printf("%10.10lf\n", q3);
rez = p3 / q3;
printf("7й шаг:");
printf("%10.10lf\n", rez);}
Вывод программы.
Общий вывод.
В ходе выполнения лабораторной роботы были освоены библиотеки <iostream> , <iomanip>, <stdio.h>, <stdlib.h>, а также изучены основные конструкции языка С++. Получены практические навыки использования этого языка программирования для решения различных задач.