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

    [C] inserimento vett, ordin cresc,merge e inserimento altri vettori

    Ciao a tutti questa è la continuazione del thread precedente sempre con lo stesso programma solo con un problema diverso:
    Il programma fa inserire i 2 vettori li ordina in modo crescente fa il merge dei due vettori in un terzo vettore..ora il mio problema è quello d far inserire all'utente altri vettori con i quali fare il merge con il merge precedente...però quando il programma chiede vuoi inserire altri vettori? risp con s o S non va avanti nell'esecuzione ma spunta premi un tasto per continuare ed esce...qualche idea per risolvere il problema Grazie tante per l'aiuto.
    la parte in rosso è quella che mi dovrebbe permettere l'inserimento di altri vettori.
    codice:
    #include <stdio.h>
    void gestione();
    void inserimento(int, int *);
    void ordinamento(int, int *);
    void fusione(int, int, int *, int *, int *);
    void visualizzazione(int, int *);
    
    main()
    {
          gestione();
          system("PAUSE");
    }
    
    void gestione()
    {
         int a,b,c,d;
         char risp,invio;
         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 merge[c];
         inserimento(a, vett_1);
         inserimento(b, vett_2);
         ordinamento(a, vett_1);
         ordinamento(b, vett_2);
         fusione(a, b, vett_1, vett_2, merge);
         visualizzazione(c, merge);
         int x;
         do{
            printf("Vuoi inserire un altro vettore?(s/n): ");
            scanf("%c",&risp);
            getchar();
            if(risp=='s'){
                         printf("Inserisci la lunghezza del nuovo vettore: ");
                         scanf("%d",&d);
                         int vett_4[d];
                         for(x=0;x<a;x++){
                                          printf("%d%c elemento del vettore: ",x+1,248);
                                          scanf("%d",&vett_4[x]);
                                          }
                         for(x=0;x<a;x++){
                                          vett_1[x]=vett_4[x];
                                          vett_2[x]=merge[x];
                                          }
                         ordinamento(d, vett_1);
                         fusione(d, c, vett_1, vett_2, merge);
                         visualizzazione(d, merge);
                                            }
            else{
                 printf("Premi invio per uscire");
                 scanf("%c",&invio);
                 }
                 break;
            }
            while(risp=='s');
    }
    
    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-1;j++)
         for(i=0;i<z-1;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]);     
    }
    
    void fusione(int a, int b, int *primo, int *secondo, int *fusione)
    {
         int i,j,k;
         i=0;
         j=0;
         k=0;
         do{
            if(primo[i]<=secondo[j])
                                    fusione[k++]=primo[i++];
            else
                fusione[k++]=secondo[j++];
            }
         while(i<a && j<b);
         if(i<a)
                for(;i<a;fusione[k++]=primo[i++]);
         else
             for(;j<b;fusione[k++]=secondo[j++]);
    }
    
    void visualizzazione(int c, int *fusione)
    {
         printf("\nFusione dei due vettori: \n");
         int k;
         for(k=0;k<c;k++)
         printf("%d%c elemento della fusione dei due vettori: %d\n",k+1,248,fusione[k]);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema può essere sempre quello del buffer di tastiera "sporco" ...

    Mi sembra che tu abbia già incontrato questo tipo di problema (ricordo di averti detto di eliminare quel getchar ...) ... devi pulire il buffer prima dell'input con il ciclo while già mostrato in altre millemila post o con la fflush se lavori con compilatori MS.

    E in ogni caso, per identificare il problema, devi *imparare* a fare un po' di debugging ... fermare l'esecuzione dopo l'input e controllare il contenuto della variabile risp ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Si hai ragione mi avevi detto di mettere while(getchar()!= '\n')
    ma facendo così non cambia nulla...
    codice:
    do{
            printf("Vuoi inserire un altro vettore?(s/n): ");
            scanf("%c",&risp);
            getchar();
            if(risp=='s'){
                         printf("Inserisci la lunghezza del nuovo vettore: ");
                         scanf("%d",&d);
                         int vett_4[d];
                         for(x=0;x<a;x++){
                                          printf("%d%c elemento del vettore: ",x+1,248);
                                          scanf("%d",&vett_4[x]);
                                          }
                         for(x=0;x<a;x++){
                                          vett_1[x]=vett_4[x];
                                          vett_2[x]=merge[x];
                                          }
                         ordinamento(d, vett_1);
                         fusione(d, c, vett_1, vett_2, merge);
                         visualizzazione(d, merge);
                                            }
            else break;
            }
            while(getchar()!= '\n');
    inoltre...cos'è il debugging???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la while non la devi mettere lì ...!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    E dove? non va messo dopo la chiusura della graffa del do?
    do{
    ..
    ..
    ..
    }
    while(...);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Ho risolto in questo modo:
    Il problema adesso è che quando fa la fusione del merge precedente con il nuovo vettore non mi stampa tutti i numeri della fusione..stampa solo i primi numeri e si ferma alla lunghezza del nuovo vettore inserito...penso che ogni volta si deve incrementare il valore della lunghezza del merge...ad esempio il merge precedente aveva lunghezza c (=a+b)
    introducendo il nuovo vettore la lunghezza deve aumentare di d quindi penso una cosa del tipo c=c+d ma provando così non succede niente....qualche idea???
    codice:
    #include <stdio.h>
    void gestione();
    void inserimento(int, int *);
    void ordinamento(int, int *);
    void fusione(int, int, int *, int *, int *);
    void visualizzazione(int, int *);
    
    main()
    {
          gestione();
          system("PAUSE");
    }
    
    void gestione()
    {
         int a,b,c,d,risp;
         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 merge[c];
         inserimento(a, vett_1);
         inserimento(b, vett_2);
         ordinamento(a, vett_1);
         ordinamento(b, vett_2);
         fusione(a, b, vett_1, vett_2, merge);
         visualizzazione(c, merge);
         int x;
         do{
            printf("Premi 1 per inserire un altro vettore 0 per uscire: ");
            scanf("%d",&risp);
            if(risp==1){
                         printf("Inserisci la lunghezza del nuovo vettore: ");
                         scanf("%d",&d);
                         int vett_4[d];
                         
                         for(x=0;x<d;x++){
                                          printf("%d%c elemento del vettore: ",x+1,248);
                                          scanf("%d",&vett_4[x]);
                                          }
                         for(x=0;x<d;x++){
                                          vett_1[x]=vett_4[x];
                                          }
                         for(x=0;x<c;x++){
                                          vett_2[x]=merge[x];
                                          }
                         c=c+d;
                         ordinamento(d, vett_1);
                         fusione(d, c, vett_1, vett_2, merge);
                         visualizzazione(d, merge);
                                            }
            }
            while(risp>0);
    } 
    
    
    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-1;j++)
         for(i=0;i<z-1;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]);     
    }
    
    void fusione(int a, int b, int *primo, int *secondo, int *fusione)
    {
         int i,j,k;
         i=0;
         j=0;
         k=0;
         do{
            if(primo[i]<=secondo[j])
                                    fusione[k++]=primo[i++];
            else
                fusione[k++]=secondo[j++];
            }
         while(i<a && j<b);
         if(i<a)
                for(;i<a;fusione[k++]=primo[i++]);
         else
             for(;j<b;fusione[k++]=secondo[j++]);
    }
    
    void visualizzazione(int c, int *fusione)
    {
         printf("\nFusione dei due vettori: \n");
         int k;
         for(k=0;k<c;k++)
         printf("%d%c elemento della fusione dei due vettori: %d\n",k+1,248,fusione[k]);
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Risolti tutti i problemi. grz lo stesso

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 © 2025 vBulletin Solutions, Inc. All rights reserved.