Основы алгоритмизации и программирования

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Министерство образования Республики Беларусь

УО «Полоцкий государственный университет»

Радиотехнический факультет

Кафедра информационных технологий

КУРСОВАЯ РАБОТА

Основы алгоритмизации и программирования

Новополоцк 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 [0] будет работать как «барьер», не дающий индексу j выйти за нижнюю границу массива.

Кроме того, компонента a [0] может заменить собою и дополнительную переменную х.

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) < min then

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. Основные действия программы

Нажатие на клавишу

Действие

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;

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 с.

ПоказатьСвернуть
Заполнить форму текущей работой