Сортировка массивов

Suv121
Сообщения: 7
Зарегистрирован: 04 дек 2009, 15:31

Помогите пожалуйста написать программу которая будет сортировать массив тремя способами ( пузырьком, от большего к меньшему и от меньшего к большему ) , вариант сортировки нужно сделать с помощью оператора case , а сортировки function и вывести на экран получившейся массив с помощью оператора procedure, язык паскаль
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

См. атач. Там есть все нужные Вам алгоритмы сортировки. Или ищите в разделе Алгоритмы, данного форума. Каждый вариант сортировки оформляйте процедурой, выводите меню, анализируйте выбор пользователя и запускайте соотв. сортировку.
Вложения
Google.zip
(75.18 КБ) 74 скачивания
Нет религии выше истины
Suv121
Сообщения: 7
Зарегистрирован: 04 дек 2009, 15:31

а как сделать чтобы на экране появлялся вопрос с выбором сортировки . с помощью case
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Suv121 писал(а):а как сделать чтобы на экране появлялся вопрос с выбором сортировки . с помощью case
Например, так:
[syntax="pascal"]
var ch:char;
begin
repeat
writeln('Vyberite variant sortirovki:');
writeln('1 - Sortirovka 1');
writeln('2 - Sortirovka 2');
writeln('3 - Sortirovka 3');
writeln;
write('...');
ch:=readkey;
until (ch='1') or (ch='2') or (ch='3');
case ch of
'1': sort1;
'2': sort2;
'3': sort3;
end;
readkey;
end.
[/syntax]
Нет религии выше истины
Suv121
Сообщения: 7
Зарегистрирован: 04 дек 2009, 15:31

а для чего нужен readkey; перед последним end ? и вот когда я выберу нужную сортировку , выполню её как вывести результат на печать с помощью procedure???
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Suv121 писал(а):а для чего нужен readkey; перед последним end ?
Для задержки перед выходом.
Suv121 писал(а):и вот когда я выберу нужную сортировку , выполню её как вывести результат на печать с помощью procedure???
Откройте любую книжку по Паскалю - это Вам не помещает.
Нет религии выше истины
Suv121
Сообщения: 7
Зарегистрирован: 04 дек 2009, 15:31

у меня получилось вот такая программа :
[syntax="pascal"]Program A;
Const N:Integer;
Type vector=array[1…n] of integer;
Var
I:Integer;
J:Integer;
K:Integer;
Tmp:Real;
ch:char;
begin
repeat
writeln('Vyberite variant sortirovki:');
writeln('1 - Sortirovka 1');
writeln('2 - Sortirovka 2');
writeln('3 - Sortirovka 3');
writeln;
write('...');
ch:=readkey;
until (ch='1') or (ch='2') or (ch='3');
case ch of
'1': Sortirovka 1;
'2': Sortirovka 2;
'3': Sortirovka 3
;
end;
readkey;
end.

procedure Sortirovka 1;
var
Arr :vector;
begin
for i:=0 to N-1 do
for j:=0 to N-1-i do
if Arr[j]>=Arr[j+1]
then
begin
Tmp:=Arr[j];
Arr[j]:=Arr[j+1];
Arr[j+1]:=Tmp; end;
end;

procedure Sortirovka2;
var
Arr:vector;
Begin
dec(N);
i:=1;
repeat j:=0;
repeat
if Arr<=Arr[j]
then
begin k:=i; Tmp:=Arr;
repeat Arr[k]:=Arr[k-1]; dec(k);
until
not(k>j); Arr[j]:=Tmp; j:=i;
end
else inc(j);
until
not(j<i); inc(i);
until
not(i<=n);
end;

procedure Sortirovka3;
var Arr :vector;
begin dec(N); i:=1;
repeat j:=0;
repeat
if Arr>=Arr[j]
then
begin k:=i; Tmp:=Arr;
repeat Arr[k]:=Arr[k-1]; dec(k);
until
not(k>j); Arr[j]:=Tmp; j:=i;
end
else inc(j);
until
not(j<i); inc(i);
until
not(i<=n);
end;

Procedure print ????????[/syntax]

но я не знаю что надо написать там где знаки вопроса и что нужно добавить чтобы результат появился на экране , помогите плизз
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Перед запуском сортировок необходимо заполнить исходный массив. Например, так:
[syntax="pascal"]
randomize;
for i:=1 to n do a:=random(100);[/syntax]
или так вручную:
[syntax="pascal"]
writeln('Vvodite elementy');
for i:=1 to n do
begin
write('#',i,': ');
readln(a);
end;[/syntax]
У Вас уйма ошибок в коде:
- опишите n в const как n=10;
- процедуры описываются перед основной программой;
- неправильно передаются массивы для сортировки.
Для начала сделайте, чтобы компилировалось хотя бы то, что у Вас есть. Процедeра вывода массива может выглядеть так:
[syntax="pascal"]
procedure Print(arr:vector);
var i_:integer;
begin
clrscr;
writeln('Ishodnyi massiv:');
for i_:=1 to n do write(arr[i_],' ');
end;[/syntax]
Нет религии выше истины
Suv121
Сообщения: 7
Зарегистрирован: 04 дек 2009, 15:31

вроде всё исправил:
Program A;
Const n=10;
Type vector=array[1…n] of integer;
var arr:vector;
ch:char;

procedure Sortirovka 1;
var I:Integer;
J:Integer;
K:Integer;
Tmp:Real;
begin
for i:=0 to N-1 do
for j:=0 to N-1-i do
if Arr[j]>=Arr[j+1]
then
begin
Tmp:=Arr[j];
Arr[j]:=Arr[j+1];
Arr[j+1]:=Tmp; end;
end;

procedure Sortirovka2;
var I:Integer;
J:Integer;
K:Integer;
Tmp:Real;
Begin
dec(N);
i:=1;
repeat j:=0;
repeat
if Arr<=Arr[j]
then
begin k:=i; Tmp:=Arr;
repeat Arr[k]:=Arr[k-1]; dec(k);
until
not(k>j); Arr[j]:=Tmp; j:=i;
end
else inc(j);
until
not(j<i); inc(i);
until
not(i<=n);
end;

procedure Sortirovka3;
var I:Integer;
J:Integer;
K:Integer;
Tmp:Real;
begin dec(N); i:=1;
repeat j:=0;
repeat
if Arr>=Arr[j]
then
begin k:=i; Tmp:=Arr;
repeat Arr[k]:=Arr[k-1]; dec(k);
until
not(k>j); Arr[j]:=Tmp; j:=i;
end
else inc(j);
until
not(j<i); inc(i);
until
not(i<=n);
end;



begin
repeat
writeln('Vyberite variant sortirovki:');
writeln('1 - Sortirovka 1');
writeln('2 - Sortirovka 2');
writeln('3 - Sortirovka 3');
writeln;
write('...');
ch:=readkey;
until (ch='1') or (ch='2') or (ch='3');
case ch of
'1': Sortirovka 1;
'2': Sortirovka 2;
'3': Sortirovka 3
;
end;
end.

procedure Print(arr:vector);
var i_:integer;
begin
clrscr;
writeln('Ishodnyi massiv:');
for i_:=1 to n do write(arr[i_],' ');
end;

если что то не так помогите исправить
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

&quot писал(а):Const n=10;
Type vector=array[1…n] of integer;
var arr:vector;
Узнаю дубовый стиль преподавания программирования. Вместо этого всего можно написать var arr: array[1..10] of integer;
&quot писал(а):procedure Sortirovka 1;
Работать не будет - не должно быть пробелов в идентификаторах. Надо procedure Sortirovka_1 или Sortirovka1
&quot писал(а):var I:Integer;
J:Integer;
K:Integer;
var I,J,K: integer;
&quot писал(а):dec(N);
Тоже не будет работать - вы пытаетесь присвоить новое значение константе. Даже если вы ее объявите как переменную - толка не будет, потому что тогда нельзя будет объявить массив размера N.
&quot писал(а): procedure Print(arr:vector);
Это не будет не то что работать, а даже компилироваться. Оно стоит после end. Стало быть, компилятор его попросту игнорирует. Так что переносите эту процедуру к трем процедурам сортировки. Передавать в процедуру массив совершенно излишне - он и так один на всю программу, так что вполне хватит объявления procedure Print;, к тому же для того, чтобы она работала, ее надо вызвать перед завершением программы. А перед выбором сортировки неплохо бы массив чем-нибудь заполнить - сортировать нули дело унылое.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить