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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2013, 06:32   #1
kinwood
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 25
По умолчанию Paskal Type

Код:
program AvioBileti;
uses crt;

const size =2 ;

type
          Avio = record
          pynk_naznachenie: string;
          Nomer_reusa: integer;
          Fio: string;
          Data: string;
          Fremj_poleta: string;
          end;

    arr_Avio = array [0..size - 1] of Avio;

var nomer_reisa: arr_Avio;
    j,i: integer;
    lept: avio;
    a: string;
    procedure OutRec(m: avio);
begin
     with m do
     begin
          writeln('Билет № : ', i + 1);
          writeln('Пункт назначения: ',pynk_naznachenie);
          writeln('ФИО пассажира: ',Fio);
          writeln('Дата вылета: ',Data);
          writeln('№ рейса: ',Nomer_reusa);
          writeln('Время полета: ',Fremj_poleta);
          writeln;
     end;
end;

procedure OutList(m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do OutRec(m[k]);
end;


procedure SelectDate(dat: string; m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do
         if m[k].Data = dat then OutRec(m[k]);
end;

procedure SelectNR(nr: string; m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do
         if m[k].Nomer_reusa =nr  then OutRec(m[k]);
end;

begin
  ClrScr;
  for j := 0 to size - 1 do
  begin
    writeln('введите сведения о ', j+1 , ' билете.');
    write('Пункт назначяения: ');
    readln(nomer_reisa[j].pynk_naznachenie);
    write('введите № рейса: ');
    readln(nomer_reisa[j].Nomer_reusa);
    write('введите ФИО пассажира: ');
    readln(nomer_reisa[j].Fio);
    write('введите дата вылета: ');
    readln(nomer_reisa[j].Data);
    write('введите время полета: ');
    readln(nomer_reisa[j].Fremj_poleta);
  end;
  Writeln('порядке возрастания времени полета');

  for i := 1 to size - 1 do
   for j := size - 1 downto i do
    if nomer_reisa[j - 1].Fremj_poleta > nomer_reisa[j].Fremj_poleta then
    begin
          lept := nomer_reisa[j - 1];
          nomer_reisa[j - 1] := nomer_reisa[j];
          nomer_reisa[j] := lept;
    end;

  ClrScr;
  OutList(data);
  Write('ведите дату вылета: ');
  readln(a);
  SelectDate(a,nomer_reisa);
  OutList(nomer_reisa);
  Write('ведите номер рейса : ');
  readln(r);
  SelectDate(r,nomer_reisa);

end.
ошибка
kinwood вне форума Ответить с цитированием
Старый 16.01.2013, 06:33   #2
kinwood
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 25
По умолчанию

все работало пока не поставил 2 процедуру.
kinwood вне форума Ответить с цитированием
Старый 16.01.2013, 15:19   #3
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Вообщем, я немного подкорректировал, а так почти все правильно было сделано, были глупые ошибки (сравнивал real и integer, не описал переменную и т.д.). Так что если я все правильно понял в задании то:
Код:
program AvioBileti;
uses crt;

const size =2 ;

type
          Avio = record
          pynk_naznachenie: string;
          Nomer_reusa: integer;
          Fio: string;
          Data: string;
          Fremj_poleta: string;
          end;

    arr_Avio = array [0..size - 1] of Avio;

var nomer_reisa: arr_Avio;
    j,i,r,choice: integer;
    lept: avio;
    a: string;
    procedure OutRec(m: avio; k: integer);
begin
     with m do
     begin
          writeln('Билет № : ', k + 1);
          writeln('Пункт назначения: ',pynk_naznachenie);
          writeln('ФИО пассажира: ',Fio);
          writeln('Дата вылета: ',Data);
          writeln('№ рейса: ',Nomer_reusa);
          writeln('Время полета: ',Fremj_poleta);
          writeln;
     end;
end;

procedure OutList(m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do OutRec(m[k],k);
end;


procedure SelectDate(dat: string; m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do
         if (m[k].Data = dat) then OutRec(m[k],k);
end;

procedure SelectNR(nr: integer; m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do
         if (m[k].Nomer_reusa = nr)  then OutRec(m[k],k);
end;

procedure Wait; 
begin
repeat until KeyPressed 
end;

begin
  ClrScr;
  for j := 0 to size - 1 do
  begin
    writeln('введите сведения о ', j+1 , ' билете.');
    write('Пункт назначяения: ');
    readln(nomer_reisa[j].pynk_naznachenie);
    write('введите № рейса: ');
    readln(nomer_reisa[j].Nomer_reusa);
    write('введите ФИО пассажира: ');
    readln(nomer_reisa[j].Fio);
    write('введите дата вылета: ');
    readln(nomer_reisa[j].Data);
    write('введите время полета: ');
    readln(nomer_reisa[j].Fremj_poleta);
  end;
  Writeln('порядке возрастания времени полета');

  for i := 1 to size - 1 do
   for j := size - 1 downto i do
    if nomer_reisa[j - 1].Fremj_poleta > nomer_reisa[j].Fremj_poleta then
    begin
          lept := nomer_reisa[j - 1];
          nomer_reisa[j - 1] := nomer_reisa[j];
          nomer_reisa[j] := lept;
    end;

  While (true) do
  begin
    ClrScr;
    Writeln('Выберите критерий поиска: 1 - По дате. 2 - По номеру рейса. 3 - Выход.');
    Write('Ваш выбор: ');
    Readln(choice);
    If (choice = 1) then
    begin
      Write('Введите дату вылета: ');
      readln(a);
      Writeln('');
      Writeln('Информация о рейсах за ',a,':');
      Writeln('');
      SelectDate(a,nomer_reisa);
      Writeln('________________________________________');
      Write('Для продолжения нажмите любую клавишу...');
      wait;
    end
    else If (choice = 2) then
      begin
        Write('Введите номер рейса : ');
        readln(r);
        Writeln('');
        Writeln('Информация о рейсах с номером ',r,':');
        Writeln('');
        SelectNR(r,nomer_reisa);
        Writeln('________________________________________');
        Write('Для продолжения нажмите любую клавишу...');
        wait;
      end
    else If (choice = 3) then break
    else
    begin
      Writeln('Вы ввели не верную информациюв');
      Writeln('________________________________________');
      Write('Для продолжения нажмите любую клавишу...');
      wait;
    end;
  end;

end.
Не забываем про весы.
KooKish вне форума Ответить с цитированием
Старый 16.01.2013, 16:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

и в чём вопрос то?!


есть несколько неприятных моментов в вашем коде.
1) в таких задачах принятно использовать типизированный файл
заполнять записи (читай "БД") каждый раз при запуске программы - удовольствие, прямо скажем, ниже среднего.

2) вы зря выбрали для даты вылета и, особенно, для времени полёта строковые поля. Мало того, что туда можно внести мусор, так и сортировка по времени полёта у Вас будет работать неправильно.
попробуйте задать время полёта 1 час 3 часа и 15 часов - вы будете удивлены результом работы Вашей программы.

3) задание Вы своё не привели. Но, поскольку в коде программы то, что Вы даёте возможность сделать пользователю, достаточно наглядно, то, в целом, на мой взгляд, могу Вас поздравить, в первом приближении Вы задание выполнили.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2013, 17:00   #5
KooKish
Улыбаемся :)
Пользователь
 
Регистрация: 18.12.2012
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и в чём вопрос то?!


есть несколько неприятных моментов в вашем коде.
1) в таких задачах принятно использовать типизированный файл
заполнять записи (читай "БД") каждый раз при запуске программы - удовольствие, прямо скажем, ниже среднего.

2) вы зря выбрали для даты вылета и, особенно, для времени полёта строковые поля. Мало того, что туда можно внести мусор, так и сортировка по времени полёта у Вас будет работать неправильно.
попробуйте задать время полёта 1 час 3 часа и 15 часов - вы будете удивлены результом работы Вашей программы.

3) задание Вы своё не привели. Но, поскольку в коде программы то, что Вы даёте возможность сделать пользователю, достаточно наглядно, то, в целом, на мой взгляд, могу Вас поздравить, в первом приближении Вы задание выполнили.
Согласен ! Вводить каждый раз с клавиатуры ужасно. И про типы вводимых данных тоже согласен, но я делал что бы работало. Надеюсь остальное господин kinwood подправит сам. Хорошие замечания ! И для меня в том числе...
Не забываем про весы.
KooKish вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Could not convert variant of the type (String) into type (Boolean) Silly Student C++ Builder 0 19.11.2011 13:06
Отличие type T = Object от type T = Class? Warn Общие вопросы Delphi 8 04.11.2011 19:20
paskal abc,turbo paskal andrei57 Паскаль, Turbo Pascal, PascalABC.NET 3 08.09.2011 05:33
Could not convert variant of type (Olestr) into type (Double) java_91 Общие вопросы Delphi 1 18.02.2011 18:46
Could not convert variant of type (UnicodeString) into type (Double) postaveche БД в Delphi 11 13.12.2010 16:41