Текущий архив: 2007.11.18;
Скачать: CL | DM;
Вниз
Массив - как организовать? (без array и на АПИ) Найти похожие ветки
← →
Б. Гейтс (2007-10-24 21:43) [0]Всем привет!
Как организовать массив с помощью функций GlobalAlloc и т.п.?
Нужно, шоб в одном элементе можна было деРЖАТЬ до 256 байтов.
Работаю на чистом апи, даже array не использую!
Если честно, то даже не на паскале и не на Си.
Помогите, кто чем может!
Есть идея:
1) использовать массив DWORD"ов (кол-во пунктов - 256)
2) после использования функций Global*** хранить в пунктах адреса элементов в массиве DWORD"ов
3) в какой-нить переменной хранить кол-во элементов
Ну о-о-о-о-о-очень нужна!
Буду рад любому ответу!
← →
Правильный_Вася (2007-10-24 21:49) [1]причем тут апи?
если не паскаль и не си, то синтаксис какого языка тебе предложить?
← →
Windows.Errors.Count = $FFFFFF (2007-10-24 21:53) [2]МАСМ \ ФАСМ и прочее...
Вот я тут подумал - форум по дельфи.
Тут все (почти) знают АПИ и поэтому я обратился к вам.
← →
Б. Гейтс (2007-10-24 21:54) [3]Windows.Errors.Count = $FFFFFF - это мое альтер эго )))
← →
vpbar © (2007-10-24 22:17) [4]Массив - последовательность элементов. Блок в памяти - последовательность байт. Похожи?
Выделяешь память. Указатель - указатель на первый элемент. Передвигаешь указатель на размер элемента - вот и второй элемент.
В чем проблема то.
← →
Юрий Зотов © (2007-10-25 00:10) [5]Что-то мне подсказывает, что рановато товарищ Гейтс собрался работать "на чистом API". Ему бы для начала понять, что это такое...
← →
vpbar © (2007-10-25 10:33) [6]Ага Гейтсу надо хотя бы на бейсике покодить :)
← →
Б. Гейтс (2007-10-25 14:21) [7]
> Что-то мне подсказывает, что рановато товарищ Гейтс собрался
> работать "на чистом API". Ему бы для начала понять, что
> это такое...
Ничего не рано! Время как раз то
> Ага Гейтсу надо хотя бы на бейсике покодить :)
Раньше кодил, щас пустяками не занимаюсь
Мне бы примерчик сюда. Необязательно на МАСМ, можно и на Си, но только шоб перенести можно было на МАСМ
Очень нужно, пости все мои программы должны использовать что-то типа списка строк.
Эх, хорошо в дельфи, пишешь себе SetLength и готово!
А в масме такого нет. ШО ДЕЛАТЬ?
← →
Palladin © (2007-10-25 14:23) [8]программиста нормального нанимать
← →
Б. Гейтс (2007-10-25 14:38) [9]
> Palladin © (25.10.07 14:23) [8]
> программиста нормального нанимать
Нет, мне реально ответ нужен! ))
Пытался делать как в [0] и [4] - результат один - не выходит!
← →
Dib@zol © (2007-10-25 14:45) [10]А в чем собсно проблема??
Резервируешь себе ГлобалАллок-ом кусок памяти, и пишешь в него по смещению 256*индекс_элемента ети свои 256 байт!
← →
Jeer © (2007-10-25 14:45) [11]
> результат один - не выходит!
Т.е. входит, но не выходит ?
Значит тебя поимели.
← →
Б. Гейтс (2007-10-25 14:59) [12]
> Резервируешь себе ГлобалАллок-ом кусок памяти, и пишешь
> в него по смещению 256*индекс_элемента ети свои 256 байт!
>
Забыл сказать, нужно, чтоб кол-во элементов можно было менять
> Значит тебя поимели
офтоп )))
← →
Германн © (2007-10-25 15:11) [13]Что, Данила- мастер, не выходит каменный цветок?
:-)
← →
Dib@zol © (2007-10-25 16:17) [14]> Забыл сказать, нужно, чтоб кол-во элементов можно было менять
Уууу... Тут могут подойти только связанные списки (если не хочешь юзать ничего из стандартных Делфей). Если не лень ждать неопределённый срок, жди когда найду время на пример. Если лень - пиши сам)))
Алгоритм таков. Есть структура
TItem = record
Data, Prev, Next : Pointer;
end;
PItem = ^TItem;
и две переменных
FirstItem, LastItem : PItem;
В начале работы некая процедурка, скажем AddNewItem добавляет "в конец" такого импровизированного массива (сиречь в LastItem^) новый элемент, проставляя ему в Prev текущий хранящийся в LastItem адрес, а в Next - NIL. Затем (если это не первый элемент, ессно) по адресу Prev^.Next пишет адрес свежесозданной структуры. Ну и собсно резервирует память под Data и пишет туда хоть 255, хоть 65535, хоть 123456 байт.
Удаление реализуется схожим образом. А вот поиск нужного элемента - эт уже к товарисчу Гуглю обращайтесь. "Быстрый поиск в двусвязанных списках".
← →
Ins © (2007-10-25 16:21) [15]
> Dib@zol © (25.10.07 16:17) [14]
А что, функции работы с кучей разве не позволяют перевыделить блок памяти нового размера? Вроде до вчерашнего дня позволяли...
← →
Dib@zol © (2007-10-25 16:22) [16]> [15] Ins © (25.10.07 16:21)
Именно количество блоков, а не их размер.
← →
Dib@zol © (2007-10-25 16:23) [17]Про размер - GlobalReAlloc мне знаком.
← →
Ins © (2007-10-25 16:26) [18]
> Dib@zol © (25.10.07 16:22) [16]
В массиве (автору именно он нужен) блоки размещаются в непрерывном фрагменте памяти и идут один за другим. Если размер такого массива может меняться, нужно просто перевыделить память нужного объема, когда это потребуется. Примерно так динамические массивы в Delphi и устроены (если пока забыть о некоторых других их особенностях). И никаких связанных списков.
← →
Dib@zol © (2007-10-25 16:40) [19]Ну вообще он говорил про массив из элементов произвольной длины и произвольного количества. А в едином блоке без чёткой адресации при таком раскладе вряд ли что либо найдёшь. Не так ли? Нет, ну можно конечно завершающие байты расставлять, но эт будет жесть искать что-либо в таком "монолите". Или я не прав? Тогда, в чём я ошибаюсь?
← →
@!!ex © (2007-10-25 16:40) [20]> [0] Б. Гейтс (24.10.07 21:43)
Есть три варианта.
1) Списки
2) Динамический массив данных
3) Динамический массив указателей
1) варриант не рассматрива, мне лень объяснять.
2) выделяешь памяти столько, сколько у тебя элементов * размер элемента.
Запоминаешь указатель на первый элементы. Как вычеслять позицию i-того элемента, объяснять надо?
При изменении размера: выделяешь новый участок памяти под весь массив, копируешь туда старые данные, добавляешь новые данные, старую память осаобождаешь.
Выделяешь память, столько, сколько нужно
3) Тоже самое что и 2, только зранятся не элементы, а указатели на них. При больших размерах элементов это существенно эффективнее.
Если тебе этого объяснения мало... Чтож.. может ты рано за это взялся?
← →
Dib@zol © (2007-10-25 16:44) [21]153 байта|25 байт|51 байт|235 байт|34 байта|... итд
Скажем, вот содержимое массива общим размером 153 + 25 + 51 + 235 + 34 байта.
Как адресовать элементы? Указывать дополнительный массив смещений, но уже с фиксированной длиной записи?
← →
Dib@zol © (2007-10-25 16:46) [22]> 3) Динамический массив указателей
Звиняюсь, [21] понял...
← →
Ins © (2007-10-25 16:49) [23]
> Ну вообще он говорил про массив из элементов произвольной
> длины и произвольного количества. А в едином блоке без чёткой
> адресации при таком раскладе вряд ли что либо найдёшь. Не
> так ли? Нет, ну можно конечно завершающие байты расставлять,
> но эт будет жесть искать что-либо в таком "монолите". Или
> я не прав? Тогда, в чём я ошибаюсь?
Даже так? Тогда это становится похоже на array of array т.е. массив таких вот массовов. Опять же, делаем по аналогии с тем, как это в Delphi. "Внешний" динамический массив хранит указатели на "внутренние" массивы. Только за памятью нужно будет следить аккуратно. Не забывать при сокращении размеров внешнего массива освобождать память, занятую его элементами. А при создании нового элемента соответственно память для него выделять.
← →
Б. Гейтс (2007-10-25 18:21) [24]Ins, Dib@zol, @!!ex
Огромное спасибо за ответы!
Узнал много интересного
Очень охота поподробнее узнать про 3-ий способ. [20]
Также охота узнать про [14].
← →
Юрий Зотов © (2007-10-26 00:36) [25]Что ж... если т. Гейтс узнал из этой ветки много интересного, то я был прав...
← →
Б. Гейтс (2007-10-26 08:53) [26]
> Что ж... если т. Гейтс узнал из этой ветки много интересного,
> то я был прав...
Не прав. Работаю на АПИ давно (месяц), а массивы как-то не изучал. Вот как понадобились - сразу пошел к вам.
Тока я не понял про 1-ый вариант [20]. Дайте ссыль кто-нить по этому вопросу
← →
Ega23 © (2007-10-26 08:57) [27]
> Работаю на АПИ давно (месяц)
5 БАЛЛОВ!!!!!!
← →
Zeqfreed © (2007-10-26 09:22) [28]> Б. Гейтс (26.10.07 08:53) [26]
Массив это базовая структура хранения информации, а никак не набор функций какого-либо API. А ты даже не понимаешь бредовости выражения «массивы на API».
← →
Zeqfreed © (2007-10-26 09:25) [29]> Тока я не понял про 1-ый вариант [20]. Дайте ссыль кто-нить
> по этому вопросу
http://en.wikipedia.org/wiki/Linked_list
← →
Юрий Зотов © (2007-10-26 10:06) [30]> Б. Гейтс (26.10.07 08:53) [26]
Месяц - это не "давно". Это даже не "мало". Это - "практически ничто".
Доказательство - Вы даже не понимаете, что такое API; что никаких массивов там нет вообще (и быть не может); что понятие "массив" есть принадлежность языков, а не библиотек; что программировать "на чистом API" невозможно, потому что ни один вызов API нельзя сделать без использования какого-либо языка; что язык, на котором вызываются функции API абсолютно безразличен; что Ваша задача совершенно элементарна; что для ее решения надо всего лишь использовать динамическую память и указатели (организовав их в виде любой подходящей структуры); что как раз для этой задачи дельфишная RTL в 100 раз удобнее, чем WinAPI (и дает практически тот же по эффективности результат).
В общем - знаний ноль, понты одни ("пустяками не занимаюсь"). Вам программировать учиться надо, а не модными словечками кидаться.
← →
Б. Гейтс (2007-10-26 10:44) [31]
> Вам программировать учиться надо, а не модными словечками
> кидаться.
Кхе-кхе...
Знаю языки: Бейсик, Паскаль, Си (слегка)
Занимаюсь программированием: с 8-го класса (сперва Бейсик)
Что такое АПИ (мои знания): функции, экспортируемые длл мастдая (user32, gdi32, kernel32 и т.д.
Что могу на АПИ: создавать оконные приложения, сабклассировать что-нибудь, посылать сообщения
Дополнительно: слегка знаю ПЕ
Массивами раньше не занимался, работал с ними только в Паскаль, а тут на масме. На паскале мне это раз плюнуть, а в масме я с ними ни разу (!) не работал. Пришел к вам за ответом, получил его, за что некоторым огромное спасибо. Заинтересовался списками.
> Массив это базовая структура хранения информации, а никак
> не набор функций какого-либо API. А ты даже не понимаешь
> бредовости выражения «массивы на API».
Имелось в виду как используя АПИ создавать массивы без array, так как использую не паскаль, а масм.
← →
@!!ex © (2007-10-26 10:54) [32]> [31] Б. Гейтс (26.10.07 10:44)
блииин. чувак.. знал бы ты, какой бред несешь....
← →
Ega23 © (2007-10-26 10:55) [33]
> Знаю языки: Бейсик, Паскаль, Си (слегка)
> Занимаюсь программированием: с 8-го класса (сперва Бейсик)
Прикольно. Я уже 21 год программированием занимаюсь, из них 8 лет профессионально (мой основной доход).
И, однако, я так не могу сказать про Бейсик и Паскаль. В смысле, "знаю".
> Что такое АПИ (мои знания): функции, экспортируемые длл
> мастдая (user32, gdi32, kernel32 и т.д.
API - Application Programming Interface. Это что угодно может быть. И "масдай" тут вообще сбоку не валялся.
А если уж речь идёт конкретно о Win32API, то это не "функции, экспортируемые длл мастдая".
> Массивами раньше не занимался, работал с ними только в Паскаль,
> а тут на масме. На паскале мне это раз плюнуть
Покажи, как огранизовать создание динамического массива с произвольным числом элементов именно на паскале (не Delphi). покажешь - поверю, что тебе это "раз плюнуть". Не покажешь - LMD.
← →
Б. Гейтс (2007-10-26 10:56) [34]
> блииин. чувак.. знал бы ты, какой бред несешь....
Beginner..
Прокомментируй, исправь, что не так?
← →
Б. Гейтс (2007-10-26 10:58) [35]
> Покажи, как огранизовать создание динамического массива
> с произвольным числом элементов именно на паскале (не Delphi).
> покажешь - поверю, что тебе это "раз плюнуть". Не покажешь
> - LMD.
Кажется, началась стадия обломов...
Когда говорил паскаль, имел в виду дельфи.
SetLength
← →
Ega23 © (2007-10-26 11:01) [36]
> Кажется, началась стадия обломов...
> Когда говорил паскаль, имел в виду дельфи.
> SetLength
SetLength - для ламеров. "Кулхацкеры", пишущие "массивы на API для масдая" SetLength использовать не должны.
Или сознавайся в собственном ламерстве, или бегом штудировать книгу. Согласен подождать до понедельника.
← →
Ins © (2007-10-26 11:11) [37]Эх, тут недавно такое обсуждение про WinAPI было, с участием меня, DVM и Rouse_... Видимо ушло в архив уже. Жаль... Там если повыкидывать лишнее, определение API (и Win32API, как его подмножества) можно выделить.
← →
Юрий Зотов © (2007-10-26 11:16) [38]> Б. Гейтс (26.10.07 10:44) [31]
Я же не зря сказал - Вам программировать учиться надо. Потому что программирование - это вовсе не языки. Язык (любой, хоть Васик, хоть Асм) - это всего лишь инструмент и не более того. Взять в руки кисть (инструмент) может каждый и пользоваться ею может тоже каждый - но ведь при этом он не становится художником, верно? Чтобы стать художником, нужно знать и уметь гораздо больше, чем то, как держать кисть (а чтобы стать хорошим художником, еще и способности нужны, а чтобы стать выдающимся художником - талант нужен).
То же самое и с программированием. Если бы Вы понимали, что такое массив в памяти и как адресуются его элементы, то никаких проблем у Вас бы не возникло. И Вы легко смогли бы самостоятельно реализовать любой массив (включая многомерные) на любом языке (причем без всяких array) - хоть на Паскале, хоть на Асме. А если бы знали, что такое указатели и динамическая память, то легко смогли бы реализовать и любой массив переменной размерности (тоже включая многомерные и тоже на любом языке). Вот что в первую очередь изучать надо, а вовсе не языки и не API.
А Вы говорите - в MASM и в API нет array. Да ведь их там и быть не может, понимаете? И вот эта фраза "как используя АПИ создавать массивы без array, так как использую не паскаль, а масм" - полная чушь. Потому что использование API к созданию массивов не имеет абсолютно никакого отношения, а MASM не имеет абсолютно никакого отношения ни к саозданию массивов, ни к API. В переводе на русский язык Вы спросили примерно следующее: "как, используя паровоз, забить гвоздь, так как использую не молоток, а скрипку".
Рано Вы взялись за MASM и API. Не понимаете Вы их - и не поймете, пока не поймете, что такое програмирование. Возвращайтесь на паскаль и решите Вашу задачу на нем, причем не используя слово array - это будет гораздо полезнее.
← →
Игорь Шевченко © (2007-10-26 11:16) [39]Таких не берут в программисты
← →
Юрий Зотов © (2007-10-26 11:24) [40]> Б. Гейтс (26.10.07 10:44) [31]
Короче, луxше всего сказал Вирт: программирование - это алгоритмы плюс структуры данных. Вот это Вам сейчас и нужно изучать - алгоритмы и структуры данных. Причем начинать со структур.
← →
Б. Гейтс (2007-10-26 12:47) [41]
> А если бы знали, что такое указатели и динамическая память
Указатели - знаю, дин. память - нет. Поподробнее плиз
Еще вопрос: что такое апи вообще? Разве это не ф-ции из длл?
> Таких не берут в программисты
Я пока новичок. Но шансов стать кодером у меня больше, не так ли?
← →
Сергей М. © (2007-10-26 12:53) [42]
> что такое апи вообще?
http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:ru:official&hs=UVf&defl=ru&q=define:API&sa=X&oi=glossary_defin ition&ct=title
> Разве это не ф-ции из длл?
Не обязательно.
← →
@!!ex © (2007-10-26 13:02) [43]
type
TArray = class
public
Constructor Create(OneItemSize:integer);
Destructor Destroy; override;
Procedure SetLength(NewLength:integer);
Function GetLength:integer;
Function GetItem(Index:integer):Pointer;
protected
FirstItem:Pointer;
Count:integer;
ItemSize:integer;
end;
Constructor TArray.Create(OneItemSize:integer);
begin
ItemSize:=OneItemSize;
end;
Destructor TArray.Destroy; override;
begin
FreeMem(FirstItem);
end;
Procedure TArray.SetLength(NewLength:integer);
begin
Count:=NewLength;
ReallocMem(FirstItem,Count*ItemSize);
end;
Function TArray.GetLength:integer;
begin
Result:=Count;
end;
Function TArray.GetItem(Index:integer):Pointer;
begin
Result:=Pointer(Integer(FirstItem)+(Index*ItemSize));
end;
Что-то типа такого. Сорри, если ошибок наделал, придумывал и писал прямо здесь.
← →
Ega23 © (2007-10-26 13:02) [44]
> Но шансов стать кодером у меня больше, не так ли?
Кодером - да, программистом - пока не вижу.
← →
@!!ex © (2007-10-26 13:07) [45]З.Ы.
забыл инхеритед в дестрое.
← →
Ins © (2007-10-26 13:08) [46]
> Еще вопрос: что такое апи вообще?
Сначала нужно понять что такое интерфейс. Интерфейс - это некая абстрактная прослойка, протокол, согласующий взаимодействие с объектом, то, что торчит наружу и позволяет управлять тем, что внутри. Например ножки микросхемы - типичный пример интерфейса. Сама логика находится внутри черного ящика, но нам предоставлен некий рычажок, дергая который можно изменять то, что находится внутри, при этом внутрь не залазить. API - это тоже интерфейс. Прослойка между пользовательским приложением и операционной системой, позволяющий из пользовательских программ производить манипуляции над системой. Win32API - подмножество API, представляет собой экспортируемые из библиотек функции, но только не нужно думать, что эти функции выполняют непосредственно требуемые действия над ОС. Это не так. Это именно интерфейсные функции, та самая прослойка, доступная из пользовательского приложения и передающая запрос на более низкий уровень, внутрь того самого черного ящика.
← →
Маша Шрайбер © (2007-10-26 14:36) [47]>> Б. Гейтс (26.10.07 12:47) [41]
>> Но шансов стать кодером у меня больше, не так ли?
Только шкодером. Но им вы уже стали.
← →
Б. Гейтс (2007-10-26 15:21) [48]Всем огромное спасибо!
Теперь я с массивами на "вы"
> @!!ex © (26.10.07 13:02) [43]
Спасибо за пример, проверю попозже, щас времени нет.
> Кодером - да, программистом - пока не вижу.
Стоит ли мне идти в программеры? У всех ведь ошибки бывают.
> Например ножки микросхемы - типичный пример интерфейса.
Все отлично понял! (это я так думаю)
Только не совсем понял отличие Win32API от API.
И динамическую память не понял.
Ааа!! Забыл! Я же еще не знаю, что такое страница памяти! (если это в тему)
Итог: многого не знаю.
← →
@!!ex © (2007-10-26 15:36) [49]> Только не совсем понял отличие Win32API от API.
Я пиуш на OPenGL API. Которое не имет НИКАКОГО отношения к WinAPI и Windows в частности. ОДнакто тоже явялется API.
← →
Ega23 © (2007-10-26 15:49) [50]
> Только не совсем понял отличие Win32API от API.
ANSI SQL - стандартизованное API для доступа к данным в СУБД
← →
barmaglo (2007-10-26 15:50) [51]Апи бывает не только вин....В линухе тоже есть Апи....Для опенГЛ и СаундБластера тоже есть апи....
Динамическая память, это выделение памяти во время выполнения программы, те же массивы изменяемого размера, списки и т.д.
Страница памяти....Не заморачивайся, на мой взгляд это интересно только виндовс, хотя может и ошибаюсь....
← →
Ins © (2007-10-26 16:00) [52]
> Апи бывает не только вин....В линухе тоже есть Апи....Для
> опенГЛ и СаундБластера тоже есть апи....
Можно еще про разные подсистемы (POSIX, OS/2) на базе Windows вспомнить, про NativeAPI - это тоже API, только не Win32. Да и вообще, API очень широкое понятие.
> Страница памяти....Не заморачивайся, на мой взгляд это интересно
> только виндовс, хотя может и ошибаюсь....
Ошибаетесь. Разбиение памяти на страницы поддержывается аппаратно процессором.
В общем, товарищу Гейтсу рекомендуется почитать книжки и найти ответы на свои вопросы.
← →
Ins © (2007-10-26 16:07) [53]
> Страница памяти....Не заморачивайся, на мой взгляд это интересно
> только виндовс, хотя может и ошибаюсь....
Неправильно понял фразу, сорри. Но все равно, лучше знать что такое страница памяти, иногда даже в "программировании на API" это требуется :)
← →
Б. Гейтс (2007-10-26 16:15) [54]
> "программировании на API" это требуется :)
Кхе-кхе... я только спросил.
← →
Galinka © (2007-10-26 21:43) [55]Юрий Зотов © (26.10.07 11:16) [38]
если человек в школе массивы проходил, то там редко говорят, как оно все устроено (( Просто говорят, что есть такая структура. Кроме того, не далее как сегодня, говорила с одним товарищем, который достаточно глубоко знает Си. Выполняет на нем достаточно нетривиальные проекты. Но когда я сказала. что понимание массивов невозможно без понимания указателей и адресации, он сказал, что это слишком сложно типа для первого понимания массивов. (Конечно с учетом известной нам аудитории).
← →
vpbar © (2007-10-26 22:31) [56]>>Galinka © (26.10.07 21:43) [55]
ИМХО человек прав. Для понимания как использовать хеши тоже нужно знать адресацию и указатели? Нет, по- моему не нужно.
Массив достаточно абстрактная весчь. Вот для реализации (иммитации) массивов на тех языках где его нет, приходится пользоваться указателями.
← →
Б. Гейтс (2007-10-27 08:45) [57]
> Массив достаточно абстрактная весчь. Вот для реализации
> (иммитации) массивов на тех языках где его нет, приходится
> пользоваться указателями.
Поэтому я попросил помощи у вас.
Всем огромное спасибо! Все реально помогли!
Что это за возвращаемое значение у функции GlobalAlloc? Т. е. хэндл чего? Я раньше думал, что хэндл бывает лишь у окон.
GlobalLock - возвращает указатель памяти, кот. я зарезервировал с помощью GlobalAlloc.
GlobalReAlloc - изменяет размер памяти. После этой функции следует ли еще раз вызывать GlobalLock?
Если я чего-то недопонимаю, объясните плиз..
← →
Юрий Зотов © (2007-10-28 06:55) [58]> Galinka © (26.10.07 21:43) [55]
Странный аргумент... человек высказал свое мнение, и только. Другой, не менее авторитетный человек с таким же успехом скажет обратное - и что? Это тоже аргумент?
Значицца, так... с учетом известной нам аудитории могу привести следующий факт (заметьте - не мнение там чье-то, а реальный факт, с коим не поспоришь).
Понятно, что к этой самой аудитории все мы когда-то принадлежали, и я в том числе. Так вот - эту самую нашу аудиторию, состоящую примерно из 20 человек тогдашних девятиклассников, обычных учеников обычной школы, учили программировать... напрямую в машинных кодах (!!!). А самое интересное, что не только учили, но и реально научили. И не избранных, а всех. И все прекрасно поняли, что такое команды, данные, адресация и все прочее.
Значит - можно? Значит, можно. И не слишком? И не слишком.
А Вы говорите - массивы...
:о)
← →
Галинка © (2007-10-28 22:31) [59]Юрий Зотов © (28.10.07 06:55) [58]
я бы наверное так тоже хотела. Тот же человек порекомендовал почаще смотреть в ассемблерный код отладчика. Но пока для меня там китайская грамота. Хотя Эклипс и выдает его весьма охотно. Будем грызть... )))
vpbar © (26.10.07 22:31) [56]
а для передачи массивов в качестве параметра функции? В тех языках, где нет класса array? Мне кажется именно поэтому то и дело возникают непонятки с указателями/ссылками/новыми типами указателей (в Си++, например). А еще есть понятие индексированный список... Крыша от этого изобилия поедет ((
← →
Zeqfreed (thief) (2007-10-28 23:40) [60]> Галинка © (28.10.07 22:31) [59]
От красно-черных деревьев, наверное, вообще мутнеет в глазах и шарики за ролики закатываются? :)
← →
vpbar © (2007-10-28 23:47) [61]>>Галинка © (28.10.07 22:31) [59]
>>а для передачи массивов в качестве параметра функции?
Если вы про указатели, то не нужны. Для понимания механизма, может быть. Но для понимания логики программы - совсем лишнее.
Это забота компилятора передать параметр наиболее оптимальным способом.
В тех языках где нет массива - (в lisp-е чтоли) - а есть указатели его можно эмулировать. Собственно я уже повторяюсь.
>>Крыша от этого изобилия поедет
А вы по полочкам раскладывайте.
← →
Zeqfreed © (2007-10-28 23:51) [62]> vpbar © (28.10.07 23:47) [61]
> Если вы про указатели, то не нужны.
> В тех языках где нет массива... ...есть
> указатели его можно эмулировать
Логика шикарная :)
← →
Юрий Зотов © (2007-10-29 00:10) [63]> Галинка © (28.10.07 22:31) [59]
Еще один реальный факт, с Вашего позволения. Когда моя дочь училась в третьем классе, собрали нас, родителей, и сказали - а давайте вести для ребят кружки, кто что умеет.
И выпало мне волею судеб вести кружок программирования. При условии, что ни одного компьютера в школе нет вообще. А программировать на бумаге... да ведь это же третий класс, они ж со скуки помрут моментально.
Что делать? Родилась идея - программируемые микрокалькуляторы. Они тогда были уже распространены, вот ребята и притащили, у кого в семье был. Десяток набралось, а больше и не надо - один на пару-тройку человек, вот их все ОК.
И стали мы учиться на этих машинках программировать. А там, понятное дело, сплошные коды да адреса, и ничего более. Как хочешь - так и объясняй. Третьеклассникам!
И что Вы думаете? Я обалдел - они все понимали!!! Они писали программы, они въехали в мнемонику и в коды команд, в регистры, в instruction pointer, в адреса и переходы, в прямую и косвенную адресацию... ТРЕТИЙ КЛАСС!!! Я ШИЗЕЛ!!!
Нет, я и правда шизел, когда клоп ростом со стол объяснял мне свою программу почти буквально в таких словах: "Здесь я сохраняю регистр X в ячейке памяти с адресом 4, потому что сейчас начнется ввод и регистр X будет затерт, а в нем находится адрес перехода, который понадобится на шаге 25 и поэтому его надо сохранить".
И ведь все правильно говорил, вот в чем главный фокус-то. Хотя, чего б ему и ошибаться, если эту программу он же сам и написал?
О как! А то - массивы...
:о)
← →
Virgo_Style © (2007-10-29 07:52) [64]Юрий Зотов © (29.10.07 0:10) [63]
Ну, тут и от учителя немало зависит, чтобы не сказать - почти все :-P
← →
Галинка © (2007-10-29 11:58) [65]Юрий Зотов © (29.10.07 00:10) [63]
хороший Вы учитель. У нас тоже такой был в школе. При нем мы и ассемблер учили. Но теперь уже все забыла наверное...
← →
Ins © (2007-10-29 12:45) [66]
> Юрий Зотов © (29.10.07 00:10) [63]
Браво! Однажды сам наблюдал, как далеко не трезвый мужчина в купе поезда научил 3-летнего ребенка читать, несмотря на всяческие попытки мамы ребенка сопротивляться, но это, пожалуй, даже круче. Не каждому преподавателю дано... Детям очень повезло.
Страницы: 1 2 вся ветка
Текущий архив: 2007.11.18;
Скачать: CL | DM;
Память: 0.68 MB
Время: 0.02 c