Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вывод массива

Автор: Алексей_Рыженко 24.05.2006 22:38

Здрасти!!! Я здесь человек новый, но вы меня пожалуйста не игнаируете! Я самостоятель учусь программировать на Паскале. По учебникам... У меня возникла проблема. Надо написать программу которая читает массив чисел, а потом выводит в парядке возрастания. При этом сортировку мы ещё не учили. Помогите!! Мучиюсь уже неделю!

Автор: volvo 24.05.2006 22:42

Ну, то, что вы не учили сортировку, не значит, что без нее тут можно обойтись... В любом случае - тебе надо СОРТИРОВАТЬ массив по возрастанию, так?

Здесь: http://forum.pascal.net.ru/index.php?showtopic=3065

Автор: Алексей_Рыженко 27.05.2006 13:06

В том-то и дело монимаете что я просмотрел весь учебник и там через несколько уроков приводится алгоритм пузырьковой сортировки. Но это только через несколько уроков. А так как учебник хороший (может кто знает Уроки от Дмитриева Эдуарда) и я немогу поверить что нет никакого другого решения. Я вот тут одну фишку придумал... Может конечно бред, но всё же..... Если числа вводить из какого-то определённого промежутка, например от 1 до 100? А массив у нас типа integer. Тогда ищем в массиве минимальный элемент, выводим его на экран, а потом значение этого элемента увеличиваем на 100 и снова ищем мин элемент. Как мне кажется таким способом можно вывести этот массив в порядке возрастания, не сортируя его. Если кто считает что я не прав объясните в чем. Если же мой алгаритм имеет место быть подскажите как его реализовать!

Автор: Zxzc 27.05.2006 13:18

Твой алгоритм верен, хотя и немного глуповат smile.gif... Только давай мы будем не прибавлять 100, а устанавливать в данный элемент значение MaxInt wink.gif. Если, конечно, ты уверен, что таких больших чисел введено не будет, и твой массив впоследствии не будет нужен. Определи количество элементов в массиве - этот показатель будет основой счетчика for.

Автор: RaV 27.05.2006 13:47

Если не использовать второго массива , то значения элементов исходного массива изменяться(в твоем случае на +100).Если использовать второй массив, то это уже первый массив в отсортированном виде записанный во второй массив.

Автор: Алексей_Рыженко 27.05.2006 14:05

Извиняюсь за тупой вопрос но я с этим ещё не сталкивался. Как присваивать MaxInt и надо ли её объявлять?

Автор: RaV 27.05.2006 14:10

Можно добавить массив из булевых значений, тогда можно решить задачу.
MaxInt является предопределенной константой (MaxInt=32 767).Объявлять её не надо.;
А использовать его вот так: a[i]:=maxInt;

Автор: Алексей_Рыженко 27.05.2006 14:20

Понимаете, ребят. я присваиваю MaxInt элементу массива М М[Min], но почему-то
минимальный у меня всегда один и тот же. Что я не так делаю?

Автор: zZz 27.05.2006 14:21

Код
var a:array[1..10]of integer;
i,j,n:integer;
begin
writeln('размерность массива');
readln(n);
for i:=1 to n do readln(a[i]);

for i:=1 to n do
for j:=1 to n do
if (a[i]>a[j]) and (i<j) then
begin {прога просто сравнивает разные
элементы массива с учетом их порядка}
a[i]:=a[i]+a[j];
a[j]:=a[i]-a[j];
a[i]:=a[i]-a[j];
end;
for i:=1 to n do  writeln(a[i]);
end.


примерно так выглядит самая простая для понимания и объяснения сортировка, что-то похожее нам и писала учительница на доске (когда-то давно...)

Цитата
a[i]:=a[i]+a[j];
a[j]:=a[i]-a[j];
a[i]:=a[i]-a[j];

это просто перестановка двух переменных без использования третьей...

PS/насколько я понимаю, автору темы и нужен примерно такой алгоритм, так что вот...

Автор: pascal65536 27.05.2006 14:24

Прикольно, я в своё время до такого не додумался. Пришлось пузырьковую сортировку разбирать.
А парень сам почти до неё добрался.
Можно чуть усложнить, и будет почти как "пузырёк"
1. найти в массиве 1..n минимальный элемент.
2. поменять минимальный элемент с первым (это чтобы второй массив не заводить)
3. теперь "укоротить" массив на единицу и искать минимальный уже в диапазоне 2..n

Автор: RaV 27.05.2006 14:25

Алексей_Рыженко, Покажи свой код

Автор: Алексей_Рыженко 27.05.2006 14:36

Program DomZadUr12;

var

M : Array [1 .. 10] of integer;

J,I : Byte;

MIN : integer;

begin

For I := 1 to 10 do

begin

Write('‚ўҐ¤ЁвҐ зЁб«® N',I,': ');

Readln(M[I]);

end;

For J := 1 to 10 do

begin

M[MIN] := M[1];

For I := 1 to 10 do

begin

If M[I] < M[MIN] then M[MIN] := M[I];

end;

Write(M[MIN],' ');

M[MIN] := MaxInt;

end;

Readln;

end.

Тегами пользуемся!

Автор: RaV 27.05.2006 14:57

Program DomZadUr12;

var

M : Array [1 .. 10] of integer;

J,I : Byte;

MIN : integer;

begin

For I := 1 to 10 do

begin

Write('‚ўҐ¤ЁвҐ зЁб«® N',I,': ');

Readln(M[I]);

end;

For J := 1 to 10 do

begin

MIN := M[1]; {<---изменено M[MIN] на MIN}

For I := 1 to 10 do

begin

If M[I] < MIN then MIN := M[I];

end;

Write(MIN,' ');

for i:=1 to 10 do if MIN=M[i] then m[i]:=maxint;{<---- Изменено M[MIN]:=MaxInt на эту строку}

end;

Readln;

end.



Сравни со воей программой, какие сделаны изменения.
Файл с кодомПрикрепленный файл  123.txt ( 421 байт ) Кол-во скачиваний: 322

Автор: volvo 27.05.2006 15:15

RaV, если тебе доставляет удовольствие делать в программах лишние и никому не нужные циклы - тогда, боюсь, ты ошибся ресурсом...

Все гораздо проще:

{ ... } { Ввод массива }

For J := 1 to 10 do begin

min := 1; { <--- Работаем с индексами... }
For I := 1 to 10 do begin
if M[i] < M[min] then min := i;
end;

Write(M[min],' ');
M[min] := maxint; { <--- А это - вместо твоего цикла ...}

end;

Автор: Алексей_Рыженко 27.05.2006 18:42

Всё работает! Спасибо, ребята, выручили!