Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.01.2008, 19:10
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Вопросс о переменных

Объясните пожалуйста какая разницу между обьявлением переменных в месте_1 и месте_2 ?
Код:
  Type
    TMyTyps = record
      integ  : integer;   // место_1
      Move : boolean;     // место_1
    end;

Procedure proc1;
Procedure proc2;
Procedure proc3;
var
  variable: array[1..50] of TMyTyps;   // место_2
  var1 : integer;                      // место_2

implementation
И если можете расскажите пожалуйста о том как правильно работать с объявлением типа, свойствами и использованием .
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #2  
Старый 28.01.2008, 19:40
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

TMyTyps - это запись - позволяет собрать в кучу несколько переменных, напр чтобы передавать в параметрах фукции и т.п

Ещё в record есть условное описание, тоже иногда очень удобно.
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #3  
Старый 28.01.2008, 20:23
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

Код:
Type
    TMyTyps = record
      integ  : integer;   // место_1
      Move : boolean;     // место_1
    end;
- это переменная типа TMyTyps.
Т.е. эта переменная будет внутри типа.
Пример:
Код:
var MT:TMyTyps;
begin
mt.integ:=0;
mt.move:=true;

А второй пример:
Код:
Procedure proc1;
Procedure proc2;
Procedure proc3;
var
  variable: array[1..50] of TMyTyps;   // место_2
  var1 : integer;                      // место_2

implementation
сдесь переменная пренадлежит определённой форме.
Пример:
Код:
procedure TForm1.OnClick(Sender:TObject);
begin
var1:=0;// или
variable[0].integ:=0;
variable[0].move:=true;
end;
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
  #4  
Старый 28.01.2008, 20:53
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость Спасибо

Спасибо всем, стало немного понятнее
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #5  
Старый 29.01.2008, 02:31
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Цитата:
Сообщение от <<D>>
А второй пример:
Код:
Procedure proc1;
Procedure proc2;
Procedure proc3;
var
  variable: array[1..50] of TMyTyps;   // место_2
  var1 : integer;                      // место_2

implementation
сдесь переменная пренадлежит определённой форме.
Пример:
Код:
procedure TForm1.OnClick(Sender:TObject);
begin
var1:=0;// или
variable[0].integ:=0;
variable[0].move:=true;
end;
Товарисч, причем здесь форма??? Не форме, а ЮНИТУ!!!! Не путайте.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #6  
Старый 29.01.2008, 05:20
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Начнем с того что переменная это поименованная область памяти (не будем вдаваться в подробности длинны этой области, и ее видимости из других форм/юнитов/библиотек).
Код:
var
  a:integer;
  b:char;
так выделяется память под две переменные определенного типа, имя типа однозначно говорит компилятору сколько памяти надо выделить.
Код:
  Type
    TMyTyps = record
      integ  : integer;
      Move : boolean;
    end;
а так объявляется новый, пользовательский, тип данных. Память при этом не выделяется, но вот так:
Код:
  var
    somevar:TMyTyps;
можно выделить память которая будет сообветствовать по длине и по структуре типу TMyTyps описанному выше.
Ответить с цитированием
  #7  
Старый 29.01.2008, 08:36
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

Цитата:
Сообщение от zip000
Товарисч, причем здесь форма??? Не форме, а ЮНИТУ!!!! Не путайте.
Млин...извиняюсь конечно, Перепутал!!!
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
  #8  
Старый 29.01.2008, 10:37
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Сообщение Условное описание

Насчёт памяти:
Внутри записи допустимо указывать несколько форм её представления, и описываются все эти формы "в стиле" оператора case (это только правило описания, способ нужного представления, понятный компилятору и разработчику, а не реальный машинный код).

Например программисту требуется использовать два типа данных: одну запись с полями:
Код:
Name : string[50];
Num: integer;
X:integer;
а другую - с полями:
Код:
a: integer;
b: char;
X:integer;
При этом программист точно знает, что он не будет применять эти группы полей одновременно друг с другом. Тогда вместо описания двух новых типов программист может описать один, только разделив внутреннюю структуру записи на две:
Код:
type TMyType = record
        X:integer;
        case boolean of
        true: (Name: string[50]; Num: integer);
        false: (a: integer; b: char);
        end;  
Подобная оригинальная запись расшифровывается следующим образом: Слово case говорит, что далее следует несколько форм представления типа (записи) TMyType. Сколько? Это определяется следующим за ключевым словом case типом Boolean ( в данном случае, т.к Boolean имеет всего два значения, мы можем указать всего две формы представления, написав другой тип, напр byte можно больше: 5, 10, хоть все 256 )
Далее в круглых скобках приводятся варианты внутренней структуры.
Закрывает описание case не собственное ключевое слово end, а слово end, завершающее описание всей записи
Обращатся к полям записи в тексте программы можно как обычно.
Данное описание используется ещё с первых версий программы для экономии памяти, т.к для всех представлений выделяется одна общая область памати (равная облатси памяти, требуемой для самого большого представления)

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

Но есть ещё один способ применения условного описания. Т.к в памати для представлений отводиться одна общяя область, то можно например орагизовать доступ к отдельным байтам переменной, напр. Integer имеет длину 4 байта, тогда:
Код:
type TMyType = record
        case byte of
        1: (I:integer);
        2: (bs: array [1..SizeOf(integer)] of byte);
        end;

var A:TMyType;
begin
A.I := '1568237'; // число типа integer
A.bs[1] // значения первого байта
A.bs[4] // значение последнего байта и т.п
...
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #9  
Старый 29.01.2008, 12:55
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо

Всем ещё раз спасибо за разяснение
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:27.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025