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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 13:06   #1
alexeu121
 
Регистрация: 22.04.2014
Сообщений: 7
По умолчанию Записи вариантами.

Ввести репертуар театров, содержащий название театра, дата, спектакль, автор, тип спектакля (детский – для какого
возраста; взрослый – пьеса, драма, комедия; музыкальный – композитор). Вывести список всех комедий.

Помогите пожалуйста, или подскажите как начать.
alexeu121 вне форума Ответить с цитированием
Старый 22.05.2014, 13:09   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://programmersforum.ru/showthrea...ED%F2%E0%EC%E8
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 22.05.2014, 16:32   #3
alexeu121
 
Регистрация: 22.04.2014
Сообщений: 7
По умолчанию

Вот что пока получилось, проверьте пожалуйста.

Код:
program t2_v13;
type  tipspect = (det, vzrosl, musical);
teatr = record
nazv:string[20];
data: integer;
spectacl: string[20];
avtor:string[20];
case v: tipspect of
   det: (vozr: integer);
   vrosl: (piessa, drama, komedia : string[20]);
   musical: (kompozit: string[20]);
   end;
const Nmax = 10;
var repertyar: array[1..Nmax] of teatr;
n: byte;

procedure vvod;
var
    i,k: integer;
    vybor: byte;
    nazv: string;
begin
     repeat
     Writeln('Введите кол-во театров (от 1 до ',Nmax,'): ');
     readln(n);
     until (n>=1) and (n<=Nmax);
     for i:=1 to n do
     with repertyar[i] do
     begin
     writeln('Введите данные о спектакле: ');
     write('1 - детский, 2- взрослый, 3 - музыкальный');
     readln(vybor);
     case vybor of
     1: v := det;
     2: v := vzrosl;
     3: v := musical;
     end;
        writeln('Название:'); readln(nazv);
        writeln('Дата:'); readln(data);
        case v of
        
        det: begin write('Возраст:');
        readln(vozr);  end;
        
        vzrosl: begin  write('Пьеса');
        readln(piessa); write('Драма:'); readln(drama);
        write('Комедия:'); readln(komedia);
        end;
        
        musical: begin write('Композитор:'); readln(kompozit);
        end;
end;

procedure vyvod;
var i: integer;
begin
      WriteLn('+-------------------------+----------+-----------+----------+---------------+----------------------------+');
      WriteLn('| Название театра         |   Дата   | Спектакль |  Автор   | Тип спектакля |  тип взрослого спектакля   |');
      WriteLn('+-------------------------+----------+-----------+----------+---------------+----------------------------+');
      for i:=1 to n do
      with repertyar[i] do
      begin
           write(nazv:25,'|',data:8,'|');
           case v of
             det: write('Детский  |', vozr:8, ' |            |');
             vzrosl: write('Пьеса,')
alexeu121 вне форума Ответить с цитированием
Старый 22.05.2014, 16:35   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Не до конца текст программы.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 26.05.2014, 20:44   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых,
Цитата:
Код:
type  tipspect = (det, vzrosl, musical);
teatr = record
nazv:string[20];
data: integer;
spectacl: string[20];
avtor:string[20];
case v: tipspect of
   det: (vozr: integer);
   vrosl: (piessa, drama, komedia : string[20]);
найдите отличия в выделенных словах

во-вторых, если Вы сделаете так, как написали, то, в случае взрослого спектакля будет ОДНОВРЕМЕННО ТРИ поля: piessa, drama, komedia (к тому же каждое из полей хранит строковое значение. Зачем?!!)

думаю, что ожидалось что-то вроде:
Код:
type  
  tipspect = (det, vzrosl, musical);
  TJanr = (piessa, drama, komedia);
teatr = record
  nazv:string[20];
  data: integer;
  spectacl: string[20];
  avtor:string[20];
  case v: tipspect of
    det: (vozr: integer);
    vzrosl: (janr : TJanr);
    musical: (kompozit: string[20]);
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.05.2014, 21:22   #6
alexeu121
 
Регистрация: 22.04.2014
Сообщений: 7
По умолчанию

Спасибо за сиправления и вообще за помощь. А для чего переменные janr, tjanr? Для вариантов взрослого спектакля? Не совсем понял.
alexeu121 вне форума Ответить с цитированием
Старый 26.05.2014, 21:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

tjanr - это мы описали перечисляемый тип. (точно так же, как Вы тип спектался описывали, см. tipspect)
не нравится tjanr, напишите, VID_JANRA_VZROSLOGO

то, что перечислено - это значение, которые может принимать переменная данного типа.

а в описании взрослого спекталя мы вводим переменную, которая обозначает жанр спекталя:
Код:
  repertyar[1].v :=  vzrosl;
  repertyar[1].janr :=  komedia;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.05.2014, 10:26   #8
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
{Ввести репертуар театров, содержащий название театра, дата, спектакль, автор,
тип спектакля (детский - для какого возраста; взрослый - пьеса, драма, комедия;
музыкальный - композитор). Вывести список всех комедий.}
uses
  crt;
type
  tipspect = (det, vzrosl, musical);
  TJanr = (piessa, drama, komedia);
  teatr = record
    nazv:string[30];
    data: integer;
    spectacl: string[30];
    avtor:string[30];
    case v: tipspect of
      det: (vozr: integer);
      vzrosl: (janr : TJanr);
      musical: (kompozit: string[30]);
    end;

const
  Nmax = 10;
var
  repertyar: array[1..Nmax] of teatr;
  q,n: integer;
  genre:TJanr;

procedure vvod;
var
  i,k: integer;
  vybor: byte;
  nazv: string;
begin
  clrscr;
  repeat
    Write('Введите количество театров (от 1 до ',Nmax,'): ');
    readln(n);
    until (n>=1) and (n<=Nmax);
    for i:=1 to n do
      with repertyar[i] do
        begin
          writeln('Введите данные о театре: ');
          write('Название: '); readln(nazv);
          writeln('Введите данные о спектакле: ');
          write('Название спектакля: '); readln(spectacl);
          write('Автор спектакля: '); readln(avtor);
          write('Дата проведения:'); readln(data);
          write('1 - детский, 2 - взрослый, 3 - музыкальный.');
          readln(vybor);
          case vybor of
            1: v := det;
            2: v := vzrosl;
            3: v := musical;
          end;
          case v of
            det:
              begin
                write('Возраст:');
                readln(vozr);
              end;
            vzrosl:
              begin
                Write('Тип взрослого спектакля (1 - пьеса, 2 - драма, 3 - комедия):');
                readln(q);
                case q of
                  1: janr:= piessa;
                  2: janr:= drama;
                  3: janr:=komedia;
                end;
              end;
            musical:
              begin
                write('Композитор:');
                readln(kompozit);
              end;
          end;
       end;
end;

procedure vyvod;
var
  i: integer;
begin
  clrscr;
  for i:=1 to n do
    with repertyar[i] do
      begin
      if janr=komedia then
      begin
        write('Название театра: ');
        writeln(nazv);
        write('Дата проведения спектакля: ');
        writeln(data);
        write('Название спектакля: ');
        writeln(spectacl);
        write('Автор: ');
        writeln(avtor);
        writeln('Тип спектакля:');
        case v of
           det: writeln('Детский, возраст: ',vozr);
           vzrosl:
             case janr of
               piessa: writeln('Взрослый, пьеса: ');
               drama: writeln('Взрослый, драма: ');
               komedia: writeln('Взрослый, комедия: ');
             end;
           musical: write('Музыкальны, композитор: ',kompozit);
           end;
      end;
    end;  
end;
begin
  vvod;
  vyvod;
  readln;
end.
Изображения
Тип файла: jpg 2014-05-28 10-24-12 Free Pascal IDE.jpg (22.0 Кб, 134 просмотров)
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи. Записи с вариантами. Turbo Pascal Marksman_SwAt Помощь студентам 7 07.05.2014 19:27
Записи с вариантами megabobik Помощь студентам 0 31.01.2010 16:17
Записи с вариантами в Pascal Rise Помощь студентам 4 31.05.2009 20:45
[PASCAL] записи с вариантами + процедуры die_hard Помощь студентам 4 22.04.2009 16:43
Помогите пожалуйста. Записи с вариантами. Паскаль. Сирёго Паскаль, Turbo Pascal, PascalABC.NET 6 26.02.2008 21:30