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

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

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

 
 Ответить  Открыть новую тему 
> прога не работает
art88
сообщение 18.10.2005 20:24
Сообщение #1


Новичок
*

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

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


Люди у меня есть задача и даже прогу, которая решает эту задачу я написал но она(прога) не тработает.
ПЛЗ. пораскиньте, кто чем может.
----------------------------------------------
Задача даны числа k, l, m, выяснить, можно ли любое число преобразовать в единицу за m раз следующим образом
если число(n) чётно, то подельть его на два,
если нет, то умножить его на три и прибавить единицу.
----------------------------------------------
Прога виснет при некоторых значениях к, l, m.(см diapazon.pas)

Сообщение отредактировано: art88 - 18.10.2005 20:25


Прикрепленные файлы
Прикрепленный файл  DIAPAZON.PAS ( 681 байт ) Кол-во скачиваний: 155
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.10.2005 21:38
Сообщение #2


Гость






art88,
Цитата
Прога виснет при некоторых значениях
покажи, при каких именно значениях у тебя виснет программа.

И заодно объясни, что такое K и L?
 К началу страницы 
+ Ответить 
Atos
сообщение 19.10.2005 5:13
Сообщение #3


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


Программа виснет, потому что строчка ok1:=false может не выполняться, и тогда цикл while (n <= l) and ok1 будет крутиться вечно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
art88
сообщение 19.10.2005 17:13
Сообщение #4


Новичок
*

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

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


Цитата(volvo @ 18.10.2005 21:38)
art88,
покажи, при каких именно значениях у тебя виснет программа.

И заодно объясни, что такое K и L?


k и l задают интервал, в котором изменяется n
прога не работает например при k=1 l=3 n=10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.10.2005 17:28
Сообщение #5


Гость






У тебя же программа при этих значениях крутится с одинаковыми числами (бесконечный цикл). Вот так хотя бы сделай:
program diapazon;
var
k, l, m, n : integer;
ok1, ok2 : Boolean;
i, j : integer;
begin
writeln('...:::Diapazon:::...');
{ write('k='); readln(k);
write('l='); readln(l);
write('m='); readln(m); }
k := 1;
l := 3;
m := 10;

i:=0;
n:=k-1;
ok1:=true;
ok2:=false;
while (n <= l) and ok1 do begin
n := k + 1; inc(k); { <-- Это кто будет делать? }

{ Для проверки: }
writeln('k = ', k, ' n = ', n);

while not ok2 do begin

inc(i);

if odd(n) then n := succ(3 * n)
else n := n div 2;

ok2 := (n = 1);
end;

ok1 := (i <= m);
end;

if ok1 then writeln('yes ', i)
else writeln('no ', i);
readln;
end.
 К началу страницы 
+ Ответить 
art88
сообщение 22.10.2005 12:05
Сообщение #6


Новичок
*

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

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


volovo, твой вариант программы работает не правильно, если мы вводим к=1, l=3 и m=6, то программа напишет 'yes 1' , хотя на самом деле число 3, преобразуется в единицу, указанным в задаче способом за семь раз (3, 10, 5, 16, 8, 4, 2, 1).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.10.2005 12:14
Сообщение #7


Гость






art88, ты меня конечно извини, но это ТВОЙ вариант программы работает неправильно, я просто вывел его из "вечного цикла", ничего при этом не меняя в логике !!!

На самом деле, вот это:
      i := 0; ok2 := false; { <-- Нужно делать именно здесь !!! }
{ Перед самым циклом, а не где-то в другом месте. Тогда все работает... }
while not ok2 do begin

 К началу страницы 
+ Ответить 

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

 



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