IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

di il
32 risposte

32 Risposte - Pagina 3

  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    skynet ha scritto:


    
    int d;
    int M[d][d];
    
    quest altro è un altro errore. Il compilatore ti può dire che non può allora spazio di una matrice a dimensioni ignoti (d non è stato inzializzato). quindi soluzione:
    
    const int d = 10;
    int M[d][d];
    
    ora non da + errore perche d è definito. Ma qui sorge un altro problema. Tu d lo scegli in run-time (a programma avviato) quindi il metodo migliore sarebbe quello di creare la matrice dopo aver saputo la dimensione di d. Ma quì forse andiamo sull'avanzato. iniziamo a risolvere i problemi prima poi espandiamo lo sviluppo.
    Come vedi nel mio post precedente avevo previsto questa cosa. Tu usi d perche imposti quello come max, ma siccome poi lasci all'utente la scelta della grandezza della matrice è meglio usare quel valore come grandezza massima. Quindi è meglio la scelta del professore. Ti metto un implementazione un po avanzata ma che andrebbe meglio nel caso non sapessimo la dimensione e volessimo ingradire la matrice prendendo come dato la scelta dell'utente. E' un metodo avanzato (si fa x dire) che non hai fatto ancora ma giusto per farti capire l'implementazione migliore.
    
    //implementi la matrice con dimensione ignota
    int **M;
    //prendi la dimensione dall'input (scelta utente)
    cin >> d;
    //applichi la dimensione alla matrice
    int i = 0;
    M = new (int *)[d];
    for(i = 0; i < d; i++)
    	M[i] = new int[d];
    //alla fine del programma liberi i blocchi di memoria che hai occupato
    for(i = 0; i< d; i++)
        delete [] M[i];
    delete [] M;
    
    Come vedi questo metodo è molto + lungo ma accettabile nel caso in cui non si sa la dimensione dell'oggetto.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Sì questo è vero, ma siccome mi risulta più facile come avevamo scritto l'altra volta è corretto lo stesso?
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Ni. Se tu imposti come valore massimo di dimensione matrice = 10 ma l'utente sceglie 5 il programma non ti da errore se tu vai aleggere la posizione M[8][8] per esempio perche la matrice è ben definita fino a M[9][9] (ricordi i valori di d vanno a 0 a d - 1). Quindi ti darebbe un risultato errato e non capiresti il perche.
Devi accedere o registrarti per scrivere nel forum
32 risposte