|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
[C] Chiedo aiuto per giovedì pomeriggio
Ciao a tutti i programmatori, vorrei chiedervi una mano.
Giovedì mattina ho un esame di programmazione in C che funziona così; -la mattina lo facciamo in aula su foglio protocollo -entro qualche giorno, poi, dobbiamo compilarlo e farlo funzionare. la valutazione del compito sarà al 99% su quello fatto in aula, ma io vorrei chiedeervi di darmi una mano al pomeriggio, qualora non riuscissi a finire in breve tempo la correzione, in quanto questa settimana e la prox saranno colme di esami (solo questa ne ho 4). ho paura di essere una pippa nella compilazione. Ci sarà qualcuno volenteroso ad aiutarmi? ![]() Grazie notte ![]() ![]()
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
ti aiuterei ma giovedì ho esame di matlab dalle 16 in poi
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
a che ora?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
bo, tipo anche verso sera, non è fiscalissima la cosa, avrò un paio di giorni per far girare tutto... ve lo chiedo perchè devo dare 3 esami ancora, dopo i 3 dati lunedì oggi e ieri. il brutto deve ancora venire, martedì ho teoria dei segnali...
domani posto il mio programmino, se non riesco a farlo girare. prima lo faccio girare meglio è, grazie mille a tutti voi che sarete solidali... sono massacrato ![]()
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() Ultima modifica di kobane : 15-06-2005 alle 18:49. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
tu posta il programma che hai scritto (indentato)
e i problemi che hai
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
Quote:
ok, domani lo farò. grazie mille per l'aiuto ![]() ![]() ![]() ![]()
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
Questo è il testo dell'esame:
[inizio del testo] alcuni organismi sono rapresentati da stringhe alfanumeriche, che contengono solo caratteri minuscoli e hanno lunghezza 23 caratteri. gli organismi si evolvono accopppiandosi con organismi simili. la somiglianza tra due organismi è espressa da un valore intero: per ciascun carattere identico nella stessa posizione, la somiglianza viene incrementata di un valore 1. per esempio, gli organismi abbbbbbbbbbbbbbbbbbbbbb e baaaaaaaaaaaaaaaaaaaaaa hanno somiglianza 0, mentre gli organismi aaaaaaaaaaaaaaaaaaaaaaae aaabbbbbbbbbbbbbbbbbbbb hanno somiglianza 3. ogni accoppiamento causa il decesso dei due individui che si accoppiano, e la nascita di un singolo individuo. l'individuo creato è anch'esso formato da 23 caratteri, ciascuno dei quali èuguale al carattere alfabeticamente minore tra quelli dei due genitori nella posizione corrispondente. per esempio, aaaaazzzzzzzzzzzzzzzzzz e abcdeeeeeeeeeeeeeeeeeee producono l'individuo aaaaaeeeeeeeeeeeeeeeeee. riassumendo gli organismi si evolvono con le seguenti regole: * gli organismi che si riproducono generano un nuovo individuo e muoiono *gli organismi con somiglianza pari a 0 non si riproducono (e non muoiono, finchè non si riproducono) *ogni organismo si riproduce con uno a scelta tra gli organismi a lui simili *gli organismi generati diventano adulti, e quindi pronti alla riproduzione, solo nella generazione successiva. il programma deve leggere da tastiera il nome di due file. il primo contiene la comunità iniziale: sulla prima riga c'è il numero di organnismi della comunità, mentre sulle righr successive sono riportati gli organismi, uno per ogni riga del file. il secondo file deve essere prodotto dal progrmma, e deve contenere tutte le generazioni ottenute mediante evoluzione dalla comunità iniziale. le varie generazioni sono separate nel file da una riga di commento riportante il numero della generazione (vedi esempio). il programma termina quando la comunità non è più in grado di evolversi, ovvero quando non si hanno più organismi generati. ESEMPIO (file di input) 5 aaaaaaaaaaaaaaaaaaaaaaa xxxzzzzzzzzzzzzzzzzzzzz abababababababababababa xyxyxyxyxyxyxyxyxyxyxyx azzzzzzzzzzzzzzzzzzzzzz (file di output) Generazione 1: aaaaaaaaaaaaaaaaaaaaaaa axxzzzzzzzzzzzzzzzzzzzz xyxyxyxyxyxyxyxyxyxyxyx Generazione 2: aaaaaaaaaaaaaaaaaaaaaaa xyxyxyxyxyxyxyxyxyxyxyx [fine del testo] Questo invece è il mio codice indentato: Codice:
/* Name: Esame del 16/06/2005 Copyright: Author: Erik Sosso Date: 16/06/05 15.43 Description: Correzione del compito fatta a casa */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define L 24 #define LN 10 //definizione struttura struct comunita{ char organismo[L-1]; int stato; } //Definizione dei prototipi di funzione int controllasom(char *, char *); void stampaelemento(char *, char *, FILE *); //programma int main(void) { FILE *fp, *fp2; char temp[L], nome[LN], nome2[LN]; int n,i,k,somiglianza; struct comunita *vet; char organismo1, organismo2; //leggo nome file printf("introduci il nome del file: \n"); scanf("%s", nome); fp=fopen(nome, "r"); if (fp==NULL){ printf("errore apertura file.\n"); exit(1); } //leggo n if(fscanf(fp,"%d", &n)==EOF && n<0){ printf("errore apertura file.\n"); exit(1); } //alloco dinamicamente la struttura vet=(struct comunita *)malloc(n*sizeof(struct comunita)); if (vet==NULL){ printf("errore di allocazione.\n"); //apro file 2 printf("introduci nome del secondo file: \n"); scanf("%s", nome2); fp2=fopen(nome2,"w"); if (fp2==NULL){ printf("errore apertura file.\n"); } //carico la struttura for(i=0;i<n;i++){ while(fscanf(fp, "%s", temp)!=EOF){ for (k=0;k<L;k++){ vet[i].organismo[k]=temp[k]; } vet[i].stato=0; } } //controllo quando gli organismi sono uguali e cambio lo stato i=0; k=i+1; while(i<n){ while (vet[i].stato==0 && vet[k].stato==0){ somiglianza=controllasom(vet[i].organismo, vet[k].organismo); if (somiglianza>0){ stampaelemento(vet[i].organismo, vet[k].organismo, fp2); vet[i].stato=1; vet[k].stato=1; } k++; } i++; } fclose(fp); fclose(fp2); free(vet); return(0); } //FUNZIONI int controllasom(int organismo1[], int organismo2[]) { int i, *som, a; for (i=0;i<(L-1);i++){ *som++; } a=*som; return(a); } void stampaelemento(char *organismo1, char *organismo2, FILE *fp2); { char organismonuovo[L-1]; int i; for(i=0;i<(L-1);i++){ if (organismo1[i]<=organismo2[i]){ organismonuovo[i]=organismo1[i]; }else{ organismonuovo[i]=organismo2[i]; } } fprintf(fp2,"%s",organismonuovo); return; } credo di aver fatto delle cappelle clamorose nel richiamo delle funzioni... ma quanto sono spina da uno a dieci? ![]() Se qualcuno può darmi una mano, gli sarò grato a vita... ![]() ![]()
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Il programma mi pare contenga alcuni errori, ad esempio non mi pare che simuli la creazione delle nuove generazioni. I due cicli while annidati mi pare che effettuino un ciclo di accoppiamento tra gli organismi iniziali, ma i nuovi organismi generati ti limiti a stamparli nel file ma non li consideri più, mentre avresti dovuto costruirti un nuovo vettore di organismi su cui lavorare nell'iterazione successiva. Poi qualke altro errore,ad esempio in controllasom non allochi memoria per *som (ma perche utilizzi un puntatore a int invece di un int???), e nell'altra funzioni non concludi il vettore che rappresenta l'organismo con il carattere di fine stringa.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
Quote:
![]() ![]() ![]() si, le generazioni non sono riuscito a farle perchè mi è mancato il tempo, purtroppo sono molto asino ancora e in due ore sono riuscito olo a fare questo... pensa che ho perso mezz'ora a capire come fare il programma... Quote:
Te dici che avrei dovuto solo usare una funzione passando by value? a proposito, il compilatore mi dà errore sul primo prototipo di funzione, ma perchè? non è giusto come ho passato il vettore di caratteri? ![]() ![]() grazie per le risposte!!! ![]()
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() Ultima modifica di kobane : 19-06-2005 alle 12:50. |
||
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
perchè devo allocare memoria per *som?
perchè som è un puntatore, ma a chi punta? no è inizializzato e quindi punta ad una locazione arbitraria della memoria. Tra l'altro quella funzione non fa altro che incrementare *som di uno per ogni iterazione del for senza controllare se gli organismi sono uguali nelle posizioni corrispondenti. L'errore sul prototipo penso che te lo dia perchè della dichiarazione e nella definizione della funzione hai dichiarato diversamente il tipo degli argomenti. Io ti consiglierei di rifare l'esame....
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Ma adesso devi correggere il programma per consegnarlo?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
Quote:
Non riesco a capire dov'è l'errore, mi si pianta il compilatore anche se cambio il tipo di dati... int controllasom(char *, char *); dov'è l'errore? è sbagliato consegnare alla funzione una stringa in questo modo? come si passa una struttura by reference?
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Per rispondrti devo vedere il codice a cui fai riferimento e l'errore che ti dà il compilatore.
I puntatori e le stringhe sono degli argomenti non semplici e ci vuole un po di tempo e di esercizi per capirli bene.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Feb 2004
Città: Torino
Messaggi: 1443
|
non è che mi sai consigliare qualche guida al c fatta veramente bene?
__________________
La terra è di destra, l'universo di sinistra - Chuck Norris fan ![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Prova a consultare queste:
http://alpha.science.unitn.it/~fiore...ac/indexc.html http://www.lulli.net/WEB/hack/xximpa...imparareC.html http://www.hyperbook.it/c_book/c2.htm http://www-ee.eng.hawaii.edu/Courses/EE150/Book/ e la reference delle funzioni di libreria: http://www.cplusplus.com/ref/
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:15.