Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

vova vovchik Ученик (103), на голосовании 1 день назад
Подскажите пожалуйста как вывести двумерный массив через указатели в функции 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);

}
Голосование за лучший ответ
Скрытая мудрость Мудрец (14124) 1 месяц назад
я как понимаю этот язык выбрали потому что он самый мозговыносящий)
учи Пайтон и не парься)
vova vovchikУченик (103) 1 месяц назад
да я бы с радостью, и так изучаю) просто этот язык мы в техникуме учим, поэтому приходится и его тоже учить)
Батаев ДмитрийПросветленный (23285) 1 месяц назад
потому ты СКРЫТАЯ мудрость. Мудрость в кавычки возьми
Cogni Просветленный (47229) 1 месяц назад
 #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;
}
vova vovchikУченик (103) 1 месяц назад
А что делать если программа выводит такие значения?
Cogni Просветленный (47229) vova vovchik, Попробуй код мой
etar125 Мыслитель (5460) 1 месяц назад
Сишные функции в C++. Молодец!
Батаев ДмитрийПросветленный (23285) 1 месяц назад
единственный "косяк"... Переписать не сложно
Похожие вопросы