File not open - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Есть код
Листинг программы
  1. program project1;
  2. type info=record
  3. surname, NameManufactory:string;
  4. salary:integer;
  5. a,b,c:word;
  6. end;
  7. const
  8. Sa = 237;
  9. Sb = 412;
  10. Sc = 196;
  11. var t:info;
  12. digit:byte;
  13. n:string;
  14. f:text;
  15. inform:info;
  16. procedure Create;
  17. var c:char;
  18. begin
  19. write('Введите название файла: ');
  20. readln(n);
  21. assign(f,n);
  22. rewrite(f);
  23. repeat
  24. writeln ('Введите фамилию работника: ');
  25. readln (inform.surname);
  26. writeln (f,inform.surname);
  27. writeln ('Введите наименование цеха: ');
  28. readln (inform.NameManufactory);
  29. writeln (f,inform.NameManufactory);
  30. writeln ('Введите количество изделий А');
  31. readln (inform.a);
  32. writeln (f,inform.a);
  33. writeln ('Введите количество изделий B');
  34. readln (inform.b);
  35. writeln (f,inform.b);
  36. writeln ('Введите количество изделий С');
  37. readln (inform.c);
  38. writeln (f,inform.c);
  39. repeat
  40. writeln ('Вводить следующего работника (y/n)?: ');
  41. readln (c);
  42. if (c<>'y') and (c<>'n') then Writeln('Ошибка ввода');
  43. until (c='y') or (c='n');
  44. until c='n';
  45. close (f);
  46. end;
  47. procedure View;
  48. begin
  49. write('Введите название файла: ');
  50. readln(n);
  51. assign(f,n);
  52. {$I-}
  53. reset(f);
  54. {$I+}
  55. while not eof(f) do begin
  56. readln(f,inform.surname);
  57. readln(f,inform.NameManufactory);
  58. readln(f,inform.a);
  59. readln(f,inform.b);
  60. readln(f,inform.c);
  61. inform.salary:=Sa*inform.a+Sb*inform.b+Sc*inform.c;
  62. writeln (inform.surname,' ':(15-Length(inform.surname)),inform.NameManufactory,' ':(23-Length(inform.NameManufactory)),inform.A:3,' ',inform.B:3,' ',inform.C:3,' ',inform.salary:3);
  63. writeln;
  64. end;
  65. close(f);
  66. end;
  67. procedure check;
  68. begin
  69. while ioresult<>0 do
  70. begin
  71. writeln('Указанный файл не найден!');
  72. write('Введите название файла: ');
  73. readln(n);
  74. assign(f,n);
  75. reset(f);
  76. close(f);
  77. end;
  78. end;
  79. procedure FindWorkerManufName;
  80. var s:string;
  81. begin
  82. write('Введите название файла: ');
  83. readln(n);
  84. assign(f,n);
  85. {$I-}
  86. check;
  87. reset(f);
  88. {$I+}
  89. while not eof(f) do
  90. begin
  91. readln(f,inform.surname);
  92. readln(f,inform.NameManufactory);
  93. readln(f,inform.a);
  94. readln(f,inform.b);
  95. readln(f,inform.c);
  96. // write('Введите название цеха: ');
  97. // readln(s);
  98. // if (s<>'') then
  99. // begin
  100. // writeln('Success');
  101. // end;
  102. // else
  103. // writeln('Ошибка!Введите корректное название цеха');
  104. reset(f);
  105. close(f);
  106. end;
  107. end;
  108. procedure FindWorkerIncome;
  109. begin
  110. write('Введите название файла: ');
  111. readln(n);
  112. assign(f,n);
  113. {$I-}
  114. reset(f);
  115. check;
  116. {$I+}
  117. end;
  118. procedure FindWorkerSurname;
  119. begin
  120. write('Введите название файла: ');
  121. readln(n);
  122. assign(f,n);
  123. {$I-}
  124. reset(f);
  125. check;
  126. {$I+}
  127. close(f);
  128. { while not eof(f) do begin
  129. readln(f,inform.surname);
  130. readln(f,inform.NameManufactory);
  131. readln(f,inform.a);
  132. readln(f,inform.b);
  133. readln(f,inform.c);
  134. end;}
  135. end;
  136. begin
  137. while digit<>6 do
  138. begin
  139. writeln('Нажмите 1 для создания файла');
  140. writeln('Нажмите 2 для просмотра файла');
  141. writeln('Нажмите 3 для поиска работников по наименованию цеха');
  142. writeln('Нажмите 4 для поиска работников по заработку');
  143. writeln('Нажмите 5 для поиска работников по фамилии');
  144. writeln('Нажмите 6 для выхода из программы');
  145. write('Выберите пункт меню меню: ');
  146. readln(digit);
  147. case digit of
  148. 1:Create;
  149. 2:View;
  150. 3:FindWorkerManufName;
  151. 4:FindWorkerIncome;
  152. 5:FindWorkerSurname;
  153. 6:exit;
  154. else
  155. writeln('Ошибка ввода');
  156. end;
  157. end;
  158. end.
  159. end.
в котором ошибку выдаёт на строке 113:

exitcode=103

Листинг программы
  1. close(f);
а в других компиляторах пишет

file not open

помогите, уже не один час сижу над этой проблемой.. в самом начале исполнения я ввожу цифру 3, затем название файла, а затем всё крашится.

Решение задачи: «File not open»

textual
Листинг программы
  1. type info=record
  2.   surname, NameManufactory:string;
  3.   salary:integer;
  4.   a,b,c:word;
  5. end;
  6. const
  7.   Sa = 237;
  8.   Sb = 412;
  9.   Sc = 196;
  10. var t:info;
  11.   digit:byte;
  12.   n:string;
  13.   f:text;
  14.   inform:info;
  15.  
  16.  
  17.  
  18. procedure FindWorkerManufName;
  19. var s:string;
  20. begin
  21.   write('Введите название файла: ');  readln(n);
  22.   assign(f,n);
  23.   {$I-}
  24.   while ioresult<>0 do
  25.   begin
  26.     writeln('Указанный файл не найден!');
  27.     write('Введите название файла: ');
  28.     readln(n);
  29.     assign(f,n);
  30.     reset(f);
  31.     close(f);
  32.   end;
  33.   reset(f);
  34.   {$I+}
  35.   while not eof(f) do
  36.   begin
  37.     readln(f,inform.surname);
  38.     readln(f,inform.NameManufactory);
  39.     readln(f,inform.a);
  40.     readln(f,inform.b);
  41.     readln(f,inform.c);
  42. {    reset(f);
  43.     close(f);}
  44.   end;
  45.   close(f);
  46. end;
  47.  
  48. begin
  49. FindWorkerManufName;
  50. writeln(inform.surname);
  51. writeln(inform.NameManufactory);
  52. readln;
  53. end.

Объяснение кода листинга программы

  1. Объявление типа данных info для записи информации о работнике.
  2. Объявление констант Sa, Sb и Sc для хранения значений цветов.
  3. Объявление переменных t, digit, n и f для работы с файлом и ввода данных.
  4. Объявление переменной inform типа info для хранения информации о работнике.
  5. Вывод сообщения с просьбой ввести название файла для чтения данных.
  6. Ввод названия файла и сохранение его в переменную n.
  7. Открытие файла с указанным названием для чтения данных.
  8. Проверка наличия файла и закрытие его при отсутствии.
  9. Повторное открытие файла после его закрытия из-за отсутствия.
  10. Чтение информации о работнике из файла и сохранение ее в переменную inform.
  11. Закрытие файла после чтения всех данных.
  12. Вывод информации о работнике на экран.
  13. Завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы