Life is a life... We are the humans...
время 23-57... завтра в школу... часов в 9 вспомнил, что задали 7 номеров по инфе... причём вспомнил не сам, а позвонил один товарищ и попросил списать... хм...
через полчаса, сделав инфу, с чистой совестью пошёл за комп играть... и тут похвонили ещё 2-е... хм... чё-то всем нужна информатика... приём именно я должен её сделать... ладно, я не жадный, пусть берут кому надо...
З.Ы. Кого интерисует, могу выложить задания...
через полчаса, сделав инфу, с чистой совестью пошёл за комп играть... и тут похвонили ещё 2-е... хм... чё-то всем нужна информатика... приём именно я должен её сделать... ладно, я не жадный, пусть берут кому надо...
З.Ы. Кого интерисует, могу выложить задания...
я дельфи немного знаю... а дельфи это паскаль... если чё не сложное, то могу помчь в принципе...
а ты скажи, что надо, может помогу?
vir=record
type:byte; {0 is a variable, 1 is a number}
next:pvir;
case byte of
0: (vn:char);
1: (val:integer);
end; *)
type pvar=^vvar;
vvar=record
vn:char;
val:integer;
next:pvar;
end;
var
vl,cur,vt:pvar; {variable list}
i,j,k:integer;
sign:byte; {0 < 1 = 2 > 3 <= 4 <> 5 >= }
s:string;
state:byte;
begin
assign(input,'hpp.in');
reset(input);
assign(output,'hpp.out');
rewrite(output);
state:=0;
vl:=nil;
while not eof(input) do begin
readln(s);
for j:=1 to length(s) do begin
if s[j]=' ' then continue;
if (s[j]=';') or (s[j]='.') then begin
case state of
255:; {invalid state, cleared}
4:
{completed an assignment operator}
cur^.val:=i+k;
$46:
case sign of
0: writeln(i<k);
1: writeln(i=k);
2: writeln(i>k);
3: writeln(i<=k);
4: writeln(i<>k);
5: writeln(i>=k);
end;
$82:writeln(i+k);
$81:writeln(i); {if there was no final number, write sum of vars}
end;
if s[j]='.' then break;
state:=0;
continue;
end;
case state of
0: begin {waiting for variable, ? or !}
case s[j] of
'?':begin
state:=$41; {waiting 1st var in condition}
i:=0;
sign:=0;
continue;
end;
'!': begin
state:=$80; {waiting expression}
i:=0;
end;
'A'..'Z',
'a'..'z': begin
state:=1;
cur:=vl;
while (cur<>nil) and (cur^.vn<>s[j]) do cur:=cur^.next;
if cur=nil then
if vl=nil then begin
new(vl);
vl^.vn:=s[j];
vl^.next:=nil;
vl^.val:=0;
cur:=vl
end else begin
vt:=vl;
while vt^.next<>nil do vt:=vt^.next;
new(cur);
cur^.vn:=s[j];
cur^.val:=0;
cur^.next:=nil;
vt^.next:=cur;
end; {generated new var}
i:=0; {holding sum of vars}
end; end; end;
1: begin {waiting '='}
if s[j]<>'=' then begin
writeln('Incorrect assigning operator!');
state:=255;
end else state:=2;
end;
2:
{waiting for var or number}
case s[j] of
'0'..'9': begin
sign:=0; {positive number}
state:=4;{reading rest of number}
k:=ord(s[j])-48;
end;
'-':begin
sign:=1;
state:=4;
k:=0;
end;
'a'..'z','A'..'Z':begin
state:=3; {waiting plus sign}
vt:=vl;
while (vt<>nil) and (vt^.vn<>s[j]) do
vt:=vt^.next;
if vt=nil then
writeln('Undefined varable ',s[j], 'assuming zero')
else i:=i+vt^.val;
end;
end;
3: if s[j]<>'+' then begin
writeln('Incorrect expression syntax!');
state:=255
end else state:=2;
4: if s[j] in ['0'..'9'] then
if sign>0 then k:=10*k-(ord(s[j])-48) else k:=10*k+ord(s[j])-48
else
writeln('Incorrect number format, ignored');
$41: if s[j] in ['A'..'Z','a'..'z'] then begin
cur:=vl;
while (cur<>nil) and(cur^.vn<>s[j]) do cur:=cur^.next;
if cur=nil then begin
writeln('Undefined variable in condition (',s[j],'), operator ignored');
state:=255;
end else begin
state:=$42;
i:=cur^.val;
end
end else begin
writeln('Variable expected');
state:=255;
end;
$42:
case s[j] of
'<':state:=$43; {<> or < or <=}
'=':begin
sign:=1; {=}
state:=$45;{waiting second var}
end;
'>':state:=$44;
else begin
state:=255;
writeln('Incorrect comparison sign');
end;
end;
$43:
case s[j] of
'>':begin {<>}
sign:=4;
state:=$45;
end;
'=':begin
sign:=3; {<=}
state:=$45;
end;
else begin
dec(j);
state:=$45;{re-parsing symbol}
sign:=0; {<}
continue;
end;
end;
$44:
if s[j]<>'=' then begin
dec(j);
sign:=2; {>}
state:=$45;
continue;
end else begin
sign:=5; {>=}
state:=$45;
end;
$45: if s[j] in ['A'..'Z','a'..'z'] then begin
cur:=vl;
while (cur<>nil) and(cur^.vn<>s[j]) do cur:=cur^.next;
if cur=nil then begin
writeln('Undefined variable in condition (',s[j],'), operator ignored');
state:=255;
end else begin
state:=$46;{completely parsed comparison}
k:=cur^.val;
end
end else begin
writeln('Variable expected');
state:=255;
end;
$80:
case s[j] of
'0'..'9': begin
sign:=0; {positive number}
state:=$82;{reading rest of number}
k:=ord(s[j])-48;
end;
'-':begin
sign:=1;
state:=$82;
k:=0;
end;
'A'..'Z','a'..'z':begin
vt:=vl;
while (vt<>nil) and (vt^.vn<>s[j]) do vt:=vt^.next;
if vt=nil then
writeln('Undefined varable ',s[j], 'assuming zero')
else i:=i+vt^.val;
state:=$81;{waiting plus sign}
end;
else begin
writeln('Variable expected');
state:=255;
end;
end;
$81:
if s[j]<>'+' then begin
writeln('Plus sign expected in expression written');
state:=255;
end else state:=$80;
$82: if s[j] in ['0'..'9'] then
if sign>0 then k:=10*k-(ord(s[j])-48) else k:=10*k+ord(s[j])-48
else begin
writeln('Incorrect number format, ignored');
state:=255;
end;
end; {case state}
end; {for}
end;
end.
Вот с этим разобраться...
Интерпретатор языка Н++
Входной файл: hpp.in
Выходной файл: hpp.out
Время на один тест: 2 секунды
Компания "PascalMustDie" изобрела новый язык программирования — Н++. Данный
язык пока включает в себя только 3 операции:
1) Операция присваивания
Операция присваивания имеет следующий вид:
<имя переменной> = <выражение>
Выражение имеет вид:
<выражение> = <переменная> /<число> / <переменная> + <выражение>
2) Операция сравнения
Операция сравнения в языке Н++ может сравнивать только 2 переменные (не выражения).
Общий вид:
? <переменная_1> <знак сравнения> <переменная_2>, где
<знак сравнения> может быть ">", "<". "==", ">=", "<=", "<>"
Операция сравнения выводит на экран одно из слов — TRUE или FALSE.
3) Операция вывода на экран выражения
Общий вид: ! <выражение>
данная операция выводит на экран значение <выражения>
Любая переменная в языке программирования Н++ имеет свое имя, состоящее из
одной латинской буквы. Никакие две переменные не могут иметь одинаковое имя.
Однако, язык Н++ чувствителен к регистру. Так. например, переменныс А' и а' являются разными переменными. Все переменные языка Н++ являются переменными типа Integer.
Операции в языке Н++ отделяются друг от друга символом ";". При этом символ
« » (пробел) и символ переноса строки интерпретаторами Н++ игнорируются. Программа. написанная на языке Н++ заканчивается символом «.» (точка).
Ваша задача состоит в том, чтобы написать программу. которая по заданному
набору операций языка Н++ определит. что они выводят на экран.
Входной файл: Входным файлом является программа, написанная на языке Н++
Выходной файл: Ваша программа должна вывести в выходной файл результат
работы программы, написанной на языке Н++
лана, посмотрим...
тока я не понял, в чём проблема? этот код не рабтает? или надо понять механизм работы?
ясна... лана, посмотрим... может помогу чем-нить...