Aiuto per semplice programma

di il
61 risposte

61 Risposte - Pagina 2

  • Re: Aiuto per semplice programma

    Posto il codice che così dovrebbe andare:
    
    #include <stdio.h>
    float base,
          Potenza;
          
    short i,
          NumVolt,
          Esp;	  
    	  
    void AcquisisciDati () {	  
    	printf("scrivi il valore della base:");
       scanf("%f" , &base);
    
       printf("scrivi il valore dell'esponente:");
       scanf("%hd" , &Esp);  
    }  
    
    void CalcolaPotenza (){
          
         Potenza=1;
         for(NumVolt=1 ; NumVolt<=Esp; NumVolt++)
         Potenza *= base;
    	 
        if (Esp<0) {
        Potenza= base * (1/Esp); 
    	}
    	}
    	
    	
    	void main() { 
    	AcquisisciDati();
        CalcolaPotenza();
       printf(" il risultato è %f", Potenza);
       
      }
        
    
    Mi da un warning a riga 29 dicendo: return type of main is not int, ma perchè dovrebbe essere int?
  • Re: Aiuto per semplice programma

    Platone 2.0 ha scritto:


    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?
    dipende perchè non sempre la conversione tra float ed int e possibile.
    anche nei casi in cui questa è possibile il sol fatto che ci sia un troncamento non voluto costituisce un errore.
    comunque il compilatore ti genera un warning il che e peggio di un errore perchè ti manda avanti la compilazione ti esegue anche il programma ma poi alla fine il programma avrà dei comportamnti non molto lineari che sono, molto spesso, di difficile soluzione.
    poi devi capire che il ragazzo sta imparndo il linguaggio e quindi ha bisogno, almeno per il momento,di regole ben precise da seguire.
    e questa mi sembrava una regola fondamentale.
  • Re: Aiuto per semplice programma

    Okemberg ha scritto:


    Posto il codice che così dovrebbe andare:
    Mi da un warning a riga 29 dicendo: return type of main is not int, ma perchè dovrebbe essere int?
    E' richiesto dallo standard del linguaggio e non è opinabile. In pratica serve per restituire a un eventuale file batch un valore di ritorno. Negli attuali compilatori il return 0 finale può essere omesso.
  • Re: Aiuto per semplice programma

    Ah ok, grazie shodan.
    Per non appesantire il forum con le mie domande da neofita pongo qui il mio prossimo dubbio: vorrei svolgere il seguente esercizio: -Scrivere un programma che permetta di visualizzare in binario il valore di un numero reale. -
    Per risolverlo il libro mi consiglia di usare una maschera di bit con un solo valore uguale a 1 facendolo shiftare e confrontandolo con i bit del numero inserito.
    Ho capito la logica ma non ho idea di come lavorare bit a bit, il mio libro spiega solo in maniera veloce gli operatori bitwise.
    Devo utilizzare dei numeri interi tenendo conto della loro configurazione in binario? O c'è modo di definire i singoli bit di una variabile in altro modo? Ad esempio la maschera potrebbe essere 128 che in binario è 10000000?
    Mi potete consigliare del materiale che spiega come lavorare sui bit? Grazie
  • Re: Aiuto per semplice programma

    Okemberg ha scritto:


    Ah ok, grazie shodan.
    Devo utilizzare dei numeri interi tenendo conto della loro configurazione in binario?
    Si, tenendo presente però che per evitare sorprese devono essere unsigned.
    O c'è modo di definire i singoli bit di una variabile in altro modo?
    No, nel senso che puoi costruire il valore binario su carta, ma poi devi convertirlo in decimale, in esadecimale o in ottale (abbastanza raro come caso).
    Se vuoi usare un numero binario tipo 11010011 devi prima trasformarlo.
    Es.
    
    // codice bin. 11010011
    unsigned int var = 211;
    unsigned int var = 0xD3;
    unsigned int var = 0323 // ottale.
    
    fanno tutti la stessa cosa. Il caso esadecimale (con un pò di pratica) è il più immediato in quanto consente di visualizzare immediatamente i vari nibble (gruppi di 4 bit).
    Ad esempio la maschera potrebbe essere 128 che in binario è 10000000?
    Si, però devi fare attenzione al tipo di variabile. Se è unsigned e fai uno shit a destra avrai
    01000000, se invece è di tipo signed avrai 1100000.
    Mi potete consigliare del materiale che spiega come lavorare sui bit? Grazie
    Un paio di link trovati con "operatori bitwise" su google.

    http://www.oscene.net/it/programmazione/c/capire-e-sfruttare-le-operazioni-bitwise
    Comunque non si trova mai più di un paragraffetto sul tema. In genere la principale difficoltà è di pensare a un numero decimale rappresentato in binario.
  • Re: Aiuto per semplice programma

    Perfetto, grazie mille, infatti più di tanto non avevo trovato on line, quindi l'utilità dell'esercizio sta proprio nell'abituarti a ragionare per conversioni immagino.
  • Re: Aiuto per semplice programma

    Ho usato caratteri unsigned ma i valori che ritornano sono tutti 1, il che è molto strano, probabilmente ho usato male qualche operatore o scritto male qualcosa, il codice è questo:
    
    #include <stdio.h>
    unsigned Mask, Num, a;
    
    short i;
    
    void main(){
    printf ("scrivi un numero:");
    scanf("%u", &Num);
    
    Mask=128;
    for(i=1 ; i<=8 ; i++){
    a= Mask&Num;
    if(a=0) printf("0");
    else printf("1");
    Mask>>1;
    system("PAUSE");
      }
    }
    
    
  • Re: Aiuto per semplice programma

    Il problema è nell'if: il confronto si fa con l'operatore ==. Nel modo in cui fai tu effettui un assegnamento che rende l'if sempre falso (il false è in realtà uno zero).
  • Re: Aiuto per semplice programma

    Della ha scritto:


    il problema è nell'if: il confronto si fa con l'operatore ==. Nel modo in cui fai tu effettui un assegnamento che rende l'if sempre falso (il false è in realtà uno zero).
    Hai ragione, che fesso che sono! Il bello è che è una cosa che so benissimo! thank you
  • Re: Aiuto per semplice programma

    Ho modificato l'operatore, ora però mi da tutti zero, il che significa che dal confronto Mask&Num esce sempre zero, mi sembra strano però..
  • Re: Aiuto per semplice programma

    Premetto che sono da cellulare quindi può darsi che mi sia perso qualcosa, ma mi sembra che vada bene! Forse il system("pause") è dentro al for, ma non dovrebbe aver a che fare col tuo problema!
  • Re: Aiuto per semplice programma

    Questa linea

    Mask>>1;

    è sbagliata ... deve essere

    Mask=Mask>>1;

    oppure

    Mask>>=1;
  • Re: Aiuto per semplice programma

    Perfetto, grazie mille! Tipici errori da principiante mi sa...
  • Re: Aiuto per semplice programma

    oregon ha scritto:


    Questa linea...
    In effetti non me n'ero accorto :p
  • Re: Aiuto per semplice programma

    Eccomi con l'ennesimo dubbio da neofita: l'esercizio richiede di trovare il minimo tra 5 numeri immessi da tastiera e sostituirlo al primo elemento del vettore.
    Non so se è normale o se sono io ad essere un po' lento, ma scrivere algoritmi anche così banali da solo mi crea qualche difficoltà, sarà perchè sono all'inizio?
    In ogni caso posto il codice:
    
    #include <stdio.h>
    
    short 
    i, 
    j, 
    k;
    
    int 
    Minimo, 
    NumDati,  
    Indice;
    
    void main(){
    int Dati[j];   
    for(j=0; j<5; j++){
    printf("scrivi un numero:");
    scanf("%u", &Dati[j]);
    }
    
    NumDati=5;
    Indice=0;
    i=1;
    
    while(i<NumDati){
    if(Dati[i]<Dati[Indice]){
    Minimo=Dati[Indice];
    Dati[Indice]=Dati[i];
    Dati[i]=Minimo;
    }
    i=i+1;
    }
    
    for (k=0; k<5; k++){
    printf("%u", Dati[i]);
    }
    system("PAUSE");
    }
    
    
    Il risultato è sempre: 172172172...
Devi accedere o registrarti per scrivere nel forum
61 risposte