Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 17.03.2017
Сообщений: 20
1

Выход из бесконечного цикла

21.03.2017, 20:52. Показов 3355. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сегодня как дурачок создаю сотую тему, но все же прошу помощи.
Есть программа, которая решает вот эту задачу .
Столкнулся с такой проблемой, что если число не подходит программе, а такие есть, то она переходит в бесконечный цикл, например при вводе числа 110. Мне нужна, чтобы при такой проблеме программа выводила любой текст и заканчивалась. Очень надеюсь на помощь.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var k,n,er,a:integer;
s,x,y1,e,b:real;
y,a1:string;
label 
proverka, vihod;
begin
read (y);
  n:=length(y)-1;
  for k:=1 to n do
  begin
    s:=10*10;   
  end;
  val(y,y1,er);
  x:=9*y1/(10-1/s);
  x:=int(x);
  e:=x;
  
  proverka:
  x:=e;
  for k:=1 to n+1 do // ПРОВЕРКА 1
        begin
            b:=b+x;
            str(x,a1);
            a:=Length(a1);
            Delete (a1,a,1);
            val(a1,x,er);
        end;
   
  if b<y1 then
  begin
    b:=0; 
    e:=e+1; 
    goto proverka; 
  end;
   if b>y1 then 
  begin 
    b:=0;
    e:=e-1; 
    goto proverka; 
  end;
  
   vihod:
   writeln (e);
   write ('Проверка: ',b);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2017, 20:52
Ответы с готовыми решениями:

Выход из цикла
Добрый вечер. Есть программка которая генерирует примеры, а пользователь должен дать правильный...

Выход из цикла по нажитию клавиши
Подскажите пожалуйста как сделать выход из цикла по нажатию клавиши, любой кроме цифр. Используя...

Исправить exit на формальный выход из цикла
Нужно исправить все exit на формальный выход из цикла, help :help: uses crt; type arr=array of...

Выход из бесконечного цикла
Здравствуйте Посмотрите вот такой интересный код s := 1; i := 1; repeat s := s/2; ...

5
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
21.03.2017, 22:17 2
Цитата Сообщение от paronroman Посмотреть сообщение
Pascal
9
10
11
12
for k:=1 to n do
begin
  s:=10*10; 
end;
а это зачем?
0
0 / 0 / 1
Регистрация: 17.03.2017
Сообщений: 20
21.03.2017, 22:21  [ТС] 3
Цитата Сообщение от Hitoku Посмотреть сообщение
а это зачем?
У меня формула
x=9*y1/10-1^n-1
Этим действием я возвожу 10 в нужную мне степень.
0
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
21.03.2017, 22:23 4
paronroman, нет, так вы n раз получаете 100
если уж на то пошло, то изначально s:=10, а в цикле s:=s*10;
0
0 / 0 / 1
Регистрация: 17.03.2017
Сообщений: 20
21.03.2017, 22:26  [ТС] 5
Цитата Сообщение от Hitoku Посмотреть сообщение
нет, так вы n раз получаете 100
если уж на то пошло, то изначально s:=10, а в цикле s:=s*10;
Ого, оказывает это вовсе бесполезно действие, как то я это упустил.
Я в любом случае округляю число, оно мне даже и не нужно получается. Упустим этот момент)
Проблема цикла от этого не уйдет.
0
Модератор
10013 / 5368 / 3340
Регистрация: 17.08.2012
Сообщений: 16,361
23.03.2017, 04:44 6
paronroman, что Вы замусориваете форум одной и той же задачкой?

И не постигаю, как так получилось, что Вы не сумели реализовать алгоритм, который предложил Вам jogano. Каким образом Вам вообще удалось организовать бесконечный цикл там, где имеет место предопределённый цикл? Зачем Вам преобразовывать число в строку?

И применяйте оператор goto только тогда, когда он действительно необходим. В данном случае, из-за него почти все беды.

Вот, набросал по-быстрому:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var x, y, i, k, xt, yt: integer;
    z: real;
begin
  repeat //ввод Y с проверкой
    write('Y > 0;  Y = ');
    readln(y)
  until y > 0;
  k := trunc(ln(y) / ln(10)); //k=n-1
  z := 9 / (10 - exp(-k * ln(10))); //z=9/(10-10^(1-n))
  x := 0; //пока полагаем, что X не существует
  for i := trunc(z * y) to trunc(z * (y + k)) do //от 9Y/(10-10^(1-n)) до 9(Y+n-1)/(10-10^(1-n))
    begin
      xt := i; //предполагаемый x (копируем, чтобы не трогать счётчик цикла)
      yt := 0; //предполагаемый y
      repeat //считаем, какой yt получается из данного xt
        yt := yt + xt;
        xt := xt div 10;
      until xt = 0;
      if y = yt //если предполагаемый y совпал с заданным,
        then begin //то
          x := i; //запоминаем X
          break //и досрочно выходим из цикла
        end
    end;
  if x > 0 //если X найден,
    then write('X = ', x) //то печатаем его значение
    else write('X doesn''t exist') //иначе печатаем, что X не существует
end.
Погонял маленько, считает верно.
0
23.03.2017, 04:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2017, 04:44
Помогаю со студенческими работами здесь

Алгоритм цикла. Рассчитать сумму бесконечного ряда
Помогите пожалуйста: Рассчитать сумму бесконечного ряда: 1+1/34+1/54+.... Суммирование...

Выход из вложенного цикла
Не получается продолжить поиск со следующей строки после нахождения первого отрицательного элемента...

Выход из цикла repeat и case
вот кусок проги в которой вычисляется сумма разность ,умножение чисел ,Под цифрами 1,2,3 в...

Используя оператор цикла с последующей условием, вычислить сумму бесконечного ряда
Всем привет. Помогите пожалуйста с заданием! Используя оператор цикла с последующей условием,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru