Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errori  nel programma dell'esame!!!
Forum - C/C++ - Errori nel programma dell'esame!!!

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 10:05
Mercoledì, 01/07/2009
Ciao a tutti...
sono alle prese con la sistemazione  di un programma ma nn riesco a capire come far sparire 2 warning e 1 errore.
I warning sono di tipo:Suspicious pointer conversion in function main,
l'errore  è :Type mismatch in redeclaration of function ordina.

mi spiego meglio nel main la funzione coi warning deve caricare una lista semplice in 2 vettori dinamici;
nella ordina ho fatto un pò di pasticci per modificare menopossibile il resto del programma.
Praticamente ho copiato in 2vettori d'appoggio i vettori dinamici del main e li ho ordinati.
Poi sempre in questa funzione dovevo controllare se gli elementi della lista sono compresi in quelli ordinati.. secondo voi è salvabile???:-|

posto il codice qui sotto:
1) il main
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 25
  5.  
  6. typedef enum {FALSE,TRUE}boolean;
  7.  
  8. typedef struct coord
  9. {
  10.         float x[2];/*coordinate x e y di 2 punti di 1 rettangolo*/
  11.         float y[2];
  12.         struct coord *prox;
  13. }punto;
  14.  
  15. FILE *pfile;
  16.  
  17. void inserisci_coord(punto **pttesta,int *numpt);
  18. void carica_in_vett(punto **pttesta,int numpt,float *vettorex, float *vettorey);
  19. void ordina__vett(float vettorex[],float vettorey[],int numpt,punto **pttesta);
  20. float calcola_area(float vettorex[],float vettorey[],int numpt);
  21.  
  22. int main()
  23. {
  24.     int numeropt;
  25.     punto *punt_testa;
  26.     float *vettx, *vetty;
  27.     float area;
  28.     punt_testa=NULL;
  29.     inserisci_coord(&punt_testa,&numeropt);
  30.     carica_in_vett(&punt_testa,numeropt,&vettx,&vetty);
  31.     ordina_vett(&vettx,&vetty,numeropt,&punt_testa);
  32.     area=calcola_area(vettx,vetty,numeropt);
  33.     printf("L'area totale è %f",area);
  34.  
  35.  
  36. }


2)La carica dove ci sono i 2 warning:
Codice sorgente - presumibilmente C++

  1. void carica_in_vett(punto**pttesta,int numpt,float*vettorex,float *vettorey)
  2. {
  3.      punto* ptcorr;
  4.      int indice;
  5.      ptcorr= *pttesta;
  6.  
  7.  
  8.      vettorex=(float*)malloc((numpt/2)*(sizeof(float)));
  9.      vettorey=(float*)malloc((numpt/2)*(sizeof(float)));
  10.  
  11.      for(indice=0;indice<(numpt/2);indice++)
  12.      {
  13.  
  14.      vettorex[indice]=(*ptcorr).x[0];
  15.      vettorey[indice]=(*ptcorr).y[0];
  16.      vettorex[indice+1]=(*ptcorr).x[1];
  17.      vettorey[indice+1]=(*ptcorr).y[1];
  18.      ptcorr=(*ptcorr).prox;
  19.      }
  20. return;
  21. }



3)la ordina dove mi segnala l'errore:

Codice sorgente - presumibilmente Java

  1. void ordina_vett(float vettorex[],float vettorey[],int numpt,punto **ptesta)
  2. {
  3. int indice,ind;
  4. boolean ordinato1,ordinato2;
  5. punto *ptcorr;
  6. float appoggiox[MAX],appoggioy[MAX],provv;
  7. ptcorr=*ptesta;
  8. for(indice=0;indice<numpt;indice++)
  9.    {
  10.    appoggiox[indice]=vettorex[indice];
  11.    appoggioy[indice]=vettorey[indice];
  12.    }
  13.    ordinato1=ordinato2=FALSE;
  14.    while((!ordinato1)&&(!ordinato2))
  15.    {
  16.    ordinato1=ordinato2=TRUE;
  17.       for(indice=0;indice<(numpt);indice++)
  18.       {
  19.       if( appoggiox[indice]>appoggiox[indice+1])
  20.        {provv=appoggiox[indice];
  21.        appoggiox[indice]=appoggiox[indice+1];
  22.        appoggiox[indice+1]=provv;
  23.        ordinato1=FALSE;
  24.        }
  25.        if(appoggioy[indice]> appoggioy[indice+1])
  26.         {provv=appoggioy[indice];
  27.        appoggioy[indice]=appoggioy[indice+1];
  28.        appoggioy[indice+1]=provv;
  29.        ordinato2=FALSE;
  30.        }
  31. }
  32. ind=1;
  33. for(indice=0;indice<(numpt);indice++)
  34. {
  35. while(ptcorr!=NULL)
  36.    {
  37.       if(((*ptcorr).x[0]<appoggiox[indice])&&((*ptcorr).x[1]>appoggiox[indice+1])
  38.         &&((*ptcorr).y[0]<appoggioy[indice])&&((*ptcorr).y[1]>appoggioy[indice+1]))
  39.         {
  40.         vettorex[indice]=(*ptcorr).x[0];
  41.         vettorex[indice+ind]=(*ptcorr).x[1];
  42.         vettorey[indice]=(*ptcorr).y[0];
  43.         vettorey[indice+ind]=(*ptcorr).y[1];
  44.         ind++;
  45.         }
  46.  
  47.    else
  48.    ptcorr=(*ptcorr).prox;
  49.   }
  50. }
  51. return;
  52.  
  53. }

                             GRAZIE A CHIUNQUE RISPONDERA?:)

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 11:09
Mercoledì, 01/07/2009
Postato originariamente da nene896:

Ciao a tutti...
sono alle prese con la sistemazione  di un programma ma nn riesco a capire come far sparire 2 warning e 1 errore.
I warning sono di tipo:Suspicious pointer conversion in function main,
l'errore  è :Type mismatch in redeclaration of function ordina.

[...]

Riguardo all'errore, e' probabile che sia dovuto al fatto che tu hai dichiarato un tipo

Codice sorgente - presumibilmente C++

  1. typedef enum {false,true}boolean; // false e true tutto minuscolo



poi pero' quando lo usi

Codice sorgente - presumibilmente C/C++

  1. boolean ordinato1,ordinato2;
  2. [...]
  3. ordinato1=ordinato2=FALSE; // FALSE tutto maiuscolo
  4. [...]
  5. ordinato1=ordinato2=TRUE; // TRUE tutto maiuscolo



probabilmente riconosce FALSE ( dichiarato chissa' dove ) ma e' diverso da false, da qui' l'errore di tipo.

Per i Warning non so...

Ciao. :k:

LUigi

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 11:24
Mercoledì, 01/07/2009
in realta quando ho inserito il codice ha formattato in minuscolo.. mentre nel programma è tutto maiuscolo...Ci deve essere altro..
:) ho provato a compilare su dev-c  e li invece sostiene che (non so in quale vita  :rofl: ) avrei dichiarato"implicitamente la ordina_vett di tipo int.
ma il prototipo èdi tipo void , nel main la chiamo solo e non l'assegno a nulla, e infina la funzione vera e propria è di tipo void...

ho anche provato ad allocare dinamicamente i vettori d'appoggio..ma gli errori restano gli stessi...

secondo te i passaggi di parametri alle funzioni che allocano dinamicamente sono giusti?

ps.  hai visto  questa volta i codici li ho messi come si deve!!:)

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 11:33
Mercoledì, 01/07/2009
Scusa una curiosita', ma ho visto bene o nel prototipo di ordina_vett ci sono due underscore?

Inoltre sei sicuro che non ci sia un'altra ordina_vett di tipo int dichiarata altrove? ( magari non da te, in uno dei file inclusi )

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 12:44
Mercoledì, 01/07/2009
Avevi ragione erano sul serio i due underscore :k:    Ma si può??? ;)
gira anche con i warning nella carica  e nei vettori c'è quello che dovrebbe esserci!!!
fin qui tutto bene..
però...nella ordina ho trovato un baco(o meglio nn fa quello k voglio :D)
non mi assegna gli elementi del vettore (vettorex e vettorey) ai vettori di appoggio.
sia nel caso in cui sovradimensiono i appoggiox si se gli alloco dinamicamente
Praticamente in vettorex e vettorey ci sono i valori giusti..ma in appoggio ci sn valori strani(nn so forse di default perkè nn mi sembrano indirizzi)

Codice sorgente - presumibilmente Java

  1. void ordina_vett(float vettorex[],float vettorey[],int numpt,punto **ptesta)
  2. {
  3. int indice,ind;
  4. boolean ordinato1,ordinato2;
  5. punto *ptcorr;
  6. float *appoggiox,*appoggioy,provv;
  7. ptcorr=*ptesta;
  8. appoggiox=(float*)malloc((numpt/2)*sizeof(float));
  9. appoggioy=(float*)malloc((numpt/2)*sizeof(float));
  10. for(indice=0;indice<numpt;indice++)
  11.    {
  12.    appoggiox[indice]=vettorex[indice];
  13.    appoggioy[indice]=vettorey[indice];
  14.    }


PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 13:17
Mercoledì, 01/07/2009
Salve, stavo ricontrollando il codice di ordina_vett, ma facendo il conto delle parentesi Graffe mi sembra che la { siano una in piu' delle }, controlla, una cosa del genere potrebbe provocare effetti imprevedibili.

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 14:39
Mercoledì, 01/07/2009
Il problema non è la parentesi... perchè non ho postato tutta la funzione...
cmq ho scoperto che nel vettorex che passo dal main ci sono solo zeri e non i valori caricati... Idee:-|  ???
se ne accettano di tutti i tipi :)

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 14:50
Mercoledì, 01/07/2009
Perchè non hai assegnato l'indirizzo dei valori.

ps. Quando ci sono i warnings o errori, dicci ancora più preciso in quale riga.

Ultima modifica effettuata da Lawliet il 01/07/2009 alle 14:53
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 14:54
Mercoledì, 01/07/2009
Testo quotato

Postato originariamente da nene896:

Il problema non è la parentesi... perchè non ho postato tutta la funzione...
cmq ho scoperto che nel vettorex che passo dal main ci sono solo zeri e non i valori caricati... Idee:-|  ???
se ne accettano di tutti i tipi :)



Vedi bene... perche' mi riferivo al primo codice di ordina_vett che hai postato.

PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo