|
[ SAFF @ 21.05.2006. 11:33 ] @
| problem sa nizovima u C-u
Kako da posle upisana dva niza A i B, kreiram niz C
sledeceg oblika C:{a1,b1,a2,b2,a3,b3 i ukoliko ima vise elemenata u nizu A
nastavlja se niz C: u sledecem obliku C:{a1,b1,a2,b2,a3,b3,a4,b1,a5,b2... |
[ X Files @ 21.05.2006. 12:36 ] @
Prvo moras reci da li je uvek duzina niza A >= B...
Ako je tako kao sto si postavio u zadatku onda mozda moze ovako /NETESTIRANO/
Code:
// obezbedi dvostruku duzinu nizu C, t.j. C=2*A
int c[BROJ_ELEMENATA_NIZA_A*2];
// provera za svaki slucaj da li je A>=B
if ( BROJ_ELEMENATA_NIZA_A >= BROJ_ELEMENATA_NIZA_B )
{
int i, br=0;
// "i" je trenutni index u oba niza A i B, "br" je index u novom nizu C
for ( int i=0; i < BROJ_ELEMENATA_NIZA_A; i++ )
{
c[ br ] = a[ i % BROJ_ELEMENATA_NIZA_A ];
c[ br+1 ] = b[ i % BROJ_ELEMENATA_NIZA_B ];
br+=2;
}
}
Probaj, nisam siguran da nisam nesto prevideo, ali to je to... Uglavnom, modul (%)
ti resava da se krene uzimanje brojeva ispocetka.
[ SAFF @ 21.05.2006. 14:04 ] @
Ja sam to skolski pokusao resiti ovako, ali nesto ne stima u cemu je problem nebitno je koliki je niz ako ako je veci on se ponavlja ako je iti ide paralelno sa b pr u nizu A su brojevi:{1,3,5,7,9} a u nizu B:{2,4,6,8} onda bi niz c izgledao ovako :{1,2,3,4,5,6,7,8,9}, nadam se da sam bio jasan!
Code:
for (i=0;i<n;i++)
{
C[i]=A[i%n];
C[i+1]=B[i%m];
i+=2;
for(i=0;i<n;i++)
printf("%d",C[i]);
}
[ stargazer @ 21.05.2006. 15:00 ] @
Iz postavke zadatka u tvom prvom postu, iz nizova :
A={1,3,5,7,9}
B={2,4,6,8}
treba da se dobije :
C={1,2,3,4,5,6,7,8,9,2},
a ne :
C={1,2,3,4,5,6,7,8,9}.
U svakom slučaju ovo bi trebalo da ti reši taj problem, pod pretpostavkom da je uvek n >= m:
Code:
for (int i=0; i<n; i++){
C[2*i] = A[i%n];
C[2*i+1] = B[i%m];
}
gde su n i m dužine nizova A i B, redom.
[ SAFF @ 21.05.2006. 23:49 ] @
Uredu je ovo: ostaje problem u sledecem "ako je niz B manji od niza A, upisu se elementi iz niza A u niz C i ne vrsi dalji upis ostalih elemenata niza B u niz C"
josh jednom primer:
A niz {1,3,5,7,9,11,13,15,17,19,21} nebitna duzina nizova
B niz {2,4,6,8} nebitna duzina nizova
novoformirani C niz {1,2,3,4,5,6,7,8,9,2,11,4,13,6,15,8,17,2,19,4,21}
[ Mali Misha @ 22.05.2006. 14:32 ] @
Hmm... a ima li smisla raditi i%n ako je u stvari i uvek manje od n? Evo i kako bi stvari izgledale bez %.
Citat: ako je niz B manji od niza A, upisu se elementi iz niza A u niz C i ne vrsi dalji upis ostalih elemenata niza B u niz C Code: // ...
for(i=0,j=0;i<la;i++)
{
c[j++] = a[i];
if(i<lb) c[j++] = b[i];
}
// ovde je j duzina c
// ...
Citat: josh jednom primer:
A niz {1,3,5,7,9,11,13,15,17,19,21} nebitna duzina nizova
B niz {2,4,6,8} nebitna duzina nizova
novoformirani C niz {1,2,3,4,5,6,7,8,9,2,11,4,13,6,15,8,17,2,19,4,21} Code: // ...
for(i=0,j=0,k=0;i<la;)
{
c[j++] = a[i++];
if(i!=la) c[j++] = b[k++];
if(k==lb) k=0;
}
// ovde je j duzina c
// ...
[ stargazer @ 22.05.2006. 22:40 ] @
@Mali Misha : Ne sporim ovaj kod koji si ti dao, samo, ja sam se u onom koji sam ja dao, vodio onim koji je on dao
Citat:
Uredu je ovo: ostaje problem u sledecem "ako je niz B manji od niza A, upisu se elementi iz niza A u niz C i ne vrsi dalji upis ostalih elemenata niza B u niz C"
josh jednom primer:
A niz {1,3,5,7,9,11,13,15,17,19,21} nebitna duzina nizova
B niz {2,4,6,8} nebitna duzina nizova
novoformirani C niz {1,2,3,4,5,6,7,8,9,2,11,4,13,6,15,8,17,2,19,4,21}
Nije mi najjasnije šta si hteo ovime da kažeš.
Formulacija zadatka iz tvog prvog posta je :
Citat:
...
sledeceg oblika C:{a1,b1,a2,b2,a3,b3 i ukoliko ima vise elemenata u nizu A
nastavlja se niz C: u sledecem obliku C:{a1,b1,a2,b2,a3,b3,a4,b1,a5,b2...
Dakle, prema formulaciji zadatka, upisivanje niza B kreće ispočetka, a upisivanje niza A se nastavlja, za m>n, tj. :
Code:
a1 ~ b1
a2 ~ b2
a3 ~ b3
// pa onda, ako je već n > m
a4 ~ b1
a5 ~ b2
...
Da li sam pogrešno razumeo zadatak ili možda kod koji sam dao ne vrši posao?
[Ovu poruku je menjao stargazer dana 22.05.2006. u 23:41 GMT+1]
[ SAFF @ 22.05.2006. 23:59 ] @
Dobro si me razumeo! :]
Ja sam pravio sledece i dobijam uvek za rezultat nesto slicno ali ne i potpuno tacno:] gde gresim....
Code:
if(n>m){
for(i=0;i<n;i++)
{
C[2*i]=A[i%n];
C[2*i+1]=B[i%m];
}
for(i=0;i<n;i++)
printf("%d",C[i]);
}
else {
for(i=0;i<m;i++)
{
C[2*i]=A[i%n];
C[2*i+1]=B[i%m];
}
for(i=0;i<m;i++)
printf("%d",C[i]);
}
[ Mali Misha @ 23.05.2006. 07:29 ] @
Jedino u proceni duzine izlaznog niza. U Prvom slucaju bi bila 2*n a u drugom 2*m.
Znaci izlaz za
{1,3,5,7,9,11,13,15,17,19,21}
{2,4,6,8}
bi bio u stvari {1,2,3,4,5,6,7,8,9,2,11,4,13,6,15,8,17,2,19,4,21,6} ?
[ milanvla @ 23.05.2006. 07:35 ] @
zasto ne uzmes pokazivace?
while (*a && *b) { //ici ce do kraja jednog niza, kad stane ostali su samo elementi drugog
*c = *a;
c++;
*c = *b;
c++;
a++;
b++;
}
while (*a ++) { //ako je ostao samo niz a
*c = *a;
c++;
}
while (*b ++) { //ako je ostao samo niz b
*c = *b;
c++;
}
ovo nije provereno onako iz glave sam ispisao jer nemam kompajelr pri ruci ali trebalo bi da radi uz male popravke
[ stargazer @ 23.05.2006. 22:50 ] @
E, evo kod koji sam kompajlirao i radi prema zahtevima zadatka.
Code:
#include <stdio.h>
int main(){
const int A[] = {1,3,5,7,9,11};
const int B[] = {2,4,6,8,10};
int C[12];
for (int i=0; i<6; i++){
C[2*i] = A[i%6];
C[2*i+1] = B[i%5];
}
for (int i=0; i<12; i++){
printf("%d ", C[i]);
}
getchar();
return 0;
}
Pozdrav
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|