Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для SashaRasha
91 / 47 / 8
Регистрация: 08.10.2008
Сообщений: 445

Выкидывает из работающей программы

11.02.2014, 20:01. Показов 1322. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пишу сюда т.к. не знаю какие разделы могут подойти для моей программы. Точнее не совсем моей. Собственно вот она.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
program task3;
 uses crt;
 type
  tf=string[20];
  date=record day:1..31; mon:1..12; year:1..99 end;
  sklad=record name:tf; data:date; price:real; count:integer end;
 var
  filename:tf;
  r:byte;
 procedure vvod(fname:tf);
  var
   f:file of sklad;
   sk:sklad;
   begin
    clrscr;
    assign(f,fname);
    rewrite(f);
    write('Íàèìåíîâàíèå òîâàðà ');
    readln(sk.name);
    writeln('Ïðèçíàê îêîí÷àíèÿ ââîäà - ïóñòî äëÿ íàèìåíîâàíèÿ òîâàðà.');
    while sk.name<>''do
     begin
      with sk do
       begin
        writeln('Äàòà ïîñòóïëåíèÿ');
        write('Äåíü '); readln(data.day);
        write('Ìåñÿö '); readln(data.mon);
        write('Ãîä '); readln(data.year);
        write('Öåíà çà åäåíèöó òîâàðà '); readln(price);
        write('Êîëè÷åñòâî â øò. '); readln(count);
       end;
       write(f,sk);
       write('Íàèìåíîâàíèå òîâàðà ');readln(sk.name);
      end;
      writeln('Äëÿ ïðîäîëæåíèÿ íàæìèòå <Enter> ');
      repeat until keypressed;
      close(f);
     end;
 procedure look(fname:tf);
  var
   f:file of sklad;
   sk:sklad;
   i,code:integer;
    begin
     clrscr;
     assign(f,fname);
     {$-}
     reset(f);
     {$+}
     code:=ioresult;
     if code <> 0 then
      begin
       writeln('Ôàéëà ñòàêèì èìåíåì íå ñóùåñòâóåò.');
       delay(2000);
      end;
     i:=0;
     while not eof(f) do
      begin
       read(f,sk);
       with sk do
        begin
         i:=i+1;
         writeln('Çàïèñü íîìåð ',i);
         writeln('Íàèìåíîâàíèå òîâàðà ',name);
         writeln('Äàòà ïîñòóïëåíèÿ ',data.day,'/',data.mon,'/',data.year);
         writeln('Öåíà çà åäåíèöó òîâàðà ',price:9:2);
         writeln('Êîëè÷åñòâî â øò. ',count);
         delay(1000);
        end;
       end;
     writeln('Äëÿ ïðîäîëæåíèÿ íàæìèòå <Enter>');
     repeat until keypressed;
    end;
 procedure correct(fname:tf);
  var
   f:file of sklad;
   i,code:integer;
   sk:sklad;
    begin
    clrscr;
    assign(f,fname);
    {$-}
    reset(f);
    {$+}
    code:=ioresult;
    if code<>0 then
     begin
      writeln('Ôàéë íå íàéäåí.');
      delay(2000);
     end;
    i:=filesize(f);
    writeln('Ôàéë ñîäåðæèò ',i,' çàïèñåé.');
    write('Êàêóþ áóäåòå êîððåêòèðîâàòü? (0 - êîíåö)');
    readln(i);
    while i>0 do
     begin
      seek(f,i-1);read(f,sk);
      with sk do
       begin
        writeln('Çàïèñü íîìåð ',i);
        write('Íàèìåíîâàíèå òîâàðà ',name,'?'); readln(name);
        writeln('Äàòà ïóñòóïëåíèÿ ',data.day,'/',data.mon,'/',data.year);
        write('Äåíü? '); readln(data.day);
        write('Ìåñÿö? '); readln(data.mon);
        write('Ãîä? '); readln(data.year);
        write('Öåíà çà åäåíèöó òîâàðà ',price:9:2,'?'); readln(price);
        write('Êîëè÷åñòâî â øò. ',count,'?'); readln(count);
       end;
      seek(f,i-1);
      write(f,sk);
      write('Êàêóþ áóäåòå êîððåêòèðîâàòü? (0 - êîíåö)');
      readln(i);
     end;
    writeln('Äëÿ ïðîäîëæåíèÿ íàæìèòå <Enter>');
    repeat until keypressed;
    close(f);
   end;
 procedure appenf(fname:tf);
  var
  f:file of sklad;
  sk:sklad;
  code:byte;
   begin
    clrscr;
    assign(f,fname);
    {$-}
    reset(f);
    {$+}
    if code<>0 then
     begin
      writeln('Ôàéë íå íàéäåí.');
      delay(2000);exit;
     end;
    seek(f,filesize(f));
     writeln('Ïðèçíàê îêîí÷àíèÿ ââîäà - ïóñòî äëÿ íàèìåíîâàíèÿ òîâàðà.');
     write('Íàèìåíîâàíèå òîâàðà '); readln(sk.name);
     while sk.name<>'' do
      begin
       with sk do
        begin
         writeln('Äàòà ïîñòóïëåíèÿ ');
         write('Äåíü '); readln(data.day);
         write('Ìåñÿö '); readln(data.mon);
         write('Ãîä '); readln(data.year);
         write('Öåíà çà åäåíèöó òîâàðà '); readln(price);
         write('Êîëè÷åñòâî â øò. '); readln(count);
        end;
       write(f,sk);
       write('Íàèìåíîâàíèå òîâàðà '); readln(sk.name);
      end;
     writeln('Äëÿ ïðîäîëæåíèÿ íàæìèòå <Enter>');
     repeat until keypressed;
     close(f);
    end;
{----------------------------------------------------}
 begin
  clrscr;
  repeat
   write('Ââåäèòå èìÿ ôàéëà: '); readln(filename);
   clrscr;
   gotoxy(20,8); write('1 - Ôîðìèðîâàíèå íîâîé áàçû äàííûõ');
   gotoxy(20,10); write('2 - Ïðîñìîòð áàçû äàííûõ');
   gotoxy(20,12); write('3 - Êîððåêòèðîâêà');
   gotoxy(20,14); write('4 - Äîáàâëåíèå çàïèñè â êîíåö áàçû');
   gotoxy(20,16); write('5 - Âûõîä');
   gotoxy(20,18); write('Ðåæèì? '); readln(r);
    case r of
     1: vvod(filename);
     2: look(filename);
     3: correct(filename);
     4: appenf(filename);
    end;
  until
  r=5;
 end.
Программа из учебника. Переписал ее в компилятор и попробовал в работе. Судя по коду, на 47-51 строке происходит проверка на присутствие заданного файла и если он не найден, программа выдает сообщение "Файла с таким именем не существует" и далее выдается сообщение "Для продолжения нажмите <Enter>", далее экран отчищается и программа возвращается в начальное положение, но этого не происходит. Дело в том, что после ввода имени не существующего файла и выбора его просмотра(строка 169, вызов процедуры "look") программа закрывается и выдает ошибку. Код перерыл, в роде все в норме. Помогите пожалуйста разобраться. Может в компиляторе что настроить нужно?

p.s. компилятор FPC 2.6.2
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2014, 20:01
Ответы с готовыми решениями:

От кода - до работающей программы.
&quot; Детский вопрос &quot; : имеется код программы, написанный на Turbo Pascal. А что дальше ? Как из него сделать работающую программу ? И с...

Обновление работающей программы
как обновить файл (exe) самой запущенной программы??

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

3
Модератор
10409 / 5696 / 3400
Регистрация: 17.08.2012
Сообщений: 17,342
11.02.2014, 20:29
Лучший ответ Сообщение было отмечено SashaRasha как решение

Решение

Плохо рыли. У Вас после выдачи сообщения (строка 53) несуществующий файл цинично начинает читаться (строка 57). Отсюда и ошибка. Для исправления положения, думаю, надо строки 51..73 подрихтовать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//...
     if code <> 0 
      then begin
       writeln('Файла стаким именем не существует.');
       delay(2000);
      end
      else begin
       i:=0;
       while not eof(f) do
//...
        repeat until keypressed
       end
      end;
//...
1
 Аватар для SashaRasha
91 / 47 / 8
Регистрация: 08.10.2008
Сообщений: 445
12.02.2014, 11:17  [ТС]
Спасибо, я тоже заметил, что как-бы чего-то не хватает. Просто тут все в точности как в учебнике. К стати когда я переключаю option->mode с debag на release в компиляторе ошибка не выскакивает, но программа после выдачи сообщения со строки 53 зависает. Видимо пытается считать несуществующий файл.
И еще есть один теоретический вопрос. Вы вставили в программу оператор "end" без точки запятой. Что это может означать? Просто я пока не силен во всех возможностях паскаля. Спасибо еще раз за помощь!
0
Модератор
10409 / 5696 / 3400
Регистрация: 17.08.2012
Сообщений: 17,342
12.02.2014, 13:23
Цитата Сообщение от SashaRasha Посмотреть сообщение
"end" без точки запятой
Правила паскаля. После end точка с запятой обязательно не ставится перед else. Точка с запятой может не ставиться после какого-либо оператора, если за ним следует "закрывающаяся" операторная скобка, которой может быть end или until. В фрагменте из моего поста: строка 6 - end перед else, строка 11 - после keypressed нет точки с запятой, потому что далее следует end, в строке 12 после end нет точки с запятой, потому что далее также следует end. Простое правило: зачем ставить разделитель, если за оператором и без того следует разделитель в виде операторной скобки? однако замечу, перед "открывающейся" операторной скобкой (begin, repeat, while и иже с ними) точка с запятой ставится.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2014, 13:23
Помогаю со студенческими работами здесь

Отправка файла из работающей программы
Есть textBox в него записывается информация ( текст ) , попутно текст добавляется в файл Теперь вопрос: Как отправить &quot;.txt&quot;...

Как добраться до апликейшана работающей программы 1С
Добрый день. Задача: Необходимо в уже запущенной программе 1С открыть форму. Работать все должно через консольную программу....

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

Прекращена робота программы, работающей с файлами
В програме вроди всё правильно,но когда я запускаю скомпилированый файл,то програма вылетает. #include &lt;stdio.h&gt; main() {...

Прокомментировать код программы, работающей с массивом
#define K 50 int x, j; /*ввод x */.. for (j=0; j&lt;K-1; j++) x=x; Вот что эта программа делает? Опишите подробно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru