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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2024, 22:44   #21
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 999
По умолчанию

Неделю обсуждали и внезапно тема решена мной за 5 минут
на 95% см. №16

https://www.programmersforum.ru/show...51#post1868551

и со стыда онлайн на qbjs.org не проверяем

https://qbjs.org/?code=TiA9IDEzOiBSY...AAregA5WHqAOU=

Программы завсегдатаев проверяемые ли онлайн?

Ищем в интернете: неприятие чужого мнения
и / или / либо
ru.wikipedia.org/wiki/Склонность_к_подтверждению_своей_то чки_зрения
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 28.12.2024, 11:55   #22
vovamakarovych
Пользователь
 
Регистрация: 09.04.2019
Сообщений: 35
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Тогда возвращайтесь к предыдущей реализации, когда в новый массив переписывались сначала нечетные, а потом четные из исходного массива.
Или вот такая "наивная" реализация без дополнительного массива:
Код:
void segregateEvenOdd(int* array, const size_t size) 
{
    for (size_t i = 0; i < size - 1; ++i) 
    {
        if (array[i] % 2 != 0) 
            continue;
        
        size_t j = i + 1;
        while (j < size && array[j] % 2 == 0)
            ++j;
        if (j == size)
            break;
        
        int v = array[j];
        for (size_t k = j; k > i; --k)
            array[k] = array[k - 1];
        array[i] = v;
    }
}
Четные сдвигаются "блоками" вправо, а нечетные по одному переносятся влево.
А можна как то сделать не черезь while а через for?
Я попробовал переделать через for но увы ничего не получилось(

Код:
void segregateEvenOdd(int8_t array[], const size_t size)
{
    for (size_t i = 0; i < size - 1; ++i)
    {
        if (array[i] % 2 != 0)
            continue;
        
        int v = 0;
        for (size_t j = i + 1; j < size; ++j) 
        {
            if (array[j] % 2 == 0) 
            {
                v = array[j];
                for (size_t k = j; k > i; --k)
                    array[k] = array[k - 1];
            }
            array[i] = v;
        }
    }
}
vovamakarovych вне форума Ответить с цитированием
Старый 28.12.2024, 12:12   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,394
По умолчанию

Цитата:
Сообщение от vovamakarovych Посмотреть сообщение
А можна как то сделать не черезь while а через for?
Можно.
Код:
// вместо
        size_t j = i + 1;
        while (j < size && array[j] % 2 == 0)
            ++j;
        if (j == size)
            break;
// сделать
        size_t j;
        for (j = i + 1; j < size && array[j] % 2 == 0; ++j);
        if (j == size)
            break;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.12.2024, 12:28   #24
vovamakarovych
Пользователь
 
Регистрация: 09.04.2019
Сообщений: 35
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Можно.
Код:
// вместо
        size_t j = i + 1;
        while (j < size && array[j] % 2 == 0)
            ++j;
        if (j == size)
            break;
// сделать
        size_t j;
        for (j = i + 1; j < size && array[j] % 2 == 0; ++j);
        if (j == size)
            break;
Но мы в самому for ничего не делаем? Тогда да while лутче
vovamakarovych вне форума Ответить с цитированием
Старый 28.12.2024, 12:33   #25
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,394
По умолчанию

Да, тело цикла пустое, но так тоже можно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция которая должна с json формата возвращать в стандартный dimaSlon Qt и кроссплатформенное программирование С/С++ 76 08.06.2018 17:35
На С++ написать программу с реализацией в виде вызова функции по ссылке: Функция должна вернуть не одно, а ДВА(или более) значения Raitek Помощь студентам 2 23.01.2015 07:41
Функция, сортирующая сначала нечетные числа в массиве по возрастанию, а потом четные по убыванию. yurets17 Помощь студентам 1 12.11.2013 19:01
Вывести сначала все его четные (нечетные) елементы, а потом- нечетные(четные). tondo Помощь студентам 4 25.04.2012 00:17
Паскаль, вывести строки массива, поочередно, с лево на право, справа на лево Amid1990 Помощь студентам 2 15.11.2010 13:00