Тема для программистов

Статус
В этой теме нельзя размещать новые ответы.

Aliens

Меня знают многие ;-)
#1
Есть ли такая конструкция в каком нибудь языке? И если нет то почему?

 

taliban

Житель города
#2
Да на любом языке этот алгоритм можно реализовать: Java, Basic, PHP, C, Asm, Processing и т.д. Второй вопрос не понял
 

Aliens

Меня знают многие ;-)
#5
Катя, ромбики на блок схеме означают контрукцию ЕСЛИ да ТО... ИНАЧЕ... и их 2!
А теперь сама посмотри что ты написала:
ЕСЛИ Хорошая погода и Лето Тогда
Поедем на море
Иначе
Пойдем в лес
КонецЕсли
 

skif

Житель центра
#9
Так нельзя делать, это совершенно меняет алгоритм.
Если рассматривать языки с предсказуемой последовательностью перебора условий, то это не может изменить алгоритм. Либо блок схема не отражает задачу.
Поясни, почему ты считаешь, что нельзя объединять условия в этом случае?
 

GMX

schizophrenic
#10
))))
Код:
if (statment1 and statement2) then {result1} else {result2}
по результату равно
Код:
if (statement1) {
  if (statement2) {
      result1
  } else {
      result2
  }
} else {
  result2
}
только последнее выглядит как говно. :) Coole норм все написала.
 

GMX

schizophrenic
#11
Вообще ходят слухи, что Coole выучила учебник по формальной логике и стала мужиком. :)
 

Canniballissimo

Житель центра
#12
Diesell, а почему тебя не устраивает вариант засунуть блоки кода в две функции и вызывать их в обычном if'е? Там какие-то сверхстрогие ограничения на размер кода? Вряд ли оно хоть чуточку будет быстрее работать, если найдётся язык с таким вариантом конструкции выбора.
 

skif

Житель центра
#13
Такой вариант конструкции выбора закодированный на ЯП (трололо пример у GMX) – это лютая наркомания:)
Coole предложила правильное решение поставленной задачи.
 

Pixel-AQ

Известный деятель города
#14
мне кажется предложенная конструкция есть в любом языке программирования
 

GMX

schizophrenic
#15
Такой вариант конструкции выбора закодированный на ЯП (трололо пример у GMX) – это лютая наркомания:)
Наркомания? Да что вы знаете о наркомании???
Код:
int main() {
  if (check()) {
    result1();
    return(0);
  } else {
    result2();
    return(0);
  }
}
 
boolean check() {
  switch (statement1):
  {
    case(true): {
      switch (statement2):
      {
        case(true): {
          return(true);
        }
        case (false): {
          return(false);
        }
      }
    case(false): {
      return(false);
    }
  }
}
 
void result1() {
  result1;
}
 
void result2() {
  result2;
}
India style! :cool:
 

Aliens

Меня знают многие ;-)
#16
Вы все ничего не поняли!
Во первых конструкция: Если (УСЛОВИЕ) Тогда {...}
Подразумевает любое составное УСЛОВИЕ, но! Это составное условие рассчитывается сразу, например многие компиляторы используют метод обратной польской записи (Ну что там многие, почти все), так вот, если мы зададим составное условие вида:
(СуществетОбъект(Объект)=Да)и(Объект.Атрибут=1)
Компилятор тупо проверит существоние объекта и значение атрибута этого объекта, в случае если объект существует все нормально, но если объекта нет, тогда вторая часть составного условия вызовет исключения типа обращение к несуществующему объекту, области памяти, нарушение доступа и т.д. на вкус компилятора.
Поэтому в таких проверках придеться использовать 2 конструкции Если (if), первой проверяем существование объекта и если он есть, то его атрибут.
Алгоритм который написал Раздолбайкер правильный с точки зрения задачи и реализации на любом языке, но в нем есть минус 1 и тот же блок кода приходится переписывать 2 раза! (в версии Раздолбайкера "пролет")примерно так:

Если "сигареты не найдётся" = нет
{
пролет
}
иначе
{
Если "спички есть" = нет тогда
{
Покурил
}
иначе
{
пролет
}
}

Блок-схема в топике, иллюстрирует немного другую конструкцию, она позволяет выйти из второго условия в другую ветку первого. Так вот вопрос: почему ее нет в языках?
Можно конечно так написать:

Если "сигареты не найдётся" = нет
{
goto l1
}
Если "спички есть" = нет тогда
{
Покурил
goto l2
}
:l1 пролет
:l2 ....

Но как известно в открытую использовать безусловный переход на метку не православно...
 

Aliens

Меня знают многие ;-)
#18
Ну это пример простецкий, а если в этом блоке меняются значения локальных переменных, что мне их все в процедуру кидать? А если таких блоков в реальном листинге несколько десятков, а если вложенность подобных условий многоуровневая? А если язык не позволяет пользоваться указателями (например их там просто не существует)) )?
 

GMX

schizophrenic
#19
Ладно, ладно, не нужно приумножать сущности сверх меры...
Код:
int check()
{
  if (not statement1) { break; }
  else if (not statement2) {break;}
  else {
    result1;
    return(1);
  }
  result2;
  return(0);
}
 
Статус
В этой теме нельзя размещать новые ответы.