- Messaggi
- 2,454
- Reazioni
- 2,001
- Punteggio
- 134
Per iltypedef
, dico la verità, l'ho scoperto oggi mentre appunto sfogliavo guide online, mai usato in vita mia.. pensavo di fare cosa gradita per il professore. In merito allaLista L
avrei voluto provare con un oggetto Lista, ma poi mentre mi documentavo ho pensato che in fondo non mi cambiava poi molto utilizzare gli strumenti che già conosco. Forse avrei potuto uscire un po' dalla comfort zone.
Il problema con il typedef in questo caso è quello che ha fatto notare anche bigendian qui sopra. Già dando nomi chiari alle variabili però la situazione migliora.
Giuro, lo faccio sempre sempre, credo sia stato lo "stress" visto che è la prima volta che ci viene assegnato un compito così lungo e complesso (per gli standard a cui siamo abituati in classe). Do subito un occhio alla guida comunque perché mi piace approfondire.
Va bene, in caso avessi domande relative a quello che stai leggendo, puoi domandare tranquillamente in quel topic. ?
Ecco qui mi sono un attimo perso, non credo di aver capito bene questo punto. Perché stampare direttamente dalla funzione è un errore logico? ?
Ti porto un paio di esempi. Immagina di dover utilizzare ad esempio la funzione che restituisce il prezzo del prodotto e dover stampare il simbolo del $, piuttosto che gli €. Se hai un una stampa sul terminale del prezzo, come fai?
La funzione che hai scritto ha come scopo restituire il prezzo; il modo in cui è formattato/mostrato a video, non dipende da quella funzione.
Secondo esempio. Ipotizza che il programma che hai scritto debba avere 2 interfaccie: una da terminale, che è quella che hai realizzato - magari immaginala interattiva, con input da parte dell'utente - e una seconda con una GUI (grafica). Avresti quella funzione che continua a scrivere su terminale.
Un altro esempio? Immagina di mettere quelle funzioni in un file separato dal main(), e ipotizza che un altro programma/esercizio che scriverai domani abbia bisogno di richiamare quelle funzioni. Se ti viene chiesto dal docente di stampare "QUANTITA': ..." invece di quello che stampi a schermo ora, come faresti?
Ancora un esempio, prendiamo la funzione che hai scritto che torna true/false (funzione4). Lo scopo della funzione dovrebbe essere quello di restituire true o false, non il messaggio. Quello verrà stampato a schermo da chi richiama la funzione, in base a quello che torna.
Immagina sempre, se ti è più comodo, di dover richiamare questa funzione più volte nel tuo programma. E se una di queste volte vuoi solo sapere se è true/false, senza avere del testo stampato a video?
Questi sono solo alcuni esempi che mi sono venuti in mente ora.
Le uniche eccezioni sono quelle funzioni che vai a scrivere apposta per "stampare" a schermo. Per dire, puoi avere una funzione che ritorna un
void
e riceve come parametro la matrice, e che poi stampa a video la matrice. Però in quel caso la funzione avrebbe quello come scopo, ovvero mostrare il contenuto (ed è sicuramente meglio fare così, piuttosto che copiare e incollare gli stessi 2 cicli for per stampare il contenuto ogni qual volta ti serve).Non abbiamo ancora affrontato questi argomenti a scuola, puoi linkarmi qualche guida in merito a ciò di cui parli?
E' qualcosa che penso puoi trovare su tutti i libri. Guarda il libro di testo che utilizzate, quando parla degli array e dell'allocazione statica (statica perchè hai scelto tu la dimensione in fase di compilazione, ovvero N).
Poi ti accorgi che non tutte le locazioni di memoria sono inizializzate facendo: R x C = 3x3 = 9.
Tu stai facendo:
C++:
M[0][1] = Fila(0,10);
M[1][1] = Fila(1,0);
M[2][1] = Fila(1,4);
M[1][2] = Fila(0,5);
significa che ti mancano:
C++:
M[0][0]
M[0][2]
M[1][0]
M[2][0]
M[2][1]
Se sommi i casi che ti ho mostrato io e quello che hai tu, sono infatti 9. Ricordati che questa è una matrice, puoi vederla come una "griglia" (un quadrato in questo caso, essendo 3x3). Provo anche a "disegnartela", così ti è più facile. ?
---------------------------
M[0][0] | M[0][1] | M[0][2]
---------------------------
M[1][0] | M[1][1] | M[1][2]
---------------------------
M[2][0] | M[2][1] | M[2][2]
---------------------------
Il verde sono le celle che hai inizializzato, a cui hai dato un valore; le rosse sono quelle ignorate.
Qui però devo correggere me stesso, visto che siamo con C++: quando dichiari la matrice (con quel typedef in cima etc etc) in realtà viene richiamato il costruttore di default, quasi sicuramente. Quindi se al termine del tuo programma accederai alla posizione M[0][0] accedendo a uno dei membri (quantità o indice), vedrai i valori che avrai nel costruttore, segno che l'oggetto è in realtà stato comunque istanziato.
Puoi fare una prova, ma probabilmente è così. Quindi vedrai -1 se stampi indice, o 0 se stampi quantità (come se avessi richiamato esplicitamente il costruttore vuoto).
In generale però tieni presente questo aspetto, potrebbero capitarti situazioni diverse.
Poi con il tempo - e magari quanto affronterete altri argomenti o altri ilnguaggi, come C - vedrai che avrai molti più tasselli a comporre il disegno che ti stai formando ora, su come funzionano le cose. ?
Allora hai fatto bene.Ha detto che potevamo tranquillamente utilizzare staticamente i valori che ci ha "consigliato" nella consegna dell'esercizio, dunque ho usato il#define
senza problemi.
Comunque è del tutto normale, anzi. Non è un brutto codice. Per altro è bello vedere un pò di curiosità e interesse in chi sta iniziando ora.Grazie mille, apprezzo molto! Calcola che sono uno studente di seconda superiore, dunque se il codice è un po' "immaturo" è anche perché non è che abbiamo affrontato chissà quali argomenti.. Per il resto cerco di documentarmi online.