Zadanie Projektowe: Wypisz elementy tablicy dwuwymiarowej o rozmiarze MxN ”obchodząc ją po spirali”.

0

Witam, potrzebuje pomocy w tym zadaniu. Jeżeli ktokolwiek wie jak to zrobić i ma chęć pomóc to bardzo bym prosił :)

Cechy programu:
a) główny kod programu powinien być zaimplementowany w oddzielnej funkcji, którą powina być wywoływana
wewnątrz programu
b) w głównym programie powinno zostać wykonane kilka testów sprawdzających działanie funkcji
c) program powinien mieć możliwość odczytywania danych wejściowych i zapisu wyników do plików tekstowych
d) kod powinien być opatrzony stosownymi komentarzami
Zadanie. Wypisz elementy tablicy dwuwymiarowej o rozmiarze MxN ”obchodząc ją po spirali”.
Przykład.
Wejście:
[ 1 2 3 4 5 ]
[ 16 17 18 19 6 ]
[ 15 24 25 20 7 ]
[ 14 23 22 21 8 ]
[ 13 12 11 10 9 ]
Wyjście:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

0

Najpierw czytasz idąc w prawo (tzn. zwiększając indeks jednej z tablic), potem w dół (zwiększając indeks drugiej z tablic), potem w lewo (zmniejszasz indeks pierwszej), na końcu w górę (zmniejszając drugiej) i tak w kółko.

„Droga” pokonywana to najpierw cztery (długość tablicy mniej jeden), potem znowu cztery, cztery; i dalej trzy, trzy; potem dwa, dwa…

Jak zauważysz tutaj tę prostą regułę, to już będziesz miał wszystko, czego potrzeba.

1
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	const int SizeX=12,SizeY=8;
	int tab[SizeY][SizeX];
	int MinX=0,MaxX=SizeX-1,MinY=0,MaxY=SizeY-1;
	for(int V=0;;)
	{
		for(int x=MinX;x<=MaxX;++x) tab[MinY][x]=++V;
		if((MinX>MaxX)||(++MinY>MaxY)) break;
		for(int y=MinY;y<=MaxY;++y) tab[y][MaxX]=++V;
		if((MinX>--MaxX)||(MinY>MaxY)) break;
		for(int x=MaxX;x>=MinX;--x) tab[MaxY][x]=++V;
		if((MinX>MaxX)||(MinY>--MaxY)) break;
		for(int y=MaxY;y>=MinY;--y) tab[y][MinX]=++V;
		if((++MinX>MaxX)||(MinY>MaxY)) break;
	}
	for(int y=0;y<SizeY;++y,cout<<endl) for(int x=0;x<SizeX;++x) cout<<setw(4)<<tab[y][x];
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1