Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Метод половинного деления для нахождения корня уровнения на Turbo Pascal...
Меры близости на векторах в Delphi + Блок схемы
Метод конечных разностей для интерполяции/экстраполяции на Delphi

Инициализация данных и создание динамических переменных
Одна из типичных ошибок при программировании — неинициализация глобальных переменных. Нулевые значения всем статическим переменным в программе присвоить достаточно легко. Сделать это можно, например, так, как было показано в процедуре initial, а именно:
fillchar(i,ofs(Last)-ofs(i)+sizeof(Last),0)



Здесь i — имя обязательно первой из описанных в программе переменных, Last— последней. Таким образом данная стандартная процедура заполнит нулями все байты памяти, которые используют статические переменные. После выполнения этой операции все числовые переменные, в том числе и элементы массивов, получат нулевые значения, всем символьным будет присвоен символ с кодом 0, а всем строковым — пустые строки, так как в байт, отвечающий за длину строки также занесен ноль и т.д. Если же количество глобальных переменных в программе невелико и не для всех из них ноль подходит в качестве начального значения, то инициализацию можно проводить для каждой переменной в отдельности. Для простых переменных это можно делать с помощью оператора присваивания или путем описания переменных как типизированных констант (в разделе описаний const, но с одновременным указанием и типа переменной и ее значения). Для массивов— с использованием все той же процедуры fillchar, но в пределах конкретного массива. Например:
var a:array[1..1000]of integer;
c:array[1..10000]of char;
begin
fillchar(a,sizeof(a),0);{заполняем массив a нулями}
fillchar(с,sizeof(с),'+');{заполняем символом плюс массив с}

end.



К сожалению, таким способом ненулевые значения можно присвоить лишь массивам, элементы которых по размеру не превосходят один байт (типы byte, shortint, char, boolean). Значения элементов массивов других типов задавать приходится в цикле. Однако, если два массива одного и того же типа требуется проинициализировать одинаково, то заполнить в цикле можно только один из них, а второму массиву просто присвоить первый (присваивание — единственная допустимая операция над составными переменными, такими как массив, как над целыми объектами). Иногда массивы удобно описывать и задавать в разделе констант путем непосредственного перечисления значений всех элементов массивов.
Как уже говорилось выше, для размещения всех глобальных переменных программе отводится не более 64 килобайт оперативной памяти. Однако при решении задач иногда требуется завести несколько массивов, размер каждого из которых не менее 32 килобайт. Покажем, как достаточно просто решить подобную проблему:
const n=150;
type aa=array[1..n,1..n] of integer;
var a:aa; {a - массив}
b:^aa;{b - указатель на массив}
i,j:integer;
begin
fillchar(a,sizeof(a),0);
new(b);{создание динамического массива}
b^:=a;{копирование массива a в динамический массив}
for i:=1 to n do
for j:=1 to n do
b^[i,j]:=i+j;{обращение к элементам динамического массива}

end.



Из примера видно, что работа с динамическими массивами не намного отличается от работы со статическими. Причем использовать данный прием можно “по образцу”, не вдаваясь в механизм работы с указателями. Если же размер двумерного массива превосходит 64 килобайта, то создать его с помощью динамических переменных можно, например, следующим образом:
const n=500;
m=100;
type aa=array[1..n] of integer;
var b:array[1..m] of ^aa;
{b - массив указателей на одномерный массив}
i,j:integer;
begin
for i:=1 to m do
new(b[i]);{создание m динамических массивов}
for i:=1 to m do
for j:=1 to n do
b[i]^[j]:=i+j;{обращение к элементам двумерного массива}

end.



Таким образом, использование динамических переменных позволяет практически не изменять алгоритм решения задачи в случае, когда использование статических массивов уже невозможно. Использование же таких переменных требует лишь небольшой аккуратности в их создании и корректного обращения с уже созданными динамическими переменными.




Опубликовал Kest February 22 2010 21:14:21 · 0 Комментариев · 9372 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
DateEdit
Книга по Delphi (...
XPATComponents
PDF
Delphi 6. Учебный...
Введение в станда...
PHP 5. Практика с...
Игра Car [Исходни...
Карта сайта
XPcontrol
Scrrlcaptoin
Binary2XMLDemo (Р...
Пример работы с б...
Голосование для ...
Adapter (пример D...
Игра "Астероиды" ...
Стелтинг Стивен, ...
IIIDTrans
DiZsubmit
Разработка Web-пр...

Топ загрузок
Приложение Клие... 100801
Delphi 7 Enterp... 98065
Converter AMR<-... 20304
GPSS World Stud... 17069
Borland C++Buil... 14262
Borland Delphi ... 10389
Turbo Pascal fo... 7399
Калькулятор [Ис... 6094
Visual Studio 2... 5242
Microsoft SQL S... 3677
Случайные статьи
Инфографика — это ...
Казино SOL
Использование экра...
Как подготовить пр...
Я - Zend Certified...
Контроль состава а...
Элемент ввода hidd...
Автопоилка для кошек
Распределенные сис...
Операции с файлами...
Советы дизайнеру, ...
Легальный заработок
Зимнее одеяло: Как...
Дальнейшее развити...
Главная угроза веб...
Модификации лэптопов
Принудительное тун...
Дополнение телепро...
Этап 1 - исключени...
СУБД mySQL
Миниатюризация ком...
Список переменного...
Анализ зависимости...
Специальные встр...
ОБРАЗОВАНИЕ ПЕРВОГ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?