[C++] Dubbio risoluzione con array con C++
Scrivere un programma che chieda all'utente la dimensione di un array (>=2, max 3 tentativi) e faccia inserire nell'array dim valori compresi tra 1 e 9.
Se i valori inseriti sono esterni all'intervallo, il programma li trascura. L'array deve essere popolato fino al riempimento completo. Successivamente il programma stampa il contenuto del vettore.
Qualche idea???
Avevo iniziato cosi'
#include
#include
#include
using namespace std;
int main()
{
int dim;
int A[dim];
cout<<"Inserisci la dimensione dell'array : " >>dim>>;
cin>>dim;
while (dim<2)
{
for(int i=0;i<3;i++)
cin>>dim;
}
Se i valori inseriti sono esterni all'intervallo, il programma li trascura. L'array deve essere popolato fino al riempimento completo. Successivamente il programma stampa il contenuto del vettore.
Qualche idea???
Avevo iniziato cosi'
#include
#include
#include
using namespace std;
int main()
{
int dim;
int A[dim];
cout<<"Inserisci la dimensione dell'array : " >>dim>>;
cin>>dim;
while (dim<2)
{
for(int i=0;i<3;i++)
cin>>dim;
}
Risposte
Ok hai iniziato così, ma secondo te hai iniziato bene o male? Hai provato a compilare il programma?
Ti anticipo che devi aggiustare un paio di cose affinché quel codice venga compilato, ma credo siano errori che puoi trovare da solo, soprattutto se ti aiuti con i messaggi di errore del compilatore.
Una volta compilato testa il programma inserendo valori di dim non validi (per esempio 1). Il programma fa quello che ti aspetti?
Alcune osservazioni:
- non serve includere le librerie ctime e cstdlib;
- la dimensione di un array deve essere una costante (di solito si fissa una dimensione massima e poi si considerano i primi tot elementi);
- riguardo alla consegna, cosa dovrebbe succedere se si sbagliano tutti e tre i tentativi?
- sempre riguardo alla consegna cosa significa che il programma li trascura? Che fa reinserire il valore finchè non si immette un numero compreso tra 1 e 9?
Ti anticipo che devi aggiustare un paio di cose affinché quel codice venga compilato, ma credo siano errori che puoi trovare da solo, soprattutto se ti aiuti con i messaggi di errore del compilatore.
Una volta compilato testa il programma inserendo valori di dim non validi (per esempio 1). Il programma fa quello che ti aspetti?
Alcune osservazioni:
- non serve includere le librerie ctime e cstdlib;
- la dimensione di un array deve essere una costante (di solito si fissa una dimensione massima e poi si considerano i primi tot elementi);
- riguardo alla consegna, cosa dovrebbe succedere se si sbagliano tutti e tre i tentativi?
- sempre riguardo alla consegna cosa significa che il programma li trascura? Che fa reinserire il valore finchè non si immette un numero compreso tra 1 e 9?
Per il tuo ultimo quesito presumo di si, l'ha scritto cosi' il prof per casa..
A quest'ora non connetto piu' ti chiedo molto se mi puo' postare il codice completo?
A quest'ora non connetto piu' ti chiedo molto se mi puo' postare il codice completo?
Una cosa cosi' ma non viene....
#include
#include
using namespace std;
int main()
{
int dim, j = 0;
do
{
cin >> dim;
++j;
} while (dim < 2 && j < 3);
if (j == 3)
exit(1);
int array[dim];
for (int i = 0; i < dim; i++)
{
int temp;
do
{
cin >> temp;
} while (temp < 0 || temp>9);
array = temp;
}
}
#include
#include
using namespace std;
int main()
{
int dim, j = 0;
do
{
cin >> dim;
++j;
} while (dim < 2 && j < 3);
if (j == 3)
exit(1);
int array[dim];
for (int i = 0; i < dim; i++)
{
int temp;
do
{
cin >> temp;
} while (temp < 0 || temp>9);
array = temp;
}
}
Il tuo codice non funziona sempre perché nel momento in cui inserisci la dimensione per la terza volta la condizione dell'if sarà sempre verificata e quindi anche se l'ultimo tentativo era corretto il programma terminerà lo stesso.
Per risolvere questo problema basta inserire l'if all'inizio del primo ciclo do/while e rimuovere la seconda condizione dello stesso ciclo.
Al posto di exit utilizza un semplice return.
Tenendo conto anche dei consigli che ti ho dato nel post precedente, farei una cosa del genere:
Per risolvere questo problema basta inserire l'if all'inizio del primo ciclo do/while e rimuovere la seconda condizione dello stesso ciclo.
Al posto di exit utilizza un semplice return.
Tenendo conto anche dei consigli che ti ho dato nel post precedente, farei una cosa del genere:
#include <iostream> using namespace std; int main() { const int MAX_DIM = 100; int v[MAX_DIM]; int dim; int i = 0; do { if(i == 3) { return 1; } cout << "DIM (MIN 2 E MAX " << MAX_DIM << "): "; cin >> dim; ++i; } while(dim < 2 || dim > 100); for(i = 0; i < dim; ++i) { do { cin >> v[i]; } while(v[i] < 0 || v[i] > 9); } for(i = 0; i < dim; ++i) { cout << v[i] << " "; } }
Scusami return 1 non l'ho mai usato (di solito uso return 0) che funzione ha?
"mpg":
Scusami return 1 non l'ho mai usato (di solito uso return 0) che funzione ha?
In generale, è usato per indicare che la funzione è ritornata con un errore. L'esatto significato dipende dal sistema. Nei sistemi Posix è equivalente a EXIT_FAILURE. A rigore si dovrebbe usare EXIT_FAILURE da cstdlib perché è più portabile. E' il return 0 indica successo, ma che, in teoria, EXIT_SUCCESS può assumere valori diversi da 0 su sistemi non-posix. E' da notare che windows non è un sistema posix.