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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 13:37   #1
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию Оператор Case: Basic Vs Pascal

К сожалению, возможности оператора Case в Паскале не позволяют решить проблему, довольно просто решаемую на бейсике. Например, нужно написать код, использующий координаты двух точек A(x1; y1) и B(x2; y2). На бейсико-подобном языке все выглядит логично и просто:

Код:
x1 = Random(500)
y1 = Random(500)
x2 = Random(500)
y2 = Random(500)
DeltaX = x2 - x1
DeltaY = y2 - y1
x =0
y = 0
STEP = 10

Select
  Case (DeltaX = 0) And (DeltaY = 0)
      x := x1;
      y := y1;
  Case DeltaX = 0
      x = x1
      y = y1 + STEP
  Case DeltaY = 0
      y = y1
      x = x1 + STEP
  Case else
      //Здесь размещается основной код
EndSelect
Неужели, для того, чтобы сделать то же самое на Паскале необходимо написать такого монстра:
Код:
begin
  Randomize;
  x1 := Random(500);
  y1 := Random(500);
  x2 := Random(500);
  y2 := Random(500);
  DeltaX := x2 - x1;
  DeltaY := y2 - y1;
  x :=0;
  y := 0;

  If (DeltaX = 0) And (DeltaY = 0) then  //3
  begin
    x := x1;
    y := y1;
  end
  else
  begin
    If DeltaX = 0 then                   //2
    begin
      x := x1;
      y := y1 + STEP;
    end
    else
    begin
      If DeltaY = 0 Then                 //1
      begin
        y := y1;
        x := x1 + STEP;
      end
      else
      begin
        //Здесь размещается основной код
      end                                //1
    end                                  //2
  end;                                   //3

end;

end.
dimavit вне форума Ответить с цитированием
Старый 11.08.2015, 13:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
  x := x1; y := y1;
  if (DeltaX = 0) then inc(y,STEP) else
  if (DeltaY = 0) then inc(x,STEP) else
      //Здесь размещается основной код
Устраивает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 14:21   #3
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
  x := x1; y := y1;
  if (DeltaX = 0) then inc(y,STEP) else
  if (DeltaY = 0) then inc(x,STEP) else
      //Здесь размещается основной код
Устраивает?
Спасибо, вполне, но согласитесь, с Case то понагляднее будет. В Паскале Case это, скорее аналог бейсиковского Switch, а вот аналога Case у него нет.
dimavit вне форума Ответить с цитированием
Старый 11.08.2015, 14:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а вот аналога Case у него нет
есть и Stilet привел его
Код:
if ... 
else if ... и т.д.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 14:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но согласитесь, с Case то понагляднее будет.
Я бы не сказал... Ну да не важно. Это дело вкуса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 16:07   #6
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
  x := x1; y := y1;
  if (DeltaX = 0) then inc(y,STEP) else
  if (DeltaY = 0) then inc(x,STEP) else
      //Здесь размещается основной код
Устраивает?
Кстати, этот код дает неверный результат (я же говорю, что он абсолютно не читаемый по сравнению с Select Case)
dimavit вне форума Ответить с цитированием
Старый 11.08.2015, 16:36   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Кстати, этот код дает неверный результат
дык это не код, а набросок, пример
Цитата:
я же говорю, что он абсолютно не читаемый по сравнению с Select Case
Все претензии к Вирту. Не пиши на паскале, бейсик наше все. Мне тоже это не понравилось когда с foxpro на delphi переходил. Ничего, пережил и забыл
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.08.2015 в 16:55.
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 16:59   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
он абсолютно не читаемый
Кому как... Я так привык, меня устраивает.
Цитата:
этот код дает неверный результат
Откуда же я знаю что ты там хотел? )
ИМХО у тебя он и на бейсике подозрительно выглядит...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 17:45   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

нечитабелен он из-за "лишних" begin-end, а так вполне ничего.
Код:
If (DeltaX = 0) And (DeltaY = 0) then  //3
  begin
    x := x1;
    y := y1;
  end
else If DeltaX = 0 then                   //2
  begin
    x := x1;
    y := y1 + STEP;
  end
else If DeltaY = 0 Then                 //1
  begin
     y := y1;
     x := x1 + STEP;
  end
else
  begin
        //Здесь размещается основной код
  end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.08.2015, 23:50   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а в васике seiect-case подобен сишечному switch-case или паскакалевскому case ... of?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оператор Case andresan SQL, базы данных 1 16.05.2011 11:58
Оператор case Степан sapral Общие вопросы C/C++ 4 21.02.2011 11:54
оператор case of wlll Помощь студентам 4 10.11.2010 19:09
Изменить приведенную программу, используя оператор варианта CASE(Pascal) Nitoo Помощь студентам 2 29.09.2010 15:16
Оператор case Yermek Помощь студентам 3 12.10.2008 18:06