Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2020, 13:35   #1
Волчок
Новичок
Джуниор
 
Регистрация: 21.06.2020
Сообщений: 2
По умолчанию В чем ошибка программы? Паскаль

В файле типа RECORD хранится информация о поступивших в ремонт бытовых приборах: ФИО клиента, тип бытового прибора, год выпуска, страховая стоимость прибора, наименование дефекта, дата приемки в ремонт. Составить программу для получения:
•Сведений о приборах одного типа;
•Информации о количестве приборов, страховая стоимость которых больше N.

Нужна помощь понять где ошибки и что исправить, что-бы программа решала задачу.
Код:
program odin;
type database = record
  FIO:string[50];
  Tip:string[15];
  Vypusk:integer;
  Strahovka:integer;
  Defect:string[15];
  DataPriema:string[10];
end;
var techpribor: array [1..3] of database;
  Summ,b,I: integer;
  OneTip:string[30];
  begin
    for I:=1 to 3 do
      begin
    Writeln('Введите данные о поступивших на ремонт бытовых приборах');
    Writeln('Введите ФИО клиента');
    readln(techpribor[I].FIO);
    Writeln('Введите тип бытового прибора');
    readln(techpribor[I].Tip);
    Writeln('Введите год выпуска бытового прибора');
    readln(techpribor[I].Vypusk);
    Writeln('Введите сумму страховки');
    readln(techpribor[I].Strahovka);
    Writeln('Введите наименование дефекта');
    readln(techpribor[I].Defect);
    Writeln('Введите дату приема в ремонт');
    readln(techpribor[I].DataPriema);
    Writeln('Ввод данных закончен');
    end;
    WriteLn ('Введите 1 если нужно найти информацию о приборах одного типа' );
    WriteLn ('        2 если нужно найти информацию о количестве приборов, страховая стоимость которых больше определенной суммы:');
    Readln(b);
  case b of
  1: begin
    Write('Введите тип прибора: ');
    readln(OneTip);
    if OneTip = techpribor[I].Tip then
    writeln(techpribor[I].FIO:50,techpribor[I].Tip:15,techpribor[I].Vypusk:15,techpribor[I].Strahovka:10,techpribor[I].Defect:15,techpribor[I].DataPriema:10);
    end;
  2: begin
    Write('Введите страховую сумму');
    readln(Summ);
    if techpribor[I].Strahovka > Summ then
    writeln(techpribor[I].FIO:50,techpribor[I].Tip:15,techpribor[I].Vypusk:15,techpribor[I].Strahovka:10,techpribor[I].Defect:15,techpribor[I].DataPriema:10); 
    end;
    end;
end.
Волчок вне форума Ответить с цитированием
Старый 21.06.2020, 15:21   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

У вас есть цикл для ввода данных:
Код:
for I:=1 to 3 do
begin
  ....
  ....
end;
И у вас есть case, где для выбора прибора используется переменная I.
Эта переменная должна перебираться в цикле, но этого нет.
Код:
case b of
  1: begin
    Write('Введите тип прибора: ');
    readln(OneTip);
    if OneTip = techpribor[I].Tip then  {<--- тут}
    writeln(techpribor[I].FIO:50,techpribor[I].Tip:15,techpribor[I].Vypusk:15,techpribor[I].Strahovka:10,tech {<--- тут}
pribor[I].Defect:15,techpribor[I].DataPriema:10);  {<--- тут}
    end;
  2: begin
    Write('Введите страховую сумму');
    readln(Summ);
    if techpribor[I].Strahovka > Summ then  {<--- тут}
    writeln(techpribor[I].FIO:50,techpribor[I].Tip:15,techpribor[I].Vypusk:15,techpribor[I].Strahovka:10,tech {<--- тут}
pribor[I].Defect:15,techpribor[I].DataPriema:10); {<--- тут}
    end;
    end;
PS:
Цитата:
В файле типа RECORD хранится информация
Тип Record - это пользовательский тип данных, а не файл. Данные вы храните в массиве.
Возможно, что позже вы будете писать эти данные в файл, но пока такого файла у вас нет.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.06.2020, 10:51   #3
Волчок
Новичок
Джуниор
 
Регистрация: 21.06.2020
Сообщений: 2
По умолчанию

А как она должна перебираться? Я просто не понимаю.
Волчок вне форума Ответить с цитированием
Старый 22.06.2020, 11:20   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Да точно так же, как и при записи данных в массив.
Существует несколько способов это сделать, например, через п/п.
В вашем случае, например, так:
Код:
for i = 1 to 3 do
begin
    if OneTip = techpribor[I].Tip then    
       writeln(techpribor[I].FIO:50,
               techpribor[I].Tip:15,
               techpribor[I].Vypusk:15,
               techpribor[I].Strahovka:10,
               techpribor[I].Defect:15,
               techpribor[I].DataPriema:10);
end;
Сделайте массив по более, введите данные и сохраните в типизированном файле.
Введите п/п на формирование данных, запись в типизированный файл, чтение из типизированного файла. Можно добавить подпрограммы для поиска и вывода результата поиска.
Но так думаю, что это в недалёком будущем

PS: Операторные скобки (begin, end) можно и не писать, но при отладке и вставке дополнительных операторов могут быть полезными.
Следует подумать и о том, что при вводе, например типа прибора (15 символов), можно и ошибиться. Прибор не будет найден. Но это отдельная тема.
Как-то так, ...

Последний раз редактировалось ViktorR; 22.06.2020 в 11:23.
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка программы? Паскаль Тетрадь Помощь студентам 3 26.03.2014 08:31
Где ошибка???Турбо Паскаль Ошибка 57 PASKAL12 Помощь студентам 6 14.10.2013 22:31
Как можно в Паскаль АВС (Паскаль-Турбо) вставлять в результаты печати программы графики, таблицы, схемы, набранные формулы, выраже IZOPGRAM Паскаль, Turbo Pascal, PascalABC.NET 0 11.06.2012 10:54
паскаль...2 программы... Оксаночка:) Помощь студентам 8 01.04.2009 23:32