Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 10:18   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Для чего case нужен в record?

Для чего case нужен в record,вы наверное замичали в некоторых структурах
есть case,хотелось бы узнать зачем он нужен?
VintProg вне форума Ответить с цитированием
Старый 13.08.2009, 10:27   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А где пример? Я не замечал, потому что record'ы для своих нужд пишу сам, а в чужие заглядываю редко (инкапсуляция ).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.08.2009, 10:30   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Записи с вариантами
Цитата:
Записи с вариантами
Строго фиксированная структура записи ограничивает возможность ее применения. Поэтому в языке Delphi имеется возможность задать для записи несколько вариантов структуры. Такие записи называются записями с вариантами. Они состоят из необязательной фиксированной и вариантной частей.
Вариантная часть напоминает условный оператор case. Между словами case и of записывается особое поле записи – поле признака. Оно определяет, какой из вариантов в данный момент будет активизирован. Поле признака должно быть равно одному из расположенных следом значений. Каждому значению сопоставляется вариант записи. Он заключается в круглые скобки и отделяется от своего значения двоеточием. Пример описания записи с вариантами:
type
TFigure = record
X, Y: Integer;
case Kind: Integer of
0: (Width, Height: Integer); // прямоугольник
1: (Radius: Integer); // окружность
end;
Обратите внимание, что у вариантной части нет отдельного end, как этого можно было бы ожидать по аналогии с оператором case. Одно слово end завершает и вариантную часть, и всю запись.
SERG1980 вне форума Ответить с цитированием
Старый 13.08.2009, 11:59   #4
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

А если несколько кейзов нужно? как они будут разделяться? или дельфа сама поймёт, что если новый кейз встретился, то это уже другое? Или как?
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 13.08.2009, 12:07   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Запись бывает с вариантной частью или без нее
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.08.2009, 13:57   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а на вопрос "зачем?" так никто и не ответил

что есть record по сути?
это область памяти, которая условно разделена на части.(переменные записи)

так вот...с помощью case мы можем определить различное деление этой области памяти на части.

например
Код:
A=record
 case integer of
  1:(I:integer); 
  2:(w1,w2:word);
  3:(b1,b2,b3,b4:byte);
end;
имеем область памяти размером 4байта
которые можем использовать по разному
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.08.2009 в 14:52. Причина: end лишний был
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2009, 14:42   #7
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от Wicort Посмотреть сообщение
А если несколько кейзов нужно? как они будут разделяться? или дельфа сама поймёт, что если новый кейз встретился, то это уже другое? Или как?
В модуле System, кажется, TVarRec был с вложенными case.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 13.08.2009, 14:44   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а на вопрос "зачем?" так никто и не ответил

что есть record по сути?
это область памяти, которая условно разделена на части.(переменные записи)
По сути это не область памяти, а способ ее адресации. Информация о размещении информации .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.08.2009, 14:47   #9
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

эм.. а как это использовать?
вот например есть такой кусок кода:
Код:
A=record
 case integer of
  1:(I:integer); 
  2:(w1,w2:word);
  3:(b1,b2,b3,b4:byte);
 end;
end;
и потом я делаю так:
Код:
var
B: A;
а вот дальше как присваивать переменной В значения?
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 13.08.2009, 14:51   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там end на равне с case лишний...
перепутал с условным оператором
-----------------------------------
например так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
 A=record
  case integer of
   1:(I:integer);
   2:(w1,w2:word);
   3:(b1,b2,b3,b4:byte);
 end;

var
  Form1: TForm1;
  B:A;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 B.w1:=65000;
 B.w2:=11000;
 ShowMessage(IntToStr(B.I))
end;

end.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.08.2009 в 14:53.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужен этот скрипт belvision JavaScript, Ajax 4 20.02.2013 15:16
Для чего нужен Packed? VintProg Общие вопросы Delphi 10 03.08.2009 11:21
Для чего код в классе ? Evgenijj Общие вопросы C/C++ 3 09.03.2009 14:12
Для чего нужен мобильник? Altera Свободное общение 53 19.08.2008 21:12
Для чего вы программируете? Elefanter Свободное общение 14 17.02.2008 21:54