Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2012, 12:18   #1
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию В чем ошибка?

Помогите,пожалуйста найти ошибку..Задача Удалить элемент, который находится в середине стека, если нечетное число элементов, а если четное, то два средних.
Код HTML:
var
  Form3: TForm3;
 m, d:array of integer;
 c, cd: integer;
     implementation
 {$R *.dfm}
procedure TForm3.Button2Click(Sender: TObject);
var

N:integer;
begin

N:=Strtoint(Edit3.Text);
setlength(m, n);

end;

procedure TForm3.Button3Click(Sender: TObject);
begin
m[c]:=strtoint(edit1.Text);

edit2.Text:=edit2.Text+' '+inttostr(m[c]);
edit1.Text:='';
c:=c+1;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
c:=0;
cd:=0;
end;

procedure TForm3.Button1Click(Sender: TObject);
var
n,i :integer;

 begin
    N:=Strtoint(Edit3.Text);
  ;

    if (n mod 2 = 0) then
              begin
                for i:=0 to n-1 do
                  if ((i<>n div 2) and (i<>n div 2 + 1)) then
   begin
   d[cd]:=m[i];
   cd:=cd+1;
   end;

    end
    else
      begin
          for i:=0 to n-1 do
                  if (i<>n div 2 +1) then
                  begin
                  d[cd]:=m[i];
                  cd:=cd+1;
                  end;
                  end;
 for i:= 0 to cd-1 do
    edit4.Text:=edit4.Text+' '+inttostr(d[i]);

end;
end.
Выдает ошибку access violation at address 00456103 in module project 1.exe

Последний раз редактировалось 999; 15.03.2012 в 12:39.
999 вне форума Ответить с цитированием
Старый 15.03.2012, 12:47   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
m, d:array of integer;
зачем вам два массива?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.03.2012, 12:52   #3
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

так как нужно вывести два массива первоначальный и с удаленной строкой(строками)
999 вне форума Ответить с цитированием
Старый 15.03.2012, 13:40   #4
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

вот с одним массивом но тоже ошибка,подскажите пожалуйста в чем
Код HTML:
var

N:integer;
begin

N:=Strtoint(Edit3.Text);
setlength(m, n);

end;

procedure TForm3.Button3Click(Sender: TObject);
begin
m[c]:=strtoint(edit1.Text);

edit2.Text:=edit2.Text+' '+inttostr(m[c]);
edit1.Text:='';
c:=c+1;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
c:=0;

end;

procedure TForm3.Button1Click(Sender: TObject);
var
n,i :integer;
begin
N:=Strtoint(Edit3.Text);
 if n mod 2=0 then begin
for i:= n div 2 to n-1 do
 m[i]:=m[i+2];
 n:=n-2;
 end
 else begin
 for i:= n div 2+1 to n-1 do
 end;m[i]:=m[i+1];
 N:=n-1;
  for i:= 0 to n-1 do
 edit4.Text:=edit4.Text+' '+inttostr(m[i]);
end;
end.
999 вне форума Ответить с цитированием
Старый 15.03.2012, 13:42   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

При каких обстоятельствах ошибка выходит?
Базиля вне форума Ответить с цитированием
Старый 15.03.2012, 13:47   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Код:
 for i:= n div 2+1 to n-1 do
 end;m[i]:=m[i+1];
 N:=n-1;
Косяк!
вообще на мой взгляд, сам подход к реализации у вас неверный!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 15.03.2012, 15:43   #7
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

если число не четное,удаляет почему-то предпоследний элемент,если четное то удаляет два последних...
999 вне форума Ответить с цитированием
Старый 15.03.2012, 17:42   #8
d3qoot
Пользователь
 
Регистрация: 08.06.2011
Сообщений: 30
По умолчанию

mass - первоначальный массив
massdel - получившийся массив

Добавим процедуру записи массива massdel:
Код:
//процедура massive
begin
 for i:=1 to length(massdel) do
  if i<>j then
  massdel[i]:=mass[i]
 else
  massdel[i]:=mass[i+1];
massdel[length(massdel)]:=mass[length(mass)];
end;

Условия:
Код:
if odd(length(mass)) then
 begin
  j:=trunc(length(mass) / 2)+1;
  massive;
 end
else
 begin
  j:=trunc(length(mass)/2); 
  massive;
  inc(j);
  massive;
 end;
Впринципе, таким способом можно попробовать. Останется только вывести массив в stringgrid, например.
d3qoot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка!! deadh5n1 Помощь студентам 1 08.01.2012 21:13
В чем ошибка? Ast4 Microsoft Office Excel 11 25.02.2011 16:07
В чем ошибка? Benderbej PHP 4 23.02.2011 00:50
В чем ошибка? Кинельски Общие вопросы Delphi 17 24.05.2010 23:08
В чем ошибка? olegnaum Общие вопросы C/C++ 7 03.02.2010 12:58