IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Таблица истинности для заданной функции, Ошибка при введении большого количества элементов
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый день! Написал программу, которая выводит таблицу истинности для заданной функции, например:

функция F=x1^x2 выводится таблица истинности

Код

0
0
0
1


Проблема заключается в том, что когда ввожу функцию состоящую из более чем 12 элементов, x1^x2^.....^x12 появляется ошибка

Прикрепленное изображение

Или если ввести например функцию состоящую из 8 элементов и многократно нажать на кнопку "Посчитать" появляется такая ошибка

Прикрепленное изображение

Также появляется ошибка

"Invalid pointer operation"

Делфи я изучаю не так давно, могу предположить что проблема связана с нехваткой памяти....

Сам алгоритм выполнения программы простой:

Пользователем вводится количество элементов, затем заполняется таблица для этих элементов, одновременно заполнятеся 2я таблица для результата с количеством строк равном количеству строк в 1й таблице.


procedure TForm1.Button1Click(Sender: TObject);
var X, T, myCol: integer;
begin
StringGrid1.RowCount := 1 shl StringGrid1.ColCount;
for X := 0 to StringGrid1.RowCount - 1 do
begin
T := X;
for myCol := StringGrid1.ColCount downto 1 do
begin
StringGrid1.Cells[myCol - 1, X] := IntToStr(T mod 2);
T := T div 2;
end;
end;
end;




Далее пользователь вводит функцию например x1^x2^x3:
Сначала отбрасываются x получается 1^2^3, цифры соответствуют номерам столбцов 1й таблицы из которых следует брать значения
Берется 1я строка, 1-ой таблицы, цифры 1,2,3 заменяются значениями

repeat
for b:=ee to length(str4) do
begin
if (str4[b] in ['0'..'9']) then
begin
if (str4[b+1] in ['0'..'9']) then
begin
per:=1;
chislo:=copy(str4,b,2);
ch:=stringgrid1.Cells[strtoint(chislo)-1,j];
str4[b]:=ch[1];
delete(str4,b+1,1);
break;
end
else
begin
ch:=stringgrid1.cells[strtoint(str4[b])-1,j];
str4[b]:=ch[1];
end;
end;
end;
ee:=b;
inc(ee);
b:=ee;
if b>length(str4) then break;
until ee=length(str4);



получается 0^0^0
Далее запускается цикл который по определенным правилам производит определенные действия со значениями


for i:=1 to stringgrid1.colCount do
begin
while k<8 do
Begin
if length(str3)=1 then break; ///////////
inc(k);
ch:=mas[k];
for b:=p to length(str3) do
Begin
if (ch[1]=str3[b]) then Begin
case ch[1] of
'!':begin
if str3[b+1]='0' then ch1:='1'
else ch1:='0';
str3[b+1]:=ch1[1];
delete(str3,b,1);
k:=0;
p:=1;
end;

'^':Begin
if (str3[b-1]=str3[b+1])and(str3[b-1]='1') then
ch1:='1'
else ch1:='0';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;

'+':begin
if (str3[b-1]=str3[b+1]) then
ch1:='0'
else ch1:='1';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;


'v':Begin
if(str3[b-1]='1')or(str3[b+1]='1') then ch1:='1'
else ch1:='0';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
End;


'>':begin
if (str3[b-1]='1')and(str3[b+1]='0') then
ch1:='0'
else ch1:='1';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;
'~':begin
if ((str3[b-1]='0')and(str3[b+1]='0'))or
((str3[b-1]='1')and(str3[b+1]='1')) then
ch1:='1'
else ch1:='0';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;
'|':begin
if (str3[b-1]='1')and(str3[b+1]='1') then
ch1:='0'
else ch1:='1';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;

'<':begin
if (str3[b-1]='0')and(str3[b+1]='0') then
ch1:='1'
else ch1:='0';
str3[b-1]:=ch1[1];
delete(str3,b,2);
p:=1;
k:=0;
end;

end;
end;
end;
end;
end;



результат получается "0" значение заносится во вторую таблицу и затем берется 2я строка из 1-ой таблицы, и так пока не пройдем по всем строкам 1й таблицы.

Когда проверяю отладчиком, все нормально, т.е. алгоритм вроде правильный.

Еще небольшая проблема, тоже скорей всего связанная с памятью, если не ошибаюсь, когда ввожу больше 17 элементов компьютер зависает.

Сама программа Прикрепленный файл  Таблица_истинности.rar ( 262.73 килобайт ) Кол-во скачиваний: 561



Помогите разобраться с проблемой

Заранее Благодарен за помощь.

Сообщение отредактировано: ninja -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 1:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name