Составить программу на языке Turbo Pascal для параллельной сортировки чисел

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

Южно-Уральский государственный университет

Приборостроительный факультет

Кафедра «Электронно-Вычислительные машины»

Курсовая работа

по курсу ПЯВУ

Выполнила: студентка

группы ПС-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;

Схема алгоритма

F=true

E=Length(fam)

I=1

Val(fam[i],n,kod)

F=false

I=I+1

да

нет

нет

да


нет

да


I=1

I=I+1

I=2

J=e

нет

да

да

нет


X=a[j-1]

a[j-1]=a[j]

a[j]=x

J=e-1


I=I+1

нет

да

да

нет


Текст Программы

program kursacH2;

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.

Примеры выполнения

Список литературы

    http://pascal.proweb.kz/

    Д. Кнут, Искусство программирования, М.:Мир,1978.

    Рейнгольд, Нивергельт, Део, Комбинаторные алгоритмы. Теория и практика, М.:Мир, 1982.