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