RISOLTO Problema Puntatori [C++]

Stato
Discussione chiusa ad ulteriori risposte.

Innominato00

Nuovo Utente
12
5
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]);
}
 

Andretti60

Utente Èlite
4,696
3,277
Non puoi usare il metodo print_array() per stampare sia il vettore originale (un vettore di interi) che il vettore ordinato (un vettore di puntatori)
Ti occorre un'altra funzione
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 37 23.1%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 101 63.1%
  • Square Enix

    Voti: 14 8.8%
  • Capcom

    Voti: 7 4.4%
  • Nintendo

    Voti: 21 13.1%
  • Altro (Specificare)

    Voti: 15 9.4%

Discussioni Simili