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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование директивы Absolute, (переименовано) 
:(
    Опции темы
merfol
Дата 20.12.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просто никогда не пользовался absolute, суть задачи: дан двумерный массив с отрицательными и положительными числами, надо найти среди них два наименьших среди положительных и поменять их местами, и потом найти среди отрицательных два наибольших и поменять местами и их. В программе обязательно нужно использовать function, absolute.     Оч срочно нужно  smile 
PM MAIL   Вверх
navi
  Дата 20.12.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(merfol @  20.12.2008,  22:52 Найти цитируемый пост)
absolute

не слыхал о такой!!!!
--------------------
 Хакер не преступник! Взлом ради искусства! Смысл в свободе!
PM MAIL Skype   Вверх
Majar
Дата 21.12.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Цитата

absolute


не слыхал о такой!!!! 

Как о функции и никто не слыхал, потому что absolute - это зарезервированное слово, которое используется для объявления так называемых абсолютных переменных:
Код

var
 p: type absolute Seg:Ofs;

где type - стандартный или ранее объявленный тип переменной, а Seg:Ofs - соответственно сегмент и смещение, определяющие адрес памяти, по которому будет размещена переменная p.

Но причем здесь двумерный массив?! Может имеется ввиду описать свою функцию с именем absolute? Но она вероятно будет конфликтовать с зарезервированным словом...в общем ждем пояснений автора вопроса
 

Это сообщение отредактировал(а) Majar - 21.12.2008, 00:21
PM MAIL   Вверх
Dobermann
Дата 21.12.2008, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(merfol @  20.12.2008,  22:52 Найти цитируемый пост)
В программе обязательно нужно использовать function, absolute.

Абсолютом вроде как задают переменную, ссылающуюся на адрес другой переменной...
PM   Вверх
volvo877
Дата 21.12.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Majar @  20.12.2008,  23:11 Найти цитируемый пост)
Но причем здесь двумерный массив?!
При том, что задача - работать с двумерным массивом.  Или ты думаешь, что двумерный массив не подпадает под определение 
Цитата(Majar @  20.12.2008,  23:11 Найти цитируемый пост)
стандартный или ранее объявленный тип переменной
? Что именно запрещает совместно использовать двумерный массив и Absolute? Как? Думай, если бы это было так просто, вопроса бы не было...

Кстати, Absolute - это не только объявление переменной, 
Цитата(Majar @  20.12.2008,  23:11 Найти цитируемый пост)
где type - стандартный или ранее объявленный тип переменной, а Seg:Ofs - соответственно сегмент и смещение, определяющие адрес памяти, по которому будет размещена переменная p.
, а еще и объявление вида:
Код
var
  var_name: type_name absolute another_var;
, то есть описание переменной, накладывающейся на другую переменную.

Как вариант решения задачи:
Код
procedure p(var v; m, n: integer);
type arrtype = array[1 .. (2 * maxint) div sizeof(integer)] of integer;
var arr: arrtype absolute v;
begin
  for i := 1 to m * n do begin
    { работаем с переданной матрицей, как с одномерным массивом }
  end;
end;


Идея понятна? В процедуру (я на самом деле не понимаю, зачем тут нужна функция, в задаче не нужно ничего возвращать, только произвести какие-то действия) передается матрица любого размера, хоть 2*3, хоть 120*15, и на нее внутри процедуры накладывается одномерный массив максимально возможного размера, так что зная размер матрицы мы прекрасно сможем пробежаться по всему этому массиву (ну, какая разница, искать минимальный среди положительных в массиве, или в матрице? В массиве еще проще: надо хранить один, а не 2 индекса) и сделать все, что нужно...
PM MAIL   Вверх
Majar
Дата 21.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(volvo877 @  21.12.2008,  09:42 Найти цитируемый пост)

, а еще и объявление вида:
Код

var
  var_name: type_name absolute another_var;

, то есть описание переменной, накладывающейся на другую переменную.

Спасибо за информацию, не знал об этом

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


Новичок



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

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



спасибо, извините, что долго не отвечал, можно объяснить получше, как реализовать эту программу. Вот дан мне двумерный массив, что значит на него наложить одномерный массив?

Добавлено через 7 минут и 38 секунд
volvo877 можешь подробно описать свою процедуру , плиз, как она работает и что в ней передается 
PM MAIL   Вверх
Virtuals
Дата 23.12.2008, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



merfol, 
вот примерчик демки
Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Const
 MaxX=12;
 MaxY=15;

Type MsT= array[1..MaxY,1..MaxX] of integer;

procedure Xm(mms:MsT);
Var
     ML:array[1..MaxX*MaxY] of integer absolute mms;
     // обьявим переменную ML по абсолютному адресу переменной mms
     //что это дало, а то что получили линейный массив из двумерной матрици
     // а она могла быть и 3х мерной да вообще любой, нас главное интересует
     // точный размер переменной, в данном случае это MaxX*MaxY
     // иначе мы рискуем попасть на AV, вот поэтому и в некоторых источниках пишут что
     //не рекомендуется использование absolute, но присмотритесь какой мощьный механизм.
     //чего стоет только одно: как обьявление переменных разных типов по одному адресу

     Tmp1:integer;
begin
Writeln;
For Tmp1:=1 to MaxX*MaxY do
//цикл по всей матрице, у нас массив линейный, соответственно пофиг как там данные лежат :)
  begin
   Write(Ml[tmp1]:4);
   if tmp1 mod MaxX =0 then writeln;
  end;

end;

Var Ms:MsT;
    tmpX,tmpY:integer;
begin
  { TODO -oUser -cConsole Main : Insert code here }
for tmpy:=1 to MaxY do //цикл по оси Y
 for tmpx:=1 to MaxX do //цикл по оси X
                       Ms[tmpy,tmpx]:=tmpx+(tmpy-1)*MaxX;
  xm(ms); //передали массив в процедуру
readln;
end.


PM MAIL ICQ   Вверх
merfol
Дата 23.12.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, Virtuals, стал понимать чуть чуть как с ним работать, вот написал программу, которая описана в самом начале, но она не хочет переставлять местами эти элементы(по заданию), хотя вроде всё правильно  smile Файл прикрепляю, к сообщению с кодом. Посмотрите, может кто найдет ошибку и скажет что не правильно. 

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  PROG.PAS 1,65 Kb
PM MAIL   Вверх
merfol
Дата 22.1.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



люди помогите  smile  еще чуть чуть осталось доработать программу  smile 
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.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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