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

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

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

> Последовательность чисел, 2 наименьших числа
topoR
сообщение 12.04.2007 0:58
Сообщение #1





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

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


Помогите решить задачу smile.gif

Вводится последовательность чисел. 0 - конец последовательности. НАйти 2 наименьших числа.


--------------------
Всё, что не убивает нас, - делает нас сильнее...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
volvo
сообщение 12.04.2007 1:17
Сообщение #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 !!! Иначе ничего делать не надо, переходишь ко вводу следующего числа...

Это алгоритм (сорри, если сумбурно, но я его составлял с готовой программы, поэтому...) Попробуй разобраться, в нем и хотя бы начни делать что-то... Не получится - приходи smile.gif

Сообщение отредактировано: volvo - 12.04.2007 1:18
 К началу страницы 
+ Ответить 
volvo
сообщение 12.04.2007 1:51
Сообщение #3


Гость






Похоже в задании есть некоторая двусмысленность... Что есть 2 наименьших числа, например, в массиве
<2, 3, 6, 7, 2, 3>
?

Это будут 2, 2 или 2, 3 ? Т.е., тебе надо найти 2 абсолютно минимальных числа, или 2 разных минимальных числа? Мой алгоритм - для нахождения 2-х разных... Чтобы найти 2 абсолютно минимальных - выкини из того, что я написал абзац со словом "Внимание!"
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2007 1:52
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 12.04.2007 2:17) *

Изначально min_1, min_2 = максимально возможному значению, которое может быть введено... Если числа целые - то MaxInt, например...

volvo, а есть ли необходимость связываться с максимальным возможным значением? Иногда найти его не так просто..
Можно, мне кажется, просто в min_2 безусловно положить первое введенное. Если второе введенное меньше него, сделать переприсвоение (как описано), если нет - положить во второе. Далее по твоему алгоритму..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.04.2007 1:55
Сообщение #5


Гость






Цитата
Можно, мне кажется, просто в min_2 безусловно положить первое введенное.
smile.gif Догадайся, где здесь узкое место? Для этого надо вынести ввод по крайней мере первого числа из цикла, а это значит, дублирование кода... Или усложнять программу проверками, какое именно число введено, для чего придется вводить какой-нибудь счетчик...
 К началу страницы 
+ Ответить 
topoR
сообщение 12.04.2007 1:57
Сообщение #6





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

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


Блин, люди, я в паскале человек относительно новый. У меня вопрос появился, как вводить последовательность чисел, (которая вдобавок оканчивается на 0), чтобы в последствии сравнивать числа с min_1 и min_2?..С помощью array ?!
Только не смейтесь smile.gif Завтра лабу надо сдавать..

Сообщение отредактировано: topoR - 12.04.2007 2:06


--------------------
Всё, что не убивает нас, - делает нас сильнее...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2007 2:00
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 12.04.2007 2:55) *

smile.gif Догадайся, где здесь узкое место? Для этого надо вынести ввод по крайней мере первого числа из цикла, а это значит, дублирование кода... Или усложнять программу проверками, какое именно число введено, для чего придется вводить какой-нибудь счетчик...

Да, я все это, конечно, понимаю.. Я бы не стал называть это узким местом.. Код, действительно, немного увеличится. Замедления можно избежать, если сделать заполнение первых двух отдельным блоком. Но мне кажется, оно того стОит..

Добавлено через 6 мин.
Цитата(topoR @ 12.04.2007 2:57) *

как вводить последовательность чисел, чтобы в последствии сравнивать числа с min_1 и min_2?..С помощью array ?!
Только не смейтесь

Нет, вводи в цикле и сразу в этом же цикле делай сравнения. Типа так:


n:=0;
repeat
ReadLn(x);
if x<>0 do begin
Inc(n);
{тут сравнения и присвоения}
end
until x=0

Я тут ввел еще и счетчик введенных чисел - думаю, может пригодиться..

А чего смеяться? Все начинали..
Напиши, что у тебя получается..



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
topoR
сообщение 12.04.2007 2:22
Сообщение #8





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

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


 

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.



.

Не работает по-моему sad.gif(


--------------------
Всё, что не убивает нас, - делает нас сильнее...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2007 2:53
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(topoR @ 12.04.2007 3:22) *

Не работает по-моему sad.gif(

Угу.
Ты забыл расставить операторные скобки, 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 (и не только), то есть про твою ошибку..
Успехов!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
topoR
сообщение 12.04.2007 3:02
Сообщение #10





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

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


Программа работает, спасибо smile.gif Ошибку полностью осознал..
Сейчас подумаю над выходом из ситуации, когда почти сразу вводится ноль..

Сообщение отредактировано: topoR - 12.04.2007 3:07


--------------------
Всё, что не убивает нас, - делает нас сильнее...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
topoR
сообщение 12.04.2007 14:12
Сообщение #11





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

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


Вот еще одна задачка.. Такого же типа.

Дана последовательность чисел, также заканчивающаяся на ноль. Определить, сколько раз в последовательности числа меняют свой знак.


Вроде бы с помощью массива решается элементарно. Однако их запретили использовать ..

Решил без них.. Боюсь, что заставят перерешивать всвязи с отдельным вводом первого числа и всей последовательности в целом. Кто чем поможет? smile.gif

 
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.


.




--------------------
Всё, что не убивает нас, - делает нас сильнее...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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