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

    [C]Acquisire in due stringhe due orari e calcolare la differenza in minuti

    Salve a tutti mi sono appena iscritto volevo chiedere consiglio per un esercizio in C datomi al poli che non riesco a far girare come vorrei:

    Questo è il testo dell'esercizio:

    Si scriva un programma che acquisisca 2 stringhe corrispondenti a 2 orari
    nel formato hh:mm. Il programma deve:

    a. Controllare le stringhe, segnalando i casi in cui il formato non sia
    rispettato (ad esempio 10,30 non è valido)

    b. Stabilire se l’orario contenuto nella prima stringa è precedente a
    quello contenuto nella seconda stringa

    c. In caso affermativo, tradurre i 2 orari in valori interi corrispondenti
    all’orario espresso come distanza in minuti da 00:00 e calcolarne la
    differenza

    d. Converta il risultato (sarà un numero intero positivo) in una stringa
    così composta “<intervallo calcolato>_minuti” e la stampi a video.
    Il codice che ho scritto:


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        int ho1,min1,ho2,min2,i,gap;
        char hour1[5],hour2[5],h1[2],h2[2],m1[2],m2[2],pausa;
    
        printf("\n\n\t\tProgramma che acquisisce da tastiera due orari "
               "\n\n\t\te ne calcola la diffrenza in minuti");
    
        printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
        for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++); // acquisizione primo orario
    
        if(hour1[2]!=':'){ // controllo formato
    
                printf("\n\n\t\t\aIl formato non è corretto!!");
    
                printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
                for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++);
    
            }
    
        printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
        for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++); // acquisizione secondo orario
    
        if(hour2[2]!=':'){ // controllo formato
    
                printf("\n\n\t\t\aIl formato non è corretto!!");
    
                printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
                for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++);
    
            }
    
        strncpy(h1,hour1,2); // copio le cifre dell'ora del primo orario in h1
        strncpy(h2,hour2,2); // copio le cifre dell'ora del secondo orario in h2
    
        h1[3]='\0'; // termino h1
        h2[3]='\0'; // termino h2
    
    
        strncpy(m1,&hour1[3],2); // copio le cifre dei minuti del primo orario in m1
        strncpy(m2,&hour2[3],2); // copio le cifre dei minuti del secondo orario in m2
    
        m1[3]='\0'; // termino m1
        m2[3]='\0'; // termino m2
    
        // converto ore e minuti in interi e trasformo le ore in minuti 
    
        min1=atoi(m1);
        ho1=atoi(h1);
        min2=atoi(m2);
        ho2=atoi(h2);
    
        min1=min1+(ho1*60);
        min2=min2+(ho2*60);
    
       // calcolo la differenza in minuti
    
        if(min1>=min2){
    
                gap=min1-min2;
    
            }
    
        if(min1<min2){
    
                gap=min2-min1;
    
            }
    
        printf("\n\n\t\tLa differenza tra i due orari e' di %d minuti",gap); // stampo a video la differenza
    
        printf("\n\n\t\t");
        pausa=getchar();
        return 0;
    }
    Non ho implementato ancora l'ultimo punto perché se, per esempio, inserisco come orari 11:05 e 11:10 la differenza restituita dal programma è 160, quindi non va.

    Sapreste aiutarmi per favore?

  2. #2

    [RISOLTO]

    Raga ho risolto da solo, grazie lo stesso Ora il programma funziona vi posto il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        int ho1,min1,ho2,min2,i,gap;
        char hour1[6],hour2[6],h1[3],h2[3],m1[3],m2[3],diff[50],pausa;
        char minutes[8]="_minuti";
    
        printf("\n\n\t\tProgramma che acquisisce da tastiera due orari "
               "\n\n\t\te ne calcola la diffrenza in minuti");
    
        printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
        for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++);
    
        if(hour1[2]!=':'){
    
                printf("\n\n\t\t\aIl formato non è corretto!!");
    
                printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
                for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++);
    
            }
    
        hour1[5]='/0';
    
        printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
        for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++);
    
        if(hour2[2]!=':'){
    
                printf("\n\n\t\t\aIl formato non è corretto!!");
    
                printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
                for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++);
    
            }
    
        hour2[5]='\0';
    
        strncpy(h1,hour1,2);
        strncpy(h2,hour2,2);
    
        h1[2]='\0';
        h2[2]='\0';
    
        strncpy(m1,&hour1[3],2);
        strncpy(m2,&hour2[3],2);
    
        m1[2]='\0';
        m2[2]='\0';
    
        min1=atoi(m1);
        ho1=atoi(h1);
        min2=atoi(m2);
        ho2=atoi(h2);
    
        min1=min1+(ho1*60);
        min2=min2+(ho2*60);
    
        if(min1>min2){
    
                printf("\n\n\t\tIl primo orario è successivo al secondo");
    
            }
    
        if(min1<=min2){
    
                gap=min2-min1;
    
            }
    
        printf("\n\n\t\tLa differenza tra i due orari è %d%s",gap,minutes);
    
        printf("\n\n\t\t");
        pausa=getchar();
        return 0;
    
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.