Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C] inserimento di 2 vett, ordinamento crescente,fusione dei due vettori

    Salve a tutti ho realizzato un programma che mi permette di inserire due vettori di int, di ordinare i valori in modo crescente e di effettuare la fusione dei valori:
    Es:
    Inserimento:
    vett_1= 8 1 3
    vett_2=9 7 4 3 1

    Ordinamento:
    vett_1= 1 3 8
    vett_2= 1 3 4 7 9

    Fusione:
    vett_3=1 1 3 3 4 7 8 9

    Ecco il codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    void gestione();
    void inserimento(int, int, int *, int *);
    void ordinamento(int, int, int *, int *);
    void merge(int, int, int *, int *, int *);
    void visualizzazione(int, int, int *, int *, int *);
    main()
    {
          gestione();
          system("PAUSE");
          return(0);
    }
    
    void gestione()
    {
         int n,l;
         printf("Quanti valori vuoi inserire nel primo vettore?: ");
         scanf("%d",&n);
         int vett_1[n];
         printf("Quanti valori vuoi inserire nel secondo vettore?: ");
         scanf("%d",&l);
         printf("\n");
         int vett_2[l];
         int vett_3[n+l];
         inserimento(n, l, vett_1, vett_2);
         ordinamento(n, l, vett_1, vett_2);
         merge(n, l, vett_1, vett_2, vett_3);
         visualizzazione(n, l, vett_1, vett_2, vett_3);
    }
    
    void inserimento(int n, int l, int *primo, int *secondo)
    {
        int i,j;
        for(i=0;i<n;i++){
                         printf("%d%c valore del primo vettore: ",i+1,248);
                         scanf("%d",&primo[i]);
                         }
        printf("\n");                 
        for(j=0;j<l;j++){
                         printf("%d%c valore del secondo vettore: ",j+1,248);
                         scanf("%d",&secondo[j]);
                         }
    
    }
    
    void ordinamento(int n, int l, int *primo, int *secondo)
    {
         int z,i,j,k,p_aux,s_aux;
         for(z=0;z<n;z++)
         for(i=0;i<n;i++){
                          if(primo[i]>primo[i+1]){
                                                  p_aux=primo[i];
                                                  primo[i]=primo[i+1];
                                                  primo[i+1]=p_aux;
                                                  }
                          }
         for(k=0;k<l;k++)
         for(j=0;j<l;j++){
                          if(secondo[j]>secondo[j+1]){
                                                      s_aux=secondo[j];
                                                      secondo[j]=secondo[j+1];
                                                      secondo[j+1]=s_aux;
                                                      }
                          }
    
    }
                                                 
    
    void merge(int n, int l, int *primo, int *secondo, int *terzo)
    {
        int i = 0, j = 0, k = 0;
        do {
            if(primo[i]<=secondo[j])
                                terzo[k++] = primo[i++];
            else
                terzo[k++] = secondo[j++];
            }
            while(i<n && j<l);
            if(i<n)
                   for(; i<n; terzo[k++] = primo[i++])
                   ;
            else
                for(; j<l; terzo[k++] = secondo[j++])
                ;
    
    }
    
    void visualizzazione(int n, int l, int *primo, int *secondo, int *terzo)
    {
        int i,j,k;
        printf("\n");
        for(i=0;i<n;i++){
                         printf("%d%c valore del primo vettore: %d\n",i+1,248,primo[i]);
                         }
        printf("\n");                 
        for(j=0;j<l;j++){
                         printf("%d%c valore del secondo vettore: %d\n",j+1,248,secondo[j]);
                         }
        printf("\n");
        for(k=0;k<(l+n);k++){
                             printf("%d%c valore della fusione dei due vettori: %d\n",k+1,248,terzo[k]);
                             }
    }
    Il problema è che capita in base ai numeri che inserisco che quando visualizza l'ordinamento il primo valore del secondo vettore o è 0 o è un numero negativo(mi è capitato ad esempio inserendo 9 come primo elemento del secondo vettore che nell'ordinamento il primo valore ha valore -2 oppure quando inserisco come dimensione del secondo vettore 4 il primo elemento del secondo vettore dopo l'ordinamento ha valore 0).
    Avete qualche idea per aiutarmi a risolvere questo problema? Grazie tante per l'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Sto modificando tutto il programma ma il risultato non cambia...molto spesso in base ai valori che inserisco il primo valore del secondo vettore o è 0 o è un numero negativo...lo stesso vale per il primo elemento del primo vettore...qualcuno ha qualche idea per risolvere il problema? Grazie.
    codice:
    #include <stdio.h>
    void gestione();
    void inserimento(int, int *);
    void ordinamento(int, int *);
    main()
    {
          gestione();
          system("PAUSE");
    }
    
    void gestione()
    {
         int a,b,c;
         printf("Inserisci la lunghezza del primo vettore: ");
         scanf("%d",&a);
         printf("Inserisci la lunghezza del secondo vettore: ");
         scanf("%d",&b);
         printf("\n");
         int vett_1[a];
         int vett_2[b];
         c=a+b;
         int vett_3[c];
         inserimento(a, vett_1);
         inserimento(b, vett_2);
         ordinamento(a, vett_1);
         ordinamento(b, vett_2);
    }
    
    void inserimento(int z, int *vett)
    {
         int i;
         for(i=0;i<z;i++){
                          printf("%d%c elemento del vettore: ",i+1,248);
                          scanf("%d",&vett[i]);
                          }
         printf("\n");
    }
    
    void ordinamento(int z, int *vett)
    {
         int j,i,aux;
         for(j=0;j<z;j++)
         for(i=0;i<z;i++){
                          if(vett[i]>=vett[i+1]){
                                                aux=vett[i];
                                                vett[i]=vett[i+1];
                                                vett[i+1]=aux;
                                                }
                          }
         printf("\nIl vettore adesso %c ordinato in modo crescente: \n",138);
         for(i=0;i<z;i++)
         printf("%d%c elemento del vettore: %d\n",i+1,248,vett[i]);     
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Nessuno mi sa dare qualche aiuto?

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ti dovrebbe dare problemi se non pulisci il buffer con fflush(stdin) o :
    codice:
    while(getchar()!=10)
        ;

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    mettendo j<z-1 e i<z-1 non ha più dato problemi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.