![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
natik3 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Создать массив из 20 элементов,хранящих информацию о студенках факультета.Каждый элемент содержит фамилию,курс,форму обучения,(специалист,бакалавр,магис тр)и оценки по 5 предметам за последнюю сессию.
Упорядочить массив по среднему баллу.Осуществить перевод студентов на следующий курс.Переводятся студенты ,не имеющие задолжностей за последнюю сессию,студенты 5-ого курса(специалисты) и 6-ого курса(магистры)должны быть удалены ,как окончившие курс обучения. Я сделала,но явно неправильно,и кое где несообразила,как дальше.помогите исправить ошибки и дописать то,что совсем неверно.буду очень благодарна! Код program Project2; {$APPTYPE CONSOLE} uses SysUtils, Windows; const n=5; type formob=(spez,bakal,magis); zmas=array [1..5]of integer; telem=record name:record FIO:string[30] curs: 1..6; end; pred:zmas; form:formob; end; tmas=array [1..n] of telem; var a:tmas; b:array[1..n]of string[30];// массив студентов,которых переводят mn,choice,i:Integer; exit_:char; error_in: boolean; Function menu :integer; //Вывод меню на экран begin writeln; writeln (' ','1.Упорядочить массив по среднему баллу'); writeln (' ','2.Перевести студентов на следующих курс'); Writeln (' ','3.Завершение работы.'); repeat write ('Ваш выбор: '); readln (choice); error_in:=(choice<1) or (choice >3); if error_in then writeln ('Ошибка ввода!') until not error_in; menu:=choice; end; procedure form (var a:tmas); var k,i,j:integer; b:telem; n:integer; tmp:telem; begin writeln('Ввести ФИО'); readln(b.name.FIO); writeln('Ввести номер формы обучения'); readln(k); case k of 1: b.form:=spez; 2: b.form:=bakal; 3: b.form:=magis end; writeln('Ввести курс'); readln(b.name.curs); writeln('Ввести оценки'); for i:=1 to n do readln(b.pred[j]); a[i]:=b end; Function Sr(b:zmas):integer; var s1,s,i:integer; begin S:=0; for i:=1 to n do begin S:=S+S1(b[i].pred); Sr:=s1 div 5 end; end; procedure sort(var b:tmas); var i,j:integer; tmp:telem; begin for i:=1 to n do if(b[i]>b[i+1]) then begin tmp:=b[i]; b[i]:=b[i+1]; b[i+1]:=tmp; end; end; Procedure perevod (var b:tmas); var i,k:integer; i:=1; k:=0; while i<= n-k do //--------------------- Function Dvoechnik (a:tmas); var i,k:integer; for i:=1 to n do Begin If a[i]<3 then k:=k+1 end; //--------------------- SetConsoleOutputCP(1251); form(а); writeln; REPEAT mn:=Menu; case mn of 1:begin sort(а); end; 2: begin Writeln('Перевод на следующий курс'); end end; if mn<>3 then begin Writeln; write (' ','Завершить работу? (Y/N)'); readln(exit_); end; UNTIL (exit_='y') or (exit_='Y') or (choice=3); readln End. |
![]() ![]() |
Krjuger |
![]()
Сообщение
#2
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Значит так,начнем разбор полетов.
Я уже писал j у нас нигде не меняется и не участвует!!!!!!!!!Если мы считываем и суммируем оценки за предмет,то нам нужна изменяющаяся переменная. Меняем. readln(b.balls[i]); s:=s+b.balls[i]; Но теперь возникла проблема, если мы изменим n например на 6, то мы будем считать 6 предметов,а тип Tballs у нас описан как массив строго из 5 элементов, исправляем. Tballs=array[1..n]of 1..5; Продолжаем, у нас получатся,что количество студентов навно n и количество предметов у каждого студента равно n, это непорядок, вводим вторую константу m.Пускай n- кол во студентов,а m- кол-во предметов. В общем немного поработав с твоим кодом родилось нечто подобное.
Тут оно еще и сортирует правильно,я надеюсь тебе надо было отсортировать по возрастанию. А теперь общие коментарии по твоему коду. Не перескакивай в написании переменных,типов,профедур, и всего остального с заглавные букв на мелкие и обратно, паскаль это кушает, но в большинстве языков это неприемлемо и будут из-за этого ошибки. Не создавай кучу переменных, которые ты не используешь. Не нужно создавать глобальные переменные, когда все спокойно делается с локальными. b:array[1..n]of string[30]; я так и не понял,где это вообще используется и просто удалил,работоспособность не изменилась, тоже самое относится к половине переменных в твоей процедуре form. choice:integer; error_in: boolean; я сделал локальными, они нам просто не нужны как глобальные. Если программа подразумевает маштабируемость,т.е. изменение размеров массивов,то ненадо использовать числа,иначе потом придется ползать по всех программе и искать их,а так забудешь одно число поменять и будешь получать вылеты за границы массива,оно тебе надо? Сообщение отредактировано: Krjuger - 22.05.2012 14:28 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:23 |