Šta je novo?

Mesto prvog i poslednjeg pojavljivanja broja u nizu

Pharos

Slavan
Učlanjen(a)
28.03.2005
Poruke
349
Poena
319
Zadatak glasi ovako:
Naći mestop prvog i poslednjeg pojavljivanja datog broja u uređenom nizu brojeva.
Moj kod ide ovako:
Kod:
#include <stdio.h>
#include <stdlib.h>
main(){
	int *a,i,j,n,b,x;
	while(1){
		int p1=-1,p2=-1;
		/* Odredivanje duzine niza */
		printf("Unesite duzinu niza: ");scanf("%d",&n);
		if(n<=0)break;
		/* Stvaranje niza */
		a=malloc(n*sizeof(int));
		printf("\nA? ");for(i=0;i<n;scanf("%d",&a[i++]));
		/* Sortiranje niza */
		for (i=0;i<n-1;i++)
			for(j=i+1;j<n;j++)
				if(a[i]>a[j]){b=a[i];a[i]=a[j];a[j]=b;}
		/* Unosnje trazenog broja */
		printf("\nUnesite broj: ");scanf("%d",&x);
		/* Trazenje prvog pojavljivanja u nizu */
		for(j=0;j<n;j++)
			if(a[j]==x){
				p1=j;break;
			}
		/* Trazenje poslednjeg pojavljivanja u nizu */
		for(i=n;i>0;i--)
			if(a[i]==x){
				p2=i;
				break;
			}
		/* Ispisivanje rezultata */
		printf("\n\n");
		if(p1!=-1)
			printf("Prvo pojavljivanje na mestu br. %d\n",p1);
		if(p2!=-1)
			printf("Poslednje pojavljivanje na mestu br. %d\n",p2);
		if(p1==-1)
			printf("Broj se ne pojavljuje u nizu\n");
		printf("\n\n");
		free(a);
	}
}
Šta mi ovde kod koda ne valja?
Konkretno mislim na nalaženje prvog i poslednjeg broja u nizu.
Ne ispisuje mi tačne vrednosti.
Kad se traženi broj pojavljuje prvi i poslednji put u nizu, onda su vrednosti ok. Kad se nalazi na drugim mestima onda ne ispisuje tačne vrednosti.
Nešto nisam otkucao kako valja.
Hvala
 
Poslednja izmena:
Hmm, ovako nisam mogao naci greshku, pa sam pustio program i kod mene radi sasvim ok, bez obzira na mesto na kome se broj nalazi. Eventualno dodatak samo prilikom ispisa mesta da uradi ++ na broj (da je prvo mesto 1 a ne 0).

cyah
LePiaf
 
@Voodoo_NBGD
Učitavanje niza je 100% dobro i tu nema spora.
Mislim, sve su ovo elementarne stvari, jedino što ne mogu da vidim grešku u traženju pozicije.
Probao sam i to tvoje, opet isto.
Evo primer.
Kod:
Unesite duzinu clanova niza: 10

A? 2 3 4 6 5 9 6 4 5 3

Unesite broj: 6


Prvo pojavljivanje na mestu br. 7
Poslednje pojavljivanje na mestu br. 8

Da li je moguće da samo kod mene ne radi? :D
Ne vidim nigde grešku.
 
@LePiaf
Aj pusti ovaj primer što sam ti dao.
Reci mi dal ti izbacuje prave vrednosti.
Ono za 0 i 1 namerno stoji onako.
Inače nije problem da se kod brojača ubaci da ide od 1, a ne od 0.
pOz
 
Prvi put kad sam probao, nije radilo...
Sad kad probam, radi... ???
 
Ne može jednom da radi,a jednom da ne radi :D
Ako izbacuje vrednosti 7 i 8 znači da ne radi.
To je pogrešno.
Treba da izbaci 3 i 6
 
Ako sam te dobro razumeo tebi treba ovako nesto:

2 3 4 4 4 5 7 7 9

Ako se trazi pojavljivanje broja 4 tebi program treba da ispise za prvo 2 i za poslednje 4? To se desava ako se uzme, kao u tvom slucaju, da je broj 2 na 0-tom mestu.

Ako je tako onda mislim da ti je problem ovde:

/* Trazenje poslednjeg pojavljivanja u nizu */
for(i=n;i>0;i--) << treba (i=n-1;i>=0;i--) ili i=0.
if(a==x){
p2=i;
break;
}

Ne treba ti ispitivanje (p2!=-1), jer je dovoljno samo jednom ispitati za p1, a odmah stampas oba pojavljivanja ako ima prvo (onda mora da ima i poslednje, koje moze biti isto ili razlicito od prvog).

Probaj pa javi sta si uradio.

EDIT: Sad vidim da sam pogresno razumeo :) Dok sam odgovarao stiglo 6 odgovora :D
Uglavnom, probaj da promenis ono sto sam rekao.
Nije mi samo jasno kako primenjujes trazenje, a prvo si sortirao niz??
 
Poslednja izmena:
Mislim da je problem u tome sto sortiras niz. Dakle, ti kad sortiras niz dobijes sledece vrednosti:

2 3 3 4 4 5 5 6 6 9

Sada ti je takav raspored u nizu i zato ti dobijas da su ti pozicije 7 i 8.
Znaci, ili trazi u nesortiranom nizu kao sto je onaj koji je unet, pa ces dobiti 3 i 6, ili trazi u sortiranom i dobices vrednosti 7 i 8.

Pozdrav.
 
Ma je istripovao, nisam ispisivao sortiran niz.
Tek sad vidim u čemu je caka. Program radi, samo što sam ga ja pogrešno gledao :D
Aj da ne brišem post, možda nekom zatreba.
pOz
 
o svashta :) malo vam je bagova koji vetj postoje nego ih pravite tamo gde ih nema :) hihihihi. program radi ok :) mission accomplished.

cyah
LePiaf
 
Samo jedna mala sitnica:

Kod:
for(i=n;i>0;i--)
 if(a[i]==x){
	p2=i;
	break;
  }

a[n] nije poslednji član niza. a[n] se nalazi u memoriji iza poslednjeg člana niza i ko zna koja vrednost se nalazi na toj mem. lokaciji. a[n-1] je poslednji član niza i u for petlji bi trebalo da stoji i=n-1;
 
Jeste da ovo nema veze sa temom, ali nisam mogao da ne primetim Laslov nacin rada... si na VETS-u?
 
Nazad
Vrh Dno