интерпретатор языка программирования паскаль
| |
121212 | Дата: Понедельник, 20.04.2009, 17:46 | Сообщение # 31 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| а что работает?
|
|
| |
programmer | Дата: Понедельник, 20.04.2009, 17:48 | Сообщение # 32 |
Умный
Группа: Проверенные
Сообщений: 599
| ну вот проект потихонечку растет program pascal; {-----------------------------------------------------------------} var tm:array[1..40] of string; // максимальное к-во пунктов vars:array[1..40] of string; lines:integer; vas:integer; {-----------------------------------------------------------------} procedure soob(t: string);{ вывод сообщения. также удобно искать ошибки} var n,m,r,n1: integer; begin n:= getStringWidth(t);m:= getStringHeight(t);{ n - ширина m - высота строки текста } setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);{ очищаем прямоугольник под текст } setColor(140,10,35); if n<=getWidth then drawText(t, (getWidth - n) / 2,(getHeight - m) / 2); { центруем и печатаем если целикомпомещается на экране } else begin r:=n-getWidth; for n1:=0 to r do begin { вычисляем сколько пикселей не влезло } setColor(145,135,255);fillrect((getWidth - n) / 2-3,(getHeight - m) / 2-3,n+6,m+6); { если не очистить просто смажется } setColor(140,10,35);drawText(t,0-n1,(getHeight - m) / 2);repaint; delay(10);{ центруем и печатаем } if n1=0 then delay(2000);end;end; { задержка что б прочесть начало строки } repaint;delay(1000);setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10); end; procedure massivizstroki(stroka:string);{процедура создает массив из строки,писал ее не я,а 12121} var n:integer; // убрал лишние переменные begin lines:=1;// - будет количество получившихся строк tm[1]:=''; // что бы с прошлого вызова ничего не осталось for n:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,n-1,n)=';' then begin lines:=lines+1;tm[lines]:='';n:=n+1; end; if copy(stroka,n-1,n)<>' ' then tm[lines]:=tm[lines]+copy(stroka,n-1,n); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; end;{не хватало end;} procedure vabr(strok:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(strok) do begin //разбивка на пункты if copy(strok,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(strok,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(strok,i-1,i); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; {---------------------Cоздание переменных-------------------------------------------} end; {-----------------------------------------------} procedure write(what:string;del:integer); begin drawText(what, 0, 0); repaint; delay(del); end; {------------------------------------------------} procedure main; var h:integer; hel,lel:string; hellen:integer; begin for h:=1 to lines do begin hel:=tm[h];// soob(hel); hellen:=Length(hel); if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; if copy(hel,0,2)='var' then begin lel:=copy(hel,4,hellen); vabr(lel); end; end; end; {------------------------------------------------} begin massivizstroki('program beg;var a,b,c;begin;write("helloworld");end'); main; end. спасибо всем кто мне помогает
|
|
| |
programmer | Дата: Понедельник, 20.04.2009, 17:48 | Сообщение # 33 |
Умный
Группа: Проверенные
Сообщений: 599
| да!
|
|
| |
121212 | Дата: Понедельник, 20.04.2009, 18:48 | Сообщение # 34 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| спасибо в репутацию не положишь!
|
|
| |
programmer | Дата: Понедельник, 20.04.2009, 19:03 | Сообщение # 35 |
Умный
Группа: Проверенные
Сообщений: 599
| положишь,положишь...
|
|
| |
programmer | Дата: Вторник, 21.04.2009, 10:38 | Сообщение # 36 |
Умный
Группа: Проверенные
Сообщений: 599
| начинаю создание возможности переменных в программе вот что получилось: program pascal; {-----------------------------------------------------------------} var tm:array[1..40] of string; // максимальное к-во пунктов vars:array[1..40] of string; values:array[1..40] of string; lines:integer; vas:integer; {-----------------------------------------------------------------} function getnameforid(id:string):string; var ads:integer; begin for ads:=1 to 40 do begin if vars[ads]=id then getnameforid:=vars[ads] break; end; end; procedure soob(t: string);{ вывод сообщения. также удобно искать ошибки} var n,m,r,n1: integer; begin n:= getStringWidth(t);m:= getStringHeight(t);{ n - ширина m - высота строки текста } setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);{ очищаем прямоугольник под текст } setColor(140,10,35); if n<=getWidth then drawText(t, (getWidth - n) / 2,(getHeight - m) / 2); { центруем и печатаем если целикомпомещается на экране } else begin r:=n-getWidth; for n1:=0 to r do begin { вычисляем сколько пикселей не влезло } setColor(145,135,255);fillrect((getWidth - n) / 2-3,(getHeight - m) / 2-3,n+6,m+6); { если не очистить просто смажется } setColor(140,10,35);drawText(t,0-n1,(getHeight - m) / 2);repaint; delay(10);{ центруем и печатаем } if n1=0 then delay(2000);end;end; { задержка что б прочесть начало строки } repaint;delay(1000);setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10); end; procedure massivizstroki(stroka:string);{процедура создает массив из строки,писал ее не я,а 12121} var n:integer; // убрал лишние переменные begin lines:=1;// - будет количество получившихся строк tm[1]:=''; // что бы с прошлого вызова ничего не осталось for n:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,n-1,n)=';' then begin lines:=lines+1;tm[lines]:='';n:=n+1; end; if copy(stroka,n-1,n)<>' ' then tm[lines]:=tm[lines]+copy(stroka,n-1,n); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; end;{не хватало end;} procedure vabr(strok:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(strok) do begin //разбивка на пункты if copy(strok,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(strok,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(strok,i-1,i); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; {---------------------Cоздание переменных-------------------------------------------} end; {-----------------------------------------------} procedure write(what:string;del:integer); begin drawText(what, 0, 0); repaint; delay(del); end; {------------------------------------------------} procedure main; var h:integer; hel,lel:string; hellen:integer; begin for h:=1 to lines do begin hel:=tm[h];// soob(hel); hellen:=Length(hel); if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; if copy(hel,0,2)='var' then begin lel:=copy(hel,4,hellen); vabr(lel); end; end; end; {------------------------------------------------} begin massivizstroki('program beg;var a,b,c;begin;write("helloworld");end'); main; end.
|
|
| |
programmer | Дата: Понедельник, 27.04.2009, 17:45 | Сообщение # 37 |
Умный
Группа: Проверенные
Сообщений: 599
| UPDATE program pascal; {-----------------------------------------------------------------} var tm:array[1..40] of string; // максимальное к-во пунктов vars:array[1..40] of string; {имена переменных} values:array[1..40] of string;{значения переменных, каждая переменная имеет свой ид номер в 2 массивах одинаков} lines:integer; vas:integer; {---------------------------------------------------------------} function getidforname(name:string):integer; var ad:integer; begin for ad:=1 to 40 do begin if vars[ad] = name then getidforname:=ad break; end; end; {-----------------------------------------------------------------} function getnameforid(id:string):string; var ads:integer; begin for ads:=1 to 40 do begin if vars[ads]=id then getnameforid:=vars[ads] break; end; end; {---------------------------------------------------------------------} procedure setvalue(variable,value:string); var temp:integer; begin temp:=getidforname(variable); values[temp]:=value; end; {---------------------------------------------------------------------} function getvalue(name:string):string; var vtem:integer; begin vtem:=getidforname(name); getvalue:=vars[vtem]; end; {---------------------------------------} procedure soob(t: string);{ вывод сообщения. также удобно искать ошибки} var n,m,r,n1: integer; begin n:= getStringWidth(t);m:= getStringHeight(t);{ n - ширина m - высота строки текста } setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);{ очищаем прямоугольник под текст } setColor(140,10,35); if n<=getWidth then drawText(t, (getWidth - n) / 2,(getHeight - m) / 2); { центруем и печатаем если целикомпомещается на экране } else begin r:=n-getWidth; for n1:=0 to r do begin { вычисляем сколько пикселей не влезло } setColor(145,135,255);fillrect((getWidth - n) / 2-3,(getHeight - m) / 2-3,n+6,m+6); { если не очистить просто смажется } setColor(140,10,35);drawText(t,0-n1,(getHeight - m) / 2);repaint; delay(10);{ центруем и печатаем } if n1=0 then delay(2000);end;end; { задержка что б прочесть начало строки } repaint;delay(1000);setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10); end; {----------------------------------------------------------------------------------------------} procedure massivizstroki(stroka:string);{процедура создает массив из строки,писал ее не я,а 12121} var n:integer; // убрал лишние переменные begin lines:=1;// - будет количество получившихся строк tm[1]:=''; // что бы с прошлого вызова ничего не осталось for n:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,n-1,n)=';' then begin lines:=lines+1;tm[lines]:='';n:=n+1; end; if copy(stroka,n-1,n)<>' ' then tm[lines]:=tm[lines]+copy(stroka,n-1,n); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; end;{не хватало end;} procedure vabr(strok:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(strok) do begin //разбивка на пункты if copy(strok,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(strok,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(strok,i-1,i); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; {---------------------Cоздание переменных-------------------------------------------} end; {-----------------------------------------------} procedure write(what:string;del:integer); begin drawText(what, 0, 0); repaint; delay(del); end; {------------------------------------------------} procedure main; var h:integer; hel,lel:string; hellen:integer; begin for h:=1 to lines do begin hel:=tm[h];// soob(hel); hellen:=Length(hel); if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; if copy(hel,0,2)='var' then begin lel:=copy(hel,4,hellen); vabr(lel); end; end; end; {------------------------------------------------} begin massivizstroki('program beg;var a,b,c;begin;write("helloworld");end'); main; end.
|
|
| |
121212 | Дата: Вторник, 28.04.2009, 20:00 | Сообщение # 38 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| на булиан парень написал 26.04.2009, 10:37 #10 liery AnyKey`щик Регистрация: 09.01.2009 Сообщений: 6 Написано 0 полезных сообщений (для 0 пользователей) Ответ: Интерпретатор в телефоне кто нибудь пробовал делать интерпретатор паскаля? я попробовал и вот что пока получилось program pascal; {-----------------------------------------------------------------} var tm:array[1..40] of string; // максимальное к-во пунктов vars:array[1..40] of string; {имена переменных} values:array[1..40] of string;{значения переменных, каждая переменная имеет свой ид номер в 2 массивах одинаков} lines:integer; vas:integer; {---------------------------------------------------------------} function getidforname(name:string):integer; var ad:integer; begin for ad:=1 to 40 do begin if vars[ad] = name then getidforname:=ad break; end; end; {-----------------------------------------------------------------} function getnameforid(id:string):string; var ads:integer; begin for ads:=1 to 40 do begin if vars[ads]=id then getnameforid:=vars[ads] break; end; end; {---------------------------------------------------------------------} procedure setvalue(variable,value:string); var temp:integer; begin temp:=getidforname(variable); values[temp]:=value; end; {---------------------------------------------------------------------} procedure soob(t: string);{ вывод сообщения. также удобно искать ошибки} var n,m,r,n1: integer; begin n:= getStringWidth(t);m:= getStringHeight(t);{ n - ширина m - высота строки текста } setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);{ очищаем прямоугольник под текст } setColor(140,10,35); if n<=getWidth then drawText(t, (getWidth - n) / 2,(getHeight - m) / 2); { центруем и печатаем если целикомпомещается на экране } else begin r:=n-getWidth; for n1:=0 to r do begin { вычисляем сколько пикселей не влезло } setColor(145,135,255);fillrect((getWidth - n) / 2-3,(getHeight - m) / 2-3,n+6,m+6); { если не очистить просто смажется } setColor(140,10,35);drawText(t,0-n1,(getHeight - m) / 2);repaint; delay(10);{ центруем и печатаем } if n1=0 then delay(2000);end;end; { задержка что б прочесть начало строки } repaint;delay(1000);setColor(145,135,255);fillrect ((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10); end; {----------------------------------------------------------------------------------------------} procedure massivizstroki(stroka:string);{процедура создает массив из строки,писал ее не я,а 12121} var n:integer; // убрал лишние переменные begin lines:=1;// - будет количество получившихся строк tm[1]:=''; // что бы с прошлого вызова ничего не осталось for n:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,n-1,n)=';' then begin lines:=lines+1;tm[lines]:='';n:=n+1; end; if copy(stroka,n-1,n)<>' ' then tm[lines]:=tm[lines]+copy(stroka,n-1,n); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; end;{не хватало end;} procedure vabr(strok:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(strok) do begin //разбивка на пункты if copy(strok,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(strok,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(strok,i-1,i); // вырезаем пробелы каторые могут быть // иначе могут быть неувязки при проверке ведь 'end'<>' end' end; {---------------------Cоздание переменных-------------------------------------------} end; {-----------------------------------------------} procedure write(what:string;del:integer); begin drawText(what, 0, 0); repaint; delay(del); end; {------------------------------------------------} procedure main; var h:integer; hel,lel:string; hellen:integer; begin for h:=1 to lines do begin hel:=tm[h];// soob(hel); hellen:=Length(hel); if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; if copy(hel,0,2)='var' then begin lel:=copy(hel,4,hellen); vabr(lel); end; end; end; {------------------------------------------------} begin massivizstroki('program beg;var a,b,c;begin;write("helloworld");end'); main; end. (Offline)
Сообщение отредактировал 121212 - Вторник, 28.04.2009, 20:00 |
|
| |
programmer | Дата: Вторник, 28.04.2009, 20:11 | Сообщение # 39 |
Умный
Группа: Проверенные
Сообщений: 599
| это я
|
|
| |
121212 | Дата: Вторник, 28.04.2009, 20:15 | Сообщение # 40 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| понятно
|
|
| |
programmer | Дата: Понедельник, 04.05.2009, 14:23 | Сообщение # 41 |
Умный
Группа: Проверенные
Сообщений: 599
| все блин застрял. что делать дальше незнаю 12121 был прав насчет того что надо чтонить попроще написать
|
|
| |
12121 | Дата: Понедельник, 04.05.2009, 15:40 | Сообщение # 42 |
Программист
Группа: Проверенные
Сообщений: 357
| На чем именно застрял ? Может вместе разберемся ?
|
|
| |
programmer | Дата: Вторник, 05.05.2009, 00:11 | Сообщение # 43 |
Умный
Группа: Проверенные
Сообщений: 599
| Я вот застрял на стандартн. Проц. Вот переменные я придумал а вот как интерпретируя врите выводить в нужных местах не текст а значение переменои? Вот сдесь проблема. Не додумываюсь. Мне нужен не код а мысль.
|
|
| |
12121 | Дата: Воскресенье, 10.05.2009, 10:44 | Сообщение # 44 |
Программист
Группа: Проверенные
Сообщений: 357
| то есть тебе надо перевести из текстового вида в числовой ? или что? function stringToInteger(s:string):integer; Преобразует строку в целое число. Если предлагаемая строка содержит некорректное число, будет возвращено значение 0. Строка может содержать только цифры и знаки '+' или '-' вначале. function stringToReal(str:string; base:integer):real; Преобразует строку в натуральное число. Второй параметр является базой для преобразования.
|
|
| |
programmer | Дата: Воскресенье, 10.05.2009, 11:34 | Сообщение # 45 |
Умный
Группа: Проверенные
Сообщений: 599
| если бы все было так просто... мне нужно из строки вида "adds",13+7,a,b+c получить чтото вида adds,20,значение а,сумма б и с
|
|
| |
|