[ nenadnesta @ 14.12.2010. 11:29 ] @
fuzija dva niza celih brojeva koji su uredjeni po neopadajucem redosledu u treci, na isti nacin uredjeni niz....
evo programa

#include <stdio.h>
#define N 100

main () {
int a[N], na, b[N], nb, c[2*N], nc, ia, ib, ic;
while (1) {
printf ("na? "); scanf ("%d", &na);
if (na<0 || na>N) break;
printf ("A ? "); for (ia=0; ia<na; scanf ("%d", &a[ia++]));
if (na == 0) printf ("\n");
printf ("nb? "); scanf ("%d", &nb);
if (nb<0 || nb>N) break;
printf ("B ? "); for (ib=0; ib<nb; scanf ("%d", &b[ib++]));
if (nb == 0) printf ("\n");
for (ia=ib=ic=0; ia<na&&ib<nb; c[ic++] = (a[ia]<b[ib]) ? a[ia++] : b[ib++]);
while (ia < na) c[ic++] = a[ia++];
while (ib < nb) c[ic++] = b[ib++];
nc = ic;
printf ("C = "); for (ic=0; ic<nc; printf ("%d ", c[ic++]));
printf ("\n\n");
}
}

ovaj izraz c[ic++] = (a[ia]<b[ib]) ? a[ia++] : b[ib++]); uporedjuje elemente nizova a i b i u niz c upisuje manju vrednost. sad mene zanima sta se desava kada clanovi niza imaju iste vrednosti ?
zasto se koriste potom ove dve while petlje kada prethodni izraz upisuje elemente u niz c?
[ Mihajlo Cvetanović @ 14.12.2010. 11:43 ] @
Ako su vrednosti iste onda uslov < nije zadovoljen i vraća se element iz niza b. To praktično znači da ako imamo po nekoliko elemenata iste vrednosti u oba niza onda se prvo potroše svi elementi niza b, a zatim svi elementi niza a, a onda se nastavlja normalno sa svim ostalim elementima.

Razlog za dodatne dve while petlje je taj što for petlja radi dok se ne potroše elementi iz jednog niza (onog koji ima manji najveći element). Posle toga je ostalo samo da se iskopira ostatak iz drugog niza, ali pošto se ne zna iz kog, onda kopiramo sve što je preostalo iz oba. U jednom nije preostalo ništa, i jedna while petlja neće ništa uraditi, ali ne znamo koja, pa zato ipak imamo dve petlje.
[ X Files @ 14.12.2010. 11:56 ] @
Baš je lep ovaj C jezik, po staroj "sistemskoj" orjentaciji - što jezgrovitije, to neazumljivije - al je Koooool.

Onako odokativno, ako je jedan niz zadovoljio uslov (ia<na&&ib<nb), recimo tipično ako je ceo jedan niz van granica drugog - petlja ispada, a C niz ostade nenapunjen. Tada je bolje ostatak iskopirati, pa koji god niz ostao nedotaknut, tj nedovršen.

[ nenadnesta @ 15.12.2010. 11:36 ] @
hvala ljudi,
meni je ovo bilo od velike koristi,
odgovori su kratki i jasni,
nadam se da ce jos neko iskoristiti ove primere...
pozz