Другие языки программирования и технологии

Помогите написать прогу на TURBO PASCAL...

MM
Manu Manukyan
1 829
Доброго времени суток.

Вы бы хоть комменты какие поставили, чтоб понятнее было. Но все равно молодец, видно, что пытался.

1. Во первых, объявите тип запись

type TStudent = record
NameL: String[20]; {фамилия}
NameF : String[10]; {имя}
Sum: integer; {сумма оценок}
g: array[1..3] of integer; {сами оценки}
end;

И массив учащихся будет тааким

var p : TStudent;

2. Ввод данных. Можно сделать значительно проще, если вы уверены, что при вводе у вас реквизиты будут разделены пробелом. Попробуйте так

ReadLn(N);

for i := 1 to N do begin
ReadLn(p[ i ].NameL, p[ i ].NameF, p[ i ].g[1], p[ i ]. g[2],p[ i ], g[3]); {ввод реквизитов}
p[ i ].sum := 0;
for j := 1 to 3 do p[ i ].sum := p[ i ].sum + p[ i ].g[ j ]; {подсчет суммы оценок}
end;

3. Сортировка. Не понял, зачам имея записи так извращаться при перестановке значений? Все гораздо проще. Объявляете в качестве буфера переменную. Допустим, Т и делаете так

{сортировка пузырьком}
for i := 1 to n do
for j := 1 to n - i do
if p[j].Sum < p[j + 1].Sum then begin {если следующий элемент больше, меняем местами}
T := p[j];
p[j] := p[j + 1];
p[j + 1] := T;
end;

Вот и все.

Удачи!

PS Ввод еще можно осуществить путем чтения всей строки и выделения из нее требуемых полей. Примерно так

ReadLn(S);
p[ i ].NameF := Copy(S, 1, Pos(' ', S)-1); {копировани части строки в реквизит}
Delete(S, 1, Pos(' ', S)); {удаление этой части из входной строки}

Числа перед записью, правда, придется преобразовать в числа.
ЛM
Любитель Mercedes Bens
59 613
Лучший ответ
10 wmz . тут без файла записи не обойтись а на добровольных началах лень так заморачиваться
Руслик
Руслик
1 469
стучи в агент напишу, тока за плату..
Manu Manukyan хрен тебе