|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
18.9.2012, 12:01 | #1 |
Član
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
|
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) |
18.9.2012, 13:00 | #2 |
Veteran
|
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 |
Sledeći korisnik se zahvaljuje korisniku Ivan452 na korisnoj poruci: | ||
Belphegor (18.9.2012) |
18.9.2012, 13:12 | #3 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: Problematičan program u C-u 2
Prvi Google rezlutat.
Spoiler za Spoiler:
|
18.9.2012, 14:07 | #4 |
Veteran
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
|
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) | (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; } Poslednja ispravka: ivan90BG (18.9.2012 u 14:32) |
Sledećih 2 korisnika se zahvaljuje korisniku ivan90BG na korisnoj poruci: | ||
Belphegor (19.9.2012), NEWSWEETTOFFEE (19.9.2012) |
19.9.2012, 8:27 | #5 |
Član
Član od: 3.5.2012.
Poruke: 45
Zahvalnice: 16
Zahvaljeno 2 puta na 2 poruka
|
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? |
19.9.2012, 8:36 | #6 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
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 |
19.9.2012, 10:32 | #7 |
Veteran
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
|
Re: Problematičan program u C-u 2
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 ).
|
Bookmarks sajtovi |
|
|
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 |