Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Разбор полетов.

3.7K
10 апреля 2003 года
foxxxyoflight
3 / / 10.04.2003
Обработка массивов
Ребята помогите разобрать алгаритм сортровки массива C[n]. Пошагово как он работает.
Вот код программы:


uses Crt;

var
A,B:array [1..10]of integer;
C,S:array [1..20]of integer;
F:text;
K:Char;
n,l,t,ind:byte;
Min:integer;

begin
ClrScr;

Writeln('Результат выводить в файл (Y/N)?':45); {Запpос вывода}

repeat
readln(k); {Ожидание ответа}
until (K='Y')or (K='N')or(K='y')or (K='n');

if (k='Y') or (k='y') then Assign(F,'.\mass.txt') {Назначаю имя файла}
else Assign(F,'CON');

rewrite(F); {Создаю и откpываю файл}

clrScr;

writeln(F,'Массив A':40,'Массив B':10);
writeln;

randomize;

for n:=1 to 10 do
begin
A[n]:=Random(50)-40; {Генеpиpую случайные массивы}
B[n]:=Random(100)-50;
WriteLn(F,A[n]:10,B[n]:10);
end;

for n:=1 to 20 do begin {Соpтиpовка массива}
if n>10 then C[n]:=B[n-10]
else C[n]:=A[n];
end;

for n:=1 to 20 do
begin
Min:=32767;
for l:=1 to (21 - n) do
begin
if C[l]<Min then
begin
Min:=C[l];
ind:=l;
S[n]:=C[l];
end;
end;
for t:=ind to 20 do C[t]:=C[t+1];
end;
writeln(F);
writeln(F,'Масив C':10);
writeln;
for n:=1 to 20 do

write(F,S[n]:6);

Close(F); {Закpываю файл}


end.
269
10 апреля 2003 года
Greenering
892 / / 04.02.2003
uses Crt;

var
A,B:array [1..10]of integer;
C,S:array [1..20]of integer;
F:text;
K:Char;
n,l,t,ind:byte;
Min:integer;

begin
ClrScr;

Writeln('Результат выводить в файл (Y/N)?':45); {Запpос вывода}

repeat
readln(k); {Ожидание ответа}
until (K='Y')or (K='N')or(K='y')or (K='n');

if (k='Y') or (k='y') then Assign(F,'.\mass.txt') {Назначаю имя файла}
else Assign(F,'CON');

rewrite(F); {Создаю и откpываю файл}

clrScr;

writeln(F,'Массив A':40,'Массив B':10);
writeln;

randomize;

for n:=1 to 10 do
begin
A[n]:=Random(50)-40; {Генеpиpую случайные массивы}
B[n]:=Random(100)-50;
WriteLn(F,A[n]:10,B[n]:10);
end;

for n:=1 to 20 do begin {Соpтиpовка массива}
if n>10 then C[n]:=B[n-10] {это не сортировка а в один массив накидывают 2 массива
с 1 до 10 А-массив, с 11..20 В-массив}
else C[n]:=A[n];
end;

for n:=1 to 20 do {цикл (*2)}
begin
Min:=32767;
for l:=1 to (21 - n) do {цикл (*)}
begin
if C[l]<Min then {Проверяем на меньшее.}
begin
Min:=C[l]; {нашли, записали в мин }
ind:=l;{номер запомнили}
S[n]:=C[l];{записали в S-массив, в данном цикле (*) n- фиксированное, поэтому пишем постоянно на один и тот же номер, это мелочи все ок.}
end;
end;
for t:=ind to 20 do C[t]:=C[t+1]; (*3)
{c запомненного номера до конца массива пишем минимумы. т.е. с ind до 20 одни Min'ы в С-массиве}
end;
{Короче рецензия: фигня. Поясняю. мин на 15 месте
(*2) n=1 (*) l=1..20, нашли мин. запомнили номер ind, в S[1] записали, и с 15 до 20 цикл (*3) все забиваем Min'ами, а как же так там ведь не отсрторованные значения. тчк. приехали. Шаг 2. n=2, l=1..19, мин там же (его никто не отменял), нашли его, запомнили номер, в S[2] пишем мин. тот ЖЕ и пошло поехало, до n=6, а там новый мин и точно так же.
Модернизация цикл (*3) режем под ноль
в цикле (*) l=1..20 , строго. Метод пузырька.
Это экспромт, не судить строго.}
writeln(F);
writeln(F,'Масив C':10);
writeln;
for n:=1 to 20 do

write(F,S[n]:6);
{ставить Flush(F) надо так грамотнее}
Close(F); {Закpываю файл}


end.
3.7K
10 апреля 2003 года
foxxxyoflight
3 / / 10.04.2003
uses Crt;

var
A,B:array [1..10]of integer;
C,S:array [1..20]of integer;
F:text;
K:Char;
n:byte;
Min:integer;
Temp : Integer;
Flag : Boolean;
begin
ClrScr;

Writeln('Сохранить результат в файл (Y/N)?':45);

repeat
readln(k);
until (K='Y')or (K='N')or(K='y')or (K='n');

if (k='Y') or (k='y') then Assign(F,'.\mass.txt')
else Assign(F,'CON');

rewrite(F);

clrScr;

writeln(F,'Массив A':10,'Массив B':10);
writeln;

randomize;

for n:=1 to 10 do
begin
A[n]:=Random(100)-50;
B[n]:=Random(100)-50;
WriteLn(F,A[n]:10,B[n]:10);
end;

for n:=1 to 20 do begin
if n>10 then C[n]:=B[n-10]
else C[n]:=A[n];
end;

for n:=1 to 20 do;
begin
repeat
Flag := False;
for n := 0 to n - 1 do
if C [n] > C [n + 1] then
begin
Temp := C [n];
C [n] := C [n + 1];
C [n + 1] := Temp;
Flag := True;
end;
until Flag = False;
end;
writeln(F);
writeln(F,'Массив C':10);
writeln;
for n:=1 to 20 do

write(F,C[n]:4);

Close(F);


end.
269
10 апреля 2003 года
Greenering
892 / / 04.02.2003
Вообщем правильно на первый взгляд, но массив C c 1..20 а в цикле
for n:=0 to n-1
ноль стоит
надо так наверное,

for n:=2 to 20 do
begin
repeat
Flag := False;
for n := 1 to n - 1 do
if C [n] > C [n + 1] then
begin
3.7K
10 апреля 2003 года
foxxxyoflight
3 / / 10.04.2003
Да ты права это мое упущение.
Спасибо огромное.
Мне первый вариант был понятен но только какойто он исскуственный((. Я не сталкивался с таким методом сортировки.
269
12 апреля 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by foxxxyoflight
Да ты права это мое упущение.
Спасибо огромное.
Мне первый вариант был понятен но только какойто он исскуственный((. Я не сталкивался с таким методом сортировки.



первый вариант тоже имеет место быть, если его
додумать. Хех, нобелевская премия, может, по сортировке :). Вроде что-то дельное есть.
А так, будь здоров

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог