1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Просто для полноты рассмотрения - с repeat/until тоже все прекрасно выходит:
b:=1;
k:= -1;
repeat
Inc(k);
b:= b*3until b>=n; { обрати внимание - тут нужно нестрогое неравенство! если, конечно, условие приведено верно.. }
Пусть автор темы не думает, что тут есть принципиальная разница.. ))
Но вообще, я не понимаю преподов, которые дают подобные задачи.. Заставлять студентов делать нерациональное решение - методологическая ошибка, я считаю. Задача решается без всяких циклов в одно касание:
k:= Trunc(ln(N-1)/ln(3));
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Это не препод, это самообучение (решил, вот, заняться программированием, да и мозг покачать). А строку к:=-1 сам хотел вставить, но мне показалось, что это попахивает подгонкой результата. Обратил внимание когда вы ответы публикуете. Реально в 4 или в 5 утра?
Running "c:\_\dropbox\pas\fp\fp120322_bars\fp120322_bars_lapp.exe " 4 k = 1 3^k = 3
Running "c:\_\dropbox\pas\fp\fp120322_bars\fp120322_bars_lapp.exe " 3 k = 0 3^k = 1
Running "c:\_\dropbox\pas\fp\fp120322_bars\fp120322_bars_lapp.exe " 2 k = 0 3^k = 1
Running "c:\_\dropbox\pas\fp\fp120322_bars\fp120322_bars_lapp.exe " 1 k = 0 3^k = 1
Все вроде в порядке, включая n=2. На последний не обращай внимания, это так, за компанию )). Или я что-то не понимаю?..
Цитата(Барс @ 23.03.2012 9:31)
Это не препод, это самообучение (решил, вот, заняться программированием, да и мозг покачать). А строку к:=-1 сам хотел вставить, но мне показалось, что это попахивает подгонкой результата.
Похвально, +1 )) Подгонка - это не свойство программы. Это способ сдать задачу. Если ты понимаешь, что делаешь и почему - это не подгонка, а решение.
Цитата
Обратил внимание когда вы ответы публикуете. Реально в 4 или в 5 утра?
Нет, не реально ). У меня в этот момент 5-6 вечера, самое время отдохнуть от работы )).
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
> Вывести наибольшее целое K, при котором выполняется неравенство 3^K < N, и само значение 3^K.
case N of0..3-1 : K := 0;
3..3*3-1 : K := 1;
3*3..3*3*3-1 : K := 2;
3*3*3..3*3*3*3-1 : K := 3;
3*3*3*3..3*3*3*3*3-1 : K := 4;
3*3*3*3*3..3*3*3*3*3*3-1 : K := 5;
3*3*3*3*3*3..3*3*3*3*3*3*3-1 : K := 6;
3*3*3*3*3*3*3..3*3*3*3*3*3*3*3-1 : K := 7;
3*3*3*3*3*3*3*3..3*3*3*3*3*3*3*3*3-1 : K := 8;
3*3*3*3*3*3*3*3*3..3*3*3*3*3*3*3*3*3*3-1 : K := 9;
end;
Работает для чисел до 65536, для турбопаскаля сгодится. Зато без вещественной математики!
Просто помню со школы, нам за это балл снижали. Считалось, что некорректно так делать.
За что "это"? Я все равно не могу взять в толк.. Чем 0 лучше, чем -1? Барс, я не поленюсь повторить: если ты понимаешь, чем вызвана необходимость сделать именно так, и уверен в правильности алгоритма для всего диапазона входных данных, то это не подгонка, а решение. Либо твой препод был неправ, либо он не совсем то имел в виду, как ты толкуешь. Инициализация значением -1 тут необходима, поскольку обязательно есть хотя бы один проход тела цикла. Если ты знаешь, что впереди опасный поворот, и заранее сбрасываешь скорость - это неправильно? надо каждый раз кувыркаться в кювет только потому, что реагировать надо только на то, что видишь?
Постарайся вникнуть. Не надо догм, нужна логика мышления.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
За "это" - это за присвоение начальным значениям (сумме, счётчику и т.д.) -1. А необходимость к:=-1 я понимал, просто школьная память помешала. Кстати, школу я закончил давненько, может это раньше преподы так требовали, а теперь иначе. Теперь не буду на это внимание обращать, буду делать как подсказывает логика.