Основы алгоритмизации и программирования
Язык Паскаль - процедурно-ориентированный язык высокого уровня, его основные достоинства. Разработка программ для решения задач. Выбор метода обработки информации. Форма представления исходных данных. Разработка алгоритма, его описание, листинг программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2013 |
Размер файла | 3,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования Республики Беларусь
УО "Полоцкий государственный университет"
Радиотехнический факультет
Кафедра информационных технологий
КУРСОВАЯ РАБОТА
Основы алгоритмизации и программирования
Новополоцк 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 с.
Размещено на Allbest.ru
Подобные документы
Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.
курсовая работа [224,3 K], добавлен 11.02.2016Характеристика этапов решения задач на электронных вычислительных системах. Разработка алгоритма и основы программирования. Язык Ассемблера, предназначенный для представления в удобочитаемой символической форме программ, записанных на машинном языке.
контрольная работа [60,5 K], добавлен 06.02.2011Изучение организации диалоговой программы и закрепления основных элементов программирования на языке Паскаль и Си (Delphi, C++ Builder). Описание представления информации в программах на языках высокого уровня. Сравнительная характеристика Delphi и C++.
курсовая работа [3,1 M], добавлен 27.02.2015Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Разработка программы для решения системы обыкновенных дифференциальных уравнений на базе языка программирования Паскаль АВС. Чтение исходных данных из внешнего файла. Вывод исходных данных и результатов на дисплей и во внешний файл. Суть метода Ейлера.
реферат [126,1 K], добавлен 12.01.2012Формулировка, спецификация и математическая постановка задачи. Описание схемы алгоритма. Рассмотрение результата машинного тестирования программы. Получение на занятиях навыков алгоритмизации и программирования задач на языке высокого уровня C#.
курсовая работа [268,2 K], добавлен 22.03.2015Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Выбор метода проектирования транслятора с языка Паскаль на язык Си, разработка и кодирование алгоритма программы. Использование допустимых операторов в исходном тексте, определение типов переменных и синтаксиса логических и арифметических выражений.
курсовая работа [1,0 M], добавлен 03.07.2011Вычисление суммы ряда с заданной точностью. Форма представления исходных данных. Разработка алгоритма и его описание. Выбор метода обработки информации. Упорядочение элементов строк матрицы по возрастанию. Программа подсчета числа слов в предложении.
курсовая работа [23,9 K], добавлен 11.02.2016