
Вводится последовательность чисел. 0 - конец последовательности. НАйти 2 наименьших числа.
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
topoR |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите решить задачу
![]() Вводится последовательность чисел. 0 - конец последовательности. НАйти 2 наименьших числа. -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
В чем проблема? Изначально min_1, min_2 = максимально возможному значению, которое может быть введено... Если числа целые - то MaxInt, например...
А потом делаешь следующее: если очередное введенное с клавиатуры число (назовем его X) не 0, то сравниваешь его сначала с min_1 (это наименьшее из чисел), и если новое число строго меньше него, то min_2 := min_1;
min_1 := X;
Если же min_1 < X < min_2, то min_2 := X;
Внимание! Все эти сравнения производятся только, если X отличается от значений КАК min_1, ТАК и min_2 !!! Иначе ничего делать не надо, переходишь ко вводу следующего числа... Это алгоритм (сорри, если сумбурно, но я его составлял с готовой программы, поэтому...) Попробуй разобраться, в нем и хотя бы начни делать что-то... Не получится - приходи ![]() Сообщение отредактировано: volvo - |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Похоже в задании есть некоторая двусмысленность... Что есть 2 наименьших числа, например, в массиве
<2, 3, 6, 7, 2, 3> ? Это будут 2, 2 или 2, 3 ? Т.е., тебе надо найти 2 абсолютно минимальных числа, или 2 разных минимальных числа? Мой алгоритм - для нахождения 2-х разных... Чтобы найти 2 абсолютно минимальных - выкини из того, что я написал абзац со словом "Внимание!" |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Изначально min_1, min_2 = максимально возможному значению, которое может быть введено... Если числа целые - то MaxInt, например... volvo, а есть ли необходимость связываться с максимальным возможным значением? Иногда найти его не так просто.. Можно, мне кажется, просто в min_2 безусловно положить первое введенное. Если второе введенное меньше него, сделать переприсвоение (как описано), если нет - положить во второе. Далее по твоему алгоритму.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата Можно, мне кажется, просто в min_2 безусловно положить первое введенное. ![]() |
topoR |
![]()
Сообщение
#6
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Блин, люди, я в паскале человек относительно новый. У меня вопрос появился, как вводить последовательность чисел, (которая вдобавок оканчивается на 0), чтобы в последствии сравнивать числа с min_1 и min_2?..С помощью array ?!
Только не смейтесь ![]() Сообщение отредактировано: topoR - -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
![]() Да, я все это, конечно, понимаю.. Я бы не стал называть это узким местом.. Код, действительно, немного увеличится. Замедления можно избежать, если сделать заполнение первых двух отдельным блоком. Но мне кажется, оно того стОит.. Добавлено через 6 мин. как вводить последовательность чисел, чтобы в последствии сравнивать числа с min_1 и min_2?..С помощью array ?! Только не смейтесь Нет, вводи в цикле и сразу в этом же цикле делай сравнения. Типа так:
n:=0;
repeat
ReadLn(x);
if x<>0 do begin
Inc(n);
{тут сравнения и присвоения}
end
until x=0
Я тут ввел еще и счетчик введенных чисел - думаю, может пригодиться.. А чего смеяться? Все начинали.. Напиши, что у тебя получается.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
topoR |
![]()
Сообщение
#8
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
program unknown;
uses crt;
var min_1, min_2, n, x: integer;
begin
clrscr;
min_1 := 32767;
min_2 := 32767;
n:=0;
repeat
writeln ('Vvedite chislo');
readln (x);
if (x <> 0) then
Inc(n);
if (x < min_1) then
min_2 := min_1;
min_1 := x;
if (x > min_1) and (x < min_2) then
min_2 := x;
until x=0;
writeln ('Sredi vvedennih', n, 'chisel 2 naimenshih - eto chisla:');
writeln (min_1);
writeln (min_2);
readln;
end.
. Не работает по-моему ![]() -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Не работает по-моему ![]() Угу. Ты забыл расставить операторные скобки, begin и end. Без них после оператора IF выполняется (в случае выполнения условия) только один оператор. Короче, посмотри внимательно, что я добавил.. program Find2min;
uses crt;
var min_1, min_2, n, x: integer;
begin
clrscr;
min_1 := 32767;
min_2 := 32767;
n:=0;
repeat
writeln ('Vvedite chislo');
readln (x);
if (x <> 0) then begin
Inc(n);
if (x < min_1) then begin
min_2 := min_1;
min_1 := x
end;
if (x > min_1) and (x < min_2) then min_2 := x
end
until x=0;
writeln ('Sredi vvedennih', n, 'chisel 2 naimenshih - eto chisla:');
writeln (min_1);
writeln (min_2);
readln;
end.
Еще - добавь пару пробелов при выводе результата, а также подумай, что будет, если последовательность будет состоять только из одного числа, а может и совсем пустая (сразу ввели 0). Еще совет: обрати внимание на форматирование программного текста в моем варианте. Если усвоишь, тебе это поможет. Кстати, тут как раз про begin и end (и не только), то есть про твою ошибку.. Успехов! -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
topoR |
![]()
Сообщение
#10
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Программа работает, спасибо
![]() Сейчас подумаю над выходом из ситуации, когда почти сразу вводится ноль.. Сообщение отредактировано: topoR - -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
topoR |
![]() ![]()
Сообщение
#11
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот еще одна задачка.. Такого же типа.
Дана последовательность чисел, также заканчивающаяся на ноль. Определить, сколько раз в последовательности числа меняют свой знак. Вроде бы с помощью массива решается элементарно. Однако их запретили использовать .. Решил без них.. Боюсь, что заставят перерешивать всвязи с отдельным вводом первого числа и всей последовательности в целом. Кто чем поможет? ![]()
program n1;
uses crt;
var a,i,x,y : integer;
begin
clrscr;
writeln ('Vvedite pervoe 4islo');
readln (i);
repeat
writeln ('Vvedite sleduushee chislo');
readln (a);
if (a <> 0) then
begin
if (a*i < 0) then
begin
y:=y+1;
i:=a;
end;
end;
until a=0;
writeln ('Posledovatelnost menaet znak' ,y, 'raz');
readln;
end.
. -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
![]() ![]() |
![]() |
Текстовая версия | 15.04.2025 17:05 |