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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 21:50   #21
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

помечает строчку setlength(a,n)
Toxi вне форума Ответить с цитированием
Старый 16.03.2012, 21:54   #22
d3qoot
Пользователь
 
Регистрация: 08.06.2011
Сообщений: 30
По умолчанию

А мой вариант 14 поста тебе чем не устраивает?
d3qoot вне форума Ответить с цитированием
Старый 16.03.2012, 22:00   #23
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ой ёй ёй что это?
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,n:integer;
begin
randomize;
n:=strtoint (edit1.text);
Это одна процедура
Дальше
Цитата:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i,n,k,c:integer;
begin
for i:=0 to n-1 do
Суть ясна? Вообщем так делать нельзя!
А ещё что бы конкретнее сказать
ТС прошу покажи ВЕСЬ код
То есть весь Unit
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 16.03.2012, 22:09   #24
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Toxi, на будущее: весь код выглядит так:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  arr=array of integer;
var
  Form1: TForm1;
  a:arr;
  n:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
randomize;
n:=strtoint (edit1.text);
randomize;
setlength(a,n);
edit2.Text:='';
for i:=0 to n-1 do
begin
a[i]:=random (20)-10;
edit2.text:=edit2.Text+'    '+inttostr(a[i]);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,k,c:integer;
begin
  if a<>nil then
    begin
      k:=0;
      for i:=0 to n-1 do
        if a[i]<0 then
          k:=i;
      a[k]:=abs(a[0]);
      edit3.text:='';
      for i:=0 to n-1 do
        edit3.text:=edit3.text+'    '+inttostr(a[i]);
    end
  else
    showmessage('Массив не создан')
end;
end.
Код рабочий, пробуй.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 16.03.2012, 23:18   #25
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в общем, Hacker19_90 и whatever абсолютно правы. но я позволю себе прокомментировать, в чём была ошибка, вдруг TC этого не понял...

Toxi,
смотри, ты задал n в описании процедуры на кнопку Button1Click. значит эта переменная у тебя локальная. Значит, после выхода из данной процедуры эта переменная уничтожается.
Потом ты попытался использовать эту переменную n в процедуре Button2Click. И, чтобы компилятор не ругался, ты был вынужден опять описать n как локальную переменную.
Разумеется, её значение НИЧЕМУ хорошему не равно - вот и получаешь обращение за пределы массива.
в решении от whatever переменная n сделана глобальной. она описана в разделе переменных модуля, поэтому эта переменная доступна из любой процедуры/функции данного модуля (и все присвоения, сделанные, например, в модуле Button1Click будут видны в Button2Click...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2012, 22:54   #26
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

whatever, огромное спасибо, код работет)
Serge_Bliznykov спасибо за доступное объяснение
так же спасибо всем кто тратил свое время на меня
Toxi вне форума Ответить с цитированием
Старый 17.03.2012, 23:00   #27
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Код:
...
   if a<>nil then
...
хотелось бы по подробнее узнать что такое nil
Toxi вне форума Ответить с цитированием
Старый 17.03.2012, 23:02   #28
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

nil = NULL = 0 = и т.д.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 17.03.2012, 23:24   #29
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Сейчас попробую объяснить, что такое nil, как сам это понимаю. В случае неточностей просьба не бросаться камнями

Как уже было сказано, nil==ноль, но я бы назвал это "пустота".
Другими словами, если под динамический массив не выделена память и с ним нельзя работать, то он nil. А если, например, a[0]=0, то уже не nil, так как память под элемент с индексом 0 уже выделена и этот элемент равен нулю.

Также справедливо утверждение, что если length(a)=0, то a=nil. В остальных случаях не nil.

В контексте данной задачи кусок кода
Код:
 if a<>nil then
    begin
      ....
    end
  else
    showmessage('Массив не создан')
выполняет роль защиты от ошибки, которая может появиться если нажать button2, не нажав перед этим button1

Надеюсь объяснил понятно и нигде не наврал.
Все тривиальное просто

Последний раз редактировалось whatever; 17.03.2012 в 23:27.
whatever вне форума Ответить с цитированием
Старый 18.03.2012, 20:19   #30
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
выполняет роль защиты от ошибки, которая может появиться если нажать button2, не нажав перед этим button1

Надеюсь объяснил понятно и нигде не наврал.
спасибо большое)) все ясно)
Toxi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на одномерный массив (C++) sesame Помощь студентам 1 18.01.2012 14:27
Одномерный массив задача Delphi Начинающий програм Помощь студентам 12 23.12.2011 21:34
Одномерный массив в Delphi (Задача) Kawun Помощь студентам 10 18.06.2011 14:21
Пожалуйста помогите в Delphi задача на одномерный массив Женя V. Помощь студентам 6 15.05.2009 22:56
Задача на одномерный массив AliVe Помощь студентам 1 19.11.2007 21:35