Aiuto per semplice programma

di il
61 risposte

Aiuto per semplice programma

Ciao a tutti, ho iniziato da pochissimo a programmare in C, ho creato un semplice programma per calcolare la potenza di un numero inserito da tastiera, ma probabilmente ho sbagliato qualcosa, mi potete dare una mano? Di seguito il codice:

#include <stdio.h>
float base,
risultato;


short i,
NumVolt,
Esp;

void main() {


printf("scrivi il valore di x:");
scanf("%f" , &base);

printf("scrivi il valore dell'esponente:");
scanf("%hd" , &base);


calcolaPotenza()
{
if(Esp >= 0){
Esponente=Esp}
else{
Esponente=-Esp}

baseElevEsp(){
Potenza=1
for(NumVolt=1 ; NumVolt<=Esponente; NumVolt++)
Potenza *= base;
}

if (Esp<0) {
Potenza= 1/Potenza
}
}
}

61 Risposte

  • Re: Aiuto per semplice programma

    Ci sono tantissimi errori.
    Prima di tutto mancano molti punti e virgola alla fine delle istruzioni, alcune variabili non sono dichiarate e mi sa che non ti è chiaro il concetto di function o procedura (non so tu cosa voglia utilizzare). Il problema non è aggiustarti il codice, il problema è che alcune parti sono del tutto da rifare

    Cercalo di aggiustare magari ti si può aiutare meglio.
  • Re: Aiuto per semplice programma

    Mi dispiace ma e' totalmente da rifare.
    errori :
    printf("scrivi il valore di x:");
    scanf("%f" , &base);
    printf("scrivi il valore dell'esponente:");
    scanf("%hd" , &base);
    qui dovresti accettare 2 variabili differenti e non una sola variabile.
    if(Esp >= 0){
    Esponente=Esp}
    else{
    Esponente=-Esp}
    i casi di un esponente sono 3 e non 2 come dice il codice!
    e sono:
    esonente > 0
    esponente < 0
    esponente = 0 in questo caso il risultato e' 1 per definizione
    if (Esp<0) {
    Potenza= 1/Potenza
    }
    la variabile potenza non è definita
    comunque a prescindere dalla sua definizione
    la formula è :
    risultato = base * (1/esponente)
    spero di esserti stato di aiuto
  • Re: Aiuto per semplice programma

    Ok ora lo rifaccio, sto programmando da pochi giorni, scusate. è che ho chiari gli algoritmi ma mi sfugge come inserire tutto quanto assemblato nel modo giusto dentro un programma. Stasera riposto con le correzioni.
    Ma scusa quando esponente è uguale a zero rientra nel caso del maggiore o uguale di zero, in teoria dovrebbe calcolarlo correttamente, o sbaglio?
  • Re: Aiuto per semplice programma

    Bene.
    E cerca di inserire il codice usando l'apposito tasto [ code ] [ /code ] , è più facile per noi aiutarti
  • Re: Aiuto per semplice programma

    Ops cavoli scusate In ogni caso avete risposto subito, siete gentiissimi!
  • Re: Aiuto per semplice programma

    Okemberg ha scritto:


    Ma scusa quando esponente è uguale a zero rientra nel caso del maggiore o uguale di zero, in teoria dovrebbe calcolarlo correttamente, o sbaglio?
    Esatto, in quel caso non effettua il ciclo for perché la condizione non è soddisfatta (NumVolt = 1 e Esponente = 0) per cui alla fine Potenza vale 1.
  • Re: Aiuto per semplice programma

    Ok ho corretto un po' di cose, quando lo compilo però mi da come errore: syntax error before '}' token, me lo segna alla linea 22, forse dovevo dichiarare prima la funzione calcolaPotenza?
    
    #include <stdio.h>
    float base,
          risultato;
    
    
    short i,
          NumVolt,
          Esp,
    	  Potenza;
    	  
    void main() {
             
      {
       printf("scrivi il valore di x:");
       scanf("%f" , &base);
    
       printf("scrivi il valore dell'esponente:");
       scanf("%hd" , &Esp);
      }
    
      calcolaPotenza()
      {
        if(Esp >= 0){
         Esponente=Esp}
        else{
         Esponente=-Esp}
    
         baseElevEsp()
         {
         Potenza=1;
         for(NumVolt=1 ; NumVolt<=Esp; NumVolt++)
         Potenza *= base;
         }
        if (Esp<0) {
        base * (1/Esp); 
        return Risultato;	
        }
      }
    }
    
    
    
  • Re: Aiuto per semplice programma

    Hai confuso la dichiarazione ed implementazione della funzione con la sua chiamata. All'interno del main tu devi semplicemente chiamare la tua funzione. L'implementazione, invece, va fatta al di fuori del main.
    Per semplificarti la vita puoi dichiarare ed implementare la tua funzione prima del main.

    Poi noto che hai fatto un po di confusione con le parentesi, ma forse dipende dal fatto che hai implementato una funzione nel main, quindi risolvendo il primo problema dovresti risolvere anche il secondo! Comunque sia posta il codice appena correggi
  • Re: Aiuto per semplice programma

    Il confronto x > y e una cosa e significa che x deve essere più grande di y
    x >= y significa che x deve essere uguale o più grande di y
    x = y significa semplicemente che x deve essere uguale a y
    quindi sono tre situazioni diverse la prime e la terza sono specifiche mentre la seconda e più generica.
  • Re: Aiuto per semplice programma

    Della grazie, ho capito cosa intendi, ora sto uscendo, dopo correggo e posto il codice della funzione main separato dall'implementazione delle varie funzioni, compresa quella per acquisire i dati.
    Smalldragon quindi devo inserire i 3 casi diversi oppure posso lasciare com'è ora ?
  • Re: Aiuto per semplice programma

    Devi usare i tre casi differenti perchè il calcolo viene effettuato in 3 modi diversi.
    comunque ancora non ci siamo perchè:
    manca la visualizzazione dei risultati
    c'è più di un errore nella dichiarazione della funzione calcola potenza.
    gli errori sono i seguenti :
    la funzione deve essere dichiarata di un tipo (esempio int,double,float,void etc etc)
    la tua funzione per lavorare a bisogno di parametri che tu non definisci.
    nella tua funzione non vengono definite variabili ma vengono usate.
    questo è un errore perchè le variabili ammenochè non siano parametri definiti nella testata della funzione quando la funzione finisce vengono distrutte.
    ed essendo le tue variabili definite fuori dalla funzione (cioè nel main) non possono essere utilizzate all'interno della funzione.

    ricordati
    quando effettui una istruzione return accertati che la variabile dell'istruzione sia dello stesso tipo della funzione.

    esempio int funzione(.........)

    int funzione(.......)
    int ritorno
    ..
    ..
    ..
    return ritorno // cosi va bene
    int funzione(.......)
    float ritorno
    ..
    ..
    ..
    return ritorno // questo è un errore
  • Re: Aiuto per semplice programma

    smalldragon ha scritto:


    int funzione(.......)
    float ritorno
    ..
    ..
    ..
    return ritorno // questo è un errore
    Salve a tutti, vorrei solo discutere un attimo la tua affermazione. A quanto ne so io(cioè non molto ) non è un errore nel senso stretto del termine, diciamo che è un'imperfezione, non ritorna il numero completo ma troncato alla dimensione int.
    Se ritorno è 9.9, ritorna solo 9.
    O no?
  • Re: Aiuto per semplice programma

    @platone: Mi sa che se lo scrivi così ti avvisa di un errore il compilatore. Se metti un cast esplicito, invece, fa come dici tu!

    @smalldragon: concordo su tutto tranne sulla necessità di usare 3 casi diversi. Cioè mantenerli separati è in generale corretto, però in questo caso non è indispensabile visto l'algoritmo che ha usato per il calcolo della potenza. In ogni caso entrambi i modi funzionano
  • Re: Aiuto per semplice programma

    Ok ragazzi, sono appena passato da un mio amico a prendere un libro di programmazione in c/c++ (fino ad ora studiavo dalle guide on line ) ora è tutto molto più chiaro! Riscrivo il programmino da zero e lo riposto!
Devi accedere o registrarti per scrivere nel forum
61 risposte