21.05.2013, 22:27 | #1 (permalink) |
Новичок
Регистрация: 12.05.2013
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Составить программу на Паскале
есть готовая прога,что по ней скажете, её можно упростить(прога для курсовой),не знаю как можно сформулировать тему для курсовой по этой проге(заранее спасибо) вот программа: uses crt; var f,out:text; c:char; str,name,cond:string; i:integer; flag,flag1:boolean; begin clrscr; writeln('Enter filename'); readln(name); assign(f,name);{исходный файл} assign(out,'result.pas');{результат работы программы} rewrite(out); reset(f); while not eof(f) do{пока не конец файла} begin readln(f,str);{считываем строку из f} if (pos('case',str)>0) then {если в строке есть case} begin cond:=''; {инициализация условия case } flag:=false; {этот флаг нужен, чтобы вставлять else } flag1:=false; {флаг нужен для корректной обработки составных операторов в пункте else} i:=0; {смещение в строке} while str[pos('case',str)+4+i]=' ' do {избавляемся от пробелов, необязательно} i:=i+1; while str[pos('case',str)+4+i]<>' ' do {считываем условие для case} begin cond:=cond+str[pos('case',str)+4+i]; i:=i+1; end; readln(f,str); while pos('end',str)=0 do {изменяем код программы до тех пор, пока не найдем end для case} begin while (pos(':',str)=0) and (pos('else',str)=0) do {ищем первое условие} readln(f,str); if (flag=true) then begin writeln(out,'else'); {если условие не первое, то записываем else} end else flag:=true; {если нет, говорим, что первое условие уже было} if pos('else',str)=0 then {если условие не else} begin writeln(out,'if ',cond,'=',copy(str,1,pos(':',str)-1),' then'); {запись конструкции if} writeln(out,copy(str,pos(':',str)+1,length(str)-pos(':',str))); readln(f,str); while (pos(':',str)=0) and (pos('else',str)=0) do {записываем до тех пор, пока не дойдем до следующего условия} begin if (pos('end',str)<>0) then str[pos('end',str)+3]:=' '; {если сотавной оператор, то избавляемя от точки-запятой после end} writeln(out,str); readln(f,str); end; end else{если встретили else, то записываем соответствующую конструкцию} begin writeln(out,'else ',copy(str,pos('else',str)+4,length(str)-pos('else',str)-3)); if pos('begin',str)<>0 then{если после else составной оператор, в результирующий файл будем записывать до тех пор, пока не встретим end} flag1:=true; readln(f,str); if pos('begin',str)<>0 then flag1:=true; while (pos('end',str)=0) or (flag1=true) do{пока не найдем end} begin writeln(out,str); readln(f,str); if pos('end',str)<>0 then{если встретили end} flag1:=false; end; end; end; end else{если не встретили case? то просто записываем в файл} writeln(out,str); end; close(f); close(out); writeln('Done. Save in RESULT.PAS.'); readln; end. |
21.05.2013, 22:27 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пока в вашем топике нет ответов, можете почитать эти Помогите составить программу в Паскале Помогите составить программу в Паскале Помогите составить программу на Паскале Помогите составить программу на Паскале Помогите пожалуйста составить программу в Паскале |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|