DOMANDA Dubbio risoluzione con array con C++

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità

MPG

Utente Attivo
Messaggi
566
Reazioni
4
Punteggio
55
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???
 
Cosa non ti è chiaro del problema ? Hai già buttato qualche riga di codice ?
Inizia a dividere il problema in sotto-problemi.

- Primo ciclo: chiedi la dimensione dell'array (dichiara un array con DIM 255, non penso tu abbia affrontato la memoria dinamica) e fai un controllo appoggiandoti ad una variabile.
- Secondo ciclo: chiedi un valore, controlli se si trova nel range. Se si lo aggiungi all'array, altrimenti non fai nulla.
- Stampa array

Esempio fatto al volo, terra-terra.
 
Ultima modifica:
In c++.
Perchè devo mettere dim 255 non capisco...

Non stai lavorando con la memoria dinamica presumo.

Tu vuoi che l'utente scelga la dimensione dell'array giusto ? Per fare ciò hai due metodi
- Tramite la memoria dinamica allocando volta per volta ogni posizione dell'array.
- Usando una soluzione grezza: allochi già nella memoria uno spazio che dovrebbe bastarti (255 scelto a caso, potevi mettere pure 20) e poi gli modifichi l'area di memoria con la dimensione scelta dall'utente.

La memoria deve sapere a priori quanto spazio occupare per il tuo array prima dell'esecuzione.
 
Non , memoria dinamica no....
NOn so proprio come impostare quello che mi dici caspita...
Avevo iniziato cosi'

Codice:
#include <iostream>
#include <ctime>
#include <cstdlib>

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;
    }
 
Ultima modifica:
La dimensione la inserisce l'utente, quindi la conosci.
Se esponi le difficoltà, magari mostrando ciò che hai scritto, potremmo essere di maggior aiuto.

Solite cose di sempre:

- chiedi la dimensione;
- crea l'array dando come dimensione quella letta in precedenza:
- leggi i valori e scarta quelli fuori dal l'intervallo:
- stampa l'array
 
Innanzitutto i file-header ctime e cstdlib sono inutili, tranne l’ultimo se tu volessi usare il typename size_t, che però non stai usando.

Il fatto che l’utente abbia 3 tentativi significa che il ciclo while avrà due condizioni collegate da una congiunzione logica, una è ovviamente dim<2 l’altra una che guardi se un contatore, inizializzato a 0 sia minore di 3.
Poi non so se dopo i 3 tentativi il programma debba uscire, lanciare una eccezione o chissaché; dipende dal testo del problema.

Per quanto riguarda l’array, la dichiarazione nello stack va dopo l’inizializzazione della sua dimensione ovviamente.
Per il popolamento un normale ciclo for dovrà passare tutto l’array e chiedere un numero finché non è “giusto” e poi inserirlo.
A te l’implementazione.
 
Il testo dice in alto..... "Se i valori inseriti sono esterni all'intervallo, il programma li trascura".
_Achille buttami giu' il codice completo dai , quando chiedo aiuto e' proprio perchè non ci arrivo e a quest'ora non rendo piu'......
 
Il testo dice in alto..... "Se i valori inseriti sono esterni all'intervallo, il programma li trascura".
_Achille buttami giu' il codice completo dai , quando chiedo aiuto e' proprio perchè non ci arrivo e a quest'ora non rendo piu'......
Ovviamente sul Forum si cerca sempre di fornire la risoluzione logica, in tal modo l'utente deve solo implementarla.
C++:
#include "stdafx.h"
#include <iostream>
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[i] = temp;

    }
}
Codice da me non testabile visto che non posso dichiarare array con un valore non-const. Dipende da compilatore a compilatore.
 
Exit (1) cosa significa? Io uso codeblocks mi dice che non è dichiarata (e inotre non so che funzione abbia)..
anche questo non so cosa serve #include "stdafx.h"
 
Codice da me non testabile visto che non posso dichiarare array con un valore non-const. Dipende da compilatore a compilatore.
Infatti hai ragione: non è corretto perché dim è dichiarata come variabile invece che come costante, anche se il compilatore lo permette non è standard.
Andava benissimo come avevi detto prima:
dichiarare una costante con una dimensione ragionevolmente grande (const maxdim = 30; // per esempio) e poi usa le prime dim posizioni per memorizzare/stampare i valori.
Altrimenti deve usare l'allocazione dinamica in stile C che è più complicato.
 
Infatti non è corretto perché dim è dichiarata come variabile invece che come costante: anche se il compilatore lo permette non è standard.
Andava benissimo come avevi detto prima:
dichiarare una costante con una dimensione ragionevolmente grande (const maxdim = 30; // per esempio) e poi usa le prime dim posizioni per memorizzare/stampare i valori.
Altrimenti deve usare l'allocazione dinamica in stile C che è più complicato.
Eh lo so ma i professori molto spesso fanno fare così (pure il mio se non ricordo male) e sfortunatamente alcuni compilatori permettono pure.

Exit (1) cosa significa? Io uso codeblocks mi dice che non è dichiarata (e inotre non so che funzione abbia)..
anche questo non so cosa serve #include "stdafx.h"
Cosa del compilatore di VisualStudio.
exit(1) serve per uscire con codice di errore 1. È una funzione con prototipo in cstdlib. Non hai specificato cosa debba accadere dopo i tre tentativi...
 
Pubblicità
Pubblicità
Indietro
Top