Основы алгоритмизации и программирования
Министерство образования Республики
Беларусь
УО "Полоцкий государственный
университет"
Радиотехнический факультет
Кафедра информационных технологий
КУРСОВАЯ РАБОТА
Основы алгоритмизации и
программирования
Новополоцк 2012
Задание
1. Вычислить сумму ряда с точностью e=10-4
. В вещественной матрице Snхm последний элемент каждой строки
заменить суммой положительных элементов этой строки. Конкретные размеры матрицы
ввести (n, m≤10).
. Дана матрица. Упорядочить элементы строк матрицы по возрастанию,
а сами строки по возрастанию суммы элементов строк. Использовать сортировку
прямыми вставками с барьером, реализовав метод в виде подпрограммы.
. Текст состоит из слов, отделенных одним или несколькими
пробелами. Слово - последовательность любых символов кроме пробела. Напечатать
самое короткое слово текста, не содержащее заданного символа.
. Создать файл, содержащий сведения об ассортименте игрушек в
магазине. Каждая запись содержит поля: название игрушки, цена, количество,
возрастные границы. На экран и в отдельный файл вывести: названия игрушек,
которые подходят детям от 3 до 5 лет; стоимость самой дорогой игрушки и ее
наименование; название игрушки, которая по стоимости не превышает Х рублей и
подходит ребенку в возрасте от А до В лет. Значения Х, А и В вводятся с
клавиатуры. Программа должна выполнять следующие дополнительные функции:
создание новой базы данных; открытие базы из файла; сохранение базы в файл;
добавление записей; удаление записей; поиск записей по одному из полей;
сортировку по одному из полей методом, указанным в задаче 3; вывод базы данных
на экран; выход из программы. Для реализации основных действий алгоритма
использовать подпрограммы. Для обработки записей реализовать динамическую
структуру данных стек.
Введение
С каждым днём программирование становиться
всё более популярно среди обычных пользователей, что связано с интенсивным
развитием информационных технологий. В начале компьютерной эры программисты
были рабами вычислительных машин. Разработчики программного обеспечения должны
были писать свои команды на единственном языке, который понимали компьютеры, -
в двоичном коде, и программы выглядели как последовательность нулей и единиц.
По мере того как время шло, и алгоритмы усложнялись, программирование требовало
все больше времени, а внесение изменений в программы и их модернизация
становились практически невозможными.
Язык Паскаль относится к процедурно-ориентированным языкам
высокого уровня.
Достоинства языка Паскаль:
− относительная простота (т.к.
разрабатывался с целью обучения программированию);
− идеология языка Паскаль близка к
современным методикам и технологиям программирования, в частности, к
структурному программированию и нисходящему проектированию (метод пошаговой
детализации) программ. Паскаль может использоваться для записи программы на
различных уровнях ее детализации, не прибегая к помощи схем алгоритмов;
− гибкие возможности в отношении
используемых структур данных;
− высокая эффективность программ;
− наличие средств повышения надежности
программ, включающих контроль правильности использования данных различных типов
и программных элементов на этапах трансляции, редактирования и выполнения.
В связи с этим язык Паскаль в настоящее время находит самое
широкое распространение для решения большого круга разнообразных практических и
научных задач.
В рамках курсовой работы необходимо разработать пять программ
на различную тематику согласно заданию курсовой работы.
Цели курсовой работы:
− разработка программ согласно заданию
курсовой работы;
− систематизация и закрепление теоретических
знаний и практических умений, полученных за время обучения дисциплины
"Основы алгоритмизации и программирования".
1. Решение
задачи № 1
1.1
Постановка задачи
Вычислить сумму ряда с точностью e=10-4 .
Результат должен отображаться на экране.
1.2
Математическая формулировка задачи и выбор метода обработки информации
Для вычисления результата нам требуется ввести значения x и N
(количество дробей). Фактически каждая дробь представлена в виде ±, где i - счетчик цикла. Знак перед дробью
можно вычислить по следующей формуле: (-1) i+1.
1.3 Форма
представления исходных данных
Исходные данные представлены в следующем виде:,s,a: real;,fact,x:
integer;
т.е. i - счетчикцикла, fact - факториал, s - суммаряда, e -
точностьвычисления,x - входнойпараметр, a - значение члена ряда.
1.4
Разработка алгоритма и его описание
На рисунке 1.1 представлена блок-схема алгоритма решения
задачи. Рассмотрим ее работу подробнее.
После запуска программы с клавиатуры вводятся x. Далее
переменнымi, s, fact, e, априсваиваются начальные значения. Далее вычисляется
выражение исходя из формулы и определяется знак. Счетчик наращивается при
каждом обороте цикла и результат выводится на экран.
Рисунок 1.1 - Блок-схема алгоритма решения задачи №1
1.5 Листинг
программы
,s,a: real;,fact,x: integer;('Введите x: ');(x);: =0.0001; //
точность
// для решения используем цикл с предусловием, определяем
значения
// очередного члена ряда (а) и суммы (S) при i=1.: =1;: =1;:
=1;: = ( (i+1) *power (x, i)) /fact;>edo // пока значение очередного члена
ряда >e: = ( (i+1) *power (x, i)) /fact; // считаемочереднойчленряда:
=fact*i; // факториал(i); // увеличиваем на 1 n: = (S+a) * (-1); // считаем
сумму;('Сумма=',S: 0: 4);.
1.6
Инструкция по эксплуатации программы
Запустить файл program 1.34. pas через среду разработки
Pascal ABC, выполнить и ввести значение x.
алгоритм программа листинг информация
1.7
Результаты проведенных расчетов и их анализ
Рисунок 1.2 - Результат работы программы
Как видно из рисунка 1.2, на экран выводится сумма ряда с
точностью e=10-4, как и требовалось по условию.
В результате тестирования была показана правильная работа
программы.
2. Решение
задачи №2
2.1
Постановка задачи
В вещественной матрице Snхm последний элемент каждой строки
заменить суммой положительных элементов этой строки. Конкретные размеры матрицы
ввести (n, m≤10).
2.2 Математическая
формулировка задачи и выбор метода обработки информации
Для работы программы необходим массив с размерностью nxm, где
nиmвводятся с клавиатуры.
Для работы программы нам потребуется одномерный массив целых
чисел, а также необходимо ввести его размерность N. Так как по условию задачи
нельзя заводить дополнительный массив, то будем перемещать все отрицательные
элементы в конец изменением индексов элементов.
2.3 Форма
представления исходных данных
Исходные данные представлены в следующем виде:,m, i,j,s:
integer;: array [1.11,1.11] ofinteger;- двумерный массив размерностью до 10
элементов включительно, nи m - введённая и фактическая размерность массива, i и
j - счетчики цикла, s-сумма положительных элементов строки.
2.4
Разработка алгоритма и его описание
На рисунке 2.1 представлена блок-схема алгоритма решения
задачи. Рассмотрим ее работу подробнее.
В начале выполнения программы вводится размерность массива.
Далее выполняется заполнение элементов матрицы случайными числами. Далее
сформированная матрица выводится на экран с подсчетом суммы элементов каждой
строки. Далее выводится матрица, в которой последний элемент строки заменен на
сумму положительных элементов строки.
Рисунок 2.1 - Блок-схема алгоритма решения задачи №2
2.5 Листинг
программы
program _a2;,m, i,j,s: integer;: array [1.11,1.11] of
integer;;(n);(m);i: =1 to n doj: =1 to m do[i,j]: =random (10) - 2;i: =1 to n
do: =0;j: =1 to m do(a [i,j] >0) then s: = s + a [i,j];(a [i,j],' ');;[i,n]:
=s;(' s=',s);;;;i: =1 to n doj: =1 to m do write (a [i,j],' ');;;.
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 [0] будет работать как
"барьер", не дающий индексу j выйти за нижнюю границу массива.
Кроме того, компонента a [0] может заменить собою и
дополнительную переменную х.
3.3 Форма
представления исходных данных
Исходные данные для основной программы представлены в следующем
виде:=20;a: array [1. nmax,0. nmax] of integer;,m, i,j,l: byte;,b: integer;
где nmax - максимальное количество строк, a - массим с
размерностью mxn, m и n - размерность матрицы, i, j и l - счетчики цикла, sm -
сумма элементов строки, b - вспомогательная переменная для сортировки строк.
Исходные данные для подпрограммы сортировки:: integer;
{счетчик цикла}
3.4
Разработка алгоритма и его описание
На рисунке 3.1 изображена блок-схема сортировки данных
методом прямых вставок в барьером.
На рисунке 3.2 представлена блок-схема алгоритма решения
задачи. Рассмотрим ее работу подробнее.
Рисунок 3.1 - Блок-схема сортировки методом прямых вставок в
барьером
Рисунок 3.2 - Блок-схема алгоритма решения задачи №3
.5 Листинг
программы
constnmax=20;a: array [1. nmax,0. nmax] of integer;,m, i,j,l:
byte;,b: integer;
{вычисление сумм четных положительных в строках
и запись их в дополнительный столбец}i: =1 to m do: =0;j: =1
to n do[i,j]: =random (20);: =sm+a [i,j];;[i,n+1]: =sm;;;('Исходный массив:
');('Сумма': (n*4+8));i: =1 to m doj: =1 to n+1 doj=n+1 then write (a [i,j]:
6)write (a [i,j]: 4);;;
{перестановка в столбцах по возрастанию}l: =1 to m do MetPrVstBar;
{перестановка строк по возрастанию сумм (по последнему
столбцу) }i: =1 to m-1 dol: =i+1 to m doa [i,n+1] >a [l,n+1] thenj: =1 to
n+1 do: =a [i,j];[i,j]: =a [l,j];[l,j]: =b;;;('Отсортированный по возрастанию:
');('Сумма': (n*4+8));i: =1 to m doj: =1 to n+1 doj=n+1 then write (a [i,j]:
6)write (a [i,j]: 4);;;.
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 Форма
представления исходных данных
Исходные данные представлены в следующем виде:, n, index, j,
min: integer;, slovo,sim: string;: array [1.100] of string;: 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 Листинг
программы
;, n, index, j, min: integer;, slovo,sim: string;: array
[1.100] of string;: boolean;('Введите исключающий слово символ:
');(sim);('Введитестроку: ');(st);: =1; slovo: =''; n: =0;(i<=length (st))
do(st [i] <>' ') then(i=length (st)) then(n);[n]: =slovo+st [i];: ='';: =
slovo+st [i];(i<>1) and (st [i] =' ') and (st [i-1] <>' ')
then(n);[n]: =slovo;: ='';;(i);;;('Слова: ');i: =1 to n do(A [i]);i: =1 to n
do: =A [i];: =true;j: =1 to length (st) do[j] =sim then: =false;;;;flag=true
then: =length (st);: =i;;;;;('Словабеззаданногосимвола: ');i: =1 to n do: =A
[i];: =true;j: =1 to length (st) do[j] =sim then: =false;;;;flag=true
then(st);length (st) <min then: =length (st);: =i;;;;;('Самое короткое слово
текста, не содержащее "',sim,'" - ', A [index], ', его длина - ',
min);.
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 Форма
представления исходных данных
Исходные данные представлены в следующем виде:
В основной части:, toy2: PToy;: string;, SMIndex: Integer; //
Индекс нажатой в меню кнопки, выбранного в подменю индекса: File of
RToy;,N,A,B, kolvo: Integer;
Где A и B - возрастные границы, X - максимальная цена, S -
название игрушки, N - количество игрушек.
В дополнительном модуле:= ^RToy;= record: String; //
Названиеигрушки: Real; // Ценаигрушки: Integer; // Наименованиеигрушки, MaxAge:
Integer; // Возрастныеграницы: PToy;;
5.4
Разработка алгоритма и его описание
После выполнения алгоритма пользователю должно выводиться
меню с основными функциями программы (Таблица 1).
Следует отметить, что вся работа программы построена на
вызове подпрограмм (процедур и функций) и передачи им указателей, необходимых
для корректной работы программы. Так, в подпрограмме menuвыводятся поля
основного меню и на основе нажатия пользователем определённой клавиши
анализируется, что должна делать программа. Основные действия программы при
нажатии клавиш приведены в таблице 1.
Таблица 1. Основные действия программы
Нажатие на клавишу
|
Действие
|
0
|
Выводится основное задание и записывается в
файл: названия игрушек, которые подходят детям от 3 до 5 лет; стоимость самой
дорогой игрушки и ее наименование; название игрушки, которая по стоимости не
превышает Х рублей и подходит ребенку в возрасте от А до В лет. Значения Х, А
и В вводятся с клавиатуры
|
1
|
Вызов подпрограммы MakeNewDBFile, которая
создает новую пустую базу данных.
|
2
|
Вызов подпрограммы ReadDBFromFile, которая
открывает ранее сохраненную базу данных. Пользователем вводится полный путь к
базе данных с указанием имени файла и формата.
|
3
|
Вызов подпрограммы WriteDBToFile, которая
сохраняетбазу данных вместе с демо-данными, заложенными в программе.
Пользователем вводится полный путь к базе данных с указанием имени файла и
формата.
|
4
|
Добавление новой записи. При этом вводится
исходные данные: название, стоимость, возрастные границы, количество и
порядковый номер.
|
5
|
Вызов подпрограммы del, удаляющей элемент из
стека.
|
6
|
Поиск записи. Поиск выполняется по полям:
название, цена, количество и возрастные границы. Действия модуля реализованы
в виде подпрограмм.
|
7
|
Сортировка выполнена аналогично поиску в виде
подпрограмм. Метод сортировки был выбран согласно условия из задачи 3:
сортировка прямыми вставками с барьером. Сортировка выполняется по следующим
полям: названию, цене и количеству.
|
8
|
Вызов подпрограммы WriteAll, осуществляющей
вывод всей базы данных на экран вместе с демо-данными.
|
9
|
Выход из программы. Прерывание работы
программы.
|
Рисунок 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;;, toy2: PToy;: string;, SMIndex: Integer; //
Индекснажатойвменюкнопки, выбранноговподменюиндекса: File of RToy;,N,A,B,
kolvo: Integer;menu;('Выберитепункт: ');();(' 0. Основное задание');(' 1.
Создание новой базы данных');(' 2. Открытие базы из файла');(' 3. Сохранение
базы в файл');(' 4. Добавление записи');(' 5. Удаление записи');(' 6. Поиск
записи');(' 7. Сортировка');(' 8. Вывод всей базы данных на экран');(' 9. Выход
из программы');();;Submenu (i: integer);();(' 0. Названию');(' 1. Цене');(' 2.
Количеству');i = 0 then(' 3. Возрасту');();;(list: PToy);list<> nil do('
Название: ', list^. Name);(' Цена: ', list^. Price);(' Возраст: от ', list^.
MinAge, ' до ', list^. MaxAge);(' Количество: ', list^. KolVo);;: =list^.
next;;;(list: RToy);(' Название: ', list. Name);(' Цена: ', list. Price);('
Возраст: от ', list. MinAge, ' до ', list. MaxAge);(' Количество: ', list.
KolVo);;;
// Подготовка начальной базы данных(toy);(toy2);(toy^,
'Кукла', 100, 3, 4,5);(toy2^, 'СпайдерМен', 150, 5, 14,12);(toy2^, toy);(toy2^,
'Плюшевыймедведь', 120, 3, 5,8);(toy2^, toy);(toy2^, 'Радиоуправляемаямашинка',
1500, 12, 18,3);(toy2^, toy);;(mIndex);mIndex of
:;('Введите стоимость и возрастные границы');(x,a,b);
// Игрушки для детей от 3х до 5-ти лет: =posByAge (toy, 3,5);('Игрушки,
подходящие детям в возрасте от 3 до 5-ти лет: ');toy2<> nil do(' ',toy2^.
Name);: =toy2^. next;;
// Самая дорогая игрушка('Самаядорогаяигрушка: ',
mostExpensive (toy));
// игрушки, которые по стоимости не превышают Х рублей и
подходят ребенку в возрасте от А до В лет.: =posByAge (toy, a, b);:
='';toy2<>nil dotoy2^. price<=X then: =s+toy2^. Name+chr (13);:
=toy2^. next;;('Игрушки, которые по стоимости не превышают ', x,'рублей и
подходят ребенку в возрасте от ', a,' до ', b,' лет: ');length (s) >0 then('
', s)('Отсутствуют');;
:('Введитепуть');(s);not MakeNewDBFile (s, toy) then('При
записи новой базы данных произошла ошибка')('База данных успешно создана');;
:('Введитепуть');(s);(s, toy) then(toy)('При чтении базы
данных произошла ошибка');;
:('Введитепуть');(s);(s, toy);;
:('Введите название игрушки');(s);('Введите стоимость
игрушки');(X);('Введите возрастные границы');(A, B);('Введите количество
игрушек');(kolvo);('Введите номер');(N);(toy2);(toy2);(toy2^, s, x,a, b,
kolvo);(toy2^, n, toy);;
:('Введитеномер');(N);(N, toy);;
:('Искатьпо: ');(0);(SMIndex);of
:('Введитеназвание');(s);: =posToy (toy, s);;
:('Введитецену');(x);: =posByPrice (toy, x);;
:('Введитеколичество');(KolVo);: =posByKolVo (toy, KolVo);;
:('Введите возрастные границы');(A,B);: =posByAge (toy, a,
b);;;(toy2);;
:('Сортировать по: ');(1);;(smindex);of
: insertsortbyname (toy,toy);
: insertsortbyprice (toy,toy);
: insertsortbykolvo (toy,toy);;;
:('Список всех игрушек: ');(toy);;
: break;;false;.
Дополнительный модуль
unitUShop;= ^RToy;= record: String; // Названиеигрушки: Real;
// Ценаигрушки: Integer; // Наименованиеигрушки, MaxAge: Integer; //
Возрастныеграницы: PToy;;
// Создает начальный элемент списка(var L: PToy);
// Ставит элемент в начало списка(x1: RToy; varlist: PToy);
// Вставляет элемент х1 на место pos в списке list
// Нумерацияэлементовсединицыins (x1: RToy; pos: Integer;
varlist: PToy);
// Из списка list получить элемент с номером num(list: PToy;
num: integer): PToy;
// Удалить из списка list элемент с номером posdel (pos:
Integer; varlist: PToy);
// Перегруженные процедуры инициализации игрушки(var R:
RToy);(var R: RToy; n: String; p, min, max, kol: Integer);
// Функциипоискаигрушки(U: PToy; name: String): Ptoy; //
Поимени(U: PToy; min, max: Integer): PToy; // Повозрасту(U: PToy; p: Integer):
PToy; // Поцене
// Поискименисамойдорогойигрушки(u: PToy): String;
// Создатьновуюбазуданных(Dir: String; U: Ptoy): Boolean;
// СчитатьсписокизБД(Dir: String; var u: PToy): Boolean;
// Сохранитьстеквбазуданных(Dir: String; u: PToy);(var p:
PToy; f: PToy);(var p: PToy; f: PToy);(var p: PToy; f: PToy);disposing (var u:
PToy);(u: PToy): integer;(var R: RToy);. Name: ='Toy';. Price: =0;. MinAge:
=0;. MaxAge: =100;. KolVo: =0;;(var L: PToy);(L);^. next: = NIL;(l^);;(x1:
RToy; varlist: PToy);: PToy;(u);. next: =nil;^: =x1;^. next: =list;: =u;;(var
R: RToy; n: String; p, min, max, kol: Integer);. Name: =n;. Price: =p;. MinAge:
=min;. MaxAge: =max;. KolVo: =kol;;(list: PToy; num: integer): PToy;: PToy;:
integer;(u);: =list;i: =2 to num do: =u^. next;;: =u;;INS (x1: RToy; pos:
Integer; varlist: PToy);, x: PToy;= 1 then(x1, list);;;(u);(x);: =GetByNumber
(list, pos-1);^: =x1;^. next: =u^. next;^. next: =x;;del (pos: Integer;
varlist: PToy);= 1 then: =list^. next(list, pos-1) ^. next: =GetByNumber (list,
pos+1);;(U: PToy; name: String): Ptoy;: PToy;(res);: =nil;u<> nil
do(lowercase (name), lowercase (u^. Name)) >0 then(u^, res);: =u^. next;;:
=res;;(U: PToy; min, max: Integer): PToy;: PToy;(res);: =nil;u<> nil
do(u^. MinAge<= min) and (u^. MaxAge>= max) then(u^, res);: =u^. next;;:
=res;;(U: PToy; p: Integer): PToy;: PToy;(res);: =nil;u<> nil do(u^.
Price=p) then(u^, res);: =u^. next;;: =res;;(U: PToy; p: Integer): PToy;:
PToy;(res);: =nil;u<> nil do(u^. KolVo=p) then(u^, res);: =u^. next;;:
=res;;(u: PToy): String;: Real;: =-maxint;u<> nil do^. Price> max
then: =u^. Price;: =u^. Name;;: =u^. next;;;(Dir: String; U: Ptoy): Boolean;:
file of RToy;not CanCreateFile (dir) then: =False;;;(f1, Dir);(f1);(f1);:
=true;;disposing (var u: PToy);: ptoy;(p);not (u^. next=nil) do: =u^.
next;(u);: =p;;(p);: =nil;;reverse (var list: PToy);: Ptoy;(list^, u);^. next:
=nil;: =list^. next;list<> nil do(list^, u);: =list^. next;;: =u;;(Dir:
String; var u: PToy): Boolean;: Rtoy;: file of RToy;not FileExists (dir) then: =False;;;(u);(f1,
Dir);(f1);not eof (f1) do(f1, r);(r, u);;(u);: =true;(f1);;(Dir: String; u:
PToy);: file of RToy;(f1, Dir);(f1);not (u = nil) do(f1, u^);: =u^.
next;;(f1);;(u: PToy): integer;: integer;: =0;u<>nil do(i);: =u^. next;;:
=i;;swap (var r1,r2: PToy);: RToy;: PToy;: =r1^;: =r1^. next;^: =r2^;^. next:
=p;: =r2^. next;^: =x;^. next: =p;;(var p: PToy; f: PToy);: pToy;: RToy;: = p^.
next;t <> nil then^. price>t^. price then(p, t);(f, f)(p^. next,
f);;(var p: PToy; f: PToy);: pToy;: RToy;: = p^. next;t <> nil then^.
Name>t^. Name then(p, t);(f, f)(p^. next, f);;(var p: PToy; f: PToy);:
pToy;: RToy;: = p^. next;t <> nil thenp^. KolVo> t^. KolVo then(p,
t);(f, f)(p^. next, f);;.
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
<http://lib.xost.ru>.
. Грызлов В.И.,
Грызлова Т.П. Турбо Паскаль 7.0. - М.: "ДМК", 2000. - 416с.
. ЗуевЕ.А.
TurboPascal. Практическое программирование. - Приор, 1997. - 336с.
. Федоренко Ю.
Алгоритмы и программы на Турбо Паскале
. Фаронов В.В. Turbo
Pascal 7.0. Начальный курс. - Нолидж, 1998. - 620 с.