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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 04:25   #1
Liver
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 10
По умолчанию Маленькие косяки в курсовой

Задание:
Создать типизированный файл, записать туда 20 нужных записей. Составить программу назначения стипендии студентам по результатам сессии,используя следующие правила:
*если все оценки - 5,назначается повышенная стипендия;
*если все оценки - 4 и 5,назначается обычная стипендия;
*если есть оценка 3,стипендия не назначается.
В результате работы программы должен быть напечатан список группы с оценками и средними баллами каждого студента и два списка фамилий(назначенных на повышенную и на обычную стипендию).


Вот что я сделал:
Код:
type ses=record
fam:string[25];
z1,z2,z3,z4,z5:integer;
end;

var p:ses;
f:file of ses;
x:integer;
st:string[1];

procedure vv(var z:ses);
  begin
    writeln('vvedite familiy');readln(z.fam);
    if z.fam<>'' then begin
    writeln('vvedite ocenky 1-go ekzamena'); readln(z.z1);
    writeln('vvedite ocenky 2-go ekzamena'); readln(z.z2);
    writeln('vvedite ocenky 3-go ekzamena'); readln(z.z3);
    writeln('vvedite ocenky 4-go ekzamena'); readln(z.z4);
    writeln('vvedite ocenky 5-go ekzamena'); readln(z.z5);
   end; end;
procedure sozd;
 begin
 rewrite(f);
   close(f);
  end;
procedure app;
  var z:ses; n:longint;
  begin
    reset(f);
    n:=filesize(f);
    seek(f,n);
    repeat
      writeln('Vvedi fam');
      readln(p.fam);
       writeln('Vvedi ocenky1');
      readln(p.z1);
       writeln('Vvedi ocenky2');
      readln(p.z2);
       writeln('Vvedi ocenky3');
      readln(p.z3);
       writeln('Vvedi ocenky4');
      readln(p.z4);
       writeln('Vvedi ocenky5');
      readln(p.z5);
      write(f,p);
      writeln('Prodolgit y/n?');
      readln(st);
    until st='n';
      close(f);
      end;
procedure prosm;
var z:ses; sr:real;
begin
    reset(f);
    writeln('familia':25,'1-i pr':7,'2-i pr':7,'3-i pr':7,'4-i pr':7,
    '5-i pr':7,'sredn bal':10);
    while not eof(f) do begin
      read(f,p);
      sr:=(p.z1+p.z2+p.z3+p.z4+p.z5)/5;
      writeln(p.fam:25,p.z1:7,p.z2:7,p.z3:7,p.z4:7,p.z5:7,sr:10:2);
      end;
      close(f);
end;
procedure stipendii;
  begin
     reset(f);
     seek(f,0);
     writeln('familii na povisennyu stipendiu');
    while not eof(f) do begin
      read(f,p);
      if (p.z1=5) and (p.z2=5) and (p.z3=5) and (p.z4=5) and (p.z5=5)
      then writeln(p.fam);
      end;
      seek(f,0);
      writeln('familii na obicnyy stipendiu');
    while not eof(f) do begin
      read(f,p);
      if (p.z1>=4) and (p.z2>=4) and (p.z3>=4) and (p.z4>=4) and (p.z5>=4)
      then writeln(p.fam);
      end;
      seek(f,0);
      writeln('Stipendia ne naznachaetsa');
      while not eof(f) do begin
      read(f,p);
      if (p.z1<=3) and (p.z2<=3)and (p.z3<=3) and (p.z4<=3)and (p.z5<=3)
      then writeln(p.fam);
      end;
      close(f);
      end;


//-----------------------------------------------------------------------

  begin
  assign(f,'sessia.dot');
    repeat
    writeln('viberite nujnii punkt menu');
    writeln('1-cozdanie faila');
    writeln('2-popolnenie faila');
    writeln('3-svedenia o vsex');
    writeln('4 stipendii');
    writeln('5- vixod');
    readln(x);
    case x of
    1:sozd;
    2:app;
    3:prosm;
    4:stipendii;
      end;
     until x=5;
     end.
Но когда я делаю запрос на стипендию, то он людей с повышенной стипендией заносит и на повышенную и на обычную. Если вводишь все оценки 3 то он выдает человека у которого не будет стипендии, НО если вводишь одну или несколько оценок 3 ,а остальные вводишь 4 или 5 то он этого человека вообще ни к какой группе не относит.

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

Цитата:
о он людей с повышенной стипендией заносит и на повышенную и на обычную
Наверное потому что и там и там в условиях у тя равно есть
Вот смотри:
Цитата:
if (p.z1=5) and (p.z2=5) and (p.z3=5) and (p.z4=5) and (p.z5=5)
...
if (p.z1>=4) and (p.z2>=4) and (p.z3>=4) and (p.z4>=4) and (p.z5>=4)
Убери равно во вотором условии.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2009, 12:35   #3
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
Убери равно во вотором условии.
Тогда не будут учитываться студенты в которых есть оценки 4 и 5. Просто извторого списка необходимо исключить студентов о которых оценки только одни 5.
Код:
if (p.z1>=4) and (p.z2>=4) and (p.z3>=4) and (p.z4>=4) and (p.z5>=4)  
and not ((p.z1=5) and (p.z2=5) and (p.z3=5) and (p.z4=5) and (p.z5=5))
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Косяки с правой кнопкой мыши joker Общие вопросы Delphi 4 12.11.2008 13:25
Косяки со вставкой в эдит joker Общие вопросы Delphi 1 14.09.2008 09:00
поменять большие буквы на маленькие и маленькие на большие в си++ Барби Помощь студентам 4 08.04.2008 01:25
косяки с RegQueryValueEx joker Win Api 12 04.04.2008 17:06
Буквы большие и маленькие alekscooper Microsoft Office Excel 1 12.04.2007 23:12