Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массиву присвоить сразу все значения 
:(
    Опции темы
pavelv
Дата 17.2.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



В пятницу хотел сделать подобное и понял, что не знаю как. Почитал хелп, что-то по нолям. Собственно задача, если вдруг кто не понял:
var a:array[1..3] of integer;
begin
 //наверное что-то такое
 a:=(1,2,3);
end;

Знаю, что можно сделать константно, но теперь уже просто хочется узнать "собственно как?". Заранее благодарен за помощь.
PM MAIL   Вверх
LesnoyChelovek
Дата 17.2.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



Для твоего примера код будет выглядеть так:
Код

for i:=1 to 3 do
a[i]:=i;


Это сообщение отредактировал(а) LesnoyChelovek - 17.2.2008, 17:24


--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Esperito
Дата 17.2.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: нет
Всего: 3



Если записывать константы в секции interface, то можно так:
Код

var
  a: array[1..3] of integer = (1, 2, 3);

PM MAIL   Вверх
pavelv
Дата 17.2.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Вы не очень поняли о чем я, всё это я знаю.

var
  a: array[1..3] of integer = (1, 2, 3);

Насколько мне не изменяет память этот код работать не будет, вот если "var" заменить на "const" то всё будет впорядке.
2LesnoyChelovek: 1,2,3 были для примера. А если у тебя массив состоит из 15ти значений и все разные(связи между ними нте), а ну и при этом нельзя использовать константы. Каждому a[i]-му свой элемент присваивать? Помойму это не очень красивый код, да и к тому же громоздкий.

Ещё раз попробую пояснить чего хочу.
var a:array[1..x] of integer;
x известен заранее и не меняется. Все значения массива известны заранее, но через константы его задать нельзя. Вариант задать каждый элемент в отдельности недопустим. Хочется написать один оператор присваивания и засунуть через него сразу все элементы массива.

Вот такой вариант кода тоже неверен:
Код

const b:array[1..x] of integer =(....)
var a:array[1..x] of integer;
begin
 a:=b;
end.


Много конечно хочу, но не верю что такой возможности нет smile
PM MAIL   Вверх
bems
Дата 17.2.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(pavelv @  17.2.2008,  17:54 Найти цитируемый пост)
Насколько мне не изменяет память этот код работать не будет, вот если "var" заменить на "const" то всё будет впорядке.
если мпассив глобальный, то можно и с var



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Qu1nt
Дата 17.2.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Код

procedure TForm1.Button1Click(Sender: TObject);
{$J+}
const
  a: array [1..5] of Integer = (6, 2, 3, 4, 5);
begin
  a[1] := 1; // magic ;)
end;

Ы?
PM MAIL   Вверх
pavelv
Дата 17.2.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Угу извиняюсь, про интерфэйс чет недочитал. Массив в процедуре, задан локально. Единственная идея была как-то преобразовать (1,2,3,...) в массив и присвоить уже нужному массиву. Но только функций преобразования в такие типы я не знаю :(
PM MAIL   Вверх
bems
Дата 17.2.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(pavelv @  17.2.2008,  18:05 Найти цитируемый пост)
Массив в процедуре, задан локально
тогда этот вариант

Цитата(pavelv @  17.2.2008,  17:54 Найти цитируемый пост)
const b:array[1..x] of integer =(....)
var a:array[1..x] of integer;
begin
 a:=b;
end.
но вместо array[1..x] of integer идентификатор типа, равного array[1..x] of integer



--------------------
Обижено школьников: 8
PM MAIL   Вверх
pavelv
Дата 17.2.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



bems если честно не очень понял. Если ты хочешь в конст просто задать всё явно и потом присвоить, то так нельзя. Считай, что Const просто не существует.

P.S> Возможно туплю, но пока не понимаю какой такой тип равен array[1..x] of integer
PM MAIL   Вверх
bems
Дата 17.2.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Код

type TIntArr=array[1..x] of integer;
const b:TIntArr =(....)
var a:TIntArr;
begin
 a:=b;
end.


Добавлено через 3 минуты и 13 секунд
а это чем не нравится?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
lukas
Дата 18.2.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



или усовершенствованный вариант немного....

Код

function ArrayX(Ar: Array of String): Array of String;
begin
Result := Ar;
end;

...
 Var
 AR: Array[0..3] of String;
begin

AR := ArrayX(['a','b','c','d']);

end;
 


Вообще не проверял, но если компилятор не будет ругаться, должно по идее работать


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
VICTAR
Дата 18.2.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(lukas @  18.2.2008,  17:19 Найти цитируемый пост)
Вообще не проверял, но если компилятор не будет ругаться, должно по идее работать 

не будет. не будет работать даже такой вариант
Код

var
 a : array [0..9] of String;
 b : array [0..9] of String;
begin
  a := b;
end;

ибо для компилятора это разные типы
PM MAIL   Вверх
lukas
Дата 18.2.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



ну тогда вот так...


Код


procedure ArrayX(Var Result: Array of String; const Ar: Array of String);
  Var
  I: Integer;
begin
SetLength(Result,Length(Ar));
 for i:=0 to High(Ar) do Result[i] := Ar[i];
end;
...
 Var
 AR: Array[0..3] of String;
begin
ArrayX(AR,['a','b','c','d']);
end;




Добавлено через 3 минуты и 43 секунды
хм... почему то в процедуре SetLength компилятор ругается.... 

Это сообщение отредактировал(а) lukas - 18.2.2008, 17:40


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
VICTAR
Дата 18.2.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



lukas, я думаю, что тут задача не перегнать значения из одного массива в другой. 
А для обычного копирования либо Move, либо массивы одного типа.
PM MAIL   Вверх
bems
Дата 18.2.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(lukas @  18.2.2008,  17:38 Найти цитируемый пост)
почему то в процедуре SetLength компилятор ругается.... 
это потому что 

Цитата(lukas @  18.2.2008,  17:38 Найти цитируемый пост)
Array of String
в параматрах подпрограммы это любой массив строк, а не динамический массив


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1523 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.