интерпретатор языка программирования паскаль
| |
12121 | Дата: Четверг, 16.04.2009, 16:06 | Сообщение # 16 |
Программист
Группа: Проверенные
Сообщений: 357
| massivizstroki('program;begin;write("helloworl");end'); сюда же надо добавить обьявление переменных?
|
|
| |
programmer | Дата: Четверг, 16.04.2009, 16:07 | Сообщение # 17 |
Умный
Группа: Проверенные
Сообщений: 599
| а тоесть програм проходит проверку и отдуда пытается отрезать 7 символов которых нет... буду думать
|
|
| |
programmer | Дата: Четверг, 16.04.2009, 16:08 | Сообщение # 18 |
Умный
Группа: Проверенные
Сообщений: 599
| Quote (12121) massivizstroki('program;begin;write("helloworl");end'); сюда же надо добавить обьявление переменных? да я теперь понял к каждому элементу массива нужно предварительно добавить --------------------------------- тогда ьудет что скопировать и несовпадет и пойдет дальше
|
|
| |
12121 | Дата: Четверг, 16.04.2009, 16:10 | Сообщение # 19 |
Программист
Группа: Проверенные
Сообщений: 357
| все довести до ума будет очень сложно. может сначала сделал бы что попроще?
|
|
| |
programmer | Дата: Четверг, 16.04.2009, 16:12 | Сообщение # 20 |
Умный
Группа: Проверенные
Сообщений: 599
| что?
|
|
| |
12121 | Дата: Четверг, 16.04.2009, 16:34 | Сообщение # 21 |
Программист
Группа: Проверенные
Сообщений: 357
| хоть игрушку какую. а тут надо придумать как для каждой процедуры сделать свои переменные. можно выделить 1 массив под эти цели но если 1 процедура вызовет 2? тогда надо 2 массива а если 2 вызовет 3? плохо что нет стека
|
|
| |
programmer | Дата: Четверг, 16.04.2009, 16:38 | Сообщение # 22 |
Умный
Группа: Проверенные
Сообщений: 599
| да не лучше буду делать интерпретатор но неспеша,продумывая все
|
|
| |
12121 | Дата: Четверг, 16.04.2009, 16:38 | Сообщение # 23 |
Программист
Группа: Проверенные
Сообщений: 357
| Может лучше сделать свой бейсик. Он проще
|
|
| |
programmer | Дата: Четверг, 16.04.2009, 16:43 | Сообщение # 24 |
Умный
Группа: Проверенные
Сообщений: 599
| я его незнаю да и синтаксис поменять - несложно
Сообщение отредактировал programmer - Четверг, 16.04.2009, 18:08 |
|
| |
121212 | Дата: Воскресенье, 19.04.2009, 14:59 | Сообщение # 25 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| да долго это всё делать скачай МобилеПаскаль и не парся!
|
|
| |
programmer | Дата: Воскресенье, 19.04.2009, 16:52 | Сообщение # 26 |
Умный
Группа: Проверенные
Сообщений: 599
| уменя во первых несименс - мне непойдет он и тем более если тынезнаешь как это делать это незначит что я незнаю
|
|
| |
programmer | Дата: Понедельник, 20.04.2009, 14:34 | Сообщение # 27 |
Умный
Группа: Проверенные
Сообщений: 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; procedure vabr(stroka:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(stroka,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(stroka,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 hel='begin' then break; // после обработки 'program' выход из цикла и ничего больше не проверяется !! if hel='end' then break; // короткие команы нужно проверить раньше длинных: если hel='end' то copy(hel,0,5) приведет к зависанию !! //if Copy(hel,0,7)='program' then break; //soob('|'+copy(hel,0,5)+'|'); // это я так искал ошибку if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; end; end; {------------------------------------------------} begin massivizstroki('program;begin;write("helloworld");end'); main; end.
|
|
| |
121212 | Дата: Понедельник, 20.04.2009, 14:54 | Сообщение # 28 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| не процедура а функция наверно!
|
|
| |
121212 | Дата: Понедельник, 20.04.2009, 15:29 | Сообщение # 29 |
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация:
« 14 »
Статус: Offline
| 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(stroka:string); var i:integer; // убрал лишние переменные begin vas:=1;// - будет количество получившихся строк vars[1]:=''; // что бы с прошлого вызова ничего не осталось for i:=1 to length(stroka) do begin //разбивка на пункты if copy(stroka,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end; if copy(stroka,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(stroka,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 hel='begin' then break; // после обработки 'program' выход из цикла и ничего больше не проверяется !! //if hel='end' then break; // короткие команы нужно проверить раньше длинных: если hel='end' то copy(hel,0,5) приведет к зависанию !! //if Copy(hel,0,7)='program' then break; soob('|'+copy(hel,0,5)+'|'); // это я так искал ошибку if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end; end; end; {------------------------------------------------} begin massivizstroki('program;begin;write("helloworld");end'); main; end.
|
|
| |
programmer | Дата: Понедельник, 20.04.2009, 17:41 | Сообщение # 30 |
Умный
Группа: Проверенные
Сообщений: 599
| cпасибо!
|
|
| |
|