Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите пожалуйста с программой. Программа компилирует код на паскале а затем с помощью графического модуля выводит на экран результаты компиляции. В конце программа спрашивает у пользователя, продолжить работу или нет. Если работа продолжается, программа очищает экран и заново начинает работу. У меня две проблемы: 1) Как сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним, но при этом, чтобы экран мог очищаться 2) После того как подключил графический модуль, программа не выводит надписи writeln Пожалуйста, помогите
Листинг программы
  1. Program Kurs;
  2. uses SysUtils, Process, graph, strutils, crt;
  3. var
  4. str, str0, otv:string;
  5. f: file;
  6. i,x,y: integer;
  7.  
  8. Procedure Compile(var str:string);
  9. var
  10. proc : TProcess;
  11. outfile : string;
  12. begin
  13. outfile := ChangeFileExt(str, '.txt');
  14.  
  15. proc := TProcess.Create(nil);
  16. proc.CommandLine := 'F:\FPC\2.6.4\bin\i386-win32\fpc.exe -b ' + str +
  17. ' -Fe' + outfile;
  18. proc.Options := proc.Options + [poWaitOnExit];
  19. proc.Execute;
  20.  
  21. proc.Free;
  22. end;
  23.  
  24. Procedure DrawStr(var str2:string; x,y:integer);
  25. var
  26. S:integer;
  27.  
  28. begin
  29. S:=2;
  30. SetTextStyle(SansSerifFont,HorizDir,S);
  31. SetColor(black);
  32. OutTextXY(x,y,str2);
  33. end;
  34.  
  35. Procedure Search(var str0:string; var str1:string; var str4:string);
  36. var
  37. f:text;
  38. i,j,y,x,count:integer;
  39. prov,str,str2,str3,count1:string;
  40. flag0,flag4,flag1,flag2,flag3:boolean;
  41.  
  42. begin
  43. Cleardevice;
  44. y:=50;
  45. x:=10;
  46. SetFillStyle(SolidFill,green);
  47. bar(0, 0, pred(getmaxx), pred(getmaxy));
  48. assign(f,str0);
  49. reset(f);
  50. flag0:=true;
  51. str1:='';
  52. str4:='';
  53. while not Eof(f) do
  54. begin
  55. if flag0=true then
  56. begin
  57. readln(f,str);
  58. prov:='';
  59. for j:=1 to length(str) do
  60. begin
  61. prov:=prov+str[j];
  62. if prov='Compiling' then break;
  63. end;
  64. end;
  65. if prov='Compiling' then
  66. begin
  67. readln(f,str);
  68. flag0:=false;
  69. flag1:=false;
  70. flag2:=false;
  71. flag4:=false;
  72. count:=-1;
  73. count1:='';
  74. if pos('Fatal:',str) = 0 then
  75. flag3:=true
  76. else flag3:=false;
  77. str2:='';
  78. if flag3=true then
  79. begin
  80. for i:=1 to length(str) do
  81. begin
  82. if str[i]='(' then
  83. flag1:=true;
  84. if str[i+1]=')' then
  85. flag2:=true;
  86. if flag2=true then
  87. begin
  88. str1:=str1 + ' ';
  89. flag1:=false;
  90. flag2:=false;
  91. end;
  92. if str[i]='"' then
  93. if flag4=false then
  94. flag4:=true
  95. else flag4:=false;
  96. if flag4=true then
  97. begin
  98. count:=count+1;
  99. end;
  100. if flag1=true then
  101. str1:=str1 + str[i+1];
  102. str2:=str2+str[i];
  103. if i=length(str) then
  104. begin
  105. if flag3=true then
  106. begin
  107. y:=y+50;
  108. DrawStr(str2,x,y);
  109. end;
  110. end;
  111. if (count>0) and (flag4=false) then
  112. begin
  113. System.Str(count,count1);
  114. str4:=str4+count1+' ';
  115. end;
  116. end;
  117. end;
  118. end;
  119. end;
  120. end;
  121.  
  122. Procedure Draw(var f:text; numstr,numsto,numsim,k:integer; numstr1:string);
  123. var str0,str,str1:string;
  124. i,j:integer;
  125. flag:boolean;
  126. begin
  127. str0:='';
  128. reset(f);
  129. i:=0;
  130. while not Eof(f) do
  131. begin
  132. readln(f,str);
  133. i:=i+1;
  134. if i=numstr then
  135. begin
  136. str1:=str;
  137. break;
  138. end;
  139. end;
  140. close(f);
  141. i:=10;
  142. j:=45;
  143. str0:=str0+numstr1+') ';
  144. outtextXY(i,k,str0);
  145. for i:=1 to length(str1) do
  146. begin
  147. if i=numsto-numsim then flag:=true;
  148. if flag=true then
  149. setcolor(12)
  150. else setcolor(0);
  151. if i=numsto-1 then flag:=false;
  152. outtextXY(j+i*20,k,str1[i]);
  153. end;
  154. end;
  155.  
  156. Procedure Search_Err(var str0,str,str1,str4:string);
  157. const
  158. D=[',',' '];
  159. var
  160. k,n,count,numstr,numsto,numsim:integer;
  161. numstr1,numsto1,numsim1:string;
  162. f:text;
  163.  
  164. begin
  165. assign(f,str);
  166. k:=getmaxY div 2 +100;
  167. n:=1;
  168. count := WordCount(str1, D);
  169. while n < Count do
  170. begin
  171. numsim1:='';
  172. numstr1:=ExtractWord(n, str1, D);
  173. numsto1:=ExtractWord(n + 1, str1, D);
  174. for i:=1 to length(str4) do
  175. begin
  176. if str4[i]=' ' then
  177. begin
  178. delete(str4, 1, i);
  179. break;
  180. end
  181. else
  182. numsim1:=numsim1+str4[i];
  183. end;
  184.  
  185. inc(n,2);
  186. val(numstr1,numstr);
  187. val(numsto1,numsto);
  188. val(numsim1,numsim);
  189. Draw(f,numstr,numsto,numsim,k,numstr1);
  190. k:=k+20;
  191.  
  192. end;
  193. end;
  194.  
  195. Procedure Output(var str0,str:string);
  196. var
  197. f:text;
  198. str1,str4:string;
  199.  
  200. begin
  201. Search(str0,str1,str4);
  202. Search_Err(str0,str,str1,str4);
  203. readln;
  204. end;
  205.  
  206. begin
  207. x:=detect;
  208. initgraph(x,y,'');
  209. repeat
  210. writeln('Ââåäèòå ïóòü ê ôàéëó .pas: ');
  211. read(str);
  212. if str='test' then
  213. str:='G:\Kursovaya\Test.pas';
  214. if str='test1' then
  215. str:='G:\Kursovaya\Lab_8\Lab_8_2.pas';
  216. str0:=str;
  217. for i:=length(str0) downto 1 do
  218. if str0[i]='.' then
  219. begin
  220. delete(str0, i+1, length(str0)); break;
  221. end;
  222. str0:=str0+'txt';
  223. assign(f,str0);
  224. rewrite(f);
  225. close(f);
  226. Compile(str);
  227. Output(str0,str);
  228.  
  229. writeln('Ïðîäîëæèòü ðàáîòó ñ ïðîãðàììîé? Y/N');
  230. until (ReadKey='Y');
  231.  
  232. end.

Решение задачи: «Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним»

textual
Листинг программы
  1. // ... тут процедуры
  2. var crtf : Text;
  3. begin
  4.   assigncrt(crtf);
  5.   rewrite(crtf);
  6.  
  7.   // здесь код твоей основной программы, writeln('текст') заменяется на writeln(crtf, 'текст')
  8.  
  9.   close(crtf);
  10. end.

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


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

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

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы