Программу ** с++ Даны натуральное число n, действительные числа а1, ... , аn....

0 голосов
106 просмотров

Программу на с++
Даны натуральное число n, действительные числа а1, ... , аn. Преобразовать последовательность al, … , аn, расположив вначале отрицательные члены, а затем—неотрицательные. При этом:
а) порядок как отрицательных, так и неотрицательных чисел сохраняется прежним;
б) порядок отрицательных чисел изменяется на обратный, а порядок неотрицательных сохраняется прежним;
в) порядок отрицательных чисел сохраняется прежним, а порядок неотрицательных изменяется на обратный;
г) порядок тех и других чисел изменяется на обратный.


Информатика (268 баллов) | 106 просмотров
Дан 1 ответ
0 голосов

Одно из решений, возможно, не самое эффективное
#include
#include
int main()
{
    using namespace std;

    //исходная последовательность
    const int N = 8;
    double Arr[N] = { 14.2, -3.4, 7.8, -3.1, 8.2, 98.22, -7, 12 };

    //вывод на экран исходной последовательности
    for (int i = 0; i < N; ++i)
        cout << Arr[i] << "  ";<br>    cout << endl;<br>
    //подсчитаем количества отрицательных и неотрицательных элементов
    int kpos = 0;
    int kneg = 0;
    for (int i = 0; i < N; ++i)
        if (Arr[i] < 0)
            ++kneg;
        else
            ++kpos;

    //создадим массивы отрицательных и неотрицательных элементов
    double * ArrNeg = new double[kneg];
    double * ArrPos = new double[kpos];

    int kn = 0, kp = 0;
    for (int i = 0; i < N; i++)
        if (Arr[i] < 0)
            ArrNeg[kn++] = Arr[i];
        else
            ArrPos[kp++] = Arr[i];

    cout << "Enter a, b, c or d: ";<br>    char ch;
    cin >> ch;

    if (ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd')
    {
        switch (ch)
        {
            //пункт а)
            case 'a':
                for (int i = 0; i < kneg; ++i)
                    Arr[i] = ArrNeg[i];
                for (int i = 0; i < kpos; ++i)
                    Arr[i + kneg] = ArrPos[i];
                break;

                //пункт б)
            case 'b':
                for (int i = 0; i < kneg; ++i)
                    Arr[i] = ArrNeg[--kn];
                for (int i = 0; i < kpos; ++i)
                    Arr[i + kneg] = ArrPos[i];
                break;

                //пункт в)
            case 'c':
                for (int i = 0; i < kneg; ++i)
                    Arr[i] = ArrNeg[i];
                for (int i = 0; i < kpos; ++i)
                    Arr[i + kneg] = ArrPos[--kp];
                break;

                //пункт г)
            case 'd':
                for (int i = 0; i < kneg; ++i)
                    Arr[i] = ArrNeg[--kn];
                for (int i = 0; i < kpos; ++i)
                    Arr[i + kneg] = ArrPos[--kp];
                break;
        }
    }
    else
        cout << "You entered wrong symbol\n";<br>
    for (int i = 0; i < N; ++i)
        cout << Arr[i] << "  ";<br>    cout << endl;<br>    delete[] ArrNeg;
    delete[] ArrPos;
    return 0;
}

(1.1k баллов)
0

почему в массив double Arr[N] заносятся именно эти числа 14.2, -3.4, 7.8, -3.1, 8.2, 98.22, -7, 12 ?

0

В условии не уточняется, какая именно последовательность дана, поэтому выбрал любые числа для демонстрации работы программы.

0

окей, а можешь переделать так, чтобы пользователь выбирал сам и вводил эти числа с клавиатуры? а так всё очень даже хорошо

0

cin >> "Enter amount of numbers: ";

0

нет

0

cout << "Enter amount of numbers: ";

0

cin >> N;

0

cout << "Enter amount of numbers: ";<br> int N;
cin >> N;
double * Arr = new double[N];
for (int i = 0; i < N; ++i)
{
cout << "Enter #" << i + 1 << " element: ";<br> cin >> Arr[i];
}