Type mismatch при setlength - Free Pascal

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

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

В строках 31-32 почему-то возникает type mismatch. Объясните пожалуйста почему.
uses crt;
 
type
  Note = record
    name: string[20];
    adress: string[50];
    phone: string[15];
  end;
 
//---------------------------------------------------------
procedure index(var a: array of Note; var idx: array of integer;
                current: integer);
begin
end;
//---------------------------------------------------------
procedure read_from_file(var a: array of Note; var idx: array of integer);
var
  n, i: integer;
  f: text;
begin
  assign(f, 'notebook.txt');
  {$I-} reset(f); {$I+}
  if IOResult <> 0 then
  begin
    writeln('Fail notebook.txt ne naiden!');
    readkey;
    halt(1);
  end;
 
  readln(f, n);
  setlength(a, n);
  setlength(idx, n);
  for i := 0 to n-1 do
  begin
    readln(f, a[i].name);
    readln(f, a[i].adress);
    readln(f, a[i].phone);
    index(a, idx, i);
  end;
end;
//---------------------------------------------------------
 
var
  notebook: array of Note;
  idx: array of integer;
 
begin
end.

Решение задачи: «Type mismatch при setlength»

textual
Листинг программы
uses crt;
 
type
  Note = record
    name: string[20];
    adress: string[50];
    phone: string[15];
  end;
mas_zap=array of Note;
mas_int=array of integer;
//---------------------------------------------------------
procedure index(var a: mas_zap; var idx:mas_int;
                current: integer);
begin
end;
//---------------------------------------------------------
procedure read_from_file(var a:mas_zap ; var idx:mas_int);
var
  n, i: integer;
  f: text;
begin
  assign(f, 'notebook.txt');
  {$I-} reset(f); {$I+}
  if IOResult <> 0 then
  begin
    writeln('Fail notebook.txt ne naiden!');
    readkey;
    halt(1);
  end;
 
  readln(f, n);
  setlength(a, n);
  setlength(idx, n);
  for i := 0 to n-1 do
  begin
    readln(f, a[i].name);
    readln(f, a[i].adress);
    readln(f, a[i].phone);
    index(a, idx, i);
  end;
end;
//---------------------------------------------------------
 
var
  notebook: mas_zap;
  idx: mas_int;
 
begin
end.

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

  1. Объявление переменных и типов данных: — Note - тип записи, содержащий поля name, adress и phone, каждое из которых является строкой фиксированной длины — mas_zap - массив записей типа Note — mas_int - массив целых чисел
  2. Объявление процедур: — index - процедура для сортировки элементов массива mas_zap по полю name — read_from_file - процедура для чтения данных из файла notebook.txt в массив mas_zap и индексный массив mas_int
  3. В процедуре read_from_file выполняются следующие действия: — Открытие файла notebook.txt для чтения — Проверка успешности открытия файла и вывод сообщения об ошибке в случае неудачи — Чтение количества записей из файла в переменную n — Установка длины массива mas_zap и индексного массива mas_int равной количеству записей — Цикл по всем записям от 0 до n-1: — Чтение имени, адреса и телефона из файла в соответствующие поля записи — Вызов процедуры index для текущей записи
  4. Ошибка Type mismatch возникает при попытке установить длину массива mas_zap и mas_int, которые являются массивами разных типов данных. Вероятно, в данном случае, проблема заключается в том, что mas_int должен быть массивом целых чисел, а не записей типа Note.
  5. Валидация ввода и обработка ошибок: — Проверка успешности открытия файла notebook.txt для чтения — Вывод сообщения об ошибке и остановка программы в случае неудачи
  6. Использование индексного массива mas_int: — В процедуре index происходит сортировка элементов массива mas_zap по полю name, но для этого необходимо, чтобы индексы в массиве mas_int были правильно установлены. Возможно, что в данном случае, массив mas_int используется как индексный массив для быстрого доступа к записям в массиве mas_zap.
  7. Задачи, которые можно решить с помощью данного кода: — Считывание данных из файла notebook.txt в массив записей типа Note — Сортировка записей в массиве mas_zap по полю name — Использование индексного массива mas_int для быстрого доступа к записям в массиве mas_zap

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


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

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

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