Помощь - Поиск - Пользователи - Календарь
Полная версия: Таблица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Camaro
Нужно чтобы при запуске программы выводилось следующие:
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
Я просто причесал твою прогу не вникая (и исправил < и > на ( и ) )
Кто-то может поможет по сути..
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
Немного по поводу вывода таблицы:

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

Опять же, вместо
(grades[1,3]+grades[2,3]+grades[3,3])/3:1:1
Лучше написать :20:1, чтобы выровнять ширину.
Lapp
Camaro, количество предметов и студентов должно вводиться (по условию), а у тебя оно зашито намертво. Надо подходить более гибко. Если хочешь использовать простые массивы, то нужно завести их с запасом. Если можно использовать динамическую память - нужно это делать. При вводе/обработке/выводе - использовать циклы. И нигде явно не использовать числа, кроме как при задании констант.

Ты готов к этому? Могу показать начальные приемы.
Camaro
в паскале плохо разбираюсь, но можно попробовать. Значит я облажался с самого начала...
Lapp
Цитата(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
Блин я совсем нуб... Попытался ввести как ты написал, но я походу немного не разобрался куда всё это писать или что... в общем не получается ни фига(((
Lapp
Цитата(Camaro @ 19.12.2010 10:14) *
я походу немного не разобрался куда всё это писать или что... в общем не получается ни фига(((

Ты хоть что-то пробовал? хоть раз?
я имею в виду кроме перепечатывания моего мессаджа на другой форум (да еще без тэгов)..

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

Добавлено через 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
пока таблицы нет оно запускаться не будет?
Lapp
Цитата(Camaro @ 19.12.2010 11:01) *
пока таблицы нет оно запускаться не будет?

А проверить так сложно?..
Camaro
Цитата(Lapp @ 19.12.2010 11:56) *

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

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

Говори напрямую, без намеков - всем будет проще.
Как именно не работает? на каком этапе (компиляция, запуск..)?
Какую ошибку выдает?
Какой компилятор у тебя?
Camaro
Цитата(Lapp @ 19.12.2010 12:06) *

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

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

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