Difference between revisions of "Case/ru"
(Use pascal highlighter) |
|||
Line 8: | Line 8: | ||
=== Примеры === | === Примеры === | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
case place of | case place of | ||
1: ShowMessage('Золотая медаль'); | 1: ShowMessage('Золотая медаль'); | ||
Line 17: | Line 17: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
function WhatIsChar( c:char ):string; | function WhatIsChar( c:char ):string; | ||
var | var | ||
Line 37: | Line 37: | ||
Язык Free Pascal позволяет использовать оператор "Case of" для строковых переменных. | Язык Free Pascal позволяет использовать оператор "Case of" для строковых переменных. | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
const | const | ||
ISO_3166_1_ALPHA_3_ANDORRA = 'AND'; | ISO_3166_1_ALPHA_3_ANDORRA = 'AND'; | ||
Line 145: | Line 145: | ||
Если вы хотите использовать перечислимые типы, вот очень понятный пример: | Если вы хотите использовать перечислимые типы, вот очень понятный пример: | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
type | type | ||
TMedal = (mGold, mSilver, mBronze); // в случае если вы хотите, чтобы Золотая начиналась с 1, поместите это значение (Gold=1, ...но | TMedal = (mGold, mSilver, mBronze); // в случае если вы хотите, чтобы Золотая начиналась с 1, поместите это значение (Gold=1, ...но | ||
Line 167: | Line 167: | ||
Другой пример без использования массива MedalNames... | Другой пример без использования массива MedalNames... | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
type | type | ||
TMedal = (Gold, Silver, Bronze); // без "m" | TMedal = (Gold, Silver, Bronze); // без "m" | ||
Line 192: | Line 192: | ||
Если используются [[Hexadecimal/ru|шестнадцатеричные]] числа, то они рассматриваются как беззнаковые: | Если используются [[Hexadecimal/ru|шестнадцатеричные]] числа, то они рассматриваются как беззнаковые: | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
case place of | case place of | ||
$1: ShowMessage('Золотая медаль'); | $1: ShowMessage('Золотая медаль'); | ||
Line 203: | Line 203: | ||
Если шестнадцатеричная переменная представлена в другом виде, например как [[Shortint/ru|Shortint]], то необходимо преобразовать значение: | Если шестнадцатеричная переменная представлена в другом виде, например как [[Shortint/ru|Shortint]], то необходимо преобразовать значение: | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
case place of | case place of | ||
Shortint($C3): ShowMessage('Золотая медаль'); //C3= -61; | Shortint($C3): ShowMessage('Золотая медаль'); //C3= -61; | ||
Line 212: | Line 212: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
или можно воспользоваться другим решением: | или можно воспользоваться другим решением: | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
var | var | ||
myplace : ShortInt; | myplace : ShortInt; | ||
Line 230: | Line 230: | ||
'''Case''' также может использоваться в вариантной [[Record/ru|записи]]. Вариантная запись по-другому называется ''объединение'' (например, тип данных union в языке C). | '''Case''' также может использоваться в вариантной [[Record/ru|записи]]. Вариантная запись по-другому называется ''объединение'' (например, тип данных union в языке C). | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
type | type | ||
Latest revision as of 22:24, 24 January 2020
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
русский (ru) │
Зарезервированным словом Case начинается блок инструкции выбора. Инструкция case сравнивает значение перечислимого, порядкового или строкового типа для каждого селектора. Селектор может быть константой, диапазоном или списком значений, разделенных запятыми. Поле селектора отделяется от выполняемых инструкций двоеточием.
Инструкция выбора также включает в себя зарезервированные слова Of и End. Else может использоваться в случае, когда не будет ни одного совпадения (в этом случае ветка Else будет выполняться по умолчанию).
Примеры
case place of
1: ShowMessage('Золотая медаль');
2: ShowMessage('Серебряная медаль');
3: ShowMessage('Бронзовая медаль');
else ShowMessage('Повезет в следующий раз');
end;
function WhatIsChar( c:char ):string;
var
s : string;
begin
s := '';
case c of
'0' .. '9' : s := 'цифра (0-9)';
'a' .. 'z' : s := 'строчная буква (a-z)';
'A' .. 'Z' : s := 'прописная буква (A-Z)';
'+' , '-' : s := 'знак (+ или -)';
end;
result := s;
end;
Выбор строк
Язык Free Pascal позволяет использовать оператор "Case of" для строковых переменных.
const
ISO_3166_1_ALPHA_3_ANDORRA = 'AND';
ISO_3166_1_ALPHA_3_AUSTRALIA = 'AUS';
ISO_3166_1_ALPHA_3_AUSTRIA = 'AUT';
ISO_3166_1_ALPHA_3_BELGIUM = 'BEL';
ISO_3166_1_ALPHA_3_BRAZIL = 'BRA';
ISO_3166_1_ALPHA_3_CANADA = 'CAN';
ISO_3166_1_ALPHA_3_CHINA = 'CHN';
ISO_3166_1_ALPHA_3_CZECH_REPUBLIC = 'CZE';
ISO_3166_1_ALPHA_3_CYPRUS = 'CYP';
ISO_3166_1_ALPHA_3_GERMANY = 'DEU';
ISO_3166_1_ALPHA_3_DENMARK = 'DNK';
ISO_3166_1_ALPHA_3_SPAIN = 'ESP';
ISO_3166_1_ALPHA_3_ESTONIA = 'EST';
ISO_3166_1_ALPHA_3_FINLAND = 'FIN';
ISO_3166_1_ALPHA_3_FRANCE = 'FRA';
ISO_3166_1_ALPHA_3_GREECE = 'GRC';
ISO_3166_1_ALPHA_3_INDIA = 'IND';
ISO_3166_1_ALPHA_3_IRELAND = 'IRL';
ISO_3166_1_ALPHA_3_ITALY = 'ITA';
ISO_3166_1_ALPHA_3_JAPAN = 'JPN';
ISO_3166_1_ALPHA_3_LITHUANIA = 'LTU';
ISO_3166_1_ALPHA_3_LATVIA = 'LVA';
ISO_3166_1_ALPHA_3_LUXEMBOURG = 'LUX';
ISO_3166_1_ALPHA_3_MALTA = 'MLT';
ISO_3166_1_ALPHA_3_MEXICO = 'MEX';
ISO_3166_1_ALPHA_3_MONACO = 'MCO';
ISO_3166_1_ALPHA_3_MONTENEGRO = 'MNE';
ISO_3166_1_ALPHA_3_NAURU = 'NRU';
ISO_3166_1_ALPHA_3_NETHERLANDS = 'NLD';
ISO_3166_1_ALPHA_3_NORWAY = 'NOR';
ISO_3166_1_ALPHA_3_POLAND = 'POL';
ISO_3166_1_ALPHA_3_PORTUGAL = 'PRT';
ISO_3166_1_ALPHA_3_REPUBLIC_OF_KOREA = 'KOR';
ISO_3166_1_ALPHA_3_RUSSIAN_FEDERATION = 'RUS';
ISO_3166_1_ALPHA_3_SAN_MARINO = 'SMR';
ISO_3166_1_ALPHA_3_SLOVAKIA = 'SVK';
ISO_3166_1_ALPHA_3_SLOVENIA = 'SVN';
ISO_3166_1_ALPHA_3_SWEDEN = 'SWE' ;
ISO_3166_1_ALPHA_3_SWITZERLAND = 'CHE';
ISO_3166_1_ALPHA_3_UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND = 'GBR';
ISO_3166_1_ALPHA_3_UNITED_STATES_OF_AMERICA = 'USA';
ISO_4217_EURO = 'EUR';
ISO_4217_AUSTRALIAN_DOLLAR = 'AUD';
ISO_4217_BRAZILIAN_REAL = 'BRL';
ISO_4217_CANADIAN_DOLLAR = 'CAD';
ISO_4217_CHINESE_YUAN = 'CNY';
ISO_4217_CZECH_KORUNA = 'CZK' ;
ISO_4217_DANISH_KRONE = 'DKK' ;
ISO_4217_INDIAN_RUPEE = 'INR';
ISO_4217_POUND_STERLING = 'GBP' ;
ISO_4217_JAPANESE_YEN = 'JPY';
ISO_4217_MEXICAN_PESO = 'MXN';
ISO_4217_NORWEGIAN_KRONE = 'NOK' ;
ISO_4217_POLISH_ZLOTY = 'PLN' ;
ISO_4217_RUSSIAN_RUBLE = 'RUB' ;
ISO_4217_SOUTH_KOREAN_WON = 'KRW';
ISO_4217_SWEDISH_KRONA = 'SEK' ;
ISO_4217_SWISS_FRANC = 'CHF' ;
ISO_4217_UNITED_STATES_DOLLAR = 'USD' ;
function ISO_4217_currency_name ( ISO_3166_1_alpha_3_code: string): string;
begin
Case ISO_3166_1_alpha_3_code of
// Еврозона
ISO_3166_1_ALPHA_3_ANDORRA, ISO_3166_1_ALPHA_3_AUSTRIA,
ISO_3166_1_ALPHA_3_BELGIUM,ISO_3166_1_ALPHA_3_CYPRUS,
ISO_3166_1_ALPHA_3_GERMANY, ISO_3166_1_ALPHA_3_SPAIN,
ISO_3166_1_ALPHA_3_ESTONIA, ISO_3166_1_ALPHA_3_FINLAND,
ISO_3166_1_ALPHA_3_FRANCE, ISO_3166_1_ALPHA_3_GREECE,
ISO_3166_1_ALPHA_3_IRELAND, ISO_3166_1_ALPHA_3_ITALY,
ISO_3166_1_ALPHA_3_LITHUANIA, ISO_3166_1_ALPHA_3_LATVIA,
ISO_3166_1_ALPHA_3_LUXEMBOURG, ISO_3166_1_ALPHA_3_MONACO,
ISO_3166_1_ALPHA_3_MALTA, ISO_3166_1_ALPHA_3_MONTENEGRO,
ISO_3166_1_ALPHA_3_NETHERLANDS, ISO_3166_1_ALPHA_3_PORTUGAL,
ISO_3166_1_ALPHA_3_SAN_MARINO, ISO_3166_1_ALPHA_3_SLOVAKIA,
ISO_3166_1_ALPHA_3_SLOVENIA : result := ISO_4217_EURO ;
ISO_3166_1_ALPHA_3_AUSTRALIA, ISO_3166_1_ALPHA_3_NAURU :
result := ISO_4217_AUSTRALIAN_DOLLAR;
ISO_3166_1_ALPHA_3_BRAZIL : result := ISO_4217_BRAZILIAN_REAL;
ISO_3166_1_ALPHA_3_CANADA : result := ISO_4217_CANADIAN_DOLLAR;
ISO_3166_1_ALPHA_3_CHINA : result := ISO_4217_CHINESE_YUAN;
ISO_3166_1_ALPHA_3_CZECH_REPUBLIC : result := ISO_4217_CZECH_KORUNA ;
ISO_3166_1_ALPHA_3_DENMARK : result := ISO_4217_DANISH_KRONE ;
ISO_3166_1_ALPHA_3_INDIA : result := ISO_4217_INDIAN_RUPEE;
ISO_3166_1_ALPHA_3_JAPAN : result := ISO_4217_JAPANESE_YEN;
ISO_3166_1_ALPHA_3_MEXICO : result := ISO_4217_MEXICAN_PESO;
ISO_3166_1_ALPHA_3_NORWAY : result := ISO_4217_NORWEGIAN_KRONE ;
ISO_3166_1_ALPHA_3_POLAND : result := ISO_4217_POLISH_ZLOTY ;
ISO_3166_1_ALPHA_3_REPUBLIC_OF_KOREA : result := ISO_4217_SOUTH_KOREAN_WON ;
ISO_3166_1_ALPHA_3_RUSSIAN_FEDERATION : result := ISO_4217_RUSSIAN_RUBLE ;
ISO_3166_1_ALPHA_3_SWEDEN : result := ISO_4217_SWEDISH_KRONA ;
ISO_3166_1_ALPHA_3_SWITZERLAND : result := ISO_4217_SWISS_FRANC ;
ISO_3166_1_ALPHA_3_UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND :
result := ISO_4217_POUND_STERLING ;
ISO_3166_1_ALPHA_3_UNITED_STATES_OF_AMERICA :
result := ISO_4217_UNITED_STATES_DOLLAR ;
end;
end;
Выбор перечислимых значений
Если вы хотите использовать перечислимые типы, вот очень понятный пример:
type
TMedal = (mGold, mSilver, mBronze); // в случае если вы хотите, чтобы Золотая начиналась с 1, поместите это значение (Gold=1, ...но
const
MedalNames: array [TMedal] of string[6] = ('Золотая', 'Серебряная', 'Бронзовая'); // в [TMedal] вы должны изменить его на [Gold..Bronze] ;) предложения по адресу edgarrod71@gmail.com
{[ ... ]}
var
place: integer; /// place начинается с 0;
M: TMedal;
{[ ... ]}
M := TMedal(place);
case M of
mGold: ShowMessage(Medalnames[M] + ' медаль');
mSilver: ShowMessage(Medalnames[M] + ' медаль');
mBronze: ShowMessage(Medalnames[M] + ' медаль');
else
ShowMessage('Повезет в следующий раз! :)');
end;
Другой пример без использования массива MedalNames...
type
TMedal = (Gold, Silver, Bronze); // без "m"
{[ ... ]}
var
place: integer; /// place начинается с 0;
M: TMedal;
S: string;
{[ ... ]}
M := TMedal(place);
case M of
Gold: writeStr(S, M);
Silver: writeStr(S, M);
Bronze: writeStr(S, M);
else
S := 'Повезет в следующий раз! ;)';
end;
ShowMessage(S);
Шестнадцатеричные числа в качестве входных значений
Если используются шестнадцатеричные числа, то они рассматриваются как беззнаковые:
case place of
$1: ShowMessage('Золотая медаль');
$2: ShowMessage('Серебряная медаль');
$3: ShowMessage('Бронзовая медаль');
else ShowMessage('Повезет в следующий раз');
end;
Если шестнадцатеричная переменная представлена в другом виде, например как Shortint, то необходимо преобразовать значение:
case place of
Shortint($C3): ShowMessage('Золотая медаль'); //C3= -61;
Shortint($34): ShowMessage('Серебряная медаль');
Shortint($58): ShowMessage('Бронзовая медаль');
else ShowMessage('Повезет в следующий раз');
end;
или можно воспользоваться другим решением:
var
myplace : ShortInt;
place : Byte absolute myplace;
begin
myplace:=-61;
case place of
$C3: ShowMessage('Золотая медаль');
$34: ShowMessage('Серебряная медаль');
$58: ShowMessage('Бронзовая медаль');
else ShowMessage('Повезет в следующий раз');
end;
Вариантная запись
Case также может использоваться в вариантной записи. Вариантная запись по-другому называется объединение (например, тип данных union в языке C).
type
ScaleKelvin = 223 .. 323;
ScaleCelsius = -50 .. 50;
TemperatureScale = ( celsius, kelvin ) ;
Temperature = record
case scale : TemperatureScale of
celsius : (celsius_value : ScaleCelsius);
kelvin : (kelvin_value : ScaleKelvin);
end;