Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним - Free Pascal
Формулировка задачи:
Добрый день!
Помогите пожалуйста с программой. Программа компилирует код на паскале а затем с помощью графического модуля выводит на экран результаты компиляции. В конце программа спрашивает у пользователя, продолжить работу или нет. Если работа продолжается, программа очищает экран и заново начинает работу.
У меня две проблемы:
1) Как сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним, но при этом, чтобы экран мог очищаться
2) После того как подключил графический модуль, программа не выводит надписи writeln
Пожалуйста, помогите
Program Kurs; uses SysUtils, Process, graph, strutils, crt; var str, str0, otv:string; f: file; i,x,y: integer; Procedure Compile(var str:string); var proc : TProcess; outfile : string; begin outfile := ChangeFileExt(str, '.txt'); proc := TProcess.Create(nil); proc.CommandLine := 'F:\FPC\2.6.4\bin\i386-win32\fpc.exe -b ' + str + ' -Fe' + outfile; proc.Options := proc.Options + [poWaitOnExit]; proc.Execute; proc.Free; end; Procedure DrawStr(var str2:string; x,y:integer); var S:integer; begin S:=2; SetTextStyle(SansSerifFont,HorizDir,S); SetColor(black); OutTextXY(x,y,str2); end; Procedure Search(var str0:string; var str1:string; var str4:string); var f:text; i,j,y,x,count:integer; prov,str,str2,str3,count1:string; flag0,flag4,flag1,flag2,flag3:boolean; begin Cleardevice; y:=50; x:=10; SetFillStyle(SolidFill,green); bar(0, 0, pred(getmaxx), pred(getmaxy)); assign(f,str0); reset(f); flag0:=true; str1:=''; str4:=''; while not Eof(f) do begin if flag0=true then begin readln(f,str); prov:=''; for j:=1 to length(str) do begin prov:=prov+str[j]; if prov='Compiling' then break; end; end; if prov='Compiling' then begin readln(f,str); flag0:=false; flag1:=false; flag2:=false; flag4:=false; count:=-1; count1:=''; if pos('Fatal:',str) = 0 then flag3:=true else flag3:=false; str2:=''; if flag3=true then begin for i:=1 to length(str) do begin if str[i]='(' then flag1:=true; if str[i+1]=')' then flag2:=true; if flag2=true then begin str1:=str1 + ' '; flag1:=false; flag2:=false; end; if str[i]='"' then if flag4=false then flag4:=true else flag4:=false; if flag4=true then begin count:=count+1; end; if flag1=true then str1:=str1 + str[i+1]; str2:=str2+str[i]; if i=length(str) then begin if flag3=true then begin y:=y+50; DrawStr(str2,x,y); end; end; if (count>0) and (flag4=false) then begin System.Str(count,count1); str4:=str4+count1+' '; end; end; end; end; end; end; Procedure Draw(var f:text; numstr,numsto,numsim,k:integer; numstr1:string); var str0,str,str1:string; i,j:integer; flag:boolean; begin str0:=''; reset(f); i:=0; while not Eof(f) do begin readln(f,str); i:=i+1; if i=numstr then begin str1:=str; break; end; end; close(f); i:=10; j:=45; str0:=str0+numstr1+') '; outtextXY(i,k,str0); for i:=1 to length(str1) do begin if i=numsto-numsim then flag:=true; if flag=true then setcolor(12) else setcolor(0); if i=numsto-1 then flag:=false; outtextXY(j+i*20,k,str1[i]); end; end; Procedure Search_Err(var str0,str,str1,str4:string); const D=[',',' ']; var k,n,count,numstr,numsto,numsim:integer; numstr1,numsto1,numsim1:string; f:text; begin assign(f,str); k:=getmaxY div 2 +100; n:=1; count := WordCount(str1, D); while n < Count do begin numsim1:=''; numstr1:=ExtractWord(n, str1, D); numsto1:=ExtractWord(n + 1, str1, D); for i:=1 to length(str4) do begin if str4[i]=' ' then begin delete(str4, 1, i); break; end else numsim1:=numsim1+str4[i]; end; inc(n,2); val(numstr1,numstr); val(numsto1,numsto); val(numsim1,numsim); Draw(f,numstr,numsto,numsim,k,numstr1); k:=k+20; end; end; Procedure Output(var str0,str:string); var f:text; str1,str4:string; begin Search(str0,str1,str4); Search_Err(str0,str,str1,str4); readln; end; begin x:=detect; initgraph(x,y,''); repeat writeln('Ââåäèòå ïóòü ê ôàéëó .pas: '); read(str); if str='test' then str:='G:\Kursovaya\Test.pas'; if str='test1' then str:='G:\Kursovaya\Lab_8\Lab_8_2.pas'; str0:=str; for i:=length(str0) downto 1 do if str0[i]='.' then begin delete(str0, i+1, length(str0)); break; end; str0:=str0+'txt'; assign(f,str0); rewrite(f); close(f); Compile(str); Output(str0,str); writeln('Ïðîäîëæèòü ðàáîòó ñ ïðîãðàììîé? Y/N'); until (ReadKey='Y'); end.
Решение задачи: «Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним»
textual
Листинг программы
// ... тут процедуры var crtf : Text; begin assigncrt(crtf); rewrite(crtf); // здесь код твоей основной программы, writeln('текст') заменяется на writeln(crtf, 'текст') close(crtf); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д