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

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

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

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

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

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

Код:
program AvioBileti;
uses crt;

const size =3 ;

type
          Avio = record
          pynk_naznachenie: integer;
          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);
begin
     for i := 0 to size - 1 do OutRec(m[i]);
end;

procedure Select(adr: string[50]; m: arr_avio);
begin
     for i := 0 to size - 1 do
         if m[i].Data = adr then OutRec(m[i]);
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 := Data[j - 1];
         nomer_reisa[j - 1] := Fremj_poleta[j];
         nomer_reisa[j] := lept;
    end;

  ClrScr;
  OutList(nomer_reisa);
  Write('Введите адрес: ');
  readln(a);
  Select(a,nomer_reisa);

end.
Почему то не хочет запускатся

UPDATE
Код:
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 Select(adr: string; m: arr_avio);
begin
     for i := 0 to size - 1 do
         if m[i].Data = adr then OutRec(m[i]);
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(nomer_reisa);
  Write('ведите дату вылета: ');
  readln(a);
  Select(a,nomer_reisa);

end.
работает

Последний раз редактировалось kinwood; 17.12.2012 в 12:50.
kinwood вне форума Ответить с цитированием
Старый 17.12.2012, 12:03   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Чего, так и говорит: "Не хочу запускаться, идите лесом?"

Ну давай проведем разбор твоих "полетов":

1) Кусок кода:

Код:
procedure OutList(m: arr_avio);
begin
     for i := 0 to size - 1 do OutRec(m[i]);
end;
Компилятор выдает предупреждение о том, что лучше использовать локальную переменную, а i Объявлена глобально. Не ошибка, но может иметь серьезные последствия (например, когда в цикле основной программы, организованном через i, вызовешь эту процедуру - изменится глобальная i). Поэтому делаем так:

Код:
procedure OutList(m: arr_avio);
var k: integer;
begin
     for k := 0 to size - 1 do OutRec(m[k]);
end;
То же самое - в процедуре Select

2) Код:

Код:
procedure Select(adr: string[50]; m: arr_avio);
замени на

Код:
procedure Select(adr: string; m: arr_avio);
Чтоб передать в качестве параметра array [1..10] of integer нужно либо объявлять новый тип (например, TArray) и передавать в процедуру переменную a: TArray либо a: array of integer.
Лимитированные строки в качестве параметра передать нельзя, указывается только общий тип, так как: string[50] = array [1..50] of char.

3) Кусок кода:

Код:
lept := Data[j - 1];
nomer_reisa[j - 1] := Fremj_poleta[j];
Откуда взялись нигде не объявленные Data[j - 1] и Fremj_poleta[j]? Это поля записи, а не самостоятельные элементы массива и обращаться к ним нужно соответственно, то бишь:

Код:
lept := nomer_reisa[j - 1].Data;
nomer_reisa[j - 1].Fremj_poleta := nomer_reisa[j ].Fremj_poleta;
nomer_reisa[j].Data := lept;
Но даже эта запись будет неправильной, так как Data и Fremj_poleta - абсолютно разные поля, и какой сортировки ты хочешь этим добиться - непонятно.

UPDATE Обратил внимание, что lept объявлена как avia. Таким образом, вообще обращение к полям в процедуре перестановки записей не требуется.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.12.2012 в 12:27.
Sciv вне форума Ответить с цитированием
Старый 17.12.2012, 12:12   #3
kinwood
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Чего, так и говорит: "Не хочу запускаться, идите лесом?"
пристал комне неизвестный идентификатор.
Data
kinwood вне форума Ответить с цитированием
Старый 17.12.2012, 12:28   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
пристал комне неизвестный идентификатор.
НА дельфовом компиляторе у меня больше пристало всякого, в том числе пара Warning'ов. И Data в том списке - не последняя ошибка. Разбор смотри выше
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 17.12.2012, 12:35   #5
kinwood
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 25
По умолчанию

Код:
program AvioBileti;
uses crt;

const size =3 ;

type
          Avio = record
          pynk_naznachenie: integer;
          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 Select(adr: string; m: arr_avio);
begin
     for i := 0 to size - 1 do
         if m[i].Data = adr then OutRec(m[i]);
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].Fremj_poleta := nomer_reisa[j ].Fremj_poleta;
          nomer_reisa[j].Fremj_poleta := lept;
    end;

  ClrScr;
  OutList(nomer_reisa);
  Write('Введите адрес: ');
  readln(a);
  Select(a,nomer_reisa);

end.
ошибка что я пытаюсь присвоить к типу стринг рекорд(стринг интджер и так далие.)lept

Последний раз редактировалось kinwood; 17.12.2012 в 12:39.
kinwood вне форума Ответить с цитированием
Старый 17.12.2012, 12:57   #6
kinwood
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 25
По умолчанию

если мне еще нужно вывести по рейсу это будет так?
Код:
procedure Select(adr: string; m: arr_avio);
begin
     for i := 0 to size - 1 do
         if m[i].Nomer_reusa = adr then OutRec(m[i]);
end;
и как в конце это совместить то есть чтоб с начало я вел дату ,а потом номер рейса
Код:
ClrScr;
  OutList(nomer_reisa);
  Write('ведите дату вылета: ');
  readln(a);
  Select(a,nomer_reisa);
 OutList(nomer_reisa);
  Write('введите номер рейса: ');
  readln(a);
  Select(a,nomer_reisa);

Последний раз редактировалось kinwood; 17.12.2012 в 13:00.
kinwood вне форума Ответить с цитированием
Старый 17.12.2012, 13:21   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Написать две процедуры (самое простое в данной ситуации) вместо одного Селекта:

Код:
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;
И вызывать каждую где надо

Второй вариант - переписать стандартный описанный выше Select в более универсальной форме:

Код:
procedure Select(s: string; m: arr_avio; num: byte);
var k: integer;
begin
     for k := 0 to size - 1 do
       case num of
         0: if m[k].Data = s then OutRec(m[k]);
         1: if m[k].Nomer_reusa = s then OutRec(m[k]);
       end;
end;
Третий параметр просто цифрой передает, какое из полей записи сравнивать с первым параметром.

Цитата:
ошибка что я пытаюсь присвоить к типу стринг рекорд(стринг интджер и так далие.)lept
Именно это я и имел в виду в UPDATE на пару постов выше выше
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.12.2012 в 13:30.
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль ABC. Программа на языке Паскаль. Helen1 Паскаль, Turbo Pascal, PascalABC.NET 6 13.01.2018 21:46
Как можно в Паскаль АВС (Паскаль-Турбо) вставлять в результаты печати программы графики, таблицы, схемы, набранные формулы, выраже IZOPGRAM Паскаль, Turbo Pascal, PascalABC.NET 0 11.06.2012 10:54
Паскаль, Борланд Паскаль-в чем разница??? Vremya-Dengy Паскаль, Turbo Pascal, PascalABC.NET 13 31.05.2011 18:23
паскаль и турбо паскаль Евгения Игоревна Помощь студентам 6 05.05.2011 14:31