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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 18:24   #1
mrRastom
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 16
Сообщение Pascal распечатать фамилии хорошистов и отличников, указать разницу их среднего балла и сред балла класса

Здравствуйте.
Задание:

Цитата:
Распечатать фамилии тех учеников класса, которые являются хорошистами и отличниками по итогам года. Также указать, насколько их средний балл отличается от среднего балла класса.
Вот, что я написал:

Код:
Uses crt;
Type student=record
            name:string[20];
            sred:real;
            end;
Var oc:array[1..30,1..8]of integer;
      st:array[1..30]of student;      
      i,j,n,k:integer;
      kolvoH, sredK,sredH,raznica:real;
Begin
ClrScr;
  write('Количество учеников: ');
  readln(n);
  writeln('Введите оценки');
  for i:=1 to n do
  begin
        writeln (i,'-го ученика:');
        write ('ФИО: ');         readln(st[i].name);
        write ('Русский яз.: '); readln(oc[i,1]);
        write ('Литература: ');  readln(oc[i,2]);
        write ('Математика: ');  readln(oc[i,3]);
        write ('Физика: ');      readln(oc[i,4]);
        write ('Химия: ');       readln(oc[i,5]);
        write ('ИЗО: ');         readln(oc[i,6]);
        write ('ИНО: ');         readln(oc[i,7]);
        write ('Физ-ра: ');      readln(oc[i,8]);
        writeln;
  end;
  
  sredK:=0;   {средний балл класса изначально = 0}
  sredH:=0;   {средний балл хорошистов изначально = 0}
  kolvoH:=0;  {кол-во хорошистов}
  
  for i:=1 to n do
    with st[i] do
    begin
    sred:=0;
      begin
        for j:=1 to 8 do 
           sred:=sred+oc[i,j]; {находим сумму оценок каждого ученика}
      end;
    sred:=sred/8; {находим среднюю оценку каждого ученика}
    sredK:=sredK+sred; {находим сумму средних оценок всех учеников}
    end;   
    
  writeln (' Отличники:');
  for i:=1 to n do
    begin
      if st[i].sred=5 then  {если средняя оценка 5, то это отличник}
      writeln (' ',st[i].name);
    end;
    
  writeln;  
  writeln (' Хорошисты:');
  for i:=1 to n do
    begin
      k:=0; {у каждого ученика k вначале =0}
        begin
        for j:=1 to 8 do 
          if oc[i,j]>=4 then {если оценка 4 и выше то}
          if oc[i,j]=4 then  {если оценка 4 то}
          k:=k+1;    {увеличив k мы даем понять что у ученика из всех оценок есть хотябы 1 четверка}
        end;
        if k>0 then  {если есть 4ки то}
          begin
          writeln (' ',st[i].name);
          kolvoH:=kolvoH+1;    {считаем хорошистов}
          sredH:=sredH+st[i].sred; {находим сумму средних оценок хорошистов}
          end;
    end; 
      
  sredK:=sredK/n;      {средняя оценка класса}
  sredH:=(5+(sredH/kolvoH))/2; {средня оценка хорошистов}
  
  raznica:=sredH-sredK;  {находим разницу}
  
  writeln;
  writeln ('Средний балл хорошистов и отличников: ',sredH:0:1);
  writeln ('Средний балл класса: ',sredK:0:1);
  writeln ('Разница: ',raznica:0:1);
Readln
End.
Проблема в том, что несмотря на условие, программа троечников считает хорошистами. Подскажите в чем дело?

Последний раз редактировалось mrRastom; 30.03.2011 в 18:27.
mrRastom вне форума Ответить с цитированием
Старый 30.03.2011, 19:15   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от mrRastom Посмотреть сообщение
Здравствуйте.
Проблема в том, что несмотря на условие, программа троечников считает хорошистами. Подскажите в чем дело?
я что то не вижу где вы ищите троишников!?, помоему вы всех на 2 класса поделили(отличники и хорошисты)
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 30.03.2011, 19:26   #3
mrRastom
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Летучий_СкилетиК Посмотреть сообщение
я что то не вижу где вы ищите троишников!?, помоему вы всех на 2 класса поделили(отличники и хорошисты)
я троечников не ищу)

Вот этот фрагмент должен найти хорошистов, однако троичников он также считает хорошистами.

Код:
for i:=1 to n do
    begin
      k:=0; {у каждого ученика k вначале =0}
        begin
        for j:=1 to 8 do 
          if oc[i,j]>=4 then {если оценка 4 и выше то}
          if oc[i,j]=4 then  {если оценка 4 то}
          k:=k+1;    {увеличив k мы даем понять что у ученика из всех оценок есть хотябы 1 четверка}
        end;
        if k>0 then  {если есть 4ки то}
          begin
          writeln (' ',st[i].name);
          kolvoH:=kolvoH+1;    {считаем хорошистов}
          sredH:=sredH+st[i].sred; {находим сумму средних оценок хорошистов}
          end;
    end;
по задумке, цикл должен сравнивать J с оценкой 4 и если J больше или ровняется четырем, то цикл выполняется дальше. Т.е. проверяется есть ли среди оценок >=4 сама цифра 4, чтобы отличники не стали хорошистами.

P.S. J - это оценка за каждый предмет.
mrRastom вне форума Ответить с цитированием
Старый 30.03.2011, 19:40   #4
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

на держи
Код:
...
for i:=1 to n do
    begin
      g:=true;
      yes:=false;
        for j:=1 to 8 do
        begin
            if oc[i,j]<4 then begin g:=false;break;end;
            if oc[i,j]=4 then Yes:=true;
        end;
        if (g)and(yes) then
          begin
             writeln (' ',st[i].name);
             kolvoH:=kolvoH+1;    
          sredH:=sredH+st[i].sred; 
          end;
end;
...
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 30.03.2011, 20:25   #5
mrRastom
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 16
По умолчанию

Летучий_СкилетиК спасибо =)
mrRastom вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распечатать фамилии рабочих бригады, начинающихся с буквы А и С с указанием из месячной зарплаты. KatruKot Паскаль, Turbo Pascal, PascalABC.NET 14 05.02.2011 13:07
Паскаль - Распечатать фамилии детей данного детского сада,которые родились в определенном месяце Оксана Логачёва Паскаль, Turbo Pascal, PascalABC.NET 1 29.05.2010 06:11
Распечатать фамилии учеников,фамилии которых начинаются на букву В с указанием даты рождения. greenO_o Помощь студентам 0 26.05.2010 22:49
Расчёт проходного балла (работа с массивами и цикл в Excel без VB) dark.angel Microsoft Office Excel 6 23.02.2010 23:27
Хитрый подсчёт среднего балла Антон Олегович Microsoft Office Excel 6 06.08.2009 13:20