PDA

Visualizza la versione completa : [C++] Array: Somma di elementi (di un...)


jok1ng
14-01-2012, 20:15
Salve, mi sono appena iscritto al forum ma vi seguo (in particolare nella sezione tutorial) da tantissimo tempo :)

Tagliamo corto e passiamo al problema.
Ciò che devo costruire è un programma in grado di ricevere da tastiera due sequenze di numeri reali (sia positivi sia negativi), la prima composta da n numeri (x1, x2, x3, ... , xn), la seconda da m numeri (y1, y2, y3, ..., ym).
Sia k il minimo tra i valori di n ed m, il programma dovrà scrivere a video la sequenza di numeri data dalla somma del primo elemento delle due sequenze inserite e così via, fino al k-esimo elemento delle due sequenze inserite.
In altre parole, a video dovrà esserci la seguente sequenza: x1 + y1, x2 + y2, ..., xk + yk.

Provando a risolvere il problema con l'utilizzo degli array (è l'argomento del capitolo al quale è legato l'esercizio), ho scritto questo codice:



#include <iostream>
#include <cstdlib>
using namespace std;

int main () {

int n, m, k;
double A[n], B[m];

cout << "Di quanti elementi deve essere composto il PRIMO array?\n";
cin >> n;
cout << "Bene. Di quanti elementi vuoi che sia composto il SECONDO array?\n";
cin >> m;

for ( int i = 0; i < n; i++) {
cout << "Inserisci un elemento del PRIMO array: ";
cin >> A[i];
}

for ( int i = 0; i < m; i++) {
cout << "Inserisci un elemento del SECONDO array: ";
cin >> B[i];
}
// cerca il minimo tra il numero degli elementi degli array A[n] e B[m], e memorizza il valore nella variabile k
if ( n <= m ) k = n;
else k = m;

for ( int i = 0; i < k; i++ ) cout << A[i] + B[i] << " ";

cout << endl;
return 0;
}

Il problema è che mi da in output cose del genere e non riesco a capirne il motivo.


Di quanti elementi deve essere composto il PRIMO array?
7
Bene. Di quanti elementi vuoi che sia composto il SECONDO array?
6
Inserisci un elemento del PRIMO array: 1
Inserisci un elemento del PRIMO array: 2
Inserisci un elemento del PRIMO array: 3
Inserisci un elemento del PRIMO array: 4
Inserisci un elemento del PRIMO array: 5
Inserisci un elemento del PRIMO array: 6
Inserisci un elemento del PRIMO array: 7
Inserisci un elemento del SECONDO array: 1
Inserisci un elemento del SECONDO array: 2
Inserisci un elemento del SECONDO array: 3
Inserisci un elemento del SECONDO array: 4
Inserisci un elemento del SECONDO array: 5
Inserisci un elemento del SECONDO array: 6
2 4 6 1.39065e-309 4.244e-314 1.39065e-309


Sapete indicarmi dov'è che sbaglio?

Thanks.

oregon
14-01-2012, 20:51
E' sbagliato (e non ha senso) scrivere



int n, m, k;
double A[n], B[m];


Le linee di un programma vengono eseguite in sequenza.

Quando viene eseguita la seconda, le variabili n e m non hanno un valore definito.

Inoltre, molto probabilmente stai usando DevC++ (e il relativo compilatore) che permette questo tipo di utilizzo dell'array (C99), ma sarebbe meglio utilizzare l'allocazione dinamica della memoria e, se non la sai ancora usare, usare delle costanti per n e m.

jok1ng
14-01-2012, 21:49
E' sbagliato (e non ha senso) scrivere



int n, m, k;
double A[n], B[m];


Le linee di un programma vengono eseguite in sequenza.

Quando viene eseguita la seconda, le variabili n e m non hanno un valore definito.

OK. Se ho capito il problema, chiedendo all'utente il valore di n ed m PRIMA della dichiarazione dell'array, risolverei il problema, giusto?


Inoltre, molto probabilmente stai usando DevC++ (e il relativo compilatore) che permette questo tipo di utilizzo dell'array (C99), ma sarebbe meglio utilizzare l'allocazione dinamica della memoria e, se non la sai ancora usare, usare delle costanti per n e m.

Non uso DevC++ e, purtroppo, ancora non ho studiato l'allocazione dinamica della memoria. Invece di utilizzare delle costanti, potrei rendere il codice + generico utilizzando la soluzione espressa sopra, sbaglio?

Grazie per le risposte.

oregon
14-01-2012, 22:16
Originariamente inviato da jok1ng
OK. Se ho capito il problema, chiedendo all'utente il valore di n ed m PRIMA della dichiarazione dell'array, risolverei il problema, giusto?

Se il compilatore che usi adotta lo standard C99 puoi farlo. Altrimenti avrai un errore anche in questo caso.


Non uso DevC++ e, purtroppo, ancora non ho studiato l'allocazione dinamica della memoria. Invece di utilizzare delle costanti, potrei rendere il codice + generico utilizzando la soluzione espressa sopra ...


Le costanti indicano la dimensione *massima* dei vettori, non quella scelta dall'utente (che può essere scelta dall'utente a patto che sia entro quella massima)

Loading