Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Таблица

Автор: Typoi stydent 15.12.2010 18:15

Нужно чтобы при запуске программы выводилось следующие:
1) напишите кол-во студентов
2) напишите кол-во предметов
3) напишите имя первого ученика, потом второго и т.д.
4) напишите название первого предмета, второго и т.д.
5) напишите оценку первого ученика по первому предмету, второго ученика по первому предмету и т.д. и потом 1-го уч-ка по второму предмету и т.д.
6) и чтоб после этого появилась таблица с средним баллом учеников.
Я пытался сделать, но у меня немного не получилось:

Program ifit;
uses crt;
var sub:array[1...3] of string;
grades:array[1..3,1..3] of byte;
i,j,q:integer;
s:string;
begin
ClrScr;
for i:=1 to 3 do
begin
write<'kakoy predmet?'>;
readln<sub[i]>;
for j:=1 to 3 do
begin
repeat
write<'Student',j,' ocenka: '>;
readln<s>;
val<s,grades[i,j],q>;
if q <> 0 then writeln<'eto chislo'>;
until q=0
end;
end;
writeln;
wreteln<'predmet || student 1 || student 2 || student 3 || sredniy ball'>;
for i:=1 to 3 do
writeln<sub[i],' ',grades[i,1],' ',grades[i,2]
, ',grades[i,3],' ',
<grades[i,1]+grades[i,2]+grades[i,3]>/3:1:1>;
writeln<' Sredniy. bal ',<grades[1,1]+grades[2,1]+grades[3,1]>/3:1:1,' ',
<grades[1,2]+grades[2,2]+grades[3,2]>/3:1:1,' ',
<grades[1,3]+grades[2,3]+grades[3,3]>/3:1:1>;

end.

Автор: Lapp 15.12.2010 18:32

Я просто причесал твою прогу не вникая (и исправил < и > на ( и ) )
Кто-то может поможет по сути..

Program ifit;
uses
crt;
var
sub:array[1..3] of string;
grades:array[1..3,1..3] of byte;
i,j,q:integer;
s:string;

begin
ClrScr;
for i:=1 to 3 do
begin
write('kakoy predmet?');
readln(sub[i]);
for j:=1 to 3 do
begin
repeat
write('Student',j,' ocenka: ');
readln(s);
val(s,grades[i,j],q);
if q <> 0 then writeln('eto chislo');
until q=0
end;
end;
writeln;
writeln('predmet || student 1 || student 2 || student 3 || sredniy ball');
for i:=1 to 3 do
writeln(sub[i],' ',grades[i,1],' ',grades[i,2]
,' ',grades[i,3],' ',
(grades[i,1]+grades[i,2]+grades[i,3])/3:1:1);
writeln(' Sredniy. bal ',(grades[1,1]+grades[2,1]+grades[3,1])/3:1:1,' ',
(grades[1,2]+grades[2,2]+grades[3,2])/3:1:1,' ',
(grades[1,3]+grades[2,3]+grades[3,3])/3:1:1);
end.

Автор: TarasBer 15.12.2010 18:34

Немного по поводу вывода таблицы:

Вместо
writeln(sub[i],' '
Лучше напиши
writeln(sub[i]:20,...

Опять же, вместо
(grades[1,3]+grades[2,3]+grades[3,3])/3:1:1
Лучше написать :20:1, чтобы выровнять ширину.

Автор: Lapp 16.12.2010 5:09

Camaro, количество предметов и студентов должно вводиться (по условию), а у тебя оно зашито намертво. Надо подходить более гибко. Если хочешь использовать простые массивы, то нужно завести их с запасом. Если можно использовать динамическую память - нужно это делать. При вводе/обработке/выводе - использовать циклы. И нигде явно не использовать числа, кроме как при задании констант.

Ты готов к этому? Могу показать начальные приемы.

Автор: Camaro 16.12.2010 5:16

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

Автор: Lapp 16.12.2010 5:43

Цитата(Camaro @ 16.12.2010 1:16) *
я облажался с самого начала...
Ты облажался, что не пришел сюда раньше )).
Ладно, давай решать.
У тебя есть вполне рациональные моменты в проге. Например, массив имен. Только его надо увеличить (хотя использовать его будешь не полностью. И еще надо сделать аналогичный массив предметов.
const
MaxSubj=10;
MaxStud=100;

var
Subj: array [1..MaxSubj] of String;
Stud: array [1..MaxStud] of String;
Grad: array [1..MaxSubj,1..MaxStud] of byte;
nSubj,nStud: integer;

Ввод имен и предметов веди до пустой строки:
  WriteLn('Введите предметы, по одному на строке.  Закончите пустой строкой.');
nSubj:=0;
repeat
ReadLn(s);
if s<>'' then begin
Inc(nSubj);
Subj[nSubj]:=s
end
until s='';

То же самое для имен.
ПОтом ввод оценок:
  for i:=1 to nStud do begin
WriteLn('Введите оценки студента ',Stud[i]);
for j:=1 to nSubj do begin
Write(Subj[j]',': ');
ReadLn(Grad[j,i])
end
end;

Потом приходи и показывай.
Организовать вывод таблицы уже совсем просто.

Автор: Camaro 19.12.2010 14:14

Блин я совсем нуб... Попытался ввести как ты написал, но я походу немного не разобрался куда всё это писать или что... в общем не получается ни фига(((

Автор: Lapp 19.12.2010 14:47

Цитата(Camaro @ 19.12.2010 10:14) *
я походу немного не разобрался куда всё это писать или что... в общем не получается ни фига(((

Ты хоть что-то пробовал? хоть раз?
я имею в виду кроме http://www.cyberforum.ru/pascal/thread214400.html (да еще без тэгов)..

покажи любую попытку..

Добавлено через 9 мин.
Вот, посмотри внимательно на это. Это и есть то, что я хотел от тебя получить.
Тут эти три куска собраны вместе (плюс добавлен ввод студентов точно так же, как ввод предметов).
Ну и еще добавлены описания вспомогательной строки s и двух переменных циклов: i и j, да еще begin и end.

Посмотри и разберись, как оно работает. Разберешься - приходи, сделаем вывод таблицы.
const
MaxSubj=10;
MaxStud=100;

var
Subj: array [1..MaxSubj] of String;
Stud: array [1..MaxStud] of String;
Grad: array [1..MaxSubj,1..MaxStud] of byte;
i,j,nSubj,nStud: integer;
s: string;

begin
{ввод предметов}
WriteLn('Введите предметы, по одному на строке. Закончите пустой строкой.');
nSubj:=0;
repeat
ReadLn(s);
if s<>'' then begin
Inc(nSubj);
Subj[nSubj]:=s
end
until s='';

{ввод студентов}
WriteLn('Введите студентов, по одному на строке. Закончите пустой строкой.');
nStud:=0;
repeat
ReadLn(s);
if s<>'' then begin
Inc(nStud);
Subj[nStud]:=s
end
until s='';

{ввод оценок}
for i:=1 to nStud do begin
Write('Введите оценки студента ',Stud[i]);
for j:=1 to nSubj do begin
Write(Subj[j],': ');
ReadLn(Grad[j,i])
end
end;

{тут надо сделать вывод таблицы}

end.

Автор: Camaro 19.12.2010 15:01

пока таблицы нет оно запускаться не будет?

Автор: Lapp 19.12.2010 15:56

Цитата(Camaro @ 19.12.2010 11:01) *
пока таблицы нет оно запускаться не будет?

А проверить так сложно?..

Автор: Camaro 19.12.2010 16:01

Цитата(Lapp @ 19.12.2010 11:56) *

А проверить так сложно?..

Я проверил, не работает, вот и спрашиваю это я еще раз тупанул или так и должно быть...
Я саму суть понял что мы делаем, но некоторых команд даже просто обозначения не знаю...

Автор: Lapp 19.12.2010 16:06

Цитата(Camaro @ 19.12.2010 12:01) *
Я проверил, не работает, вот и спрашиваю это я еще раз тупанул или так и должно быть...

Говори напрямую, без намеков - всем будет проще.
Как именно не работает? на каком этапе (компиляция, запуск..)?
Какую ошибку выдает?
Какой компилятор у тебя?

Автор: Camaro 20.12.2010 4:08

Цитата(Lapp @ 19.12.2010 12:06) *

Говори напрямую, без намеков - всем будет проще.
Как именно не работает? на каком этапе (компиляция, запуск..)?
Какую ошибку выдает?
Какой компилятор у тебя?

Всё работает просто надо было в конце поставить четыре end, почему то...

Автор: Lapp 20.12.2010 6:02

Цитата(Camaro @ 20.12.2010 0:08) *
Всё работает просто надо было в конце поставить четыре end, почему то...

Этот код работает без всяких изменений/дополнений. Я это даже не поленился проверить. Если тебе потребовалось что-то дописывать - значит, ты неправильно его скопировал. А это в свою очередь значит, что могли быть и другие ошибки (и даже ТОЧНО должны быть, поскольку в этой проге НЕ ДОЛЖНО быть 4 end в конце). И если так - я не буду осуждать дальше код, который у тебя, поскольку я его даже не знаю. Я уже понял, что ты не любишь отвечать на вопросы (компилятор, сообщения об ошибках - это все у тебя, видимо, совершенно секретно), но, мне кажется, что у тебя нет другой опции. Приведи результирующий код (в который ты добавил 4 end) - только после этого я буду продолжать разговор. Надеюсь, ты понимаешь, что это не по злобе, а просто я не могу говорить о том, чего не видел.

Автор: Camaro 20.12.2010 12:49

Андрей огромное спасибо тебе за помощь, я сдал паскаль, свой старый прада пришлось попотеть. P.S. Я не то что не люблю отвечать на вопросы я просто не знаю что такое компилятор и т.д. Я наверно где то сделал ошибку при переписывании того что ты написал и из за этого у меня и попросило 4 end, в общем тему можно закрывать))) еще раз спасибо.