![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
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 - 12.04.2007 1:18 |
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 - 12.04.2007 2:06 -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
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 - 12.04.2007 3:07 -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
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.
. -------------------- Всё, что не убивает нас, - делает нас сильнее...
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:53 |