IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вывод массива, Вывод массива в порядке возрастания
Алексей_Рыженко
сообщение 24.05.2006 18:38
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Здрасти!!! Я здесь человек новый, но вы меня пожалуйста не игнаируете! Я самостоятель учусь программировать на Паскале. По учебникам... У меня возникла проблема. Надо написать программу которая читает массив чисел, а потом выводит в парядке возрастания. При этом сортировку мы ещё не учили. Помогите!! Мучиюсь уже неделю!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2006 18:42
Сообщение #2


Гость






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

Здесь: FAQ: Методы сортировок
 К началу страницы 
+ Ответить 
Алексей_Рыженко
сообщение 27.05.2006 9:06
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


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


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Твой алгоритм верен, хотя и немного глуповат smile.gif... Только давай мы будем не прибавлять 100, а устанавливать в данный элемент значение MaxInt wink.gif. Если, конечно, ты уверен, что таких больших чисел введено не будет, и твой массив впоследствии не будет нужен. Определи количество элементов в массиве - этот показатель будет основой счетчика for.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
RaV
сообщение 27.05.2006 9:47
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


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

Сообщение отредактировано: RaV - 27.05.2006 9:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алексей_Рыженко
сообщение 27.05.2006 10:05
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Извиняюсь за тупой вопрос но я с этим ещё не сталкивался. Как присваивать MaxInt и надо ли её объявлять?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
RaV
сообщение 27.05.2006 10:10
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


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

Сообщение отредактировано: RaV - 27.05.2006 10:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алексей_Рыженко
сообщение 27.05.2006 10:20
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Понимаете, ребят. я присваиваю MaxInt элементу массива М М[Min], но почему-то
минимальный у меня всегда один и тот же. Что я не так делаю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zZz
сообщение 27.05.2006 10:21
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Код
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/насколько я понимаю, автору темы и нужен примерно такой алгоритм, так что вот...

Сообщение отредактировано: zZz - 27.05.2006 10:22
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
pascal65536
сообщение 27.05.2006 10:24
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 62
Пол: Мужской

Репутация: -  1  +


Прикольно, я в своё время до такого не додумался. Пришлось пузырьковую сортировку разбирать.
А парень сам почти до неё добрался.
Можно чуть усложнить, и будет почти как "пузырёк"
1. найти в массиве 1..n минимальный элемент.
2. поменять минимальный элемент с первым (это чтобы второй массив не заводить)
3. теперь "укоротить" массив на единицу и искать минимальный уже в диапазоне 2..n
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
RaV
сообщение 27.05.2006 10:25
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


Алексей_Рыженко, Покажи свой код
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алексей_Рыженко
сообщение 27.05.2006 10:36
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


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.

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

Сообщение отредактировано: volvo - 2.11.2006 17:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
RaV
сообщение 27.05.2006 10:57
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


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 байт ) Кол-во скачиваний: 356
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.05.2006 11:15
Сообщение #14


Гость






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 14:42
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Всё работает! Спасибо, ребята, выручили!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 12.08.2025 15:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"