Текстовый редактор - Free Pascal

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

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

program AniFoxs_program;
 
var txtVal,save: string;
    F: Text;
label M1,M2;
 
Begin
Assign (F,'text.txt');
{Rewrite (F);}
WriteLn ('Commands:');
WriteLn ('exit/close - for close this application');
WriteLn ('save       - for save your text');
WriteLn ('delete     - for delete you text');

M1: ReadLn (txtVal);
                   {Закрытие начало}
If (txtVal = 'exit') OR (txtVal = 'close') Then
 
 Begin
 
  M2: WriteLn ('You want save your text? (Y/N)');
      ReadLn (save);
      If (save = 'Y') OR (save = 'y') then Close(F)
      Else If (save = 'n') OR (save = 'N') then WriteLn
       Else
        Begin
         WriteLn('You should write Y or N');
         GoTo M2;
         exit;
        End;
  Exit;
 
 End
                 {Закрытие конец}
 
                 {Сейв начало}
 
Else If txtVal = 'save' then
 Begin
  Close(F);
  Assign (F,'text.txt');
  GoTo M1;
 End
                 {Сейв конец}
 
Else If txtVal = 'delete' then Rewrite(F)
 
Else
 Begin
  WriteLn(F,txtVal);
  GoTo M1;
 End;
End.
Создал не большой текстовый редактор на Pascal. Голова превратилась в кисель пока это писал. Похоже не когда не привыкну ориентироваться в этом страшном коде. Но не суть. Проблема в том что выдает ошибку exitcode 103 причину не могу найти. Проблема появилась после того как добавил сейв и вопрос при закрытии (Y/N).

Решение задачи: «Текстовый редактор»

textual
Листинг программы
program AniFoxs_program;
 
uses crt;
 
const csize=10000;
 
type tarray=array [1..csize] of string;
 
procedure mycommand;
begin
  writeLn ('Commands:');
  writeLn ('exit       - for close this application');
  writeLn ('save       - for save your text');
  writeLn ('delete     - for delete you text');
end;
 
procedure savetxt(var amas:tarray);
var f:text;i:integer;
begin
  assign(f,'text.txt');
  rewrite(f);
  i:=1;
  while (amas[i]<>'save') and (amas[i]<>'exit') do begin
    writeln(f,amas[i]);
    inc(i);
  end;
  close(f);
end;
 
var s:string;mas:tarray;
    ch:char;i:integer;
 
begin
  clrscr;
  mycommand;
  for i:=1 to csize do begin
    readln(mas[i]);
    if mas[i]='exit' then
      break;
    if mas[i]='delete' then begin
      clrscr;
      mycommand;
    end;
    if mas[i]='save' then savetxt(mas);
  end;
  writeln('save before exiting Y/N ?');
  readln(ch);
  if (ch='y') or (ch='Y') then savetxt(mas);
end.

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

  1. Объявлены переменные:
    • s: строка;
    • mas: массив типа tarray;
    • ch: символ;
    • i: целое число;
  2. Запущена функция mycommand, которая выводит список команд.
  3. Запущен цикл, который считывает строки из массива mas и выполняет следующие действия:
    • Если строка равна 'exit', то цикл прерывается.
    • Если строка равна 'delete', то экран очищается и выводится список команд.
    • Если строка равна 'save', то вызывается функция savetxt.
  4. Запущен цикл, который считывает строки из массива mas и выполняет следующие действия:
    • Если строка не равна 'save' и 'exit', то она записывается в файл 'text.txt'.
    • Если строка равна 'save', то вызывается функция savetxt.
  5. Выводится вопрос о сохранении изменений перед выходом.
  6. Считывается ответ пользователя и сохраняется в переменной ch.
  7. Если ch равен 'y' или 'Y', то вызывается функция savetxt.

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


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

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

5   голосов , оценка 3.8 из 5
Похожие ответы