Problemi con funzione che restituisce percentuale.

di il
3 risposte

Problemi con funzione che restituisce percentuale.

Salve!
Ho questa parte di esame che mi chiede:
Definisca la funzione CaricaDatiParti che riceve in ingresso il numero di articoli che l’ingegnere assemblatore vuole caricare (chiesto nel main e passato in ingresso alla funzione), li faccia inserire leggendoli da tastiera e li memorizzi nel vettore ElencoParti restituendo, alla fine, la % di parti in acciaio e la % di parti kevlar. Il sistema deve stampare, a fine caricamento, il numero di teste, tronchi, braccia e gambe caricate nel magazzino.
Ho scritto la funzione ed il main, il problema è che qualunque valore inserisca mi stampa sempre che la percentuale di parti kevlar è zero.
Domani ho l'esame, aiuto!

Questo è quello che ho scritto io:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

#define DIM 200
#define SIZE 25

typedef struct
{
    char matricola [SIZE];
    char disponibile;
    char stato [SIZE];
    char categoria [SIZE];
    char materiale [SIZE];
} Magazzino;

Magazzino ElencoParti [DIM];

float CaricaDatiParti (int);
void AssemblaDrone (int, char []);
void StampaDisponibili (int);

int main()
{
  int num_parti;
  float p_kevlar;
  char materiale[SIZE];
  printf ("\nInserire numero di parti da caricare:\n");
  scanf ("%d", &num_parti);

  p_kevlar = CaricaDatiParti( num_parti );

  printf ("\nPERCENTUALE PARTI KEVLAR:\t%.2f\n", p_kevlar);
  printf ("\nPERCENTUALE PARTI ACCIAIO:\t%.2f\n", 100 - p_kevlar);

  printf ("\nScegliere materiale drone ( kevlar/acciaio ): ");
  scanf ("%s", materiale);

  AssemblaDrone (num_parti, materiale);
  StampaDisponibili (num_parti);

     system("PAUSE");
     return 0;
}


float CaricaDatiParti( int num_parti )
{
    int i, num_testa = 0, num_tronco = 0, num_braccia = 0, num_gambe = 0, num_kevlar =0, num_acciaio=0;
    float percentuale;
    for ( i = 0; i < num_parti; i++)
    {
        printf ("\n\n\tARTICOLO NUMERO %d:\n", i+1);

        printf ("\nMatricola: ");
        scanf ("%s", ElencoParti[i].matricola);
        printf ("\nDisponibilita\' ( s / n ): ");
        ElencoParti[i].disponibile = getch ();

        printf ("\n\nStato ( nuovo / usato ): ");
        scanf ("%s", ElencoParti[i].stato);

        printf ("\nCategoria ( testa / tronco / braccia / gambe ): ");
        scanf ("%s", ElencoParti[i].categoria);

        printf ("\nMateriale ( kevlar/acciaio ): ");
        scanf ("%s", ElencoParti[i].materiale);


        if ((strcmp (ElencoParti[i].materiale, "kevlar"))== 0) num_kevlar++;
        if ((strcmp (ElencoParti[i].materiale, "acciaio"))== 0) num_acciaio++;

        if ((strcmp (ElencoParti[i].categoria, "testa"))== 0) num_testa++;
        else if ((strcmp (ElencoParti[i].categoria, "tronco"))== 0) num_tronco++;
        else if ((strcmp (ElencoParti[i].categoria, "braccia"))== 0) num_braccia++;
        else if ((strcmp (ElencoParti[i].categoria, "gambe"))== 0) num_gambe++;
    }

    percentuale = (float) 100*((num_kevlar/num_parti));

    printf ("\nNUMERO testa: %d", num_testa);
    printf ("\nNUMERO tronco: %d", num_tronco);
    printf ("\nNUMERO braccia: %d", num_braccia);
    printf ("\nNUMERO gambe: %d", num_gambe);
 return percentuale;
}
Grazie per l'attenzione.

3 Risposte

  • Re: Problemi con funzione che restituisce percentuale.

    Scusami ma sono tarda,
    non ho ben capito dove richiamare questa funzione e quale variabile inserisco?

    Ho capito male vero?
     
    printf ("\nMateriale ( kevlar/acciaio ): ");
    scanf ("%s", ElencoParti[i].materiale);
    togli_invio (&ElencoParti[i].materiale);
     
  • Re: Problemi con funzione che restituisce percentuale.

    Tameiki ha scritto:


    Questo è quello che ho scritto io:
    ...dunque a me funziona, ma cambiando il tipo di valore alle variabili num_kevlar e num_acciaio, che devono diventare di tipo float:
    float percentuale, num_kevlar =0.00, num_acciaio=0.00;
  • Re: Problemi con funzione che restituisce percentuale.

    Non bisogna cambiare il tipo di nessuna variabile ma bisogna modificare l'espressione in modo che la divisione non venga effettuata tra interi.

    Usa questa riga di codice e tutto andrà a posto

    percentuale = 100.0 * ( (float) num_kevlar/num_parti);
Devi accedere o registrarti per scrivere nel forum
3 risposte