uses crt,dos; var bukva:char; username,answer,resul:string; f1:text; label 1,2; procedure help ; var bukva:char; answer,question,usertext,slovo,theme:string; dlina,a:integer; f2,f3,f4:text; label 1; begin clrscr; assign(f2,'question.dim'); reset(f2); if eof(f2) then begin close(f2);exit;end; repeat writeln('C^u vi volas helpi mi ?'); readln(answer); until (answer='jes') or (answer='ne'); if answer='ne' then exit; writeln('C^u vi povas respondi al la demando :'); {Нахождение вопроса} 1: if eof(f2) then exit; question:=''; repeat readln(f2,slovo); dlina:=length(slovo); question:=question+slovo; until copy(slovo,dlina-2,3)='eoq'; dlina:=length(question); a:=0; repeat a:=a+1; until copy(question,a,1)='{'; theme:=copy(question,a+1,dlina-a-5); delete(question,a,dlina); {Вопрос найден!} writeln(question); writeln('C^u vi havas respondo ?'); repeat readln(answer); until (answer='jes') or (answer='ne'); if answer='ne' then goto 1; repeat writeln('Respondu'); readln(usertext); writeln('C^u g^i estas g^usta ? '); readln(answer); until answer='jes'; {Запись ответа в нужный файл} assign(f3,theme+'.dim'); {$I-} append(f3); {$I+} if IOResult<>0 then rewrite(f3); writeln(f3,usertext,' eop'); close(f3); {Ответ записан} {Копирование файла question} assign(f3,'question.dim');reset(f3); assign(f4,'reserv.dim');rewrite(f4); while not eof(f3) do begin readln(f3,slovo); if question<>copy(slovo,1,length(question)) then begin if eof(f3) then write(f4,slovo) else writeln(f4,slovo); end; end; close(f3); close(f4); {Запись исправленного question} assign(f3,'question.dim');rewrite(f3); assign(f4,'reserv.dim');reset(f4); erase(f3); rename(f4,'question.dim'); close(f4); help; end; procedure talk; var dlina,a,b,c,d,parametr,p,z,q,number:integer; appendix,vor,vorto,theme,tema,usertext,slovo,answer,prosto,newtext:string; f2,f3,f4,f5,f6,f7,f9,f10:text; procedure newvorto(vorto:string); var a:integer; reserv:string; f8:text; label 2; begin 2: writeln('Kio estas ',vorto); readln(answer); while (copy(answer,length(answer),1)=' ') or (copy(answer,length(answer),1)='.') do delete(answer,length(answer),1); if (answer='Mi ne konas') or (answer='? ') then begin assign(f8,'question.dim'); append(f8); writeln(f8,'Kio estas ',vorto,' ? {vortaro} eoq'); close(f8); end else begin if copy(answer,length(answer),1)<>'o' then goto 2; if copy(answer,1,length(vorto)+6)<>vorto+' estas' then goto 2; reserv:=answer; delete(answer,1,length(vorto)+7); b:=0; for a:=1 to length(answer) do if copy(answer,a,1)=' ' then b:=a; if b=0 then begin assign (f4,'vortaro.dim'); reset(f4); dlina:=length(answer); theme:=''; while not eof(f4) do begin readln(f4,slovo); if answer=copy(slovo,1,dlina) then begin theme:=answer; repeat readln(f4,prosto); until eof(f4); end; end; close(f4); if theme='' then newvorto(answer); append(f4); writeln(f4,vorto,copy(slovo,length(answer)+1,length(slovo)-length(answer)+1)); close(f4); end; end; end; procedure ttt(vorto,slovo:string); var a:integer; label xxx; begin delete(slovo,length(slovo)-4,5); write(f7,slovo); reset(f6); while not eof(f6) do begin read (f6,b); readln(f6,tema); delete(tema,1,1); if (100*b)/number>=50 then begin for a:=1 to length(slovo) do begin if tema=copy(slovo,a,length(tema)) then goto xxx; end; write(f7,',',tema); xxx: end; end; close(f6); writeln(f7,'} eov'); end; procedure think1(newtext:string); var dem,res,fraza,prob,reserv:string; a,parametr,p:integer; f11,f66:text; begin if resul='Jes' then exit; a:=1; repeat a:=a+1; until (copy(newtext,a-1,7)=' estas ') or (a=length(newtext)); if copy(newtext,a-1,7)<>' estas ' then exit; dem:=copy(newtext,5,a-6); res:=copy(newtext,a+6,length(newtext)-length(dem)); delete(res,length(res),1); assign(f66,'kia1.pas'); reset(f66);resul:='Mi ne konas'; while not eof(f66) do begin read(f66,b); readln(f66,tema); delete(tema,1,1); {$I-} assign(f11,tema+'.dim'); reset(f11); {$I+} if IOResult=0 then begin while not eof(f11) do begin readln(f11,fraza); while copy(fraza,length(fraza),1)<>'.' do begin delete(fraza,length(fraza),1); end; if dem+' estas '+res+' .'=fraza then resul:='Jes'; prob:=copy(dem,1,1); reserv:=prob; delete(dem,1,1); for p:=97 to 122 do begin if prob=chr(p) then parametr:=p; end; insert(chr(parametr-32),dem,1); if dem+' estas '+res+' .'=fraza then resul:='Jes'; delete(dem,1,1); dem:=reserv+dem; if resul='Jes' then begin close(f11);close(f66); writeln(resul,', ',dem+' estas '+res,'.');exit; end; end; close(f11); end; end; close(f66); writeln(resul); readln; end; begin writeln('Nu , ni komencas paroli.'); repeat resul:=''; writeln('Skribu.'); usertext:=''; repeat repeat readln(prosto); until prosto<>''; usertext:=usertext+prosto; until prosto='@@@'; delete(usertext,length(usertext)-2,3); writeln(usertext,'|'); writeln('G^i estas g^usta ?'); readln(answer); until answer='jes'; { Нахождение нужной (нужных) тем} assign(f6,'kia1.pas');rewrite(f6);close(f6); assign(f7,'kia2.pas');rewrite(f7);close(f7); assign(f9,'kia3.pas');rewrite(f9);close(f9); assign(f10,'kia4.pas');rewrite(f10);close(f10); vor:='';c:=0;d:=0;newtext:='';z:=0;number:=0; for a:=1 to length(usertext) do begin if copy(usertext,a,1)<>' ' then vor:=vor+copy(usertext,a,1); if copy(usertext,a,1)=' ' then begin z:=z+1; if (vor='mi') or (vor='Mi') then vor:=username; if (vor='min') or (vor='Min') then vor:=username+'n'; if (vor='mia') or (vor='Mia') then vor:=username+'a'; if (vor='Mian') or (vor='mian') then vor:=username+'an'; if (vor='miajn') or (vor='Miajn') then vor:=username+'ajn'; if vor='via' then vor:='mia'; if vor='Via' then vor:='Mia'; if vor='vian' then vor:='mian'; if vor='Vian' then vor:='Mian'; if vor='viajn' then vor:='miajn'; if vor='Viajn' then vor:='Miajn'; if vor='vi' then vor:='mi'; if vor='Vi' then vor:='Mi'; if vor='vin' then vor:='min'; if vor='Vin' then vor:='Min'; write(f1,vor+' '); newtext:=newtext+vor+' '; if (z=1) and (copy(usertext,1,1)>='A') and (copy(usertext,1,1)<='Z') and ((vor<>username) and (vor<>username+'n')) then begin for p:=65 to 90 do begin if copy(usertext,1,1)=chr(p) then parametr:=p; end; delete(vor,1,1); insert(chr(parametr+32),vor,1); end; if (copy(vor,length(vor)-1,2)='on') or (copy(vor,length(vor)-1,2)='oj') then delete(vor,length(vor),1); if (copy(vor,length(vor)-2,3)='ojn') or (vor='mian') or (vorto=username+'an') then delete(vor,length(vor)-1,2); if (vor='miajn') or (vorto=username+'ajn') then delete(vor,length(vor)-2,3); if (vor='min') or (vor=username+'n') then delete(vor,length(vor),1); if (copy(vor,length(vor),1)='o') or (vor='mi') or (vor=username) then begin parametr:=0; reset(f10); while not eof (f10) do begin readln(f10,prosto); if vor=prosto then parametr:=1; end; close(f10); if parametr=0 then begin append(f10); writeln(f10,vor); close(f10); end; parametr:=0; assign (f4,'vortaro.dim'); reset(f4); dlina:=length(vor); theme:=''; while not eof(f4) do begin readln(f4,slovo); if vor=copy(slovo,1,dlina) then begin theme:=vor; repeat readln(f4,prosto); until eof(f4); end; end; close(f4); if theme='' then newvorto(vor); if theme='' then begin theme:='tuto';slovo:='tuto {all} eov'; end; b:=0; repeat b:=b+1; until copy(slovo,b,1)='{'; theme:=slovo; delete(theme,1,b); number:=number+1; while copy(theme,1,4)<>' eov' do begin q:=0;tema:=''; repeat q:=q+1; if (copy(theme,q,1)<>',') and (copy(theme,q,1)<>'}') then tema:=tema+copy(theme,q,1); until (copy(theme,q,1)=',') or (copy(theme,q,1)='}'); delete(theme,1,q); b:=0; c:=c+1;d:=d+1; append(f7); reset(f6); readln(f6,vorto); if vorto='' then writeln(f7,1,' ',tema) else begin rewrite(f7); reset(f6); while not eof(f6) do begin read(f6,b); readln(f6,vorto); delete(vorto,1,1); if tema=vorto then begin writeln(f7,b+1,' ',tema); c:=0; end else begin writeln(f7,b,' ',vorto); end; end; if c<>0 then writeln(f7,1,' ',tema); end; close(f6); close(f7); reset (f9); parametr:=0; while not eof (f9) do begin readln(f9,prosto); if tema=prosto then parametr:=1; end; close(f9); if parametr=0 then begin append(f9); writeln(f9,tema); close(f9); end; parametr:=0; rewrite(f6); reset(f7); while not eof(f7) do begin readln(f7,vorto); writeln(f6,vorto); end; close(f7); close(f6); end; end; vor:=''; end; end; reset(f10); while not eof(f10) do begin rewrite(f7); readln(f10,vorto); reset(f4);slovo:='';parametr:=0; while not eof(f4) do begin readln(f4,slovo); if vorto=copy(slovo,1,length(vorto)) then begin parametr:=1; ttt(vorto,slovo); end else writeln(f7,slovo); end; if parametr=0 then begin slovo:=vorto+' {} eov'; ttt(vorto,slovo); end; reset(f7); rewrite(f4); while not eof(f7) do begin readln(f7,prosto); writeln(f4,prosto); end; close(f4); close(f7); end; reset(f6); while not eof(f6) do begin parametr:=0; read(f6,b); readln(f6,theme); delete(theme,1,1); if ((100*b)/number) >=33 then begin if copy(usertext,length(usertext),1)='?' then begin if copy(usertext,1,4)='C^u ' then think1(newtext); assign(f5,'question.dim'); reset(f5); while not eof(f5) do begin readln(f5,vorto); if newtext=copy(vorto,1,length(newtext) )then parametr:=3; end; close(f5); append(f5); appendix:=' ? {'+theme+'} eoq'; end else begin assign(f5,theme+'.dim'); {$I-} reset(f5); {$I+} if IOResult=0 then begin while not eof(f5) do begin readln(f5,vorto); if newtext=copy(vorto,1,length(newtext)) then parametr:=3; end; close(f5); end; {$I-} append(f5); {$I+} if IOResult<>0 then rewrite(f5); appendix:='. eop'; end; if parametr<>3 then begin writeln(f5,newtext,appendix); close(f5); parametr:=1; end; parametr:=0; end; if parametr=0 then begin if copy(usertext,length(usertext),1)='?' then begin assign(f5,'question.dim'); append(f5); appendix:=' ? {all} eoq'; end else begin assign(f5,'all.dim'); append(f5); appendix:='. eop'; end; writeln(f5,newtext,appendix); close(f5); end; end; end; begin clrscr; assign(f1,'opertalk.dim'); rewrite(f1); repeat writeln('Skruibu propra nomo.');readln(username); writeln('Via nomo estas ',username); writeln('C^u g^i estas g^usta (jes/ne) ?');readln(answer); until answer='jes'; writeln ('Saluton , ',username,'!'); help; talk; 1: repeat writeln('C^u vi volas paroli ?'); readln(answer); until (answer='jes') or (answer='ne'); if answer='jes' then talk; if answer='ne' then goto 2; goto 1; 2: writeln('G^is !');readln; close(f1); end.