Заполнить матрицу следующим образом

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
SimpleJack
Сообщения: 2
Зарегистрирован: 10 окт 2016, 21:17

10 окт 2016, 21:31

Нужно заполнить матрицу следующим образом
1 8 9 16 17 24
2 7 10 15 18 23
3 6 11 14 19 22
4 5 12 13 20 21


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

Код: Выделить всё

#include "stdafx.h"
#include <iostream>

using namespace std;


int main()
{
	setlocale(LC_ALL, "Russian");

		

int n, m, min = 0, sum = 0;

		cout << "Введите количество рядков";
		cin >> n;
		cout << "Введите количество столбцов";
		cin >> m;

		int *a; 
		a = new int[n*m];
		for (int i = 0; i < n; i++) 
                       {
			for (int j = 0; j < m; j++) 
                             {
				cin >> a[i*m + j];
			      }
			cout << endl;
		       }


		for (int i = 0; i < n; i++) 
                       {
			for (int j = 0; j < m; j++) 
                              {
					cout << a[j*m + i] << "   ";
			      }
			cout << endl;
		          }
		
			
		delete[] a;
		cin.get();
		cin.get();
		system("pause");
    return 0;
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

10 окт 2016, 22:30

Идея следующая (псевдокод):

Код: Выделить всё

Цикл по j от 0 до M-1
{
   Если j чётное то
   {
      Цикл по i от 0 до N-1
      {
         Считать a[i, j]
      }
   }
   Иначе
   {
      Цикл по i от N-1 до 0
      {
         Считать a[i, j]
      }
   }
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
SimpleJack
Сообщения: 2
Зарегистрирован: 10 окт 2016, 21:17

12 окт 2016, 18:37

Romeo писал(а):Идея следующая (псевдокод):

Код: Выделить всё

Цикл по j от 0 до M-1
{
   Если j чётное то
   {
      Цикл по i от 0 до N-1
      {
         Считать a[i, j]
      }
   }
   Иначе
   {
      Цикл по i от N-1 до 0
      {
         Считать a[i, j]
      }
   }
}
Вроде сделал как написано, но программа не выводит вообще ничего:

Код: Выделить всё

#include <iostream>

using namespace std;


int main()
{
	setlocale(LC_ALL, "Russian");

		


		
int n, m, min = 0, sum = 0;

		cout << "Введіть кількість рядків";
		cin >> n;
		cout << "Введіть кількість стовпців";
		cin >> m;

		int** a; //a - вказівник на масив вказівників
		a = new int*[n]; //виділення пам’яті для
						 //масиву вказівників на n рядків
		for (int i = 0; i < n; i++)
			a[i] = new int[m]; //виділення пам’яті для
							   //кожного рядка масиву розмірністю m
							   //...
							   // Вивід елементів масиву
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cin >> a[i][j];
			}
			cout << endl;
		}
		for (int j = 0; j > 0 && j < m - 1; j++)
		{
			if (j % 2 == 0)
			{
				for (int i = 0; i > 0 && i < n - 1; i++)
				{
					cout << a[j][i] << "   ";
				}
			}
			else
			{
				for (int i = 0; i > n - 1 && i < 0; i++)
				{
					cout << a[j][i] << "   ";
				}
			}
		}
			

		// Видалення пам’яті
		for (int i = 0; i < n; i++)
			delete[] a[i]; //звільнення пам’яті від
						   //кожного рядка
	
			
				
			
		delete[] a;
		cin.get();
		cin.get();
		system("pause");
    return 0;
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

12 окт 2016, 21:18

Потому, что не так сделал, как я предложил. Внимательней разбери как работает мой алгоритм. Нужно сначала понять, а потом писать код, а не наоборот.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить