Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 60 из 133 ПерваяПервая ... 10 50 58 59 60 61 62 70 110 ... ПоследняяПоследняя
Показано с 591 по 600 из 1325
  1. #591
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Есть вложенный цикл и goto, как выход из обоих. Есть ли решения кроме как его использование в такой ситуации? (чисто интерес, найдя подобное только на форумах C++, решается там это средствами, которых в павн нет. Но возможно в павн как раз есть что-то своё на этот счёт)

    Обновлено:
    Для наглядности код (пример, на практике всё сложнее и вариант с переделкой самого алгоритма вряд ли поможет):
    PHP код:
    for(new ij5i++)
    {
        for(
    010j++)
        {
            
    //Действия
            //Некая проверка, по которой нужно выйти из обоих циклов
            
    goto skip_this_action//Выход
        
    }
    }
    skip_this_action:
    //Код после циклов 
    Если уж очень хочется без goto, то первое, что приходит на ум - использование дополнительной функции, в которой будет происходить обработка цикла. То бишь, как-то так:
      Открыть/закрыть
    PHP код:
    main()
    {
        new 
    test_array[5][10];
        
    SomeFunc(test_array);
        for(new 
    ijsizeof(test_array); i++)
        {
            print(
    "\n");
            for(
    0sizeof(test_array[]); j++)
            {
                
    printf("%d"test_array[i][j]);
            }
        }
    }



    stock SomeFunc(array[][], len_1 sizeof(array), len_2 sizeof(array[]))
    {

        for(new 
    ijklen_1i++)
        {
            for(
    0len_2j++)
            {
                array[
    i][j] = i+j;
                
    k++;
                if(
    == 15)
                    return 
    1;
            }
        }
        return 
    1;



    Соответственно, можно под каждое условие выхода из цикла возвращать своё значение и уже от этого значения плясать в первоначальном коде.
    Ну а обычные числа возвращать по ссылке (уточнение для тех, кто сам не догадается )
    Последний раз редактировалось DeimoS; 27.12.2016 в 03:29.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  2. #592
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    548
    Репутация:
    158 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если уж очень хочется без goto, то первое, что приходит на ум - использование дополнительной функции, в которой будет происходить обработка цикла. То бишь, как-то так:
      Открыть/закрыть
    PHP код:
    main()
    {
        new 
    test_array[5][10];
        
    SomeFunc(test_array);
        for(new 
    ijsizeof(test_array); i++)
        {
            print(
    "\n");
            for(
    0sizeof(test_array[]); j++)
            {
                
    printf("%d"test_array[i][j]);
            }
        }
    }



    stock SomeFunc(array[][], len_1 sizeof(array), len_2 sizeof(array[]))
    {

        for(new 
    ijklen_1i++)
        {
            for(
    0len_2j++)
            {
                array[
    i][j] = i+j;
                
    k++;
                if(
    == 15)
                    return 
    1;
            }
        }
        return 
    1;



    Соответственно, можно под каждое условие выхода из цикла возвращать своё значение и уже от этого значения плясать в первоначальном коде.
    Ну а обычные числа возвращать по ссылке (уточнение для тех, кто сам не догадается )
    Ох, там и так это всё в функции отдельной выполняется, а с разделением на ещё одни функции так будет даже хуже в плане читабельности.
    В принципе всем меня и goto устраивает, просто было интересно
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  3. #593
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну можно ещё с помощью дополнительной переменной, которая бы указывала на то, что во вложенном цикле сработало нужное условие. То бишь, как-то так:
      Открыть/закрыть
    PHP код:
    for(new ijl5i++)
    {
        for(
    010j++)
        {
            if(
    /*условие*/)
            {
                
    1;
                break;
            }
        }
        if(
    == 1)
            break;


    Но, имхо, с goto выглядит гораздо лучше.

    Это, опять же, самые простые реализации.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #594
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    548
    Репутация:
    158 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну можно ещё с помощью дополнительной переменной, которая бы указывала на то, что во вложенном цикле сработало нужное условие. То бишь, как-то так:
      Открыть/закрыть
    PHP код:
    for(new ijl5i++)
    {
        for(
    010j++)
        {
            if(
    /*условие*/)
            {
                
    1;
                break;
            }
        }
        if(
    == 1)
            break;


    Но, имхо, с goto выглядит гораздо лучше.

    Это, опять же, самые простые реализации.
    Видел такой вариант, когда гуглил для java, но тут ещё и доп. переменная выделяется. Жаль, с break в павн довольно непродуманно (ни со switch с ним не выйти, ни цикл вложенный не завершить)
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. #595
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Есть вложенный цикл и goto, как выход из обоих. Есть ли решения кроме как его использование в такой ситуации? (чисто ради интереса, т.к. найдя подобное только на форумах C++, решается там это средствами, которых в павн нет. Но возможно в павн как раз есть что-то своё на этот счёт)

    Обновлено:
    Для наглядности код (пример, на практике всё сложнее и вариант с переделкой самого алгоритма вряд ли поможет):
    PHP код:
    for(new ij5i++)
    {
        for(
    010j++)
        {
            
    //Действия
            //Некая проверка, по которой нужно выйти из обоих циклов
            
    goto skip_this_action//Выход
        
    }
    }
    skip_this_action:
    //Код после циклов 
    upd2
    ...Хотя знаете, будет даже интереснее, если кто-то предложит более простой вариант. Вот, где я это использую.
    Технически вариант с goto самый простой. Можно ещё ввести дополнительную переменную и проверять её в условии выхода из каждого цикла, но это уже больше похоже на костыль.


    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Видел такой вариант, когда гуглил для java, но тут ещё и доп. переменная выделяется. Жаль, с break в павн довольно непродуманно (ни со switch с ним не выйти, ни цикл вложенный не завершить)
    И обе проблемы легко решаются с помощью goto.
    Что касается конкретно удаления break из switch, об этом и других отличиях от C написано здесь. Суть в том, что целью автора было создать надёжный ЯП, лишённый каких-либо неочевидных деталей, как, например, "провал" из одной ветки switch в другую.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #596
    Аватар для Mr_LemoneZ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Использую инклуд mxdate, но он показывает неправильно дату (спешит аж на 11 часов) и каждый раз в моде приходится отнимать эти 11 часов. Так вот вопрос: что отредактировать в самом инклуде, чтобы он показывал правильную дату? Всё перепробовал — не помогает...

  7. #597
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    Использую инклуд mxdate, но он показывает неправильно дату (спешит аж на 11 часов) и каждый раз в моде приходится отнимать эти 11 часов. Так вот вопрос: что отредактировать в самом инклуде, чтобы он показывал правильную дату? Всё перепробовал — не помогает...
    https://github.com/Open-GTO/time_t

  8. Пользователь сказал cпасибо:
    Mr_LemoneZ (30.12.2016)
  9. #598
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Есть у меня переменная, в которой хранится 1 или 0. И после определенного действия мне нужно поменять значение на противоположное.
    PHP код:
    light_car{vehicleid} = !light_car{vehicleid}; 
    Мне это как-то не нравится такая конструкция, есть ли другой вариант?

  10. #599
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Есть у меня переменная, в которой хранится 1 или 0. И после определенного действия мне нужно поменять значение на противоположное.
    PHP код:
    light_car{vehicleid} = !light_car{vehicleid}; 
    Мне это как-то не нравится такая конструкция, есть ли другой вариант?
    PHP код:
    light_car{vehicleid} = !!light_car{vehicleid}; 
    Последний раз редактировалось m1n1vv; 01.01.2017 в 16:42.

  11. #600
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    548
    Репутация:
    158 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    light_car{vehicleid} = !!light_car{vehicleid}; 
    Это поменяет на такое же, а не противоположное)

    Можно как-то побитовыми операциями возможно, но этот способ самый лучший и простой
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

 
Страница 60 из 133 ПерваяПервая ... 10 50 58 59 60 61 62 70 110 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •