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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2009, 07:49   #1
d_b
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 10
Восклицание Pascal. Тип запись

Сформировать запись, имеющую следующую структуру
type преподаватель=record фамилия:string;
предмет:string;
факультет:string;
курс:1..5;
количество часов:integer;
end;
и определить:
преподавателя имеющего самую большую нагрузку;
список предметов, которые читает данный преподаватель;
объем часов на данном факультете и данном курсе.

Код:
uses crt;
type prepod = record
     name : string;
     predmet : string;
     fakultet : string;
     kurs : 1..5;
     kol_4as : byte;
end;
var Y: array [1 .. 50] of prepod;
     i, j, k, n, m, c, max : byte;
     a, b:string;
BEGIN
        clrscr;
        write ('KoJIu4ecTBo npenogaBaTeJIeu = ') ;
        readln (n) ;
for i := 1 to n do
    with Y[i] do
    begin
        writeln ('BBeguTe CBEgeHu9 o ',i,'-oM npenogaBaTeJIe : ');
        write ('faMuJIu9 - ');
        readln (name);
        write ('npegMeT - ');
        readln (predmet);
        write ('FaKyJIbTeT - ');
        readln (fakultet);
        write ('Kypc - ');
        readln (kurs);
        write ('KoJIu4eCTBo 4acoB npoBoguMbIx 3aH9Tuu - ');
        readln (kol_4as);
        writeln ('-----------------------------------------------');
    end;
{npegMeTbI}
        write ('npegMeT KaKoro npenoga xoTuTe y3HaTb? - ');
        readln (a);
for i := 1 to n do
    with Y[i] do
if name = a then
        write (predmet);
        readln;
{Harpy3Ka}
        max := 1;
for i := 2 to n do
    if Y[i].kol_4as>Y[max].kol_4as then max := i;
        write ('CaMa9 6oJIbLLIa9 Harpy3Ka y ',Y[max].name);
        readln;
{o6 4acoB}
        write ('BBeguTe FaKyJIbTeT - ');
        readln (b);
        write ('BBeguTe Kypc - ');
        readln (c);
for i := 1 to n do
    with Y[i] do
if (fakultet = b) and (kurs = c) then
        write ('o6beM 4acoB = ',kol_4as);
        readln;
END.
Суть в том что к препода может быть несколько предметов на разных факультетах и курсах . Подскажите пожалуйста как это сделать. Я пробовал через двумерный массив, не че не получается (((
Спасибо

Последний раз редактировалось Stilet; 24.02.2009 в 09:09.
d_b вне форума Ответить с цитированием
Старый 24.02.2009, 09:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так тебе нужно получить для каждого препода кол-во предметов( часов), ну яб так сделал: в отдельный массивчик двумерный вводил - первый параметр - препод. Потом прошелся бы по твоим записям и во вторую ячейку массива с таким-то преподом поплюсовал нагрузку часов на текуший предмет, а далее в цикле просто бы нашел максимум этого массива.
Надеюсь не очень туманно пояснил...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2009, 19:17   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Эта структура, которую Вы привели обязательная, или это Вы так решили?
Дело в том, что такой структурой задачу не решить, т.к. у каждого препода будет по одному предмету, одному факультету, одному курсу.
puporev вне форума Ответить с цитированием
Старый 25.02.2009, 07:25   #4
d_b
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 10
По умолчанию

Да, обязательная. Решить надо обязательно с записями. Тем не менее спасибо, но у меня такой препод что его в Ваших словах фиг убедишь, буду убеждать
d_b вне форума Ответить с цитированием
Старый 25.02.2009, 08:42   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Да, обязательная. Решить надо обязательно с записями.
Понятно что с записями, я имею ввиду приведенная структура записи обязательная или нет.
puporev вне форума Ответить с цитированием
Старый 27.02.2009, 08:23   #6
d_b
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 10
По умолчанию

структура не обязательная
d_b вне форума Ответить с цитированием
Старый 27.02.2009, 14:07   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот, что то соорудил.
Сделал такую структуру:
массив преподавателей;
у каждого преподавателя до 5 предметов;
каждый предмет может быть на 1-5 факультетах;
на каждом факультете 5 курсов.
Код:
uses crt;
const nmax=20;{максимальное количество преподавателей}
type Tfak=record {тип запись факультет}
          nam:string[20];{название}
          chs:array[1..5]of integer;{массив количеств часов на каждом курсе по 1 предмету}
          csf:integer;{общее количество часов на факультете по 1 предмету}
          end;
     Tprdm=record {тип запись предмет}
           nam:string[20];{название}
           kl:1..5;{на скольких факультетах}
           fak:array[1..5] of Tfak;{данные по факультету}
           csp:integer;{общее количество часов по предмету}
           end;
     Tprep=record {тип запись преподаватели}
           fam:string[20]; {фамилия}
           kol:1..5; {количество преподаваемых предметов}
           prd:array[1..5]of Tprdm;{сведения по предметам}
           scs:integer;{общее количество часов}
           end;
var sp:array[1..nmax] of Tprep; {}
    n,i,j,k,l,imax:byte;
    max:integer;
begin
clrscr;
repeat
write('Kolichestvo prepodavatelej n=');
readln(n);
until (n>0)and(n<=nmax);
writeln('Vvedite dannye:');
for i:=1 to n do
   begin
     writeln('Prepodavatel ',i);
     with sp[i] do {сведения об одном преподавателе}
       begin
         write('  Familia: ');readln(sp[i].fam);
         write('  Kolichestvo predmetov: ');readln(sp[i].kol);
         scs:=0;
         for j:=1 to kol do
           begin
             with prd[j] do {сведения об одном предмете}
               begin
                write('   Predmet ',j,': ');readln(nam);
                write('   Kolichestvo fakultetov: ');
                readln(kl);
                csp:=0;
                for k:=1 to kl do
                  begin
                    with fak[k] do {сведения об одном факультете}
                      begin
                        write('    Fakultet: ');readln(nam);
                        csf:=0;
                        for l:=1 to 5 do
                          begin
                            write('     Kolichestvo chasov na ',l,' kurse');
                            readln(chs[l]);
                            csf:=csf+chs[l];{количество часов по предмету на 1 факультете}
                          end;
                      end;
                    csp:=csp+fak[k].csf;{количество часов по 1 предмету}
                  end;
                scs:=scs+sp[i].prd[j].csp;{общее количество часов 1 преподавателя}
               end;
            end;
        end;
    end;
max:=0;
for i:=1 to n do
if sp[i].scs>max then
  begin
    max:=sp[i].scs; {максимальное число часов у преподавателя}
    imax:=i;{его номер в массиве}
  end;
{ну, дальше думаю понятно. Вывод можно подформатировать, чтоб красивше было}
writeln;
writeln('Samuyu bolshuyu nagruzku imeet ',sp[imax].fam);
writeln('Ona sostavlyaet ',sp[imax].scs,' chas');
writeln;
writeln('On vedet predmety:');
with sp[imax] do
for i:=1 to kol do
writeln('  ',prd[i].nam);
writeln;
writeln('Objem chasov po fakultetam i kursam:');
with sp[imax] do
  begin
   for i:=1 to kol do
    with prd[i] do
     begin
      for j:=1 to kl do
        begin
         writeln('Fakultet ',fak[j].nam,' ',fak[j].csf);
         with fak[j] do
         for k:=1 to 5 do
         writeln('  Kurs ',k,' ',chs[k]);
       end;
     end;
   end;
readln
end.
puporev вне форума Ответить с цитированием
Старый 27.02.2009, 20:13   #8
d_b
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 10
По умолчанию

puporev, спасибо тебе огромное ))) структура классная до меня чет так не доперло ) спасибо!!!
d_b вне форума Ответить с цитированием
Старый 02.03.2009, 08:04   #9
d_b
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 10
По умолчанию

Копеццц ((( не правильно понял задание ( поздно дошло, надо чтобы выводило список предметов не того у кого макс нагрузка а любого, т.е. вводишь препода он те выдеёт его предметы, с факультетом и курсом то же самое(((
d_b вне форума Ответить с цитированием
Старый 02.03.2009, 08:46   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну так переделай. После вывода максимального, сделай запрос
Код:
write('Familia: ');
readln(fm);
k:=0;
for i:=1 to n do
if sp[i].fam=fm then 
   begin
     k:=1;
и далее все как для максимального.
   end;
if k=0 then write('Takogo prepodavatelya net!');
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внести в задачу пару условий,пожалуйста помогите(Pascal-record)тип записи... Andrux Помощь студентам 2 15.02.2009 17:51
Pascal. Тип record deu4er Помощь студентам 10 11.02.2009 04:19
Pascal Перевод в Польскую запись ЮнПрог Помощь студентам 3 29.12.2008 13:51
Множественный тип данных/Pascal ромка) Паскаль, Turbo Pascal, PascalABC.NET 3 31.05.2008 18:53
тип запись связист Помощь студентам 5 13.12.2006 08:59