Файл: Лабораторная работа 4 по дисциплине Программирование Выполнил студент Доценко Илья Сергеевич специальность 09. 03. 01 Содержание.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 33
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
а) находит среднее арифметическое элементов непустого списка;
б) заменяет в списке все вхождения элемента E1 на элемент E2.
2.1. Описание используемых переменных.
Рис. 2.3Блок-схема алгоритма основной программы Блокх
Введенный список «10 101 94 94 94 95 96 97 98 99».
Элемент 94 заменен на элемент 111.
Элемент 2 заменен на элемент 9.
3.1. Описание используемых переменных и констант.
n Номер последнего элемента массива
input_file - Имя файла с входными данными
Министерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
ОТЧЕТ
Лабораторная работа № 4
по дисциплине «Программирование»
Выполнил студент:
Доценко Илья Сергеевич
специальность 09.03.01
СОДЕРЖАНИЕ
1. Введение 3
2. Решение задачи №1 4
2.1. Описание используемых переменных 4
2.2. Описание алгоритма 5
2.3. Блок-схема алгоритма 6
2.4. Тестирование программы 7
3. Решение задачи №2 8
3.1. Описание используемых переменных 8
3.2. Описание алгоритма 8
3.3. Блок-схема алгоритма 9
3.4. Тестирование программы 10
4. Заключение 10
ПРИЛОЖЕНИЕ А ЛИСТИНГ ПРОГРАММЫ №1 12
ПРИЛОЖЕНИЕ B ЛИСТИНГ ПРОГРАММЫ №2 13
1. Введение
Лабораторная работа № 4 состоит из двух задач. Первая задача посвящена созданию программ, отражающих приемы работы со списками.
Второе задание посвящено созданию программ в графическом режиме.
2. Решение задачи №1
Используйте линейные списки для хранения последовательности вещественных чисел. Опишите процедуру или функцию, которая:
а) находит среднее арифметическое элементов непустого списка;
б) заменяет в списке все вхождения элемента E1 на элемент E2.
2.1. Описание используемых переменных.
Глобальные:
s, l: list;
Функция AVG:
Процедура change:
2.2. Описание алгоритма
-
Создаем список; -
Вычисляем его среднее арифметическое; -
Запрашиваем элемент, который нужно заменить и элемент на который необходимо заменить; -
При наличии вхождений элемента e заменяем его на e1; -
Выводим полученный список; -
2.3. Блок-схема алгоритма
Рис 2.3.1 Блок-схема основной части программы.
Рис 2.3.2 Блок-схема процедуры out_spisok.
Рис 2.3.3 Блок-схема процедуры avg.
Рис 2.3.3 Блок-схема процедуры change.
Рис. 2.3Блок-схема алгоритма основной программы Блокх
2.4. Тестирование программы
Введенный список «10 101 94 94 94 95 96 97 98 99».
Среднее арифметическое 87,8.
Элемент 94 заменен на элемент 111.
Рис. 2.4.1. Результат
Введенный список «2 3 2 2».
Среднее арифметическое 2.25.
Элемент 2 заменен на элемент 9.
Рис. 2.4.4. Результат
3. Решение задачи №2
Даны целые числа t1, t2, ... t31, — задающие график температур за март месяц. Построить график температур. Отрезки прямых, лежащие выше 0 градусов Цельсия и лежащие ниже 0 градусов Цельсия, должны быть окрашены в разные цвета.3.1. Описание используемых переменных и констант.
n Номер последнего элемента массива
input_file - Имя файла с входными данными
3.2. Описание алгоритма
-
Рисуем оси координат; -
Загружаем данные из файла; -
Определяем масштаб основываясь на минимальном и максимальном значении температур; -
Рисуем график. -
3.3. Блок-схема алгоритма
Рис 3.1 Блок-схема основной части программы.
Рис 3.2 Блок-схема процедуры draw_coordinate_lines.
Рис 3.3 Блок-схема процедуры read_from_file.
Рис 3.4 Блок-схема функции min.
Рис 3.5 Блок-схема функции min.
Рис 3.6 Блок-схема функции max_.
Рис 3.7 Блок-схема функции max1.
Рис 3.8 Блок-схема процедуры get_scale.
Рис 3.8 Блок-схема процедуры draw_chart.
3.4. Тестирование программы
Данные из файла 2_temperatures_1.txt
-15 -15 -15 -14 -13 -12 -11 -5 -5 -4 -4 -3 0 0 0 0 0 0 1 2 2 2 2 5 5 6 7 7 7 10 60
Результат.
Рис 4.1 График температур.
Данные из файла 2_temperatures_2.txt
-15 -15 -15 -14 -13 -12 -11 -5 -5 -4 -4 -3 0 0 0 0 0 0 1 2 2 2 2 5 5 6 7 7 7 10 60
Результат.
Рис 4.2 График температур.
4. Заключение
В процессе выполнения задания №1 изучены возможности списков.
В процессе выполнения задания №2 использован модуль graphABC, а так же применен рекурсивный метод поиска минимального и максимального значений, изученный в рамках лабораторной работы №3
Надеюсь, мне никогда больше не придется использовать Pascal PL.
ПРИЛОЖЕНИЕ А ЛИСТИНГ ПРОГРАММЫ №1
(*
Задача 1
Используйте линейные списки для хранения последователь-
ности вещественных чисел. Опишите процедуру или функ-
цию, которая:
а) находит среднее арифметическое элементов непустого
списка;
б) заменяет в списке все вхождения элемента E1 на элемент E2.
*)
type
telem = 0..999;
list = ^node;
node = record
info: telem;
next: list
end;
var
s, l: list;
x, e, e1: telem;
n, i: integer;
procedure
change(l: list; e, e1: telem);
var
p: list;
{ссылка на очерeдное звено}
begin
p := L;
while p <> nil do
begin
if p^.info = e then p^.info := e1;
p := p^.next
{переход к следующему звену}
end;
end;
function avg(l: list): real;
var
p: list; counter, sum: integer;
begin
counter := 0;
sum := 0;
p := L;
while p <> nil do
begin
inc(counter);
sum := sum + p^.info;
p := p^.next
{переход к следующему звену}
end;
if counter <> 0 then
avg := sum / counter
else
avg := 0;
end;
procedure out_spisok(l: list);
begin
while l <> nil do
begin
s := l^.next;
write(l^.info, ' ');
l := s;
end;
writeln;
end;
begin
{формируем список}
s := nil;
writeln('Введите количесто элементов списка');
readln(n);
for i := 1 to n do
begin
writeln('Ввдите элемент списка №', i);
new(l);
l^.next := s;
readln(x);
l^.info := x;
s := l;
end;
{выводим список на экран}
writeln('Введенный список');
out_spisok(l);
writeln('Среднее арифметическое элементов списка равно ', avg(l));
writeln('Введите элемент, вхождения которого необходимо заменить');
readln(e);
writeln('Введите элемент, на который необходимо заменить');
readln(e1);
change(l, e, e1);
// insert(l, e, e1);
writeln('Полученный список');
out_spisok(l);
{освобождаем динамическую память}
while l <> nil do
begin
s := l^.next;
dispose(l);
l := s;
end;
end.
ПРИЛОЖЕНИЕ B ЛИСТИНГ ПРОГРАММЫ №2
graphABC;
const
n = 31; // НОмер последнего элемента массива
input_file = '2_temperatures_2.txt'; // Имя файла с входными данными
var
x_scale, y_scale, i: integer; // Масштаб по оси Х, масштаб по оси У, счетчик
f: textFile; //файл с входными данными
tempereatures: array [1..n] of integer; //Массив с значениями температуры
// Определяем минимальное значение температуры для задания масштаба графика
function min1(a, b: integer): integer;
begin
min1 := a;
if b < a then min1 := b;
end;
function min(k: integer): integer;
begin
if k = n then
min := tempereatures[k]
else
min := min1(tempereatures[k], min(k + 1));
end;
function max1(a, b: integer): integer;
begin
max1 := a;
if b > a then max1 := b;
end;
function max_(k: integer): integer;
begin
if k = n then
max_ := tempereatures[k]
else
max_ := max1(tempereatures[k], max_(k + 1));
end;
procedure read_from_file;
begin
assign(f, input_file);
reset(f);
i := 1;
while not eof(f) do
begin
readln(f, tempereatures[i]);
inc(i);
end;
close(f);
end;
procedure draw_coordinate_lines;
begin
setPenColor(clBlack);
setPenWidth(2);
line(0, window.Height div 2, window.Width, window.Height div 2); // ось x
line(0, 0, 0, window.Height); // ось y
end;
procedure draw_chart;
begin
setPenWidth(2);
for var i := 1 to n - 1 do
begin
setPenColor(clGreen);
if (tempereatures[i] < 0) or (tempereatures[i + 1] < 0) then setPenColor(clBlue);
if (tempereatures[i] > 0) or (tempereatures[i + 1] > 0) then setPenColor(clRed);
line(i * x_scale, window.Height - (tempereatures[i] * y_scale) - window.Height div 2, (i + 1) * x_scale, window.Height - (tempereatures[i + 1] * y_scale) - window.Height div 2);
end;
end;
procedure get_scale;
var
tmp_min, tmp_max: integer;
begin
x_scale := window.Width div n - 1;
tmp_min := min(1);
tmp_max := max_(1);
if tmp_max > abs(tmp_min) then
y_scale := window.Height div abs(tmp_max * 2)
else
y_scale := window.Height div abs(tmp_min * 2);
end;
begin
window.Maximize;
draw_coordinate_lines;
read_from_file;
get_scale;
draw_chart;
end.
2023 г.