Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 02.07.2010, 00:04   #1 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию Программа для печати письма студентам, имеющим более трех задолженностей

Уважаемые знатоки помогите решить задачку.

Разработать программу для печати письма студентам, имеющим более трех задолженностей, с предупреждением об отчислении. если "хвосты" не будут сданы до срока X (рекомендуется указать предметы и циклы , по которым имеются задолженности).

вот что смог по памяти набросать, на самое главное можно сказать не смог сделать

Код:
program lab7;
type
    stud=record
               Familiya: string [13];
               um9: string [12];
               Ot4estvo: string [12];
               Pol : string [1];
               DataRojd: string [11];
               gruppa : string [5];
               Matemat : integer;
               fizika: integer;
               istoriya : integer;
               informatika : integer;
               end;
var
   studfile:file of stud;
   recstud: stud;
   i,rej,y:integer;

procedure org;
          begin
               assign (studfile, 'c:/USP.DAT');
               rewrite (studfile);
               with recstud do
               while true do
               begin
                    if y=2
                    then
                    begin
                         close (studfile);
                         exit;
                    end;
                    writeln ('vvedite familiio');
                    readln (familiya);
                    writeln ('vvedite im9');
                    readln (um9);
                    writeln ('vvedite ot4estvo');
                    readln (ot4estvo);
                    writeln ('vvedite pol');
                    readln (pol);
                    writeln ('vvedite daty rojdenia');
                    readln (DataRojd);
                    writeln ('vvedite gryppy');
                    readln (gruppa);
                    for i:=1 to 3 do
                    begin
                    writeln ('matematika');
                    readln (Matemat);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('fizika');
                    readln (fizika);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('istoriya');
                    readln (istoriya);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('informatika');
                    readln (informatika);
                    end;
                    writeln ('prodoljit vvod?  1-da , 2- net');
                    readln (y);
                    write (studfile,recstud);
               end;
          end; {org}

procedure obr;
begin {obr}
assign (studfile, 'c:/USP.DAT');
reset (studfile);
with recstud do
while not eof(studfile) do
begin
     read (studfile, recstud);

     { (matemat,fizika,istoriya,informatika);
     if matemat+fizika+istoriya+informatika<9 then}
     writeln ('|',familiya: 1,'|',um9:4,'|',ot4estvo:12,'|', pol: 2,'|', Datarojd:11,'|',gruppa: 5,'|');

end;
close (studfile);
end; {obr}

procedure korr;
begin {korr}
assign (studfile,'c:/USP.DAT');
reset (studfile);
seek (studfile, filesize(studfile));
with recstud do
while true do
begin
                if y=2
                    then
                    begin
                         close (studfile);
                         exit;
                    end;
                    writeln ('vvedite familiio');
                    readln (familiya);
                    writeln ('vvedite im9');
                    readln (um9);
                    writeln ('vvedite ot4estvo');
                    readln (ot4estvo);
                    writeln ('vvedite pol');
                    readln (pol);
                    writeln ('vvedite daty rojdenia');
                    readln (DataRojd);
                    writeln ('vvedite gryppy');
                    readln (gruppa);
                    for i:=1 to 3 do
                    begin
                    writeln ('matematika');
                    readln (Matemat);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('fizika');
                    readln (fizika);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('istoriya');
                    readln (istoriya);
                    end;
                    for i:=1 to 3 do
                    begin
                    writeln ('informatika');
                    readln (informatika);
                    end;
                    writeln ('prodoljit vvod?  1-da , 2- net');
                    readln (y);
                    write (studfile, recstud);
                    end;
end; {korr}


 begin {prog}
       while true do
       begin
            writeln ('rejimbl');
            writeln ('1: co3danie faila');
            writeln ('2: pokazat ot4isl9emblx');
            writeln ('3: do6avit studentov');
            writeln ('4: Bblxod');
       readln (rej);
       case rej of
       1: org;
       2: obr;
       3: korr;
       4: halt;
       else
       writeln ('error povtorite vvod');
       end;
       end;
 end.
Тёмыч вне форума   Ответить с цитированием

Старый 02.07.2010, 00:04
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Мой вам совет - прочитайте содержимое этих тем

Не работает включение ссылки из письма
Массив записей.(Информация по студентам)

Старый 02.07.2010, 00:12   #2 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию

аа вот еще, что касаемо задачи..
ps а, кстати на турбо паскале надо
Миниатюры
abcd0007.jpg  
Тёмыч вне форума   Ответить с цитированием
Старый 02.07.2010, 09:47   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Темыч, а к какому сроку это надо? Если сегодня, то вряд ли успею, а вот на выходных могу поковыряться. Впрочем, может быть кто-нибудь еще успеет раньше меня.
Сходу одно замечание.
Я бы вместо бесконечного цикла с прерыванием
Код:
while true do
 begin
   if y=2 then
     begin
       close (studfile);
       exit;
     end;
  .................
   writeln ('prodoljit vvod?  1-da , 2- net');
   readln (y);
  .................
 end;
Организовал бы это так:
Код:
Repeat
  .................
  writeln ('prodoljit vvod?  1-da , 2- net');
  readln (y);
  .................
Until y=2;
close (studfile);
Vladimir_S вне форума   Ответить с цитированием
Старый 02.07.2010, 11:25   #4 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию

Да я даже не знаю, вроде бы сегодня надо желательно

еще момент, знаю что в этой процедуре точно бред я написал:
Код:
procedure obr;
begin {obr}
assign (studfile, 'c:/USP.DAT');
reset (studfile);
with recstud do
while not eof(studfile) do
begin
     read (studfile, recstud);

     { (matemat,fizika,istoriya,informatika);
     if matemat+fizika+istoriya+informatika<9 then}
     writeln ('|',familiya: 1,'|',um9:4,'|',ot4estvo:12,'|', pol: 2,'|', Datarojd:11,'|',gruppa: 5,'|');

end;
close (studfile);
end; {obr}
еще, вообще понять не могу, как в один предмет, записать 3 оценки, грубо говоря, это для меня непонятно так же, как в одну ячейку записать 3 значения
Тёмыч вне форума   Ответить с цитированием
Старый 02.07.2010, 11:34   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

И еще вопрос - а что такое в данном случае "цикл"?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 02.07.2010, 11:41   #6 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию

Не знаю если честно, наверно 3 оценки, как то записываются 3мя циклами.
А потом наверно еще и предлагается указать в каком цикле плохая оценка(но я думаю это необязательно даже делать)
Тёмыч вне форума   Ответить с цитированием
Старый 02.07.2010, 11:45   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ладно, попытаюсь сегодня.
Общее количество студентов известно?
Vladimir_S вне форума   Ответить с цитированием
Старый 02.07.2010, 12:07   #8 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Ладно, попытаюсь сегодня.
Общее количество студентов известно?
Общее количество студентов совершенно не важно, так как они предварительно вводятся вручную, т.е. сколько ввел столько и будет.
Тёмыч вне форума   Ответить с цитированием
Старый 02.07.2010, 15:49   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, ну вот что у меня получилось. Я руководствовался сформулированным заданием, а, поскольку там никакие корректировки, упорядочения списка и прочее не значатся, так я это и выбросил. Если это всё-таки нужно, можно ввести такие процедуры.
Код:
program lab7;
const
 Nstud_max=100;
type
    stud=record
               Familiya: string;
               um9: string;
               Ot4estvo: string;
               Pol : Char;
               DataRojd: string;
               gruppa : string;
               Matemat : Array[1..3] of byte;
               fizika: Array[1..3] of byte;
               istoriya : Array[1..3] of byte;
               informatika : Array[1..3] of byte;
               end;
var
   studfile:Text;
   recstud: Array[1..Nstud_max] of stud;
   BadStud:Array[1..Nstud_max] of Word;
   i,j,y,Nstud,Nbadstud:integer;

procedure org;
 Var i:Integer;
 begin
  Append(studfile);
  Repeat
   Inc(Nstud);
   with recstud[Nstud] do
    begin
     Writeln('Student N ',Nstud:3,':');
     writeln ('vvedite familiio (max 10 letters)');
     readln (familiya);
     writeln ('vvedite im9 (max 10 letters)');
     readln (um9);
     writeln ('vvedite ot4estvo (max 10 letters)');
     readln (ot4estvo);
     writeln ('vvedite pol (M/J)');
     readln (pol);
     writeln ('vvedite daty rojdenia');
     readln (DataRojd);
     writeln ('vvedite gryppy (max 4 letters)');
     readln (gruppa);
     for i:=1 to 3 do
      begin
       writeln ('matematika, cycl ',i);
       readln (Matemat[i]);
      end;
     for i:=1 to 3 do
      begin
       writeln ('fizika, cycl ',i);
       readln (fizika[i]);
      end;
     for i:=1 to 3 do
      begin
       writeln ('istoriya, cycl ',i);
       readln (istoriya[i]);
      end;
     for i:=1 to 3 do
      begin
       writeln ('informatika, cycl ',i);
       readln (informatika[i]);
      end;
     write (studfile,familiya);
     for i:=Length(familiya)+1 to 11 do Write(studfile,' ');
     write (studfile,'|'+um9);
     for i:=Length(um9)+1 to 11 do Write(studfile,' ');
     write (studfile,'|'+ot4estvo);
     for i:=Length(ot4estvo)+1 to 11 do Write(studfile,' ');
     write (studfile,'|',pol,'|',DataRojd);
     for i:=Length(DataRojd)+1 to 10 do Write(studfile,' ');
     write (studfile,'|'+gruppa);
     for i:=Length(gruppa)+1 to 4 do Write(studfile,' ');
     Write(studfile,'|');
     for i:=1 to 2 do write(studfile,Matemat[i],' ');
     write(studfile,Matemat[3],'|');
     for i:=1 to 2 do write(studfile,fizika[i],' ');
     write(studfile,fizika[3],'|');
     for i:=1 to 2 do write(studfile,istoriya[i],' ');
     write(studfile,istoriya[3],'|');
     for i:=1 to 3 do write(studfile,informatika[i],' ');
    end;
   WriteLn(studfile);
   write('prodoljit vvod?  1-da , 2- net ');
   readln(y);
  Until y=2;
 end; {org}


begin {prog}
 Nstud:=0;
 assign (studfile, 'C:/USP.DAT');
 rewrite (studfile);
 writeln (studfile,
' familiya     um9       ot4estvo    p  Datarojd grup. Matem  fiz.  ist. inf.');
 Writeln(studfile);
 org;
 Close(studfile);
 assign (studfile, 'C:/NEW.DAT');
 rewrite (studfile);
 Nbadstud:=0;
 For i:=1 to Nstud do
  begin
   with recstud[i] do
    begin
     y:=0;
     for j:=1 to 3 do
      if (Matemat[j]=2) or (fizika[j]=2)
         or (istoriya[j]=2) or (informatika[j]=2) then y:=1;
    end;
   If y=1 then
    begin
     INC(Nbadstud);
     BadStud[Nbadstud]:=i;
    end;
  end;

 For i:=1 to NbadStud do
  with recstud[BadStud[i]] do
   begin
    If pol='M' then Write(studfile, 'Dorogoy student ') else
    Write(studfile, 'Dorogaya studentka ');
    WriteLn(studfile, 'gruppy '+gruppa+' '+Familiya+' '+um9+' '+Ot4estvo+'!');
    WriteLn(studfile,'Soobshchaem Vam, chto u Vas imejutsa zadoljennosti po sledujushchim');
    WriteLn(Studfile,'discyplinam i cyclam:');
    for j:=1 to 3 do
     if Matemat[j]=2 then
       Writeln(studfile,'Matematika, cycl N',j);
     for j:=1 to 3 do
      if fizika[j]=2 then
       Writeln(studfile,'Fizika, cycl N',j);
     for j:=1 to 3 do
      if istoriya[j]=2 then
       Writeln(studfile,'Istoria, cycl N',j);
     for j:=1 to 3 do
      if informatika[j]=2 then
       Writeln(studfile,'Informatika, cycl N',j);
    Writeln(studfile,'V sluchae, esli Vy ne perezdadite ukazannyje predmety');
    Writeln(studfile,'v techenije 10 dney, Vy budete OTCHISLENY.');
    Writeln(studfile);
   end;
  Close(studfile);
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.07.2010, 16:50   #10 (permalink)
Тёмыч
WrighT
 
Аватар для Тёмыч
 
Регистрация: 21.11.2006
Сообщений: 1,881
Записей в дневнике: 1
Сказал(а) спасибо: 4
Поблагодарили 8 раз(а) в 2 сообщениях
Репутация: 1570
По умолчанию

чет выдает ошибку

....................
var
studfile:Text;
recstud: Array[1..Nstud_max] of stud;
BadStud:Array[1..Nstud_max] of Word;
i,j,y,Nstud,Nbadstud:integer;

........................перед красной ставит курсор и пишет: Error 22: Structure too large.
Тёмыч вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:46.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.