Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
1

Исключение класса EstackOverflow c сообщением 'Stack overflow'

03.05.2015, 16:55. Показов 1095. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
У меня возникла проблема. Мне по условию задачи нужно составить множество всех значений, имеющихся в массивах C и D, без повторов.
Вот код обработчика:
Delphi
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
procedure TForm1.Button3Click(Sender: TObject);
var
a,d,c:array of real;
    i,j,k,n,z,sl:integer;
begin
Setlength(c,n);
Setlength(d,n);
Setlength(a,k);
for i := 0 to n - 1 do
  if StringGrid1.Cells[i,1]='' then c[i]:=0
  else c[i]:=StrToint(StringGrid1.Cells[i,1]);
  n:=strtoint(Edit1.Text);
  if StringGrid2.Cells[i,1]='' then d[i]:=0
  else d[i]:=StrToint(StringGrid2.Cells[i,1]);
  z:=strtoint(Edit2.Text);
  for i:=1 to z do
 sl:=slyanye(C,D,A);
 begin
  i:=1;
while i<=z do
 begin
  j:=i+1;
  while j<=z do
   begin
    if a[j]=a[i] then
     begin
      for k:=j to z-1 do
      a[k]:=a[k+1];
      z:=z-1;
      end
     else j:=j+1;
   end;
  i:=i+1;
 end;
 readln;
for i:= 1 to z-1 do
StringGrid3.ColCount:=z-1;
for j := 0 to z-2 do
            StringGrid3.Cells[j,0]:=IntToStr(k+1);
end;
end;
Помимо основного юнита у меня есть еще автономный, в котором описывается функция слияния двух массивов:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
unit Unit2;
interface
  function slyanye (masc,masd,masa: array of real):integer;
implementation
function slyanye;
    var i:integer;
    begin
     if odd(i) then  masa[i]:=masc[i div 2 +1]
     else masa[i]:=masd[i div 2];
    write(masa[i],' ');
  end;
end.
При попытке запуска Delphi ругается и выдает ошибку Исключение класса EstackOverflow c сообщением 'Stack overflow'
Подскажите, пожалуйста, где я допускаю ошибку.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2015, 16:55
Ответы с готовыми решениями:

Исключение класса EConvertError с сообщением что is not valid floating point value
const G1=100; type GG=array of extended; var n:integer; Form1: TForm1; ...

Сообщение "Stack overflow" (исключение EStackOverflow)
Добрый день! Подскажите пожалуйста, когда может появляться сообщение &quot;Stack overflow&quot; (исключение...

Исключение класса EOverflow с сообщением 'Floating point Overflow' при запуске программы
В программе решается задача с применением итерации изначально l1=2,l0=0. Но при запуске выдается...

Ошибка: Exception class EStackOverflow with message 'Stack overflow'
--------------------------- Debugger Exception Notification --------------------------- Project...

9
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.05.2015, 17:54 2
Ты зачем сначала выделяешь память под массивы, и только потом вводишь размеры?
Delphi
1
2
3
4
5
n:=strtoint(Edit1.Text);
Setlength(c,n);
Setlength(d,n);
z:=strtoint(Edit2.Text);
Setlength(a,z);//не k!
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
03.05.2015, 18:05  [ТС] 3
Исправила, появилось другое исключение класса EInvalidPointer с сообщением 'Ivalid pointer operation'
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.05.2015, 18:15 4
Delphi
1
2
for i:=1 to z do
 sl:=slyanye(C,D,A);
Массивы динамические, индексы от 0 до z-1, замените.

Добавлено через 6 минут
Вообще не понимаю для чего вводится z? Ведь размерность массива А вроде тоже=n.
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
03.05.2015, 18:17  [ТС] 5
Заменила. Все равно ругается, выдает ту же ошибку
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.05.2015, 18:19 6
Да напишите Вы точное условие задачи и прикрепите архив проекта. До завтра что ли буду в угадалки играть?
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
03.05.2015, 18:24  [ТС] 7
В условии это не оговаривалось, и я решила, что у нового массива будет размерность отличаться от исходных двух.
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
03.05.2015, 18:39  [ТС] 8
Хорошо)

Условие: Составьте подпрограмму, исходными данными которой являются числовые массивы С и D из n элементов. основной ее результат так же массив, получающий некоторое множество элементов. Их количество (оно может быть нулю) -- еще один результат.
Требуемые результаты подпрограмм и прочие данные указаны в вариантах.
Вариант 14: Множество всех значений, имеющихся в массивах C и D, без повторов.
Вложения
Тип файла: rar oldwork8.rar (204.8 Кб, 1 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.05.2015, 20:14 9
Ввести нужно только N, размер массива А заранее не известен, поэтому K или (Z) вводить не нужно.
А память выделять в процессе его заполнения
Delphi
1
2
3
4
5
z:=0;
выбрали элемент для вставки
z:=z+1;
setlength(a,z);
a[z-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
i:=1; j:=1; k:=1; {устанавливаем счётчики}
{выберем первый элемент}
if a[1]<b[1] then
 begin
  c[1]:=a[1];
  inc(i);
 end
else
 begin
  c[1]:=b[1];
  inc(j);
 end;
{выберем остальные}
while (i<=n) or (j<=n) do {пока не дошли до конца каждого из массивов}
 begin
  if (i<=n) and (j<=n) then {если оба массива ещё не закончились}
   begin
    if a[i]<b[j] then {то смотрим меньший из текущих элементов}
     begin
      if a[i]<>c[k] then{если он не равен последнему элементу нового массива}
       begin
        inc (k); {увеличиваем счетчик}
        c[k]:= a[i];{запишем элемент}
       end;
      inc(i); {переходим к следующему элементу соответствующего массива}
     end
    else
     begin {аналогично если меньше b[i]}
      if b[j]<>c[k] then
       begin
        inc (k);
        c[k]:= b[j];
       end;
      inc(j);
     end
   end
  else if j>n then {иначе один из массивов уже закончился}
   begin {и мы пишем из того, в котором ещё есть элементы}
    if a[i]<>c[k] then
     begin
      inc(k);
      c[k]:= a[i];
     end;
    inc(i);
   end
  else if i>n then
   begin
    if b[j]<>c[k] then
     begin
      inc(k);
      c[k]:=b[j];
     end;
    inc (j);
   end;
 end;
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 10
03.05.2015, 20:40  [ТС] 10
Хорошо, огромное спасибо за помощь!
0
03.05.2015, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2015, 20:40
Помогаю со студенческими работами здесь

Исключение класса EInOutError с сообщением 'Invalid filename'
Здравствуйте, вот есть фрагмент кода: AssignFile(nomtextfile,dest+'UP1SCHET.ini');...

Исключение класса EConvertError с сообщением: ''' is not a valid integer value
Доброго времени суток. Просьба помочь новичку по одной задаче. Условие: Дан одномерный массив....

Исключение класса ElnOutError с сообщением 'I/0 error 183'
помогите добить! запускается, при нажатии кнопки вылазит ошибка procedure...

Stack Overflow: ошибка при исполнении кода консольного класса
program Numbermass; {$APPTYPE CONSOLE} uses SysUtils, Windows, masik in '..\masik.pas';...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru