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!!! - Pagina 2

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 15:15
Mercoledì, 01/07/2009
Hai pienamente ragione lì non c'è  ;)
però nel programma c'è.. nn l'ho selezionato tutto.. Che svampita!!!
ci sarà qualche oscenità altrove... ufff:(
se ti viene un illuminazione fammi sapere!!!
io continuo a cambiare qualcosa... nn si sa mai :asd:

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:36
Mercoledì, 01/07/2009
io vedo un ordina__vett dichiarata come funzione void, ma poi vedo che la definizione è ordina_vett.

Manca un underscore nel nome...

EDIT: Ooops.... non avevo notato che avevate già risolto questo punto! :D sorry!

Ultima modifica effettuata da TheKaneB il 01/07/2009 alle 17:37
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:41
Mercoledì, 01/07/2009
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. }




Attenzione! la variabile vettorex viene passata per valore. All'interno di questa funzione potrai modificare il valore "puntato da" vettorex, ma non puoi modificare il valore stesso di vettorex. Quindi l'indirizzo allocato con malloc si perderà nel nulla.

Per fare questa cosa dovresti adottare un metodo meno intricato, ad esempio allocare tutti i vettori che ti servono prima di entrare nella funzione, e passare alla funzione i puntatori già allocati.

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:51
Mercoledì, 01/07/2009
Quindi se provo ad allocare nel main i vettori posso cmq caricare i vettori nela funzione??
provo subito!!!!:om:
Spero proprio che sia la volta buona!!

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:29
Mercoledì, 01/07/2009
Grazie mille a tutti!!!
TheKaneB è verissimo!!!
praticamente allocava il vettore solo nella funzione, infatti provando una stampa nel main
non stampava float ma indirizzi...
ora ho allocato nel main e ho passato alla funzione solo il nome come un banalissimo vettore!!
l'ultima cosa che mi preoccupa e che gli ultimi 3 elementi del vettore sono riempiti da indirizzi...
quindi mi viene in mente k ci sarà un problema di dimensioni..
faccio un rapido controllo e vi aggiorno...
Siete fantastici... sarei diventata pazza i vostri consigli!! :D

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 20:11
Mercoledì, 01/07/2009
siamo qui per darci una mano a vicenda, no? :-) a questo servono le community!

PM Quote
Avatar
nene896 (Normal User)
Rookie


Messaggi: 21
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 22:01
Mercoledì, 01/07/2009
Allora il programma è finito ma il risultato non viene.
se qualcuno di voi vuole  provare a farlo girare lo posto.
la base dati è un file  rettang.dat in cui ci sn dei pt di un rettangolo(quello in basso a sinista e quello in alto a destra)
Il programma deve alcolare l'area senza sovrapposizioni.

3.0 1.0 5.0 3.0
1.0 2.0 3.0 5.0
4.0 2.0 10.0 4.0
2.0 4.0 5.0 7.0
6.0 4.0 9.0 7.0
4.0 6.0 7.0 8.0
9.0 8.0 10.0 9.0

dovevamo usare liste  vettori dinamici
il risultato doveva essere 43.0 A me viene 14.0 Se riuscita a capire cosa non va...
non viene quindi finirò la relazione e mi sa che domani mattina il prof mi boccia
Ciò implica k sarò dei vostri ancora per un bel pò!!:D
Grazie a tutti!:asd:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 25
  4. typedef enum {FALSE,TRUE}boolean;
  5.  
  6. typedef struct coord
  7. {
  8.         float x[2];
  9.         float y[2];
  10.         struct coord *prox;
  11.  
  12. }punto;
  13.  
  14. FILE *pfile;
  15. float appoggiox[MAX],appoggioy[MAX];
  16.  
  17. void ordina_vett(float* vettorex,float* vettorey,int numpt,punto **pttesta);
  18. void inserisci_coord(punto **pttesta,int *numpt);
  19. void carica_in_vett(punto **pttesta,int numpt,float *vettorex, float *vettorey);
  20. float calcola_area(float* vettorex,float* vettorey,int numpt);
  21.  
  22. int main()
  23. {
  24.     int numeropt,indice;
  25.     punto *punt_testa;
  26.     float *vettx, *vetty;
  27.     float area;
  28.     punt_testa=NULL;
  29.     inserisci_coord(&punt_testa,&numeropt);
  30.      vettx=(float*)malloc((numeropt)*(sizeof(float)));
  31.      vetty=(float*)malloc((numeropt)*(sizeof(float)));
  32.     carica_in_vett(&punt_testa,numeropt,vettx,vetty);
  33.     for(indice=0;indice<(numeropt);indice++)
  34.     {
  35.     printf("%f\n",vettx[indice]);
  36.     printf("%f\n",vetty[indice]);
  37.     }
  38.  
  39.     ordina_vett(vettx,vetty,numeropt,&punt_testa);
  40.     for(indice=0;indice<(numeropt);indice++)
  41.     {
  42.     printf("%f\n",vettx[indice]);
  43.     printf("%f\n",vetty[indice]);
  44.     }
  45.     area=calcola_area(vettx,vetty,numeropt);
  46.     printf("L'area totale è %f\n",area);
  47.  
  48.  
  49. }
  50. void inserisci_coord(punto**ptesta,int *numpt)
  51. {
  52.      char nomefile[MAX];
  53.      punto *paux;
  54.      float x1,y1,x2,y2;
  55.      int indice;
  56.      indice=0;
  57.      printf("inserisci il nome file\n");
  58.      scanf("%s",nomefile,"r");
  59.      if((pfile=fopen(nomefile,"r"))!=NULL)
  60.      while(fscanf(pfile,"%f%f%f%f",&x1,&y1,&x2,&y2)!=EOF)
  61.      {
  62.          paux=(punto*)malloc(sizeof(punto));
  63.          (*paux).x[0]=x1;
  64.          (*paux).x[1]=x2;
  65.          (*paux).y[0]=y1;
  66.          (*paux).y[1]=y2;
  67.          (*paux).prox=*ptesta;
  68.          *ptesta=paux;
  69.          indice++;
  70.      }
  71.   fclose(pfile);
  72.  *numpt=indice-1;
  73. return;
  74. }
  75.  
  76. void carica_in_vett(punto**pttesta,int numpt,float*vettorex,float *vettorey)
  77. {
  78.      punto* ptcorr;
  79.      int indice;
  80.      ptcorr= *pttesta;
  81.  
  82.      for(indice=0;indice<(numpt);indice++)
  83.      {
  84.  
  85.      vettorex[indice]=(*ptcorr).x[0];
  86.      vettorey[indice]=(*ptcorr).y[0];
  87.      vettorex[indice+1]=(*ptcorr).x[1];
  88.      vettorey[indice+1]=(*ptcorr).y[1];
  89.      ptcorr=(*ptcorr).prox;
  90.      }
  91. return;
  92. }
  93.  
  94. float calcola_area(float *vettorex,float* vettorey,int numpt)
  95.  
  96. {
  97. int indice;
  98. float base,altezza,arearett,area;
  99. area=arearett=0.0;
  100. for(indice=0;indice<(numpt);indice++)
  101.    {
  102.    if(vettorex[indice]<vettorex[indice+1])
  103.    base=vettorex[indice+1]-vettorex[indice];
  104.    else
  105.    base=vettorex[indice]-vettorex[indice];
  106.    if(vettorey[indice]>vettorey[indice+1])
  107.    altezza =vettorey[indice]-vettorey[indice+1];
  108.    else
  109.    altezza=vettorey[indice+1]-vettorey[indice];
  110.    area=base*altezza;
  111.    arearett=arearett+area;
  112.    }
  113. return(arearett);
  114. }
  115.  
  116. void ordina_vett(float* vettorex,float* vettorey,int numpt,punto **ptesta)
  117. {
  118. int indice,ind;
  119. boolean ordinato1,ordinato2;
  120. punto *ptcorr;
  121. float provv;
  122. ptcorr=*ptesta;
  123.  
  124. for(indice=0;indice<numpt;indice++)
  125.    {
  126.  
  127.    appoggiox[indice]=vettorex[indice];
  128.    appoggioy[indice]=vettorey[indice];
  129.    }
  130.    ordinato1=ordinato2=FALSE;
  131.    while(!ordinato1)
  132.    {
  133.    ordinato1=TRUE;
  134.       for(indice=0;indice<(numpt);indice++)
  135.       {
  136.       if( appoggiox[indice]>appoggiox[indice+1])
  137.        {
  138.        provv=appoggiox[indice];
  139.        appoggiox[indice]=appoggiox[indice+1];
  140.        appoggiox[indice+1]=provv;
  141.        ordinato1=FALSE;
  142.        }
  143.       }
  144.      }
  145.        while(!ordinato2)
  146.    {
  147.    ordinato2=TRUE;
  148.       for(indice=0;indice<(numpt);indice++)
  149.       {
  150.        if(appoggioy[indice]> appoggioy[indice+1])
  151.         {provv=appoggioy[indice];
  152.        appoggioy[indice]=appoggioy[indice+1];
  153.        appoggioy[indice+1]=provv;
  154.        ordinato2=FALSE;
  155.        }}
  156. }
  157. ind=1;
  158. for(indice=0;indice<(numpt);indice++)
  159. {
  160. while(ptcorr!=NULL)
  161.    {
  162.       if(((*ptcorr).x[0]<appoggiox[indice])&&((*ptcorr).x[1]>appoggiox[indice+1])
  163.         &&((*ptcorr).y[0]<appoggioy[indice])&&((*ptcorr).y[1]>appoggioy[indice+1]))
  164.         {
  165.         vettorex[indice]=(*ptcorr).x[0];
  166.         vettorex[indice+ind]=(*ptcorr).x[1];
  167.         vettorey[indice]=(*ptcorr).y[0];
  168.         vettorey[indice+ind]=(*ptcorr).y[1];
  169.         ind++;
  170.         }
  171.  
  172.    else
  173.    ptcorr=(*ptcorr).prox;
  174.   }
  175. }
  176. return;
  177.  
  178. }


PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 22:32
Mercoledì, 01/07/2009
nene, usare commenti non fa male anzi, ci aiuteresti a capire cosa sono quelle variabili che hai dichiarato e che stai usando.
Io non ho capito due cose per il momento:
- Un rettangolo non ha due lati uguali per base e altezza? Altrimenti si chiamerebbe trapezio o altro.. potrei sbagliarmi io o.O'
- Numeropt Che cosa è?

EDIT: credo di aver capito cosa è numeropt, spiegami perchè nella funzione inserisci coordinate metti *numeropt = indice -1 ?

Ultima modifica effettuata da Lawliet il 01/07/2009 alle 22:55
PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo