Федеральне агентство з освіти
Державна освітня установа вищої професійної освіти
Південно-Уральський державний університет
Приладобудівний факультет
Кафедра «Електронно-Обчислювальні машини»
Курсова робота за курсом ПЯВУ
Виконала: студентка
групи ПС-197 Савельєва К.А.
Перевірив: Сяськов С.В.
Челябінськ 2009
Умова задачі
Скласти програму на мові
Turbo Pascal для паралельної
сортування безлічі з n чисел, де n-мощность безлічі, що складається з літер прізвища, n> 2.
Зміст Умова задачі
Опис програми
Схема алгоритму
Текст Програми
Приклади виконання
Список літератури
Опис програми
Тіло програми починається з циклу for, що створює верхній рядок, що складається з
символів:
{For i: = 1 to 35 do
begin
textcolor (1);
write (chr (5));
end;}
де 35 - довільне число, довжина рядка; τextcolor - процедура, що задає колір потрібного фрагмента програми. Далі оформлення створюється аналогічним чином.
Для початку
роботи програми вводимо прізвище. Вона зчитується в змінну fam типу string. Потім потрібно створити за кількістю символів з цієї введеної прізвища одновимірний
масив типу integer. Для цього спочатку потрібно порахувати кількість
символом - це легко можна зробити за допомогою строковою
функції Length: e: = Length (fam), де e-змінна типу integer.
Далі потрібно перевірити введену прізвище, на наявність цифр. Для цього використовується
функція Val: val (fam [i], n, kod). Цю функцію виконуємо в циклі for, тому що потрібно перевірити кожен
символ в прізвищі. Потім робимо перевірку змінної kod в умовному операторі if:
{For i: = 1 to e do
begin
val (fam [i], n, kod);
if kod = 0 then
begin
writeln ('neverno vvedena familia')
f: = false; end;}
Якщо kod = 0 означає в нашому прізвища міститься цифра.
Все вище описане відбувається в циклі repeat, умовою виходу якого є f = false. На початку цього циклу ми піднімаємо прапорець, тобто f = true. Далі, як описано у фрагменті коду вище, якщо kod = 0 ми опускаємо прапорець. Це потрібно для
того, щоб вийшло зациклення, і користувач міг, у разі неправильного введення прізвища, зробити це знову. Якщо ж f = true після проходження по циклу, цикл завершить свою роботу.
Після цього циклу створюється зручний інтерфейс, що дозволяє користувачеві не заплутатися у тому, що потрібно ввести. Далі безпосередньо починається
сортування масиву, двома способами: методом вставки і методом бульбашки.
k: = 0;
{Metod vstavki}
{For i: = 2 to e do
begin
x: = a [i];
j: = i-1;
while (x <a[j]) and (j> = 1) do
begin
a [j +1]: = a [j];
j: = j-1;
k: = k +1;
if j = 0 then goto 1;
end;
1: a [j +1]: = x;
end;}
{Puzyrkovyi metod}
for i: = 2 to e do
begin
for j: = e downto i do
if a [j-1]> a [j] then
begin
x: = a [j-1];
a [j-1]: = a [j];
a [j]: = x;
end;
end;
Схема алгоритму
A: Iнач = 0 Iкон = 100; f, e, n, kod, j, k, x, fam
|
Кількість літер у прізвищі
|
X = a [j-1] a [j-1] = a [j] a [j] = x
|
program kursach1;
uses crt;
var a: array [1 .. 100] of integer;
i, e, n, kod, j, k, x: integer; fam: string; f: boolean;
label 1;
begin
clrscr;
for i: = 1 to 35 do
begin
textcolor (1);
write (chr (5));
end;
writeln;
TextColor (1); write (chr (5));
repeat
f: = true;
textcolor (5);
write ('vvedite familiu ='); read (fam);
TextColor (1); write (chr (5));
e: = length (fam);
for i: = 1 to e do
begin
val (fam [i], n, kod);
if kod = 0 then
f: = false;
end;
if f = false then writeln ('neverno vvedena familia') else
until f = true;
Textcolor (4); write ('kol-vo bukv v familii =', e);
TextColor (1); write ('', chr (5));
writeln;
write (chr (5));
TextColor (11); write ('vvedite massiv iz', e, 'chisel:');
TextColor (1); write (chr (5));
writeln;
write (chr (5), '');
for i: = 1 to e do
begin
TextColor (14);
write (i, '-e chislo =');
TextColor (45);
read (a [i]);
TextColor (1);
write (chr (5), '');
end;
TextColor (15); write ('Isxodnii massive:');
Textcolor (1); write (chr (5));
writeln;
write (chr (5));
for i: = 1 to e do
begin
TextColor (5); write ('', a [i], '');
end;
writeln;
Textcolor (1); write (chr (5));
TextColor (15); write ('Otsortirovannii massive:');
TextColor (1); write ('', chr (5));
writeln;
k: = 0;
{Metod vstavki}
{For i: = 2 to e do
begin
x: = a [i];
j: = i-1;
while (x <a[j]) and (j> = 1) do
begin
a [j +1]: = a [j];
j: = j-1;
k: = k +1;
if j = 0 then goto 1;
end;
1: a [j +1]: = x;
end;}
{Puzyrkovyi metod}
for i: = 2 to e do
begin
for j: = e downto i do
if a [j-1]> a [j] then
begin
x: = a [j-1];
a [j-1]: = a [j];
a [j]: = x;
end;
end;
write (chr (5));
For i: = 1 to e do
begin
TextColor (5);
write ('', a [i], '');
end;
writeln;
for i: = 1 to 35 do
begin
textcolor (1);
write (chr (5));
end;
readln;
end.
Приклади виконання
Список літератури
1. http://pascal.proweb.kz/
2. Д. Кнут,
Мистецтво програмування, М.: Світ, 1978.
3. Рейнгольд, Нівергельт, Део, Комбінаторні алгоритми.
Теорія і практика, М.: Світ, 1982.