Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы