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

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

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

Writeln (‘ Введите имя файла’);

If Code <> 0 Then Begin

Write (‘Ошибка при открытии файла ‘,

2: Writeln (‘файл не найден’);

3: Writeln (‘путь к файлу не найден’);

4: Writeln (‘слишком много открытых файлов’);

Ошибка ввода/вывода на устройстве

5: Writeln (‘доступ закрыт’);

6: Writeln (‘нарушена информация в полях файла или системных областях’);

8: Writeln (‘недостаточно памяти’);

10: Writeln (‘несовместимые параметры окружения’);

11: Writeln (‘нераспознанный формат диска’);

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

Специальные операции

Эта группа операций предназначена для действий с элементами файловой системы ОС – каталогами и файлами. К ней относятся следующие процедуры:

· удаление файла на диске

· установка текущего каталога

ChDir;

· создание нового каталога

· удаление пустого подкаталога

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

Дата добавления: 2016-06-29 ; просмотров: 1803 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник: poznayka.org

8. Директивы компилятора и обработка ошибок ввода

Компилятор Паскаля – сложное приложение, имеющее множество настроек. При написании учебных программ большинство этих настроек не имеют значения, но некоторые из них окажутся нам полезны.

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

Читайте также:
Как обновить программу парус

Ошибка ввода вывода на устройстве — как исправить для HDD, флешки, SSD

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

Наиболее полезной для нас выглядит директива /, соответственно, выключающая и включающая автоматический контроль программой результатов операций ввода/вывода (в/в). К операциям в/в относятся, в числе прочего, ввод данных пользователем, вывод строки на принтер, открытие файла для получения или вывода данных и т.п.

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

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

if IoResult<>0 then begin

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

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

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

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

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

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

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

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

Источник: studfile.net

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

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

64270 / 47569 / 32739

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

Читайте также:
Coral системные требования программа

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

8276 / 4180 / 1595

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

64270 / 47569 / 32739

Лучший ответ

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

Решение

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

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.

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

8276 / 4180 / 1595

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

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

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

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.

Читайте также:
Dark souls 2 прекращена работа программы при запуске

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

Деление на 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: Программы и алгоритмы для начинающих

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

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

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

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

if
IoResult<>0 then begin ошибка!>

Источник: oshibkam.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru