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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.02.2013, 17:34   #1
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию Case

1. объясните мне назначение Case пожалуйста, кучу сайтов по нему пересмотрел так и не понял как его использовать... сложный он какой то...
2. подскажите тип, что то вроде Boolean только содержит не True\False, а 0\1

Последний раз редактировалось Host-2013; 20.02.2013 в 17:36.
Host-2013 вне форума
Старый 20.02.2013, 17:47   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1. http://www.delphisources.ru/pages/fa.../Case.php.html
"case - вместо тысячи if"
2. А зачем? Делаете ord(t), где t - булева переменная, вот Вам 0 и 1.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме
Старый 20.02.2013, 19:00   #3
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
1. http://www.delphisources.ru/pages/fa.../Case.php.html
"case - вместо тысячи if"
2. А зачем? Делаете ord(t), где t - булева переменная, вот Вам 0 и 1.
1. читал, все равно не ясно
Цитата:
// Вычисления также могут использоваться в операторе case
number := 17;
Case number mod 2 of
0 : ShowMessage(IntToStr(Number)+' mod 2 = 0');
1 : ShowMessage(IntToStr(Number)+' mod 2 = 1');
else ShowMessage(IntToStr(Number)+' mod 2 неизвестно');
end;
end;
а если надо if number<>0 к примеру, или еще какое то мудреное условие?

2. скорее всего не подойдет, мне надо сделать в параметрах функции переменную которая может принимать значения 0 и 1

п.с. добавлю еще вопрос:
3. как объединить множества? к примеру есть
Код:
type Alphabet_RU_Big = ('А'..'Я');
     Alphabet_RU_Small = ('а'..'я');
     Alphabet_EN_Big = ('A'..'Z');
     Alphabet_EN_Small = ('a'..'z');
тут еще правда не хватает спец символов кстати это еще 1 вопрос: 4. как получить все спец символы (!"№;%:?*....)?
так вот как потом объединять такие множества? смысл в том что хочу создать функцию выдающую рандомный символ по заданным критериям, то есть что то типа: Function RandomSymbols(Count: integer; Ru_Big, Ru_Small, En_Big, En_Small, Numbers, Spec_symbols: Boolean): string;
и надо если Ru_Big и En_Small стоят 1, то 2 множества объединить и дальше уже рандомом как то выбрать символ

Последний раз редактировалось Host-2013; 20.02.2013 в 19:10.
Host-2013 вне форума
Старый 20.02.2013, 19:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
или еще какое то мудреное условие?
Тогда Case отдыхает
Цитата:
скорее всего не подойдет, мне надо сделать в параметрах функции переменную которая может принимать значения 0 и 1
Подойдет если сделаешь эту переменку типа byte
I'm learning to live...
Stilet вне форума
Старый 20.02.2013, 19:19   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1. Никаких мудреных условий в case.
В лучшем случае можно задать диапазон или несколько диапазонов чисел, например:
Код:
var
  number: integer;
begin
  number := 25;
  Case number of
    1 .. 19:
      ShowMessage(IntToStr(number) + ' меньше 20');
    25, 30, 35, 40, 45:
      ShowMessage(IntToStr(number) + ' ,больше 20, меньше 50 и кратно 5');
  else
    ShowMessage(IntToStr(number) + ' не знаю, что сказать');
  end;
end;
2. Объявите свой тип, делов-то:
Код:
type
  bit = 0 .. 1;
...
function f(t: bit): integer;
...
3. А зачем множества?
Сделайте константные строки:
Код:
const
  rus = 'абвг';
  eng = 'abc';
...
Function RandomSymbols(Count: integer; symbols: string): string;
...
RandomSymbols(1, rus + eng);
4. Берете таблицу символов и выписываете
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.02.2013 в 19:24.
BDA на форуме
Старый 20.02.2013, 19:28   #6
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
3. А зачем множества?
Сделайте константные строки:
Код:
const
  rus = 'абвг';
  eng = 'abc';
...
Function RandomSymbols(Count: integer; symbols: string): string;
...
RandomSymbols(1, rus + eng);
4. Берете таблицу символов и выписываете
3. ну хочу я множества !!! как минимум потому что удобно как у меня в функции проставил нужные значения единицы, не нужные нули и ок, а так еще писать rus eng, а ведь там еще по регистрам у меня... гемор же... чисто в использовании, проще уж один раз пострадать гемором при написании функции
4. я просто надеялся что есть какая нибудь функция -_- кстати а chr не может их выдать? может там с какого то по какой то номер они идут я хз...
Host-2013 вне форума
Старый 20.02.2013, 19:40   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

4. http://upload.wikimedia.org/wikipedi...Code_Chart.svg
3. Ну геморойтесь
Вы не можете взять рандомный элемент из множества, т.е. Вам придется делать:
Получать 1 множество символов, сливая все требуемые
Преобразовывать множество в массив символов
Брать рандомный символ

Конечно, Вы можете брать рандомное число, преобразовывать в символ и проверять принадлежность множеству, но так можно достаточно долго не попадать во множество.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме
Старый 20.02.2013, 19:43   #8
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Получать 1 множество символов, сливая все требуемые
Преобразовывать множество в массив символов
Брать рандомный символ
с этого места поподробнее пожалуйста, особенно про слив множеств
Host-2013 вне форума
Старый 20.02.2013, 20:16   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function randoms(smask: byte): char;
const
  Alphabet_RU_Big: set of char = ['А' .. 'Я'];
  Alphabet_RU_Small: set of char = ['а' .. 'я'];
  Alphabet_EN_Big: set of char = ['A' .. 'Z'];
  Alphabet_EN_Small: set of char = ['a' .. 'z'];
var
  s: set of char;
  str: string;
  i: char;
  len: integer;
begin
  s := [];
  if smask and 1 > 0 then
    s := s + Alphabet_RU_Big;
  if smask and 2 > 0 then
    s := s + Alphabet_RU_Small;
  if smask and 4 > 0 then
    s := s + Alphabet_EN_Big;
  if smask and 8 > 0 then
    s := s + Alphabet_EN_Small;
  str := '';
  for i := low(i) to high(i) do
    if i in s then
      str := str + i;
  len := length(str);
  if len > 0 then
    randoms := str[random(len) + 1]
  else
    randoms := ' ';
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме
Старый 20.02.2013, 21:08   #10
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

BDA, большое спасибо вот что получилось в итоге, посмотрите вроде все правильно?

Код:
unit alphabet;

interface

Function RandomSymbols(Count: integer; Ru_Big, Ru_Small, En_Big, En_Small, Numbers, Spec_symbols: Boolean): string;

implementation

type bit = 0..1;

Function RandomSymbols(Count: integer; Ru_Big, Ru_Small, En_Big, En_Small, Numbers, Spec_symbols: bit): string;
Const Alphabet_RU_Big: Set of Char = ['А'..'Я'];
      Alphabet_RU_Small: Set of Char = ['а'..'я'];
      Alphabet_En_Big: Set of Char = ['A'..'Z'];
      Alphabet_En_Small: Set of Char = ['a'..'z'];
      Alphabet_Spec_symbols: Set of Char = [];
      Alphabet_Numbers: Set of Char = ['0'..'9'];
Var S: Set of Char;
    S_Array: array of char;
begin
if Ru_Big = 1 then S:= S + Alphabet_RU_Big;
if Ru_Small = 1 then S:= S + Alphabet_RU_Small;
if En_Big = 1 then S:= S + Alphabet_En_Big;
if En_Small = 1 then S:= S + Alphabet_En_Small;
if Spec_symbols = 1 then S:= S + Alphabet_Spec_symbols;
if Numbers = 1 then S:= S + Alphabet_Numbers;
for i := low(i) to high(i) do S_Array[i]:= i;
for i:= 1 to Count do Result:= Result + String(S[i]);
end;

end.
п.с. Spec_symbols позже добавлю
Host-2013 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение из case 1 в case 2(switch(), язык Си) Павел_95 Помощь студентам 13 11.01.2013 14:18
case of Ekzamenator Помощь студентам 2 12.11.2011 17:55
Use case elenSV Помощь студентам 0 09.06.2010 22:28