Заполнить массив от левого верхнего вниз зигзагом С++
Помогите с программой, конечно работает корректно но выводит результат вверх ногами. Нужно задать размер для двухмерного массива (квадрат) после чего ввести данные для одномерного массива Введенные данные нужно вывести в виде двухмерного массива змейкой (сверху вниз зигзагом), но у меня выводится снизу верх, также всё должно быть выполнено в виде подпрограмм, пример вывода, чтобы было понятнее: Что я в теории должен получить:
размер - 3
элементы одномерного массива - 1 2 3 4 5 6 7 8 9
вывод двухмерного массива :
1 6 7
2 5 8
3 4 9
Что я получаю :
вывод двухмерного массива :
3 4 9
2 5 8
1 6 7
Помогите пожалуйста, не могу понять в чём проблема, и пожалуйста желательно (но не обязательно), чтобы массив выводился правильно для разных размеров, не только 3*3, но повторяю это не обязательно, главное чтобы проблема была решена.
/**************************************************************************************/
/* */
/* Задание: создать программу средствами языка С ++, для формирования двухмерного */
/*массива a[n][n] путём чтения с него данных с заданного одномерного */
/*массиву b[m*n] согласно индивидуального варианта. */
/* 1 6 7 */
/* 2 5 8 */
/* 3 4 9 */
/* Протестировать программу по трем разным наборам данных. */
/**************************************************************************************/
#include <iostream>
#include <conio.h>
#include <windows.h>
#define MAX 100
using namespace std;
float a[MAX][MAX], b[MAX];
int InpSizes(int* n, int* k); // Ввод размеров
int InpOneDimArr(float b[MAX], int* k); // Введение одномерного массива b
int OutOneDimArr(float b[MAX], int* k); // Вывод одномерного массива b
int SetValues(float a[][MAX], float b[], int* n, int* k); // Заполнение двухмерного массива а
int OutTwoDimArr(float a[][MAX], int* n); // Вывод двухмерного массива а
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float a[MAX][MAX];
float b[MAX];
// Ввод размеров
int n = 0, k = 0;
InpSizes(&n, &k);
// Вводим элементы массива b
InpOneDimArr(b, &k);
// Вывод масива b
OutOneDimArr(b, &k);
OutTwoDimArr(a, &n);
SetValues(a, b, &n, &k);
// Вывод массива а
OutTwoDimArr(a, &n);
return 0;
}
//------------------------------------------------------------------------------------------------------------------------
int SetValues(float a[][MAX], float b[], int* n, int* k) {
// вспомогательные переменные
int filler = 0; // Заполнитель
int collumn, row; // Столбцы и строки
while (filler < *k) {
for (collumn = 0; collumn <= *n; collumn++) {
if ( collumn % 2 != 0) {
for (row = 0; row < *n; row++) {
//if (row + collumn <= *n) {
*(*(a + row) + collumn) = *(b + filler);
++filler;
//}
}
}
else {
for (row = *n - 1; row >= 0; row--) {
//if (row + collumn <= *n) {
*(*(a + row) + collumn) = *(b + filler);
++filler;
//}
}
}
}
}
return 0;
}
//---------------------------------------------------------------------------------------------
// Ввод размеров
int InpSizes(int* n, int* k){
cout << endl <<" Введите количество строк и столбцов двухмерного массива:";
cin >> *n;
// Размер массива a
*k =*n * *n;
return 0;
}
//---------------------------------------------------------------------------------------------
// Подпрограмма ввода элементов одномерного массива
int InpOneDimArr(float b[MAX], int* k) {
for (int i = 0; i < *k; i++) {
cout << endl << "Введите значение [" << i << "] элемента:";
cin >> *(b + i);
}
return 0;
}
//---------------------------------------------------------------------------------------------
// Подпрограмма вывода одномерного массива
int OutOneDimArr(float b[MAX], int* k) {
cout << endl << " Элементы массива b:" << endl << "\t";
for (int i = 0; i < *k; i++) {
cout << *(b + i) << " ";
}
cout << endl;
return 0;
}
//---------------------------------------------------------------------------------------------
// Подпрограмма вывода двухмерного массива
int OutTwoDimArr(float a[][MAX], int* n) {
cout << endl << " Элементы массива а:" << endl;
for (int i = 0; i < *n; i++) {
cout << "\t";
for (int j = 0; j < *n; j++) {
cout << *(*(a + i) + j) << " ";
}
cout << endl;
}
return 0;
}
//---------------------------------------------------------------------------------------------
Ответы (1 шт):
Так, проблема решена, немного затупил, жаль никто не помог, но не суть.
Проблема решается довольно легко, в подпрограмме int SetValues, замените местами for (row = 0; row < *n; row++) и for (row = *n - 1; row >= 0; row--) и массив начнёт выводить результаты правильно