Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Spajanje dva niza u jedan

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Spajanje dva niza u jedan

[ Pregleda: 5357 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FooLControL
Serbia

Član broj: 168531
Poruke: 74
*.metrohive.net.



+8 Profil

icon [Zadatak] Spajanje dva niza u jedan07.07.2008. u 15:36 - pre 192 meseci
Pisem bezveze neki program,koji dva niza(X,Y) treba spoji u jedan (Z) tako sto ce ih nadovezati.Sve sam ja to odradio al' kad sam hteo da odstampam taj niz stalno mi pravi jednu gresku...

Ovako ok ispisuje taj niz (n,m - broj el. niza X,Y)

Code:

for(i=0;i<m+n;i++) printf("%d ",Z[i]);


Ali kad sam hteo da se malo lepse vrsi taj ispis npr. :

Z={X[1],X[2],...Y[1],Y[2],...}

stalno mi zanji clan tog niza umanjuje za jedan

Code:
 
 printf("\n\tZ={ ");
 for(i=0;i<n+m;i++)
     {
      if(i==(n+m-1)) printf("%d }");
      else printf("%d, ",Z[i]);                 
     } 


Pronasao sam foru u tome da ovo "-1" u if petlji utice na to al ne kontam zbog cega...Ako moze neko kratko objasnjenje za ovo.

Hvala
 
Odgovor na temu

POW R TOC H
Dark Side of The Moon

Član broj: 174541
Poruke: 31
*.cpe.vektor.net.



Profil

icon Re: [Zadatak] Spajanje dva niza u jedan07.07.2008. u 15:56 - pre 192 meseci
Pomoglo bi kada bi postavio ceo source...
Ali generalno, za pravljenje treceg niza od dva najlaksa i najefikasnija procedura je ovo :
(ako vec imamo niz1 i niz2, i znamo im duzine)
(takodje podrazumevam da je tip u pitanju char)
Code:

#include <stdio.h>
#include <string.h>
//Ove dve biblioteke su obavezne jer prva sadrzi malloc a druga memcpy.

char *niz3 = malloc(niz1_duzina + niz2_duzina);
char *niz3_ptr = niz3; //trebace nam ovaj pokazivac da pokaze na kraj prvog niza u trecem, posle kopiranja.

memcpy(niz3, niz1, niz1_duzina);

niz3_ptr += niz1_duzina; //(sada ovaj pointer pokazuje na kraj prvog niza u trecem nizu)
memcpyniz3_ptr, niz2, niz2_duzina);
niz3_ptr = NULL; //Vise nam nije potreban :)

//....Sad samo treba da ispises clanove treceg niza, i to je to....

 
Odgovor na temu

FooLControL
Serbia

Član broj: 168531
Poruke: 74
*.metrohive.net.



+8 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan07.07.2008. u 17:41 - pre 192 meseci
Skontao sam ovaj tvoj primer,al sam ja radio kao pocetnicki sa osnovnim forama.Ali meni ne treba to dodavanja nizova nego ispis tog niza.Npr. ako unesem za niz X={1,2,3} i Y={1,2,3} on mi ispisuje Z={1,2,3,1,2,2}...A sa onim prvim kodom u prvom postu ok ispisuje al sa drugim kodom iz prvog posta ima ta greska...E moje pitanje je zbog cega je to tako,ja ne vidim nikakvu nepravilnost.


Code:
#include<stdio.h>
#define MAX_NIZ 99

main()
{
 int n,m,i,X[MAX_NIZ],Y[MAX_NIZ],Z[MAX_NIZ],j;
 
 //Unos niza X
 
 do{
    printf("\n\tUnesite koliko ce elemenata imati niz X:");
    scanf("%d",&n);
   }while(n<1||n>MAX_NIZ);
   
   printf("\n\tUnesite niz X:");
   
   for(i=0;i<n;i++)
    {
     printf("\n\n\tX[%d]=",i+1);
     scanf("%d",&X[i]);               
    }
    
  //Unos niza Y 
    
   do{
    printf("\n\tUnesite koliko ce elemenata imati niz Y:");
    scanf("%d",&m);
   }while(m<1||m>MAX_NIZ);
   
   printf("\n\tUnesite niz Y:");
   
   for(i=0;i<m;i++)
    {
     printf("\n\n\tY[%d]=",i+1);
     scanf("%d",&Y[i]);               
    }
    
    //Formiranje niza Z dodavanjem jednog niza na drugi
 
   for(j=i=0;i<n+m;i++)
    {
     if(i>=n)
      {
       Z[i]=Y[j]; 
       j++;             
      }
     else Z[i]=X[i];
    }
    
    //Stampanje novog niza Z
    
    printf("\n\tZ={ ");
    for(i=0;i<n+m;i++)
     {
      if(i==(n+m-1)) printf("%d }");
      else printf("%d, ",Z[i]);                 
     } 
     
    getch();
   
    
}
 
Odgovor na temu

jankie88
Igor Janošev
Beograd

Član broj: 22935
Poruke: 27
*.dynamic.sbb.rs.



Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 01:42 - pre 192 meseci
Problem je u printf naredbi koja se izvrsava ako je (i == n + m - 1) tačno...

Code:

for(i = 0; i < n + m; i++) {
    if(i == (n + m - 1))
        printf("%d }", Z[i]); /* ovde je bio problem, imas format a nemas promenljivu */
    else
        printf("%d, ", Z[i]);                 
};


Pogledaj rezultat kompajliranja svog originalnog koda, svaki pristojni kompajler bi trebalo da izbaci warning...
All it takes is one bad day to reduce the sanest man alive to lunacy!
That's how far the world is from where I am: Just one bad day...
 
Odgovor na temu

FooLControL
Serbia

Član broj: 168531
Poruke: 74
*.metrohive.net.



+8 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 15:18 - pre 192 meseci
Kako nemam promenljivu, zar promenljiva nije Z[n+m-1] to je zadnji clan niza...Ne razumem te najbolje.
Bas sam probao da ispisem niz koji sam uneo i sve je ok ispalo....


Code:
#include<stdio.h>
#define MAX_NIZ 30
main()
{

      int i,n,X[MAX_NIZ];
      
      for(i=0;i<MAX_NIZ;i++) X[i]=0;
      
      printf("\n\tUnesite koliko ce vas niz imati elemenata:");
      scanf("%d",&n);
      
      printf("\n\tUnesite elemente vaseg niza:\n");
      
      do
      {
       for(i=0;i<n;i++)
             {
              printf("\n\tX[%d]=",i+1);
              scanf("%d",&X[i]);                      
             }      
      }while(n<1||n>MAX_NIZ);
      
      printf("\n\tVas niz izgelda ovako:\n");
      
      printf("\n\t{ ");
      
      for(i=0;i<n;i++) 
      {
       
       if(i==(n-1))printf("%d }",X[i]);
       else printf("%d, ",X[i]);
       
      }

      getch();

}


Kada kompajliram ne izbacuje mi nikakav warning a koristim DevC++ sad dal' je pristojan stvarno ne znam...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 17:15 - pre 192 meseci
Code:

main()

main() po standardu treba da ima povratnu vrednost.
Code:

int main()


Code:

for(i=0;i<MAX_NIZ;i++) X[ i ]=0;

Inicijalizovanje u konkretnom zadatku nije potrebno. Inicijalizacija ce se obaviti unosom, a elementima koji ostanu neinicijalizovani, ionako se ne pristupa. Inace, inicijalizaciju (ako ti nekad bude potrebno) mozes uraditi na jednostavniji nacin:
Code:

int i,n,X[MAX_NIZ]={0}; // <--- u konkretnom primeru
// odnosno
int X[MAX_NIZ]={0}; // <--- samostalno


Code:

printf("\n\tUnesite koliko ce vas niz imati elemenata:");
scanf("%d",&n);
      
printf("\n\tUnesite elemente vaseg niza:\n");
      
do
{
  for(i=0;i<n;i++)
        {
         printf("\n\tX[%d]=",i+1);
         scanf("%d",&X[i]);                      
        }      
}while(n<1||n>MAX_NIZ);

Ovo nije dobro. Pogresio si gde treba staviti ono do-while:
Code:

do
{
   printf("\n\tUnesite koliko ce vas niz imati elemenata:");
   scanf("%d",&n);
} while( n<1 || n>MAX_NIZ );    

printf("\n\tUnesite elemente vaseg niza:\n");
      
for( i=0; i<n; i++ )
{
   printf("\n\tX[%d]=", i+1);
   scanf("%d", &X[i]);                      
}      


Code:

getch();

getch() pripada, ako se ne varam nestandardnoj conio.h biblioteci. Mozda je bolje da ukljucis biblioteku:
Code:

#include <stdlib.h>
// ...
// i program zaustavis sa:
system( "PAUSE" );


Dalje, na osnovu konstatacije sa pocetka da main treba da ima povratnu vrednost:
Code:

return ( EXIT_SUCCESS );
// ... ili
return 0;


Ceo kod, na osnovu onoga sto si sam uradio bi bio:
Code:

#include <stdio.h>
#include <stdlib.h>
#define MAX_NIZ 30
int main()
{
   int i,n,X[MAX_NIZ];

   do
   {
      printf( "\n\tUnesite koliko ce vas niz imati elemenata:" );
      scanf( "%d", &n );
   } while( n<1 || n>MAX_NIZ );

   printf("\n\tUnesite elemente vaseg niza:\n");

   for( i=0; i<n; i++ )
   {
      printf( "\n\tX[%d]=", i+1 );
      scanf( "%d", &X[i] );
   }

   printf( "\n\tVas niz izgelda ovako:\n" );

   printf("\n\t{ ");

   for( i=0; i<n; i++ )
   {
      if( i==(n-1) )
         printf( "%d }", X[i] );
      else
         printf( "%d, " ,X[i] );
   }

   system( "PAUSE" );

   return ( EXIT_SUCCESS );
}
 
Odgovor na temu

FooLControL
Serbia

Član broj: 168531
Poruke: 74
*.metrohive.net.



+8 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 20:37 - pre 192 meseci
Hvala na ovako detaljnom objasnjenju...ono sa do while je slucajna greska taj program sam nabrzaka napisao samo da bih ispis tog programa uporedio sa onim prvim,tj oko stampanja niza...Ja bih te zamolio ako imas zivaca i vremena da vidis prva cetiri posta ,na taj zadatak se odnosila tema....Hvala!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 21:29 - pre 192 meseci
Koliko vidim, zadatak je resen...

Jankie88 ti je napisao da u kodu koji si ranije imao, u jednoj printf() nisi imao drugi argument.

Ako smatras da problem i dalje postoji, postavi ceo kod, nece biti problema da ga resimo.
 
Odgovor na temu

FooLControL
Serbia

Član broj: 168531
Poruke: 74
*.metrohive.net.



+8 Profil

icon Re: [Zadatak] Spajanje dva niza u jedan09.07.2008. u 23:54 - pre 192 meseci
Koji sam ja kralj...sve ok,glupost cista.Hvala svima na pomoci.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Spajanje dva niza u jedan

[ Pregleda: 5357 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.