Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Алексей_Рыженко
Здрасти!!! Я здесь человек новый, но вы меня пожалуйста не игнаируете! Я самостоятель учусь программировать на Паскале. По учебникам... У меня возникла проблема. Надо написать программу которая читает массив чисел, а потом выводит в парядке возрастания. При этом сортировку мы ещё не учили. Помогите!! Мучиюсь уже неделю!
volvo
Ну, то, что вы не учили сортировку, не значит, что без нее тут можно обойтись... В любом случае - тебе надо СОРТИРОВАТЬ массив по возрастанию, так?

Здесь: FAQ: Методы сортировок
Алексей_Рыженко
В том-то и дело монимаете что я просмотрел весь учебник и там через несколько уроков приводится алгоритм пузырьковой сортировки. Но это только через несколько уроков. А так как учебник хороший (может кто знает Уроки от Дмитриева Эдуарда) и я немогу поверить что нет никакого другого решения. Я вот тут одну фишку придумал... Может конечно бред, но всё же..... Если числа вводить из какого-то определённого промежутка, например от 1 до 100? А массив у нас типа integer. Тогда ищем в массиве минимальный элемент, выводим его на экран, а потом значение этого элемента увеличиваем на 100 и снова ищем мин элемент. Как мне кажется таким способом можно вывести этот массив в порядке возрастания, не сортируя его. Если кто считает что я не прав объясните в чем. Если же мой алгаритм имеет место быть подскажите как его реализовать!
Zxzc
Твой алгоритм верен, хотя и немного глуповат smile.gif... Только давай мы будем не прибавлять 100, а устанавливать в данный элемент значение MaxInt wink.gif. Если, конечно, ты уверен, что таких больших чисел введено не будет, и твой массив впоследствии не будет нужен. Определи количество элементов в массиве - этот показатель будет основой счетчика for.
RaV
Если не использовать второго массива , то значения элементов исходного массива изменяться(в твоем случае на +100).Если использовать второй массив, то это уже первый массив в отсортированном виде записанный во второй массив.
Алексей_Рыженко
Извиняюсь за тупой вопрос но я с этим ещё не сталкивался. Как присваивать MaxInt и надо ли её объявлять?
RaV
Можно добавить массив из булевых значений, тогда можно решить задачу.
MaxInt является предопределенной константой (MaxInt=32 767).Объявлять её не надо.;
А использовать его вот так: a[i]:=maxInt;
Алексей_Рыженко
Понимаете, ребят. я присваиваю MaxInt элементу массива М М[Min], но почему-то
минимальный у меня всегда один и тот же. Что я не так делаю?
zZz
Код
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
Прикольно, я в своё время до такого не додумался. Пришлось пузырьковую сортировку разбирать.
А парень сам почти до неё добрался.
Можно чуть усложнить, и будет почти как "пузырёк"
1. найти в массиве 1..n минимальный элемент.
2. поменять минимальный элемент с первым (это чтобы второй массив не заводить)
3. теперь "укоротить" массив на единицу и искать минимальный уже в диапазоне 2..n
RaV
Алексей_Рыженко, Покажи свой код
Алексей_Рыженко
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
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.



Сравни со воей программой, какие сделаны изменения.
Файл с кодомНажмите для просмотра прикрепленного файла
volvo
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;
Алексей_Рыженко
Всё работает! Спасибо, ребята, выручили!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.