Pomoc C (2dimenzionalni niz)

poruka: 9
|
čitano: 1.676
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

E ovako : imam zadatak koji glasi "Inicijalizirajte tablicu dimenzija 4x4 i ispišite novu tablicu sa poredanim elementima po velicini." Znam ga uraditi koristeci obicni niz (niz[16], ali 99% sam siguran da bi trebalo koristeci 2dimenzionalni niz (niz[4][4]). Ali nikako ne vidim kako bi to uradio, pa molim vas bi li mi netko mogao pokazati. Sutra mi je ispit, pa velika hvala tko pokaze !

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

Da ne ispadnem lijencina koja ceka da netko drugi uradi za njega, evo sta sam uradio dosad :

 #include <stdio.h>

 

void main()

int i,j,t;

int x[16] = {7,9,3,4,5,8,7,-8,3,-1,1,2,3,-4,5,-6};

for (i=0;i<4;i++){

for (j=0;j<4;j++){

printf("%d \t",x[(4*i)+j]);

}

printf("\n");

}

for (i=0;i<15;i++){

for (j=i+1;j<16;j++){

if (x[i]>x[j]){

t=x[i];

x[i]=x[j];

x[j]=t;

}

}

}

printf ("\n");

for (i=0;i<4;i++){

for (j=0;j<4;j++){

printf("%d \t",x[(4*i)+j]);

}

printf("\n");

}

}

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

Tek počinješ s C-om kao i ja,pa evo moj savjet.
Probaj staviti u N[16],pa ga sortiraj preko BubbleSorta,

te napravi tablicu pomoću njega,ako se to uoće može napraviti.

Ili modificiraj BubbleSort,da može prelaziti preko matrice?

Ajde taman vježbam za kolokvij,probat ću tako riješit. 

EuNE:AnakinSW,WoT: BlackRainCRO
Poruka je uređivana zadnji put čet 31.1.2013 18:39 (pandza94).
Moj PC  
0 0 hvala 1
12 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

prvi put cujem za bubblesort..

 

edit: ovo gore sto sam uradio radi, nema potrebe ni za kakvim modifikacijama.

mene samo zanima moze li se uraditi koristeci 2d niz

Poruka je uređivana zadnji put čet 31.1.2013 19:04 (lazy_punk).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

IMaš napisan bubble sort algo u svom kodu već.
Evo pokušavam,ne uspijeva mi baš 

EuNE:AnakinSW,WoT: BlackRainCRO
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoc C (2dimenzionalni niz)
lazy_punk kaže...

prvi put cujem za bubblesort..

 

edit: ovo gore sto sam uradio radi, nema potrebe ni za kakvim modifikacijama.

mene samo zanima moze li se uraditi koristeci 2d niz

Naravno da se može. Napravi se pokazivač na početak 2D niza i onda se sortira kao 1D polje:

 

int matrica[3][3] = ....

int *p = &matrica[0][0];

 

sortiraj p veličine 3*3

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
12 godina
neaktivan
offline
Pomoc C (2dimenzionalni niz)

@pandza

hehe...naucili su nas to, ali nisu imenovali taj algoritam...

 

@tracer

mi to jos nismo ucili, pa pretpostavljam da profesorica nije mislila na pointere ( znam sta su, naucio sam iz tutoriala s neta :P)

hvala uglavnom

Moj PC  
0 0 hvala 0
17 godina
offline
Pomoc C (2dimenzionalni niz)

U biti treba samo osigurati da algoritam prođe kroz sve elemente matrice na način kao da je niz jednodimenzionalni.

To se vrlo lako postigne operatorima cjelobrojnog dijeljenja i modulo.

Dakle, vanjska petlja ima prolaz kroz sve elemnte do posljednjeg na ovaj način:

for(int i=0; i<8; i++) - za iteraciju i=7 je indeks reda 7/3 = 2, a indeks stupca 7%3 = 1, odnosno to je elerment dvodimenzionalnog niza niz[2][1].

Postupak je isti i za unutarnju petlju.

 

 

#include <iostream>
using namespace std;
 

int main()

{
    int temp;
    int niz[3][3] = {{8,5,1} ,{7,15,28} ,{19,4,3}};
    for (int i = 0; i < 8; i++)
    {
       for (int j = i+1;  j < 9;  j++)
       {
          if(niz[i/3][i%3] > niz[j/3][j%3])
          {
             temp = niz[i/3][i%3];
             niz[i/3][i%3] = niz[j/3][j%3];
             niz[j/3][j%3] =  temp;
          }
       }
    }
    for (int i = 0; i < 3; i++)
    {
       for (int j = 0; j < 3; j++)
       {
          cout<< niz[i][j] << " ";
       }
       cout<< endl;
    }

    return 0;
}

 


p.s. žao mi je, vidim da je prekasno, ali neka stoji, valjat će ubuduće{#}

Poruka je uređivana zadnji put sub 2.2.2013 14:01 (Floki).
 
0 0 hvala 1
17 godina
offline
Pomoc C (2dimenzionalni niz)

Na istu foru možemo izvršiti ispis 2D niza sa jednom petljom, međutim složenost je ista O(n*m), a aritmetičkih operacija više, pa to nema smisla raditi, osim ako profesorici i to ne padne na pamet staviti kao zadatak kao i 2D niz u algoritam za sortiranje.{#} Zato je onaj način sa aritmetikom pokazivača koji je @Tracer naveo bolji, uz istu složenost algoritma manje aritmetičkih operacija.

U ovom slučaju:

 

 

for (int i = 0; i < 9; i++)
    {
       cout<< niz[i/3][i%3] << " ";
       if(i%3==2) cout<< endl;
    }

Poruka je uređivana zadnji put sub 2.2.2013 21:10 (Floki).
 
0 0 hvala 1
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice