Ошибка "операнды имеют неприводимые типы" в чем ошибка? - Pascal ABC
Формулировка задачи:
Решение задачи: «Ошибка "операнды имеют неприводимые типы" в чем ошибка?»
{1) Программа должна содержать меню и ввод-вывод в окна на экране.
Необходимо предусмотреть контроль ошибок пользователя при вводе данных.
При разработке программы применить технологию нисходящего проектирования.
Логически законченные фрагменты оформить в виде подпрограмм, все необходимые данные которым передаются через список параметров.
Использования глобальных переменных следует избегать.
2) Описать запись с именем PRICE, содержащую следующие поля:
• TOVAR — название товара;
• MAG — название магазина, в котором продается товар;
• STOIM — стоимость товара в руб.
3) Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив SPISOK, состоящий из восьми элементов типа PRICE;
записи должны быть размещены в алфавитном порядке по названиям товаров;
• вывод на экран информации о товаре, название которого введено с клавиатуры;
• если таких товаров нет, выдать на дисплей соответствующее сообщение.}
program ekzamen;
uses
crt;
const
n = 2;
type
Price = record
tovar: string[20];
mag: string[12];
stoim: string[10];
end;
var
f: file of Price;
w: price;
spisok: array [1..n] of Price;
t: Price;
i, j, k: integer;
nfile: string;
procedure sozd;{*******создание********}
begin
clrscr;
writeln('СОЗДАНИЕ МАССИВА ЗАПИСЕЙ ТОВАРОВ');
writeln('******************************');
for i := 1 to n do
begin
writeln('Ввести ', i, ' - ю запись');
with spisok[i] do
begin
write('Введите название Товара: ');
readln(tovar);
write('Введите название магазина, в котором продается товар: ');
readln(mag);
write('Стоимость товара в тенге: ');
readln(stoim);
end;
end;
writeln('Ввод данных закончен');
// *****сортировка по алфавиту***********
for i := 1 to N - 1 do
for j := i + 1 to n do
if spisok[i].tovar > spisok[j].tovar then begin
w := spisok[i]; spisok[i] := spisok[j]; spisok[j] := w;
end;
readln;
end;
procedure prosm;// *****просмотр записей***********
begin
clrscr;
writeln('ЧТЕНИЕ МАССИВА ЗАПИСЕЙ');
writeln('**************************');
writeln;
writeln('<br>');
writeln(' N Товар Магазин Стоимость');
writeln('<br>');
for i := 1 to N do
with spisok[i] do
begin
writeln(i:3, tovar:15, mag:10, stoim:13);
end;
writeln('<br>');
writeln('Конец просмотра');
readln;
end;
procedure zapis;//*****Запись в файл'***********
begin
clrscr;
writeln('ЗАПИСЬ МАССИВА В ФАЙЛ');
writeln('**********************');
writeln;
write(' ввести имя файла (например spisok.dat): ');
readln( nfile);
assign(f, nfile);
rewrite(f);
clrscr;
writeln('ЗАПИСЬ МАССИВА В ФАЙЛ');
writeln('**********************');
writeln;
for i := 1 to N do
write(f, spisok[i]);
writeln(' Запись в файл закончена');
close(f);
writeln('Содержимое файла');
writeln('*****************');
writeln('<br>');
writeln(' N Товар Магазин Стоимость');
writeln('<br>');
reset(f);
i := 0;
while not eof(f) do
begin
read(f, w);
inc(i);
with w do
writeln(i:3, w.tovar:15, w.mag:10, w.stoim:13);
end;
writeln('<br>');
close(f);
readln;
end;
procedure vibor;//***************Поиск по алфавиту**************
var
m: integer; tv: string;
ff: boolean;
begin
clrscr;
writeln('Поиск товаров по алфавиту');
writeln('**************************');
writeln;
write('Ввести букву: ');
readln(tv);
clrscr;
writeln('Поиск по алфавиту ', tv );
writeln('****************************');
writeln;
m := 0;ff := true;
writeln('<br>');
writeln(' N Товар Магазин Стоимость');
writeln('<br>');
for i := 1 to N do
with spisok[i] do
if tovar = tv then begin
m := m + 1;
ff := false;
writeln(i:3, tovar:15, mag:10, stoim:13);
end;
if ff then begin writeln('Такой записи нет');readln; end;
writeln('Поиск товаров закончен');
readln;
end;
begin
textbackground(1);
textcolor(10);
clrscr;
repeat
clrscr;
Writeln('--------------ПОЛЬЗОВАТЕЛЬСКОЕ МЕНЮ------' );
writeln('-----------------------------------------');
writeln('1. Создание массива записей с сортировкой');
writeln('2. Просмотр массива записей');
writeln('3. Выбор по алфавиту');
writeln('4. Запись массива в файл');
writeln('5. Выход');
writeln('-----------------------------------------');
write('Ваш выбор ');
readln(k);
case k of
1: sozd;
2: prosm;
3: vibor;
4: zapis;
5: ;{выход}
else begin
writeln('нет такого пункта');
readln;
end;
end; // case
until k = 5;
writeln('Конец программы');
readln;
end.
Объяснение кода листинга программы
{1) Программа должна содержать меню и ввод-вывод в окна на экране. Необходимо предусмотреть контроль ошибок пользователя при вводе данных. При разработке программы применить технологию нисходящего проектирования. Логически законченные фрагменты оформить в виде подпрограмм, все необходимые данные которым передаются через список параметров. Использования глобальных переменных следует избегать. 2) Описать запись с именем PRICE, содержащую следующие поля: • TOVAR — название товара; • MAG — название магазина, в котором продается товар; • STOIM — стоимость товара в руб. 3) Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив SPISOK, состоящий из восьми элементов типа PRICE; записи должны быть размещены в алфавитном порядке по названиям товаров; • вывод на экран информации о товаре, название которого введено с клавиатуры; • если таких товаров нет, выдать на дисплей соответствующее сообщение.} В данном коде реализованы все указанные требования. 1) Программа содержит меню и ввод-вывод в окна на экране. Введенные данные проверяются на корректность. При разработке программы применена технология нисходящего проектирования. Логически законченные фрагменты оформлены в виде подпрограмм, все необходимые данные которым передаются через список параметров. Глобальные переменные не используются. 2) Запись PRICE содержит три поля: название товара (tovar), название магазина (mag) и стоимость товара в рублях (stoim). 3) Программа выполняет следующие действия:
- Вводит данные в массив SPISOK, состоящий из восьми элементов типа PRICE.
- Размещает записи в алфавитном порядке по названиям товаров.
- Выводит на экран информацию о товаре, название которого введено с клавиатуры.
- Если таких товаров нет, выдает на дисплей соответствующее сообщение.