Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 12
На сайте нет зарегистрированных пользователей

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

Моделирование интернет магазина (Apache, Php, Html) на GPSS + Блок схема
База данных склада на Delphi + Схема БД
Расчет размера дохода на одного человека в Turbo Pascal

Инициализация данных и создание динамических переменных
Одна из типичных ошибок при программировании — неинициализация глобальных переменных. Нулевые значения всем статическим переменным в программе присвоить достаточно легко. Сделать это можно, например, так, как было показано в процедуре 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 Комментариев · 8681 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Printgrid
База Allsubmitter...
3D Октаэдр
Ильдар Хабибуллин...
DateEdit
Borland Delphi 8 ...
Пример работы с ф...
LaserTank [Исходн...
ZipForge
Дарахвелидзе П., ...
netBIOS
Книга по Delphi (...
Info
Ics
Цветной Grid
EditButton
Программирование ...
Размещение элемен...
Delphi 2005 для W...
Пользовательская...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Секреты: принцип р...
Рабочий стол
107.2.
Приложение Модуль ...
Игровые автоматы В...
Печать документа
Установка встроенн...
Отдых после програ...
Континент дверной
Duplicate dynamic ...
Интерактивные онла...
1. CSNW может испо...
Мода и покер: самы...
Обзор истории язык...
Упражнения на знан...
Создание программ ...
Примеры программир...
Несколько мелких х...
Управление потоком
OF expected
3. Драйвер IPSec п...
Объект класса Matr...
Популярные системы...
Прикольные фотогра...
Field Identifier e...
Статистика



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


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