08.12.2011, 23:16 | #1 (permalink) |
Новичок
Регистрация: 15.11.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задача на файлы, Паскаль АВС
Оценки полученные во время экзаменационной сессии Составить программу назначения стипендии студентам по результатам сессии, используя следующие правила: 1) если все оценки 5, назначается повышенная стипендия; 2) если все оценки 4 и 5, назначается обычная стипендия; 3) если есть оценка 3, стипендия не назначается. В результате работы программы нужно: 1. напечатать список группы с оценками, 2. средний балл каждого студента, 3. средний балл группы по предмету, 4. списки фамилий (назначенных на повышенную стипендию), 5. количество студентов (назначенных на обычную стипендию), 6. списки студентов неуспевающих по заданной дисциплине. вот на что хватило моих соображений и усилий(не на много(((). program semestr1zad; uses crt; const put = 'D:\students.txt'; type ses=record fam:string[25]; zz: Array [1..50] of Integer; zn: Integer; end; var p: ses; m: Array[0..100] of ses; f: text; x,i,j,n: integer; st:string[3]; procedure app; var t:String; begin rewrite(f); repeat write('Vvedi familiyu studenta : ');readln(p.fam);writeln(f,p.fam); write('Vvedi kolichestvo ocenok studenta: ');readln(p.zn);writeln(f,p.zn); for i:=1 to p.zn do begin write('Vvedi ocenky #',i,' : ');readln(p.zz[i]);writeln(f,p.zz[i]); end; writeln('Prodolgit yes/no?'); readln(st); until st='no'; close(f); end; procedure prosm; var ss,sr:real; begin reset(f); while not eof(f) do begin readln(f,p.fam); Writeln(p.fam);Write('Ocenki : '); readln(f,p.zn); ss:=0; for i:=1 to p.zn do begin readln(f,p.zz[i]); ss:=ss+p.zz[i]; Write(p.zz[i],', '); end; sr:=ss/p.zn; writeln;writeln('Sredniy bal : ',sr:4:2); writeln('----------------------------------------'); end; Writeln('------------ NAZHMITE ENTER ------------');Readln; close(f); end; procedure stipendii; var sum:Integer; flag:boolean; begin reset(f); i:=0; while not eof(f) do begin inc(i); readln(f,p.fam);readln(f,p.zn); for j:=1 to p.zn do readln(f,p.zz[j]); m[i]:=p; end; n:=i; close(f); writeln('familii na povisennyu stipendiu : '); for i:=1 to n do begin sum:=0; for j:=1 to m[i].zn do sum:=sum+m[i].zz[j]; if sum=(m[i].zn*5) then writeln(m[i].fam); end; writeln('familii na obicnyy stipendiu : '); for i:=1 to n do begin sum:=0;flag:=true; for j:=1 to m[i].zn do begin sum:=sum+m[i].zz[j]; if m[i].zz[j]<4 then flag:=false; end; if flag and (sum<(m[i].zn*5)) then writeln(m[i].fam); end; writeln('Stipendia ne naznachaetsa spisok studentov ne uspevaysh: '); for i:=1 to n do begin flag:=false; for j:=1 to m[i].zn do if m[i].zz[j]<4 then flag:=true; if flag then writeln(m[i].fam); end; Writeln('------------ NAZHMITE ENTER ------------');Readln; end; begin assign(f,put); repeat writeln('viberite nujnii punkt menu'); writeln('1 - zapolnenie faila dannymi'); writeln('2 - svedenia o studentah'); writeln('3 - stipendii'); writeln('4 - vyxod'); readln(x); case x of 1:app; 2rosm; 3:stipendii; end; until x=4; end. ошибок куча... пару условий не выполнил.(нет дисциплин, данные Ф.И. как одно целое...) мне просто необходима рука мастера. подкорректировать код. можно использовать граф для изменения цвета шрифта. но с этим тяжко у меня(с граф). надеюсь моя просьба не останется без ответа. время до понедельника. 12.12.2011. |
08.12.2011, 23:16 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти топики могут помочь вам решать проблему Задача на графику, Паскаль АВС Задача в Паскаль Задача на файлы Задача про стоки, Паскаль Паскаль. Задача о сторожах Задача, Паскаль |
10.12.2011, 19:06 | #3 (permalink) |
Новичок
Регистрация: 15.11.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Всем привет! пожалуиста отредактируите мою задачу. что бы код был без лишних "слов" , "символов". Я тут сам пытаюсь. но мне не нравится. Мне ее скоро ( во вторник) показывать. и от нее многое решается...((
|
10.12.2011, 19:26 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да но... как же это у Вас каждый студент сдает разное количество экзаменов?! Я бы понял, если бы количество экзаменов у всех студентов было одинаковым, и тогда каждая строка соответствовала бы какой-либо дисциплине. Например, первая цифра после фамилии каждого студента - это оценка по информатике, вторая - по химии ну и т.п.. А так...
Поэтому могу предложить свой вариант: 1. Данные о студентах не вносятся в файл, а считываются из заранее (в любом текстовом редакторе) подготовленного файла. Вид файла (латиница - только для удобства, можете заменить): Код:
Ivanov Petr 5 4 5 4 5 Petrov Ivan 5 5 5 5 5 Sidorov Sergey 5 2 5 4 5 Kovalchuk Anton 3 2 5 4 5 Shmidt Valera 5 4 4 5 4 Количество студентов заранее не устанавливается, т.е. можно, например, добавить еще. 2. Все студенты сдают одинаковое количество экзаменов (в данном случае - 5, в программу это число "зашито", менять нельзя), каждая строка оценок соответствует определенной дисциплине. Список дисциплин введен в программу в виде константы. 3. Естественно, имя и расположение файла можете поменять на свой вкус. Программа: Код:
const put = 'D:\students.txt'; Sci:Array[1..5] of String=('Informatics','Chemistry','Mathematics', 'Physics','Physical Training'); type ses=record fam:string; mark:Array [1..5] of Byte; end; St=Set of Byte; var p: ses; m: Array[0..100] of ses; f: text; i,j,k,l,n,x: integer; procedure app; begin assign(f,put); reset(f); n:=1; repeat with m[n] do begin readln(f,fam); for i:=1 to 5 do readln(f,mark[i]); end; if not(EoF(f)) then Inc(n); until EoF(f); close(f); end; procedure prosm; var Sred:real; begin for i:=1 to n do with m[i] do begin Sred:=0; write(i:2,'. '+fam); for j:=length(fam) to 25 do write(' '); for j:=1 to 5 do begin write(mark[j]:4); Sred:=Sred+mark[j]/5; end; writeln(Sred:8:2); end; writeln; end; procedure stipendii; var flag:boolean; Pov:St; begin writeln('Familii na povishennuju stipendiju : '); k:=0; Pov:=[]; for i:=1 to n do with m[i] do begin flag:=true; j:=0; repeat Inc(j); if mark[j]<5 then flag:=false; until not(flag) or (j=5); if flag then begin Inc(k); writeln(k:2,'. '+fam); Pov:=Pov+[i]; end; end; writeln; writeln('Familii na obychnuju stipendiju : '); k:=0; for i:=1 to n do with m[i] do begin flag:=true; j:=0; repeat Inc(j); if mark[j]<4 then flag:=false; until not(flag) or (j=5); if flag and Not(i in Pov) then begin Inc(k); writeln(k:2,'. '+fam); end; end; writeln; end; procedure lobotrjasy; begin for l:=1 to 5 do begin writeln(Sci[l]+':'); k:=0; for i:=1 to n do with m[i] do if mark[l]=2 then begin Inc(k); writeln(k:2,'. '+fam); end; writeln; end; writeln; end; BEGIN app; repeat writeln('viberite punkt menu:'); writeln(' 1 - svedenia o studentah'); writeln(' 2 - stipendii'); writeln(' 3 - spisok neuspevajushchih'); writeln(' 4 - vyxod'); readln(x); case x of 1:prosm; 2:stipendii; 3:lobotrjasy; end; until x=4; END. |
11.12.2011, 18:11 | #5 (permalink) |
Новичок
Регистрация: 15.11.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ОГРОМНЕЙШЕЕ СПАСИБО Vladimir_S! Я ВАМ БЕЗУМНО БЛАГОДАРЕН!!!!!
вы не представляете как вы меня выручаете.)))))) |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
11.12.2011, 18:49 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|