Помогите поправить код

Ввести массив чисел с задаваемым количеством элементов и некоторое число.
Без использования другого массива переставить элементы в этом массиве так, чтобы в начале массива оказались элементы не меньше некоторого числа, а в конце массива — элементы меньше этого числа, с сохранением порядка их взаимного расположения в исходном массиве. Вывести преобразованный массив.

Пример вводимых данных:
8 2,6,3,4,7,5,1,8 4 Ответ: 6,4,7,5,8,2,3,1

#include <stdio.h>

int main()
{
    int a[100],i,n,b,m,k,f;
    puts("Введите количество элементов массива");
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        printf("\n Введите %d", i);
        printf(" элемент массива ");
        scanf("%d", &a[i]);
    }
        puts("Введите некоторое число");
        scanf("%d", &m);
        f=0;
        if(n!=2)
            for(i=0;((i<(n-1))&&(f!=(n+1)));i++)
            {
                if (a[i]<m)
                {
                    b=a[i];
                    f++;
                    for (k=i;k<(n-1);k++)
                    {
                        a[k]=a[k+1];

                    }
                    a[(n-1)]=b;
                    i=i-1;


                }

            }


        for(i=0;i<n;i++)
        printf("\n %d \n", a[i]);

}

А чего тебе в твоём коде не нравится? Вроде работает )) Хотя стиль, конечно, оставляет желать лучшего )))))

Как вариант, можно предложить:

#include <stdio.h>
//#include <locale.h>

// сдвинуть элементы массива ary вправо на одну позицию
// с позиции from по позицию to
void shift(int *ary, int from, int to) {
    for (int idx = to; idx > from; --idx) {
        ary[idx] = ary[idx - 1];
    }
}


int main()
{
    //setlocale(LC_ALL, ".1251");

    int a[100],i,n,b,m,k,f;
    puts("Введите количество элементов массива");
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        printf("\n Введите %d", i);
        printf(" элемент массива ");
        scanf("%d", &a[i]);
    }
    puts("Введите некоторое число");
    scanf("%d", &m);

    for (i = 0, f = 0; i < n; ++i) {
        b = a[i];
        if (b >= m) {
            shift(a, f, i);
            a[f] = b;
            ++f;
        }
    }


    for(i=0;i<n;i++)
    printf("\n %d \n", a[i]);
    return 0;
}

Или вот такой «инлайновый» вариант:

#include <stdio.h>
//#include <locale.h>


int main()
{
    //setlocale(LC_ALL, ".1251");

    int a[100],i,n,b,m,k,f;
    puts("Введите количество элементов массива");
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        printf("\n Введите %d", i);
        printf(" элемент массива ");
        scanf("%d", &a[i]);
    }
    puts("Введите некоторое число");
    scanf("%d", &m);

    for (i = 0, f = 0; i < n; ++i) {
        b = a[i];
        if (b >= m) {
            // сдвинуть элементы массива ary вправо на одну позицию
            for (int idx = i; idx > f; --idx) {
                a[idx] = a[idx - 1];
            }
            a[f] = b;
            ++f;
        }
    }


    for(i=0;i<n;i++)
    printf("\n %d \n", a[i]);
    return 0;
}

Cranium,cпасибо огромное,просто мой не работал :)
Про стиль тоже знаю,но я пока «лайтовый» только программист ;)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.