Innominato00
Nuovo Utente
- Messaggi
- 12
- Reazioni
- 5
- Punteggio
- 23
Ciao, stavo svolgendo un esercizio assegnatomi dal professore, dove in pratica devo ordinare un array tramite un altro array di puntatori in modo che il contenuto degli elementi del primo array non cambi, ma cambi l'indirizzo a cui puntano gli elementi dell'array di puntatori. Vi lascio qui sotto il codice, la cosa che non riesco a risolvere si trova alla fine del main, dopo la funzione sort_array gli elementi dell'array ordinato vengono stampati in maniera non corretta. Grazie in anticipo.
C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
///----- Function Prototypes -----
void set_array(int *ptr_first, int *ptr_last, int N);
void print_array(int *ptr_first, int *ptr_last, int col);
void link_array(int A[], int *K[], int N);
void sort_array(int *K[], int N);
///----- Main Function -----
int main()
{
srand(time(NULL));
int N, M;
cout << "Inserire la dimensione dell'array: ";
cin >> N;
// Creazione di un Array in modo dinamico
// La dimensione è definita in fase di esecuzione
int *A = new int[N];
cout << endl << endl;
set_array(A, &A[N - 1], N);
print_array(A, &A[N - 1], N);
int *K[N];
link_array(A, K, N);
cout << endl << endl;
// Ordinamento dell'array K senza
// apportare modifiche sull'array a cui punta
sort_array(K, N);
// Stampa dell'array K
print_array(K[0], K[N - 1], N);
}
///----- Function Body -----
// Funzione per settare un array (di qualsiasi dimensione)
void set_array(int *ptr_first, int *ptr_last, int N)
{
for(int *ptr = ptr_first; ptr <= ptr_last; ptr++)
*ptr = rand()%(2*N + 1) - N;
}
// Funzione per stampare un array (bi/monodimensionale)
void print_array(int *ptr_first, int *ptr_last, int col)
{
// col rappresenta il numero di colonne
// In caso l'array sia monodimensionale
// col è la dimensione dell'array
for(int *ptr = ptr_first, counter = 1; ptr <= ptr_last; ptr++, counter++)
{
cout << setw(5) << *ptr;
// Va a capo se è una matrice
if(counter%col == 0)
cout << endl;
}
}
// Funzione per fare puntare gli elementi dell'array K a quello dell'array A
void link_array(int A[], int *K[], int N)
{
// L'array K contiene gli indirizzi
// Degli elementi dell'array A
for(int i = 0; i < N; i++)
K[i] = &A[i];
}
// Funzione per ordinare un array monodimensionale
void sort_array(int *K[], int N)
{
for(int i = 0; i < N - 1; i++)
for(int j = i + 1; j <= N; j++)
if(*K[i] > *K[j])
swap(K[i], K[j]);
}