Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 семестр / Отчет 2 лаба прога

.docx
Скачиваний:
0
Добавлен:
28.03.2025
Размер:
286.25 Кб
Скачать

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

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Факультет компьютерных технологий и информатики

Кафедра САПР

ОТЧЁТ

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

по дисциплине «Программирование»

Тема: «Реализация программы с условными конструкциями»

Студент группы 4353:

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

Калмычков В.А.

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

2024

Содержание:

  1. Исходная формулировка задания. (стр. 3)

  2. Анализ задания и устранение неясности и неточности. (стр. 3)

  3. Математическая постановка задания. (стр. 3-5)

  4. Контрольные пример. (стр. 4)

  5. Ограничения. (стр. 5)

  6. Разработка интерфейсов пользователя. (стр. 5)

  7. Реализация ввода и вывода. (стр. 5)

  8. Внутреннее представление данных в программе. (стр. 5)

  9. Представление алгоритма. (стр. 6)

  10. Код программы. (стр. 7-8)

  11. Вывод о проделанной работе. (стр. 8)

  1. Исходная формулировка задания.

Составить программу, определяющую для заданного значения x значение y по данному периодическому фрагменту.

  1. Анализ задания и устранение неясности и неточности.

Фрагмент представляет собой две ограниченные окружности с радиусом равным b. Из него выходит отрезок с длиной b. При вводе разных значений b изменяется радиус окружности и длинна отрезков. В ходе анализа заданий неясностей и неточностей не возникло.

  1. Математическая постановка задания.

Дано: вводимое значение x; вводимое значение b.

Найти: значение y.

Фрагмент представляет собой четверть окружности с радиусом равным b. Из него выходит отрезок с длиной b.

Способ решения: Подставление введенных значений в формулы графиков функций в соответствии с ограничениями.

Особенности решения задачи на компьютере: Перед началом интерактивной части программы показать, как примерно выглядит график.

Организация: Программа просит пользователя ввести значение x и b. Выводится результат вычислений.

Формат представления данных: x, b и y имеют вещественный тип данных (double).

  1. Контрольные примеры.

  1. Ограничения.

Ограничения обусловлены типом double. Диапазон допустимых значений: от -1,7E-308 до 1,7E+308.

  1. Разработка интерфейсов пользователя.

O1:

O2: "Введите х:"

I1: Тип переменных: вещественный(double)

O3: "Введите b:"

I2: Тип переменных: вещественный(double)

O4: “y(“x”) =” y

  1. Реализация ввода и вывода.

Название библиотеки

Вывод чисел

Вывод текста

Переход к новой строке

Ввод

Iostream

cout

cout

\n

cin

  1. Внутреннее представление данных в программе.

Имя

Тип

Назначение

x

double

Значение точки по абсциссе

b

Радиус окружности

y

Значение точки по ординате

а

Вспомогательная переменная

  1. Представление алгоритма.

  1. Код программы.

/*

Задание: определить для заданного значения 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;}

  1. Вывод о проделанной работе.

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