
1 семестр / Отчет 2 лаба прога
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Факультет компьютерных технологий и информатики
Кафедра САПР
ОТЧЁТ
по лабораторной работе № 2
по дисциплине «Программирование»
Тема: «Реализация программы с условными конструкциями»
Студент группы 4353: |
|
|
Преподаватель: |
|
Калмычков В.А. |
Санкт-Петербург
2024
Содержание:
Исходная формулировка задания. (стр. 3)
Анализ задания и устранение неясности и неточности. (стр. 3)
Математическая постановка задания. (стр. 3-5)
Контрольные пример. (стр. 4)
Ограничения. (стр. 5)
Разработка интерфейсов пользователя. (стр. 5)
Реализация ввода и вывода. (стр. 5)
Внутреннее представление данных в программе. (стр. 5)
Представление алгоритма. (стр. 6)
Код программы. (стр. 7-8)
Вывод о проделанной работе. (стр. 8)
Исходная формулировка задания.
Составить программу, определяющую для заданного значения x значение y по данному периодическому фрагменту.
Анализ задания и устранение неясности и неточности.
Фрагмент представляет собой две ограниченные окружности с радиусом равным b. Из него выходит отрезок с длиной b. При вводе разных значений b изменяется радиус окружности и длинна отрезков. В ходе анализа заданий неясностей и неточностей не возникло.
Математическая постановка задания.
Дано: вводимое значение x; вводимое значение b.
Найти: значение y.
Фрагмент представляет собой четверть окружности с радиусом равным b. Из него выходит отрезок с длиной b.
Способ решения: Подставление введенных значений в формулы графиков функций в соответствии с ограничениями.
Особенности решения задачи на компьютере: Перед началом интерактивной части программы показать, как примерно выглядит график.
Организация: Программа просит пользователя ввести значение x и b. Выводится результат вычислений.
Формат представления данных: x, b и y имеют вещественный тип данных (double).
Контрольные примеры.
Ограничения.
Ограничения обусловлены типом double. Диапазон допустимых значений: от -1,7E-308 до 1,7E+308.
Разработка интерфейсов пользователя.
O1:
O2: "Введите х:"
I1: Тип переменных: вещественный(double)
O3: "Введите b:"
I2: Тип переменных: вещественный(double)
O4: “y(“x”) =” y
Реализация ввода и вывода.
Название библиотеки |
Вывод чисел |
Вывод текста |
Переход к новой строке |
Ввод |
Iostream |
cout |
cout |
\n |
cin |
Внутреннее представление данных в программе.
Имя |
Тип |
Назначение |
x |
double |
Значение точки по абсциссе |
b |
|
Радиус окружности |
y |
|
Значение точки по ординате |
а |
|
Вспомогательная переменная |
Представление алгоритма.
Код программы.
/*
Задание: определить для заданного значения x значение y по периодическому фрагменту.
^
y / \
|
|
b |- \_ - \ - \_ - \_ 1
| \_ 1 \_ 1 \_ 1 \_ 1
| \ 1 \ 1 \ 1 \ 1
0| 1 1 1 1 1 1 1 1
-----------b-----------1--------1-----------1---------1----------1---------1-----------1--->x
| 1 _/ 1 _/ 1 _/ 1 _/
| 1 _/ 1 _/ 1 _/ 1 _/
| 1 _/ 1 _/ 1 _/ 1 _/
-b | 1_/ 1_/ 1_/ 1_/
|
Автор: Группа: Версия программы: 2.1
Дата начала: 25.09.24 Дата завершения:
*/
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
double x, b, y, f, y2;
y2 = 0;
cout << "Задание: определить для заданного значения x значение y по периодическому данному фрагменту:\n";
cout << " * \n";
cout << " y / \\ \n";
cout << " |\n";
cout << " |\n";
cout << " b |- \\_ - \\ - \\_ - \\_ 1\n";
cout << " | \\_ 1 \\_ 1 \\_ 1 \\_ 1\n";
cout << " | \\ 1 \\ 1 \\ 1 \\ 1\n";
cout << " 0| 1 1 1 1 1 1 1 1\n";
cout << " ------------b-----------1--------1-----------1---------1----------1---------1-----------1--->x\n";
cout << " | 1 _/ 1 _/ 1 _/ 1 _/\n";
cout << " | 1 _/ 1 _/ 1 _/ 1 _/\n";
cout << " | 1 _/ 1 _/ 1 _/ 1 _/\n";
cout << " - b | 1_/ 1_/ 1_/ 1_/\n";
cout << " |\n";
cout << "\nАвтор: \nГруппа: \nВерсия программы: 2.1\n";
cout << "Дата начала: 25.09.24\nДата завершения:\n";
cout << "Введите значение x: ";
cin >> x;
cout << "Введите значение коэффициента b: ";
cin >> b;
f = fmod(x, 2 * fabs(b));
if (f < 0) {
f += 2 * fabs(b);
}
if (fabs(b) == 0) {
y = 0;
}
else if (b > 0) {
if (f <= b) {
y = sqrt(b * b - pow(f, 2));
}
else {
y = -sqrt(b * b - pow(f - b, 2));
}
}
else {
if (f <= -b) {
y = sqrt((-b) * (-b) - pow(f + b, 2));
}
else {
y = -sqrt(pow(b, 2) - pow(int(abs(f) + 1) - abs(f), 2));
}
}
if (fmod(x, b) == 0) {
//прямые
if (fmod((x / b), 2) == 0) {
if (b > 0) { y = b; }
if (b < 0) { y = -b; }
}
else {
if (b > 0) { y = -b; }
if (b < 0) { y = b; }
}
}
if (fmod(x, b) == 0 and x != 0) {
cout << "y(" << x << ") = от 0 до " << y;
}
else {
cout << "y(" << x << ") = " << y;
}
return 0;}
Вывод о проделанной работе.
В процессе выполнения лабораторной работы я научился работать с условными операторами в языке программирования C++, строить блок-схемы и математические модели.