Visualizzazione limitata. Insertion sort

di il
8 risposte

Visualizzazione limitata. Insertion sort

Salve a tutti gli Informatici!Prima discussione che apro.
Non so se dovrei presentarmi nella apposita sezione, non l'ho trovata(se esiste).Se esiste qualcuno potrebbe fornirmi il link?

Ora passo al problema:

Uso code::blocks per esercitarmi sul linguaggio C.

Ho fatto un programmino che dato un n casuale e un numero n di numeri casuali (non meno di 50 numeri e non più di 999 numeri)li ordina con insertion sort.Il problema è che vengono stampati uno sotto l'altro e se tipo i numeri sono 500 alla fine del processo riesco a vederne solo una parte cioé scorrendo la finestra in su e in giu ne visualizzo solo una parte.Questo accade in generale quando il programma dovrebbe stampare "tanta roba" sia in orizzontale o in verticale alla fine il risultato è deludente come risolvere?




grazie

/* Programma d'esempio per generare numeri pseudo-casuali in C */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE (10000)
void main() {

  //double x;
  int n,m,limitesuperiore,limiteinferiore;
  int array[MAXSIZE];
  int c,d,t;
  int elementocasuale;
  elementocasuale=0;
  /* setta casualmente l'origine della sequenza prendendola dal timer */
  srand(time(NULL));
c=0;
int avanti;
avanti=0;

  /* per avere un intero casuale fra 50 e 9999 */
   limitesuperiore=9999;
  limiteinferiore=50;
  //m =   rand ()% 10;
n=rand() % (limitesuperiore - limiteinferiore) + limiteinferiore;
  printf("dimensione casuale dell'array scelta: %d ", n);
printf("\n\npremi 0 per iniziare il riempimento casuale di elementi casuali,\nche verranno stampati a video.\n\n ");
scanf("%d",&avanti);
  //riempimento array

for (c = 0; c < n; c++) {
    elementocasuale=rand() % (limitesuperiore - limiteinferiore) + limiteinferiore;
    array[c]=elementocasuale;
    printf("%d\n",elementocasuale);
  }
// ORDINAMENTO
//qui inizia l insercion sort

 for (c = 1 ; c <= n - 1; c++) {
    d = c;

    while ( d > 0 && array[d] < array[d-1]) {
      t          = array[d];
      array[d]   = array[d-1];
      array[d-1] = t;

      d--;
    }
  }// qui finisce l'insercion sort

  printf("\n\npremi 0 per iniziare l'ordinamento con insercion sort.\n\n ");
scanf("%d",&avanti);

  for (c = 0; c <= n - 1; c++) {
    printf("%d\n", array[c]);
  }

}

8 Risposte

  • Re: Visualizzazione limitata. Insertion sort

    Rok ha scritto:


    ... alla fine il risultato è deludente come risolvere?
    Basta scrivere l'output su file.
  • Re: Visualizzazione limitata. Insertion sort

    for (c = 0; c <= n - 1; c++) {
        printf("%d\n", array[c]);
    }
    è proprio lo "\n" che fa andare da capo. metti solamente "%d " senza lo "\n" cosi te li mette tutti in orizzontale nella finestra del cmd e va a capo a fine riga da solo
  • Re: Visualizzazione limitata. Insertion sort

    BENISSIMO!molte grazie!funziona!
    ma per quale motivo tecnico con lo \newline avevo una visualizzazione limitata?
    mi interessa saperlo perché se ad esempio voglio oltre all'elemento ordinato anche la sua posizione ad esempio dati
    7
    5
    92
    78

    \insertion sort\

    7 -> elemento 1
    5 -> elemento 2
    78 -> elemento 3
    92 -> elemento 4
    *
    *
    *
    x->elemento n

    sempre uno sotto all altro
  • Re: Visualizzazione limitata. Insertion sort

    Includi le informazioni che vuoi nella printf
  • Re: Visualizzazione limitata. Insertion sort

    oregon ha scritto:


    Includi le informazioni che vuoi nella printf
    buona idea che ho anche implementato però come mi aspettavo viene tutto disordinato e non vengono nemmeno visualizzati tutti.Forse come dicevano sopra dovrei provare la stampa su file, che non ho mai fatto.
    Allegati:
    17847_3472dd75a9460cf3b02e5309231b2dc2.png
    17847_3472dd75a9460cf3b02e5309231b2dc2.png
  • Re: Visualizzazione limitata. Insertion sort

    Probabilmente manca un /n nella printf ... Faccela vedere ...
  • Re: Visualizzazione limitata. Insertion sort

    Puoi mettere anche lo "/t" e ogni 3 stampe metti lo "/n" cosi te li stampa incolonnati

    Inviato dal mio GT-I9100 utilizzando Tapatalk
  • Re: Visualizzazione limitata. Insertion sort

    DeSa ha scritto:


    Puoi mettere anche lo "/t" e ogni 3 stampe metti lo "/n" cosi te li stampa incolonnati

    Inviato dal mio GT-I9100 utilizzando Tapatalk
    grazie per il suggerimento DeSa, molto utile non conoscevo la \t.
    ho implementato anche il massimo dell array tramite una funzione.
    ecco il nuovo codice
    /* Programma d'esempio per generare numeri pseudo-casuali in C */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define MAXSIZE (10000)
    int *maxarray(int *array,int);
    void main() {
    
      //double x;
      int n,m,limitesuperiore,limiteinferiore;
      int array[MAXSIZE];
      int c,d,t;
      int elementocasuale;
      elementocasuale=0;
      int massimo;
      massimo=NULL;
      /* setta casualmente l'origine della sequenza prendendola dal timer */
      srand(time(NULL));
    c=0;
    int avanti;
    avanti=0;
    
      /* per avere un intero casuale fra 50 e 9999 */
       limitesuperiore=9999;
      limiteinferiore=50;
      //m =   rand ()% 10;
    n=rand() % (limitesuperiore - limiteinferiore) + limiteinferiore;
      printf("dimensione casuale dell'array scelta: %d ", n);
    printf("\n\npremi 0 per iniziare il riempimento casuale di elementi casuali,\nche verranno stampati a video.\n\n ");
    scanf("%d",&avanti);
      //riempimento array
      int zi;
      zi=1;
      int yi;
    
    for (c = 0; c < n; c++) {
        elementocasuale=rand() % (limitesuperiore - limiteinferiore) + limiteinferiore;
        array[c]=elementocasuale;
        printf("%d ",elementocasuale);
      }
    
     /* massimo=maxarray(&array,n);
    printf("\n il massimo e' %d ",massimo); */
    // ORDINAMENTO
    //qui inizia l insercion sort
    
     for (c = 1 ; c <= n - 1; c++) {
        d = c;
    
        while ( d > 0 && array[d] < array[d-1]) {
          t          = array[d];
          array[d]   = array[d-1];
          array[d-1] = t;
    
          d--;
        }
      }// qui finisce l'insercion sort
    
      printf("\n\npremi 0 per iniziare l'ordinamento con insercion sort.\n\n ");
    scanf("%d",&avanti);
    massimo=maxarray(&array,n);
    int accapo=0;
    
      // STAMPA L' ARRAY ORDINATO
    
      for (c = 0; c <= n - 1; c++) {
    
        if(array[c]!=massimo){// senza l if non stampa l ultimo elemento
        if(accapo==3){printf("\n");
        accapo=0;}// fa andare a capo ogni 3 interazioni
        accapo++;
        printf("%d\t elemento numero: %d valore: ", array[c], zi);
        }
        else{
           printf("%d",massimo);
    
        }
        zi++;
        accapo++;
      }
      printf("\n   \n                    LISTA TERMINATA!!\n ");
    massimo=maxarray(&array,n);
    printf("\n il massimo e' %d \n",massimo);
    }
    
    
    
    
    
    int *maxarray(int *array, int dim){
    int i;
    int max;
    max=-1;
    for(i=0;i<dim;i++){
        if (array[i]>max){
        max=array[i];}
    }
    
    return max;
    
    }
    
    

    Allegati:
    17847_1ae555e476755201bea2bc2c3b1a447e.png
    17847_1ae555e476755201bea2bc2c3b1a447e.png
Devi accedere o registrarti per scrivere nel forum
8 risposte