inserimento ordinato di un elemento in un array ordinato

flix77

Nuovo Utente
7 Mar 2017
1
0
1
59
buongiorno,
sono neofita di programmazione e mi sono avvicinato al c++ da pochi mesi.
uso eclipse neon.2 release 4.6.2 (su mac)
ho provato ad inserire il codice seguente su compilatori online e funziona
su xcode mi restituisce thread 1 signal SIGABRT
su eclipse funziona solo se la dimensione dell'array è > 3.
non riesco a capirne la ragione.
grazie per l'attenzione.

Codice:
#include <iostream>
using namespace std;

// inserimento ordinato di un elemento in un array ordinato:

const int limite = 10;

void ins(int A[], int dim, int num) {
    int new_dim = dim-1;
    while(new_dim >=0 && A[new_dim] > num) {
        A[new_dim + 1]=A[new_dim];
        new_dim--;
    }
    A[new_dim+1]=num;
    cout << "numero di indice attribuito al numero inserito: [";
    cout << new_dim+1 << "]" << endl;
    cout << "vettore vect[] dopo inserimento del numero " << num << ": ";
    for(int i=0; i<dim+1; i++)
        cout << A[i] << " ";
    cout << endl;
}
int main() {
    int vect[]={2,3,106};    // non funziona correttamente per size < 4 ------> perchè ??????????????????????????
    int size=sizeof(vect)/sizeof(vect[0]);
    if(size+1<limite) {
    cout << "dimensione vettore prima dell'inserimento: " << size << endl;
    cout << "vettore vect[] prima dell' inserimento: ";
    for(int i=0; i<size; i++)
        cout << vect[i] << " ";
    cout << endl;
    int numero_da_inserire = 21;
    cout << "numero da inserire: " << numero_da_inserire << endl;
    ins(vect, size, numero_da_inserire);
    cout << "verifica in main del risultato: ";
    for(int i=0; i<size+1; i++)
        cout << vect[i] << " ";
    cout << endl;
    int vect2[size+1];
    for(int i=0; i<size+1; i++)
            vect2[i]=vect[i];
    cout << "stampo vect2 (copiato da vect): ";
    for(int i=0; i<size+1; i++)
        cout << vect2[i] << " ";
    cout << endl;
    int dimx = sizeof(vect2)/sizeof(vect[0]);
    cout << "dimensione vect2: " << dimx;
    }
    else cout << "out of range." << endl;
    return 0;
}