Автор работы: Пользователь скрыл имя, 30 Мая 2013 в 20:00, курсовая работа
Автор поставил перед собой следующую цель:
«Провести исследование на тему Алгоритмы, их способы записи и формы представления».
Исходя из поставленной цели, автор выдвинул следующие задачи:
• Познакомиться с понятием «алгоритм»;
• Узнать о свойствах алгоритма, его виды;
• Узнать где применяются алгоритмы;
• Научить записывать, строить алгоритм, определять наличие алгоритмов;
• Узнать о формах представления алгоритмов;
• Научиться использовать алгоритмы на практике. Для этого выполним практическое задание: написать программу в компиляторе Pascal, используя способы алгоритмизации.
Введение 3
Глава 1. Представление о алгоритмах 5
1.1 Что такое алгоритм? 6
1.2 Свойства и виды алгоритмов 7
Глава 2. Разработка алгоритмов 8
2.1 ЭВМ - исполнитель алгоритмов 8
2.2 Формы представления 9
2.3 Оптимизация алгоритмов 11
Глава 3. Практическое задание 15
3.1 Описание программы 15
3.2 Код программы 14
Заключение 19
Литература 20
Данная форма очень удобна, если нужно приближенно описать суть алгоритма. Однако при словесном описании не всегда удается ясно и точно выразить идею.
2. Для более наглядного представления алгоритма используется графическая форма. Графическая форма - изображение алгоритма в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий.(см рис 2).
3. При записи алгоритма в словесной и в графической форме допускается определенный произвол при изображении команд. Вместе с тем такая запись точна на столько, что позволяет человеку понять суть дела и исполнить алгоритм. Однако на практике в качестве исполнителей алгоритмов используются специальные автоматы – компьютеры. Поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на понятном ему языке. Такой язык принято называть языком программирования, а форму представления алгоритма - программной.
То есть программная форма записи алгоритма – это запись на языке программирования.
Рассмотрим пример использования данных форм записи алгоритмов:
Задание: написать алгоритм “Одеться по погоде”. Если на улице температура ниже 0, то необходимо надеть шубу, иначе – куртку.
1. Словесная форма:
Алгоритм ПОГОДА
2. Программная форма (Pascal):
3. Графическая форма записи:
Рис. 2 Блок схема
Мы рассмотрели на примере алгоритма разветвляющейся конструкции в виде блок-схемы.
Тип алгоритма |
Способы записи алгоритма | ||
Словесная |
Графическая |
Программная | |
Линейный алгоритм – это описание действий, которые выполняются однократно в заданном порядке. |
|
|
program R1; var a,b,c,d,m,n: integer; begin writeln(‘Введите 4 числа’); readln(a,b,c,d); m:=a*d; n:=b*c; writeln(‘числитель=’, m); writeln(‘знаменатель=’, n); readln end. |
Разветвляющийся алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий. |
1.неполная форма: Если на улице холодно, то нужно одеть шубу.
2.полная форма: Если на улице температура ниже 0, то одеть шубу, иначе – куртку. |
1. 2. |
Program R2; var a: integer; begin writeln(‘Введите число’); readln(a); if a mod 2 = 0 then writeln(‘a-четное’) else writeln(‘a-нечетное’); readln end |
Сравнительная таблица
Для сравнения, рассмотрим в таблице, чем отличается разветвляющийся алгоритм от линейного.
Каждую программу можно написать по-разному, исходя из этого, задачу программы можно решить многими способами, разными алгоритмами.
Поэтому в программировании существует такой термин, как «Оптимизация». Программа написанная с оптимизированным алгоритмом будет работать быстрее и занимать меньше места, что не мало важно для объёмных работ.
Оптимизация вычислительных алгоритмов – это выбор оптимального вычислительного алгоритма при решении прикладных задач пли при разработке систем стандартных программ. При решении конкретной задачи оптимальная тактика поведения может состоять в том, чтобы не оптимизировать метод решения, а подключиться к стандартной программе или воспользоваться простейшим методом, составление программы для которого не потребует много усилий.
Рассмотрим одни из самых популярных алгоритмов оптимизации:
1) Пузырьковая сортировка.
Сортировка простыми обменами, сортировка пузырьком — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяются более эффективные алгоритмы сортировки. В то же время метод сортировки обменами лежит в основе некоторых более совершенных алгоритмов, таких как шейкерная сортировка, пирамидальная сортировка и быстрая сортировка.
Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются N-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим наибольшим элементом, а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма).
begin
for j:=1 to N-1 do
for i:=1 to N-j do
begin
if M[i] > M[i+1] then
begin
t:=M[j];
M[j]:=M[j+1];
M[j+1]:=t;
end;
end;
end;
2) Quick Sort
Быстрая сортировка часто называемая quicksort по имени реализации в стандартной библиотеке языка Си — широко известный алгоритм сортировки, разработанный английским Информатиком Чарльзом Хоаром в 1960 году. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O(n log n) обменов при упорядочении n элементов), хотя и имеющий ряд недостатков.
Краткое описание алгоритма
Примечание: на практике
обычно разделяют сортируемое
procedure qSort(var ar:array of real; low,high:integer);
var i,j:integer;
m,wsp:real;
begin
i:=low;
j:=high;
m:=ar[trunc((i+j)/2)];
repeat
while(ar[i]<m) do i:=i+1;
while(ar[j]>m) do j:=j-1;
if(i<=j) then begin
wsp:=ar[i];
ar[i]:=ar[j];
ar[j]:=wsp;
i:=i+1;
j:=j-1;
end;
until (i>j);
if(low<j) then qSort(ar,low,j);
if(i<high) then qSort(ar,i,high);
end;
3) Решето Эратосфена
Решето Эратосфена — алгоритм н
Алгоритм:
Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:
Вход: натуральное число n
Пусть A — булевый массив, индексируемый числами от 2 до n,
изначально заполненный значениями true.
для i := 2, 3, 4, ..., пока i^2 ≤ n:
если A[i] = true:
для j := i^2, i^2 + i, i^2 + 2i, ..., пока j ≤ n:
если A[j] = true:
A[j] := false
Теперь все числа i, такие что A[i] = true, являются простыми.
Все вышеописанные
алгоритмы позволяют
Глава 3 Практическая задание
3.1 Описание программы
Программа «Тренажер памяти» в Pascal.
Описание: Программа направлена на тренировку памяти пользователя. Тренажер памяти, который вы видите, примитивно прост, но в этом его сила. Ничто не отвлекает от главной задачи. Только вы и ваша память. Ваша задача запомнить как можно больше символов и воспроизвести их
При запуске данной программы появляется выбор уровня сложности и инструкция. При нажатии на клавишу «ENTER» появляется строка с символами, которая спустя несколько секунд исчезает. Затем вам необходимо ввести как можно больше символов, которые вы запомнили. По окончании игры выводиться результат, и далее меню о продолжении либо о завершении тестирования.
3.2 Код программы
program testmemory;
uses crt,graphabc;
var
n,ball,i,k:integer;
h,l:byte;
s,s1:string[15];
ch:char;
r1:real;
Begin
n:=3;
randomize;
repeat
begin
writeln('Выберете уровень сложности от 2 до 15');
readln(n);
end;
until (n>1) and (n<16);
repeat
begin
ball:=0; {обнуление переменных}
s1:='';
s:='';
for i:=1 to n do {заполнение случаными буквами}
begin
k:=(random(26)+65);
ch:=chr(k);
s:=s+ch;
end;
writeln('Сейчас вам будет показана строка,ваша задача');
writeln('запомнить как можно больше элементов и воспроизвести');
writeln('по нажатию клавиши "ENTER" у вас будет 4 секунды');
readln;
begin
for i:=1 to n do
write(s[i],' ');
delay(4000);
clrscr;
end;
for i:=1 to n do
begin
read(ch);
s1:=s1+ch;
end;
s1:=uppercase(s1);
for i:=1 to n do
begin
for k:=1 to n do
begin
if s1[i]=s[k] then
begin
inc(ball);
break;
end;
end; {Вывод результата}
end;
r1:=ball/(n);
if r1>0.7 then writeln('Молодец! У вас отличная память!');
if (r1<0.7) and (r1>=0.5) then writeln('У вас хорошая память!');
if r1<0.5 then writeln('Вам следовало бы потренировать свою память!');
writeln('Ваш результат ',ball,' из ',n);
writeln;
writeln('если хотите повысить уровень сложности то "u"');
writeln;
writeln('если понизить уровень сложности "l"');
writeln;
writeln('Если хотите поменять уровень сложности нажмите "r" ');
writeln;
writeln('Если вы хотите выйти из игры, то нажмите "g";');
repeat
readln(ch);
until (ch='u') or (ch='l') or (ch='g') or (ch='r');
if ch='u' then n:=n+1;
if (ch='l') and (n>2) then n:=n-1;
if ch='r' then
begin
writeln('введите уровень сложности от 2 до 15');
readln(n);
end;
clrscr;
end;
until ch='g';
End.
Заключение
В заключение проделанной работы можно подвести итоги и сказать что поставленная цель – сформировать представление об алгоритмах, провести небольшое исследование – была достигнута. В связи с этим были достигнуты следующие задачи:
Алгоритмом, таким образом, называется система четких однозначных указаний, которая определяет последовательность действий над некоторыми объектами и после конечного числа шагов приводит к получению требуемого результата.
Также из всего вышесказанного можно сделать вывод, что знание алгоритмов и их построение является одним из основных понятий в информатике и программисту необходимо знать их и уметь построить необходимый алгоритм для отладки программы.
Литература