![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Рустам |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нужно составить программу для вычисления типа грамматики (тип 0, тип 1 тип 2 тип 3)
вводим грамматику (vn vt p s) vn - нетерминальные символы, vt терминальные символы p - правило вывода s- начальный символ и программа должна вывести тип возможно кто то уже делал подобную задачу если не трудно пришлите код! заранее благодарен |
amega |
![]()
Сообщение
#2
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
я такой задачи еще не делал но я те кажу чтоб ты время пока зря не тратил
Цитата если не трудно пришлите код! тебе коготовый код под ключик нихто не даст, покажи сначала чтоты сумел зделать и где у тебя проблемы возникли |
Рустам |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
вот 2 наброска есть
uses crt;
var
vt,vn,p,s,z,x: string;
i,j,f,o: integer;
procedure typ1 (p: string,g:integer)
begin
o:=1;
for j:=o to length(p) do begin
if p[j] in [','] then
z:=copy(p,o,j);
o:=j+1;
for i:=1 to length(z) do
if z in ['A'..'Z','a'..'z','0'..'9'] then
inc(y);
if z in ['-'] then
f:=i+2;
for i:=f to length(z) do
if z in ['A'..'Z','a'..'z','0'..'9'] then
inc(t);
if y<=t then g:=1;
else g:=0;
z:='';
t:=0;
y:=0;
end;
end;
procedure typ2(p: string, var g: integer );
begin
o:=1;
for j:=o to length(p) do begin
if p[j] in [','] then
z:=copy(p,o,j);
o:=j+1;
for i:=1 to length(z) do
for y:=1 to length(vn) do
if z[i]=vn(y) then
t:=i+2;
for i:=t to length(z) do
for y:=1 to length(vn) do
g:=2
else g:=1;
end;
end;
procedure typ3(p: string; var g: integer);
begin
begin
clrscr;
write('VT'); readln(vt);
write('Vn'); readln(vn);
write('p'); readln(p);
write('s'); readln(s);
for i:=
typ1(p,g);
if g=1 then typ2(p,g);
if g=2 then typ3(p,g);
я знаю тут сама прога не закончена основной упор на процедуры...для двух типов сделал ..их не проверял.. над третьим пока думаю uses crt;
type
gramm=record
VN: string;
VT: string;
P: string;
S: char;
end;
var
a: array [1..4] of gramm;
z,x: string;
i,j,t,y,f,g,c: integer;
procedure type(z: string; var g:integer);
begin
for j:=1 to length(z) do begin
if z[j] in ['a'..'z' , 'A'..'Z' , '0'..'9'] then
inc(t);
if z[j] in ['-','>'] then
f:=g+2;
end;
for j:=f to length(z) do begin
if z[j] in ['a'..'z' , 'A'..'Z' , '0'..'9'] then
inc(y);
end;
if y>=t then begin
g:=1;
if g:=1 then begin
for j:=1 to length(z) do
for c:=1 to length(a[i].vn)
if z[j]=a[i].vn[c] then
g:=2 else g:=1;
if z[j] in ['-','>'] then
f:=g+2;
end;
for j:=f to length(z) do begin
for c:=1 to length(a[i].vt)
if z[j]=a[i].vt[c] then
g:=2 else g:=1;
end;
for j:=f to length(z) do begin
for c:=1 to length(a[i].vn)
if z[j]=a[i].vn[c] then
g:=2 else g:=1;
end;
if g:=2 then
if t>y then g:=0;
z:='';
y:=0;
t:=0;
end;
begin
clrscr;
for i:=1 to 1 do begin
with a[i] do begin
writeln('BBeDuTE VN');
readln(VN);
writeln('BBeDuTE VT');
readln(VT);
writeln('BBeDuTE P 4epe3 "->" u "," ');
readln(P);
writeln('BBeDuTE S');
readln(S);
writeln;
end;
end;
writeln;
x:=a[i].p;
for i:=1 to 1 do
for j:=1 to length(a[i].p) do begin
if a[i].p[j] in ['a'..'z' , 'A'..'Z' , '0'..'9' , '-' , '>'] then
z[j]:= a[i].p[j];
if a[i].p[j] in [',','.'] then
type(z,g);
delete(a[i].p,1,j)
end;
writeln(g);
readkey;
end.
здесь прога вроде полностью написана но не рабочая она..и всё в одной процедуре но она нечитабельна... |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Пример, какие вводишь исходные данные, можешь привести?
Цитата здесь прога вроде полностью написана но не рабочая она Естественно, нерабочая. Кто ж тебе разрешил называть процедуру зарезервированным словом Type? Она у тебя даже не компилируемая, не то что нерабочая... |
Рустам |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну в первой программе(я написал её позже второй) там уже меньше ошибок чем во второй (я её писал первой)..
ну например ввожу грамматику ... Нетерминалы A,B,C,S например ввожу терминалы q,w,e,+ ввожу правило вывода S->AB,S->C,AB->qwe,C->+ ввожу первый символ S это вроде как пример грамматики типа 2 следовательно должен вывести "2" |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 12:27 |