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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 16:59   #1
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию Записи. Записи с вариантами. Turbo Pascal

Условие задачи: Составить список машин, имеющихся в автомагазине, содержащий марку автомобиля, его пробег и в зависимости от того, является ли автомобиль грузовым или легковым, указать его грузоподъемность (для грузового) или вместимость числа пассажиров (для легкового). Составьте программу, которая обеспечивает ввод полученной информации, вывод ее в виде таблицы. Выведите на экран меню, а затем информацию об автомобиле в зависимости от запроса покупателя.


Пытался сделать но есть ошибки:
Код:
program t2_v16;
Type tip=(gruz,leg);
cars=record
marka:string[50];
probeg:integer;
case v:tip of
gruz:(pod:integer);
leg:(pas:integer);
end;
var spisok:array [1..10] of cars;
n,i:byte;
e:tip;
k:integer;
vybor:byte;
marka:string;
begin
writeln('Введите данные о авто: ');
write('1-легковая,2-грузовая');
readln(vybor);
case vybor of
1: spisok[i].v:=leg;
2: spisok[i].v:=gruz;
end;
with spisok[i] do
begin
writeln('Ввидите кол-во авто');
readln(n);
writeln('Марка');
readln(marka);
writeln('Пробег');
readln(probeg);
case v of
gruz: begin                   {Для грузавых}
write('Gruzopodemnost');
readln(pod);
end;
leg: begin                    {Для легковых}
write('Pasagiri');
readln(pas);
end;
end;
procedure vyvod;
begin
with spisok[i] do
begin
writeln('кол-во авто',n);
writeln('Марка',marka);
writeln('Пробег',probeg);
case v of
leg: write('Pasagiri',pas);
gruz:begin
write('Gruzopodemnost',pod);
procedure poisk;
begin
write('1-,2-');
readln(vybor);
case vybor of
1: e:=leg
2: e:=gruz
end;
vyvod;
end;
begin
for i:=1 to n do
vvod;
writeln;
poisk;
end.
Подскажите как переделать.

Последний раз редактировалось Marksman_SwAt; 01.05.2014 в 17:15.
Marksman_SwAt вне форума Ответить с цитированием
Старый 02.05.2014, 12:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

немного подправил.
нет меню и процедуру poisk я не трогал. Оставяю Вам, в качестве домашнего задания

Код:
program t2_v16;
type tip = (gruz, leg);
  cars = record
    marka: string[25];
    probeg: integer;
    case v: tip of
      gruz: (pod: integer);
      leg: (pas: integer);
  end;
const
  Nmax = 10;
var 
  spisok: array[1..NMax] of cars;
  n: byte;

procedure Vvod;
var
  i, k: integer;
  vybor: byte;
  marka: string;
begin
  repeat
    WriteLn('Введите количество машин в автопарке (от 1 до ',Nmax,'): '); 
    Readln(n);
  until (n>=1) and (n<=Nmax);
  for i:=1 to n do 
  with spisok[i] do
  begin
  writeln('Введите данные о авто: ');
  write('1-легковая,2-грузовая');
  readln(vybor);
  case vybor of
    1: v := leg;
    2: v := gruz;
  end;
    writeln('Марка');
    readln(marka);
    writeln('Пробег');
    readln(probeg);
    case v of
      gruz: begin {Для грузовых}
          write('Gruzopodemnost');
          readln(pod);
        end;
      leg: begin {Для легковых}
          write('Pasagiri');
          readln(pas);
        end;
    end;
  end;
end;

procedure vyvod;
var i : integer;
begin
  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
  WriteLn('| Марка                   | Пробег   |  Тип авто | К-во.пас | Грузопод-ть |');
  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
  for i:=1 to n do
  with spisok[i] do
  begin
    write(marka:25,' | ',probeg:8,' | ');
    case v of
      leg:   write('Легковой  | ', pas:8, ' |             |');
      gruz:  write('Грузовой  |          |   ', pod:8, '  |');
    end;
    WriteLn;
  end;
  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
end;

procedure poisk;
var
  e: tip;
  k: integer;
  vybor: byte;
begin
  write('1-,2-');
  readln(vybor);
  case vybor of
    1: e := leg;
    2: e := gruz;
  end;
  vyvod;
end;

begin
  vvod; 
  vyvod;
  writeln;
  readln
{  poisk; }
end.
p.s. для подобных программ ОЧЕНЬ удобно не вводить данные каждый раз, а ввести их один раз, сохранить в файле и потом читать информацию из файла.

сохранить в файл можно так:
Код:
var f : file of cars;
  i : integer;
begin
  Assign(f, 'cars_d.dat'); 
  Rewrite(f);
  for i:=1 to n do Write(f, spisok[i]); Close(f);
прочитать из файла можно так:
Код:
var f : file of cars;
  i : integer;
begin
  Assign(f, 'cars_d.dat'); Reset(f);
  n := FileSize(f);  for i:=1 to n do Read(f, spisok[i]); Close(f);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 16:19   #3
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Ой, я не заметил что мне ответили . Спасибо за помощь. Сейчас попробую доделать эту задачу. Еще раз спасибо.
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 16:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Всегда пожалуйста.
Если при доделке возникнут вопросы - обращайтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2014, 16:41   #5
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Всегда пожалуйста.
Если при доделке возникнут вопросы - обращайтесь!
Что-то у меня не выходит создать типизированый файл

Последний раз редактировалось Marksman_SwAt; 06.05.2014 в 20:29.
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 17:09   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Смотрите внимательней. Фрагмент программы после слов "сохранить ... можно так..."
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 07.05.2014, 18:03   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Не совсем понял критерии поиска. Каков будет запрос пользователя?
Например, вывести список выбрав только легковые, или те у которых грузоподъёмность более 5 тонн, все авто марки жигули или еще что-то?

Код:
{Условие задачи: Составить список машин, имеющихся в автомагазине, содержащий
марку автомобиля, его пробег и в зависимости от того, является ли автомобиль
грузовым или легковым, указать его грузоподъемность (для грузового) или
вместимость числа пассажиров (для легкового). Составьте программу, которая
обеспечивает ввод полученной информации, вывод ее в виде таблицы. Выведите
на экран меню, а затем информацию об автомобиле в зависимости от запроса
покупателя.}

program t2_v16;
uses
  crt;
type
  tip = (gruz, leg);
  cars = record
    marka: string[25];
    probeg: LongInt;
    case v: tip of
      gruz: (pod: integer);
      leg: (pas: integer);
  end;
const
  Nmax = 10;
var
  spisok: array[1..NMax] of cars;
  n: byte;
  f:file of cars;

procedure Vvod;
var
  i, k: integer;
  vybor: byte;
  marka: string;
begin
  clrscr;
  Assign(f, 'cars_d.dat');
  Reset(f);
  repeat
    WriteLn('Введите количество машин в автопарке (от 1 до ',Nmax,'): ');
    Readln(n);
  until (n>=1) and (n<=Nmax);
  for i:=1 to n do
    with spisok[i] do
      begin
        writeln('Введите данные об автомобиле: ');
        write('1 - легковая, 2 - грузовая ');
        readln(vybor);
        case vybor of
          1: v := leg;
          2: v := gruz;
        end;
      writeln('Марка:');
      readln(marka);
      writeln('Пробег:');
      readln(probeg);
      case v of
        gruz:
          begin {Для грузовых}
            write('Грузоподъемность (в килограммах): ');
            readln(pod);
          end;
        leg:
          begin {Для легковых}
            write('Количество пассажиров: ');
            readln(pas);
          end;
      end;
      seek(f,filesize(f));
      write(f,spisok[i]);

    end;
  Close(f);
end;

procedure vyvod;
var
  i : integer;
  f : file of cars;
begin
  clrscr;
  Assign(f, 'cars_d.dat');
  Reset(f);
  n := FileSize(f);
  for i:=1 to n do
    Read(f, spisok[i]);
  Close(f);

  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
  WriteLn('| Марка                   | Пробег   |  Тип авто | К-во.пас | Грузопод-ть |');
  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
  for i:=1 to n do
    with spisok[i] do
      begin
        write(marka:25,' | ',probeg:8,' | ');
        case v of
          leg:   write('Легковой  | ', pas:8, ' |             |');
          gruz:  write('Грузовой  |          |   ', pod:8, '  |');
        end;
        WriteLn;
      end;
  WriteLn('+-------------------------+----------+-----------+----------+-------------+');
  writeln;
  writeln('Нажмите Enter для возврата в меню.');
  readln;
end;

procedure poisk;
var
  e: tip;
  k: integer;
  vybor: byte;
begin
  write('1-,2-');
  readln(vybor);
  case vybor of
    1: e := leg;
    2: e := gruz;
  end;
  vyvod;
end;

procedure mainMenu;
begin
  clrscr;
  writeln('Программа для работы с клиентами автомагазина.');
  writeln('Выберите пункт');
  writeln('1. Cоздание базы данных (Тестовое!)');
  writeln('2. Добавить запись в базу данных');
  writeln('3. Вывод содержимого на экран');
  writeln('4. Поиск автомобиля');
  writeln('6. Выход');
  writeln();
  write('-> ');
end;

procedure sozd;
var
  f : file of cars;
  i : integer;
begin
  Assign(f, 'cars_d.dat');
  Rewrite(f);
  spisok[1].marka:='Газ АА';
  spisok[1].probeg:=1000000;
  spisok[1].v:=gruz;
  spisok[1].pod:=1500;
  write(f,spisok[1]);
  Close(f);
end;

{---------------main programm}
begin
  while true do
    begin
      mainMenu;
      readln(n);
      case n of
        1: sozd;
        2: vvod;
        3: vyvod;
        4: poisk;
        6: exit;
      end;
    end;
end.
Изображения
Тип файла: jpg 2014-05-07 18-04-27 Free Pascal IDE.jpg (33.3 Кб, 125 просмотров)
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 07.05.2014, 19:27   #8
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Спасибо. Я сегодня сдал все эти задачи( благодаря вам ).
Именно для этой задачи не нужно создавать типизированый файл, но может кому-то пригодится и в таком виде. Спасибо за помощь.
Marksman_SwAt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи Turbo Pascal cdc Помощь студентам 0 21.11.2012 11:37
Записи в Turbo Pascal Грета Паскаль, Turbo Pascal, PascalABC.NET 7 26.12.2011 15:37
Turbo Pascal.Записи Андрюха74 Помощь студентам 7 15.09.2010 14:20
Записи с вариантами в Pascal Rise Помощь студентам 4 31.05.2009 20:45
[PASCAL] записи с вариантами + процедуры die_hard Помощь студентам 4 22.04.2009 16:43