Top.Mail.Ru
Ответы

Задание на программирование на языке C++

Подскажите пожалуйста как вывести двумерный массив через указатели в функции Sort_Bubble2 корректно, чтобы выводились все его элементы, а не только последняя строчка!
#include <iostream>
using namespace std;

//Напишите программу, реализующую алгоритмы сортировки для массивов
//из предыдущих лабораторных работ (одномерного и двумерного).
//Сортировка должна производится посредством вызова функции и передачей в нее адреса на массив.
//Функции для сортировки одномерного и двумерного массивов могут быть разными.

int array_generate1(int *a, int SIZE)
{
for (int i = 0; i < SIZE; i++)
{
*(a + i) = rand() % 100;
cout << *(a + i) << " ";
}

return 1;
}

int array_generate2(int *a, int SIZE)
{
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
*(a + j) = rand() % 10;
cout << *(a + j) << " ";
}
cout << endl;
}

return 1;
}

int Sort_Bubble1(int *a, int SIZE)
{
for (int i = 0; i < SIZE - 1; i++)
{
for (int j = 0; j < SIZE - 1 - i; j++)
{
if (*(a + j) > *(a + j + 1))
{
int b = *(a + j);
*(a + j) = *(a + j + 1);
*(a + j + 1) = b;
}
}
}

for (int i = 0; i < SIZE; i++)
{
cout << *(a + i) << " ";
}

return 1;
}

int Sort_Bubble2(int *a, int SIZE)
{
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE - 1; j++)
{
for (int k = 0; k < SIZE - 1 - j; k++)
{
if (*(a + k) > *(a + k + 1))
{
int b = *(a + k);
*(a + k) = *(a + k + 1);
*(a + k + 1) = b;
}
}
}
}
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
cout << *(a + j);
}
cout << endl;
}

return 1;
}

int main()
{
setlocale(LC_ALL, "Rus");
srand(time(NULL));

const int n1 = 10;
const int n2 = 5;
int arr1[n1];
int arr2[n2][n2];

cout << "Одномерный массив до сортировки: ";
array_generate1(arr1, n1);

cout << "\nОдномерный массив после сортировки: ";
Sort_Bubble1(arr1, n1);

cout << "\n\nДвумерный массив до сортировки:\n\n";
array_generate2(*arr2, n2);

cout << "\nДвумерный массив после сортировки: \n\n";
Sort_Bubble2(*arr2, n2);

}

По дате
По рейтингу
Аватар пользователя
Мыслитель
4мес

Сишные функции в C++. Молодец!

Аватар пользователя
Просветленный
4мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
 #include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 
 
int array_generate1(int *a, int SIZE) { 
    for (int i = 0; i < SIZE; i++) { 
        *(a + i) = rand() % 100; 
        cout << *(a + i) << " "; 
    } 
    return 1; 
} 
 
int array_generate2(int *a, int SIZE) { 
    // Заполняем двумерный массив, передаваемый как непрерывный блок памяти 
    for (int i = 0; i < SIZE; i++) { 
        for (int j = 0; j < SIZE; j++) { 
            *(a + i * SIZE + j) = rand() % 10; 
            cout << *(a + i * SIZE + j) << " "; 
        } 
        cout << endl; 
    } 
    return 1; 
} 
 
int Sort_Bubble1(int *a, int SIZE) { 
    for (int i = 0; i < SIZE - 1; i++) { 
        for (int j = 0; j < SIZE - 1 - i; j++) { 
            if (*(a + j) > *(a + j + 1)) { 
                int temp = *(a + j); 
                *(a + j) = *(a + j + 1); 
                *(a + j + 1) = temp; 
            } 
        } 
    } 
    for (int i = 0; i < SIZE; i++) 
        cout << *(a + i) << " "; 
    return 1; 
} 
 
int Sort_Bubble2(int *a, int SIZE) { 
    int total = SIZE * SIZE; 
    // Сортируем двумерный массив как одномерный блок из total элементов 
    for (int i = 0; i < total - 1; i++) { 
        for (int j = 0; j < total - 1 - i; j++) { 
            if (*(a + j) > *(a + j + 1)) { 
                int temp = *(a + j); 
                *(a + j) = *(a + j + 1); 
                *(a + j + 1) = temp; 
            } 
        } 
    } 
    // Выводим массив через указатель с корректным смещением: i * SIZE + j 
    for (int i = 0; i < SIZE; i++) { 
        for (int j = 0; j < SIZE; j++) { 
            cout << *(a + i * SIZE + j) << " "; 
        } 
        cout << endl; 
    } 
    return 1; 
} 
 
int main() { 
    setlocale(LC_ALL, "Rus"); 
    srand(static_cast<unsigned int>(time(NULL))); 
     
    const int n1 = 10; 
    const int n2 = 5; 
    int arr1[n1]; 
    int arr2[n2][n2]; 
 
    cout << "Одномерный массив до сортировки: "; 
    array_generate1(arr1, n1); 
 
    cout << "\nОдномерный массив после сортировки: "; 
    Sort_Bubble1(arr1, n1); 
 
    cout << "\n\nДвумерный массив до сортировки:\n\n"; 
    array_generate2(*arr2, n2); 
 
    cout << "\nДвумерный массив после сортировки:\n\n"; 
    Sort_Bubble2(*arr2, n2); 
     
    return 0; 
} 
 
Аватар пользователя
Мудрец
4мес

я как понимаю этот язык выбрали потому что он самый мозговыносящий)
учи Пайтон и не парься)