Здрасти!!! Я здесь человек новый, но вы меня пожалуйста не игнаируете! Я самостоятель учусь программировать на Паскале. По учебникам... У меня возникла проблема. Надо написать программу которая читает массив чисел, а потом выводит в парядке возрастания. При этом сортировку мы ещё не учили. Помогите!! Мучиюсь уже неделю!
volvo
24.05.2006 22:42
Ну, то, что вы не учили сортировку, не значит, что без нее тут можно обойтись... В любом случае - тебе надо СОРТИРОВАТЬ массив по возрастанию, так?
В том-то и дело монимаете что я просмотрел весь учебник и там через несколько уроков приводится алгоритм пузырьковой сортировки. Но это только через несколько уроков. А так как учебник хороший (может кто знает Уроки от Дмитриева Эдуарда) и я немогу поверить что нет никакого другого решения. Я вот тут одну фишку придумал... Может конечно бред, но всё же..... Если числа вводить из какого-то определённого промежутка, например от 1 до 100? А массив у нас типа integer. Тогда ищем в массиве минимальный элемент, выводим его на экран, а потом значение этого элемента увеличиваем на 100 и снова ищем мин элемент. Как мне кажется таким способом можно вывести этот массив в порядке возрастания, не сортируя его. Если кто считает что я не прав объясните в чем. Если же мой алгаритм имеет место быть подскажите как его реализовать!
Zxzc
27.05.2006 13:18
Твой алгоритм верен, хотя и немного глуповат ... Только давай мы будем не прибавлять 100, а устанавливать в данный элемент значение MaxInt . Если, конечно, ты уверен, что таких больших чисел введено не будет, и твой массив впоследствии не будет нужен. Определи количество элементов в массиве - этот показатель будет основой счетчика 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.
примерно так выглядит самая простая для понимания и объяснения сортировка, что-то похожее нам и писала учительница на доске (когда-то давно...)
это просто перестановка двух переменных без использования третьей...
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;
beginFor I := 1to10dobegin
Write('‚ўҐ¤ЁвҐ зЁб«(r) N',I,': ');
Readln(M[I]);
end;
For J := 1to10dobegin
M[MIN] := M[1];
For I := 1to10dobeginIf 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;
beginFor I := 1to10dobegin
Write('‚ўҐ¤ЁвҐ зЁб«(r) N',I,': ');
Readln(M[I]);
end;
For J := 1to10dobegin
MIN := M[1]; {<---изменено M[MIN] на MIN}For I := 1to10dobeginIf M[I] < MIN then MIN := M[I];
end;
Write(MIN,' ');
for i:=1to10doif MIN=M[i] then m[i]:=maxint;{<---- Изменено M[MIN]:=MaxInt на эту строку}end;
Readln;
end.
RaV, если тебе доставляет удовольствие делать в программах лишние и никому не нужные циклы - тогда, боюсь, ты ошибся ресурсом...
Все гораздо проще:
{ ... }{ Ввод массива }For J := 1to10dobegin
min := 1; { <--- Работаем с индексами... }For I := 1to10dobeginif M[i] < M[min] then min := i;
end;
Write(M[min],' ');
M[min] := maxint; { <--- А это - вместо твоего цикла ...}end;
Алексей_Рыженко
27.05.2006 18:42
Всё работает! Спасибо, ребята, выручили!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.