Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Dikoti
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 38
1

Продемонстрировать работу логической функции same(T), определяющую, есть ли в дереве Т хотя бы два одинаковых

31.05.2017, 17:12. Просмотров 326. Ответов 1

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
program Project9;
 
{$APPTYPE CONSOLE}
 
{$R *.res}
 
uses
System.SysUtils;
 
type tipder=char;
ptrDER=^DEREVO;
DEREVO=record
zn: tipder;
l,r: ptrDER;
end;
der=ptrDER;
var D,X: der;
f: text;
a: tipder;
s: string;
 
procedure PECHD(T: der);
var T1: der;
begin
T1:=T;
if (T^.zn='*') or (T^.zn='+') or (T^.zn='-') then
begin
write('(');
T1:=T^.l;
PECHD(T^.l);
write(T^.zn);
T1:=T^.r;
PECHD(T^.r);
write(')');
end
else write(T^.zn);
end;
 
procedure STR(T: der; s: string);
var i,n,ks,j,f: integer;
s1: string;
T1: der;
begin
n:=length(s);
ks:=0;
f:=0;
for i:=1 to n do
if s[i]='(' then ks:=ks+1
else if s[i]=')' then ks:=ks-1
else if ((s[i]='*') or (s[i]='+') or (s[i]='-')) and (ks=1) then
begin
f:=1;
j:=i;
i:=n; //Вот здесь почему то ошибка. В чем ошибка?
end;
if f=1 then
begin
T^.zn:=s[j];
S1:=copy(s,2,j-2);
new(T1); T1^.l:=nil; T1^.r:=nil;
STR(T1,s1);
T^.l:=T1;
S1:=copy(s,j+1,n-j-1);
new(T1); T1^.l:=nil; T1^.r:=nil;
STR(T1,s1);
T^.r:=T1;
end
else T^.zn:=s[1];
end;
 
function prov(T: der): boolean;
begin
if (('0'<=T^.zn) and (T^.zn<='9')) and (T^.l=nil) and (T^.r=nil) then prov:=true else
if ((T^.zn='+') or (T^.zn='-') or (T^.zn='*')) and (T^.r<>nil) and (T^.l<>nil)
then prov:=true and (prov(T^.l)) and (prov(T^.r))
else prov:=false;
end;
 
begin
assign(f,'D:\DER.txt');
reset(f);
while not eof(f) do
begin
read(f,a);
s:=s+a;
end;
X:=D;
STR(X,s);
writeln('Печать дерева:');
PECHD(D);
writeln;
writeln;
if prov(D) then writeln('Данное дерево является деревом-формулой')
else writeln('Данное дерево не является деревом-формулой');
readln;
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2017, 17:12
Ответы с готовыми решениями:

Описать логическую функцию, описывающую,есть ли в дереве Т хотя бы два одинаковых элемента
помогите пожалуйста решить задачу. описать логическую функцию, описывающую,есть...

Дана целочисленная матрица А(10,10). Если на главной диагонали матрицы есть хотя бы два одинаковых элемента, то найти в матрице индексы минимального э
Дана целочисленная матрица А(10,10). Если на главной диагонали матрицы есть...

Функция: проверить, есть ли в списке из целых чисел хотя бы два одинаковых
Вот задание: Записать логическую ф-ию, которая проверяет, есть ли в списке из...

Проверить, есть ли в списке L хотя бы два одинаковых элемента
1)Составить программу, которая проверяет, есть ли в списке L хотя бы два...

Определить, есть ли в списке хотя бы два одинаковых элемента
Помогите решить или решите если не сложно задачу.. Составить программу,...

1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26847 / 17990 / 7110
Регистрация: 22.10.2011
Сообщений: 31,673
Записей в блоге: 6
03.06.2017, 12:49 2
Цитата Сообщение от Dikoti Посмотреть сообщение
//Вот здесь почему то ошибка. В чем ошибка?
В том, что современные компиляторы не дают изменять переменную цикла внутри этого самого цикла. Если бы код был нормально отформатирован, это сразу бросилось бы в глаза:
Pascal
1
2
3
4
5
6
7
8
9
10
  for i := 1 to n do // цикл по переменной i
    if s[i] = '(' then ks := ks + 1
    else if s[i] = ')' then ks := ks - 1
    else if ((s[i] = '*') or (s[i] = '+') or (s[i] = '-')) and (ks = 1) then
    begin
      f := 1;
      j := i;
      // i:=n; // <--- тут попытка изменить переменную i для того, чтобы на следующей же итерации цикл закончился.
      break // вместо этого воспользуемся оператором, немедленно прекращающим цикл. Эффект будет абсолютно тот же
    end;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2017, 12:49

Проверить, есть ли в списке хотя бы два одинаковых элемента
Написать логическую функцию, которая проверяет, есть ли в списке хотя бы два...

Проверить, есть ли в списке хотя бы два одинаковых элемента
Дан список А, состоящий из записей: первое поле – символ, второе – адрес...

Определить, есть ли в бинарном дереве хотя бы два одинаковых элемента
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru