Основы алгоритмизации и программирования
Для работы программы нам потребуется строка слов, разделённых произвольным количеством пробелов. Разбирая эту строку, каждое слово будем записывать в массив A. Далее, просматривая каждый элемент массива А, будем искать слово без введенного символа, как только мы найдём первое слово, удовлетворяющее нашему условию, его длину будем считать минимальной min, и запомним его индекс. Далее массив слов… Читать ещё >
Основы алгоритмизации и программирования (реферат, курсовая, диплом, контрольная)
Министерство образования Республики Беларусь УО «Полоцкий государственный университет»
Радиотехнический факультет Кафедра информационных технологий
КУРСОВАЯ РАБОТА
Основы алгоритмизации и программирования Новополоцк 2012
Задание
1. Вычислить сумму ряда с точностью =10-4
2. В вещественной матрице Snхm последний элемент каждой строки заменить суммой положительных элементов этой строки. Конкретные размеры матрицы ввести (n, m?10).
3. Дана матрица. Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов строк. Использовать сортировку прямыми вставками с барьером, реализовав метод в виде подпрограммы.
4. Текст состоит из слов, отделенных одним или несколькими пробелами. Слово — последовательность любых символов кроме пробела. Напечатать самое короткое слово текста, не содержащее заданного символа.
5. Создать файл, содержащий сведения об ассортименте игрушек в магазине. Каждая запись содержит поля: название игрушки, цена, количество, возрастные границы. На экран и в отдельный файл вывести: названия игрушек, которые подходят детям от 3 до 5 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает Х рублей и подходит ребенку в возрасте от, А до В лет. Значения Х, А и В вводятся с клавиатуры. Программа должна выполнять следующие дополнительные функции: создание новой базы данных; открытие базы из файла; сохранение базы в файл; добавление записей; удаление записей; поиск записей по одному из полей; сортировку по одному из полей методом, указанным в задаче 3; вывод базы данных на экран; выход из программы. Для реализации основных действий алгоритма использовать подпрограммы. Для обработки записей реализовать динамическую структуру данных стек.
С каждым днём программирование становиться всё более популярно среди обычных пользователей, что связано с интенсивным развитием информационных технологий. В начале компьютерной эры программисты были рабами вычислительных машин. Разработчики программного обеспечения должны были писать свои команды на единственном языке, который понимали компьютеры, — в двоичном коде, и программы выглядели как последовательность нулей и единиц. По мере того как время шло, и алгоритмы усложнялись, программирование требовало все больше времени, а внесение изменений в программы и их модернизация становились практически невозможными.
Язык Паскаль относится к процедурно-ориентированным языкам высокого уровня.
Достоинства языка Паскаль:
? относительная простота (т.к. разрабатывался с целью обучения программированию);
? идеология языка Паскаль близка к современным методикам и технологиям программирования, в частности, к структурному программированию и нисходящему проектированию (метод пошаговой детализации) программ. Паскаль может использоваться для записи программы на различных уровнях ее детализации, не прибегая к помощи схем алгоритмов;
? гибкие возможности в отношении используемых структур данных;
? высокая эффективность программ;
? наличие средств повышения надежности программ, включающих контроль правильности использования данных различных типов и программных элементов на этапах трансляции, редактирования и выполнения.
В связи с этим язык Паскаль в настоящее время находит самое широкое распространение для решения большого круга разнообразных практических и научных задач.
В рамках курсовой работы необходимо разработать пять программ на различную тематику согласно заданию курсовой работы.
Цели курсовой работы:
? разработка программ согласно заданию курсовой работы;
? систематизация и закрепление теоретических знаний и практических умений, полученных за время обучения дисциплины «Основы алгоритмизации и программирования» .
1. Решение задачи № 1
1.1 Постановка задачи
Вычислить сумму ряда с точностью =10−4 .
Результат должен отображаться на экране.
1.2 Математическая формулировка задачи и выбор метода обработки информации
Для вычисления результата нам требуется ввести значения x и N (количество дробей). Фактически каждая дробь представлена в виде ±, где i — счетчик цикла. Знак перед дробью можно вычислить по следующей формуле: (-1) i+1.
1.3 Форма представления исходных данных
Исходные данные представлены в следующем виде:
vare, s, a: real;
i, fact, x: integer;
т.е. i — счетчикцикла, fact — факториал, s — суммаряда, e — точностьвычисления, x — входнойпараметр, a — значение члена ряда.
1.4 Разработка алгоритма и его описание
На рисунке 1.1 представлена блок-схема алгоритма решения задачи. Рассмотрим ее работу подробнее.
После запуска программы с клавиатуры вводятся x. Далее переменнымi, s, fact, e, априсваиваются начальные значения. Далее вычисляется выражение исходя из формулы и определяется знак. Счетчик наращивается при каждом обороте цикла и результат выводится на экран.
Рисунок 1.1 — Блок-схема алгоритма решения задачи № 1
1.5 Листинг программы
vare, s, a: real;
i, fact, x: integer;
begin
write ('Введите x: ');
readln (x);
e: =0.0001; // точность
// для решения используем цикл с предусловием, определяем значения
// очередного члена ряда (а) и суммы (S) при i=1.
i: =1;
S: =1;
fact: =1;
a: = ((i+1) *power (x, i)) /fact;
whilea>edo // пока значение очередного члена ряда >e
begin
a: = ((i+1) *power (x, i)) /fact; // считаемочереднойчленряда
fact: =fact*i; // факториал
inc (i); // увеличиваем на 1 n
S: = (S+a) * (-1); // считаем сумму
end;
writeln ('Сумма=', S: 0: 4);
end.
1.6 Инструкция по эксплуатации программы
Запустить файл program 1.34. pas через среду разработки Pascal ABC, выполнить и ввести значение x.
алгоритм программа листинг информация
1.7 Результаты проведенных расчетов и их анализ
Рисунок 1.2 — Результат работы программы
Как видно из рисунка 1.2, на экран выводится сумма ряда с точностью =10-4, как и требовалось по условию.
В результате тестирования была показана правильная работа программы.
2. Решение задачи № 2
2.1 Постановка задачи
В вещественной матрице Snхm последний элемент каждой строки заменить суммой положительных элементов этой строки. Конкретные размеры матрицы ввести (n, m?10).
2.2 Математическая формулировка задачи и выбор метода обработки информации
Для работы программы необходим массив с размерностью nxm, где nиmвводятся с клавиатуры.
Для работы программы нам потребуется одномерный массив целых чисел, а также необходимо ввести его размерность N. Так как по условию задачи нельзя заводить дополнительный массив, то будем перемещать все отрицательные элементы в конец изменением индексов элементов.
2.3 Форма представления исходных данных
Исходные данные представлены в следующем виде:
varn, m, i, j, s: integer;
a: array [1.11,1.11] ofinteger;
A — двумерный массив размерностью до 10 элементов включительно, nи m — введённая и фактическая размерность массива, i и j — счетчики цикла, s-сумма положительных элементов строки.
2.4 Разработка алгоритма и его описание
На рисунке 2.1 представлена блок-схема алгоритма решения задачи. Рассмотрим ее работу подробнее.
В начале выполнения программы вводится размерность массива. Далее выполняется заполнение элементов матрицы случайными числами. Далее сформированная матрица выводится на экран с подсчетом суммы элементов каждой строки. Далее выводится матрица, в которой последний элемент строки заменен на сумму положительных элементов строки.
Рисунок 2.1 — Блок-схема алгоритма решения задачи № 2
2.5 Листинг программы
program _a2;
varn, m, i, j, s: integer;
a: array [1.11,1.11] of integer;
begin
randomize;
readln (n);
readln (m);
for i: =1 to n do
for j: =1 to m do
a [i, j]: =random (10) — 2;
for i: =1 to n do
begin
s: =0;
for j: =1 to m do
begin
if (a [i, j] >0) then s: = s + a [i, j];
write (a [i, j],' ');
end;
a [i, n]: =s;
write (' s=', s);
writeln;
end;
writeln;
for i: =1 to n do
begin
for j: =1 to m do write (a [i, j],' ');
writeln;
end;
end.
2.6 Инструкция по эксплуатации программы
Запустить файл program2.18. pas через среду разработки Pascal ABC, выполнить и ввести размерность матрицы.
2.7 Результаты проведенных расчетов и их анализ
Результат выполнения программы изображен на рисунке 2.2 при введенной размерности матрицы 5 на 5.
Рисунок 2.2 — Результат работы программы
Как видно из рисунка 2.2, на экран выводится полученный изменившийся массив, в котором последние элементы строк заменены на сумму положительных элементов этих же строк, что и требовалось по условию.
3. Решение задачи № 3
3.1 Постановка задачи
Дана матрица. Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов строк. Использовать сортировку прямыми вставками с барьером, реализовав метод в виде подпрограммы.
3.2 Математическая формулировка задачи и выбор метода обработки информации
Для работы программы нам потребуется двухмерный массив целых чисел, а также необходимо ввести его размерность mxn. По условию задачи сортировку в матрице будем проводить в подпрограмме MetPrVstBar методом прямых вставок с барьером (ПрВстБар). Для того чтобы сократить количество сравнений, производимых нашей программой, дополним сортируемый массив нулевой компонентой (это следует сделать в разделе описаний var) и будем записывать в нее поочередно каждый вставляемый элемент. В тех случаях, когда вставляемое значение окажется меньше, чем a [1], компонента a будет работать как «барьер», не дающий индексу j выйти за нижнюю границу массива.
Кроме того, компонента a может заменить собою и дополнительную переменную х.
3.3 Форма представления исходных данных
Исходные данные для основной программы представлены в следующем виде:
constnmax=20;
var a: array [1. nmax, 0. nmax] of integer;
n, m, i, j, l: byte;
sm, b: integer;
где nmax — максимальное количество строк, a — массим с размерностью mxn, m и n — размерность матрицы, i, j и l — счетчики цикла, sm — сумма элементов строки, b — вспомогательная переменная для сортировки строк.
Исходные данные для подпрограммы сортировки:
vark: integer; {счетчик цикла}
3.4 Разработка алгоритма и его описание
На рисунке 3.1 изображена блок-схема сортировки данных методом прямых вставок в барьером.
На рисунке 3.2 представлена блок-схема алгоритма решения задачи. Рассмотрим ее работу подробнее.
Рисунок 3.1 — Блок-схема сортировки методом прямых вставок в барьером
Рисунок 3.2 — Блок-схема алгоритма решения задачи № 3
3.5 Листинг программы
constnmax=20;
var a: array [1. nmax, 0. nmax] of integer;
n, m, i, j, l: byte;
sm, b: integer;
{Метод прямых вставок с барьером}
Procedure MetPrVstBar;
var k: integer;
begin
for k: = 2 to n do
if a [l, k-1] >a [l, k] then
begin a [l, 0]: = a [l, k];
j: = k-1;
while a [l, j] >a [l, 0] do
begin a [l, j+1]: = a [l, j];
j: = j-1;
end;
a [l, j+1]: = a [l, 0];
end;
end;
begin
randomize;
repeat
write ('Количествострокдо ', nmax,' m=');
readln (m);
until m in [1. nmax];
repeat
write ('Количество столбцов n=');
readln (n);
until n in [1. nmax];
{вычисление сумм четных положительных в строках
и запись их в дополнительный столбец}
for i: =1 to m do
begin
sm: =0;
for j: =1 to n do
begin
a [i, j]: =random (20);
sm: =sm+a [i, j];
end;
a [i, n+1]: =sm;
end;
Writeln;
writeln ('Исходный массив: ');
writeln ('Сумма': (n*4+8));
for i: =1 to m do
begin
for j: =1 to n+1 do
if j=n+1 then write (a [i, j]: 6)
else write (a [i, j]: 4);
writeln;
end;
{перестановка в столбцах по возрастанию}
for l: =1 to m do MetPrVstBar;
{перестановка строк по возрастанию сумм (по последнему столбцу) }
for i: =1 to m-1 do
for l: =i+1 to m do
if a [i, n+1] >a [l, n+1] then
for j: =1 to n+1 do
begin
b: =a [i, j];
a [i, j]: =a [l, j];
a [l, j]: =b;
end;
writeln;
writeln ('Отсортированный по возрастанию: ');
writeln ('Сумма': (n*4+8));
for i: =1 to m do
begin
for j: =1 to n+1 do
if j=n+1 then write (a [i, j]: 6)
else write (a [i, j]: 4);
writeln;
end;
end.
3.6 Инструкция по эксплуатации программы
Запустить файл program 3.28. pas через среду разработки Pascal ABC, выполнить и ввести размерность матрицы.
3.7 Результаты проведенных расчетов и их анализ
Логика работы программы подробно описана в пункте «Разработка алгоритма и его описание», поэтому сразу приведем результаты тестирования.
Рисунок 3.3 — Результат работы программы
Как видно из рисунка 3.3, на экран выводится полученный изменившийся массив, в котором все элементы строк упорядочены по возрастанию, а сами строки упорядочены по возрастанию суммы элементов строк, что и требовалось по условию.
4. Решение задачи № 4
4.1 Постановка задачи
Текст состоит из слов, отделенных одним или несколькими пробелами. Слово — последовательность любых символов кроме пробела. Напечатать самое короткое слово текста, не содержащее заданного символа
4.2 Математическая формулировка задачи и выбор метода обработки информации
Для работы программы нам потребуется строка слов, разделённых произвольным количеством пробелов. Разбирая эту строку, каждое слово будем записывать в массив A. Далее, просматривая каждый элемент массива А, будем искать слово без введенного символа, как только мы найдём первое слово, удовлетворяющее нашему условию, его длину будем считать минимальной min, и запомним его индекс. Далее массив слов будем просматривать заново и длину слов без заданного символа сравнивать с min, если какое-то слово окажется меньше по длине, чем min, то запомним его индекс и перепишем переменную min.
4.3 Форма представления исходных данных
Исходные данные представлены в следующем виде:
var
i, n, index, j, min: integer;
st, slovo, sim: string;
A: array [1.100] of string;
flag: boolean;
где i и j — счетчики цикла, n — количество слов в строке, index — переменная целого типа для хранения индекса слова наименьшей длины, min — наименьшая длина слова, st — введённая строка символов, slovo — строка, хранящая слово, A — одномерный массив размерностью 100 элементов для хранения слов из строки, flag — переменная логического типа, используется при поиске слов без введенного символа, sim — введенный символ.
4.4 Разработка алгоритма и его описание
На рисунке 4.1 представлена блок-схема алгоритма решения задачи. Рассмотрим ее работу подробнее.
Рисунок 4.1 — Блок-схема алгоритма решения задачи № 4
Вводим символ, который не будет содержать слово. Вводим строку. Задаются значения переменных i: =1, slovo: =' ', n: =0. Далее пока выполняется условие i<=length (st) проверяется st [i] <> ' ' и если это так, то опять идёт проверка условия i=length (st). Если это так, то значение n увеличивается на единицу, A [n]: =slovo+st [i] и slovo: = ' '. А если условие не выполняется, то slovo: =slovo+st [i]. Далее если условие не выполняется, то идёт проверка условия (i<>1) и (st [i] = ' ') и (st [i-1] <>' '). Если оно верно, то n увеличивается на единицу, A [n]: =slovo и slovo: = ' '. После этого увеличиваем i на 1 и продолжаем проверять условие. Когда полностью закончится цикл прохождения по строке, то выведем A [i] на экран. Далее циклически просматриваются все элементы массива A, каждый из них записывается в строку st и переменной flag присваиваем true. После этого начинаем сравнивать все элементы текущего слова с символом введенным с клавиатуры. Как только найдём первое такое слово, переменной flag присваиваем false. Далее если flag=true, то min: =length (st) и index: =i, а если нет, то переходим к следующему слову в массиве А. В блоках проверяется, если введенного символа в нем нету, то такое слово выводится на экран и его длина сравнивается с минимальной. Если она меньше min, то переписываются значения min и index. Таким образом мы нашли слово минимальной длины и в блоке выводим само это слово и его длину. После чего программа завершается.
4.5 Листинг программы
programProgect1;
var
i, n, index, j, min: integer;
st, slovo, sim: string;
A: array [1.100] of string;
flag: boolean;
begin
Writeln ('Введите исключающий слово символ: ');
Readln (sim);
Writeln ('Введитестроку: ');
Readln (st);
i: =1; slovo: =''; n: =0;
while (i<=length (st)) do
begin
if (st [i] <>' ') then
begin
if (i=length (st)) then
begin
inc (n);
A [n]: =slovo+st [i];
slovo: ='';
end
else
slovo: = slovo+st [i];
end
else
if (i<>1) and (st [i] =' ') and (st [i-1] <>' ') then
begin
inc (n);
A [n]: =slovo;
slovo: ='';
end;
inc (i);
end;
Writeln;
Writeln ('Слова: ');
for i: =1 to n do
Writeln (A [i]);
for i: =1 to n do
begin
st: =A [i];
flag: =true;
for j: =1 to length (st) do
begin
ifst [j] =sim then
begin
flag: =false;
break;
end;
end;
if flag=true then
begin
min: =length (st);
index: =i;
break;
end;
end;
Writeln;
Writeln ('Словабеззаданногосимвола: ');
for i: =1 to n do
begin
st: =A [i];
flag: =true;
for j: =1 to length (st) do
begin
ifst [j] =sim then
begin
flag: =false;
break;
end;
end;
if flag=true then
begin
writeln (st);
if length (st)
begin
min: =length (st);
index: =i;
end;
end;
end;
writeln;
Writeln ('Самое короткое слово текста, не содержащее «', sim,'» — ', A [index], ', его длина — ', min);
end.
4.6 Инструкция по эксплуатации программы
Запустить файл program4.59. pas через среду разработки Pascal ABC, выполнить. Ввести исключаемый из слов символ и ввести строку.
4.7 Результаты проведенных расчетов и их анализ
Логика работы программы подробно описана в пункте «Разработка алгоритма и его описание», поэтому сразу приведем результаты тестирования.
Рисунок 4.2 — Результат работы программы
Как видно из рисунка 4.2, на экран выводится вся необходимая информация, позволяющая нам оценить, что программа выполняется правильно.
5. Решение задачи № 5
5.1 Постановка задачи
Создать файл, содержащий сведения об ассортименте игрушек в магазине. Каждая запись содержит поля: название игрушки, цена, количество, возрастные границы. На экран и в отдельный файл вывести: названия игрушек, которые подходят детям от 3 до 5 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает Х рублей и подходит ребенку в возрасте от, А до В лет. Значения Х, А и В вводятся с клавиатуры. Программа должна выполнять следующие дополнительные функции: создание новой базы данных; открытие базы из файла; сохранение базы в файл; добавление записей; удаление записей; поиск записей по одному из полей; сортировку по одному из полей методом, указанным в задаче 3; вывод базы данных на экран; выход из программы. Для реализации основных действий алгоритма использовать подпрограммы. Для обработки записей реализовать динамическую структуру данных стек.
5.2 Математическая формулировка задачи и выбор метода обработки информации
Программа будет состоять из 2 модулей: основной и дополнительный, хранящий в себе процедуры работы с данными. Работа программы будет построена на вызове подпрограмм изглавной программе и передаче в подпрограммы соответствующих корректных значений.
Для реализации из условия будет взята структура данных стек.
5.3 Форма представления исходных данных
Исходные данные представлены в следующем виде:
В основной части:
var
Toy, toy2: PToy;
s: string;
MIndex, SMIndex: Integer; // Индекс нажатой в меню кнопки, выбранного в подменю индекса
f1: File of RToy;
X, N, A, B, kolvo: Integer;
Где A и B — возрастные границы, X — максимальная цена, S — название игрушки, N — количество игрушек.
В дополнительном модуле:
type
PToy = ^RToy;
RToy = record
Name: String; // Названиеигрушки
Price: Real; // Ценаигрушки
KolVo: Integer; // Наименованиеигрушки
MinAge, MaxAge: Integer; // Возрастныеграницы
Next: PToy;
end;
5.4 Разработка алгоритма и его описание
После выполнения алгоритма пользователю должно выводиться меню с основными функциями программы (Таблица 1).
Следует отметить, что вся работа программы построена на вызове подпрограмм (процедур и функций) и передачи им указателей, необходимых для корректной работы программы. Так, в подпрограмме menuвыводятся поля основного меню и на основе нажатия пользователем определённой клавиши анализируется, что должна делать программа. Основные действия программы при нажатии клавиш приведены в таблице 1.
Таблица 1. Основные действия программы
Нажатие на клавишу | Действие | |
Выводится основное задание и записывается в файл: названия игрушек, которые подходят детям от 3 до 5 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает Х рублей и подходит ребенку в возрасте от, А до В лет. Значения Х, А и В вводятся с клавиатуры | ||
Вызов подпрограммы MakeNewDBFile, которая создает новую пустую базу данных. | ||
Вызов подпрограммы ReadDBFromFile, которая открывает ранее сохраненную базу данных. Пользователем вводится полный путь к базе данных с указанием имени файла и формата. | ||
Вызов подпрограммы WriteDBToFile, которая сохраняетбазу данных вместе с демо-данными, заложенными в программе. Пользователем вводится полный путь к базе данных с указанием имени файла и формата. | ||
Добавление новой записи. При этом вводится исходные данные: название, стоимость, возрастные границы, количество и порядковый номер. | ||
Вызов подпрограммы del, удаляющей элемент из стека. | ||
Поиск записи. Поиск выполняется по полям: название, цена, количество и возрастные границы. Действия модуля реализованы в виде подпрограмм. | ||
Сортировка выполнена аналогично поиску в виде подпрограмм. Метод сортировки был выбран согласно условия из задачи 3: сортировка прямыми вставками с барьером. Сортировка выполняется по следующим полям: названию, цене и количеству. | ||
Вызов подпрограммы WriteAll, осуществляющей вывод всей базы данных на экран вместе с демо-данными. | ||
Выход из программы. Прерывание работы программы. | ||
Рисунок 5.1 — Блок-схема основного модуля программы Рисунок 5.2 — Блок-схема подпрограммы menu, главное меню программы Рисунок 5.3 — Блок-схема подпрограммы submenu, выводящей дополнительное меню для поиска и сортировки Рисунок 5.4 — Блок-схема подпрограммы write All вывода всех записей на экран Рисунок 5.5 — Блок-схема подпрограммы make null создание начального элемента стека Рисунок 5.6 — Блок-схема подпрограммы Set Head ставящий элемент стека в начало списка
Рисунок 5.7 — Блок-схема подпрограммы init создающей нумерацию с 1
Рисунок 5.8 — Блок-схема подпрограммы GetByNumber, получаемый элемент с определенным номером Рисунок 5.9 — Блок-схема подпрограммы del, удаление элемента с определенным номером Рисунок 5.10 — Блок-схема подпрограммы post Toy, поиск по названию Рисунок 5.11 — Блок-схема подпрограммы Make New DBFile, создание новой базы данных Рисунок 5.12 — Блок-схема подпрограммы InsertSortByName, сортировка по названию
5.5 Листинг программы
Главная часть
programshop;
uses
UShop;
var
Toy, toy2: PToy;
s: string;
MIndex, SMIndex: Integer; // Индекснажатойвменюкнопки, выбранноговподменюиндекса
f1: File of RToy;
X, N, A, B, kolvo: Integer;
procedure menu;
begin
Writeln ('Выберитепункт: ');
Writeln ();
Writeln (' 0. Основное задание');
Writeln (' 1. Создание новой базы данных');
Writeln (' 2. Открытие базы из файла');
Writeln (' 3. Сохранение базы в файл');
Writeln (' 4. Добавление записи');
Writeln (' 5. Удаление записи');
Writeln (' 6. Поиск записи');
Writeln (' 7. Сортировка');
Writeln (' 8. Вывод всей базы данных на экран');
Writeln (' 9. Выход из программы');
Writeln ();
end;
procedure Submenu (i: integer);
begin
Writeln ();
Writeln (' 0. Названию');
Writeln (' 1. Цене');
Writeln (' 2. Количеству');
if i = 0 then
Writeln (' 3. Возрасту');
writeln ();
end;
procedurewriteAll (list: PToy);
begin
while list<> nil do
begin
writeln (' Название: ', list^. Name);
writeln (' Цена: ', list^. Price);
writeln (' Возраст: от ', list^. MinAge, ' до ', list^. MaxAge);
writeln (' Количество: ', list^. KolVo);
writeln;
list: =list^. next;
end;
end;
procedureWriteOne (list: RToy);
begin
writeln (' Название: ', list. Name);
writeln (' Цена: ', list. Price);
writeln (' Возраст: от ', list. MinAge, ' до ', list. MaxAge);
writeln (' Количество: ', list. KolVo);
end;
begin
cls;
// Подготовка начальной базы данных
makenull (toy);
makenull (toy2);
init (toy^, 'Кукла', 100, 3, 4,5);
init (toy2^, 'СпайдерМен', 150, 5, 14,12);
SetHead (toy2^, toy);
init (toy2^, 'Плюшевыймедведь', 120, 3, 5,8);
setHead (toy2^, toy);
init (toy2^, 'Радиоуправляемаямашинка', 1500, 12, 18,3);
setHead (toy2^, toy);
repeat
menu;
readln (mIndex);
Case mIndex of
0:
begin
writeln;
Writeln ('Введите стоимость и возрастные границы');
readln (x, a, b);
// Игрушки для детей от 3х до 5-ти лет
toy2: =posByAge (toy, 3,5);
writeln ('Игрушки, подходящие детям в возрасте от 3 до 5-ти лет: ');
while toy2<> nil do
begin
Writeln (' ', toy2^. Name);
toy2: =toy2^. next;
end;
// Самая дорогая игрушка
writeln ('Самаядорогаяигрушка: ', mostExpensive (toy));
// игрушки, которые по стоимости не превышают Х рублей и подходят ребенку в возрасте от, А до В лет.
toy2: =posByAge (toy, a, b);
s: ='';
while toy2<>nil do
begin
if toy2^. price<=X then
s: =s+toy2^. Name+chr (13);
toy2: =toy2^. next;
end;
Writeln ('Игрушки, которые по стоимости не превышают ', x,'рублей и подходят ребенку в возрасте от ', a,' до ', b,' лет: ');
if length (s) >0 then
Writeln (' ', s)
else
writeln ('Отсутствуют');
end;
1:
begin
Writeln ('Введитепуть');
readln (s);
if not MakeNewDBFile (s, toy) then
writeln ('При записи новой базы данных произошла ошибка')
else
writeln ('База данных успешно создана');
end;
2:
begin
writeln ('Введитепуть');
readln (s);
ifReadDBFromFile (s, toy) then
WriteAll (toy)
else
write ('При чтении базы данных произошла ошибка');
end;
3:
begin
writeln ('Введитепуть');
readln (s);
WriteDBToFile (s, toy);
end;
4:
begin
writeln ('Введите название игрушки');
readln (s);
writeln ('Введите стоимость игрушки');
readln (X);
writeln ('Введите возрастные границы');
readln (A, B);
writeln ('Введите количество игрушек');
readln (kolvo);
writeln ('Введите номер');
readln (N);
disposing (toy2);
makenull (toy2);
init (toy2^, s, x, a, b, kolvo);
ins (toy2^, n, toy);
end;
5:
begin
writeln ('Введитеномер');
readln (N);
del (N, toy);
end;
6:
begin
writeln ('Искатьпо: ');
Submenu (0);
readln (SMIndex);
caseSMIndex of
0:
begin
writeln ('Введитеназвание');
readln (s);
toy2: =posToy (toy, s);
end;
1:
begin
writeln ('Введитецену');
readln (x);
toy2: =posByPrice (toy, x);
end;
2:
begin
writeln ('Введитеколичество');
readln (KolVo);
toy2: =posByKolVo (toy, KolVo);
end;
3:
begin
writeln ('Введите возрастные границы');
readln (A, B);
toy2: =posByAge (toy, a, b);
end;
end;
writeAll (toy2);
end;
7:
begin
writeln ('Сортировать по: ');
submenu (1);;
readln (smindex);
caseSMIndex of
0: insertsortbyname (toy, toy);
1: insertsortbyprice (toy, toy);
2: insertsortbykolvo (toy, toy);
end;
end;
8:
begin
Writeln ('Список всех игрушек: ');
WriteAll (toy);
end;
9: break;
end;
until false;
end.
Дополнительный модуль
unitUShop;
interface
type
PToy = ^RToy;
RToy = record
Name: String; // Названиеигрушки
Price: Real; // Ценаигрушки
KolVo: Integer; // Наименованиеигрушки
MinAge, MaxAge: Integer; // Возрастныеграницы
Next: PToy;
end;
// Создает начальный элемент списка
proceduremakenull (var L: PToy);
// Ставит элемент в начало списка
procedureSetHead (x1: RToy; varlist: PToy);
// Вставляет элемент х1 на место pos в списке list
// Нумерацияэлементовсединицы
Procedure ins (x1: RToy; pos: Integer; varlist: PToy);
// Из списка list получить элемент с номером num
functionGetByNumber (list: PToy; num: integer): PToy;
// Удалить из списка list элемент с номером pos
procedure del (pos: Integer; varlist: PToy);
// Перегруженные процедуры инициализации игрушки
procedureinit (var R: RToy);
procedureinit (var R: RToy; n: String; p, min, max, kol: Integer);
// Функциипоискаигрушки
functionposToy (U: PToy; name: String): Ptoy; // Поимени
functionposByAge (U: PToy; min, max: Integer): PToy; // Повозрасту
functionposByPrice (U: PToy; p: Integer): PToy; // Поцене
// Поискименисамойдорогойигрушки
functionMostExpensive (u: PToy): String;
// Создатьновуюбазуданных
functionMakeNewDBFile (Dir: String; U: Ptoy): Boolean;
// СчитатьсписокизБД
functionReadDBFromFile (Dir: String; var u: PToy): Boolean;
// Сохранитьстеквбазуданных
procedurewriteDBToFile (Dir: String; u: PToy);
procedureInsertSortByPrice (var p: PToy; f: PToy);
procedureInsertSortByKolVo (var p: PToy; f: PToy);
procedureInsertSortByName (var p: PToy; f: PToy);
procedure disposing (var u: PToy);
functionlen (u: PToy): integer;
implementation
procedureinit (var R: RToy);
begin
R. Name: ='Toy';
R. Price: =0;
R. MinAge: =0;
R. MaxAge: =100;
R. KolVo: =0;
end;
proceduremakenull (var L: PToy);
begin
New (L);
L^. next: = NIL;
init (l^);
end;
procedureSetHead (x1: RToy; varlist: PToy);
var
u: PToy;
begin
new (u);
x1. next: =nil;
u^: =x1;
u^. next: =list;
list: =u;
end;
procedureinit (var R: RToy; n: String; p, min, max, kol: Integer);
begin
R. Name: =n;
R. Price: =p;
R. MinAge: =min;
R. MaxAge: =max;
R. KolVo: =kol;
end;
functionGetByNumber (list: PToy; num: integer): PToy;
var
u: PToy;
i: integer;
begin
new (u);
u: =list;
for i: =2 to num do
begin
u: =u^. next;
end;
GetByNumber: =u;
end;
Procedure INS (x1: RToy; pos: Integer; varlist: PToy);
var
u, x: PToy;
begin
ifpos = 1 then
begin
SetHead (x1, list);
exit;
end;
new (u);
new (x);
u: =GetByNumber (list, pos-1);
x^: =x1;
x^. next: =u^. next;
u^. next: =x;
end;
procedure del (pos: Integer; varlist: PToy);
begin
ifpos = 1 then
list: =list^. next
else
GetByNumber (list, pos-1). next: =GetByNumber (list, pos+1);
end;
functionposToy (U: PToy; name: String): Ptoy;
var
res: PToy;
begin
new (res);
res: =nil;
while u<> nil do
begin
ifpos (lowercase (name), lowercase (u^. Name)) >0 then
SetHead (u^, res);
u: =u^. next;
end;
Result: =res;
end;
functionposByAge (U: PToy; min, max: Integer): PToy;
var
res: PToy;
begin
new (res);
res: =nil;
while u<> nil do
begin
if (u^. MinAge<= min) and (u^. MaxAge>= max) then
SetHead (u^, res);
u: =u^. next;
end;
Result: =res;
end;
functionposByPrice (U: PToy; p: Integer): PToy;
var
res: PToy;
begin
new (res);
res: =nil;
while u<> nil do
begin
if (u^. Price=p) then
SetHead (u^, res);
u: =u^. next;
end;
Result: =res;
end;
functionposByKolVo (U: PToy; p: Integer): PToy;
var
res: PToy;
begin
new (res);
res: =nil;
while u<> nil do
begin
if (u^. KolVo=p) then
SetHead (u^, res);
u: =u^. next;
end;
Result: =res;
end;
functionMostExpensive (u: PToy): String;
var
max: Real;
begin
max: =-maxint;
while u<> nil do
begin
ifu^. Price> max then
begin
max: =u^. Price;
Result: =u^. Name;
end;
u: =u^. next;
end;
end;
functionMakeNewDBFile (Dir: String; U: Ptoy): Boolean;
var
f1: file of RToy;
begin
if not CanCreateFile (dir) then
begin
MakeNewDBFile: =False;
exit;
end;
Assign (f1, Dir);
rewrite (f1);
close (f1);
makenewdbFile: =true;
end;
procedure disposing (var u: PToy);
var
p: ptoy;
begin
new (p);
while not (u^. next=nil) do
begin
p: =u^. next;
dispose (u);
u: =p;
end;
dispose (p);
u: =nil;
end;
procedure reverse (var list: PToy);
var
u: Ptoy;
begin
sethead (list^, u);
u^. next: =nil;
list: =list^. next;
while list<> nil do
begin
sethead (list^, u);
list: =list^. next;
end;
list: =u;
end;
functionReadDBFromFile (Dir: String; var u: PToy): Boolean;
var
r: Rtoy;
f1: file of RToy;
begin
if not FileExists (dir) then
begin
ReadDBFromFile: =False;
exit;
end;
disposing (u);
assign (f1, Dir);
reset (f1);
while not eof (f1) do
begin
read (f1, r);
sethead (r, u);
end;
reverse (u);
Result: =true;
close (f1);
end;
procedureWriteDBtoFile (Dir: String; u: PToy);
var
f1: file of RToy;
begin
assign (f1, Dir);
rewrite (f1);
while not (u = nil) do
begin
write (f1, u^);
u: =u^. next;
end;
close (f1);
end;
functionlen (u: PToy): integer;
var
i: integer;
begin
i: =0;
while u<>nil do
begin
inc (i);
u: =u^. next;
end;
len: =i;
end;
procedure swap (var r1, r2: PToy);
var
X: RToy;
p: PToy;
begin
x: =r1^;
p: =r1^. next;
r1^: =r2^;
r1^. next: =p;
p: =r2^. next;
r2^: =x;
r2^. next: =p;
end;
procedureInsertSortByPrice (var p: PToy; f: PToy);
var
t: pToy;
X: RToy;
begin
t: = p^. next;
if t <> nil then
ifp^. price>t^. price then
begin
swap (p, t);
InsertSortByPrice (f, f)
end
else
InsertSortByPrice (p^. next, f);
end;
procedureInsertSortByName (var p: PToy; f: PToy);
var
t: pToy;
X: RToy;
begin
t: = p^. next;
if t <> nil then
ifp^. Name>t^. Name then
begin
swap (p, t);
InsertSortByName (f, f)
end
else
InsertSortByName (p^. next, f);
end;
procedureInsertSortByKolVo (var p: PToy; f: PToy);
var
t: pToy;
X: RToy;
begin
t: = p^. next;
if t <> nil then
if p^. KolVo> t^. KolVo then
begin
swap (p, t);
InsertSortByKolVo (f, f)
end
else
InsertSortByKolVo (p^. next, f);
end;
end.
5.6 Инструкция по эксплуатации программы
Запустить файл program5.6 pas через среду разработки Pascal ABC, выполнить и следовать действия в соответствии меню (цифра перед каждым пунктом соответствует вводу цифры для выполнения команды).
5.7 Результаты проведенных расчетов и их анализ
Логика работы программы подробно описана в пункте «Разработка алгоритма и его описание», поэтому сразу приведем результаты тестирования. На рисунках 5.5−5.25 приведена работа программы и описана с помощью поясняющих подписей к рисункам.
Рисунок 5.5 — Главное меню программы
Рисунок 5.6 — Открытие базы данных из файла и вывод на экран
Рисунок 5.7 — Добавление новой записи
Рисунок 5.8 — Вывод Отсортированного списка по названию
Рисунок 5.9 — Поиск по цене
Рисунок 5.10 — Сохранение базы данных в файл
Заключение
В результате выполнения работы было разработано 5 программ различного уровня: на вычисление суммы ряда, обработку одномерных массивов, обработку матриц, работу с файлами и структурой данных «стек». Все они были разработаны в среде PascalABC. Для каждого задания приведён листинг программы, блок-схема алгоритма, дано словесное описание логики работы, а также скриншоты — результаты тестирования программ на работоспособность. При написании программ соблюдены все предъявленные к ним требования, касающиеся функциональности.
Курсовая работа выполнена в полном объеме, в соответствии с вариантом задания.
В ходе курсовой работы были приобретены теоретические и практические навыки программирования на языке Pascal.
1. Д. М. Ушаков, Т. А. Юркова. Паскаль для школьников. — СПб.: Питер. 2010. — 256 с.: ил.
2. А. И. Марченко, Л. А. Марченко. Программирование в среде TurboPascal 7.0/ Марченко А. И., Марченко Л. А.: Под ред. Тарасенко В. П. — 9 — е изд. — К.: ВЕК +, Спб.: КОРОНА — Век, 2007. — 464 с., ил.
3. Иллюстрированный самоучитель по Delphi 7 для начинающих библиотека на http://lib. xost.ru.
4. Грызлов В. И., Грызлова Т. П. Турбо Паскаль 7.0. — М.: «ДМК», 2000. — 416с.
5. ЗуевЕ.А. TurboPascal. Практическое программирование. — Приор, 1997. — 336с.
6. Федоренко Ю. Алгоритмы и программы на Турбо Паскале
7. Фаронов В. В. Turbo Pascal 7.0. Начальный курс. — Нолидж, 1998. — 620 с.