Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Problema codifica in c

    Salve a tutti, sono alle prime armi con il linguaggio di programmazione c, da poco ho iniziato a fare gli esercizi con il char e sono stato bloccato dal seguente esercizio,
    Non riesco a capire dove abbia sbagliato...

    Di N città si conoscono il numero di abitanti e il numero degli attivi. Calcola per ciascuna città l'indice di attività (attivi/abitanti*100) e stampa il nome della città con l'indice più basso e di quella con l'indice più alto.


    #include <stdio.h>
    int N,AB,AT,CONT=0;
    float I,MAX,MIN;
    char *XA,*XB;
    char NM[21];
    int main()
    {
    printf("Inserisci il numero di città: ");
    scanf("%d",&N);
    for(CONT=0;CONT<N;CONT++)
    {
    printf("Inserisci il nome della città: ");
    scanf("%s",&NM);
    printf("Inserisci il numero di abitanti: ");
    scanf("%d",&AB);
    printf("Inserisci il numero di attivi: ");
    scanf("%d",&AT);
    I=AT/AB*100;
    if (I>MAX) MAX=I, XA=NM;
    else if (I<MIN) MIN=I, XB=NM;
    }
    printf ("La città con l'indice di attività più basso è: %s",&XB);
    printf ("La città con l'indice di attività più alto è: %s",&XA);
    }


    Funziona tutto tranne quando deve stampare il nome della città con l'indice più basso e quella con l'indice più alto!

    Inizialmente mi volevo complicare ancora di più per essere ancora più preciso, se l'utente decide di inserire una sola città, il nome della città dovrà quindi comparire sia nell'indice di attività più basso sia in quello più alto.

    perciò avevo pensato di farlo così:

    #include <stdio.h>
    int N,AB,AT,CONT=0;
    float I,MAX,MIN;
    char *XA,*XB;
    char NM[21];
    int main()
    {
    printf("Inserisci il numero di città: ");
    scanf("%d",&N);
    do{
    printf("Inserisci il nome della città: ");
    scanf("%s",&NM);
    printf("Inserisci il numero di abitanti: ");
    scanf("%d",&AB);
    printf("Inserisci il numero di attivi: ");
    scanf("%d",&AT);
    CONT=CONT+1;
    I=AT/AB*100;
    if (CONT=1) MAX=(NM) MIN=(NM)
    else if (I>MAX) MAX=(I), XA=(NM);
    else if (I<MIN) MIN=(I), XB=(NM);
    }while (CONT!=N)
    printf ("La città con l'indice di attività più basso è: %s",&XB);
    printf ("La città con l'indice di attività più alto è: %s",&XA);
    }

    Però non funziona lo stesso!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ti sei impegnato a scriverlo male...

    Codice PHP:
    #include <stdio.h>
    #include <string.h>

    int mainvoid )
    {

        
    int N,AB,AT,CONT=0;
        
    float I,MAX,MIN;
        
    //char *XA,*XB;
        
    char NM[21];
        
    char XA[21], XB[21];

        
    printf("Inserisci il numero di città: ");
        
    scanf("%d",&N);
        do{
            
    printf("Inserisci il nome della città: ");
            
    scanf("%s",NM);
            
    printf("Inserisci il numero di abitanti: ");
            
    scanf("%d",&AB);
            
    printf("Inserisci il numero di attivi: ");
            
    scanf("%d",&AT);
            
            
    CONT++;
            
    I=(float)AT/(float)AB*100;
            
            
    printf"\nCONT %d - N %d\n"CONT);
            
            if (
    CONT==1) {
                
    MAX=I;
                
    MIN=I;
                
    strcpy(XANM);
                
    strcpy(XBNM);
            }
            else if (
    I>MAX) {
                
    MAX=I;
                
    strcpy(XANM);
            }
            else if (
    I<MIN) {
                
    MIN=I;
                
    strcpy(XBNM);
            }
        }while (
    CONT N);
        
        
    printf ("La città con l'indice di attività più basso è: %s",XB);
        
    printf ("La città con l'indice di attività più alto è: %s",XA);


  3. #3
    MAX=I;
    MIN=I;
    strcpy(XA, NM);
    strcpy(XB, NM);

    o

    strcpy(MAX, I);
    strcpy(MIN, I);
    strcpy(XA, NM);
    strcpy(XB, NM);
    è uguale o cambia qualcosa?

    I=(float)AT/(float)AB*100;
    Come mai bisogna scrivere float se sono state dichiarati numeri interi?

    printf( "\nCONT %d - N %d\n", CONT, N );
    Semplicemente geniale.

    Grazie ancora!

  4. #4
    Quote Originariamente inviata da The_Mustang_24 Visualizza il messaggio
    codice:
    MAX=I;
    MIN=I;
    strcpy(XA, NM);
    strcpy(XB, NM);
    o

    codice:
    strcpy(MAX, I);
    strcpy(MIN, I);
    strcpy(XA, NM);
    strcpy(XB, NM);
    è uguale o cambia qualcosa?
    Sì, il primo funziona, il secondo nemmeno compila.

    strcpy è solo per le stringhe di caratteri, per cui la normale assegnazione non funziona dato che bisogna copiare più caratteri (e fermarsi al terminatore della stringa); per tutti i tipi primitivi si usa la normale assegnazione.

    codice:
    I=(float)AT/(float)AB*100;
    Come mai bisogna scrivere float se sono state dichiarati numeri interi?
    Bisogna scrivere float esattamente perché sono dichiarati numeri interi. Dato che AT e AB sono interi, AT/AB effettua una divisione intera, che non calcola le cifre decimali; moltiplicare per 100 dopo non serve a niente - la precisione si è persa nella divisione. Se ad esempio AT fosse 2 e AB fosse 3, il risultato che tu vorresti è 66, mentre quello che otterresti facendo AT/AB*100 sarebbe 0 (2/3 = 0 in divisione intera; 0*100 = 0).

    Fare un cast a float fa in modo che la divisione venga eseguita in floating point, per cui (float)2/(float)3 = 0.6666666f; 0.6666666f * 100 = 66.666f.

    Nota che il fatto che il tutto venga assegnato ad una variabile di tipo float non ha alcuna influenza su come viene valutata l'espressione: il calcolo dell'espressione avviene indipendentemente da dove andrà ad essere assegnato il suo risultato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.