IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблема с проверкой в модуле...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


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

модуль:Прикрепленный файл  MIKHAL.PAS ( 1.23 килобайт ) Кол-во скачиваний: 447

прога: Прикрепленный файл  PROGRAM4.PAS ( 2.97 килобайт ) Кол-во скачиваний: 456
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:

			{$I-}
err:=main(filename,ret);
close (f); { <--- }
{$I+}
clrscr;

закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Цитата(volvo @ 3.03.2007 22:38) *

Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:

			{$I-}
err:=main(filename,ret);
close (f); { <--- }
{$I+}
clrscr;

закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...



т.е. в принципе загвоздка в том что нужно в модуле файл закрывать. так???

Добавлено через 3 мин.
кстати, если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
принципе загвоздка в том что нужно в модуле файл закрывать.
Да... Дело-то все в том, что в модуле ты работаешь с локально описанным файлом, который никак не связан с тем, который описан глобально в основной программе...
Цитата
если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Цитата(volvo @ 3.03.2007 23:12) *

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


это понятно. спасибо..
Цитата(volvo @ 3.03.2007 23:12) *

Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...



тогда еще вот вопрос:

вот текст..

program h09809;
uses crt;
var
f1:text;
str,name:string;
begin
clrscr;
repeat
writeln('‚ўҐ¤ЁвҐ Ё¬п д ©«  б ббл«ЄЁ¬Ё: ');
readln(name);
{$I-}
assign(f1,name);
reset(f1);
{$I+}
if ioresult<>0 then
begin
clrscr;
writeln('д ©« ­Ґ ­ ©¤Ґ­');
end;

until ioresult=0;
read(f1,str);
close(f1);
readln;
readln;
end.



здесь вроде должо все работать.. а ошибка все равно вылетает....

Сообщение отредактировано: priboltik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ты не учитываешь одну очень незначительную деталь:
Цитата(TP Help - IOResult)
I/O-checking must be off--{$I-}--to trap I/O errors using IOResult. If an I/O error occurs and I/O-checking is off, all subsequent I/O operations are ignored until a call is made to IOResult. A call to IOResult clears the internal error flag.
То есть здесь:

until ioresult=0; { <--- }

IOResult уже как раз = 0 (ты уже обращался один раз к IOResult, и его значение после обращения было очищено - сброшено в 0), и ты пытаешься читать из файла, которого нет... Решение:

repeat

writeln('file name: '); readln(name);
{$I-}
assign(f1,name); reset(f1);
{$I+}
IOR := ioresult;
if ior<>0 then begin
clrscr; writeln('file not found');
end;
writeln;

until ior=0;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Все понятно.. спасибо good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


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

прога:Прикрепленный файл  PROGRAM4.PAS ( 2.98 килобайт ) Кол-во скачиваний: 429

Модуль:Прикрепленный файл  MIKHAL.PAS ( 1.3 килобайт ) Кол-во скачиваний: 429
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Нет, так не пойдет... Ты укажи строки, в которых программа работает неверно, а то там у тебя черт ногу сломит - ничего не разберешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Цитата(volvo @ 4.03.2007 10:35) *

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




скорее всего где-то здесь
Cifr[i] := Cifr[i] + 1;


и наверное здесь:

if filesize(f)=0 then main:=-3 {pustoy fail}
else
begin
max:=cifr[0];
for i := 0 to 9 do
if Cifr[i] > max then begin max := Cifr[i];
Main := 0;
ret := max;
end;
if max=cifr[0] then main:=-4; {cifirki koroche net}


если честно, не очень понимаю, как это здесь делается.. и для чего вообще нужен массив Cifr ....препод написал, а доступно объяснить ему было не судьба...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата
вот толко при выводе тех строк, кот. входят в строку, выводится нули..
В приведенных тобой строках НИЧЕГО не выводится...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


Цитата(volvo @ 4.03.2007 11:35) *

В приведенных тобой строках НИЧЕГО не выводится...



в них не выводится.. в них считается и формируется массив..а выводится из него в главной программе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Да блин!!! ПОКАЖИ, ГДЕ?????

Твою программу же ЧИТАТЬ невозможно, неужели же ты этого не видишь??? mad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


кстати.. а если мы берем переменную прямо из модуля,ее не нужно ведь описывать в главной программе..????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Смотря где она описана в модуле...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Константин

Репутация: -  1  +


описана она в модуле как параметр в функции
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 6:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name