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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 12:57   #1
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
Радость Pascal.Задача про записи.

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

Код:
program the_nd;

uses crt;

type
    balls = record
    FIO:string[30];
    math:integer;
    russian:integer;
    physics:integer;
    sr_bal:integer;
end;
var
m:balls;
r:balls;
p:balls;
f:balls;
srb:balls;
ucheniki:integer;
i:integer;
bal1,bal2,bal3:integer;
begin
clrscr;
writeln('vvedite kol-vo uchenikov v klasse');
readln(ucheniki);
for i:=1 to ucheniki do begin
readln(f.FIO);
readln(m.math);
readln(r.russian);
readln(p.physics);
bal1:=r.russian;
bal2:=p.physics;
bal3:=m.math;
srb=(bal1+bal2+bal3)/3;
if srb>srb then writeln(f.FIO)
end;
readln;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.12.2011 в 09:23.
Avatonk вне форума Ответить с цитированием
Старый 11.12.2011, 13:47   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Если предположить, что в первых строках еще есть какой-то смысл, то под конец вообще происходит нечто невероятное.
Код:
srb=(bal1+bal2+bal3)/3;
 if srb>srb then writeln(f.FIO)
Во-первых srb это запись, так что как минимум должно быть srb.sr_bal
Во-вторых, как понять "srb>srb"? это все равно что 100500>100500, даже если записать верно, это условие никогда не будет выполняться.
А вобще рекомендую сначала подумать над алгоритмом
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 11.12.2011, 14:21   #3
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию

Просто я хотел сравнить средний бал одного ученика и другого, после вывести максимальный среди всех
Avatonk вне форума Ответить с цитированием
Старый 11.12.2011, 20:58   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Прога:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Tballs = record                                    //б*я, я угараю с "шаров" :D
   FIO:string[30];
   math:integer;
   russian:integer;
   physics:integer;
   sr_bal:real;
   constructor create(var T:text);
   procedure print;
 end;

  TStudents=array of Tballs;

  constructor Tballs.create(var T: Text);
    begin
      read(T,FIO);
      read(T,math);
      read(T,russian);
      read(T,physics);
      readln(T);
      sr_bal:=(math+russian+physics)/3;
    end;

  procedure Tballs.print;
    begin
      writeln('Name:    ',FIO);
      writeln('Math:    ',math);
      writeln('Russian: ',Russian);
      writeln('Physics: ',Physics);
      writeln('sr_bal:  ',sr_bal:2:3);
      writeln;
    end;

VAR
  T:textfile;
  i,n:integer;
  M:Tstudents;
  MID:real;
BEGIN
  assign(T,'input.txt');
  reset(T);
  n:=0;
  while NOT EOF(T) do
    begin
      n:=n+1;
      readln(T);
    end;
  reset(T);
  setlength(m,n);
  for i:=0 to n do m[i]:=Tballs.create(T);
  MID:=0;
  for i:=0 to n do MID:=MID+m[i].sr_bal;
  mid:=mid/n;
  writeln('sredniy ball: ', MID:2:3);
  for i:=0 to n do
    if MID<=m[i].sr_bal then m[i].print;
  readln
END.
input.txt:
Код:
vacya                         5 4 5
Sacya                         3 4 5 
Macya                         1 1 2
Xacya                         3 3 1
Я писал на дэлфи 2009, при желании перегнать на паскаль можно. Что непонятно спрашивай.
Все тривиальное просто

Последний раз редактировалось whatever; 11.12.2011 в 21:09.
whatever вне форума Ответить с цитированием
Старый 12.12.2011, 17:56   #5
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию

Непонятно только одно чем подменить в паскале конструктор?т.е.:
constructor Tballs.create(var T: Text);
begin
read(T,FIO);
read(T,math);
read(T,russian);
read(T,physics);
readln(T);
sr_bal:=(math+russian+physics)/3;
end;
Avatonk вне форума Ответить с цитированием
Старый 12.12.2011, 18:50   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Я вообще ожидал вопрос про динамический массив, почему-то думал, что в паскале его нет...

Из интереса скачал Free Pascal, на нем получилась вот что:
Код:
program Project1;


uses
  crt;

type
  Tballs = record

   FIO:string[30];
   math:integer;
   russian:integer;
   physics:integer;
   sr_bal:real;

   end;



  TStudents=array of Tballs;


  procedure create(var A:Tballs; var T: Text);
    begin
      read(T,A.FIO);
      read(T,A.math);
      read(T,A.russian);
      read(T,A.physics);
      readln(T);
      A.sr_bal:=(A.math+A.russian+A.physics)/3;
    end;

  procedure print(A:Tballs);
    begin
      writeln('Name:    ',A.FIO);
      writeln('Math:    ',A.math);
      writeln('Russian: ',A.Russian);
      writeln('Physics: ',A.Physics);
      writeln('sr_bal:  ',A.sr_bal:2:3);
      writeln;
    end;

VAR
  T:textfile;
  i,n:integer;
  M:Tstudents;
  MID:real;
BEGIN
  assign(T,'input.txt');
  reset(T);
  n:=0;
  while NOT EOF(T) do
    begin
      n:=n+1;
      readln(T);
    end;
  reset(T);
  setlength(m,n);
  for i:=0 to n-1 do
    begin

      create(m[i],T);
    end;
  MID:=0;
  for i:=0 to n-1 do MID:=MID+m[i].sr_bal;
  mid:=mid/n;
  writeln('sredniy ball: ', MID:2:3);
  for i:=0 to n-1 do
    if MID<=m[i].sr_bal then print(m[i]);
  readln
END.
Честно, понятия не имею, можно ли так писать, но программа работает :/
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 12.12.2011, 20:34   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Мои грацы, товарищ whatever, энтузазизЪм отличный, аж FPC скачали. Объектный подход к задаче и вообще структуризация - очень педагогично (внемли, ТС). Отдельное спасибо за "шары", посмеялся. Ну и отменный ник, надо сказать )
Накидываю плюсег, а то с 2009 на форуме, а репка только 10.
phomm вне форума Ответить с цитированием
Старый 12.12.2011, 20:46   #8
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

phomm, благодарю. Кстати, вы уже не первый, кто обращает внимание на мои коментарии в программах :D. "Репка" такая потому, что помогать начал недавно, в основном сам задаю вопросы. Что до ника, ну что тут скажешь, регистрировался еще на первом курсе в состоянии апатии, ибо с програмированием столкнулся первый раз в универе, но потом как-то втянулся, умудрился в третьем семестре пятерку получить .
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 12.12.2011, 20:53   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Отлично! Желаю и дальше работать в таком духе ! Ну и чую неплохой английский за плечами, что тоже повально. За сим оффтоп заканчиваю.
phomm вне форума Ответить с цитированием
Старый 13.12.2011, 17:54   #10
Avatonk
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 21
По умолчанию

Ок испытал, спасибо за помощь!Надо только FPC переустановить корявый какой-то))
Avatonk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal-задача про списки Cod_371 Помощь студентам 0 22.11.2010 19:12
Задача про массивы (pascal) -SG- Помощь студентам 1 25.11.2009 20:24
Задача на записи (pascal) Proffy69 Помощь студентам 1 12.05.2009 23:15
Задача на Записи(Pascal) Desha Паскаль, Turbo Pascal, PascalABC.NET 2 07.04.2009 13:37
задача на записи Pascal kitty Помощь студентам 9 18.04.2008 18:14