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

Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.02.2016
Размер файла 224,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

Факультет информационных технологий

Кафедра технологий программирования

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

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

Выполнил:

Хрол Д.А.

Новополоцк 2010

Содержание

Введение

1. Решение задачи №1

2. Решение задачи №2

3. Решение задачи №3

4. Решение задачи №4

5. Решение задачи №5

5.1 Постановка задачи и выбор метода обработки информации

5.2 Форма представления исходных данных

5.3 Разработка алгоритма и его описание

5.4 Описание программы

5.4.1 Структура программы

5.4.2 Описание подпрограмм

5.5 Инструкция по эксплуатации программы

Заключение и выводы

Список использованной литературы

Введение

С каждым днём программирование становиться всё более популярно среди обычных пользователей, что связано с интенсивным развитием информационных технологий. В начале компьютерной эры программисты были рабами вычислительных машин. Разработчики программного обеспечения должны были писать свои команды на единственном языке, который понимали компьютеры, -- в двоичном коде, и программы выглядели как последовательность нулей и единиц. По мере того как время шло, и алгоритмы усложнялись, программирование требовало все больше времени, а внесение изменений в программы и их модернизация становились практически невозможными.

Язык Паскаль относится к процедурно-ориентированным языкам высокого уровня

Достоинства языка Паскаль:

1. относительная простота (т.к. разрабатывался с целью обучения программированию);

2. идеология языка Паскаль близка к современным методикам и технологиям программирования, в частности, к структурному программированию и нисходящему проектированию (метод пошаговой детализации) программ. Паскаль может использоваться для записи программы на различных уровнях ее детализации, не прибегая к помощи схем алгоритмов;

3. гибкие возможности в отношении используемых структур данных;

4. высокая эффективность программ;

5. наличие средств повышения надежности программ, включающих контроль правильности использования данных различных типов и программных элементов на этапах трансляции, редактирования и выполнения.

В связи с этим язык Паскаль в настоящее время находит самое широкое распространение для решения большого круга разнообразных практических и научных задач.

В рамках курсовой работы необходимо разработать пять программ на различную тематику согласно заданию курсовой работы.

Цели курсовой работы:

? разработка программ согласно заданию курсовой работы;

? систематизация и закрепление теоретических знаний и практических умений, полученных за время обучения дисциплины «Основы алгоритмизации и программирования».

1. Решение задачи №1

Постановка задачи и выбор метода обработки информации

Первой задачей курсовой работы является вычисление суммы рядя с точностью е = 10-5:

Значение X вводится с клавиатуры.

Математическая формулировка задачи и выбор метода обработки информации

Для решения данной задачи будет использоваться формула, приведенная ниже:

Программный код

программа паскаль задача алгоритм

var

x, x2k, s, e, eps: real;

k: integer;

minus: integer;

begin

write('X='); readln(x);

s:= 0; eps:= 0.00001; k:= 0;

minus:= 1; x2k:= 1;

repeat

minus:= minus * (-1);

x2k:= x2k * x * x;

inc(k);

e:= minus * x2k / (2 * k * (2 * k - 1));

s:= s + e;

until abs(e) < eps;

writeln('S=', s:8:5);

end.

Рисунок 1. Разработка алгоритма и его описание

Инструкция по эксплуатации программы

Пользователь вводит значение X с клавиатуры. Далее происходят вычисления по заданному алгоритму до значения с точностью, равной 10-5. После нахождения результата сумма выводится на экран.

2. Решение задачи №2

Постановка задачи и выбор метода обработки информации.

По условию второй задачи в квадратной матрице необходимо поменять местами элементы строки и столбца, на пересечении которых находится минимальный из положительных элементов

Форма представления исходных данных

Данные представлены в виде одномерного массива.

Рисунок 2. Разработка алгоритма и его описание

Описание программы. Структура программы.

Программа состоит из 2 подпрограмм и основной программы. Под программы предназначены для поиска минимального из положительных элементов и для замены элементов строки и столбца, на пересечении которых находится минимальный элемент.

Описание подпрограмм

Подпрограмма MinPosition предназначена для поиска минимального из положительных элементов матрицы:

function MinPosition(a:array [0..s] of array [0..s] of integer):string;

var

i,j,min:integer;

k:string;

begin

min:=60;

for i:=0 to s do

begin

for j:=0 to s do

begin

if (a[i][j]>0) and (a[i][j]<min) then

begin

min:=a[i][j];

k:=inttostr(i)+inttostr(j);

end;

end;

end;

result:=k;

end;

Подпрограмма ReplaceElems предназначена для замены элементов строки и столбца, на пересечении которых находится минимальный элемент:

procedure ReplaceElems(var a:array [0..s]of array [0..s] of integer; str, col:integer);

var

tmp,j:integer;

begin

for j:=0 to s do

begin

tmp:=a[str][j];

a[str][j]:=a[j][col];

a[j][col]:=tmp;

end;

end;

Инструкция по эксплуатации программы

После запуска программы будет сгенерирована матрица, заполненная случайными числами. После этого на экран будет выведена исходная матрица и матрица, полученная в результате выполнения программы.

3. Решение задачи №3

Постановка задачи и выбор метода обработки информации.

Дан одномерный массив. Отсортировать все четные элементы по возрастанию, нечетные оставить без изменения. Относительного расположения четных и нечетных элементов не менять. Использовать пирамидальную сортировку, реализовав метод в виде подпрограммы.

Форма представления исходных данных

Данные представлены в виде матрицы, размер которой необходимо ввести в начале выполнения программы.

Разработка алгоритма и его описание

По условию задачи, массив необходимо отсортировать пирамидальной сортировкой. Сортировка пирамидой использует сортирующее дерево. Сортирующее дерево-- это такое двоичное дерево, у которого выполнены условия:

1. Каждый лист имеет глубину либо d либо d ? 1, d-- максимальная глубина дерева.

2. Значение в любой вершине больше, чем значения её потомков.

Удобная структура данных для сортирующего дерева-- такой массив Array, что Array[1]-- элемент в корне, а потомки элемента Array[i]-- Array[2i] и Array[2i+1].

Алгоритм сортировки будет состоять из двух основных шагов:

1. Выстраиваем элементы массива в виде сортирующего дерева:

Array[i]>=Array[2i]

Array[i]>=Array[2i+1],

при 1<=i<n/2

Этот шаг требует O(n) операций.

2. Будем удалять элементы из корня по одному за раз и перестраивать дерево. То есть на первом шаге обмениваем Array[1] и Array[n], преобразовываем Array[1], Array[2], …, Array[n-1] в сортирующее дерево. Затем переставляем Array[1] и Array[n-1], преобразовываем Array[1], Array[2], …, Array[n-2] в сортирующее дерево. Процесс продолжается до тех пор, пока в сортирующем дереве не останется один элемент. Тогда Array[1], Array[2], …, Array[n]-- упорядоченная последовательность. Сортировка организована в виде подпрограммы PyramidalSort.

Описание программы

Структура программы

Программа состоит из 2 программ и основной части. Подпрограммы предназначены для преобразования элементов в сортирующее дерево и для сортировки элементов.

Описание подпрограмм

Подпрограмма DownHeap предназначена для преобразования элементов в сортирующее дерево:

procedure DownHeap(index, Count: integer; Current: integer);

var

Child: Integer;

begin

while index < Count div 2 do

begin

Child:= (index + 1) * 2 - 1;

if (Child < Count - 1) and (Arr[Child] < Arr[Child + 1]) then

Child:= Child + 1;

if Current >= Arr[Child] then

break;

Arr[index]:= Arr[Child];

index:= Child;

end;

Arr[index]:= Current;

end;

Подпрограмма PyramidalSort предназначена для сортировки дерева:

procedure PyramidalSort(var Arr: mas; Count: integer);

var

i: integer;

Current: integer;

begin

for i:= (Count div 2) - 1 downto 0 do

DownHeap(i, Count, Arr[i]);

for i:= Count - 1 downto 0 do

begin

Current:= Arr[i]; Arr[i]:= Arr[0];

DownHeap(0, i, Current);

end;

Инструкция по эксплуатации программы

Для начала работы программы необходимо указать количество элементов массива. После обработки на экране будет показан исходный массив и массив, полученный в результате работы программы.

4. Решение задачи №4

Постановка задачи и выбор метода обработки информации.

Перед каждым словом исходного предложения напечатать его порядковый номер. Вывести на экран преобразованное предложение. Результат вывести на экран и в текстовый файл.

Форма представления исходных данных

Исходными данными к программе является предложение, представленное в виде последовательности слов и символов.

Рисунок 3. Разработка алгоритма и его описание

Исходный код программы

uses crt;

var

i,num:integer;

s,word,res:string;

f:text;

begin

writeln('Введите предложение:');

readln(s);

num:=0;

for i:=1 to length(s) do

begin

assign(f,'output.txt');

rewrite(f);

if (s[i]<>' ')then

begin

insert(s[i],word,length(word)+1);

if length(s)=i then

begin

res:=res+' '+inttostr(num)+' - '+word;

break;

end;

end

else

begin

if (word<>'') then

begin

inc(num);

if res='' then

begin

res:=res+' '+inttostr(num)+' - '+word;

end

else

begin

res:=res+' '+inttostr(num)+' - '+word;

end;

word:='';

end; end; end;

writeln('Результат выполнения');

writeln(res);

writeln(f,res);

close(f);

end.

Инструкция по эксплуатации программы

После запуска программы необходимо ввести предложение. В результате выполнения программы на экране будет показано исходное предложение с проставленными перед каждым словом порядковым номерами. Также результат будет записан в файл output.txt.

5. Решение задачи №5

5.1 Постановка задачи и выбор метода обработки информации

Создать файл, содержащий сведения о пациентах глазной клиники. Структура записи: фамилия пациента, пол, возраст, место проживания (город), диагноз. На экран и в отдельный файл вывести: количество иногородних пациентов, прибывших в клинику; список пациентов старше X лет с диагнозом Y. Значения X и Y ввести с клавиатуры. Программа должна выполнять следующие дополнительные функции: создание новой базы данных; открытие базы из файла; сохранение базы в файл; добавление записей; удаление записей; поиск записей по одному из полей; сортировку по одному из полей методом, указанным в задаче 3; вывод базы данных на экран; выход из программы. Для реализации основных действий алгоритма использовать подпрограммы. Для обработки записей реализовать динамическую структуру данных односвязный список.

5.2 Форма представления исходных данных

Исходными данными к программе являются сведения о пациентах глазной поликлиники.

5.3 Разработка алгоритма и его описание

Программа реализована в виде ряда мелких подпрограмм, каждая из которых соответствует одной из функций (создание базы, сохранение базы, добавление записи, удаление записи, удаление всех записей, поиск записей, сортировка записей, формирование отчета, выход из программы).

Рисунок 4

5.4 Описание программы

5.4.1 Структура программы

Структуру программы можно представить в виде процедур и функций, выполняющих определённые действия. В программе предусмотрено создание отчета. Сортировка записей производится пирамидальным методом.

5.4.2 Описание подпрограмм

С помощью процедуры slist_add можно добавлять данные о пациентах в базу:

procedure slist_add(var q: pslist; a: tclient);

var

l, n: pslist;

begin

l:= q;

if l <> nil then while l^.o <> nil do l:= l^.o;

new(n);

n^.a:= a;

n^.o:= nil;

if l <> nil then l^.o:= n else q:= n;

end;

Для удаления записей служит процедура slist_del:

procedure slist_del(var q: pslist; var a: tclient);

var

n: pslist;

begin

n:= q;

if n <> nil then

begin

q:= n^.o;

a:= n^.a;

dispose(n);

end;

end;

Процедура menu_load необходима для загрузки файла базы данных:

procedure menu_load;

var

f: string;

t: file of tclient;

a: tclient;

begin

write(Введите имя файла для загрузки: ');

readln(f);

slist_destroy(q);

assign(t, f);

reset(t);

while not eof(t) do

begin

read(t, a);

slist_add(q, a);

end;

close(t);

writeln('Данные загружены');

input_wait;

end;

Процедура menu_save нужна для сохранения существующей базы:

procedure menu_save;

var

f: string;

t: file of tclient;

o: pslist;

begin

write('Введите имя файла для сохранения: ');

readln(f);

Assign(t, f);

Rewrite(t);

o:= q;

while o <> nil do

begin

write(t, o^.a);

o:= o^.o;

end;

Close(t);

writeln('Данные сохранены');

input_wait;

end;

Процедура поиска записей:

procedure menu_search;

var

p: string;

o: pslist;

n: integer;

pres: boolean;

begin

write(` Введите фразу для поиска: ');

readln(p);

o:= q;

n:= 0;

pres:= false;

while o <> nil do

begin

inc(n);

if (Pos(p, o^.a.name) > 0) or (Pos(p, o^.a.pol) > 0) or (Pos(p, o^.a.town) > 0) or (Pos(p, o^.a.diag) > 0) then

begin

pres:= true;

show_line(n, o);

end;

o:= o^.o;

end;

if not pres then writeln('Записи не найдены');

input_wait;

end;

Процедура menu_report выводит на экран и в файл отчет по базе данных:

procedure menu_report;

var

f: text;

p: pslist;

a: integer;

s: string;

b: boolean;

begin

assign(f, 'eye.txt');

rewrite(f);

writeln('ПЕРЕЧЕНЬ ИНОГОРОДНИХ ПАЦИЕНТОВ');

writeln(f, 'ПЕРЕЧЕНЬ ИНОГОРОДНИХ ПАЦИЕНТОВ);

p:= q;

while p <> nil do

begin

if p^.a.town <> TOWN then

begin

writeln(p^.a.name:15, ' ', p^.a.town);

writeln(f, p^.a.name:15, ' ', p^.a.town);

end;

p:= p^.o;

end;

write(`Введите возраст для поиска: '); readln(a);

write('Введите диагноз: '); readln(s);

writeln('ПЕРЕЧЕНЬ ПАЦИЕНТОВ СТАРШЕ ', a, ' ЛЕТ С ДИАГНОЗОМ "', s, '"');

writeln(f, 'ПЕРЕЧЕНЬ ПАЦИЕНТОВ СТАРШЕ ', a, ' ЛЕТ С ДИАГНОЗОМ "', s, '"');

p:= q;

b:= false;

while p <> nil do

begin

if (p^.a.age >= a) and (p^.a.diag = s) then

begin

writeln(p^.a.name:15, ' ', p^.a.age, ' лет');

writeln(f, p^.a.name:15, ' ', p^.a.age, ' лет');

b:= true;

end;

p:= p^.o;

end;

if not b then

begin

writeln('Пациенты не найдены');

writeln(f, 'Пациенты не найдены');

end;

close(f);

input_wait;

end;

Для сортировки записей используются две процедуры Sort и DownHeap. Процедура DownHeap преобразует элементы в дерево. Процедура Sort непосредственно сортирует данное дерево.

procedure Sort(var q: pslist; Count: Integer; Field: Integer);

procedure DownHeap(index, Count: integer; Current: pslist);

var

Child: Integer;

begin

while index < Count div 2 do

begin

Child:= (index + 1) * 2 - 1;

if (Child < Count - 1) and (data_compare(slist_at_pos(q, Child + 1), slist_at_pos(q, Child), Field)) then

Child:= Child + 1;

if data_compare(Current, slist_at_pos(q, Child), Field) then

break;

data_set(slist_at_pos(q, index), slist_at_pos(q, Child));

index:= Child;

end;

data_set(slist_at_pos(q, index), Current);

end;

var

i: integer;

Current: pslist;

begin

New(Current);

for i:= (Count div 2) - 1 downto 0 do

begin

data_set(Current, slist_at_pos(q, i));

DownHeap(i, Count, Current);

end;

for i:= Count - 1 downto 0 do

begin

data_set(Current, slist_at_pos(q, i));

data_set(slist_at_pos(q, i), slist_at_pos(q, 0));

DownHeap(0, i, Current);

end;

end;

5.5 Инструкция по эксплуатации программы

После запуска программы на экране появляется главное меню программы (рисунок 5).

Рисунок 5 - Главное меню

Непосредственно с помощью данного меню и происходит управление программой. Для выбора желаемого действия необходимо нажать соответствующую клавишу.

После выбора пункта меню «загрузить базу» и «сохранить базу» на экране появится окно, куда необходимо ввести название ранее созданного файла (рисунок 6).

Рисунок 6 - Окно загрузки и сохранения файла базы данных

После выбора пункта меню «добавить запись» на экране появится окно следующего вида, куда необходимо занести информацию о пациенте

.

Рисунок 7 - Добавление записи

Для удаления записи необходимо выбрать пункт «удалить запись», после чего необходимо ввести номер удаляемой записи (рисунок 8).

Рисунок 8 - Удаление записей

Для поиска записей необходимо выполнить пункт меню «поиск записей», далее ввести критерии поиска (рисунок 9).

Рисунок 9 - Поиск записей

Для сортировки и создания отчетов необходимо также выбрать соответствующие пункты меню, после чего следовать инструкциям программы. Отчет сохраняется в папке с программой под названием eye.txt.

Заключение и выводы

Изначально язык программирования Паскаль был предназначен для обучения программированию. Но вскоре было обнаружено, что Паскаль пригоден для написания настоящих программ. И благодаря этому популярность Паскаля начинает расти. Его и сейчас изучают в школах, институтах и в других учебных заведениях. Паскаль имеет более простой синтаксис, нежели другие языки программирования. Но язык Паскаль больше всего близок к идеальному алгоритмическому процедурному языку, поскольку он полностью реализует принципы структурного программирования.

В рамках курсовой работы было разработано пять программ различного вида и различной тематики:

1. Вычисление суммы ряда;

2. Обработка одномерных массивов;

3. Обработка матриц;

4. Обработка строк;

5. Работа с файлами, реализация структуры данных «односвязный список».

Курсовая работа выполнена в полном объеме, в соответствии с вариантом задания. В ходе курсовой работы были приобретены теоретические и практические навыки программирования на языке Паскаль.

Список использованной литературы

1. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Учебное пособие. - М.: Норидж, 1997.

2. Бородич Ю.С., Вальвачев А.Н., Кузьмич А.И. Паскаль для персональных компьютеров. - Мн.: Выш.шк.; БФГИТМ «НИКА», 1991.

3. Офицеров Д.В., Долгий А.Б., Старых В.А. Программирование на персональных ЭВМ: Практикум: Учеб.пособие. - Мн.: Выш.шк., 1993.

4. Кулагин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi. - СПб.:BHV, 2000.

5. Пильщиков В.Н. Сборник упражнений по языку Паскаль. М.: Наука, 1989.

6. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982.

7. Хьюз Дж., Мичтом Дж. Структурный подход к программированию. - М.: Мир, 1980.

8. Мануйлов В.Г. Разработка программного обеспечения на Паскале. - М.: Приор, 1996.

9. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. - М.:Мир, 1981.

10. Дейкстра Э. Дисциплина программирования. - М.: Мир, 1978. http://lib.ru/ctotor/dejkstra.

11. Фаронов В.В. Практика программирования. М.: МВТУ-ФЕСТО ДИДАКТИК, 1993. http://borlpasc.narod.ru/docym/farpract/oglav.htm

12. CIT Forum (Форум IT технолоний) [Электронный ресурс] Режим доступа: http://www.citforum.ru/database/classics/chen/

Размещено на Allbest.ru


Подобные документы

  • Язык Паскаль - процедурно-ориентированный язык высокого уровня, его основные достоинства. Разработка программ для решения задач. Выбор метода обработки информации. Форма представления исходных данных. Разработка алгоритма, его описание, листинг программы.

    курсовая работа [3,6 M], добавлен 17.02.2013

  • Анализ входной, выходной и постоянной информации. Математическая формулировка задачи и выбор метода обработки заданных параметров. Разработка алгоритма и его описание. Инструкция по эксплуатации программы, результаты проведенных расчетов и их анализ.

    курсовая работа [100,2 K], добавлен 11.02.2016

  • Формулировка, спецификация и математическая постановка задачи. Описание схемы алгоритма. Рассмотрение результата машинного тестирования программы. Получение на занятиях навыков алгоритмизации и программирования задач на языке высокого уровня C#.

    курсовая работа [268,2 K], добавлен 22.03.2015

  • Изучение символьных и строковых типов данных, алгоритма задачи на языке программирования Паскаль. Описания получения и установки отдельного символа строки, изменения регистра символов. Анализ создания и просмотра файла, поиска и сортировки информации.

    курсовая работа [440,7 K], добавлен 13.06.2011

  • Изучение организации диалоговой программы и закрепления основных элементов программирования на языке Паскаль и Си (Delphi, C++ Builder). Описание представления информации в программах на языках высокого уровня. Сравнительная характеристика Delphi и C++.

    курсовая работа [3,1 M], добавлен 27.02.2015

  • Вычисление суммы ряда с заданной точностью. Форма представления исходных данных. Разработка алгоритма и его описание. Выбор метода обработки информации. Упорядочение элементов строк матрицы по возрастанию. Программа подсчета числа слов в предложении.

    курсовая работа [23,9 K], добавлен 11.02.2016

  • Совместимость и преобразование типов данных. Создание информационно-поисковой системы на языке программирования Паскаль. Описание интерфейса, каждого блока программы "Картотека больных". Рассмотрение результатов работы программы, сортирования данных.

    курсовая работа [368,9 K], добавлен 18.05.2015

  • Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.

    курсовая работа [233,5 K], добавлен 14.12.2012

  • Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.

    курсовая работа [75,0 K], добавлен 21.03.2013

  • Выбор метода проектирования транслятора с языка Паскаль на язык Си, разработка и кодирование алгоритма программы. Использование допустимых операторов в исходном тексте, определение типов переменных и синтаксиса логических и арифметических выражений.

    курсовая работа [1,0 M], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.