Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 18.9.2012, 12:01   #1
NEWSWEETTOFFEE
Član
 
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
Određen forumom Problematičan program u C-u 2

Pozdrav, forumaši!
Imam jedan zadatak koji me zbunjuje u smislu njegovog smisla. Tekst zadatka je sljedeći:

Zadatu matricu ispisati spiralno, u smjeru kazaljke na satu, počevši od člana A11.

Ono što me zbunjuje je da li treba da napišem program koji spiralno ispisuje brojeve u matrici ili samo da ispišem članove po ''spiralnom'' redu?

Poslednja ispravka: NEWSWEETTOFFEE (19.9.2012 u 8:30)
NEWSWEETTOFFEE je offline   Odgovor sa citatom ove poruke
Stara 18.9.2012, 13:00   #2
Ivan452
Veteran
 
Član od: 25.7.2008.
Lokacija: Beograd
Poruke: 772
Zahvalnice: 33
Zahvaljeno 189 puta na 152 poruka
Slanje poruke preko MSN-a korisniku Ivan452
Određen forumom Re: Problematičan program u C-u 2

ako je matrica:

1 2 3 4
5 6 7 8
9 10 11 12

misli se da ispises:
1 2 3 4 8 12 11 10 9 5 6 7

Predpostavljam da nisu mislili da graficki spiralno predstavis matricu
Ivan452 je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Ivan452 na korisnoj poruci:
Belphegor (18.9.2012)
Stara 18.9.2012, 13:12   #3
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Problematičan program u C-u 2

Prvi Google rezlutat.

Belphegor je offline   Odgovor sa citatom ove poruke
Stara 18.9.2012, 14:07   #4
ivan90BG
Veteran
 
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
Određen forumom Re: Problematičan program u C-u 2

Pa nije fora Google, nego da se malo pokrenu vijuge.

Analiza

Primer matrice, date su kooordinate jer sadržaj nije bitan, koordinate počinju od 0 jer je tako u nizovima u skoro svim programskim jezicima.
Kod:
| (0,0)  (0,1)  (0,2)  (0,3)  (0,4) |
|				    |
| (1,0)  (1,1)  (1,2)  (1,3)  (1,4) |
|				    |
| (2,0)  (2,1)  (2,2)  (2,3)  (2,4) |
|				    |
| (3,0)  (3,1)  (3,2)  (3,3)  (3,4) |
|				    |
| (4,0)  (4,1)  (4,2)  (4,3)  (4,4) |
Spiralno ispisivanje sadržaja (krug po krug)
(0,0)->(0,1)->(0,2)->(0,3)->(0,4)->
(1,4)->(2,4)->(3,4)->(4,4)->
(4,3)->(4,2)->(4,1)->(4,0)->
(3,0)->(2,0)->(1,0)->

(1,1)->(1,2)->(1,3)->
(2,3)->(3,3)->
(3,2)->(3,1)->
(2,1)->

(2,2)

U opštem slučaju, ako je širina matrice m, a visina n
ispis ide ovako

prvi krug
od (0,0) do (0,m-1)
od (1,m-1) do (n-1,m-1)
od (n-1,m-2) do (n-1,0)
od (n-2,0) do (1,0)

drugi krug
od (1,1) do (1,m-2)
od (2,m-2) do (n-2,m-2)
od (n-2,m-3) do (n-2,1)
od (n-3,1) do (2,1)

i tako dalje

Ovde imamo 16 indeksa od kojih se 8 povećavaju za 1, a 8 smanjuju za jedan

od 8 indeksa koji se povećavaju 6 počinju od 0, a 2 od 1
od 8 indeksa koji se smanjuju 3 počinju od m-1, 3 od n-1, 1 od m-2, jedan od n-2

znači imamo 6 početnih indeksa

Treba nam petlja sa još 4 petlje unutar nje. Posle svake iteracije velike petlje ćemo prva dva od šest indeksa inkrementovati, a ostala četiri dekrementovati. Ali u svakoj od unutrašnjih treba inkrementovati brojač da bi znali kada smo ispisali celu matricu. Moguće da se dubljom analizom može eliminisati ovaj brojač i matematički utvrditi zavisnost broja iteracija (velikih) od dimenzija matrice, pa onda i dokle da se ide unutar poslednje, ali to je za matematičare, čak je moguće da bi imalo slabije performanse od prostog brojanja polja.

Kod:

Kod:
#include <stdio.h>

#define SIRINA 5
#define VISINA 5

int main(int argc, char* argv[])
{
	int matrica[VISINA][SIRINA] = {
					{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}
					};
	//početni indeksi
	int a = 0;	//ink
	int b = 1;	//ink
	int c = VISINA - 1; //dek
	int d = SIRINA - 1; //dek
	int e = VISINA - 2; //dek
	int f = SIRINA - 2; //dek

	int ukupno = VISINA * SIRINA;
	int brojac = 1;

	int i,j;

	while (1)
	{
		for (j = a; j <= d; j++, brojac++)
		{
			printf("%d\n", matrica[a][j]);
			if (brojac >= ukupno) goto kraj;
		}
		for (i = b; i <= c; i++, brojac++)
		{
			printf("%d\n", matrica[i][d]);
			if (brojac >= ukupno) goto kraj;
		}
		for (j = f; j >= a; j--, brojac++)
		{
			printf("%d\n", matrica[c][j]);
			if (brojac >= ukupno) goto kraj;
		}
		for (i = e; i >= b; i--, brojac++)
		{
			printf("%d\n", matrica[i][a]);
			if (brojac >= ukupno) goto kraj;
		}

		a++; b++; c--; d--; e--; f--;
	}
	kraj:

	return 0;
}
Provereno radi.

Poslednja ispravka: ivan90BG (18.9.2012 u 14:32)
ivan90BG je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku ivan90BG na korisnoj poruci:
Belphegor (19.9.2012), NEWSWEETTOFFEE (19.9.2012)
Stara 19.9.2012, 8:27   #5
NEWSWEETTOFFEE
Član
 
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: Problematičan program u C-u 2

Dakle, ne može se grafički ispisati matrica na spiralni način.
Mada niste morali odmah da postavite rešenje. Sad nema toliko slasti u zadatku.

A kako i ja da postavljam tekstove kodova?
NEWSWEETTOFFEE je offline   Odgovor sa citatom ove poruke
Stara 19.9.2012, 8:36   #6
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Problematičan program u C-u 2

Mozes da nadjes drugacije resenje.

Za kod kucas ovako:

[code]tvoj kod ovde[/code]

rezlutat:

Kod:
tvoj kod ovde
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 19.9.2012, 10:32   #7
ivan90BG
Veteran
 
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
Određen forumom Re: Problematičan program u C-u 2

Citat:
NEWSWEETTOFFEE kaže: Pregled poruke
Mada niste morali odmah da postavite rešenje. Sad nema toliko slasti u zadatku.
Ih, to je najmanji problem, ima kolko oćeš raznih ovakvih zadataka. Ja sam ovde pokazao jedan metod rešavanja koji pasuje na ovaj zadatak, a to je da vidiš da li možeš da konstruišeš rešenje za neki primer, pa da vidiš da li možeš da primetiš neki generalan metod iz tog primera. (ali nemam pojma koje su druge metode, prethodnu rečenicu sam sad izmislio ).
ivan90BG je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Program za snimanje videa u igri bakalakadaka Video/TV softver 16 22.2.2013 19:38
Moj program - RunAsGUI seymourc64 Aplikativni softver 8 13.10.2007 18:31
Program autotestovi za vozacki ispit rgdrajko Programiranje 27 30.9.2007 14:13
Ne instalirati!!! Program nCleaner ForceWare Aplikativni softver 11 29.8.2007 10:36


Sva vremena su po Griniču +2 h. Sada je 22:12.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com