Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 4.299 pregleda

Najnovija ↓

problem sa nizovom u C-u 21.05.2006. u 12:33 · pre 249 meseci #1
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...
Potpis
SAFF
Alles ist in ordnung...
http://www.esad.tk
Re: problem sa nizovom u C-u 21.05.2006. u 13:36 · pre 249 meseci #2
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.
Re: problem sa nizovom u C-u 21.05.2006. u 15:04 · pre 249 meseci #3
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]);
   }
Potpis
SAFF
Alles ist in ordnung...
http://www.esad.tk
Re: problem sa nizovom u C-u 21.05.2006. u 16:00 · pre 249 meseci #4
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.
Potpis
With no lovin' in our souls and no money in our coats you can't say we're satisfied
Re: problem sa nizovom u C-u 22.05.2006. u 00:49 · pre 249 meseci #5
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}
Potpis
SAFF
Alles ist in ordnung...
http://www.esad.tk
Re: problem sa nizovom u C-u 22.05.2006. u 15:32 · pre 249 meseci #6
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
 // ...
Potpis
Ipak se ++uje.
Re: problem sa nizovom u C-u 22.05.2006. u 23:40 · pre 249 meseci
izmenjeno 1 put, poslednji put stargazer 22.05.2006. u 23:41
  1. stargazer22.05.2006. u 23:41zapis iz teksta poruke
#7
@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?
Potpis
With no lovin' in our souls and no money in our coats you can't say we're satisfied
Re: problem sa nizovom u C-u 23.05.2006. u 00:59 · pre 249 meseci #8
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]);
       }
Potpis
SAFF
Alles ist in ordnung...
http://www.esad.tk
Re: problem sa nizovom u C-u 23.05.2006. u 08:29 · pre 249 meseci #9
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} ?
Potpis
Ipak se ++uje.
Re: problem sa nizovom u C-u 23.05.2006. u 08:35 · pre 249 meseci #10
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
Potpis
http://www.menjamauto.com/
Re: problem sa nizovom u C-u 23.05.2006. u 23:50 · pre 249 meseci #11
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
Potpis
With no lovin' in our souls and no money in our coats you can't say we're satisfied
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme