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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание массива, С n ключами 
:(
    Опции темы
champion
Дата 29.10.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Реально ли создать массив с n количеством ключей, которое юзверь указывает через readln? Если да, то как?


--------------------
user posted image
PM MAIL   Вверх
Mal Hack
Дата 29.10.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Можно, но через динамическую память, т.к. при объявлении в var ты можешь указать N, но это N должно быть вышеобъявленной константой.
PM ICQ   Вверх
Rencom
Дата 30.10.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно определить большой массив, например, из 1000 элементов. Когда юзер вводит n<1000, работать с частью массива: A[0], ..., A[n]. В итоге будет казаться, что размерность массива задал юзер.
PM MAIL   Вверх
Mal Hack
Дата 30.10.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Rencom это самое простое решение, но представь, если N = 3, то сколько памяти уйдет в пустую? Ведь ОП выделит место все-равно под 1000 элементов.
PM ICQ   Вверх
Rencom
Дата 31.10.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А как в списке реализовать быстрый доступ к нужному элементу, не перебирая весь список?))
PM MAIL   Вверх
Mal Hack
Дата 1.11.2005, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Rencom @ 1.11.2005, 00:49)
А как в списке реализовать быстрый доступ к нужному элементу, не перебирая весь список?))

В дин. памяти? Сразу указать смещение.
PM ICQ   Вверх
Rencom
Дата 1.11.2005, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mal @ 1.11.2005, 00:33)
Цитата(Rencom @ 1.11.2005, 00:49)
А как в списке реализовать быстрый доступ к нужному элементу, не перебирая весь список?))

В дин. памяти? Сразу указать смещение.

т.е. запускать примерно такой цикл?
Код

(* условные обозначения, чтобы было понятно о чем речь: *)
type
 TList=^TNode;
 TNode=record
                ...
                ...
                next: TList
             end;
var MyList: TList;
(* теперь сам цикл: *)

n:=...; MyList:=...;
for i:=0 to n do 
      MyList:=MyList^.next;


или есть процедура в паскале специальная?
PM MAIL   Вверх
Mal Hack
Дата 1.11.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Ну типа того. На вскидку я не помню, но делал точно.
PM ICQ   Вверх
Snowy
Дата 1.11.2005, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Нет. Это все делается проще. Просто за давностью и ненужностью я уже забыл.
Но в любом учебнике по паскалю это можно найти.
Делается примерно так:
Объявляем массив [0..1]
Отключаем директивой компилятора проверку границ массива.
А вот что потом, не помню smile
Качни какой-нить учебник по паскалю.
В Delphi то такой проблемы нет, а в TP была.
PM MAIL   Вверх
volvo877
Дата 1.11.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Snowy @ 1.11.2005, 07:32)
А вот что потом, не помню smile

Вот это:
Код
{$R-}

type
  TType = integer; { или любой другой }
  PDynArray = ^TDynArray;
  TDynArray = array[1 .. 1] of TType;

var
  arr: PDynArray;
  n, i: integer;

begin
  write('n = '); readln(n); { размер массива }
  { Резервируем память в "куче" }
  getmem(arr, n * sizeof(TType));

  { Работаем с массивом }
  for i := 1 to n do
    arr^[i] := 2 * i; 

  for i := 1 to n do
    Write(arr^[i]:4);

  { Освобождаем память }
  freemem(arr, n * sizeof(TType));
end.

PM MAIL   Вверх
Mal Hack
Дата 1.11.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Может тогда лучше -1..-1 написать?
PM ICQ   Вверх
Snowy
Дата 1.11.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Цитата(volvo877 @ 1.11.2005, 09:59)
Вот это:

Точно. Нужен тип "Указатель на массив". Вспомнил.

Цитата(Mal @ 1.11.2005, 11:27)
Может тогда лучше -1..-1 написать?

Зависит от того, какой элемент мы хотим видеть первым.
Меняем мы количество элементов, а первый задаем сразу.

Цитата(volvo877 @ 1.11.2005, 09:59)
{$R-}

А это она и есть - директива компилятору, чтобы не ругался на выход за пределы массива.
Только пользоваться нужно аккуратно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

2. Публиковать ссылки на варез

3. Оффтопить

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

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

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


 




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


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

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