Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Pascal ABC, помогите доделать (http://www.tehnari.ru/f41/t61208/)

Ильгиза 13.12.2011 21:59

Pascal ABC, помогите доделать
 
написать программу , которая вводит все данные об n (n=10) студентах ,и выводит всю информацию на экран в табличном виде. А именно список юношей получивших в сессию более двух двоек. оценки ставятся за четыре экзамена( математика,физика, английский и информатика)


пробую делать, но не получается.

program upr1;
const n=10;
m=5;
type date=record
day:1..31;
month:1..12;
year:integer;
end;
predmet=record
ot:integer;
end;
pupil=record
fam,name:string[15];
p:char;
bd:date;
ch:predmet;
end;
procedure p1( var a:pupil);
begin
with a do
begin
write('фамилия');
readln(fam);
write('имя');
readln(name);
write('пол');
readln(p);
write('дата рождения');
readln(bd.day,bd.month,bd.year);
write('оценки');
readln(ch.ot);
end;
end;
procedure p2( a:pupil);
begin
with a do begin
write(fam,'':15-length(fam));
write(name,'':10-length(name));
with bd do begin
if day<10 then write ('0');
write(day,'.');
if month<10 then write ('0');
write(month,'.');
write(year);
end;
end;
end;
var mas:array[1..n] of pupil;
i,k:integer;
begin
writeln('введите информацию об ',n,'учениках');
for i:=1 to n do p1(mas[i]);
writeln('список учеников:');
writeln('n фио пол дата рождения ');
for i:=1 to n do begin write (i:2,'.');
p2(mas[i]);
writeln('введите оценки ');
for i:=2 to m do write ([i]);
end;
writeln;
i:=1;
while(mas[i].p<>'м') and (i<n) do i:=i+1;
if (mas[i].p='м' ) and (pupil.ot =2)
then begin k:=k+1;
write(k:2,'.');
p1(mas[i]);
end;
writeln('юноша с двойками');
end.

Vladimir_S 14.12.2011 10:19

Ильгиза, еще раз и медленно - я готов Вам помочь, если Вы составите сам список студентов и их оценок. Кстати, в этом случае можно сделать ввод данных о студентах из файла, что удобнее, чем с клавиатуры. Если же нужно непременно с клавиатуры - напишите. Но в любом случае составьте и выложите список для отладки. Я этим заниматься точно не буду.

Ильгиза 14.12.2011 18:30

мне составлять сведения о 10 студентах???

Ильгиза 14.12.2011 18:31

если можно тогда просто подскажите алгоритм определения студента с 2-мя двойками!

Vladimir_S 14.12.2011 19:03

Цитата:

Сообщение от Ильгиза (Сообщение 634983)
мне составлять сведения о 10 студентах???

Ох, простите, Ваше Величество, забылся...

Ильгиза 14.12.2011 19:28

Извините меня пожалуйста, но я просто не поняла. Просто необходимо ввести к примеру1) Иванова Ирина Ивановна пол Ж дата рождения 18 03 1992 и оценки по 4 предметам к примеру 4 5 4 5.
2) Иванов Вадим Петрович пол М дата рождения 22 10 1989 и оценки по 4 предметам
2 2 2 5 .
Иванов получил более 2-х двоек,информацию о нем и надо вывести.

Ильгиза 14.12.2011 19:29

Помогите пожалуйста хотя бы с этой задачей, а потом я разберусь. Не думала, что тип записи такой сложный. (((

Vladimir_S 14.12.2011 20:39

Цитата:

Сообщение от Ильгиза (Сообщение 635033)
Помогите пожалуйста хотя бы с этой задачей, а потом я разберусь. Не думала, что тип записи такой сложный. (((

Сегодня, увы, не получится - если только завтра.
P.S. Да ничего сложного в этих записях нет!

Vladimir_S 15.12.2011 11:11

Ладно, держите:
Код:

const
 N=10;
 Sci:Array[1..4] of String=('Mathematics','Physics',
                            'English','Informatics');
type
 ses=record
      fam:String;
      date:String;
      mark:Array [1..4] of Byte;
    end;
var
 Stud: Array[1..N] of ses;
 i,j,q,n2: integer;

Procedure Outp(k:Integer; Std:ses);
var m:Integer;
begin
 with Std do
  begin
  Write(k:2,'. '+fam);
  For m:=Length(fam)+1 to 25 do write(' ');
  Write(date);
  for m:=1 to 4 do Write(Mark[m]:5);
  Writeln;
  end;
end;

BEGIN
 For i:=1 to N do
  with Stud[i] do
  begin
    Write(i:2,'. Name (e.g Antarov Feofilakt): ');
    Readln(fam);
    Write('Birth date (dd.mm.yyyy, e.g 03.09.1994): ');
    Readln(date);
    for j:=1 to 4 do
    begin
      Write('Mark on '+Sci[j]+': ');
      Readln(mark[j]);
    end;
    Writeln;
  end;
 Writeln;

 Writeln('Complete data:');
 For i:=1 to N do  Outp(i,Stud[i]);
 Writeln;

 Writeln('Students having more then one "2" mark:');
 q:=0;
 For i:=1 to N do
  begin
  n2:=0;
  For j:=1 to 4 do
    If Stud[i].Mark[j]=2 then Inc(n2);
  If n2>1 then
    begin
    Inc(q);
    Outp(q,Stud[i]);
    end;
  end;

 Readln
END.


Ильгиза 15.12.2011 15:37

Спасибо большое!!!!!Спасибо за понимание!!!


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.