Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Programma vettori

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    27

    Programma vettori

    Ciao,
    dovrei fare un programma che legge un numero (fino a quando non digito zero) e crea dinamicamente un vettore ordinandolo.Io ho fatto questo ma non è giusto.
    # include <stdio.h>
    # include <stdlib.h>

    int *insert(int *pi, int i, int x)
    { int t,j,temp;
    if (i==0)
    {pi= (int *) malloc (sizeof(int));
    pi[i]=x;}
    else
    {
    pi=(int*)realloc(pi, (i+1) * sizeof(int));
    for(t=i; t>=0;t--)
    for(j=0;j<t;j++)
    {if (pi[j]>pi[j+1])
    {temp=pi[j];
    pi[j] = pi[j+1];
    pi[j+1]=temp;}

    }
    pi[t]=x;
    }
    return pi;

    }
    void stampa(int *pi,int i)
    {int j;
    for(j=0; j<=i;j++)
    printf("%d \n",pi[j]);

    }


    int main ()
    { int x,i;
    int *p=NULL;

    i=0;
    do
    { printf("inserisci il numero (si termina con zero)");
    scanf(" %d", &x);
    if (x!=0)
    {
    p= insert (p,i,x);
    i++;
    }
    } while (x!=0);

    stampa(p, i);
    system("pause");
    return 0;

    }
    spero che qualcuno possa aiutarmi.

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ciao ho guardato un pò il codice e mi pare che sia corretto, hai solo dimenticato che nella funzione di insert() nell'else hai messo:
    codice:
    pi[t]=x;
    mentre secondo me va benissimo se lo metti prima che ordini il vettore:
    codice:
    ...
    else {
           pi=(int*)realloc(pi,(i+1) * sizeof(int));
           pi[i] = x;
           for(t=i; t>=0;t--) {
               for(j=0;j<t;j++) {             
                   if (pi[j]>pi[j+1]){                 
                      temp=pi[j];
                      pi[j] = pi[j+1];
                      pi[j+1]=temp;
                   }
               }
           }
        }
    ...
    e infine un'altra cosa, nella stampa non ciclare fino a i:
    codice:
    j<=i;
    ma cilca solo fino a j < i;
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Non pi[t] ma pi[i] ... devi scrivere nell'else

    pi=(int*)realloc(pi, (i+1) * sizeof(int));

    pi[i]=x;

    ... le due for ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    27
    Grazie

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.