IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> запись
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


Вот надо решить такую задачу:
1. Записать структуру с именем STUDENT, содержащую следующие поля:
=>NAME – фамилия и инициалы;
=>GROUP – номер группы;
=>SES – успеваемость (массив из пяти элементов).
2. Написать программу, выполняющие следующие действия:
=>ввод с клавиатуры данных в массив STUD1, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию содержимого поля GROUP;
=>вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0;
=>если таких студентов нет, вывести соответствующее сообщение.

Вот код который я пытался сделать
1.
type
STUDENT=record
NAME:String;
GROUP:integer;
SES:array[0..4] of byte;
end;


2.
var
STUD1:array[0..9]of STUDENT;
i,j:integer;
vspom:student;
sr:real;
Count:byte;
begin
for i:=0 to 9 do
begin
writeln('Please enter a name');
readln(stud1[i].name);
writeln('Please enter a group');
readln(stud1[i].group);
for j:=0 to 4 do
begin
writeln('Введите оценку:');
readln(stud1[i].ses[j]);
end;
end;
for j:=0 to 8 do
begin
if stud1[i].group<stud1[i+1].group then
vspom:=stud1[i];
stud1[i]:=stud1[i+1];
stud1[i+1]:=vspom;
end;
count:=0;
for i:=0 to 9 do
begin
sr:=(stud1[i].ses[0]+stud1[i].ses[1]+stud1[i].ses[2]+stud1[i].ses[3]+stud1[i].se
s[3])/2;
if sr>4.0 then
writeln('Name:',stud1[i].name,'','Group:',stud1[i].group
)
else
count:=count+1;
end;
if count=5 then
writeln('Все троечники и двоечники');
end;

Но чето не выходит у меня
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


Код
sr:=(stud1[i].ses[0]+stud1[i].ses[1]+stud1[i].ses[2]+stud1[i].ses[3]+stud1[i].se
s[3])/2;

надо делить не на 2 а на 5 smile.gif среднее арифметическое равно (a1+a2+a3+...+an)/n

Добавлено через 8 мин.
Код
    
for j:=0 to 8 do
for i:=9 downto j+1 do
  begin
   if stud1[pred(i)].group>stud1[i].group then begin
    vspom:=stud1[pred(i)];
    stud1[pred(i)]:=stud1[i];
    stud1[i]:=vspom;
   end;
  end;

И вот сортировка.


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
надо делить не на 2 а на 5
Для начала надо исправить
Цитата
sr:=(stud1[i].ses[0]+stud1[i].ses[1]+stud1[i].ses[2]+stud1[i].ses[3]+stud1[i].ses[3])/2;
вот тут дважды описанное ses[3] на ses[3] и ses[4], а потом уже можно и на 5 делить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


for j:=0 to 8 do
for i:=9 downto j+1 do
begin
if stud1[pred(i)].group>stud1[i].group then begin
vspom:=stud1[pred(i)];
stud1[pred(i)]:=stud1[i];
stud1[i]:=vspom;
end;
end;

А че за сортировка и че такое pred(i)
А так правильно
 sr:=(stud1[i].ses[0]+stud1[i].ses[1]+stud1[i].ses[2]+stud1[i].ses[3]+stud1[i].ses[4])/5)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
А че за сортировка и че такое pred(i)
"Пузырек" ... А pred(x) - то же самое, что x - 1, т.е. предыдущее значение...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


Вот я подправил немного

var
STUD1:array[0..9]of STUDENT;
i,j:integer;
vspom:student;
sr:real;
Count:byte;
begin
for i:=0 to 9 do
begin
writeln('Please enter a name');
readln(stud1[i].name);
writeln('Please enter a group');
readln(stud1[i].group);
for j:=0 to 4 do
begin
writeln('Введите оценку:');
readln(stud1[i].ses[j]);
end;
end;
for j:=0 to 8 do
for i:=9 downto j+1 do
begin
if stud1[pred(i)].group>stud1[i].group then begin
vspom:=stud1[pred(i)];
stud1[pred(i)]:=stud1[i];
stud1[i]:=vspom;
end;
end;
count:=0;
for i:=0 to 9 do
begin
sr:=(stud1[i].ses[0]+stud1[i].ses[1]+stud1[i].ses[2]+stud1[i].ses[3]+stud1[i].se
s[4])/5;
if sr>4.0 then
writeln('Name:',stud1[i].name,'','Group:',stud1[i].group
)
else
count:=count+1;
end;
if count=5 then
writeln('All losers');
readln;
end;

Только он у меня не выводит то что когда ни у кого нет среднего бала выше 4.0 соответствующее сообщение.
И как на английском будет 'Введите оценку', а то паскаль у меня русский не воспринимает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


count должно быть равно 10, а не 5, ведь оно должно это вывести, когда у всех плохо.

Сообщение отредактировано: arhimag -


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.10.2021 2:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name