Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[Ansi C] Matrice non istanziata? Che significa?

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[Ansi C] Matrice non istanziata? Che significa?

Messaggioda angel85 » dom gen 21, 2007 11:17 am

Salve sono incasinato con il progetto di programmazione in Ansi C. Il progetto si chiama MEMORY scelto randomicamente dal mio professore e il compilatore da utilizzare è DEV-C++. Devo seguire i seguenti passi:

PRIMA PARTE DEL PROGETTO

Il progetto consiste nello sviluppare un programma che
permetta ad un utente di giocare al gioco del:

MEMORY

dare la possibilità di selezionare il livello di gioco con
numero di carte per riga minimo: 2, massimo: 6;
numero di carte per colonna minimo: 2, massimo 10

L'interfaccia grafica deve essere schematica (a caratteri),
ma sviluppata in modo da rendere chiaro lo stato di avanzamento
del gioco.

Sviluppare l'interfaccia grafica schematica.

All'avvio del programma deve essere richiesto
il nome dell'utente che inizia a giocare.

Predisporre una sezione chiamata help, richiamabile
in qualsiasi momento all'interno dell'applicazione, che
permetta agli utenti di conoscere le regole del gioco e le
modalità di utilizzo del programma, oltre una descrizione di
tutte le funzionalità disponibili.

SECONDA PARTE DEL PROGETTO

La seconda parte del progetto consiste in una evoluzione del
progetto che avete svolto per la prima parte. In particolare
le modifiche comprendono: lo sviluppo di nuove funzionalità e
la reingegnerizzazione del codice.

Nuove funzionalità da implementare:

Inserire tutti i controli e relativi messaggi di
errore nel caso di qualsiasi inserimento errato da
parte dell'utente

Una volta terminata la partita dare la possibilità
di giocarne un'altra senza uscire dal programma

Dare la possibilità di terminare una partita in qualsiasi
momento e ovviamente di poterne iniziare una nuova

Per ogni mossa fatta tenere traccia del tempo impiegato per
eseguirla (UTILIZZARE UNA LISTA DINAMICA)

Stampare l'elenco delle mosse fatte a fine partita

Modifiche al codice:

Utilizzo di funzioni per migliorare il codice ed evitare
inutili ripetizioni di porzioni di codice

I commenti devono seguire le seguenti specifiche:

Ogni funzione deve avere un commento prima dell'intestazione
che specifichi nell'ordine:
1.nome della funzione,
2.breve descrizione delle funzionalità,
3.elenco dei parametri in ingresso con relativo significato,
4.descrizione dell'eventuale parametro restituito.

Ad esempio:

/*
* calcolaMediaValoriArray()
* funzione che calcola la media dei valori presenti all'interno
* di un array passato come argomento alla funzione.
*
* Parametri in ingresso:
* array: vettore dei valori dei quali deve essere calcolata la media
* dim: numero di celle presenti all'interno del vettore
*
* Valore restituito:
* un float che indica la media dei valori inseriti
*/
float calcolaMediaValoriArray(int array[], int dim)
{
...
}

Inoltre per ogni variabile o costante dichiarata deve esistere un commento
che ne descriva il ruolo all'interno del programma o della funzione; e devono
essere presenti commenti all'interno del codice che descrivano le
parti più salienti.

N.B. I COMMENTI DEVONO ESSERE INSERITI COME DESCRITTO NEI PUNTI PRECEDENTI,
LA MANCANZA DI TALE SPECIFICHE COMPORTA L'ANNULLAMENTO DELLA CONSEGNA!

TERZA PARTE DEL PROGETTO

La terza parte del progetto consiste in una evoluzione del
progetto che avete svolto per la seconda parte. In particolare
le modifiche comprendono: lo sviluppo di nuove funzionalità
e la reingegnerizzazione del codice.
(N.B. RIMANE SEMPRE VALIDA LA RICHIESTA DI COMMENTI COME
DESCRITTO NELLE SPECIFICHE DEL SECONDO PROGETTO)

Nuove funzionalità:

Memorizzazione delle mosse fatte con possibilità di
annullare una o più mosse per ripartire da un certo
punto della partita (LA GESTIONE DEVE ESSERE FATTA CON
UNA PILA DINAMICA)

la prima mossa fatta non potrà essere annullata

Possibilità di visualizzare l'elenco le mosse fatte a
fine partita e in QUALSIASI punto della partita da parte
di ogni utente


Modifiche al codice:

le funzioni non devono essere più lunghe di 25-30 righe di codice

Non devono esistere variabili globali (costanti se necessarie
ovviamente possono esistere)

i nomi delle variabili e delle funzioni devono essere "parlanti"
ovvero leggendo il nome si deve già intuire il significato, quindi eccetto
per i contatoti utilizzati in cicli, NON possono esistere variabili con nomi
formati da una sola lettera o da abbreviazioni

QUARTA PARTE DEL PROGETTO

La quarta parte del progetto consiste in una evoluzione
del progetto che avete svolto per la terza parte.
In particolare le modifiche comprendono: lo sviluppo di
nuove funzionalità e la reingegnerizzazione del codice.
(N.B. RIMANE SEMPRE VALIDA LA RICHIESTA DI COMMENTI COME
DESCRITTO NELLE SPECIFICHE DEL SECONDO PROGETTO)

tramite l'utilizzo di un ALBERO CON LISTE DEI NODI,
tenere traccia di tutte le mosse fatte, anche quelle
annullate, e implementare la funzionalità che permetta
di sapere, dato un intero k, se esiste una sequenza di
k mosse a partire dalla prima che porta ad una mossa
annullata

Possibilità di salvare una partita su file in
qualsiasi momento e di poterla ricaricare in un secondo
momento per riprendere il gioco dal punto lasciato in
sospeso (bisogna mantenere anche i nomi dei giocatori),
non bisogna salvare le mosse fatte.

Il mio problema adesso prima di arrivare alle altre parti del progetto è di istanziare una matrice. Se vi allego il file del mio progetto c'è qualcuno che sarebbe in grado di aiutarmi per favore? Grazie Cordiali saluti.

PS. SE C'E' QUALCOSA CHE NON AVETE CAPITO DEL MIO PROGETTO CHIEDETIMI SU MSN!!!!! [applauso+] [8D]
Avatar utente
angel85
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: dom gen 21, 2007 10:40 am

allora?

Messaggioda angel85 » mar gen 23, 2007 12:10 pm

Ciao a tutti come va? Allora che ne dite? Del mio progetto? Ho visto 35 letture ma....niente risultato oppure magari un commento...così per sapere che cosa ho sbagliato....non è che vi chiedo molto ma il limite di questo post è entro questa settimana se no pazienza....io non voglio costringere con forza tutti coloro che stanno guardando il progetto....io cerco solo di capire che cosa significa istanziare la matrice....l'ho chiesto al prof e bastardamente mi fa:

"matrice non istanziata si intende che non hai allocato la memoria necessaria per la matrice (con delle malloc)".

Che vuol dì devo ricopiare il pezzo di codice per l'altra matrice?
perché mi ha detto di creare una matrice "nascosta" in cui sono inseriti randomicamente nelle varie celle i valori presi a caso dall'array. e un'altra visibile e ogni volta che la richiamo devo copiare i valori dalla matrice nascosta a quella "interfecciata" in modo da far veder all'utente quale carta 1 e carta 2 ha scoperto...vorrei superarlo al più presto possobile questo maledetto ostacolo...e poi il resto è tutto facie!!!!...
Buon proseguimento.
Avatar utente
angel85
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: dom gen 21, 2007 10:40 am

Messaggioda thomas » mar gen 23, 2007 12:20 pm

Ciao.

Vedi, tu hai copiato tutto il testo di un esercizio che devi fare, questo (almeno per quanto mi riguarda) fa un attimino innervosire; non è che non ti si vuole aiutare, ma non possiamo nemmeno farti tutto l'esercizio [^]

Ed appunto tu non hai chiesto questo, ma solo come si fa ad istanziare una matrice... che è una domanda lecita per un forum...

Questo per dirti che, secondo me, potevi evitare di copiare ed allegare tutto l'esercizio.

Passando al tuo problema, istanziare significare riservare spazio in memoria per un oggetto.
Normalmente quando non si sa a priori la dimensione dell'oggetto (questa matrice appunto), non puoi farlo nella parte di dichiarazione delle variabili, ma devi farlo a runtime, con la chiamata a malloc appunto.

Sono a digiuno da un po' con il C, quindi non scriverò codice di esempio.

Metti però caso che dall'utente ricevi in input la dimensione della matrice che devi creare, esempio (3,5), il tuo compito sarà di riservare spazio in memoria per un vettore di quelle dimensioni... qualcosa del tipo
Codice: Seleziona tutto
&puntatore_alla_matrice = malloc(int[3][5]);

&puntatore_alla_matrice è l'indirizzo in memoria (ritornato dalla chiamata a malloc) dove potrai inserire i dati della tua matrice
Codice: Seleziona tutto
puntatore_alla_matrice[0][0] = 30;



Spero di averti chiarito un po' le idee.
Prendi il codice con le pinze, ripeto, sono a digiuno da un bel po' con il C.
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma


mmmm

Messaggioda angel85 » mer gen 24, 2007 10:26 am

Mi è poco chiara la tua spiegazione....Possibile che non guardate il mio codice? EH?
Cosa ci vuole a guardarlo?
Avatar utente
angel85
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: dom gen 21, 2007 10:40 am

Messaggioda thomas » mer gen 24, 2007 10:46 am

Codice: Seleziona tutto
matrice = (char **)malloc(sizeof(char*)*nRighe);


Qui tu riservi spazio solo per nRighe caratteri, mentre la tua matrice è fatta da [nRighe][nColonne], quindi se ben ricordo dovresti istanziare lo spazio per nRighe*nColonne caratteri.
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Beh guarda questo link

Messaggioda angel85 » mer gen 24, 2007 11:00 am

Beh guarda questo link

C'è il progetto che avevo fatto perfettamente funzionante.....dopo con il cambiamento che mi ha fatto fare il professore sono andato in tilt solo per mostrre le carte man mano che le scoproo e dico sono uguali? si e dai punti (il controllo dovrebbe funzionare). Ma non riesco a creare una interfaccia della matrice del memory creata a seconda delle esigenze dell'utente!!! come in quella fissa che funziona da dio!!!
Datemi una mano se potete il giorno del destino si sta avvicinando in fretta!!!! Tempo 3 giorni!!!!! Aiuto

http://www.4shared.com/dir/1247296/a4d0 ... aring.html
Avatar utente
angel85
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: dom gen 21, 2007 10:40 am


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising