Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pongo
    Registrato dal
    Dec 2013
    Messaggi
    24

    [C++] Inserimento valore in un array ordinato

    codice:
    #include <iostream>
    
    using namespace std;
    
    int cerca_pos(int v[], int n, int x){
    
        int i;
        i=0;
        while(i<n&&v[i]<=x)
            i++;
        return(i);
    
    }
    
    void crea_spazio(int v[], int n, int pos){
        for(int i=n-1;i>=pos;i--)
            v[i+1]=v[i];
    }
    
    int main()
    {
        int pos;
        const int n=5;
        int vet[n]={0,2,7,8,10};
        int x;
        cout<<"Inizialmente l'array e: " << endl;
        for(int k=0;k<n;k++)
            cout<<vet[k]<<" ";
    
        cout << "Inserisci un numero compreso tra 0 e 10 da inserire nell'array: " << endl;
        cin>> x;
        pos= cerca_pos(vet,n,x);
        crea_spazio(vet,n,pos);
        vet[pos]=x;
        cout<<" L'array dopo l'ordinamento e: " <<endl;
        for(int k=0;k<n+1;k++)
            cout<<vet[k]<<" ";
    
        return 0;
    }
    Non inserisce il valore praticamente eppure sembra tutto ok, trovata la posizione, vet[pos]=x non dovrebbe inserire questo valore x inserito dall'utente nella posizione pos appunto?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Se il vettore è fatto da n elementi non puoi aggiungerne uno tu senza prevederne lo spazio in memoria.

    Nella funzione crea_spazio non crei affatto spazio ma scrivi in memoria oltre le dimensioni del vettore, ovviamente sporcandola.

    Questo problema lo risolvi con l'allocazione dinamica della memoria, avendo cura di eseguire una realloc del vettore prima di aggiungere il nuovo elemento.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di pongo
    Registrato dal
    Dec 2013
    Messaggi
    24
    E senza allocazione dinamica non si può fare? Lo chiedo perché questo esempio di algoritmo è spiegato prima dell'argomento dell'allocazione dinamica della memoria...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non potrai superare il numero di elementi presenti nell'array. Se ne hai al massimo 5 non potrai aggiungere il sesto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di pongo
    Registrato dal
    Dec 2013
    Messaggi
    24
    Ok grazie per la risposta, ci ritornerò su quando avrò studiato quest'argomento dell'allocazione dinamica della memoria.

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.