Pagina 1 di 2

Tema esame

Inviato: mar 8 set 2009, 11:36
da Fili

Codice: Seleziona tutto

#include<stdio.h>
#include<string.h>

struct Media{
char matricola[7];
int esami;
int media;
};
struct Verbalizzazione{
int voto;
char mat[7];
}

void Scrittura_uscita(char nome_file_i[],char nome_file_ii[], 
                      char nome_file_iii[]);
 
int main()
{
 struct Media fine;
 char nome_file_i[]="1";
 char nome_file_ii[]="2";
 char nome_file_iii[]="3";
 Scrittura_uscita("1","2","3");
 printf("Matricola: %s\n Numero esami: %d\n Media %.2f",fine.matricola,
         fine.esami,fine.media);
return 0;
}

void Scrittura_uscita(char nome_file_i [],char nome_file_ii [], 
                      char nome_file_iii[])
{
 struct Media inizio,fine;
 struct Verbalizzazione a;
 float nuova_media;
 int nuovi_esami;
 char c[7],

 FILE *fpi;
 FILE *fpii;
 FILE *fpiii;
 
 fpi=fopen(nome_file_i,"r");
 while(fscanf(fpi,"%s%d%.2f",inizio.matricola,&inizio.esami,inizio.media)!=EOF)
  ;
 fpii=fopen(nome_file_i,"r");
 while(fscanf(fpii,"%*s%*d%*c%*d%*c%*d%d%s",&a.voto,&a.mat)!=EOF){
  fpiii=fopen(nome_file_i,"w");
  if(strcmp(a.mat,inizio.matricola)==0){
   nuovi_esami=inizio.esami;
   nuovi_esami++;
   nuova_media=(inizio.media+a.voto)/nuovi_esami;
   fine.matricola=a.mat;
   fine.esami=nuovi_esami;
   fine.matricola=nuova_media;
   }
  else{
    inizio.matricola=a.mat;
    inizio.media=a.voto;
    inizio.esami=1;  
  fclose(fpiii);
  }
 }
fclose(fpii);
fclose(fpi);
}
Mi da questi errori:

Codice: Seleziona tutto

15: error: two or more data types in declaration of 'Scrittura_Uscita'
In Function 'Scrittura_uscita'
52: error: incompatible types in assignmet
54: error: incompatible types in assignmet
57: error: incompatible types in assignmet
Non riesco a farlo partire cosa devo fare?

Inoltre anche questo non funziona:

Codice: Seleziona tutto

#include<stdio.h>
#include<math.h>

int velocita_superata(char nome_file[],int velocita_soglia);

int main()
{
 int v;
 char nome_file[]="4";
 printf("inserisci la velocita di soglia: ");
 scanf("%d",&v);
 printf("%f",velocita_superata("4",v);
 return 0;
}
  
int velocita_superata(char nome_file[],int velocita_soglia)
{
 float a[1000],b[1000];
 float c[50][50];
 int x=0,y=0,i,j;
 FILE *fp;
 fp=fopen(nome_file,"r");
 while(fscanf(fp,"%f%f",&a,&b)!=EOF){
   ;}
 for(i=0;i<a[x];i++)
  for(j=0;j<b[y];j++){
    if(velocita_soglia=(sqrt(pow((a[x]-a[x-1]),2)+pow((b[y]-b[y-1]),2))*3.6){
     fclose(fp);
     return c[x][y];}
    else{
     fclose(fp);
     return 0;}
  }
}
E mi dice:

Codice: Seleziona tutto

In function 'main':
In function 'velocita_superata'
27: error: parse error before ' { ' token
30: error: parse error before "else"
At top level
33: error: parse error before ' } ' token
Vi prego aiutatemi

Re: Tema esame

Inviato: mar 8 set 2009, 11:46
da absinthe
non sono sicuro che sia accettata la sintassi char un_vettore []. dipende se è c/c++ e dal compilatore. e comunque nel main chiami Scrittura_uscita senza argomenti! tra l'altro: perchè il compilatore da errore in "Scrittura_Uscita" e non in "Scrittura_uscita"??? dove è l'errore!? quale è la funzione giusta?!

nel secondo caso manca una parentesi al printf segnalato alla riga 12 e mi sa che hai fatto casino con le parentesi graffe nella funzione sottostante il main (ma è un giudizio a colpo d'occhio: prima fissa il baco del printf! e ricontrolla)


M

Re: Tema esame

Inviato: mar 8 set 2009, 12:21
da Fili
Ho controllato e cambiato quelle cose che mi hai detto però mostra ancora errori..(vedi quelli aggiornati sopra)

Re: Tema esame

Inviato: mar 8 set 2009, 13:03
da ccts2002
per il primo programma, nella riga 52 e 54 assegni un intero ad una stringa, e non è concesso (usa sprintf) nella riga 57 vuoi copiare, penso, una stringa in un'altra...devi usare la libreria <string.h> e la funzione strcpy().
per il secondo programma mancano 2 parentesi tonde di chiusura, una nel printf e una nell'if che ti da errore.

ciao

Re: Tema esame

Inviato: mar 8 set 2009, 13:05
da Blallo
allora...non capisco questo:

Codice: Seleziona tutto

fscanf(fpii,"%*s%*d%*c%*d%*c%*d%d%s",&a.voto,&a.mat)!=EOF
innanzitutto quando ricavi da fscanf una stringa char non si mette '&', poichè è già un puntatore a quell'indirizzo di memoria.
Non capisco tutti gli argomenti che ci hai messo dentro francamente poi...
qui

Codice: Seleziona tutto

while(fscanf(fpi,"%s%d%.2f",inizio.matricola,&inizio.esami,inizio.media)!=EOF)
a inzio.media dovresti mettercelo invece '&'
qui

Codice: Seleziona tutto

fine.matricola=a.mat;
devi usare la strcpy (le stringhe non si copiano con '=' )
e poi se non ci dici a che serve il programma non capiamo granchè...

Re: Tema esame

Inviato: mar 8 set 2009, 15:55
da Fili
Grazie 1000 per il secondo esercizio, ora funziona.
Riguardo al primo, mi vengono dati 3 file: nel primo ho delle informazioni, la matricola il numero esami e la media,il seonco ho delle robe che non servono e poi il voto dell'esame e la matricola inerente al voto, in fine il terzo file lo devo aprire in scrittura per in modo che risulti essere alla fine il primo file però aggiornato.
Esempio:
1°file:
A-456373 8 27.87
2° file:
nome esame 12/12/2009 25 A-456373

Re: Tema esame

Inviato: mar 8 set 2009, 16:04
da Fili
Ora è quasi tutto ok, ho utilizzato lo strcpy e quindi sistemato gli errori 52,54,57 purtroppo alla riga 15 dice:
15: error: two or more data types in declaration of 'Scrittura_uscita'

Re: Tema esame

Inviato: mer 9 set 2009, 0:29
da Blallo
non puoi definire i char di Scrittura_uscita on [], devono poter avere una lunghezza massima, tipo char xxx[30]

Re: Tema esame

Inviato: mer 9 set 2009, 9:00
da absinthe
nel secondo esercizio leggo:

Codice: Seleziona tutto

while(fscanf(fp,"%f%f",&a,&b)!=EOF){
   ;}
non ha senso. a parte il fatto che un ciclo while senza iente dentro non ha senso e potresti commentarlo, quello che non torna è che tu inserisca un punto e virgola dentro le graffe!

M

Re: Tema esame

Inviato: mer 9 set 2009, 9:13
da Fili
Finalmente ora funziona tutto.
Un grazie 1000 a tutti quelli che mi hanno aiutato!!!

Inviato: ven 18 set 2009, 12:06
da Fili
Funzia

Re: Tema esame

Inviato: ven 18 set 2009, 13:24
da kreen
Ciao,
non voglio darti l'impressione di essere duro, ma i l piu' prezioso aiuto che ti posso dare è quello di consigliarti di studiare.
Non so che scuola tu stia facendo, beh, se è una università informatica la cosa e' preoccupante.

Tralasciando cose meno gravi, ma preoccupanti come l'apertura di un file e l'utilizzo del puntatore senza nemmeno controllare se lo hai aperto, se esiste....
vedo, ad esempio, il fatto che allochi una matrice a livello locale

char m[10][5][8];

poi la riempi e ritorni m, significa che di linguaggi di programmazione non hai ancora imparato (e forse capito) nulla e hai un mare di lavoro da fare.
Se vuoi continuare a farti del male, domanda ad altri di aiutarti. Se vuoi imparare, studia.

Re: Tema esame

Inviato: ven 18 set 2009, 13:42
da conraid
tra l'altro è la seconda volta che apri un topic con lo stesso titolo e senza usare i tag code
Te lo sposto nell'altra discussione
Se hai dubbi su qualcosa puoi trovare qualcuno disposto ad aiutarti, ma le soluzioni già pronte come dice Kreen non sono la "soluzione"

Re: Tema esame

Inviato: ven 18 set 2009, 16:11
da Fili
Bè meglio adesso che l'ho modificato?

Re: Tema esame

Inviato: ven 18 set 2009, 16:15
da conraid
Fili ha scritto:Bè meglio adesso che l'ho modificato?
se parli del codice in quanto tale non so aiutarti
se parli di come hai postato, no, non va meglio e ti chiedo di usare i tag code