Опишите, используя структуру записи, список горных вершин: название, высота, страна. Выберите самую низкую вершину из заданного списка. Если таких вершин несколько, то выведите их все. Выведите список вершин, название которых начинается на заданную букву. Программа должна предоставить пользователю следующий выбор: 1) создание файла, 2) просмотр записей из файла, 3) добавление записей в файл, 4..n-1) просмотр решения задачи и n) выход из программы. Указанные выше действия оформить в виде подпрограмм — Pascal(Паскаль)

Uses crt;

Type
  mo = record
    name, country: string;
    height: longint;
  end;

Type
  fil = file of mo;

const
  fpath = 'C:/mountains.txt';

var
  f: fil;

procedure mainmenu; forward;

Procedure IsFile7;
begin
{$I-}
  reset(f);
{$I+}
  if (IOresult <> 0) then
  begin
    writeln('No file. Press ENTER to quit');
    readln;
    mainmenu;
  end;
end;

procedure create;
var
  key: char;
begin
  clrscr;
{$I-}
  reset(f);
{$I+}
  if (IOresult <> 0) then
  begin
    rewrite(f);
    mainmenu;
  end
  else
  begin
    writeln('Overwrite file? Y/N');
    repeat
      key := readkey;
      if ((key = 'y') or (key = 'Y')) then
      begin
        rewrite(f);
        mainmenu;
      end;
      if ((key = 'n') or (key = 'N')) then
        mainmenu;
    until (1 < 0);
  end;
end;

Procedure ViewFile;
var
  ourmo: mo;
begin
  clrscr;
  IsFile7;
  write('Name':25);
  write('Height':25);
  write('Country':25);
  writeln;
  while not EOF(f) do
  begin
    read(f, ourmo);
    write(ourmo.name:25);
    write(ourmo.height:25);
    write(ourmo.country:25);
    writeln;
  end;
  writeln;
  writeln('Press ENTER to exit');
  readln;
  mainmenu;
end;

Procedure GetResult;
var
  currentmo: mo;
  result, n, minhgt, hgt: longint;
begin
  clrscr;
  IsFile7;
  result := 0;
  n := 0;
  while not EOF(f) do
  begin
    read(f, currentmo);
    if (currentmo.height < minhgt) or (n = 0) then
    begin
      minhgt := currentmo.height;
      result := n;
    end;
    n := n + 1;
  end;
  seek(f, result);
  read(f, currentmo);
  writeln('Mountain: ', currentmo.name);
  writeln('Height: ', currentmo.height);
  writeln('Country: ', currentmo.country);
  writeln;
  writeln('Press ENTER to quit.');
  readln;
  mainmenu;
end;

Procedure AddInfo;
var
  AddMo: mo;
begin
  clrscr;
  IsFile7;
  seek(f, filesize(f));
  writeln('Enter name of mountain:');
  readln(AddMo.name);
  writeln('Enter height:');
  readln(AddMo.height);
  writeln('Enter country:');
  readln(AddMo.country);
  write(f, AddMo);
  mainmenu;
end;

Procedure ExitProgram;
begin
  clrscr;
  halt;
end;

procedure mainmenu;
var
  key: char;
begin
  clrscr;
  writeln('Choose option: 1-4');
  writeln;
  writeln('1: Create file');
  writeln('2: View file');
  writeln('3: Add record');
  writeln('4: View result');
  writeln('5: Exit');
  repeat
    key := readkey;
    case key of
      '1':
        create;
      '2':
        ViewFile;
      '3':
        AddInfo;
      '4':
        GetResult;
      '5':
        ExitProgram;
    end;
  until (1 < 0);
end;

Begin
  highvideo;
  clrscr;
  assign(f, fpath);
  mainmenu;

End.

Leave a Comment

+ 17 = 20