Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2016, 15:58   #1
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию Баг? в Pascal ABC.Net

Почему не продолжает программу если ввести где надо hyp, число, yes? Просто выбрасывает!


Код:
program graphsolver;



var
  
  k: real;
  
  l: real;
  q:string;
  
  
  g: string;
  
  f: string;
  
  h: string;


procedure lincheck(k, l: real);
begin
  write('k=');
  readln(k);
  write('l=');
  readln(l);
  if k > 0
    Then
    writeln('Функция возрастающая')
  Else
    writeln('Функция убывающая');
  if l = 0
    Then
    writeln('График проходит через начало координат')
  Else
    writeln('График пересекает ось y в точке (0;', l:0:0, ')');
end;


procedure lincalc(k, l: real; f: String);

var
  x, y: real;
begin
  writeln('Найти х или у?');
  readln(f);
  if f = 'x'
    Then
    begin
      write('y=');
      readln(y);
      x := (l - y) / k;
      writeln('x=', x:0:0)
    end;
  if f = 'y'
    Then
    begin
      Write('x=');
      readln(x);
      y := k * x + l;
      writeln('y=', y:0:0)
    end;
      end;
  

procedure hypcheck(k: real);
  begin
    write('k=');
    read(k);
    if k < 0
      Then writeln('Функция убывающая')
    Else
      begin
        writeln('Функция возрастающая');
      end;
    if k > 0
      Then
      begin
        writeln(



                 'График лежит в I и III координатных четвертях'
        )
      end
    Else
      begin
        writeln(



                 'График лежит во II и IV координатных четвертях'
        )

      end;
end;
    

procedure hypcalc(k: real; f: String);

    var
  x, y: real;
    begin
      writeln('Найти х или у?');
      read(f);
      if f = 'x'
        Then
        begin
          write('y=');
          readln(y);
          x := k / y;
          writeln('x=', x:0:0)
        end;
      if f = 'y'
        Then
        begin
          Write('x=');
          readln(x);
          y := k / x;
          writeln('y=', y:0:0)
        end;
end;
      

begin
        writeln('Выберите функцию');
        writeln('lin-Линейная функция (y=kx+l)');
        writeln('hyp-Гипербола (y=k/x)');
        readln(g);
        if g = 'lin'
          Then
          begin
            lincheck(k, l);
            writeln('Рассчитать?');
            readln(h);
            if h = 'yes'
              Then
              lincalc(k, l, f);
          end
        else if g = 'hyp'
          Then
          begin
            hypcheck(k);
            writeln('Рассчитать?');
            readln(h);
            readln(q);
            if h = 'yes'
              Then
              hypcalc(k, f);


          end;
      end.
lfybbk вне форума Ответить с цитированием
Старый 10.05.2016, 16:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

для чего ДВАЖДЫ читаете значение?
Цитата:
Код:
    writeln('Рассчитать?');
    readln(h);
    readln(q);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.05.2016, 16:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

чуть-чуть "причесал" код.
получилось такое:
program graphsolver;


Код:
procedure lincheck(var k, l: real);
begin
  write('k=');
  readln(k);
  write('l=');
  readln(l);
  if k > 0
    Then
    writeln('Функция возрастающая')
  Else
    writeln('Функция убывающая');
  if l = 0
    Then
    writeln('График проходит через начало координат')
  Else
    writeln('График пересекает ось y в точке (0;', l:0:0, ')');
end;


procedure lincalc(k, l: real);
var
  x, y: real;
  f: String;
begin
  writeln('Найти х или у?');
  readln(f);
  if f = 'x'
    Then
  begin
    write('y=');
    readln(y);
    x := (l - y) / k;
    writeln('x=', x:0:0)
  end;
  if f = 'y'
    Then
  begin
    Write('x=');
    readln(x);
    y := k * x + l;
    writeln('y=', y:0:0)
  end;
end;


procedure hypcheck(var k: real);
begin
  write('k=');
  readln(k);
  if k < 0 
    Then writeln('Функция убывающая')
    Else  writeln('Функция возрастающая');
  if k > 0 
    Then writeln('График лежит в I и III координатных четвертях')
    Else writeln('График лежит во II и IV координатных четвертях')
end;


procedure hypcalc(k: real);
var
  x, y: real;
  f: String;
begin
  repeat
    writeln('Найти х или у?');
    readln(f);
  until (f='x') or (f='y');
  if f = 'x' Then
  begin
    write('Введите y=');
    readln(y);
    x := k / y;
    writeln('x=', x:0:0)
  end;
  if f = 'y' Then
  begin
    Write('Введите x=');
    readln(x);
    y := k / x;
    writeln('y=', y:0:0)
  end;
end;

var
  k: real;
  l: real;
  g: string;
  f: string;
  h: string;

begin
  writeln('Выберите функцию');
  writeln('lin-Линейная функция (y=kx+l)');
  writeln('hyp-Гипербола (y=k/x)');
  readln(g);
  if g = 'lin'  Then
  begin
    lincheck(k, l);
    writeln('Рассчитать?');
    readln(h);
    if h = 'yes' Then lincalc(k, l);
  end
  else 
  if g = 'hyp' Then
  begin
    hypcheck(k);
    writeln('Рассчитать?');
    readln(h);
    if h = 'yes' Then hypcalc(k);
  end
  else WriteLn('Ошибка! Введено неизвестное значение "',g,'"');
  WriteLn;
  Write('Нажмите Enter для завершения.');
  Readln
end.

Последний раз редактировалось Serge_Bliznykov; 10.05.2016 в 16:16.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2016, 15:31   #4
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
для чего ДВАЖДЫ читаете значение?
По другому не работает - программа останавливается перед запросом. А так запрашивает и останавливается после запроса
lfybbk вне форума Ответить с цитированием
Старый 13.05.2016, 15:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Вы выложенный мной выше код попробовали? Там в дублировании чтения необходимости не возникает.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2016, 19:14   #6
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы выложенный мной выше код попробовали? Там в дублировании чтения необходимости не возникает.
Использовал. Спасибо, все работает
lfybbk вне форума Ответить с цитированием
Старый 13.05.2016, 19:17   #7
lfybbk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 10
По умолчанию

разве что не выдает вот эту строку:
Цитата:
else WriteLn('Ошибка! Введено неизвестное значение "',g,'"');
Он ее пропускает и переходит сразу к этой:
Цитата:
Write('Нажмите Enter для завершения.');
lfybbk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABC.NET gogomon93 Помощь студентам 4 01.12.2013 17:56
Pascal ABC Net sarkisova_elena Паскаль, Turbo Pascal, PascalABC.NET 2 07.02.2012 00:40
Pascal ABC.NET BuTaJI Помощь студентам 1 26.04.2011 20:10
Pascal ABC net DiLLe Паскаль, Turbo Pascal, PascalABC.NET 1 08.06.2010 23:20
Pascal ABC .NET no4_sniper Паскаль, Turbo Pascal, PascalABC.NET 0 17.10.2009 00:21