Меню

Ошибка ввода программа завершена program1 pas строка 6

Midass

0 / 0 / 0

Регистрация: 10.09.2015

Сообщений: 34

1

Ошибка ввода — программа завершена

15.09.2015, 19:58. Показов 4790. Ответов 6

Метки нет (Все метки)


Пишет: »*Ошибка ввода. Программа завершена (Program3.pas, строка 6)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program primer;
var
  y,x:real;
begin
  writeln('Введите число x');
  readln(x);
   if (x>-5) or (x<>0) then
      begin
    y:=1/x;
    writeln(' x=',x,' y=',y);
      end
         else
    if (x<-10) then
       begin
     y:=sqr(x);
     writeln(' x=',x,' y=',y);
       end
          else begin y:=y+1;
     writeln(' x=',x,' y=',y); end
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



ФедосеевПавел

Модератор

Эксперт по электронике

8276 / 4180 / 1595

Регистрация: 01.02.2015

Сообщений: 12,994

Записей в блоге: 3

15.09.2015, 21:25

2

Ваш отформатированный код

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
program primer;
 
var
  y, x: real;
begin
  writeln('Введите число x');
  readln(x);
  if (x > -5) or (x <> 0) then
  begin
    y := 1 / x;
    writeln(' x=', x, ' y=', y);
  end
  else
  if (x < -10) then
  begin
    y := sqr(x);
    writeln(' x=', x, ' y=', y);
  end
  else
  begin
    y := y + 1;
    writeln(' x=', x, ' y=', y);
  end;
end.

Очевидно, что будут выполнятся только ветка » if (x > -5) or (x <> 0) then».
А сообщения «»*Ошибка ввода. Программа завершена (Program3.pas, строка 6)» — не было.
Что вы вводите?



1



Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

15.09.2015, 21:30

3

Цитата
Сообщение от ФедосеевПавел
Посмотреть сообщение

Что вы вводите?

Нужно условие задачи глянуть, тут лажа написана…



1



0 / 0 / 0

Регистрация: 10.09.2015

Сообщений: 34

15.09.2015, 21:41

 [ТС]

4

Вот условие:

Виды функций:

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
Y=begin{cases}frac1X&text{, if }x>-5, xneq 0\ X^2&text{, if }x<-10\ sqrt{|X|+1}&text{, otherwise}end{cases}<br />

Исходные данные:

X=-18.76; X=-3.57; X=-7.15.



0



Модератор

Эксперт по электронике

8276 / 4180 / 1595

Регистрация: 01.02.2015

Сообщений: 12,994

Записей в блоге: 3

15.09.2015, 21:50

5

if (x > -5)

or

and (x <> 0) then



1



Puporev

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

15.09.2015, 21:50

6

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Если как написано на картинке, то так.

Pascal
1
2
3
4
5
6
7
8
9
10
11
function y(x:real):real;
begin
if x<-10 then y:=x*x
else if(x>-5)and(x<>0)then y:=1/x
else y:=sqrt(abs(x)+1);
end;
begin
writeln('При х=-18.75 y=',y(-18.75):0:2);
writeln('При х=-3.57 y=',y(-3.57):0:2);
writeln('При х=-7.15 y=',y(-7.15):0:2);
end.



1



Модератор

Эксперт по электронике

8276 / 4180 / 1595

Регистрация: 01.02.2015

Сообщений: 12,994

Записей в блоге: 3

15.09.2015, 21:51

7

И ещё — в ветках if достаточно вычислять. Вывод writeln — можно сделать после вычисления перед последним end. Как это показано у Puporev.



1



Компилятор Паскаля – сложное приложение,
имеющее множество настроек. При написании
учебных программ большинство этих
настроек не имеют значения, но некоторые
из них окажутся нам полезны. Для управления
компилятором существует 2 основных
возможности: настройка режимов работы
с помощью верхнего меню OptionsоболочкиTurboPascalи настройка конкретной программы с
помощьюдиректив компилятора,
которую мы кратко рассмотрим. В общем
виде директива компилятора представляет
собой конструкцию вида{$X+}или{$X-},гдеX– латинская буква. Вариант со знаком
«+»
включает некоторый режим работы
компилятора (например, строгий контроль
программой соответствия типов данных,
вывод системных диагностических
сообщений и т.д.), а вариант со знаком
«-»
выключает его. Расположение директив,
в общем, произвольно, однако, директивы,
влияющие на всю программу, принято
располагать в самом начале файла с
исходным текстом. Фигурные скобки
комментария{
… }необходимы, чтобы скрыть
действие директив от старых версий
компилятора, которые не умели их
распознавать.

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

Наиболее полезной для нас выглядит
директива {$I-}/{$I+},
соответственно, выключающая и включающая
автоматический контроль программой
результатов операций ввода/вывода
(в/в). К операциям в/в относятся, в числе
прочего, ввод данных пользователем,
вывод строки на принтер, открытие файла
для получения или вывода данных и т.п.
Понятно, что даже несложная учебная
программа выглядит лучше, если она умеет
реагировать на неправильные действия
пользователя или возникающие ошибки
не просто выводом маловразумительного
системного сообщения на английском
языке, а доступным неискушенному
пользователю текстом. По умолчанию
контроль в/в включен и системные сообщения
об ошибках генерируются автоматически.
Все они кратко приведены в Приложении
3. Для замены системной диагностики
своей собственной следует, во-первых,
отключить директиву контроля оператором{$I-},
а во-вторых, сразу же после оператора,
который мог породить ошибку, проверить
значение, возвращаемое системной
функциейIoResult.
Эта функция возвращаетноль, если
последняя операция в/в прошлауспешно,
в противном случае возвращается ненулевое
значение. После завершения «критического»
оператора директиву следует включить
снова, чтобы не создавать потенциально
опасных ситуаций в коде, который будет
писаться далее! Приведем один пример,
написав «расширенную» программу
решения квадратного уравнения, корректно
реагирующую на возникающие ошибки:

uses printer;

var a,b,c,d,x1,x2:real;

begin

writeln;

writeln (‘Введите 3
вещественных числа:’);

{$I-} read
(a,b,c); {$I+}

if
IoResult<>0 then begin {Возникла
ошибка!}

Writeln (‘Вы не ввели
3 числа, это что-то другое!’);

Reset (input); {очищаем
буфер клавиатуры перед ожиданием

нажатия Enter}

Readln;

Halt; {а этим оператором
можно аварийно завершить программу!}

end;

d:=sqr(b)-4*a*c;

if d<0 then begin

Writeln (‘Ошибка при
вычислении корней — дискриминант<0’);

Reset
(input);

Readln;

Halt;

end;

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

{$I-}

writeln (lst,’x1=’,x1:8:2,’
x2=’,x2:8:2);

{$I+}

if IoResult<>0 then
Writeln (‘Не удалось вывести на принтер’)

else Writeln (‘Результаты
напечатаны’);

Reset (input); {Перед
Readln
очистили стандартный поток ввода}

Readln;

Halt;

end.

Специальной директивы для контроля
математических ошибок в Паскале не
предусмотрено, но это почти всегда можно
сделать обычными проверками корректности
данных. Обратите внимание на альтернативное
решение проблемы «двух readln»
в этом коде, а также на новый операторHaltи способ
контроля того, удалось ли вывести строку
на принтер.

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

Для работы с вещественными числами с
двойной точностью (тип double)
может также понадобиться указать перед
программой директиву{$N+},
позволяющую сгенерировать код для
аппаратной обработки таких чисел.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Всего ответов: 2

Другие вопросы по: Информатика

Математика

Опубликовано: 27.02.2019 16:20

Ответов: 2

Алгебра

Опубликовано: 28.02.2019 09:00

Ответов: 3

Информатика

Опубликовано: 01.03.2019 15:30

Ответов: 1

Математика

Опубликовано: 06.03.2019 17:30

Ответов: 1

Математика

Опубликовано: 06.03.2019 21:00

Ответов: 2

Математика

Опубликовано: 07.03.2019 19:50

Ответов: 3

Популярные вопросы

Английский язык

Опубликовано: 27.02.2019 12:50

Ответов: 2

Геометрия

Опубликовано: 27.02.2019 20:20

Ответов: 2

Обществознание

Опубликовано: 01.03.2019 00:00

Ответов: 3

Математика

Опубликовано: 01.03.2019 12:40

Ответов: 2

Алгебра

Опубликовано: 01.03.2019 22:00

Ответов: 1

Английский язык

Опубликовано: 02.03.2019 22:00

Ответов: 2

Математика

Опубликовано: 03.03.2019 09:20

Ответов: 1

Русский язык

Опубликовано: 03.03.2019 13:40

Ответов: 2

Математика

Опубликовано: 03.03.2019 14:00

Ответов: 3

Математика

Опубликовано: 03.03.2019 16:40

Ответов: 2

Предыдущий раздел:

Следующий раздел:

1.6. Ввод/вывод в текстовом режиме

Приведенная в предыдущем разделе программа запишет в некоторую область памяти число 2, однако внешне это никак не проявится. Нормальная программа должна уметь получать информацию от пользователя и сообщать ему результаты своей работы.

В простейшем случае вывод информации осуществляется процедурами write и writeln. В обоих случаях выводится текст или значения переменных. Отличие этих двух процедур в том, что последовательные вызовы write будут печатать информацию в одной строке, а writeln после каждого вызова переводит курсор на следующую строку. Примеры вызова процедур вывода:

writeln('Hello'); 

Печатается слово “Hello”.

writeln(x); 

Напечатается значение переменной x.

x:=2;
writeln('x = ', x);

В одну строчку напечатается строка «x = » и значение переменной x, то есть в результате будет напечатано «x = 2».

x:=2;
y:=3;
writeln(x, y);

В одну строчку напечатаются значения переменных x и y, то есть «23».

writeln(x, ' ', y);

Между значениями x и y будет располагаться пробел.

writeln(x);
writeln(y);

Значения x и y будут напечатаны на разных строках.

writeln(2*x+y);

Будет напечатано значение выражения 2*x+y.

writeln;

Вызов writeln без параметров приводит к переходу на новую строку. Несколько таких вызовов подряд вставят в выводимый текст несколько пустых строк.

Общее правило таково: write и writeln могут печатать значения переменных и произвольные текстовые строки. При этом текстовые строки должны быть взяты в кавычки. Одной процедурой можно вывести несколько значений переменных и строк текста, перечислив выводимые элементы через запятую.

Ввод информации осуществляется с помощью процедуры

readln(<список переменных>);

которая позволяет ввести с клавиатуры значения нескольких переменных. Например:

readln(x);

Выполнение программы приостановится, пока пользователь не введет значения переменной x и не нажмет Enter.

readln(x, y, z);

Программа ожидает ввода значений трех переменных. После каждого ввода следует жать Enter.

write('x = '); readln(x);

Курсор будет мигать не на пустой строке, а на строке содержащей приглашение вида «x = ».

readln;

В отсутствии параметров процедура просто приостанавливает выполнение программы до нажатия пользователем клвиши Enter.

Используем наши новые знания, написав программу, запрашивающую у пользователя два числа и печатающую их сумму.

program Summa;
var
  x, y: integer;
begin
  write('x = ');  {Вывод текста 'x = '}
  readln(x);	  {Ввод значения переменной x пользователем программы}
  write('y = ');  {Вывод текста 'y = '}
  readln(y);	  {Ввод значения переменной y пользователем программы}
  writeln('Summa = ', x+y);  {Печать результата}
end.

Следующий раздел:

Предыдущий раздел:

Добавить комментарий

Неописанная переменная

begin
  S := 1; // Неизвестное имя S
end.

Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).

Отсутствующая ;

begin
  var S: integer 
  S := 1;         // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка!
end.
begin
  var S := 1 
  S := S + 1  // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end.
end.

Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.

Несовместимость типов при присваивании

begin
  var S: integer := 1.3; // Нельзя преобразовать тип real к integer
end.

Безболезненно можно присваивать только данные одного типа. Если данные — разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ — в строку. Обратные преобразования не допускаются.

Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:

begin
  var S := 1.3; // Тип real будет выведен компилятором автоматически
end.

Отсутствие закрывающего апострофа литеральной строки

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа
end.

Закрыть апостроф надо на той же строке, где расположен открывающий апостроф

Ошибки расстановки запятых и апострофов при выводе строк и выражений

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов
end.

Слишком много запятых и апострофов рядом, потому начинающие часто путаются 🙂
Надо уяснить правила:

  • запятые разделяют разные элементы вывода
  • все, что находится в апострофах, будет выведено на экран без изменений

Ошибка ввода

begin
  var x: integer;
  read(x); // введите блаблабла и посмотрите, что получится
end.

Это — ошибка во время выполнения. Программа пытается преобразовать введенную строку в число, не может это сделать и завершается с ошибкой.

Аналогичный фрагмент в более современном и предпочтительном синтаксисе:

begin
  var x := ReadInteger;
end.

Ошибка неинициализированной переменной

begin
  var x: integer;
  // Забыли инициализировать или ввести x
  var r := x * x;  // r получает тип integer
  writeln('Квадрат числа ', x, ' = ', r);
end.

Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.

Деление на 0

begin
  var x := 0;
  var c := 666 div x; // Здесь происходит деление на 0
end.

Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.

Корень из отрицательного числа

begin
  writeln(sqrt(-1)); // Корень из отрицательного числа 
end.

В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка ввода вывода на устройстве sd карта как исправить
  • Ошибка ввода вывода 0х000009с