Не выполняется программа в паскале

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

Базовый класс исключений – Exception. Его потомки – классы исключений, имена которых начинаются с символа E, за которым следует описание исключения на английском языке.

В модуле SusUtils опредлено много исключений. Вот примеры:

  • EIntError – ошибка операции с целыми числами.
  • EZeroDivide – деление на ноль.
  • ERangeError – ошибка диапазона.
  • EIntOverflow – ошибка переполнения.
  • EMathError – математическая ошибка.

Для обработки исключений предусмотрены три инструкции:

  • инструкции Raise,
  • блоки try…except,
  • блоки try…finally.

Внимание . Эти инструкции доступны в режимах Delphi и ObjPas. В режиме Turbo Pascal они невозможны.

Инструкция Raise

Инструкция Raise запускает исключение, которое предварительно должно быть определено, как экземпляр класса исключений. Формат инструкции:

Установка среды программирования PascalABC.NET

При возникновении объявленного исключения инициализируется экземпляр класса этого исключения. Пример обработки деления на ноль, когда этому исключению дано уникальное имя:

Type EDivException = Class(Exception);

Function DoDiv (X,Y : Longint) : Integer;

Raise EDivException.Create (’Division by Zero would occur’);

Result := X Div Y;

Инструкция try…except

  • Выполняется секция try.
  • Если исключение не возникает, то инструкция завершается.
  • Если исключение возникает, то секция try завершается и выполняется обработчик возникшего исключения из секции except.

Формат обработчика исключений в секции except

do < Инструкция >; // Любая инструкция, кроме goto

Пример обработки деления на ноль (использованы средства из предыдущего примера):

On EDivException do Z := 0;

Инструкция try…finally

В ней при возникновении исключения секция try завершается, исключение специально не обрабатывается, но всегда исполняется секция finally. Формат инструкции:

  • Выполняется группа try.
  • Если исключение возникло, то все инструкции, следующие после инструкции, вызвавшей исключение, пропускаются, и управление передается первой инструкция секции finally.
Читайте также:
Как удалить программу xp с компьютера

Если исключений не возникло, то секция finally все равно выполняется.

Источник: pascal-cod.ru

Проблема с вводом (Паскаль)

Здравствуйте. У меня возникла проблема с чтением данных с клавиатуры.
Проблема неработающего readln(x), возникает если вызвать процедуру LoadLibrary из модуля (readln вызываю из самой программы).
Вот функция:

procedure LoadLibrary(var lib: tLibrary; filename: string);
var libfile: text;

Здесь я открываю файл, задаю его для чтения, читаю до конца и закрываю.

Паскаль с нуля [ч4]. Условные операторы


Процедура работает нормально: с диска данные читает.
После этого чтение с клавиатуры перестает работать.
Пробовал переназначить клаву на новую файловую переменную
assign(f,»);
reset(f);
readln(f,x) — все равно не работает.
Если функцию LoadLibrary не вызывать readln работает. По-моему, все сводится к тому что прога не может зацепиться к клаве
и пытается читать данные из файла который я уже дочитал до конца.

С Паскалем работаю по необходимости (вообще пишу на С++), поэтому прошу помочь.

#1
14:34, 10 июля 2006

В приведенном тексте явных проблем не видно. А что значит «не работает readln»? Программа останавливается и ждет ввода? Или выдает ошибку? Или проскакивает readln, забивая переменные каким-то мусором?

И какой компилятор?

#2
14:39, 10 июля 2006

имхо, память где-нить портишь. попробуй поискать баг в работе с деревом

#3
15:13, 10 июля 2006

Ptica
Вместо выполнения оператора readln программа вылетает вместе с компилятором Турбо Паскаль 7.0

#4
16:12, 10 июля 2006

А если сократить ReadLibrary до такого состояния?

procedure ReadLibrary(var lib: tLibrary; var libfile: text); var buffer: char; begin while not eof(libfile) do begin read(libfile,buffer); while not eof(libfile) and (buffer<>’~’) do begin read(libfile,buffer) end; end end;

Читайте также:
Как продавать свои программы через интернет

Если в таком виде она перестанет влиять на работу ReadLn, тогда, скорее всего, прав CD:
>попробуй поискать баг в работе с деревом

#5
16:21, 10 июля 2006

Ptica
Да так и сделал. Прога заработала.
Спасибо CD и спасибо Ptica!

Я скорее верил в мистику (или тупость Паскаля), чем в собственную некомпетентность (в коде в одной из функций сменил = на <> и все заработало).
Хотя странно что неправильное выделение памяти привело к таким последствиям.

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

Процедура Assign: две частые нетривиальные ошибки

Это самая известная ошибка, которую рано или поздно встречает любой начинающий программист. Взгляните на картинку:

Впервые встретившись с этой ошибкой, можно прийти в недоумение. Файл, из которого мы собираемся читать, на месте. Он доступен и нормально открывается текстовым редактором. Тем не менее, что-то не так. На самом деле, все просто: во время набора текста программы вместо латинской «ЦЭ» была напечатана русская «ЭС». К счастью, такая ошибка единственная в своем роде.

Раскладки «qwerty» и «йцукен» имеют совпадение только в одном месте.

2. Ошибка времени выполнения: «Файл не найден».

Еще одна «механическая» ошибка, связанная с использованием процедуры Assign. В принципе, история похожа на рассказанную выше. Автор программы видит, что файл не найден, идет в папку «123» и не понимает: «Как не найден? Вот же он!»

Все просто: вместо нужного вам текстового файла «55.txt» вы создали файл с именем «55.txt.txt» . Этой ошибки не будет возникать, если вы для себя четко раз и навсегда уясните, что такое расширение в имени файла. И вообще, не пользуйтесь проводником в Windows, а работайте в менеджере файлов, например, в Total Commander.

Читайте также:
Очистка реестра от удаленных программ

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

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