PDA

Visualizza la versione completa : [C++] Esercizio caricare/stampare matrici


Rinoleo
28-02-2013, 20:03
Salve a tutti, ho intenzione di proporvi in questa discussione un Esercizio da risolvere con il programma DevC++; lo scrivo qui di seguito:

1) Caricare una Matrice A con elementi a piacere;
2) Stampare una Matrice B, i cui elementi siano quelli della Matrice A con la particolarità che nelle righe dispari siano stampati gli elementi dispari e che nelle righe pari siano stampati gli elementi pari.

Ringrazio anticipatamente della vostra collaborazione.

Un esempio di caricamento Matrice è il seguente, ma poi bisogna continuare ed eseguire il punto 2):


#include <iostream>
#include <math.h>
using namespace std;
/**/
int main()
{
int a[10][10];
int n,m,i,j;
cout<<"Inserire numero righe e numero colonne della Matrice:"<<endl<<endl;
cout<<"Inserire numero righe (non oltre 5): ";cin>>n;cout<<endl;
cout<<"Inserire numero colonne (non oltre 5): ";cin>>m;cout<<endl;

while(n<1 || n>10 || m<1 || m>10)
{
cout<<"Errore di inserimento dati, riprova."<<endl<<endl;
cout<<"Inserire numero righe e numero colonne della Matrice:"<<endl<<endl;
cout<<"Inserire numero righe (non oltre 5): ";cin>>n;cout<<endl;
cout<<"Inserire numero colonne (non oltre 5): ";cin>>m;cout<<endl;
}

cout<<"Inserimento elementi della Matrice:"<<endl<<endl;

for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"Elemento A["<<i<<","<<j<<"]= ";
cin>>a[i][j];
cout<<endl;
}

cout<<"La Matrice inserita e':"<<endl<<endl;

for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

system("PAUSE");
return 0;
}

Marco1995
28-02-2013, 20:31
Mi sa che verrai invitato da qualche moderatore a prendere visione del regolamento perchè:

1-Non si chiede lo svolgimento di alcun esercizio
2-Il codice va postato col relativo tag code

MItaly
28-02-2013, 20:37
Originariamente inviato da Marco1995
Mi sa che verrai invitato da qualche moderatore a prendere visione del regolamento perchè:

1-Non si chiede lo svolgimento di alcun esercizio
2-Il codice va postato col relativo tag code

Esattamente; come indicato nel regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887),

L'utente che apre la discussione ha il compito di fornire la propria proposta (o tentativo) di risoluzione ed eventualmente il codice sorgente scritto; in assenza di questi elementi, è comunque obbligatorio indicare con precisione i dettagli del problema, le indagini già fatte e il dubbio specifico in merito, senza limitarsi a porre la questione e delegare ad altri il lavoro.
Per cui, posta un tuo abbozzo di soluzione per il punto 2, che ci si ragiona insieme. :)

Per i tag code, ora ho sistemato io, in futuro ricordatene. :ciauz:

Rinoleo
01-03-2013, 09:24
Ecco il programma che sono riuscito ad elaborare; vorrei che mi deste qualche consiglio a riguardo, grazie mille in anticipo per la collaborazione...approposito cosa sono i "tag code"?



#include <iostream>
#include <math.h>
using namespace std;
/**/
int main()
{
int a[10][10];
int n,m,i,j;
cout<<"Inserire numero righe e numero colonne della Matrice:"<<endl<<endl;
cout<<"Inserire numero righe (non oltre 5): ";cin>>n;cout<<endl;
cout<<"Inserire numero colonne (non oltre 5): ";cin>>m;cout<<endl;

while(n<1 || n>10 || m<1 || m>10)
{
cout<<"Errore di inserimento dati, riprova."<<endl<<endl;
cout<<"Inserire numero righe e numero colonne della Matrice:"<<endl<<endl;
cout<<"Inserire numero righe (non oltre 5): ";cin>>n;cout<<endl;
cout<<"Inserire numero colonne (non oltre 5): ";cin>>m;cout<<endl;
}

cout<<"Inserimento elementi della Matrice:"<<endl<<endl;

for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"Elemento A["<<i<<","<<j<<"]= ";
cin>>a[i][j];
cout<<endl;
}

cout<<"La Matrice inserita e':"<<endl<<endl;

for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

cout<<"La Matrice B e':"<<endl<<endl;

int b[10][10];

for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(i%2!=0)
{
if(a[i][j]%2!=0)
{b[i][j]=a[i][j];}
else
{b[i][j]=0;}
}
else
{
if(a[i][j]%2==0)
{b[i][j]=a[i][j];}
else
{b[i][j]=0;}
}
}

for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}

system("PAUSE");
return 0;
}

programma

oregon
01-03-2013, 10:03
Occhio in tutte le for che gli indici partono da 0 e terminano con <m o <n ...

I tag code sono le parole

[ CODE ]

e

[ /CODE ]

da aggiungere all'inizio e alla fine del codice senza gli spazi

Marco1995
01-03-2013, 14:08
2) Stampare una Matrice B, i cui elementi siano quelli della Matrice A con la particolarità che nelle righe dispari siano stampati gli elementi dispari e che nelle righe pari siano stampati gli elementi pari.

Questa richiesta mi risulta un pò ambigua...
Tu vuoi che gli elementi pari siano copiati solo in riga pari mentre gli indici dispari vengano copiati sono nella riga dispari...se un elemento pari si trova nella posizione dispari vuoi che venga copiato nella posizione corretta o venga semplicemente ignorato?
Nel primo caso simile al tuo può andare però devi ricordarti che gli indici partono da 0 e arrivano a n-1
Nell'altro caso c'è da ragionarci un pò su..

Rinoleo
01-03-2013, 19:56
Ciao, per elementi pari intendo i valori pari e non la posizione pari dell'elemento (idem per gli elementi dispari); quindi, secondo te, quale modifica al programma si potrebbe apportare?
Grazie per il tuo intervento.

oregon
01-03-2013, 19:59
Originariamente inviato da Rinoleo
quale modifica al programma si potrebbe apportare?


Perché non cominci a modificare tutti i cicli dato che ti è stato detto un paio di volte che gli indici vanno da 0 a n-1 ?

Rinoleo
01-03-2013, 20:19
Secondo me il cambio degli indici non è poi così importante ai fini dell'esercizio; se mi sbaglio, mi puoi spiegare il perchè questo aspetto è importante?

Marco1995
01-03-2013, 20:27
Ciao, per elementi pari intendo i valori pari e non la posizione pari dell'elemento (idem per gli elementi dispari); quindi, secondo te, quale modifica al programma si potrebbe apportare?
Grazie per il tuo intervento.

Ciao..innanzitutto come suggerito da oregon rivedrei tutti i cicli di inserimento e stampa...poi i numeri pari e dispari andrebbero immagazzinati all'interno di altri array.
Bisognerebbe inoltre fare dei controlli:
Supponi di avere una matrice 3x3 composta solo di numeri dispari,per un totale di 9 numeri dispari.Ovviamente la tua richiesta non è attuabile perchè nella nuova matrice ci possono stare al massimo solo 3 numeri dispari


Matrice a:
1 3 5
7 9 1
3 5 7
Matrice b:
0 0 0
1 3 5
0 0 0

Come puoi vedere tutti gli elementi dispari non possono venire disposti all'interno della matrice.
Mentre le righe pari stanno a 0 perchè non vi è alcun elemento pari.

Superati i controlli opportuni,puoi procedere al caricamento dei dati nella matrice.



Secondo me il cambio degli indici non è poi così importante ai fini dell'esercizio; se mi sbaglio, mi puoi spiegare il perchè questo aspetto è importante?

questo aspetto è importante perchè oltre a non caricare in maniera corretta i dati rischieresti di anare a scrivere in zone non destinate alla matrice stessa,provocando un potenziale crash.

Loading