2016-04-26 5 views
0

Ich brauche, dass vector_total keine wiederholte Nummer haben.Ich möchte, dass vector_total keine wiederholte Nummer haben

Funktion für den Eintrag vector1 und vector2, die in main() deklariert sind.

void entrada_vectors(int vector1[], int vector2[], int vector_total[], int *n, int *m) 
{  
    int i=0, j=0; 

    /*Entrarem els nombres del vector 1 primer */ 

    for (i=0; i<*n; i++) 
    { 
      vector_total[i]=vector1[i]; 
    } 

    /*Entrarem els nombres del vector 2 després */ 

    for (i=*n; i<*n+*m; i++) 
    { 
     if (j<*m) 
     { 
     vector_total[i]=vector2[j]; 
     j++; 
     } 
    } 
} 

Funktion 2. Dies ist für Bestellnummern in vector_total.

void ordena(int vector_total[], int *n, int *m) 
{ 
    int i=0, j=0; 
    int aux=0; 

for (i=0; i<*n+*m-1; i++) 
{ 
    for (j=0; j<*n+*m-1; j++) 
    { 
     if (vector_total[j]>vector_total[j+1]) 
     { 
      aux=vector_total[j]; 
      vector_total[j]=vector_total[j+1]; 
      vector_total[j+1]=aux; 
      aux=0; 
     } 
    } 
} 
} 

Funktion 3. Drucken vector_total

void mostra(int vector_total[], int *n, int *m) 
{ int i; 

    for (i=0; i<*n+*m; i++) 
    { 
     printf ("Pos %d del vector: %d\n", i, vector_total[i]); 
    } 
} 

Function 4. sind hier das Problem !! Diese Funktion dient zum Reinigen meines vector_total und zum Löschen der wiederholten Zahlen.

void limpiar_repetidos(int vector_total[], int *n, int *m) 
{ 
    int x=0, i=0, j=0; 

     for (i=0; i<*n+*m-1; i++) 
     { 
      for (j=0; j<*n+*m-1; j++) 
      { 
       if (vector_total[j]==vector_total[j+1]) 
       { 
         x=j+1; 
         for (i=*n+*m; i>x; i--) 
         { 
          vector_total[i-1]=vector_total[i]; 

         } 
       } 
      } 
     } 
} 

Und hier ist meine Hauptsache. Und meine Deklarationsvariablen:

int vector1 [] = {7,1,5,3,4,2};

int vector2 [] = {3,7,3,0,9,10};

int n = Größevon (Vektor1)/Größevon (Vektor1 [0]);

int m = Größevon (Vektor2)/Größevon (Vektor2 [0]);

int vector_total [n + m];

main() 

{ entrada_vectors (vector1, vector2, vector_total, & n, & m);

ordena(vector_total, &n, &m); 

mostra(vector_total, &n, &m); 

limpiar_repetidos(vector_total, &n, &m); 
printf ("==================\n"); 

mostra(vector_total, &n, &m); 

zurück 0; }

Danke allen! :)

Antwort

1

1) Wenn Funktion nur mit einem vector_total behandelt, ist die Länge des vector_total besser, um ein Argument zu übergeben. Sie müssen den Zeiger auch nicht übergeben, wenn er sich nicht ändert.

2) Funktion benötigt eine neue Länge, nachdem das Element entfernt wurde. Auch das Löschen von benachbarten gleichen Elementen, die so sein können.

int limpiar_repetidos(int vector_total[], int len){//int *n, int *m --> int len 
    int i, size, new_size; 

    size = len; 
    for(i = new_size = 1; i < size; ++i){ 
     if(vector_total[new_size-1] != vector_total[i]) 
      vector_total[new_size++] = vector_total[i]; 
    } 
    return new_size; 
} 

Anwendungsbeispiel

mostra(vector_total, m + n); 

int l = limpiar_repetidos(vector_total, n + m); 

mostra(vector_total, l); 
+0

Dank Kerl! Es klappt! –

Verwandte Themen