Convetire carattere ASCII in numero per eseguire media!

di il
4 risposte

Convetire carattere ASCII in numero per eseguire media!

Ciao ragazzi questa volta il problema mi chiede di modificare un esercizio in modo che trovi la media.
Questo è il codice che ho scritto.
#include <stdio.h>
int main (void){

    [code]
    int grade;
    int aCount=0; /*somma il numero di A*/
    int bCount=0;
    int cCount=0;
    int dCount=0;
    int fCount=0;
    int totalea=0; /*somma il totale dei voti A,se ho 3 A sarà 30 poichè A=10,vale anche per a*/
    int totaleb=0;
    int totalec=0;
    int totaled=0;
    int totalef=0;
    int a;
    int A;
    A=a=10;
    int b;
    int B;
    B=b=8;
    int c;
    int C;
    C=c=6;
    int d;
    int D;
    D=d=4;
    int F;
    int f;
    F=f=2;
    float media;
    media=(float) (totalea + totaleb + totalec + totaled +totalef) /(aCount + bCount + cCount +dCount+ fCount);
    
    
    printf("Enter the letter grades.\n");
    printf("Enter the EOF character to end input.\n");
    
    while ((grade= getchar()) != EOF) {
          
          switch (grade) {
                 
                 case 'A':
                 case 'a':
                      totalea=totalea + grade;
                      ++aCount;
                      break;
                      
                 case 'B':
                 case 'b':
                      totaleb=totaleb + grade;
                      ++bCount;
                      break;
                 
                 case 'C':
                 case 'c':
                      totalec=totalec + grade;
                      ++cCount;
                      break;
                 case 'D':
                 case 'd':
                      totaled=totaled + grade;
                      ++dCount;
                      break;
                 case 'F':
                 case 'f':
                      totalef=totalef + grade;
                      ++fCount;
                      break;
                 
                 case '\n':
                 case '\t':
                 case ' ' :
                      break;
                      
                      default:
                              printf("Incorrect letter grade entered.");
                              printf(" Enter a new grade.\n");
                              break;
                              }
                      }
                      printf("La media della classe è %.2f", media);
                      fflush(stdin);
                      getchar();
                      return 0;
                      
}
Quanfo eseguo mi stampa la media della classe è -1.#J credo sia dovuto al fatto che non può dividere caratteri per numeri o qualcosa del genere

4 Risposte

  • Re: Convetire carattere ASCII in numero per eseguire media!

    Non capisco perche ti incasini con mille variabili.
    Guarda un attimo la tabella ascii
    http://www.asciitable.com/index/asciifull.gi

    prima ci devi dire la relazione delle lettere
    A = 10
    B = 9
    ......
    F = 5

    poi dovresti convertire le lettere in numeri.
    Siccome accetti solo lettere da A(a) a F(f) dovresti controllare se la lettera immessa apartiene a range
    http://www.cplusplus.com/reference/clibrary/cctype/islower/
    http://www.cplusplus.com/reference/clibrary/cctype/toupper/
    
    if(islower(grade))
       grade = toupper(grade);
    if( (grade >= 'A') && (grade <= 'F') )
    {
       totale += 10 - (grade - 'A'); //converte la lettera nella corrispondenza di prima 
       count++;
    }
    
    la media è: totale/count;
  • Re: Convetire carattere ASCII in numero per eseguire media!

    Scusa ma questo codice è troppo avanti per me

    if(islower(grade))
    grade = toupper(grade)


    che vuol dire il grade in parentesi? Cioè mi spiego da quello che ho studiato sin'ora so che l'if vuole un operatore di assegnamento, devo intenderlo come = ?

    cioè se grade=a allora a=A ?


    Poi io ho assegnato un valore ad A e a e ho detto che A=a=10, e non capisco perchè gli faccio eseguire il totale se il voto è maggiore di A o minore di F,cioè se inserisco un voto diverso da A,B,C,D o F dovrebbe dare un mex d'errore.

    Scusa ma sono ancora scarsissimo.
  • Re: Convetire carattere ASCII in numero per eseguire media!

    Allora partiamo per stadi.
    1. acquisisci il grado da tastiera (con getchar)
    2. Vai a vedere se è un carattere minuscolo con islower (ti ho messo anche il link)
    2a. islower ti ritorna un int quindi l'if lo possiamo scrivere anche if(islower(grade) != 0)
    3. se è minuscolo lo converto in maiuscolo con toupper
    4. questo valore convertito vedo se è nel range 'A' ---- 'F'
    5. se si aggiorno il totale con la formula di conversione che funziona così
    5a. Se il grado è un 'A', grado - 'A' mi dara 0 percui 10 - 0 mi darà 10
    5b. aggiungo al totale il valore 10.
    5a. se il grado è 'F', grado - 'F' mi darà 5 percui 10-5 mi darà 5
    5b. aggiungo al totale il valore 5.
    alla fine aggiono il contatore dei voti VALIDI

    Infine la media sarà data dal totale diviso il contatore dei voti.
  • Re: Convetire carattere ASCII in numero per eseguire media!

    Ma islower è una funzione? io nn le ho ancora fatte cioè la int main (void) mi hanno detto (il libro) di prenderla per buona per il momento
Devi accedere o registrarti per scrivere nel forum
4 risposte