Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatori ottimizzatori?
Forum - C/C++ - Puntatori ottimizzatori?

Avatar
macberte (Normal User)
Newbie


Messaggi: 2
Iscritto: 17/06/2010

Segnala al moderatore
Postato alle 0:25
Venerdì, 18/06/2010
Buonasera a tutti. Sono nuovo del forum e un autodidatta appassionato del "c".
Colgo l'occasione per ringraziare voi tutti per quelle volte che in silenzio ho trovato, rubato e carpito informazioni utili per il raggiungimento dei miei obiettivi da neofita del "c" su questo sito.

Detto questo sto scrivendo come primo approccio un semplice programma geometrico che esegue le operazioni base sul triangolo rettangolo. Direi che funziona anche se con dei bug ENORMI e il codice credo sia di prima elementare... Vorrei chiedere un aiuto su come posso sfruttare i PUNTATORI per ottimizzare il codice acquisendone anche l'utilità che mi è ancora poco chiara per mancanza d'esempi, e qualsiasi altro consiglio per rendere migliore questo piccolo programma.
Grazie :k:

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

//Prototipo della funzione
float ipotenusa(float,float);
float cateto(float,float);
float area(float,float);
void menu();
//Dichiarazione delle variabili
float a,b,c;
char nome[10];
int scelta;


int main()

{
printf("COME TI CHIAMI? ",nome);
scanf("%s", &nome);
printf("\n\n\n\n                                    %s\n\n",nome);

  
    printf("\n                ### BENVENUTO NEL PROGRAMMA DI CALCOLO ###\n");                                
    printf("                       ######## DEL TRIANGOLO ########\n");
    printf("                         #######  RETTANGOLO  #######\n\n\n");  
    printf("----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n");
    

do
{
menu();
}
while(scelta > 3 || scelta <= 0);

if  (scelta==1)

   {
         printf("\n\n ### CALCOLO L'IPOTENUSA ###\n\n");
        
         printf("\n %s inserisci il valore del primo cateto: ",nome);
         scanf("%f", &a);

         printf("\n Inserisci il valore del secondo cateto: ");
         scanf("%f", &b);
         //uso della funzione IPOTENUSA
         c = ipotenusa(a,b);
         printf("\n Il valore dell'IPOTENUSA e': %.2f  \n",c);
         printf("\n\n\n");
    }

    
if (scelta==2)
    {

          printf("\n\n ### CALCOLO IL CATETO ### \n\n\n");
       teto:
          printf("\n %s inserisci il valore del'ipotenusa: ",nome);
         scanf("%f", &a);

         printf("\n Inserisci il valore del cateto: ");
         scanf("%f", &b);
    if (a < b){
      printf("\n\nIMPOSSIBILE! %s nel triagolo rettangolo l'ipotenusa non puo' essere inferiore al cateto! \n",nome);
      goto teto;
      }
    if (a <= b){
      printf(" \n\n ## %s QUESTO MI SA CHE E' UN TRIANGOLO ISOSCELE...## \n\n\n\n",nome);
      goto teto;
      }
        
         //uso della funzione CATETO
         c = cateto(a,b);
         printf("\n Il valore del CATETO e': %.2f  \n",c);
         printf("\n\n\n");
                    
    }

if (scelta==3)
    
       {
         printf("\n\n ### CALCOLO L'AREA  ###\n\n");
        
         printf("\n %s inserisci il valore del primo cateto: ",nome);
         scanf("%f", &a);

         printf("\n Inserisci il valore del secondo cateto: ");
         scanf("%f", &b);
        
         //uso della funzione AREA
        
         c = area(a,b);
         printf("\n Il valore dell'AREA e': %.2f  \n",c);
         printf("\n\n\n");
    }
    
          

system("pause");
return 0;
}
// Procedura menu'
void menu()
{
printf("\n1-CALCOLO DELL'IPOTENUSA\n");
printf("\n2-CALCOLO DI UN CATETO\n");
printf("\n3-CALCOLO DELL' AREA\n\n");
scanf("%d", &scelta);
}


//Dichiarazione della funzione IPOTENUSA

float ipotenusa(float primo_cat,float secondo_cat)
{
float ipotenusa = sqrt(((primo_cat * primo_cat) + (secondo_cat * secondo_cat))/2);
// Dice che valore deve ritornare cioè Ipotenusa
return ipotenusa;
}
// Dichiarazione della funzione CATETO

float cateto(float ipo,float cat)
{
float cateto = sqrt(((ipo * ipo) - (cat * cat))/2);
// Dice che valore deve ritornare cioè Ipotenusa
return cateto;
}
//Dichiarazione della funzione AREA

float area(float primo_cat,float secondo_cat)
{
float area= (primo_cat*secondo_cat)/2;
//Dice che valore deve ritornare cioè Area
return area;
}

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:55
Venerdì, 18/06/2010
Non è che si debbano usare per forza dei puntatori in un programma. E non è neanche vero che questi migliorino la situazione se non ce n'è bisogno ...

P.S. Piuttosto, nel primo printf, non ha senso usare la variabile nome ancora non inizializzata ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
macberte (Normal User)
Newbie


Messaggi: 2
Iscritto: 17/06/2010

Segnala al moderatore
Postato alle 20:40
Venerdì, 18/06/2010
Grazie della dritta sulla variabile...emh rileggendo il code effettivamente non ha senso.
So che i puntatori non sono sempre indispensabili. Sto solo cercando qualche esempio pratico, che riesca a comprendere, che mi possa spiegare il loro utilizzo nell'ambito di un programma che conosco.

Ciao

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:50
Venerdì, 18/06/2010
Prova ad allocare dinamicamente una matrice n x m in cui n ed m sono indicati da tastiera, e riempila con i valori di n x m


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote