1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
нужна прога - конструктор тестов на pascal в ней используются разные типы вопросов,программа создаёт и проводит тест . помогите пожалуйста ,если есть готовая прога или наработки.
Сообщение отредактировано: glebik - 11.02.2007 14:13
Руки мне надо поотбивать.... Очень сорри, больше так не буду... Глебик, вот пахалка: Первая:
type Test = record Vopros: String[50]; Typ: Integer; Kolotv: byte; KolotvCor: byte; Variants: array [1..100] of string[40]; Kolonky1: array [1..100] of string[40]; Kolonky2: array [1..100] of string[40]; Otvety: array [1..100] of string[40]; Prav: array [1..100] of string[40]; end; label 10; var count,i,i1,i2,countall,i3,i4,i5,i6,i7,i8: Integer; pravil,koll,variantsByte: byte; s: string[40]; T: Test; F: file of Test; begin i4:=0; Assign(F,'ban.dat'); Rewrite(F); writeln('Vvedite dannue: '); writeln('Skoko voprosov budet?'); readln(countall); for i3:=1 to countall do begin writeln('Vopros: ',i3); readln(T.Vopros); writeln('Typ:'); writeln('1 - Neposredstvenny,2 - OneInMany,3 - ManyInMany,4 - Conformable,5 - Sortirovka'); readln(T.Typ); if T.Typ = 5 then goto 10; if T.Typ = 4 then goto 10; writeln('Kolychestvo otvetov:'); readln(T.Kolotv); for i1:= 1 to T.Kolotv do begin writeln('Otvet nomer ',i1); readln(T.Otvety[i1]); end; 10: case T.Typ of 1: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2); readln(T.Prav[i2]); end; end; 2: begin writeln('Prav otvet: '); readln(T.Prav[1]); end; 3: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2); readln(T.Prav[i2]); end; end; 4: begin writeln('Skoko kolonok?'); readln(koll); for i5:=1 to koll do begin writeln('Kolonka 1 variant ',i5); readln(T.kolonky1[i5]); end; for i6:=1 to koll do begin writeln('Kolonka 2 variant ',i6); readln(T.kolonky2[i6]); end; for i7:=1 to koll do begin writeln('Prav otvet ',i7,'?'); readln(T.Prav[i7]); end; end; 5: begin writeln('Skoko variantov?'); readln(variantsByte); for i8:=1 to variantsByte do begin writeln('Variant ¹',i8); readln(T.Variants[i8]); end; writeln('Prav otvet?'); readln(T.prav[1]); end; end; i4:=i4+1; Write(F,T); end;
Вторая:
type Test = record Vopros: String[50]; Typ: Integer; Kolotv: byte; KolotvCor: byte; Variants: array [1..100] of string[40]; Kolonky1: array [1..100] of string[40]; Kolonky2: array [1..100] of string[40]; Otvety: array [1..100] of string[40]; Prav: array [1..100] of string[40]; end; var i,i2,i3,i4,i5,int,int2: integer; labell: byte; s,s2,s3,otvet: string; ArrStrPrav: array [1..100] of string; F: file of Test; T: Test; begin i:=0; i3:=0; i4:=0; i5:=0; writeln('Reading...'); assign(F,'ban.dat'); Reset(F); while not Eof(F) do begin i:=i+1; Read(F,T); end; Close(F); assign(F,'ban.dat'); Reset(F); for i2:=1 to i do begin Read(F,T); writeln('Vopros ',i2); writeln(T.Vopros); case T.Typ of 1: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s=''; readln(otvet); for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end; if labell=10*(i3-1) then writeln('Otvet neveren!!'); end; 2: begin readln(otvet); if otvet=T.Prav[1] then writeln('Otvet veren!') else writeln('Otvet neveren!'); end; 3: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s=''; readln(otvet); for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end; if labell=10*(i3-1) then writeln('Otvet neveren!!'); end; 4: begin writeln; writeln('Kolonka 1'); repeat i3:=i3+1; s:=T.kolonky1[i3]; writeln(s); until s=''; writeln('Kolonka 2'); repeat i4:=i4+1; s2:=T.kolonky2[i4]; writeln(s2); until s2=''; repeat i5:=i5+1; readln(otvet); ArrStrPrav[i5]:=otvet; s3:=T.Prav[i5]; until s3=''; for int2:=1 to i5-1 do begin if ArrStrPrav[int2]=T.Prav[int2] then begin labell:=0; end else labell:=10; if labell=0 then begin writeln('Verno!!!');break; end else writeln('Neverno!'); break; end; end; 5: begin repeat i3:=i3+1; s:=T.Variants[i3]; writeln(s); until s=''; readln(otvet); if otvet=T.Prav[1] then writeln('Pravilno!') else writeln('Nepravilno!'); end; end; end; readln
P.S. Label10 - это метка для оператора безусловного перехода goto.