Estratto del documento

Elevare al cubo i valori della seconda diagonale (matrice)

#include <iostream>

using namespace std;

// ----- Variabili globali ----- //

const int massimo=100;

// ----- /Variabili globali ----- //

// ----- Prototipi ----- //

int dimensione();

void caricamento_matrice(int [massimo][massimo], int, int);

void stampa_matrice(int [massimo][massimo], int, int);

void cubo(int [massimo][massimo], int, int);

// ----- /Prototipi ----- //

// ----- Funzioni ----- //

int dimensione()

{ int n;

cout<<"Inserisci il numero di righe e colonne: ";

cin>>n;

while (n>massimo)

{ cout<<"Errore. Inserisci il numero di righe: ";

cin>>n;

}

return n;

}

void caricamento_matrice(int m[massimo][massimo], int nr, int nc)

{ for (int i=0; i<nr; i++)

{ for (int j=0; j<nc; j++)

{ cout<<"Inserisci l'elemento della riga numero "<<i<<" e colonna numero "<<j<<": ";

cin>>m[i][j];

}

}

}

void stampa_matrice(int m[massimo][massimo], int nr, int nc)

{ for (int i=0; i<nr; i++)

{ for (int j=0; j<nc; j++)

{ cout<<m[i][j]<<"\t";

}

cout<<endl;

}

}

Anteprima
Vedrai una selezione di 1 pagina su 2
C++ - Elevare al cubo i valori della seconda diagonale Pag. 1
1 su 2
Sintesi

Risoluzione dell'esercizio in C++

Nel seguente appunto analizzeremo la risoluzione di un esercizio di programmazione in C++. L'esercizio chiede, data in input una matrice di

[math] n [/math]
righe e
[math] n [/math]
colonne, di stampare un'ulteriore matrice (delle stesse dimensioni della matrice di partenza) che elevi al cubo i valori della seconda diagonale. Intenderemo la seconda diagonale come la diagonale che va dalla casella più in basso a sinistra alla casella più in alto a destra.

Funzione caricamento matrice

Scriviamo una funzione void caricamento_matrice che permetta all'utente di inserire i valori della tabella in questione. Per fare inserire i valori desiderati dall'utente, saranno necessari due cicli for, il primo iterato sul numero di righe e il secondo iterato sul numero di colonne. Così facendo riusciremo a inserire tutti i valori desiderati. Scriviamo quindi:

void caricamento_matrice(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { cout<<"Inserisci l'elemento della riga numero "<<x<<" e colonna numero "<<y<<": "; cin>>m[x][y]; } } }

Per approfondimenti sulle matrici in C++, vedi anche qua.

Funzione stampa matrice

Questa funzione è necessaria per poter stampare i valori contenuti nella matrice

[math] n \times n [/math]
. Ancora una volta bisogna utilizzare due cicli for, sul numero di righe e sul numero di colonne.

void stampa_matrice(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { cout<<m[x][y]<<"\t"; } cout<<endl; } }

Così facendo saremo in grado di stampare tutte le celle della tabella (o matrice).

Funzione per elevare la diagonale 2 al cubo

Bisogna prima di tutto trovare una proprietà comune a tutte le celle che si trovano sulla diagonale 2.

Occorre quindi che gli indici di riga e colonna di una certa casella sommino al numero di righe (e di colonne) meno 1. Infatti se avessimo

[math] n = 3 [/math]
le caselle della diagonale 2 coinvolte sarebbero
[math] (2,0), (1,1) \text{e} (0,2) [/math]
.

Se la somma delle coordinate vale

[math] n - 1 [/math]
, bisogna quindi sostituire il valore attuale della matrice con il suo cubo, cioè sostituire
[math] x [/math]
con
[math] x * x * x [/math]
.

void cubo(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { if (x+y==nr-1) { m[x][y]=m[x][y]*m[x][y]*m[x][y]; } } } }

Programma principale

Assembliamo il tutto, invocando le funzioni precedentemente create nell'ordine opportuno. Effettueremo le seguenti operazioni:

  • Carichiamo la matrice di partenza, stampandola a fine operazione.
  • Effettuiamo i calcoli opportuni elevando al cubo i valori della diagonale due.
  • Stampiamo la matrice risultato.

int main() { int matrice[massimo][massimo]; int righe=dimensione(); int colonne=righe; cout<<endl; caricamento_matrice(matrice, righe, colonne); cout<<endl<<"Matrice caricata: "<<endl; stampa_matrice(matrice, righe, colonne); cubo(matrice, righe, colonne); cout<<endl<<"Risultato: "<<endl; stampa_matrice(matrice, righe, colonne); return 0; }

Codice intero

Ora possiamo assemblare il tutto per ottenere il codice idoneo all'esecuzione del nostro programma, completo di funzioni e un main() che le esegua nell'opportuno ordine, come esplicitato prima.

// Elevare al cubo i valori della seconda diagonale (matrice) #include <iostream> using namespace std; // ----- Variabili globali ----- // const int massimo=100; // ----- /Variabili globali ----- // // ----- Prototipi ----- // int dimensione(); void caricamento_matrice(int [massimo][massimo], int, int); void stampa_matrice(int [massimo][massimo], int, int); void cubo(int [massimo][massimo], int, int); // ----- /Prototipi ----- // // ----- Funzioni ----- // int dimensione() { int n; cout<<"Inserisci il numero di righe e colonne: "; cin>>n; while (n>massimo) { cout<<"Errore. Inserisci il numero di righe: "; cin>>n; } return n; } void caricamento_matrice(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { cout<<"Inserisci l'elemento della riga numero "<<x<<" e colonna numero "<<y<<": "; cin>>m[x][y]; } } } void stampa_matrice(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { cout<<m[x][y]<<"\t"; } cout<<endl; } } void cubo(int m[massimo][massimo], int nr, int nc) { for (int x=0; x<nr; x++) { for (int y=0; y<nc; y++) { if (x+y==nr-1) { m[x][y]=m[x][y]*m[x][y]*m[x][y]; } } } } // ----- /Funzioni ----- //

// ----- Programma principale ----- // int main() { int matrice[massimo][massimo]; int righe=dimensione(); int colonne=righe; cout<<endl; caricamento_matrice(matrice, righe, colonne); cout<<endl<<"Matrice caricata: "<<endl; stampa_matrice(matrice, righe, colonne); cubo(matrice, righe, colonne); cout<<endl<<"Risultato: "<<endl; stampa_matrice(matrice, righe, colonne); return 0; } // ----- /Programma principale ----- //

Per ulteriori approfondimenti sui cicli for, vedi anche qua
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi