---++ Domande Homework 4 - Formula1 - (uso di record allocati dinamicamente) * Inserite le vostre domande usando la form [[#form][in fondo alla pagina]] * Vedi anche HomeWork4, SoluzioneHomework4, RisultatiHomework4. ---- %TOC% ---- ---+++ Qualche domanda.. (tanto per cambiare^^) La difficoltà che ho riscontrato negli homework non è tanto FARE il programma funzionante..ma farlo nel modo ESATTO (come logica, input/output) che lei ci chiede. E quando la dimensione/complessità dell'esercizio aumenta..son problemi :) Poichè da quando verrà pubblicato il testo completo dell'esercizio avremo solo una settimana per farlo, volevo chiederle se poteva magari perdere qualche carattere in più sulla descrizione dei passaggi più ostici del programma e sull'idea generale, in modo da farci capire bene come vuole che il programma si comporti..almeno quando il testo verrà pubblicato avremo già le idee chiare su cosa il programma deve fare e come deve comportarsi. Ad es leggendo quel che ha scritto..panico :) mi son venuti alcuni dubbi: - record allocati dinamicamente: non avendo fatto le liste con Silvestri..si è costretti a dichiarare via codice 'n' puntatori per ogni struttura che si usa, al di la che poi vengano allocate dinamicamente...il numero delle macchine verrà quindi chiesto in input? - il movimenti delle macchine avverrà in riferimento a cosa? Immagino alla pista, se la vediamo come una matrice, e quindi in base alle caselle..oppure dobbiamo vedercela con le gotoxy?:) - Ma la pista si vede a schermo? Sarà un po' come Forza4 che ad ogni mossa si stampa la situazione aggiornata o vuole un'implementazione in real time? - Non ho ben capito se ad ogni 'step' dobbiamo inserire le istruzioni (direzione/velocità) per ogni macchina prima di continuare con lo step successivo del ciclo..oppure se avviene tutto in tempo reale..da come ha scritto si capisce che con il tastierino si controllano le macchine ma non si capisce il modo, ovviamente non tutte assieme. Lo so che il testo è provvisorio quindi è normale che non sia spiegato tutto perfettamente..ma siccome dal 20 al 26 non è che ci sia poi tantissimo tempo, se si avessero le idee chiare sul programma uno potrebbe iniziare già a farsi un idea di come progettare la cosa, anche se in linee generali..piuttosto che arrivare al 23 senza aver ancora capito bene cosa fare :) Grazie per la pazienza prof. (Se sono l'unico a non aver capito esattamente come deve comportarsi il programma..non posto più, giuro :)) -- Comment added by Users.DaniloRossi on 17 Nov 2003 ---- ---++++ Re: record Chi ti dice di fare le liste, non va bene un array di puntatori o un array di record? ---++++ Re: gotoxy? Non servono le gotoxy ... le coordinate delle macchine sono rispetto all'angolo inferiore sinistro della tabella di caratteri che rappresenta la pista. (dammi il tempo di costruire un esempio!) ---++++ Re: la pista si vede a schermo? La pista viene ristampata ogni volta, come col Forza4. ---++++ Re: ad ogni step Ad ogni 'turno' si inserisce una stringa di R caratteri compresi tra 1-9 (con R pari al numero di macchine ancora in gara. Il numero 1-9 indica (prendendo il 5 del tastierino numerico come 0,0) in che direzione aumentare/diminuire le velocità. ---++++ Re: l' unico? Piuttosto devi essere l'unico che si è letto l'esercizio (e che ho postato 4 ore fa) -- Comment added by Users.AndreaSterbini on 17 Nov 2003 ---- ---+++ No... Non è l'unico...piu ke altro nn avevo visto il link delle DomandeHomework4 :) Boh a me la prima domanda ke sorge spontanea è...che è un record? :) L'esercizio dice ke la makkina va implementata con un record dove ci metti varie cose..ma sinceramente nn ho ancora capito cos'è. Capito va, m'aspetta una bella sfida :) -- Comment added by Users.DavidVulpetti on 18 Nov 2003 ---- ---++++ Re: record record = struct -- Comment added by Users.AndreaSterbini on 18 Nov 2003 ---- ah ok thx :) -- Comment added by Users.DavidVulpetti on 18 Nov 2003 ---- ---+++ Diagonali Riscrivo le seguenti frasi sul controllo delle diagonali: per controllare le diagonali esistono due casi, a seconda che sia maggiore l'incremento deltax (oppure deltay) <b>...per tutte le colonne (righe) corrispondenti all'incremento maggiore </b> Sarebbe: in tutte le colonne in cui la macchina si sposterebbe nella direzione con velocita' maggiore? <b>si calcoli l'ascissa y (ordinata x) della retta, arrotondando all'intero inferiore </b> non ho capito cosa devo calcolare, ad ogni modo l'ascissa mi sembra un intero... -- Comment added by Users.LivioDellaCorte on 18 Nov 2003 ---- ---+++ Puntatori Scusate l'off topic ma non sapevo dove fare questa domanda al prof. Allora stavo guardando il mio codice di forza 4 e volevo provare a mettere al posto delle 2 variavili globali x e y due puntatori. Mi sono accorto che alla prima mossa del gioc 1 la pedina veniva inserita in 5 0 poi se il gioc 2 dava come colonna 0 la pedina veniva inserita in 0 0 invece di 4 0. Smanettando un po sul codice ho provato a mettere invece di *x-- x=-1 e è tornato tutto normale. Ho provato anke a fare una funzione con i puntatori dove vengono decrementati o incrementati con il---++ e il -- e da sempre lo stesso problema. E' una cosa normale? Grazie e scusate ancora l'OT! -- Comment added by Users.DaniloDauria on 18 Nov 2003 ---- ---++++ Re: Diagonali Sì, si considera l'incremento della x (y) maggiore e si calcola la y (x) corrispondente, arrotondata all'intero inferiore. -- Comment added by Users.AndreaSterbini on 18 Nov 2003 ---- ---++++ Re: Grazie per le risposte prof, ora mi è più chiaro, attenderò la pubblicazione degli esempi prima di iniziare. -- Comment added by Users.DaniloRossi on 18 Nov 2003 ---- ---+++ Siete nascosti? Professore non so se dipende solo da me, ma nella Main web di programmazione il link <nop>"DomandeHomework4" non compare -- Comment added by Users.MatteoLaBella on 18 Nov 2003 ---- ---+++ Macchinine.. Professore, noi nn sappiamo quante makkinine giocano quando scriviamo il programma, ma lo prendiamo in input da una scanf all'inizio. Volevo chiederle..possiamo (o dobbiamo) usare un vettore di struct a dimenzione variabile? ovvero lo "inizializziamo" dopo aver saputo quante makkine giocano con un puntatore alla struct macchina e una malloc? -- Comment added by Users.DavidVulpetti on 19 Nov 2003 ---- ---++++ Re: Macchinine potete ... potete ... -- Comment added by Users.AndreaSterbini on 19 Nov 2003 ---- ---+++ Altra cosa sulle macchinine.. Nn avendo ancora l'input e output del programma nn mi è kiara una cosa. Le macchinine hanno un "nome" ke può essere una lettera A-Z, a-z o 0-9 oppure il loro nome è un "codice" di tutte e 3 queste soluzioni insieme, del tipo Macchina 1 = Av7 Macchina 2 = Fs2 ecc..? -- Comment added by Users.DavidVulpetti on 19 Nov 2003 ---- ---++++ Re: Altra cosa sulle macchinine.. E' un solo carattere. -- Comment added by Users.AndreaSterbini on 19 Nov 2003 ---- ---+++ Prima scanf "segue nell'input una successione di N caratteri che corrispondono a ciascuna macchinina" Questo vuol dire ke N e il nome delle makkinine vanno presi sulla stessa scanf o una dopo? Domanda un po' stupida ma volevo saperlo di preciso :) -- Comment added by Users.DavidVulpetti on 19 Nov 2003 ---- ---+++ Riguardo pacman Quando lancio pacman mi da un errore windows. Ho fatto il debug e mi dice: Program received signal SIGSEV, Segmentation fault alla riga 99 maze[HEIGHT-y-1][x] = ' '; // cancello la casella in cui si trovava Pacman non so se può dipendere da quello che il prof ha detto di scrivere quando si compila il programma. Siccome sto usando il Dev C---++ non so come devo fare per scrivere quella riga. -- Comment added by Users.DaniloDauria on 19 Nov 2003 ---- ---+++ Proposta Immagino che la proposta che sto per fare non le piacerà molto, ma la propongo cmq tanto per condividere l'idea. :-) <verbatim> Per quando riguarda la consegna dei programmi, potremmo consegnare inizialmente una versione beta, lei la testa e dopo ci lascia un paio di giorni per consegnare una versione corretta in base ai test da lei fatti. Infine vengono fatti i test definitivi, assegnando un punteggio maggiore a chi ha consegnato direttamente una versione beta corretta e minore agli altri a seconda dei risultati raggiunti nel test definitivo. </verbatim> -- Comment added by Users.EmanueleQuattrini on 19 Nov 2003 ---- ---++++ Re: Prima scanf Diciamo che il primo numero N è seguito da accapo ad esempio: <verbatim> 5 ABCDE </verbatim> ---++++ Re: Riguardo pacman Il problema è che le stringhe che definiscono il labirinto sono in una area protetta e senza l'opzione che ho scritto non ci si può scrivere sopra. Non so quale sia l'opzione per Devc---++. Potresti creare un secondo array e copiarvi le stringhe con strdup. Queste stringhe sarebbero nella memoria modificabile. Ho aggiornato il codice. ---++++ Re: Proposta Capisco che ci teniate assai a fare bella figura :-) ma se facciamo così gli esercizi si accavallano ancora di più e invece di fare l'esercizio seguente vi mettete a correggere l'esercizio precedente. Con lo schema di adesso voi imparate: * facendo l'esercizio * aiutandovi a vicenda * scoprendo quali errori avete fatto * vedendo la mia implementazione * ammirando? l'implementazione dei colleghi che hanno passato i test * esaminando la implementazione dei colleghi che non hanno passato i test Lo scopo di questi giochi non è prendere punti, ma imparare divertendoci. Se volete vi dò la soddisfazione di fare l'upload della versione "corretta", ma non chiedetemi di ri-testarla ... e se la nuova versione non passa i test che facciamo? andiamo in loop? :-) -- Comment added by Users.AndreaSterbini on 19 Nov 2003 ---- ---+++ Tutto apposto Adesso funziona Grazie :) P.S. Che è strdup? -- Comment added by Users.DaniloDauria on 19 Nov 2003 ---- ---+++ Codice Pacman Nn è il titolo di un film :) Professore ho provato a comapilare il Pacman su cygwin e il gcc mi ha fatto notare ke mancano i ':' dopo il default alla fine della switch (credo mankino quelli, almeno nn mi da più l'errore dopo ke li ho aggiunti) e poi mi da una cosa del tipo warning: assignment makes pointer from integer without a cast a queste righe di codice: for (i=0 ; i<HEIGHT ; i---++) maze[i] = strdup(themaze[i]); cos'è? -- Comment added by Users.DavidVulpetti on 20 Nov 2003 ---- ---+++ Buongiorno! Prof. lo pubblica sul sito Pacman? -- Comment added by Users.ClaudiaCorsaletti on 20 Nov 2003 ---- ---++++ Re: Buongiorno Vedi PacMan ---++++ Re: Tutto apposto strdup = string duplicate Fai 'man strdup' in linux -- Comment added by Users.AndreaSterbini on 20 Nov 2003 ---- ---++++ Re: Codice Pacman Stasera me lo riguardo -- Comment added by Users.AndreaSterbini on 20 Nov 2003 ---- ---+++ Re: Codice Pacman Io l'ho compilato su Dev-C---++ su windows e funziona. -- Comment added by Users.BeniaminoLarocca on 20 Nov 2003 ---- ---+++ Ma il canale A-D è considerato??? Allora più andiamo avanti con gli esercizi,più mi accorgo che noi del canale A-D siamo completamente fuori con il programma,oppure Lei Prof si basa solo sul programma del suo canale...Mi riferisco a questo:l'obiettivo dichiarato di questo esercizio è l'uso di Struct;bene,Piperno ha accennato le Struct il giorno dei funerali dei Militari di Nassiryia, e ripeto,accennato.Mi spiega Lei come facciamo noi ad usare in modo corretto le strutture e simili con 7 giorni a disposizione,visto che la versione con input e output dell'Homework 4 esce solo oggi(senza considerare che oggi c'è anche l'esonero di Algebra)???Io penso che la parte---+ difficile del corso di Prog1 sia dai puntatori in poi...e per usare in modo corretto gli argomenti di questa parte(spiegati una volta sola nel canale A-D,se non fosse che fortunatamente oggi il Prof Salvo ha provato ad aiutarci a capire l'uso delle Struct)7 giorni sono una barzelletta. Lo stesso Prof Salvo,viste le nostre condizioni,ha affermato che la consegna di Mercoledì prossimo è troppo ravvicinata.Che si fà? -- Comment added by Users.DavidCordella on 20 Nov 2003 ---- ---+++ Re: Ma il canale A-D è considerato??? Si allunga un pochino la consegna per darvi il tempo di prendere il libro, aprirlo al capitolo delle struct e studiarlo :-) . Basta mezz'ora? :-) . A parte le ca**ate ... allungo la consegna. -- Comment added by Users.AndreaSterbini on 20 Nov 2003 ---- Mi chiede Users.LucaAlesini: ---+++ Array allocati dinamicamente Io so che non posso definire un array dandogli un N in inpu perchè il programma gli array li alloca all'avvio dello stesso quindi: o c'è un modo per farlo che il professor Piperno non ha spiegato, oppure bisogna fare una lista dinamica con puntatori. Non ho idea inoltre, di come fare delle liste di record allocati dinamicamente (come lei dice giustamente in una delle sue risposte su twiki) ma presumo che si tratti di una lista dinamica fatta con i record delle macchinine... ---+++ Cosa intende per velocità? Delta x e delta y sono le variabili dove dico D QUANTE caselle si sposta la macchinine ogni turno? lei dice che la velocità varia tra -1,0 e 1.. quindi piu che parlare di velocità si tratta semplicemente della direzione presa dalla macchinina secondo le nostre scelte.. inoltre c'è una cosa che è oscura... qui si parla di N macchinine, ma noi le controlliamo tutte?ne controlliamo una? se una: quale? ---+++ Stesso carattere In che senso le macchinine possono occupare lo stesso carattere? nel senso che si possono trovare sulle stesse coordinate X,Y? non sarebbe meglio che se succedesse si eliminassero tutte e due le macchinine dal gioco? ---+++ controllo delle diagonali non mi è chiara la funzione di controllo delle diagonali... piu che controllare le diagonali dobbiamo controllare tutti gli spazi adiacenti alla macchinina per vedere e al turno successivo va a sbattere contro il muro. Anzi piu precisamente bisogna controllare la casella adiacente a quella occupata dalla macchinina nella direzione in cui la suddetta si dirige. quindi se io nelle variabili deltaX ho -1 e deltaY ho 0 al momento del movimento vado a controllare la coordinata X-1,Y e controllo che non sia un muro (o che lo sia) e quando vado a ristampare la pista devo eliminare quella macchinina e ne devo aggiornare il record in maniera che segnalo che questa ha sbattuto. --- E io rispondo... ---++++ Re: Array allocati dinamicamente E' possibile definire una struttura dati (anche un array) di dimensioni dinamiche usando la funzione malloc. ---++++ Re: Cosa intende per velocità? deltax e deltay sono le componenti della velocità di una macchinina. Deltax e deltax possono variare *di*---+1,0,-1 e quindi possono essere *incrementate o decrementate* di 1 (o lasciate invariate) a seconda del numero in input. Ad esempio il numero 8 corrisponde ad *incrementare deltay di 1* e lasciare invariata deltax. Le nuove coordinate x e y della macchinina si ottengono aggiungendo rispettivamente deltax e deltay. ---++++ Re: Stesso carattere Più macchinine possono occupare le stesse coordinate x,y ... e si ignorano, non voglio farvi gestire anche le collisioni tra macchinine. Il carattere mostrato è quello dell'ultima macchinina che occupa la posizione x,y. ---++++ Re: controllo delle diagonali Dato che ad ogni turno una macchinina si sposta di deltax e deltay bisogna controllare tutto il percorso fatto dalla macchinina per evitare che urti su uno spigolo di un muro. -- Comment added by Users.AndreaSterbini on 20 Nov 2003 --- ---++++ Grazie, ma mi manca un dettaglio Continuo a non comprendere il fatto se le macchinine le controlliamo tutte o una... Oppure tutte quante una per volta mi sembra piu plausibile :) deltaX e deltaY sono dunque cumulativi se io mi sposto per tre turni sempre verso---+1,0 alla fine del terzo turno avro in deltaX +3 e in deltaY 0 giusto? Oppure ad ogni turno posso pigiare piu volte i tasti del tastierino numerico in modo da decidere la velocità esatta? abbiamo un tempo limite per decidere la velocità e la direzione? Se io vado in un turno a---+1, 0 e al turno successivo vado a +1, +1 mi sposterò alle coordinate X+2, Y+1? Chiaro tutto il resto :) -- Comment added by Users.LucaAlesini on 20 Nov 2003 ---- ---++++ Re: Grazie, ma mi manca un dettaglio Ad ogni turno: * si leggono tanti caratteri quante sono le macchinine "in gara" * ciascuna velocità viene aggiornata di conseguenza * ciascuna macchinina viene aggiornata di conseguenza Esempio: ci sono ancora 3 macchinine in gara: * input: 689 * La prima macchinina aggiorna la sua deltax=deltax---+1 * La seconda aggiorna aggiorna la sua deltay=deltay---+1 * La terza macchinina aggiorna le sue deltax=deltax---+1 e deltay=deltay+1 Si ricalcolano le posizioni delle 3 macchinine e si controllano le diagonali -- Comment added by Users.AndreaSterbini on 20 Nov 2003 ---- ---+++ Info La macchina che usa lei per le correzioni ha installato il file header stdlib.h? altrimenti risulta impossibile utlizzare malloc() I caratteri da introdurre possono essere acquisiti con la funzione getch() ho vanno inputati con scanf()? Se si può usare getch() nel mio compilatore questa funzione si trova nel file conio.h che so lei non ha installato sulla sua macchina ma compilando con dev-c---++ anche senza includere conio.h il programma viene compilato con successo. La sua macchina richiede questa libreria o come dev-c++ non ne ha bisogno? Grazie -- Comment added by Users.AlessioDiMauro on 20 Nov 2003 ---- ---+++ Obiettivo del gioco Dovrete implementare una corsa di Formula1. ....Sarà utile vedere in classe l'implementazione di un rozzo Pacman ... domanda: noi ragazzi del corso a-d come facciamo che non ci è mai stato spiegato nulla riguardo l'implementazione del programma Pacman? quando ciò avverà? spero che la data non sia spostata solo di un giorno... grazie dell'attenzione! -- Comment added by Users.LorenzoCiapetti on 20 Nov 2003 ---- scusi prof per lo spostamento della data intendevo dire il giorno della consegna. -- Comment added by Users.LorenzoCiapetti on 20 Nov 2003 ---- ---++++ Quando escono gli esempi del gioco F1(2003) Quando uscirà l'esempio? -- Comment added by Users.DarioFiorenza on 20 Nov 2003 ---- ---+++ Grazie mille... ...professore, adesso che ho tutte le informazioni necessarie, posso incominciare a realizzare il programma :) -- Comment added by Users.LucaAlesini on 20 Nov 2003 ---- ---+++ Scusi prof. Mi sono rimasti solo un paio di dubbi: - Le macchine, all'inizio, dove vanno posizionate e come? - Il controllo della diagonale: la macchinina si muove con una componente orizzontale ed una verticale. Di conseguenza dobbiamo considerare la diagonale risultante e gestirne eventuali collisioni: non ho capito però come vuole che la calcoliamo (nel senso, come prendere quelle 'caselle' del quadrato delimitato dallo spostamento verticale e orizzontale che contengono la diagonale). -- Comment added by Users.DaniloRossi on 20 Nov 2003 ---- ---++++ Re: Info Sulla mia macchina stdlib.h c'e'. Usate getchar che sta in stdio.h ---++++ Re: Obiettivo del gioco PacMan è in linea da diversi giorni. Chiedi a IvanoSalvo. ---++++ Re: Quando escono gli esempi del gioco F1(2003) Scusatemi, dato che sono sovraccarico, vi scrivo un esempio a mano stasera (stanotte) e vi faccio gli esempi entro domenica. Intanto cominciate a svolgere l'esercizio, la scadenza è prorogata fino a lunedì 1 Dicembre notte. ---++++ Re: Scusi prof. Grazie, mi ero dimenticato di farvi leggere in input questo dato importante. Le coordinate x e y del punto di partenza di tutte le macchinine (tutte assieme) vengono lette subito dopo il numero N di macchinine e prima dei caratteri ch le rappresentano. Aggiungo questa nota all'esercizio. -- Comment added by Users.AndreaSterbini on 20 Nov 2003 ---- ---++++ Re:Re: Tnx prof. Ma dobbiamo fare un controllo nel caso le coordinate di partenza corrispondano ad un carattere diverso da ' ' (spazio), ovvero piazziamo le macchinine sul muro:)? Se ha tempo può magari mettere un es sulla diagonale? Non riesco a capire in che modo la calcola lei. -- Comment added by Users.DaniloRossi on 20 Nov 2003 ---- ---+++ La Retromarcia E' possibile andare indietro e vincere o dobbiamo escludere questa possibilità gestendo questa cosa nel programma ? -- Comment added by Users.AlessandroSpinelli on 21 Nov 2003 ---- ---+++ Uso di pista.h Professore ma noi in pratica cosa dobbiamo farci con pista.h? Io l'ho messo nella cartella delle librerie di Cygwin, l'ho caricata nel programma con un include e con la funzione display() presa da Pacman l'ho stampata, solo ke ovviamente ho definito all'inizio le variabili di altezza e larghezza in relazione alla sua pista (ho contato "a mano"). Solo ke ora ho letto ke lei lo proverà anke con altre piste...come si fa allora? Usa piste con gli stessi valori di altezza e larghezza? -- Comment added by Users.DavidVulpetti on 21 Nov 2003 ---- ---+++ Divisione? quando si dovrà calcolare l'ascissa y (ordinata x) della retta, arrotondando all'intero inferiore (come scritto nel testo dell'esercizio), bisognerà usare una divisione? Altrimenti non capisco cosa bisogna arrotondare... -- Comment added by Users.LivioDellaCorte on 21 Nov 2003 ---- ---+++ Copiatura delle stringhe in memoria modificabile Professore ho provato a fare come ha fatto lei con il Pacman, ovvero a creare un char *race[HEIGHT] = { 0 }; e poi a fare la copiatura delle stringhe in memoria modificabile così: for (i=0 ; i<HEIGHT ; i---++) { race[i]=strdup(therace[i]); } solo ke compilando il cygwin mi da questo errore: warning: assigment makes pointer an integer without a cast dove ho sbagliato? -- Comment added by Users.DavidVulpetti on 21 Nov 2003 ---- precisazione...l'errore me lo da proprio nella riga race[i]=strdup(therace[i]); -- Comment added by Users.DavidVulpetti on 21 Nov 2003 ---- ---+++ Retromarcia Dando per scontato che se una macchinina supera il traguardo in retro non vince, mi chiedo: se poi ricomincia ad andare dritta e risupera il traguardo non dovrebbe vincere lo stesso perchè è come se fosse indietro di un giro. Come gestiamo questa eventualità? ---+++ free() Penso che per tenere al minimo lo stress da homework userò un vettore dinamico di struct per le macchinine. Volevo sapere, però, se questo ragionamento con le liste è corretto: <verbatim> Allocata in memoria una lista di n macchinine, se una va a sbattere, posso liberare la memoria che conteneva i dati di quella macchinina con free(), e fare in modo che il puntatore che puntava la struct della macchinina incidententata punti la struct della macchinina successiva. </verbatim> Se il ragionamento è giusto con un numero elevato di macchinine si risparmia parecchia memoria. Immagino che con un vettore dinamico una cosa del genere non sia possibile, o no? -- Comment added by Users.EmanueleQuattrini on 21 Nov 2003 ---- ---++++ Re: (controllo sulle coordinate di partenza) Non ce n'e' bisogno, se le macchinine sono nel muro "sbattono" tutte e si esce dal gioco. ---++++ Re: La Retromarcia E' chiaro che questo e' un modo di vincere. Non va gestito in nessun modo particolare. ---++++ Re: Uso di pista.h Dovete scrivere nel vostro programma *#include "pista.h"*. Questo mi permette di usare nei miei test piste diverse da quella data come esempio. ---++++ Re: Divisione? Se ti ricordi come si fa a calcolare le coordinate di un punto lungo una retta che passa per due punti ti accorgerai che c'e' una divisione da fare. ---++++ Re: Copiatura delle stringhe in memoria modificabile Non hai incluso string.h ---++++ Re: Retromarcia Lasciate stare. ---++++ Re: free() Potete usare malloc per allocare sia vettori che struct (sia vettori di struct, sia vettori di puntatori a struct .....) . Usate free per liberare la memoria che non serve. -- Comment added by Users.AndreaSterbini on 21 Nov 2003 ---+++includere pista.h scusi prof. ma per includere il file pista.h,visto che non dobbiamo consegnarlo insieme al programma,basta mettere al posto di #include<stdio.h> #include"pista.h"??? -- Comment added by Users.DiegoCammarano on 21 Nov 2003 ---- ---+++ Includere pista.h scusi prof. ma per includere il file pista.h,visto che non dobbiamo consegnarlo insieme al programma,basta mettere al posto di #include<stdio.h> #include"pista.h"??? -- Comment added by Users.DiegoCammarano on 21 Nov 2003 -- Comment added by Users.DiegoCammarano on 21 Nov 2003 ---- ---+++ Re: Re: free() Ho notato che il compilatore non si lamenta per una cosa di questo tipo: <verbatim> /* Uso calloc in modo da avere il vettore inizializzato a 0 */ Pippo *pippo = calloc(n_pippi, sizeof(Pippo)); // Libero (come credo che non si debba fare) la memoria del primo e del terzo // elemento del vettore che per qualche motivo non mi servono più free(pippo---+1); free(pippo---+3); /* Confronto il vettore con una condizione */ for(i=0; i<n_pippi; i---++) if(pippo[i].datiPippo==3) return 0; </verbatim> In questo modo il ciclo controlla anche le zone di memoria liberate, con risultati imprevedibili. Come faccio allora a liberare la memoria occupata dagli elementi del vettore che non mi servono più, mantendo però il vettore compatto? Io avevo pensato di farlo nel modo seguente: <verbatim> 1 - ordino il vettore lasciando alla fine gli elementi che non servono più 2 - uso la funzione realloc con le nuove dimensioni del vettore senza gli elementi che non servono in modo che questi ultimi vengano troncati </verbatim> Esiste un metodo più semplice? -- Comment added by Users.EmanueleQuattrini on 21 Nov 2003 ---- ---+++ Posione iniziale macchine Prof nn ho capito se le macchine in partenza si trovano tutte sullo stesso punto, quindi una sull'altra visualizzando solo il simbolo dell'ultima, oppure ad esempio affiancate. -- Comment added by Users.MaurizioTrano on 21 Nov 2003 ---- ---++++ Re: Includere pista.h Basta tenere i due file nella stessa directory e inserire in testa al vostro programma la riga: #include "pista.h" ---++++ RE: Re: Re: free() Certo, puoi fare cosi' ma ti complichi veramente tanto la vita. Non ne vale la pena. Se usi un vettore di struct libera tutto il vettore alla fine del programma. Se vuoi liberare le macchinine una alla volta le devi allocare separatamente. Ma in questo caso o ne fai una lista linkata oppure usi un vettore di puntatori per riferirle. %RED% ---+++ ATTENZIONE: ho apportato delle modifiche semplificando l'esercizio %FINE% -- Comment added by Users.AndreaSterbini on 21 Nov 2003 ---- ---++++ Re: Posione iniziale macchine La prima che hai detto (tutte assieme) -- Comment added by Users.AndreaSterbini on 21 Nov 2003 ---- ---+++ strdup? Nel testo dell'Homework 4 c'è un errore lei dice di per sapere il numero di colonne contate il numero di caratteri di una riga (con strdup) a lezione non ha detto di contare il il numero di colonne con (strlen)? Mi dica se sbaglio.... :-) -- Comment added by Users.DarioFiorenza on 21 Nov 2003 L'ho corretto -- Users.AndreaSterbini ---- ---+++ Come funzionano la sizeof e la strdup? Se non ho capito male queste due istruzioni ci consentono di individuare le dimensioni della pista ma a cosa serve? -- Comment added by Users.JacopoBusso on 21 Nov 2003 ---- ---+++ NumeroGiocatori se ho capito bene il potenziale numero di macchine in gara e' illimitato. ho ragione?. adios.. ocram -- Comment added by Users.MarcoValerioBarbera on 21 Nov 2003 ---- ---++++ Re: dimensioni della pista? Se permetti ti rispondo con una serie di domande: * Come fai a stampare la pista? * come fai a controllare se la macchinina è all'interno della matrice? ---++++ Re: numero giocatori Esatto -- Comment added by Users.AndreaSterbini on 22 Nov 2003 ---- ---+++ Problemi con le dimensioni Professore ho seri problemi nel ricercare le dimensioni della pista con sizeof e strlen. Potrebbe almeno accenare qualcosina per cortesia? Ho provato a cercare sul libro come poter fare, ma purtroppo mi sembra di non aver trovato nulla. -- Comment added by Users.MaurizioTrano on 22 Nov 2003 ---- ---+++ Problemi con le dimensioni 2 Con strlen ho risolto ma con sizeof purtroppo no. -- Comment added by Users.MaurizioTrano on 22 Nov 2003 ---- ---+++ Dimensioni della pista? Noi del primo corso non abbiamo ancora esaminato le due funzioni con attenzione (abbiamo usato sizeof solo all'interno della malloc per definire il quantitativo di memoria da allocare)forse è per questo che le due mi risultano sconosciute per determinare una pos all'interno della pista (conosco la gotoxy ma non si puo usare,giusto?). Inoltre ho un'altra domanda. Quando prelevo i caratteri che indicano le auto (di tipo char) credo mi rimanga nel buffer della tastiera l'invio di conferma perciò mi salta la successiva immissione dati. c'è qualcosa che mi consente di evitare ciò? -- Comment added by Users.JacopoBusso on 22 Nov 2003 ---- ---+++ Problemi con le dimensioni 3 Tutto ok :) ho fatto tremila prove alla fine ho trovato il modo giusto. P.s. Potrebbe sembrare ma nn è spam. -- Comment added by Users.MaurizioTrano on 22 Nov 2003 ---- ---+++ Sul getchar Per prendere in input i caratteri ke determinano lo spostamento della makkina, utilizzo questo pezzo di codice input[0]=getchar(); for (i=0;i<nmacchine;i---++) { input[i]=getchar(); dove input è un vettore di caratteri ke mi sono allocato prima...se nn metto questa parte prima del for input[0]=getchar(); nn funziona...ovvero ho 3 makkine e mi legge solo i primi due caratteri ke metto...come mai? -- Comment added by Users.DavidVulpetti on 22 Nov 2003 ---- ho capito cos'è...prima di questo, faccio la scanf per il numero delle makkine e le coordinate...quindi il getchar dentro il for legge come primo carattere l'accapo della scanf precedente...senza scanf, funziona bene senza la riga input[0]=getchar(); Perkè? -- Comment added by Users.DavidVulpetti on 22 Nov 2003 ---- ---+++ Problemi col Getchar Niente, ho problemi col getchar...in pratica legge sempre gli ultimi caratteri dell'input precedente..per esempio...se ci sono 3 makkine se scrivo ABCD lui giustamente mi prende solo i caratteri ABC...solo ke D me lo legge al successivo getchar, come primo carattere... -- Comment added by Users.DavidVulpetti on 22 Nov 2003 ---- ---+++ Re: Problemi col Getchar Anche io ho questi problemi col getchar e sto perdendo un sacco di tempo e non riesco a trovare una soluzione. -- Comment added by Users.MaurizioTrano on 22 Nov 2003 ---- ---+++ Gestione degli "errori" Professore noi dobbiamo considerare sempre esatti il numero di input ke lei mette nei test? Voglio dire...se le makkine ke giocano sono 3, lei mette solamente 3 caratteri per le makkine e 3 per la direzione? Se poi resta solo una makkina in gioco, lei mette 1 carattere e basta per la direzione? Oppure ne mette anke 100 e noi dobbiamo considerare solo il primo o i primi 3 se giocano 3 makkine? Ho capito come far funzionare bene la getchar...ma in questo secondo caso andrebbe tutto farsi benedire..spero ke lei consideri sempre il numero esatto :) -- Comment added by Users.DavidVulpetti on 22 Nov 2003 ---- ---+++ Strdup Non ho trovato riferimenti a questa fuzione ne tramite 'man' ne tramite libri..visto che sono curioso :) cosa fa di preciso? Se copia e basta perchè non usare una strcpy, ad es? Per la diagonale, che non ho capito come calcolare, immagino di aver trovato qual è il mio problema...non mi ricordo come si fa a "calcolare le coordinate di un punto lunga una retat che passa per due punti"..ehm :/ -- Comment added by Users.DaniloRossi on 22 Nov 2003 ---- ---+++ hihihi Se facciamo questo andiamo a lavorare alla Clementoni...:) -- Comment added by Users.StefanoColasanti on 22 Nov 2003 ---- ---+++ Altra cosa: Mi sono messo ora a dare un occhiata a come fare il programma...stavo guardando il file pista.h, e precisamente la funzione leggiMossa...notando anche come è stato definito l'array dei delta...se si inserisce 'q' la funzione ritorna 0, ok. Ma se dal tastierino si preme 0 (lo zero) la funzione non ritorna lo stesso 0, provocando la stessa reazione di come se avessimo premuto 'q'? Se così non fosse (ho dato un'occhiata non approfondita) a che serve nell'array delta gestire il carattere 'zero' del tastierino se tanto è escluso dall'input.. -- Comment added by Users.DaniloRossi on 22 Nov 2003 ---- ---+++ X Danilo Rossi La strdup nel man esiste una documentazione guarda bene :-) . Che distribuzione hai? Io una Red Hat 9.0 -- Comment added by Users.DarioFiorenza on 22 Nov 2003 ---- ---++++ Re: Tnx Dario, ci ho provato ma non mi ha dato risultato, ora non ricordo di preciso il messaggio, comunque non mi ha dato nulla...io ho la Mandrake 9.0.. -- Comment added by Users.DaniloRossi on 22 Nov 2003 ---- ---+++ X tutti quelli che sono in crisi con la getchar(). Ricordatevi come si comportano i caratteri e cosa li differenzia dagli interi. Ricordato ciò..... passate da così :-( a :-) -- Comment added by Users.DarioFiorenza on 22 Nov 2003 ---- ---+++ Re: strdup Sulla mia pagina personale su twiki ho messo l'output da me ricevuto con il comando "man strdup". Visto che si nominano distribuzioni linux un *W slackware* mi pare necessario. :-) -- Comment added by Users.EmanueleQuattrini on 22 Nov 2003 ---- ---+++ Strdup Seguendo il codice di pacman definisco l'array che deve contenere la copia di dell'array therace ma definendolo prima del main non me lo fa inizializzare. Così sono costretto a definirlo nel main. Quindi faccio come ha fatto il professore per pacman faccio un ciclo e assegno race[i]=strdup(therace[i]); il programma mi va in segmentation fault x quale motivo? -- Comment added by Users.DarioFiorenza on 22 Nov 2003 ---- ---+++ Getchar o Scanf Se volete potete anche utilizzare la scanf in questo modo: <verbatim> scanf("%s",&input) </verbatim> è solo che c'è un problema: la scanf considera lo spazio come delimitatore tra due input cioè se inserisco: m (spazio) n è come che avessimo inserito <br> m<br> n<br> mentre con la getchar avremmo una stringa del tipo m (spazio) n -- Comment added by Users.MatteoLaBella on 22 Nov 2003 ---- ---++++ Re: Problemi con le dimensioni *strlen* torna il numero di caratteri della stringa che gli viene passata per argomento (senza contare lo 0 finale). *sizeof* torna il numero di bytes della struttura che gli viene passata. Per trovare il numero di elementi di un array bisogna sapere le dimensioni dell'array e di un elemento. ---++++ Re: Sul getchar (caratteri spuri) Leggete un carattere per volta e ignorate i caratteri che non vi servono. ---++++ Re: Gestione degli "errori" Se fate come è scritto nell'esercizio (buttando i caratteri che non servono) non potete sbagliare. ---++++ Re: Strdup Strdup alloca anche la stringa, strcpy la copia in una stringa già allocata. ---++++ Re: Altra cosa (carattere 0 in delta) Serve a tenere gli indici uguali ai numeri (per es. indice 4 per il tasto '4'). ---++++ Re: strdup il prototipo di strdup (contenuta in *string.h* ) è: char * strdup(char *); ---++++ Re: segmentation fault Hai allocato l'array dei puntatori a stringhe? (ricorda che ora il numero di righe te lo devi calcolare a runtime) ---++++ Re: Getchar o Scanf c = getchar() è equivalente a usare scanf("%c",&c). -- Comment added by Users.AndreaSterbini on 23 Nov 2003 ---- ---+++ Quando le macchine sbattono... ...nn vanno più visualizzate. Mi sono trovato un metodo mio per fare questo, solo ke pare ke funzioni solo per 4 makkine...da 5 in su sfasa e nn capisco perkè. In pratica faccio un controllo su tutte le posizioni del vettore di struct allocato all'inizio. Se la posizione contiene una makkina ke ha sbattuto, la cambio con quella successiva e così via, in modo tale ke risultano, alla fine del ciclo, tutte le makkine in gioco nelle prime posizioni, e quelle ke hanno sbattuto nelle ultime...ke verranno poi escluse al ciclo successivo perkè decremento una variabile ecc...nn capisco perkè funziona solo da 1 a 4 makkine... -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- l'ho riguardato 300 volte è impossibile ke nn funziona...teoricamente fa tutti gli spostamenti giusti, ho fatto i calcoli anke per 6-7 makkine su un foglio di carta e teoricamente all'inizio del ciclo successivo dovrebbe leggere il numero esatto di makkine e il nome esatto di makkine rimaste...ma nn capisco perkè nn funziona con più di 4 makkine -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- ---+++ Ancora sulla Strdup e Pacman Prima di fare l'esercizio vorrei capire alcune cose su Pacman che mi sono ancora oscure. 1) ancora non ho capito a cosa serve copiare (con una strdup) l'array di stringhe char * theMaze[]. Non posso lavorare solo su questo? Non mi complicherei la vita poi a dover fare maze[HEIGHT-y-1][x]. 2) char * maze[HEIGHT] = { 0 }; perchè inizializzo la prima stringa a zero? Tanto poi ci metto theMaze[]... -- Comment added by Users.LivioDellaCorte on 23 Nov 2003 ---- ---+++ Ancora sulla Strdup e Pacman leggi su. -- Comment added by Users.LivioDellaCorte on 23 Nov 2003 ---- ---++++ Re: Ancora sulla Strdup e Pacman Le stringhe usate nell'inizializzatore di themaze sono inserite dal compilatore in un'area costante, non modificabile, quindi non è possibile aggiungerci il carattere della macchina. Ci sono due modi per curare questo comportamento: * compilare usando l'opzione *-fwritable-strings* * oppure copiare le stringhe in memoria modificabile in automatico -- Comment added by Users.AndreaSterbini on 23 Nov 2003 ---- ---+++ Re:Quando le macchine sbattono... Io uso una variabile "int crash" come flag (definita nella struct macchine) che indica se una macchina a sbattuto o meno, quando questa flag e' attivata, semplicemente ignoro nella stampa la macchina e vado avanti... pero' ancora nn ho fatto una fase abbastanza approfondita di testing percio' potrebbe non funzionare in alcuni casi :-P -- Comment added by Users.AntonioVillani on 23 Nov 2003 ---- ---+++ Risolto problema del segmantation fault Ho trovato il modo di utilizzare il sizeof.... se qualcuno non riesce ancora a calcolare il sizeof si legga le risposte del prof il modo per calcolare il numero di righe è presente nelle sue risposte(io questo problema lo avevo risolto anche senza leggere le sue risposte perche la soluzione e molto semplice) ma se qualcuno si è intrippato e meglio che non perda tanto tempo sulla sizeof....il programma è molto più complicato di quanto pensassi in partenza ci vorranno almeno due giorni di lavoro per renderlo efficiente al 100%. Un altro consiglio che do a tutti di guardarsi bene packman perchè il codice potrebbe essere molto utile per l'implementazione dell'homework 4 questa è una mia opinione poi ognuno fa come vuole. Bella ;-) -- Comment added by Users.DarioFiorenza on 23 Nov 2003 ---- ---+++ Quando le machine Sbattono Ti dico solamente che utilizzare un flag e sempre un ottima cosa però stai attento con gli indici perchè sembra strano ma ci vuole poco a sbagliare l'indice e fleggare a (0) "macchina che non gioca più" con un altra che sta giocando. Se non commetti questo errore allora usare un flag dentro una matrice è un modo per evitare che ti venga ristampata la macchina anche se distrutta :-) -- Comment added by Users.DarioFiorenza on 23 Nov 2003 ---- ---+++ RE: Problemi col Getchar Quando utilizzate la getchar() sarebbe igienico un ciclo di svuotamento del buffer: while (getchar() != '\n'); o più rozzamente (per un input solo) basta mettere due getchar() una di seguito all'altra. -- Comment added by Users.MarcoAmmirata on 23 Nov 2003 ---- ---+++ Re: strdup Non è meglio utilizzare qualcosa di più portabile? Ad esempio allocare lo spazio in memoria con malloc e poi copiare le stringhe con strcpy o strncpy (se si tiene anche alla sicurezza). -- Comment added by Users.MarcoAmmirata on 23 Nov 2003 ---- ---++++ Re: Re: strdup Portabile ? Su che sistema operativo lo vuoi portare? il Palm OS? :-) Usate quello che vi pare (strdup = malloc---+ strcpy) Sicurezza? guarda che siamo a Prog 1! :-) (comunque hai ragione) -- Comment added by Users.AndreaSterbini on 23 Nov 2003 ---- ---+++ Altre domande: - Anche a me da un segmentation fault, perchè dichiaro la matrice ( char *boh[] = {0}; ) come fa lei in pacman, solo lo faccio nel main, e poi uso la STRDUP. Il problema è l'allocazione a quanto ho capito, ed infatti ho provato ad allocarla ma mi da errore..che tipo di cast va messo prima di chiamare la malloc/calloc che sia, quando alloco un vettore di puntatori a char? - Nell'esempio che ha pubblicato da come coordinate iniziali 37 e 8..che sulla pista corrisponderebbero, rispettivamente, alla colonna 37 e alla riga 8...io per mettere un'auto li invece devo posizionarla in 16, 37..siccome mi ci sto impicciando :) da che dipende l'orientamento della matrice, a questo punto: solo da come uso io gli indici o anche da come ho trovato il numero delle righe e delle colonne con le sizeof e strlen? - Se all'inizio inserisco 0, come numero dell macchine, il programma che fa, visualizza la pista vuota ed esce? Idem se posiziono le macchine su un muro? E nel caso posiziono la macchina sui caratteri '@' o '|'? Quando una macchina vince, ad ogni modo, si esce e basta? -- Comment added by Users.DaniloRossi on 23 Nov 2003 ---- ---+++ Controllo sulle diagonali Nel testo dell'esercizio lei dice:"per controllare le diagonali esistono due casi, a seconda che sia maggiore l'incremento deltax (oppure deltay)"...Ma nel caso in cui deltax e deltay sono uguali che dobbiamo fare? -- Comment added by Users.MarcoGrechi on 23 Nov 2003 ---- ---+++ Re: Seg Fault Se ho capito che vuoi dire, allora il cast va fatto con (char *)malloc(ecc...ecc). Senò non ho capito proprio la domanda... :) -- Comment added by Users.MarcoAmmirata on 23 Nov 2003 ---- ---+++ Re:Strdup and security > Portabile ? Su che sistema operativo lo vuoi portare? il Palm OS? > Sicurezza? guarda che siamo a Prog 1! L'importante è imparare, no? ;) (e poi il PalmOS è un ottimo os... :) ) -- Comment added by Users.MarcoAmmirata on 23 Nov 2003 ---- ---++++ Re:Re: Seg Fault Esatto...il punto è che il segmentation fault credo si manifesti proprio perchè devo allocare quella matrice prima di fare la strdup (il programma funziona lo stesso, solo che quando esce poi mi da Segmentation Fault). Io lo allocavo così: nomeVettoreDiPointerAchar = (-cast-) calloc(numero righe, sizeof(riga)); mi pare..solo che mi dava errore in questa riga per via del cast, non riuscivo a capire quale mettere, li ho provati tutti anche chiaramente (char*), ma nada :/ -- Comment added by Users.DaniloRossi on 23 Nov 2003 ---- ---+++ Errore in delta[][] di pista.h??? ho completato la versione base del gioco solo che ho dei problemi con gli spostamenti della matrice delta... e' come se il tastierino numerico dovesse essere girato di 90 gradi in senso orario, nella direzione della pista. Potrebbe anche adar bene ma poi le macchine nn si commportano come nell' esempio proposto da Lei prof. errore nella matrice delta o nel mio programma? -- Comment added by Users.AntonioVillani on 23 Nov 2003 ---- ---+++ Gestione dell'errore iniziale del programma Il primo "errore" ke si può fare è quello di mettere come coordinate iniziali delle makkine o un muro, o un carattere ke decreta la vittoria oppure una coordinata ke si trova fuori dalla matrice. Professore la gestione di questo errore va messa subito dopo la prima scanf? Ovvero subito dopo le coordinate e quindi prima delle lettere delle makkine? Io l'ho messo lì... -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- ---+++ Gestione degli errori Ho finito l'esercizio, ma ho avuto dei casini con la getchar (da quello ke ho visto nn solo io) e ho trovato il modo per evitare ke prenda l'accapo della scanf o del getchar precedente. Se lei professore ai test mette sempre più macchine (e numeri per la velocità) di quelle giocanti, credo che il mio programma nn passerà nessun test :) -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- ---+++ Segmentation Fault Adesso il segmentation fault me lo da se inserisco provo ad inserire la prima macchina ho visto il programma del pacman come variale globale viene definito la matrice di puntatori char *maze[HEIGHT]={0}; e dopo molto più avanti definisce una matrice bidimensionale maze[HEIGHT][WIDTH]='C'; io all'incirca faccio la stessa cosa ma mi va in segmentation fault quando provo ad inserire le machine nella matrice. Devo x forza allocare la matrice bidimensionale? La strdup non fa una copia della locazione di memoria di therace solo che modificabile... qualcuno sa dirmi il perchè? -- Comment added by Users.DarioFiorenza on 23 Nov 2003 ---- ---+++ Io i problemi con la getchar().... Ho risolto facilmente i problemi con getchar(); sono a disposto a spiegare come risolvere i problemi degli spazi presi dalla scanf(); certo se qualcuno mi spiega come risolvere il problema spiegato prima ci aiutiamo a vicenda tipo p2p(senza codice please). :-) -- Comment added by Users.DarioFiorenza on 23 Nov 2003 ---- ---++++ Re: Altre domande: allocazione vettore Ti da errore perchè non dai il numero di elementi al vettore. In PacMan era una costante. Hai incluso stdlib.h? ---++++ Re: Altre domande: coordinate Come vi avevo avvertito, la riga in fondo in basso (indice N-1) corrisponde alla coordinate y=0, mentre la prima riga (indice 0) corrisponde alla y=N-1. Dovete fare una sottrazione. ---++++ Re: Altre domande: N=0 Ci penso. ---++++ Re: Controllo sulle diagonali Se deltax=deltay allora scegliete quella che preferite. *NOTA* l'esempio 100.in 100.out non controlla le diagonali. ---++++ Re: Strdup and security Certo, ma devo dare retta più a chi non ha idea di cosa parli che a chi lo ha capito :-) ---++++ Re: Errore in delta[][] di pista.h??? Controlla la direzione della tua y (vedi sopra). ---++++ Re:Re: Seg Fault Sei sicuro che sia sizeof(riga)? Pensa a qual'e' il tipo dell'elemento del vettore che stai allocando .... mi dici che cosa è 'riga'? Togli il cast e includi stdlib.h ---++++ Re: Gestione dell'errore iniziale del programma Fa lo stesso, sia che i caratteri maiuscoli li leggi sia che non li leggi l'output è il medesimo. ---++++ Re: Gestione degli errori Invece di gestire lo \n prova a ignorare tutti i caratteri che non sono maiuscole. Nei test io userò input corretti (vedi esempio 100.in). ---++++ Re: Segmentation Fault Per essere precisi char *maze[HEIGHT]={0}; definisce un vettore di puntatori a vettori di caratteri. Quindi gli elementi del vettore sono puntatori a stringhe. Per accedere ad un carattere la notazione maze[y][x] sembra esattamente quella di una matrice, ma in realtà maze[y] seleziona il puntatore alla stringa della riga e poi [x] seleziona il carattere. ---++++ Re: Io i problemi con la getchar().... Ma se vi ho dato io il codice di leggiMossa ... non ti vorrai mica prendere il merito! :-) -- Comment added by Users.AndreaSterbini on 23 Nov 2003 ---- ---+++ X David Vulpetti Basta che usi un semplice flag e tutto è risolto....non ti preoccupare. Visto che lo hai finito sai dirmi come risolvere questo problema che mi blocca perchè altriment lo avrei anche io finito... :-( Io faccio la stessa cosa che il prof fa dentro pacman lui non usa malloc. per creare l'array bid. Poi x magia ha un array bid. entra nel labirinto e modificare la matrice.... come ????????????????????????????????????????????????????????????????????????? <font color="red"><b>faccio</b></font>????????????????????????????????????????? -- Comment added by Users.DarioFiorenza on 23 Nov 2003 ---- ---+++ Re:X David Vulpetti Io il flag lo uso, ma mi vale per l'accapo...se uno mette un'altro carattere in più nella scanf o getchar precedente va in palla. Io del PacMan ho preso solo la funziona display(), per il resto nn so come fa...cmq uso malloc. -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- ---+++ Passo ugualmente i test? se implemento il mio programma con la modalità Cambio Manuale....... passo ugualmente i test? :-) -- Comment added by Users.SimoneSabbatini on 23 Nov 2003 ---- lol -- Comment added by Users.DavidVulpetti on 23 Nov 2003 ---- ---++++ Re: L'ho incluso stdlib.h prof, il problema è appunto che dichiaro quella matrice senza mettere nella dichiarazione il numero degli elementi..e non posso farlo, visto che calcolo le dimensioni della matrice in run-time..allora devo allocarla...proverò a togliere il cast, per sizeof(riga) intendo sizeof(stringa).. -- Comment added by Users.DaniloRossi on 23 Nov 2003 ---- ---++++ Re: allocazione a runtime Appunto, l'allocazione la devi fare a runtime, e quindi prima definire una variabile puntatore ad un array e poi allocare l'array. forse è meglio se usi sizof(char*) che è più chiaro. -- Comment added by Users.AndreaSterbini on 24 Nov 2003 ---- ---+++ Domanda Qualcuno saprebbe dirimi con precisione qual'e` il programma del corso (PROGRAMMAZIONE I) di Piperno e come si svolgera` l`esame? Grazie mille!!! Claudia -- Comment added by Users.ClaudiaCorsaletti on 24 Nov 2003 ---- ---+++ Volevo sapere per la precisione dx e dy Dx e Dy partono tutte e due da zero? Controllo degli errori: quando una macchina sbatte non bisogna scrivere niente come prompt anche se nel testo dell'esercizio c'erà scritto "se la macchina ha urtato viene stampata una scritta (che devo definire)e ..... ? E x finire Esempio abbiamo 4 macchine una sbatte nella prossima immissione dovremo immettere 3 numeri (macchine rimaste) e non 4(1 ha sbattuto)??? Vorrei una conferma da lei Prof. -- Comment added by Users.DarioFiorenza on 24 Nov 2003 ---- ---+++ Dimensioni e Posizioni Volevo sapere se le dimensioni delle piste contenute negli altri file che lei userà per la correzione sono uguali a quelle di questa pista? Suppongo di no se dice di usare sizeof() e strlen() per calcolarne la grandezza. Poi vorrei sapere se è possibile posizionare le macchine in prima posizione su '|' o su '@' se questo avviene come ci dobbiamo comportare. Ultimo quesito se viene letto il carattere 'q' il programma deve uscire istantanemanete o deve proporre prima qualcosa come lo stato finale della pista? Grazie -- Comment added by Users.AlessioDiMauro on 24 Nov 2003 ---- ---+++ Quante Macchine posso partecipare alla corse? Illimitate? Spero vivamente che il numero sia limitato a 256.... :) -- Comment added by Users.LivioDellaCorte on 24 Nov 2003 ---- ---+++ Attraversare il traguardo in diagonale. Dato che è possibile attraversare il traguardo in diagonale, per la versione base del programma come si fa? Per quanto riguarda invece il caso in cui vengano immesse coordinate iniziali, collocando le macchine su un muro, la pista viene comunque stampata vuota, o si esce direttamente dal programma? E' possibile ricevere qualche aiutino in più sul controllo diagonale? :) -- Comment added by Users.MaurizioTrano on 24 Nov 2003 ---- ---+++ Questione da principiante??? caro prof. potreste effettuare un ulteriore (magari leggermente approfondita) lezione sull'uso delle struct, malloc e sizeof? p.s. non ditemi di rileggermi il libro... non si capisce molto!!! non ditemi di venire alle lezioni....per ora non ne ho saltata una!!! dovete tenere presente che è la prima volta che metto mani su un linguaggio di prog e mi ci vuole un po' per farlo mio, magari se potessimo vedere a lezione più programmi che riguardano ciò che stiamo facendo... la ringrazio e mi raccomando ci pensi -- Comment added by Users.MicheleFacecchia on 24 Nov 2003 ---- ---+++ getchar e allocazione dinamica salve prof.,seguendo il suo esempio dell'uso del getchar ho pensato di usarlo per prendere in input le N lettere corrispondenti alle N macchinine. Nel modo in cui l'ho fatto non funziona, però mi sono incartato e non capisco qual'è l'errore/orrore. nomi = (int *)malloc(4*N); //nomi è un int *... for(i=0;i<N;i---++) nomi[i] = getchar(); -- Comment added by Users.BeniaminoLarocca on 25 Nov 2003 ---- ---+++ getchar sono fermo al getchar, cacchio...forse dovrei fare while(getchar() != '\n')...nomi[i]=getchar(); No???? Ho bisogno di un piccolo input per sbloccarmi, please. -- Comment added by Users.BeniaminoLarocca on 25 Nov 2003 ---- ---++++ Re: Volevo sapere per la precisione dx e dy 1 dx e dx partono da 0 1 nessun messaggio quando una macchina sbatte (l'ho tolto) 1 se una macchina sbatte al prossimo turno si legge un input (1-9 e q) di meno ---++++ Re: Dimensioni e Posizioni 1 le dimensioni saranno variabili 1 quando all'inizio si posizionano le macchinine si fanno gli stessi controlli che si fanno in seguito dopo le mosse: * se si è fuori o su '#' tutte sbattono * se si è su '|' o '@' la prima vince (vincono tutte ma vale la prima) * se si è su ' ' si va avanti 1 quando si legge 'q' si esce immediatamente ---++++ Re: Quante Macchine posso partecipare alla corse? Illimitate? Quante ne entrano in un intero. (2 alla 31) - 1 ---++++ Re: Attraversare il traguardo in diagonale. (versione normale) Se il traguardo viene 'saltato' si continua a girare Il controllo in diagonale si fa così: * si sceglie la deltax o deltay maggiore (ad esempio deltax) * per ogni intero tra x e x---+deltax * si calcola la coordinata *intera* y corrispondente *arrotondata all'intero inferiore* * per far questo vi dovete ricordare l'equazione di una retta (y=mx---+c) e fare due conti tenendo conto che il coefficiente angolare m=deltay/deltax (potete considerare c=0 e poi usare il risultato come incremento della y corrente) * si controlla la casella corrispondente ---++++ Re: malloc, sizeof, struct Con malloc puoi allocare un pezzo di memoria delle dimensioni desiderate. Malloc torna come risultato un puntatore al blocco allocato. Cioè l'indirizzo di memoria del blocco. Una struct è una struttura dati formata da una successione di campi, che possono essere esaminati/scritti usando ad esempio la notazione macchina->x (in cui macchina è una variabile che contiene un puntatore ad una struct che ha il campo 'x'). Ad esempio una struct che ha i due campi interi *a* e *b* può essere definita come: <verbatim> struct boh { int a; int b; }; </verbatim> Per definire una variabile 'cheneso' che contiene un puntatore ad una struct 'boh' si scrive: <verbatim> struct boh * cheneso; </verbatim> Per allocare una struct di tipo 'boh' e metterne il puntatore in 'cheneso' scrivo: <verbatim> cheneso = malloc(sizeof(boh)); </verbatim> Per scrivere il valore 5 nel campo 'a' della struct puntata da 'cheneso' scrivo: <verbatim> cheneso->a = 5; </verbatim> Come hai visto ho usato la funzione 'sizeof' per dire a malloc di quanti bytes ho bisogno per la struct di tipo 'boh'. Pensi che basti? :-) ---++++ Re: getchar e allocazione dinamica Se non mi dici che cosa non funziona coma faccio ad aiutarti? A me sembra corretto. ---++++ Re: getchar Ma se la funzione per i valori 1-9 e q ve l'ho data! guarda leggiMossa in pista.h -- Comment added by Users.AndreaSterbini on 25 Nov 2003 ---- ---+++ Re: getchar e allocazione dinamica Dunque, l'errore è che al primo carattere inserito (il nome della prima macchina) termina il programma. Non capisco se l'errore riguarda l'uso della getchar() oppure l'allocazione dell'array di int. -- Comment added by Users.BeniaminoLarocca on 25 Nov 2003 ---- ---+++ Ancora sul calcolo della diagonale Notate che i conti diventano molto più facili se si fa finta che il punto di partenza per la mossa sia nell'origine. In questo caso la retta è di equazione y=mx con m=deltay/deltax. (sto considerando il caso di deltax>deltay). Una volta calcolata l'altezza y per ciascuna x da 0 a deltax basta sommarle agli x e y correnti e si sa dove guardare il carattere. -- Comment added by Users.AndreaSterbini on 25 Nov 2003 ---- ---+++ domandona c'è un modo,in win, per recuperare un file sovrascritto??? Ho praticamente cancellato tutto quello che avevo fatto questa mattina sull'esercizio. -- Comment added by Users.BeniaminoLarocca on 25 Nov 2003 ---- ---+++ Copiare la pista Essendo la dimensione della pista come ha detto lei variabile ed essendo definita in una libreria (quindi non modificabile) la pista va copiata in un vettore d'appoggio come per altro fa anche lei in pacman. per eseguire questa operazione sto avendo dei problemi. una volta calcolate le dimensioni di una riga e il numero di elementi del vettore (ossia le colonne) ho problemi a copiare la matrice originale in quella allocata dinamicamente che dichiaro come char* copia[]={0}. per effettuare la copia ho provato sia con strdup che con strcpy anche usando puntatori d'appoggio. effettivamente riesco a copiare la pista ma alla fine del programma avviene un errore che termina il processo. lo stesso programma in cui però il vettore copia viene dichiarato come char* copia[DimensionePista] funziona correttamente. Cosa sbaglio? Grazie -- Comment added by Users.AlessioDiMauro on 25 Nov 2003 ---- ---+++ Copiare Pista Hai inizializzato la matrice a zero? -- Comment added by Users.DarioFiorenza on 25 Nov 2003 ---- ---++++ Re: Copiare la pista Devi allocare con malloc il vettore di puntatori di dimensioni (N*dimensione di un puntatore). Poi potrai inserire in ciascun elemento del vettore il puntatore alla copia della corrispondente riga. -- Comment added by Users.AndreaSterbini on 25 Nov 2003 ---- ---+++ Volevo sapere sulle diagonali e su altre cosine(X Il Prof) Sembrerà stupida come domanda ma io devo valcolarle solamente quando premo i tasti <font color=red> |7| |9| | | | | |1| |3| </font> e negli altri casi non serve? Un altra cosa nella versione più difficile si deve considerare sia la @ che il | o solo il pipe(|)? E infine la strategia da implementare migliore da far fare alla macchina come dobbiamo comportarci dobbiamo far controllare alla macchina il percorso migliore ma cioò vuol dire che fa tutto in automatico (una rozza inteliggenza artificiale)? bisogna creare un opzione nel programma che consenta di potervi giocare in automatico? So che ho fatto molte domande ma vorrei pure della risposte. La Ringrazio x la sua disponibilità Prof <b> :-) </b> -- Comment added by Users.DarioFiorenza on 25 Nov 2003 ---- ---+++ risolto risolto il problema dichiarando la destinazione come char **destinazione anzichè char *destinazione[]={0} Altra domanda però. L'esempio con 100.in e 100.out ha anche il controllo delle diagonali? perchè ala seconda mossa ho una macchina in posizione diversa. E anche in caso di vittoria o di tutte macchine distrutte l'uscita è istantanea o va stampata la pista? -- Comment added by Users.AlessioDiMauro on 25 Nov 2003 ---- ---+++ Re:Domandona Ci sono dei programmi che ti permettono di recuperare i file eliminati, uno mi pare si chiami "Undelite", infatti se non sbaglio quando in win si cancella un file, in realtà si eliminano le info riguardanti il puntamento.Comunque per limitare al minimo la possibilità di sovrascrivere lo spazio disco dove è allocato fisicamente il file dovresti usare il PC il meno possibile fino a che non recuperi ciò che ti serve. -- Comment added by Users.LucaMarozzini on 25 Nov 2003 ---- ---+++ Si parte!!! per la posizione iniziale faccio fare tutti i controlli necessari (sbatte vince etc.) ma c'è un modo per posizionare le macchinine subito dopo i simboli "|" . dato che non sono a conoscenza della pista per come ho fatto il prg le mie macchinine potrebbero partire a metà della pista, per loro è importante trovare uno spazio vuoto. spero di essermi spiegato ciao a tutti p.s. grazie per la spiegazione su malloc,sizeof e struct -- Comment added by Users.MicheleFacecchia on 25 Nov 2003 ---- ---+++ OT Stavo pensando... il mio compito Forza4 è risultato identico a quello di altri 2 compagni... servirebbe a qulcosa dire che io avevo rilasciato il codice sotto licenza GPL? :-PPPPP -- Comment added by Users.AntonioVillani on 25 Nov 2003 ---- ---+++ Delta? Scusate la domanda sciocca ma la coordinata di [0,0] di delta è x e l'altra [0,1] è y? :-( -- Comment added by Users.DarioFiorenza on 25 Nov 2003 ---- ---+++ X Alessio di Mauro X Destinazione Cosa intendi la matrice che contiene la pista? Basta definire char * destinazione[ALTEZZA DELLA MATRICE]={0}; e come il pacman non cambia niente non ti comlicare la vita. Poi il mio è un cosiglio fai come tu ritieni più giusto. ;-) -- Comment added by Users.DarioFiorenza on 25 Nov 2003 ---- ---+++Re: Il professore ha detto che userà altre piste per la ocrrezione di dimensioni diverse per cui la dichiarazione char* destinazione[ALTEZZA] non va bene perchè ALTEZZA varia da circuito a circuito :) occhio -- Comment added by Users.AlessioDiMauro on 25 Nov 2003 ---- ---+++ CERTO LO SAPEVO ALTEZZA DELLA MATRICE E' UNA VARIABILE DI TIPO DINAMICO , LO SAPEVO E PER QUESTO CHE TI HO DETTO UN NOME DI UNA VARIABILE E NON IL VALORE ES(25).FORSE NON CI SIAMO KAPITI GRAZIE PER LA TUA PRECISAZIONE. :-) -- Comment added by Users.DarioFiorenza on 25 Nov 2003 ---- ---+++ 100.in e 100.out 1) Professore, sbaglio o in 100.in lei ha continuato a inserire coordinate anke per le macchine fuori gioco? Noi non dobbiamo fare cosi vero? 2) Professore, il carattere q implica l'uscita dal gioco o solo "l'abbandono" di una macchina? Grazie -- Comment added by Users.EmanuelePaterna on 25 Nov 2003 ---- ---+++ 100.in Non ho controllato 100.in ma in una delle risposte qui su il professore mi ha detto ke lui inseriva sempre input corretti...se mette coordinate anke per makkine fuori gioco il mio programma nn passa i test, problemi con la getchar -- Comment added by Users.DavidVulpetti on 25 Nov 2003 ---- ---+++ ALTEZZA VARIABILE?!?!?!!? Io ho definito l' altezza della pista con #define HEIGHT 24 immagino che nn vada bene... devo rifare un bel po' di cosette allora... grrrrr Non pensavo che anche la pista potesse variare... sul testo dell' esercizio nn c'e' scritto o sbaglio? -- Comment added by Users.AntonioVillani on 25 Nov 2003 ---- ---+++ Mi sbagliavo Ho riletto meglio il testo e ho appurato che mi sbagliavo. Cmq ho risolto ^_^ -- Comment added by Users.AntonioVillani on 25 Nov 2003 ---- ---+++ Sul 100out Stamattina mi ci son messo sul serio (na buona volta :)) e l'ho finito, mi resta solo qualche piccolo dubbio...ed uno un po più serio. Quelli marginali riguardano l'output del programma: -All'inizio, se inserisco '0' come numero macchine, o coordinate sbagliate (un muro o fuori dalla matrice) dopo quali input devo terminare il programma (e devo stampare la matrice o meno)? -Alla fine, quando l'ultima macchina sbatte (ipotesi) esco subito dal programma o stampo prima la pista vuota? -Sempre alla fine, se resta una macchina sola, e dopo l'ultimo input vince (diciamo ke ha uno spostamento che la porta da un punto libero della pista ad un punto 'vincente'), devo stampare la pista con la macchina nella posizione finale o esco direttamente come quando si sbatte? Ora la cosa seria Ho provato con 100.in...quando confronto il mio 100.out col suo, professore..fino ad un certo punto sono uguali..dopo di che le macchine iniziano ad andare per fatti loro..e la cosa è alquanto inquietante :) voglio dire..la gestione del 'movimento' mi sembra di averlo fatto correttamente, non era particolarmente difficile..e ad ogni modo è assurdo che fino a metà gara le macchine si spostano correttamente e da un certo punto in poi iniziano a sfasarsi gli spostamenti (e parlo solo degli spostamenti, non delle collisioni ecc ecc). Com'è possibile prof? Mi son venuto solo due risposte plausibili: 1) Ho scaricato li file da Windows e l'ho usato sotto Linux...qualche problema col formato? (o qualche routine minatrice di zio Bill?) 2) Nel mio programma, prendo in input le direzioni per le N macchine rimaste..questo non toglie che se ne metto di più, me li trovo già belli pronti nella getchar successiva quando richiedo l'immissione dei comandi..potrebbe essere questo? La cosa mi preoccupa..perchè così non passerei i test :) una funzione se non va non va dall'inizio alla fine...non da metà in poi.. -- Comment added by Users.DaniloRossi on 25 Nov 2003 ---- ---+++ Coordinate di Partenza Mi scusi professore, ma se metto come coordinate iniziali un x e y che danno un "#" o un "|", non gioca nessuno o hanno vinto tutti ?? -- Comment added by Users.MarcoBucci on 25 Nov 2003 ---- ---++++ Re: Volevo sapere sulle diagonali e su altre cosine(X Il Prof) * Vanno gestiti tutti i 9 tasti, cha cambiano deltax e/o deltay come elencato nella matrice delta definita in pista.h * nella versione opzionale vanno gestiti sia '|' che '@' * strategia? le macchine seguono il movimento descritto dalle velocità deltax,deltay che vengono modificate in base ai tasti premuti in input ... dove la vedi l'AI? ---++++ Re: risolto L'esempio 100.in/100.out segue la gestione 'normale' (no diagonali) ---++++ Re: Si parte!!! Sono io che decido la posizione iniziale delle macchinine a seconda del file 'pista.h'. Ad esempio in 100.in le coordinate sono tali da stare nella pista. ---++++ Re: OT [[http://wombat.doc.ic.ac.uk/foldoc/foldoc.cgi?rotfl][rotfl]] :-) ---++++ Re: Delta? Accidenti mi sono dimenticato di dirlo. * delta[i][0] è la variazione di deltax per aver premuto il tasto 'i' * delta[i][1] è la variazione di deltay per aver premuto il tasto 'i' ---++++ Re: CERTO LO SAPEVO non c'e' bisogno di strillare. ---++++ Re: 100.in e 100.out In 100.in ci sono 10000 input, il programma legge quelli che gli servono (prima 100, poi un tot sbattono e ne legge 100-tot poi ne sbattono altre e ne legge ancora meno ...). Dato che gli accapi vengono ignorati da leggiMossa, non importa che io li abbia scritti come 100 righe di 100 caratteri. Dato che le macchine sbattono tutte prima che il file sia stato consumato tutto, il programma esce ed ignora i caratteri che restano. 'q' vuol dire abbandono del gioco (leggi meglio l'esercizio). ---++++ Re: 100.in Non ti stressare, se il tuo programma usa leggiMossa funzionerà correttamente (vedi risposta precedente). ---++++ Re: Sul 100out Quando il programma termina ignora l'input seguente, quindi puoi terminare dove vuoi. * non stampare la matrice se tutti muoiono * alla fine non stampare la matrice (vedi 100.out in cui alla fine appare solo l'ultima macchina) * quando una macchina vince si esce senza ristampare la matrice * 100.out corrisponde alla versione che non controlla le diagonali * anche io, quando avanzano numeri li prendo nelle getchar successive ---++++ Re: Coordinate di Partenza Se le coordinate di partenza corrispondono ad un '#' o '|' o '@' il gioco esce subito. -- Comment added by Users.AndreaSterbini on 25 Nov 2003 ---- ---++++ Ok Allora ho finito di preoccuparmi, faccio solo qualche altro tentativo. Grazie mille prof. -- Comment added by Users.DaniloRossi on 25 Nov 2003 ---- ---+++ Piu' input delle macchine Se a partita iniziata metto in input piu' numeri di quante sono le macchine, questi vengono considerati come input del turno successivo, e' giusto questo? -- Comment added by Users.AntonioVillani on 26 Nov 2003 ---- ---+++ qualche accenno sulle struct attraverso i database... a qualcuno puo` far comodo :) .penso che tutti abbiano in mente un database..no? va bene. Vediamo di capire cosa e` un database con un esempio classico: dobbiamo gestire la nostra rubrica del telefono. Abbiamo bisogno di una tabella su cui mettere i nostri dati. Dunque mettiamo sulle colonne (che da ora in poi chiameremo `campi`) un etichetta (id di campo), in cui diciamo il contenuto di quella colonna. Nome, Cognome, Numero Casa, Numero Cellulare basteranno per questo semplice esempio. | Nome | Cognome | Num Casa | Num Cell | Una volta vista la struttura della nostra tabella dobbiamo metterci le cose dentro: aggiungiamo una riga (che da ora in poi chiameremo record) per ogni persona che dobbiamo inserire. Una riga di esempio sara`: | Simone | Onofri| 06123456 | 349xxxxxx | Da notare che la prima riga (quella che contiene Nome, cognome ecc..) non bisogna considerarla come un record (diremo infatti che contiene gli id di campo). Ecco allora pronta la nostra rubrica del telefono!!! :D Ora passiamo (finalmente) alle struct. Quando si definisce una struct diciamo quali sono i nostri campi (possono essere int, puntatori...quello che ci pare). Quado usa una struct e` come se aggiungessimo un record, possiamo gestirci macchine, item di uno stack o di unalista... :) Definiremo allora una struct con itemRubrica che avra` i campi nome , cognome ecc... ogni volta che dovremo mettere una persona nella rubrica useremo un itemRubrica. Questo e` solo per capire in 2 minuti cosa e` una struct e bisogna stare attenti che le operazioni e le potenzialita` queste strutture dati siano diverse. -- Comment added by Users.SimoneOnofri on 26 Nov 2003 ---- ---++++ Re: Piu' input delle macchine Esatto (basta leggere cosa fa leggiMossa). -- Comment added by Users.AndreaSterbini on 26 Nov 2003 ---- ---+++ Re: Non ti stressare Io nn uso la funziona leggiMossa..uso un mio codice semplice, ovvero getchar() ke cmq prende in input come primo carattere l'ultimo della getchar precedente. Cmq se lei dice ke nei test tiene conto di questa cosa, ovvero ke se ho 3 makkine e lei mi mette 100 inpunt poi è giusto ke le mie makkine vanno dove vanno perkè la prima prende l'ultimo input ecc...allora nn mi stresso :) -- Comment added by Users.DavidVulpetti on 26 Nov 2003 ---- ---+++ Re: Re: Non ti stressare Nei test (ad esempio) io do' 100 input, se ci sono 3 macchinine il tuo programma deve leggere i primi 3 input validi scartando i caratteri diversi da 1-9 e q e muovere le macchinine, se rimangono tre legge i 3 caratteri (validi) seguenti, altrimenti ne legge meno ... e così via finchè non si vince o tutti sbattono o viene 'q'. -- Comment added by Users.AndreaSterbini on 26 Nov 2003 ---- ---+++ Re:Re:Re:Non ti stressare Si, teoricamente il mio fa così ma praticamente no, perkè non ho capito per quale mistico motivo anke se gli dai un ciclo ben definito, la getchar() continua a tenere conto anke dei caratteri ke hai battuto digitanto il nome del gameover del gioco a cui giocavi prima di cominciare l'esercizio...quindi, se ho 3 makkinine e metto 100 input invece ke 3, il mio programma nn funziona, perkè massimo ke riesce a fare è impedire all'accapo precedente di rompere le scatole. La funzione leggiMossa così come è in PacMan nn va bene, perkè legge un movimento per volta e se dovessi usare quella dovrei cambiare 300 righe di codice del mio programma, e dopo 4-5 giorni passati sopra vorrei ke funzionasse anke con un mio metodo ke mi sono trovato e nn soltanto con la funzione leggiMossa. Per cui pazienza. -- Comment added by Users.DavidVulpetti on 26 Nov 2003 ---- oltretutto dicono ke con la scanf il problema si risolve...a me nn pare...ho messo la scanf e fa lo stesso identico intoppo tu gli dai un ciclo...e lui ti prende anke i caratteri fuori dal ciclo e te li presenta come i primi del ciclo successivo...la getchar nn l'ho inventata io -- Comment added by Users.DavidVulpetti on 26 Nov 2003 ---- ---+++ Esempio di input direzionale Facciamo conto che io ho 3 macchine restanti in gioco... Quando lei inserirà le nuove direzioni le inserirà in modo seguente(?): "369" (sono numeri a caso) (seguite da un ritorno a capo(?)) oppure nel seguente modo(?): "369xxxxxx" (tante quante erano le macchine all'inizio) (seguite da un ritorno a capo(?)) Spero di essere stato chiaro -- Comment added by Users.EmanuelePaterna on 26 Nov 2003 ---- ---+++ Controllo Diagonali Il controllo della presenza del muro sulla traiettoria della macchina e non solo del punto di arrivo va fatto anche nel caso in cui lo spostamento è orzziontale o verticale o è stato chiamato apposta controllo diagonali perchè deve contemplare solo i casi in cui la direzione non sia orizziontale o verticale? -- Comment added by Users.AlessioDiMauro on 26 Nov 2003 ---- ---+++ Leggi Mossa return c - '0'; non bastava mettere return c? (qualcuno mi spieghi cosa cambia) -- Comment added by Users.EmanuelePaterna on 26 Nov 2003 ---- ---+++ deltax>deltay Nel testo dell'homework lei dice:"per controllare le diagonali esistono due casi, a seconda che sia maggiore l'incremento deltax (oppure deltay)"... Il mio dubbio è: con questo vuole dire che il valore di delta[c][0] è maggiore di quello di delta[c][1], o che il valore assoluto di delta[c][0] è maggiore di quello di delta[c][1]?Mi spiego meglio... quando metto come input 4 (delta = {-1,0}) delta[c][1] è maggiore di delta[c][1] o abs(delta[c][0]) è maggiore di abs(delta[c][1])? mi scuso in anticipo se ho fatto una domanda stupida...:D -- Comment added by Users.MarcoGrechi on 26 Nov 2003 ---- ---+++ Re: Leggi Mossa essendo c un char ed essendo leggiMossa di tipo int mettendo return c si avrebbe avuto come valore ritornato un numero da 48 a 57 (ossia la codifica ascii dei numeri da 0 a 9) mentre mettendo return c - '0' che e equivale a dire c - 48 si ha esattamente il numero :) -- Comment added by Users.AlessioDiMauro on 26 Nov 2003 ---- ---+++ malloc scusi prof per usare malloc includiamo la libreria alloc.h o malloc.h?a me funziona solo con malloc.h ma so che la cosa cambia da compilatore a compilatore. -- Comment added by Users.ValentinoDiNunzio on 26 Nov 2003 ---- ---++++ Re: Esempio di input direzionale Non riesco a capire perchè non leggete i caratteri che servono per il movimento delle macchinine uno per volta per ciascuna macchinina con la funzione leggiMossa che sta in pista.h ... che vi ho dato a fare PacMan ? Ripeto: per ogni macchinina ancora in gioco si legge un carattere valido dall'input saltando ogni carattere non valido (ovvero si usa leggiMossa). I caratteri successivi saranno letti per la prossima macchina in gioco o per la prima macchina al prossimo turno. ---++++ Re: Controllo Diagonali Certo, anche per linee orizzontali e verticali! ---++++ Re: Leggi Mossa Così torno un numero da 0 a 9 che può essere usato così com'è come indice del vettore delta. ---++++ Re: deltax>deltay Leggi meglio, si tratta dei *deltax* e *deltay* che sono le due componenti della velocità della macchinina e NON del valore del vettore *delta* (lo so, i nomi si assomigliano, ma sono diversi). ---++++ Re: malloc Usate #include <stdlib.h> sennò non compila. (non stai mica in windows?) -- Comment added by Users.AndreaSterbini on 26 Nov 2003 ---- ---+++ Sulle diagonali.. Io per calcolarmi le diagonali non considero il delta maggiore..diciamo che considero la cosa in base alla direzione della macchina..e con una specie di debug ( qualche printf che fa somigliare il programma a snake :) ) che mi 'evidenzia' le diagonali così come le calcolo il risultato è sempre corretto, quantomeno 'pertinente'..è possibile farlo quindi in un altro modo, o sto sbagliando io? (nel senso..solo in quel modo si calcolano le 'caselle' esatte per cui passa la diagonale?) La setvbuf anche stavolta non è necessaria, mi pare di aver capito, vero? Grazie. -- Comment added by Users.DaniloRossi on 26 Nov 2003 ---- ---+++ re:malloc si sto in windows...stdlib lo uso gia xò senza malloc.h mi da un warning...lascio malloc.h? -- Comment added by Users.ValentinoDiNunzio on 26 Nov 2003 ---- ---+++ Re:Re:Esempio di input direzionale Io ho fatto un programma ke fa questo...una getchar ke prende i caratteri delle prossime mosse dentro una for...li prende INSIEME..e li ditrubuisce man mano dentro la variabile ke gestisce il nome della makkina dentro la struttura ke gestisce la makkina. Poi faccio una switch-case dentro una for, ke gestisce una per una le makkine. Non ho capito perkè devo utilizzare per forza leggiMossa. Io del PacMan ho preso display(), strdup e altre cose ke mi sono state utili...ma perkè sono costretto a utilizzare leggiMossa e a cambiare il mio programma ke c'ho messo 3 giorni solo perkè poi nei test vengono dati input "errati". Non pensavo ke nei test Lei dasse sempre qualcosa come 100 input quando ho fatto il programma. Sono piu di 320 righe di codice lo lascio così com'è perkè a conti fatti funziona. Così com'è, ovvero... se ho 3 macchine e metto 369...makkina A prende 3, makkina B prende 6, makkina C prende 9 se ho 3 makkine e metto 36933...makkina A prende 3, makkina B prende 6, makkina C prende 9...makkina A (turno successivo) prende 3, makkina B (turno successivo) prende "accapo", makkina C (turno successivo) nn prende niente -- Comment added by Users.DavidVulpetti on 26 Nov 2003 ---- ---+++ Esempi di input/output versione opzionale Professore, potrebbe mettere in linea degli esempi di input/output anche per la versione opzionale del programma? -- Comment added by Users.DoraSpenza on 26 Nov 2003 ---- ---+++ Ancora chiarimenti input direzionale <verbatim>Es di input: 32566\n 43955\n Macchine in gioco: 3 1° turno Macchina 1: 3; Macchina 2: 2; Macchina 3: 5 2° turno Macchina 1: 6; Macchina 2: 6; Macchina 3: 4 e cosa via... Giusto? Perchè io avevo capito: 1° turno Macchina 1: 3; Macchina 2: 2; Macchina 3: 5 (i successivi 66 venivano scartati) 2° turno Macchina 1: 4; Macchina 2: 3; Macchina 3: 9 (i successivi 55 venivano scartati) E così via... Giusta la prima o la seconda?</verbatim> -- Comment added by Users.EmanuelePaterna on 26 Nov 2003 ---- ---++++ Re: Sulle diagonali.. L'importante è che vengano le stesse caselle del calcolo che ho detto i (che sono consecutive). Ho chiesto il setvbuf? ---++++ Re:Re:Esempio di input direzionale Non sei costretto a usare leggiMossa, dai tuoi commenti avevo capito che il tuo programma non si somporta come nell'esempio. Io non do 100 input, ne do 10000. Nei test non vengono dati input "errati" ... rileggiti l'esercizio, che dice di ignorare i caratteri 'non validi' per indicare la direzione. L' 'accapo' deve essere ignorato e alla macchina B deve andare il prossimo carattere 'valido'. ---++++ Re: Esempi di input/output versione opzionale Non ce la faccio. -- Comment added by Users.AndreaSterbini on 26 Nov 2003 ---- ---+++ Copia della lista e allocazione di memoria Continuo ad avere problemi con la lista duplicata. Quando stampo mi tira fuori caratteri strani. Volevo sapere se l'allocazione dinamica di memoria per la copia della lista è necessaria prima della strdup, oppure se posso usare semplicemente un puntatore appena dichiarato. Grazie -- Comment added by Users.LivioDellaCorte on 27 Nov 2003 ---- ops ho usato lista al posto di PISTA,scusate il lapsus :) -- Comment added by Users.LivioDellaCorte on 27 Nov 2003 ---- ---++++ Re: Copia della pista e allocazione di memoria Le stringhe della pista sono indirizzate attraverso il vettore di puntatori *therace*. Devi copiare sia le stringhe che il vettore, e quindi allocare un vettore di puntatori e poi usare strdup. -- Comment added by Users.AndreaSterbini on 27 Nov 2003 ---- ---+++ Ancora deltax>deltay Se ci dovessimo trovare nel caso in cui deltax = -2 e deltay = 0, dobbiamo considerare deltay>deltax o abs(deltax) > abs(deltay)? -- Comment added by Users.MarcoGrechi on 27 Nov 2003 ---- ---++++ Re: Ancora deltax>deltay Accidenti, non me ne ero accorto! Il valore assoluto! Il valore assoluto! -- Comment added by Users.AndreaSterbini on 27 Nov 2003 ---- ---+++ Grosso Problema Salve Professore, sviluppando il programma mi è sorto un curioso problema: il programma ora sembra funzionare, purtroppo sono costretto a provarlo sotto windows e non sotto linux per motivi tecnici e presenta un fatto curioso: con una macchina da sola non mi da problemi, se metto più di una macchina il programma non fa nulla, benchè se provo il debug (uso dev-c---++) anche con più macchine non fa una grinza, se invece avvio l'eseguibile non fa nulla... Non riesco a capire dove sia il problema visto che il debug funziona senza problemi ma leseguibile no... grazie -- Comment added by Users.StefanoNoffke on 27 Nov 2003 ---- ---+++ Stampa Pista Dato che la pista di provaè larga 80 (ossia il numero esatto di colonne sullo schermo) stampando una stringa del vettore alla volta la pista viene visualizzata correttamente invece stampando una stringa e successivamente un accapo la pista viene visualizata sfalsata, una riga si e un riga no. Mi domandavo se bisogna mettere o no l'accpao perchè su un output di tipo file che non ha il limite di 80 colonne la pista verrebbe stampata tutta su una riga e non vorrei che questo compromettesse la buona riuscita dei test. cosa dobbiamo fare? stampare sempre l'accapo alla fine di una riga della pista, non stamparlo mai, non stamparlo solo nel caso che la larghezza sia 80? Grazie -- Comment added by Users.AlessioDiMauro on 27 Nov 2003 ---- ---++++ Re: Grosso Problema non saprei ... ---++++ Re: Stampa Pista L'accapo ci vuole sempre. Ricorda che l'output io lo mando su file, e lì non c'è limite al numero di colonne. -- Comment added by Users.AndreaSterbini on 27 Nov 2003 ---- ---+++ Errore anomalo salve prof, ho un errore piuttosto strano che non so se riuscirò a spiegare bene (male che vada le mando una mail). Io dichiaro una serie di variabili di tipo int e fin qui niente di strano, poi sviluppo il codice della f1 etc.etc.; ad un certo punto, per una certa correzione, io ho eliminato una variabile int che non usavo più e a quel punto il compilatore (momentaneamente, per motivi logistici, uso dev-C---++ su win2000)mi restituisce a runtime un errore del tipo:Errore dell'applicazione, il f1.exe ha provocato errori e verrà chiuso. A me sembra strano anche perchè se poi rimetto una variabile int qualsiasi, l'errore scompare. Mi faccia sapere. -- Comment added by Users.BeniaminoLarocca on 27 Nov 2003 ---- ---+++ Chiarimento sizeof e strlen Siccome non è che l'ho capita tanto benen sta cosa, ho provato a fare a=sizeof(Array) e b=strlen(elementoArray) e mi vengono questi valori a = 100 e b = 80 ho fatto la divisione e le righe mi vengono 1. che ho sbagliato? -- Comment added by Users.DaniloDauria on 27 Nov 2003 ---- X Danilo Dauria sizeof(Array)/sizeof(Array riga -- Comment added by Users.DarioFiorenza on 27 Nov 2003 ---- ah ok adesso mi viene 25, allora strlen a ke serve? -- Comment added by Users.DaniloDauria on 27 Nov 2003 ---- ah niente ho risolto, grazie :) -- Comment added by Users.DaniloDauria on 27 Nov 2003 ---- ---+++ Un paio di domande - Nel main uso il vettore delta del file pista.h, scrivendo delta[c][0] e delta [c][1]...Quando vado a compilare,alle righe in cui uso delta, mi dice: "subscripted value is neither array nor pointer"...Perche? - Dobbiamo fare qualche controllo sull'input del nome della macchina o ci mettera solo maiuscole? -- Comment added by Users.MarcoGrechi on 27 Nov 2003 ---- ---+++ Sulla stampa della pista Se io ho 10 macchine e metto 30 input...prima di "fermarsi" e richiedermi un altro input per nuove coordinate...il programma stampa in successione 3 volte la pista? Se io ho 5 macchine e metto 30 input, il programma stampa in successione 6 volte la pista? Oppure anche se io ho 3 macchine ke giocano, Lei mette nei test un milione di input...ogni volta ke inserisce l'input, il programma stampa una volta la pista e Lei rimette ancora un milione di input? -- Comment added by Users.DavidVulpetti on 27 Nov 2003 ---- ---+++ Altra cosa curiosa... non riesco a capacitarmi del fatto che la 3a macchina, e solo e sempre quella, dopo alcuni input, circa 5, inspiegabilmente si ritrova in iperspazio (la x pari a 3998112) benchè segua a ruota la a e la b.... ho provato con 10 macchine anche, ma rimane solo la terza macchina a darmi quel problema... (rimane il fatto che devo fare queste prove con il debug di dev-c---++, in quanto il file formula1.exe con più di 1 macchina non funziona...) c'è nessuno dalle parti di Piazza Venezia che può farmi provare il mio codice sotto Linux? grazie :) -- Comment added by Users.StefanoNoffke on 27 Nov 2003 ---- ---+++ Iterazione vs Ricorsione Mi conferma che l'unico parametro di scelta fra un'implementazione ricorsiva e una iterativa è la facilità di implementazione e che quindi dato un un'algoritmo implementato iterativamente è sempre possibile in teoria implementarlo ricorsivamente e viceversa con la stessa efficienza? Nota: perfetti gli ultimi parametri per la correzione del Forza4 che premiano chi ha gestito correttamente la matrice e il controllo vittoria che in pratica rappresentavano il 99,9% del programma. Thanks :-) -- Comment added by Users.EmanueleQuattrini on 27 Nov 2003 ---- ---+++ Problemi risolti (spero)... ho risolto i problemi di prima, me ne rimane uno solo da risolvere: se uso il file 100.in.txt il programma si blocca dopo un po', ma se modifico il file mettendo 99 macchine invece di 100 funziona perfettamente, con file di 100 e più macchine creati da me funziona senza problemi... -- Comment added by Users.StefanoNoffke on 27 Nov 2003 ---- ---++++ Re: Errore anomalo Nonso. Lascia la variabile :-) . ---++++ Re: Un paio di domande Hai incluso pista.h? Solo maiuscole. ---++++ Re: Sulla stampa della pista Il programma legge dall'input, che può essere la tastiera oppure un file. Dall'input legge tanti caratteri quante sono le macchine in gioco (scartando quelli non validi). poi fa il turno poi ne legge altri e così via. Se l'input è da tastiera il programma si ferma quando tutti i carattri inseriti sono stati consumati. Per questo tu vedi 3 stampe per 30 input dati a 10 macchine. Quando inserisci altri caratteri il programma li riceve in input e continua i turni. Se l'input è da file il programma continua a leggere indisturbato fino a che tutte le macchine sbattono, una vince o appare il carattere 'q'. Quindi se il mio file ha un milione di caratteri il programma ne legge quanti gliene servono finchè non esce. Non confondere il file con le singole righe che batti in tastiera. ---++++ Re: Iterazione vs Ricorsione Ricorda che la versione ricorsiva è sempre inefficiente (come uso di memoria) perchè alloca su stack il frame di attivazione ad ogni chiamata. ---++++ Re: Problemi risolti (spero)... Hai filtrato gli \n che sono nel file? -- Comment added by Users.AndreaSterbini on 27 Nov 2003 ---- ---+++ ATTENZIONE a come aggiornate la pista Ricordate di seguire questi passi per aggiornare la pista prima di stamparla: * rimuovo i caratteri di tutte le macchinine (mettendo ' ' ) * sposto tutte le macchinine (e controllo chi muore) * inserisco i caratteri di tutte le macchinine in gioco Se invece fate i 3 passi (rimuovi/muovi/inserisci) una macchinina alla volta potrebbe succedere che: * sposto la macchinina A nella posizione in cui è B (inserendo il carattere A) * POI sposto la macchinina B cancellando il carattere A Il risultato non è quello voluto e differisce dal mio funzionamento. -- Comment added by Users.AndreaSterbini on 27 Nov 2003 ---- ---+++ Bene...che bello Ecco, volevo solo sincerarmi di questo. Lei ora ha scritto "Se l'input è da tastiera il programma si ferma quando tutti i carattri inseriti sono stati consumati. Per questo tu vedi 3 stampe per 30 input dati a 10 macchine. Quando inserisci altri caratteri il programma li riceve in input e continua i turni." Ma perkè una cosa del genere nn è scritta nel testo del programma? Dall'output si capiscono 2 cose ke nn sono scritte nel testo. 1-I numeri inseriti sono sempre giusti, ovvero se ho 3 makkine inserisco 3 input..se ho una makkina inserisco 1 input (vedi 369...369...6...) 2-Ogni volta ke vengono messi degli input, il programma fa UNA SOLA stampa e poi riprende altri input. Se nn le facevo questa domanda prima, io nn avrei mai saputo ke mettendo 30 input per 10 makkine, il mio programma doveva fare 3 stampe prima di riprendere un altro input. Ed io ovviamente leggendo il testo e guardando gli esempi di output..non ho impostato il mio programma in questo modo. In definitiva...6 giorni di lavoro x qualcosa come 320 righe di codice...ke tirando le somme nn servono a nulla (leggasi...nn passerà alcun test il mio programma). Che bello :) -- Comment added by Users.DavidVulpetti on 28 Nov 2003 ---- ---+++ Coordinate e indici Una curiosità: c'è un motivo in particolare percui le coordinate si riferiscono ad un punto 0,0 che coincide con l'angolo inferiore sinistro invece che con l'angolo superiore sinistro in modo da combaciare con l'indicizzazione array per la pista? Ad ogni modo il posizionamento iniziale delle macchinette deve rispettare le coordinate con lo 0,0 a SW solamente all'inizio del gioco, poi si possono usare tranquillamente gli indici dell'array, giusto? -- Comment added by Users.OliverTran on 28 Nov 2003 ---- ---+++ scanf + getchar Visto che per prendere i primi 3 input (n° macchine e coordinate iniziali) ho usato una scanf, e per prendere i nomi delle macchine un getchar, ho dovuto in qualche modo eliminare l'invio dovuto alla scanf. Volevo sapere se ciò è corretto, e che quindi venga premuto invio dopo l'input oppure si può scrivere l'input anche così: 3 37 8ABC P.s: scusa se la domanda forse è stata già fatta -- Comment added by Users.LivioDellaCorte on 28 Nov 2003 ---- ---+++ Bene...che bello Capisco dalle tue domande che non hai capito nulla di come funziona l'input di un programma. Quello che ho scritto e' semplicemente cosa succede ad un qualsiasi programma che legge dell'input ... quando l'input non c'e' la prossima getchar (o scanf) si ferma ad aspettare che il sistema operativo gli dia altro input. Se l'input viene da tastiera altro input arrivera' quando scrivi una riga e batti accapo, se l'input viene da file altro input e' sempre disponibile fino alla fine del file (e a quel punto la getchar/scanf si ferma). Ricapitolando: tu hai l'impressione di dover cambiare il programma e invece non devi. Il problema non e' nel programma ma nella tua comprensione di come funziona l'input/output. Passiamo agli altri commenti 1 i caratteri nel file 100.in NON sono tutti giusti, infatti il file contiene righe di numeri (giusti) separate da accapo (da filtrare). 1 per essere piu' precisi: ogni volta che il programma legge gli M caratteri delle M macchinine in gioco stampa la nuova situazione. Poi passa a leggere i seguenti. Se sono gia' disponibili li legge e fa un'altra stampa eccetera eccetera. NON C'E' DIFFERENZA, E' ESATTAMENTE LA STESSA COSAAAA!!! Scusate lo strillo. ---++++ Re: Coordinate e indici Cosi' quello che appare sullo schermo e' uguale a quello che scrivo nel file pista.h Attento che visto che la y diminuisce per indici crescenti potresti dover rovesciare il segno dei delta[i][1]. ---++++ Re: scanf + getchar Io nei file metto un accapo dopo i tre numeri interi (suggerimento: filtrate cio' che non sono maiuscole). -- Comment added by Users.AndreaSterbini on 28 Nov 2003 ---- ---+++ Dubbio aggiornamento pista <verbatim> Per aggiornare la pista ogni volta ricarico in memoria variabile con strdup() la pista vuota originaria contenuta in pista.h e poi faccio le modifiche. Prescidendo dalla non particolare efficienza di questo metodo, c'è qualche controindicazione nel chiamare ripetutamente strdup()? Devo liberare con free() la memoria utilizzata dalla chiamata precedente prima di fare la chiamata successiva? </verbatim> -- Comment added by Users.EmanueleQuattrini on 28 Nov 2003 ---- ---++++ Re: Dubbio aggiornamento pista Se non liberi le stringhe vecchie usi tantissima memoria (e il programma potrebbe fallire i test). Usa free per deallocare le stringhe. -- Comment added by Users.AndreaSterbini on 28 Nov 2003 ---- ---+++ ANSI Lei x testare gli homework compila usando la modalita ANSI? -- Comment added by Users.MarcoGrechi on 28 Nov 2003 ---- ---++++ Re: ANSI No. -- Comment added by Users.AndreaSterbini on 28 Nov 2003 ---- ---+++ accapo da filtrare in una risposta lei dice: "i caratteri nel file 100.in NON sono tutti giusti, infatti il file contiene righe di numeri (giusti) separate da accapo (da filtrare)."... CHe significa che i caratteri non sono tutti giusti? Mi sembrano tutti interi compresi tra 1 e 9.... Che vuol dire "filtrare"gli accapo? -- Comment added by Users.MarcoGrechi on 28 Nov 2003 ---- ---+++ Ricapitolando sull'input Allora noi dobbiamo accettare come input per il nome della macchina solo maiuscole (ma non aveva detto che metteva input corretti?) ed escludere minuscole simboli e accapo. per l'input iniziale del programma nel file ci sarà: <br> numeroMacchine xIniziale yIniziale\n (accapo da scartare)<br> ABCDEFG\n (accapo da scartare)<br> successivamente si stampa la pista<br> se leggo un numero di mosse = a numeroMacchine stampo e leggo il nuovo input<br> se leggo un numero di mosse = a n*numeroMacchine stampo n volte e leggo il nuovo inputo<br> se leggo un numero di mosse = a numeroMacchne---+ x stampo una volta tengo gli x per il prossimo input e continuo a<br> <blockquote>leggere</blockquote> <br> E' esatto? -- Comment added by Users.AlessioDiMauro on 28 Nov 2003 ---- ---+++ Velocità massima Queste macchinette hanno una velocità massima (limite max di delta) oppure sono dotate di un motore nucleare con relativa iperguida (Star Wars rulez) e spingono più di un'astronave??? :D -- Comment added by Users.OliverTran on 28 Nov 2003 ---- ---+++ Error handling Ah, dobbiamo gestire eventuali errori in input o si presuppone che l'input sia sempre corretto? -- Comment added by Users.OliverTran on 28 Nov 2003 ---- ---++++ Re: accapo da filtrare Rileggi l'esercizio, c'e' scritto di filtrare i caratteri diversi da 1-9 e 'q'. ---++++ Re: Ricapitolando sull'input ma vi ho dato un esempio ... non basta? ---++++ Re: Velocità massima La seconda che hai detto. (comunque, fatti due conti e ti accorgerai che per accelerare a ipervelocità ci vuole qualche milionata di caratteri di larghezza :-) ) ---++++ Re: Error handling Non gestite nessun errore (ma filtrate i caratteri non validi quando leggete i movimenti). -- Comment added by Users.AndreaSterbini on 28 Nov 2003 ---- ---+++ Segmentation fault Forse è già stata fatta la domanda, però non si sa mai. In questi giorni io ho provato il codice della f1 solo su win, perchè non potevo usare linux. Stasera mi sono rimesso a compilare sul caro vecchio amico linux(devo adularlo un po' visto che l'ho abbandonato per qualche dì) e, appena faccio partire il programma, questo mi va in segmentation fault mentre su win non succedeva nulla, almeno all'inizio. Qualche idea? -- Comment added by Users.BeniaminoLarocca on 28 Nov 2003 ---- ---+++ Per la versione normale... Correggimi se sbaglio. <h5><I> 1) Se per esempio la macchina M si spostasse di due caselle a destra (deltax = 2) <BR>e la 2° casella fosse buona (cioè è = ' '), la prima casella a destra potrebbe essere anche un muro, ma la macchina non sbattebbe. 2) Stesso caso precedente, ma se prima casella a destra fosse il traguardo, <BR>la macchina non vincerebbe. Se è così capisco a che servono le gomme "@" :) </h5></I> P.s: interessante la possibilità di usare tag html. -- Comment added by Users.LivioDellaCorte on 29 Nov 2003 ---- ---+++ Vediamo se ho capito Bisogna copiare la pista nella memoria modificabile come avete fatto per pacman. Tuttavia con pacman il campo di gioco aveva dimensione fissa mentre per la F1 le piste hanno dimensioni diverse. Quindi è necessario creare un vettore dinamico ma non riesco a copiare therace in questo. Bisogna usare la calloc (che per quanto ho capito crea un vettore dinamico)o ci sono altri modi? -- Comment added by Users.JacopoBusso on 29 Nov 2003 ---- ---++++ Re: Segmentation fault Hai copiato le stringhe di therace in memoria modificabile? (altrimenti usa l'opzione -fwritable-strings quando compili) ---++++ Re: Per la versione normale... Esatto. ---++++ Re: Vediamo se ho capito Devi allocare un vettore dinamico e poi copiare ciascuna stringa e inserirne l'indirizzo (della copia) nel vettore allocato. -- Comment added by Users.AndreaSterbini on 29 Nov 2003 ---- ---+++ Errore di Compilazione Errore: knoppix@osiris:~$ gcc -g -o homework4 homework4.c /usr/lib/gcc-lib/i386-linux/3.2.3/../../../crt1.o(.text---+0x18): In function `_start': : undefined reference to `main' /tmp/ccfo24F0.o(.text---+0x4bb): In function `main': /home/knoppix/homework4.c:119: undefined reference to `print_race' /tmp/ccfo24F0.o(.text---+0x525):/home/knoppix/homework4.c:126: undefined reference to `leggimossa' collect2: ld returned 1 exit status AIUTOOOOOOOO -- Comment added by Users.EmanuelePaterna on 29 Nov 2003 ---- ---+++ Errore di Compilazione 2 (Il primo è risolto) knoppix@osiris:~$ gcc -g -o homework4 homework4.c /usr/lib/gcc-lib/i386-linux/3.2.3/../../../crt1.o(.text---+0x18): In function `_start': : undefined reference to `main' collect2: ld returned 1 exit status -- Comment added by Users.EmanuelePaterna on 29 Nov 2003 ---- ---+++ Domanda sulla versione opzionale Non sono sicuro di aver capito bene una cosa sulla versione opzionale del codice: la macchina vince anche se passa su di un @ senza attraversare il traguardo oppure vince solo se passa il traguardo? -- Comment added by Users.StefanoNoffke on 29 Nov 2003 ---- ---+++ Consegna? per quando è stata fissata la consegna? se è stata fissata... -- Comment added by Users.CarloStefani on 29 Nov 2003 ---- ---+++ Diagonali Da qualche parte vicino all'inizio di questa pagina ho letto "basta che i quadrati della diagonale siano consecutivi" o qlc del genere. Questo esempio qui sotto mostra una retta in diagonale consecutiva dai due punti '@'? <verbatim> ##########XX@# #######XXX#### ####XXX####### #@XX########## </verbatim> -- Comment added by Users.OliverTran on 29 Nov 2003 ---- ---++++ Re: Errore di Compilazione 2 (Il primo è risolto) Hai mica sbagliato a scrivere il nome della funzione 'main'? ---++++ Re: Domanda sulla versione opzionale La macchina vince sia passando su '|' che su '@'. ---++++ Re: Consegna? Lunedì 1° novembre alle 24. ---++++ Re: Diagonali Il metodo che ho descritto per calcolare le diagonali esamina una successione di caselle con x (se deltax>deltay) crescente a incrementi di 1 e quindi si tratta di caselle vicine tra loro (o affiancate o con coordinata 1 che differisce di 1). -- Comment added by Users.AndreaSterbini on 29 Nov 2003 ---- ---++++ Re: Diagonali Vediamo un po': * prendo il '@' in basso come origine * le coordinate dell'altro '@' sono quindi (11,3) * il coefficiente angolare m della retta y=mx che passa per l'origine e (11,3) è m=3/11 * le coordinare di ciascun punto sono: | *x* | *y* | | 1 | 3/11=0 | | 2 | 6/11=0 | | 3 | 9/11=0 | | 4 | 12/11=1 | | 5 | 15/11=1 | | 6 | 18/11=1 | | 7 | 21/11=1 | | 8 | 24/11=2 | | 9 | 27/11=2 | | 10 | 30/11=2 | | 11 | 33/11=3 | Quindi dovrebbe essere <verbatim> ############@# #########XXX## #####XXXX##### #@XXX######### </verbatim> -- Comment added by Users.AndreaSterbini on 29 Nov 2003 ---- ---+++ Macchine sovrapposte. Mi è venuto un dubbio prof..lei ha scritto, sul testo dell'esercizio: - se più macchinine occupano la stessa posizione si mostri solo il carattere dell'ultima che sta in quella posizione. Le spiego il perchè di questo dubbio. Lancio il mio programma e metto due macchine in gioco, la prima la chiamo 'A' e la seconda 'B'. Se ad un certo punto della corsa 'A' sta ferma, non si muove, e 'B' gli si ferma esattamente sopra..si vede 'B'. Se invece è 'B' a star ferma, ed 'A' gli si ferma sopra..si vede sempre 'B', perchè dal testo ho capito l'ultima del GRUPPO di macchine che ho inserito...oppure devo far vedere l'ultima che arriva? Spero di non doverci rimettere mano.. -- Comment added by Users.DaniloRossi on 29 Nov 2003 ---- ---++++ Re: Macchine sovrapposte. Devi mostrare l'ultima tra tutte le macchine in gioco che sta a quelle coordinate. In pratica se le disponi (solo quelle in gioco) nella matrice una per volta nell'ordine dalla prima all'ultima, si otterrà esattamente questo. -- Comment added by Users.AndreaSterbini on 29 Nov 2003 ---- Si, è esattamento quello che faccio: prima di stampare la situazione dispongo le N macchine rimaste in gioco dalla prima all'ultima sulla matrice (ovvero se metto 3 macchine ABC, dispongo prima A, poi B e poi C, nel caso siano ancora tutte in gioco)..quindi il comportamento che le ho scritto sopra è corretto. Rileggendo ora il testo, "nell'ordine dalla prima all'ultima" avevo pensato che poteva essere interpretato anche come "nell'ordine di arrivo sulla casella". Grazie mille :) -- Comment added by Users.DaniloRossi on 29 Nov 2003 ---- ---+++ Errore di Compilazione Non credo di aver sbagliato... Ho scritto: int main () { -- Comment added by Users.EmanuelePaterna on 29 Nov 2003 ---- ---+++ Re:Errore di Compilazione Forse perche hai scritto leggimossa invece di leggiMossa -- Comment added by Users.AlessioDiMauro on 29 Nov 2003 ---- si quello si... me ne sono accorto... però inizio a pensare ke il mio gcc si sia andato a farsi benedire... Vi faccio un esempio Questo è il codice ke cerco di compilare: printf("START\n"); printf("Inserisci il numero di macchine: "); Ecco quando lo eseguo mi stampa solo "START" e poi mi da Segmentation fault Se eseguo il gdb mi dice ke trova degli errori con la strlen()... che io nn sto usando... Qualcuno mi aiuti.... :( -- Comment added by Users.EmanuelePaterna on 29 Nov 2003 ---- ---+++ Errori risolti tranne uno Io per prendere il numero di righe usate (in pratica quant'è alta la matrice) ho usato ALTEZZA=sizeof(therace); però ho scoperto che cosi mi riporta 100, cioè la larghezza.... Quindi... come devo fare per avere l'altezza? -- Comment added by Users.EmanuelePaterna on 29 Nov 2003 ---- Re: per emanuele paterna sizeof(therace) ti da la dimensione dell'array in questo senso: se fosse un array di int sarebbe la grandezza di un int per il numero degli elementi. In questo caso viene calcolata la grandezza di un puntatore a char (non di un char!), per il numero di elementi. Ovvero sizeof(therace) = sizeof(char*) * numeroElementi. Se dividi quindi per la grandezza di un puntatore a char (che poi è 4 se non sbaglio) ti trovi il numero degli elementi del vettore, ovvero il numero delle righe, per come è impostata la matrice. -- Comment added by Users.DaniloRossi on 29 Nov 2003 ---- ---+++ Ancora su segmentation fault prima errore non me lo dava, vabbe' cmq veniamo al sodo...credo che il punto in cui si blocchi sia: *maze = (char *)malloc(sizeof(char *)); dove ho: char **maze; Dove ho sbagliato?Salut -- Comment added by Users.BeniaminoLarocca on 29 Nov 2003 ---- ---+++ 3 domande 1) Nel mio programma ho messo:#include "pista.h"... Ma quando compilo ,utilizzando la matrice delta di pista.h nel main, mi dice : "subscripted value is neither array nor pointer",mentre leggimossa e la matrice therace non danno errori; 2)Fara in tempo a mettere un 100.out con il controllo delle diagonali? 3)La funzione leggimossa del file pista.h scarta gia gli accapo presenti nel file 100.in o dobbiamo fare noi un controllo su questo? -- Comment added by Users.RiccardoManni on 29 Nov 2003 ---- ---+++ 100.in: versione con o senza diagonale? <font color="blue">Visto che non avrò tempo per ultimare la versione con la diagonale,volevo sapere se l'esempio 100.in è con o senza diagonale. E' importante, perchè per il momento non mi viene come il 100.out</font> -- Comment added by Users.LivioDellaCorte on 29 Nov 2003 ---- ---+++ Ehi ma dov'è il link alla pagina di consegna?!? -- Comment added by Users.LivioDellaCorte on 29 Nov 2003 Mi rispondo da solo. Il link è <font color="purple"><a href="http://twiki.dsi.uniroma1.it/~andrea/consegna.html">questo</a></font> ---- ---+++ Re: Re: Diagonali Scusi prof, mi sembra che la diagonale da lei tracciata sia più che altro una curva. Ho tracciato una linea con Paint da @ a @ eppure quest'ultima lascia alcune X scoperte:<BR> <IMG SRC="http://heyaaa.united.net.kg/retta.gif"> Per questo caso la retta non dovrebbe essere tipo questa? <verbatim> ##########XX@# #######XXX#### ####XXX####### #@XX########## </verbatim> Ad ogni modo, non mi importa quale metodo seguire, l'importante è che passi i test. Quindi, mi conferma che gli input che immetterà nei test prevedono l'uso del suo algoritmo di calcolo della diagonale? Grazie -- Comment added by Users.OliverTran on 29 Nov 2003 ---- ---+++ Domanda Scusi prof...ma una domanda mi sorge spontanea? Ma ha senso che lei ci sta spiegando le liste quando con Silvestri non le abbiamo ancora fatte, ma stiamo facendo ancora i file? lei i file non li fa? -- Comment added by Users.SimoneSabbatini on 30 Nov 2003 ---- ---+++ Ancora sul vettore dinamico Sono inscritto al primo canale anche se il prof ci ha detto che non era necessario fare questo prog io volevo farlo lo stesso. Potrei sapere più precisamente lei cosa intende con "vettore dinamico" non avendo avuto spiegazione a lezione. Credo si faccia con la calloc ma non riesco a copiare gli indirizzi nel vettore. Per il resto l'esercizio l'ho fatto, mi manca solo questo passaggio (invece di una struttura dinamica ho usato un vettore statico con gli indirizzi). Se si usa la calloc ho iserito tra i parametri della funzione il numero delle righe e la dimensione di una riga ma poi con la strdup mi inserisce caratteri sballati nel vettore. Che faccio? non c'è un altro modo per allocare un vettore dinamico? -- Comment added by Users.JacopoBusso on 30 Nov 2003 ---- ---+++ Diagonale Per la discesa è cosi? <verbatim> #@XXX######### #####XXXX##### #########XXX## ############@# </verbatim> Oppure è cosi? <verbatim> #@############ ##XXX######### #####XXXX##### #########XXX@# </verbatim> -- Comment added by Users.EmanuelePaterna on 30 Nov 2003 ---- Si era detto che quest'anno gli homework fossero più "abbordabili" ma a me non sembra affatto, poichè come nel caso della Formula1 il problema è molto ma molto difficile... Vorrei giusto capirci qualcosa... Tnx! -- Comment added by Users.CesareDelVecchio on 30 Nov 2003 ---- ---+++ Setvbuf Per quanto ho capito la setvbuf consente di prelevare i caratteri mano mano senza necessitare di return, ma non ho capito bene i parametri che la funzione necessita perchè il libro non si capisce bene. Cosa devo metterci? Una volta attivata è sufficente usare getchar per prelevare gli input? -- Comment added by Users.JacopoBusso on 30 Nov 2003 ---- ---++++ Re: Ancora su segmentation fault togli l'asterisco da davanti a maze=! L'asterisco dereferenzia la variabile, che però contiene monnezza, per cui stai cercando di scrivere in una locazione "ad capocchiam" il valore tornato da malloc. ---++++ Re: Ancora sul vettore dinamico Non ho capito se ti riferisci alle stringhe della pista o al vettore di macchine. * nel primo caso puoi usare l'opzione *-fwritable-strings* in compilazione e scrivere in *therace* * nel secondo devi allocare un vettore di N elementi chiascuno grande come una macchinina, per sapere quanto è grande la struct che hai definito per le macchinine usa *sizeof* ---++++ Re: 3 domande 1 a me non lo da 1 non faccio in tempo 1 rileggi leggiMossa ---++++ Re: Diagonale %RED%*NOTA* ho cambiato questa risposta perchè questo è il comportamento della divisione intera %FINE% Arrotondate il calcolo verso lo zero (che poi è quello che fa la divisione intera). Direi che debba essere (facendo i conti con origine nella '@' in alto a SX): |*x*|*y*| |1|-3/11=0| |2|-6/11=0| |3|-9/11=0| |4|-12/11=-1| |5|-15/11=-1| |6|-18/11=-1| |7|-21/11=-1| |8|-24/11=-2| |9|-27/11=-2| |10|-30/11=-2| |11|-33/11=-3| ovvero <verbatim> #@XXX######### #####XXXX##### #########XXX## ############@# </verbatim> ---++++ Re: abbordabili? Cominciano ad essere difficilotti perchè le strutture dati allocate dinamicamente sono difficili in se'. ---++++ Re: Domanda Che problema c'e'? Tanto devi sapere entrambi. Farò un esercizio sui file. ---++++ Re: 100.in: versione con o senza diagonale? Senza diagonale. ---++++ Re: Setvbuf lascia stare setvbuf -- Comment added by Users.AndreaSterbini on 30 Nov 2003 ---- ---+++ calloc, malloc, strdup Prof, invece di allocare spazio con la malloc, è possibile utilizzare la calloc? In questo modo creo un vettore dinamico, e sinceramente mi trovo meglio con questa funzione (anche perché è l'unica che conosco "abbastanza" bene visto che prima dell'università ho programmato praticamente sempre e solo in C---++). E un'altra cosa: perché utilizzare la strdup e non intervenire direttamente su therace? Si tratta semplicemente di non "sporcare" il percorso originale? Questo perché a me è parso possibile intervenire direttamente su therace (che non è const, quindi è modificabile). So che questa è stata una domanda un po' stupida (mi rendo conto che è conveniente usare la strdup), ma avevo implementato il programma senza l'uso della strdup. Chiedo scusa se queste domande sono già state postate, ma purtroppo ho iniziato solo ieri a programmare perché il maltempo mi ha portato via la connessione (che mi è stata ripristinata solo oggi) :( -- Comment added by Users.DanieleBernardi on 30 Nov 2003 ---- ---+++ Getch() La getch() dovrebbe essere non bufferizzata quindi visto che lei non fa controlli sull'eco dei tasti posso usare quella senza complicarmi la vita col setvbuf? -- Comment added by Users.JacopoBusso on 30 Nov 2003 ---- ---+++ Diagonale Ma -3/11 fa -0.qualcosa... Quindi se la faccio tra interi mi ritorna 0, non -1 Professore come si fa? -- Comment added by Users.EmanuelePaterna on 30 Nov 2003 ---- ---++++ Re: calloc, malloc, strdup Usa pure la calloc, fa le stesse cose della malloc e in più azzera la memoria allocata. Non puoi modificare therace (perchè è fatta da costanti) a meno che non usi in compilazione la'opzione *-fwritable-strings*. Altrimenti devi copiarla. ---++++ Re: Getch() Non c'e' nessun problema di bufferizzazione (infatti non vi ho chiesto la setvbuf). ---++++ Re: Diagonale In effetti ho provato a eseguire le divisioni intere con numeri negativi e in quel caso vengono arrotondate verso l'alto (verso lo zero). Quindi (visto che va bene il risultato della divisione intera: * %RED% *i risultati vanno arrotondati verso lo zero* %FINE% Spero che questo non crei fin troppi casini :-( %RED% *NOTA: ho aggiornato la risposta precedente* %FINE% -- Comment added by Users.AndreaSterbini on 30 Nov 2003 ---- ---+++ OFF TOPIC - Sciopero!!! Domani c'è lezione? Si o No? Grazie -- Comment added by Users.MatteoLaBella on 30 Nov 2003 ---- ---+++ Errori di memoria: non capisco proprio!! Il programma è completo (mi pare, sono stato velocissimo!) ma quando deve uscire pare che non riesca a liberarmi la memoria e va in crash. Ho provato anche ad usare free() ma niente; ho usato anche exit(0) al posto di return 0, ma ancora niente. L'unica soluzione è di lasciare tutto com'è oppure usare abort (che è la stessa cosa). Perché tutto questo? Ho dimenticato qualcosa? E succede solo quando premo 'q' oppure anche l'ultima macchinina va a sbattere. E' stranissimo. Inoltre, quando premo Control-C per interrompere il programma, mi dice (uso XP ma non giudicatemi male, sono un fan Mac da tempi non sospetti) che ho fatto riferimento a una posizione di memoria che non potevo leggere, la 0x23232323 se può essere utile. E, ripeto, ogni volta che il programma dovrebbe terminare normalmente invece va in palla. Non faccio strani riferimenti di memoria (almeno credo :P) e per questo proprio non riesco a capire cosa capiti al mio programma. Como se spieca? :P Come nel mio precedente post, mi scuso se ci sono post simili ma a causa di problemi con la connessione non ho avuto (e tuttora non ho) tempo per scorrermeli tutti. -- Comment added by Users.DanieleBernardi on 01 Dec 2003 ---- ---+++ Ancora sull'input Ho risolto i problemi sul vettore, l'unico dubbio che mi è rimasto è sull'output che ancora non capisco.... credo di aver capito: prelevo N (numero auto) INVIO prelevo X (coordinata) INVIO prelevo Y (coordinata) INVIO prelevo in successione tutte le direzioni delle auto una di seguito all'altra senza premere INVIO fino a che non termina il prog per una condizione. E' giusto così? Altrimenti potrebbe spiegarmi? -- Comment added by Users.JacopoBusso on 01 Dec 2003 ---- ---+++ Domanda banale... ...però non so come si fa...argh!!!Come faccio a lanciare, sotto linux con gcc, il programma assegnandoli il 100.in? -- Comment added by Users.BeniaminoLarocca on 01 Dec 2003 ---- ---+++ E poi, non va la getchar O meglio, va, ma alla fine dell'input devo per forza premere Invio se no niente. Ed anche in questo caso non so che pesci prendere. -- Comment added by Users.DanieleBernardi on 01 Dec 2003 ---- ---+++ delta di pista.h Ho incluso "pista.h"... leggimossa e la pista le prende correttamente, ma quando vado a compilare nelle righe in cui richiamo il delta del pista.h mi dice:"subscripted value is neither array nor pointer"... Da che dipende? se nel codice aggiungo un array delta2 identico a delta di pista.h passo i test? -- Comment added by Users.MarcoGrechi on 01 Dec 2003 ---- ---+++ Re: Domanda banale Una volta compilato il file col gcc, lancia il programma seguendo questa sintassi (era scritto nel testo del programma): =./nomeprogramma < 100.in= Se vuoi anche che l'output finisca in un file, scrivi: =./nomeprogramma < 100.in > 100.out= -- Comment added by Users.DanieleBernardi on 01 Dec 2003 ---- ---+++ Non c'entra molto con Formula1: il libro di Tronci Scusate se faccio questa domanda che non c'entra con l'homework (ma su questa pagina dovreste leggerla), ma mi chiedevo se qualcuno sa che libri usa Tronci. Il nostro Deitel&Deitel non gliel'ho mai visto usare, piuttosto usa "linguaggio C"(Kernighan - Ritchie) ed un altro di cui non so il nome e che invece vorrei sapere se qualcuno di voi lo sa. Grazie! -- Comment added by Users.CleoniceMansillo on 01 Dec 2003 ---- ---+++ Re: E poi, non va la getchar Non avevo letto attentamente le note dell'esercizio, quindi il fatto che occorra premere Invio è ininfluente. Rimangono questi problemi di memoria :( -- Comment added by Users.DanieleBernardi on 01 Dec 2003 ---- ---+++ <font color='jellow'><b>Dimensioni della matrice</b></font> Volevo sapere come fare il controllo se si esce dalla matrice di stringhe so che è una cavolata ma come un fesso mi sono scordata di farla adesso e non riesco a trovare un punto logico dove farlo. IL controllo lo devo fare sulla x e la y separate o direttamente sull'array ? Se mi dite come fare. :-) -- Comment added by Users.DarioFiorenza on 01 Dec 2003 ---- ---++++ Re: Errori di memoria: non capisco proprio!! Hai provato a usare il debugger per capire dove esplode? ---++++ Re: Ancora sull'input Guarda l'esempio nel testo dell'esercizio e il file 100.in. ---++++ Re: delta di pista.h A me con gcc compila correttamente. (che usi per compilare? gcc? Devc---++?) ---++++ Re: Dimensioni della matrice All'inizio e ogni volta che sposti una macchina controlli che sia la x che la y siano positive e minori del numero di colonne (e righe). -- Comment added by Users.AndreaSterbini on 01 Dec 2003 ---- ---+++ Ha vinto lui :( Prof, ci rinuncio, il problema dell'errore me lo da ancora. C'è un segmentation fault, sì, ma ho debuggato (brutto termine, lo so) finora e niente, questo maledetto segmentation fault esce fuori alla fine... Sì, alla fine, quando il debugger mi segnala l'ultima parentesi graffa del main. Allora credo che il problema sia il mio sistema, non riesco a trovare altra spiegazione. Dopo un return 0 e una parentesi graffa... Prof, nel caso non compili può dare un'occhiata al mio sorgente ed eventualmente segnalarmi qual è il problema? Non riesco a capacitarmene proprio. -- Comment added by Users.DanieleBernardi on 01 Dec 2003 ---- ---+++ Consegna la consegna è tra 2 ore? e dove stava scritto? come mai non sta da nessuna parte? l'ho dovuto chiedere io..... io credevo che...visto che non era ancora stato riportato da nessuna parte c'erano ancora 2 o 3 giorni...e invece....bè in due ore non riuscirò sicuramente a finire. o magari voi l'avete trovato? Ovviamente sarà stato detto in aula, ma visto che io non frequento non lo potevo sapere. grazie -- Comment added by Users.CarloStefani on 01 Dec 2003 ---- ---+++ pagina consegna? non la vedo...dov'è? -- Comment added by Users.BeniaminoLarocca on 01 Dec 2003 ---- ---+++ Pagina consegna http://twiki.dsi.uniroma1.it/~andrea/consegna.html <br> cmq il link sta nella prima pagina di prog1 su twiki -- Comment added by Users.EmanueleQuattrini on 01 Dec 2003 ---- ---+++ Errore: Scusate sapete mica perche quando faccio: "LISTA temp; temp=malloc(sizeof(listaNode));" Mi da questo tipo di errore: "ANSI C---++ forbids implicit conversion from `void *' in assignment"? -- Comment added by Users.DaniloDauria on 02 Dec 2003 ---- ---+++ Re:Consegna Guarda che sta scritto nella webhome dove c'e' "Date e scadenze" -- Comment added by Users.CleoniceMansillo on 02 Dec 2003 ---- Pero' e' anche vero che non era scritto nella pagina in cui e' descritto l'homework -- Comment added by Users.CleoniceMansillo on 02 Dec 2003 ---- ---+++ Re:Consegna me ne sono accorto solo dopo dov'era la pagina; però, in effetti, le altre volte c'era anche un link direttamente dalla pagina dell'esercizio. -- Comment added by Users.BeniaminoLarocca on 02 Dec 2003 ---- ---++++ Re: Consegna Pe un errore di battitura il frammento del testo dell'esercizio che indicava quando e dove consegnare non veniva visualizzato. La [[http://twiki.dsi.uniroma1.it/~andrea/consegna.html][pagina di consegna]] però lo diceva ben chiaro da sempre. (ora l'ho aggiornata per l'esercizio 5) -- Comment added by Users.AndreaSterbini on 02 Dec 2003 ---- ---+++ Ci rinuncio! Non riesco ad implementare la corsa per più di una macchina. Prof. potrebbe fare anche qualche test con una sola macchina in gara (mi sono un po impicciato con i passaggi da una struct a quella successiva). Almeno così forse ho qualche possibilità di passare qualche test. grazie! -- Comment added by Users.PaoloCanaletti on 03 Dec 2003 ---- ---+++ Correzione Quando esce la correzione dell'esercizio? -- Comment added by Users.PaoloCanaletti on 09 Dec 2003 ---- ---++++ Re: Correzione Quando è pronta (questo finesettimana mi sono fatto i c***i miei e non sono stato a casa). -- Comment added by Users.AndreaSterbini on 10 Dec 2003 ---- ---+++ Sulla correzione Professore potrebbe controllare gli esercizi che non compilano facendo una lista di come sarebbero potuti andare come qualche esercizio fa? Oppure data la difficoltà del test di questo esercizio non può farlo? -- Comment added by Users.JacopoBusso on 15 Dec 2003 ---- ---++++ Re: Sulla correzione Questa settimana non ci riesco. Se posso lo faccio durante le vacanze di Natale (ma non ve lo prometto) -- Comment added by Users.AndreaSterbini on 15 Dec 2003 %COMMENT{button=" Aggiungete la domanda " mode="before"}% <a name="form"> * Ricordatevi di dare un titolo alla vostra domanda come segue: <verbatim> <tre spazi>---+++<spazio>Titolo della domanda "non dovete mettere <>" Testo della domanda </verbatim>
This topic: Programmazione1/AA0506/PZ
>
HomeWork4
>
DomandeHomework4
Topic revision: r246 - 2003-12-15 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback