Šta je novo?

niz c zadatak pomoc

CORE 283

Čuven
Učlanjen(a)
29.01.2002
Poruke
351
Poena
619
imam niz a(10) ciji su elementi slucajni celi brojevi od 0-9. potrebno je prikazati broj pojavljivanja svakog od brojeva 0-9 u nizu A. zna li neko kako uraditi?, kod?
tnx
 
Poslednja izmena:
Ako nemaš još neka ograničenja, najlakše ti je da napraviš niz b(10) u kome će svaki element označavati broj pojavljivanja elementa sa odgovarajućim indeksom u nizu a. Znači recimo b[5] će označavati broj pojavljivanja broja 5 u nizu a. Inicijalizuješ b sa nulama, a onda prođeš jednom kroz a i za svaki element iz a, inkrementiraš odgovarajući iz b.
 
tako nesto sam imao na umu al mi ne polazi za rukom da napisem kod .. tj kako broj pojavljivanja prebaciti u niz b
 
mozda nije najefektivnije resenje ali ja bih to ovako:

...bla bla...

broj=0;

for (j=0;j<10;j++) //idemo redom, cifre od 0 do 9
{ for (i=0;i<10;i++) //prolazim kroz niz, trazim cifre od 0 do 9...
{
if (a==j) broj++;// kad nadjem datu cifru, uvelicavam brojac...
}
b[j]=broj; // na mestu '0'-'9' u nizu b ce se naci dakle broj cifri u nizu a.
broj=0; // vracam brojac na nulu i picim ispocetka za sledecu cifru.
}

Kad se zavrsi ciklus sve sto ostaje je jedan printf...
Pozdrav! :wave:
 
Kod:
	int a[] = {3, 2, 6, 3, 8, 7, 0, 2, 2, 0};
	int b[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
	for (int m = 0; m < 10; m++)
	{
		for (int n = 0; n < 10; n++)
		{
			if (a[n] == m) b[m]++;
		}
	}
	for (int o = 0; o < 10; o++)
	{
		printf("Broj %d se pojavljuje %d puta.\n", o, b[o]);
	}
 
Jao bre ljudi, šta će vam dve for petlje i if? :zgran:

Kod:
for (int i = 0; i < 10; i++)
    b[a[i]]++;
 
jddipqd je napisao(la):
Kod:
for (int i = 0; i < 10; i++)
    b[a[i]]++;
Al si ga naguzio... Svaka cast ;)
 
e, od manjeg uvek ima manje izgleda.... svaka čast :)
 
hvala na pomoci i na kompaktnom resenju :)
e sad me interesuje jos jedna stvar a to je funkcija random koju sam upotrebio za radnom bojeve izmedju 0 9
Kod:
for(i=0;i<10;i++) printf(" %d", a[i]=random(10));
mi uvek izbacuje iste random brojeve, probao sam i sa randomize i inkludovao time.h medjutim nesto nije htelo da radi. da li moze nekako da se resi da se generisu razliciti random brojevi ?
 
eeee, pa pričao sam ja o ovome već negde ovde... evo kako se to rešava:
Kod:
#include <time.h>
....
srand(time(NULL));
...
int n;
n = rand();
...

edit: naravno kontaš da možeš sve ovo da ubaciš u taj tvoj niz...
Kod:
for (int i=0; i<10; i++)
        niz[i]=rand()%10; //za brojeve od 0 do 9 je li
//naravno deo koda gore iznad se podrazumeva :)
 
Poslednja izmena:
hvala zmaj :)
nego imam jos jedan problem sa drugim zadatkom pa da ne otvaram novu temu ..
od tri niza a[5],b[5] i c[5] sa random brojevima potrebno je formirati matricu d (3x5)

e sad interesuje me kako napuniti matricu d od nizova a,b i c. znam da prvo treba odredti minimume nizova i uporediti ih i onda napuniti matricu. kako to izvesti?.. i opet kod mi treba:)
 
ali po kom kriterijumu treba da formiraš matricu? od najmanjih elemenata svakog od početna 3 niza ili šta... budi konkretniji
 
bože... pa ja ne čitam i pišem glooposti... sorry, nisam shvatio da je 3*5=15 (a studiram na matematičkom faxu... vratite me u prvi razred ) :)

pretpostavljam da matrica treba redom da ima uređenje elemenata od najmanjeg ka najvećem jel tako? pretpostavljam da jeste... ništa odo ja da se bačim na pos'o pa ćem da ti javim kada odradim
 
e evo ti kod kompletnog programa uz odgovarajuće komentare...
u svakom slučaju, verujem da postoji mnogo elegantniji način da se ovo odradi, ovo što sam ja pisao je čisto silovanje, ali zaista me mrzi da smišljam neki bolji algoritam... u svakom slučaju ovo radi, a i fora je u tome što su ovi nizovi i matrica veoma mali tako da i ovo radi brzo... ti se pozabavi ovime i nađi bolji način da rešiš ovaj problem iz ovog mog kucanija...

cheerzzzz :bottle:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define JEVECI(a, b) a >= b ? 1 : 0 //makro koji vratja istinitosnu vrednost iskaza A>=b


void zameni(int *niz, int i, int j) {
	niz[i] = niz[i]-niz[j];
	niz[j] = niz[i]+niz[j];
	niz[i] = niz[j]-niz[i];
};//ovo mislim da je jasno shta je, samo odradjeno na drugachiji nachin... :)




int main() {
	srand(time(NULL));
	int niz1[5], niz2[5], niz3[5], matrica[3][5], x;
	
	
	//ovo kontash, popunjavanje nizova...
	for (int i=0; i<5; i++) {
		niz1[i]=rand()%10;
		niz2[i]=rand()%10;
		niz3[i]=rand()%10;
	}

	//e ovaj deo ti je sortiranje svakog od niza ponaosob...
	for (i=0; i<5; i++) {
		for (int j=i+1; j<5; j++) {
			if (JEVECI(niz1[i], niz1[j])) {
				zameni(niz1, i, j);
			}
			if (JEVECI(niz2[i], niz2[j])) {
				zameni(niz2, i, j);
			}	
			if (JEVECI(niz3[i], niz3[j])) {
				zameni(niz3, i, j);
			}	
		}
		
	}
	//e ovde pochinje fora, ovde popunjavash matricu tako shto ti niz 1 ide u prvu kolonu
	//niz 2 u drugu itd. fora je shto su nizovi vetj unutar sebe sortirani
	for (i=0; i<3; i++) {
		switch (i) {
		case 0: {
			for (int j=0; j<5; j++) {
				matrica[i][j]=niz1[j];
			}
			continue;
				}
		case 1: {
			for (int j=0; j<5; j++) {
				matrica[i][j]=niz2[j];
			}
			continue;
				}
		case 2: {
			for (int j=0; j<5; j++) {
				matrica[i][j]=niz3[j];
			}
			continue;
				}
		}
	};


	//i tebi ovde ostaje da sortirash redove matrice svaki za sebe. to ti je ovaj deo ispod
	for (i = 0; i<5; i++) {
		for (int j = 0; j<3; j++) {
			for (int l=j+1; l<3; l++) {
				//standardna rotacija elemenata niza... (nisam mogao da koristim napisanu f-ju)
				//zato shto je matrica matrica :)
				if(JEVECI(matrica[j][i], matrica[l][i])) {
					x=matrica[j][i];
					matrica[j][i] = matrica[l][i];
					matrica[l][i] = x;
				}
			}
		}
	}
	//i evo na kraju mozhesh da uporedish kako izgledaju nizovi medjusobno a kako tvoja matrica..
	for (i=0; i<5; i++) {
		printf("%d %d %d\n",niz1[i], niz2[i], niz3[i]);
	}
	putchar('\n');
	for (i=0; i<5; i++) {
		printf("%d %d %d\n", matrica[0][i], matrica[1][i], matrica[2][i]);
	}
	
	return EXIT_SUCCESS;

}
 
Vrh Dno