[Risolto] - Esercizio in C - Differenza due orari

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
SIV
Linux 2.6
Linux 2.6
Messaggi: 921
Iscritto il: mer apr 25, 2007 14:07

[Risolto] - Esercizio in C - Differenza due orari

Messaggioda SIV » sab lug 25, 2009 18:41

Ragazzi oggi mentro ero in giro mi sono mangiato la testa per "risolvere" questo esercizio:
Scrivete una funzione che accetti in input l'ora, suddiviso in tre argomenti interi(per le ore,i minuti e i secondi) e restituisca il numero dei secondi trascorsi dall'ultima volta che l'orologio ha rintoccato le 12. Utilizzate questa funzione per calcolare la quantità di tempo in secondi che intercorre tra due orari, netrambi i quali siano compresi all'interno di un ciclo di 12 ore dell'orologio.


Per ora ho solo, dato ora minuti e secondi calcolati i secondi. Poi mi blocco, ma proprio non so cosa fare (proprio a livello di logica :D )

Codice: Seleziona tutto

#include<stdio.h>

int main(){

int ora,minuti,secondi,tot;

printf("Inserisci l'ora: ");
scanf("%d",&ora);
printf("\nInserisci i minuti: ");
scanf("%d",&minuti);
printf("\nInserisci i secondi: ");
scanf("%d",&secondi);
ora *= 3600;
minuti *= 60;
tot = ora+minuti+secondi;
printf("\nTotale secondi: %d",tot);


return 0;
}
Ultima modifica di SIV il dom lug 26, 2009 14:13, modificato 1 volta in totale.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Esercizio in C - Differenza due orari

Messaggioda Mario Vanoni » sab lug 25, 2009 19:08

http://introweb.linux.tucows.com/ports/ ... c/?C=S;O=D

datedif-0.9.1.4.tgz 27-Sep-2003 02:33 5.2K

Magari ti e` utile, lo uso dal ... 2003.

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2057
Iscritto il: sab feb 04, 2006 13:59
Slackware: current 64bit
Kernel: 3.13.0
Distribuzione: ubuntu 14.04
Località: Deutschland

Re: Esercizio in C - Differenza due orari

Messaggioda albatros » sab lug 25, 2009 19:13

Ti basta fare la differenza fra i due tempi, ma ti converrebbe creare (come suggerisce l'esercizio) una funzione apposta int f(int ore, int minuti, int secondi), da richiamare dentro la main.

Vic Steele
Linux 2.6
Linux 2.6
Messaggi: 534
Iscritto il: dom apr 27, 2008 13:46
Nome Cognome: Luigi Caiazza
Slackware: current x86_64
Kernel: 3.0.0
Desktop: Fluxbox / KDE 4.7.0
Distribuzione: Fedora 15
Località: Potenza
Contatta:

Re: Esercizio in C - Differenza due orari

Messaggioda Vic Steele » sab lug 25, 2009 21:44

Ciao, io ho ragionato così:

Codice: Seleziona tutto

#include <stdio.h>

int calcolaSecondiTrascorsi(int ore, int minuti, int secondi);
void schermoStampaRisultato(int risultato);

int main() {
   
   int ore = 0, minuti = 0, secondi = 0, risultato;
   printf("Inserisci l'ora ---> ");
   scanf("%d", &ore);
   while (ore < 0 || ore > 24) {
      printf("Errore: immettere un'ora corretta ---> ");
      scanf("%d", &ore);
   }
   if (ore == 0) {
      ore = 24;
   }
   printf("Inserisci i minuti ---> ");
   scanf("%d", &minuti);
   while (minuti < 0 || minuti > 59) {
      printf("Errore: immettere minuti corretti ---> ");
      scanf("%d", &minuti);
   }
   printf("Inserisci i secondi ---> ");
   scanf("%d", &secondi);
   while (secondi < 0 || secondi > 59) {
      printf("Errore: immettere secondi corretti ---> ");
      scanf("%d", &secondi);
   }
   risultato = calcolaSecondiTrascorsi(ore, minuti, secondi);
   schermoStampaRisultato(risultato);
   return 0;
   
}

int calcolaSecondiTrascorsi(int ore, int minuti, int secondi) {
   
   int risultato = 0;
   risultato += secondi;
   risultato += (minuti * 60);
   if (ore < 12) {
      risultato += ((ore + 12) * 3600);
   } else if (ore > 12) {
      risultato += ((ore - 12) * 3600);
   }
   return risultato;
   
}

void schermoStampaRisultato(int risultato) {
   
   printf("Il numero di secondi trascorsi dalle ultime ore 12 e': %d", risultato);
   
}


Pare vada bene.


EDIT: non avevo letto l'ultima parte.
Vabbè, a questo punto è una banale sottrazione tra la funzione che ho calcolato io e quella che hai calcolato tu.

Avatar utente
SIV
Linux 2.6
Linux 2.6
Messaggi: 921
Iscritto il: mer apr 25, 2007 14:07

Re: Esercizio in C - Differenza due orari

Messaggioda SIV » dom lug 26, 2009 13:35

Ragazzi grazie a tutti. :bounce: :bounce: :bounce:

Ho visto un po' sul web come fare a ricavare ora,minuti e secondi da tot secondi ed allora ho:

Codice: Seleziona tutto

-ricavato i secondi dal primo oraio
-ricavato i secondi dal secondo orario
-verificato qual è il più grande (numero di secondi)
-sottratto
-ricavato dai secondi (ricavati dalla differenza) ora:minuti:secondi


Ecco il source:

Codice: Seleziona tutto

#include <stdio.h>

int calcsec(int ore, int minuti, int secondi);
void tot(int risultato, int risultato1);

int main() {
   
   int ore = 0, minuti = 0, secondi = 0, risultato;
   int ore1 = 0, minuti1 = 0, secondi1 = 0, risultato1;

   //Input primo orario
   printf("Inserisci l'ora del primo orario ---> ");
   scanf("%d", &ore);
   while (ore < 0 || ore > 24) {
      printf("Errore: immettere un'ora corretta del primo orario ---> ");
      scanf("%d", &ore);
   }
   if (ore == 0) {
      ore = 24;
   }
   printf("Inserisci i minuti del primo orario ---> ");
   scanf("%d", &minuti);
   while (minuti < 0 || minuti > 59) {
      printf("Errore: immettere minuti corretti del primo orario ---> ");
      scanf("%d", &minuti);
   }
   printf("Inserisci i secondi del primo orario ---> ");
   scanf("%d", &secondi);
   while (secondi < 0 || secondi > 59) {
      printf("Errore: immettere secondi corretti del primo orario ---> ");
      scanf("%d", &secondi);
   }
   

   //Input secondo orario
   printf("Inserisci l'ora del secondo orario ---> ");
   scanf("%d", &ore1);
   while (ore1 < 0 || ore1 > 24) {
      printf("Errore: immettere un'ora corretta del secondo orario ---> ");
      scanf("%d", &ore1);
   }
   if (ore1 == 0) {
      ore1 = 24;
   }
   printf("Inserisci i minuti del secondo orario ---> ");
   scanf("%d", &minuti1);
   while (minuti1 < 0 || minuti1 > 59) {
      printf("Errore: immettere minuti corretti del secondo orario ---> ");
      scanf("%d", &minuti1);
   }
   printf("Inserisci i secondi del secondo orario ---> ");
   scanf("%d", &secondi1);
   while (secondi1 < 0 || secondi1 > 59) {
      printf("Errore: immettere secondi corretti del secondo orario ---> ");
      scanf("%d", &secondi1);
   }
 

risultato = calcsec(ore, minuti, secondi);
risultato1 = calcsec(ore1, minuti1, secondi1);

tot(risultato,risultato1);


return 0;
   
}



int calcsec(int ore, int minuti, int secondi) {
   
   int risultato = 0;
   risultato += secondi;
   risultato += (minuti * 60);
   if (ore < 12) {
      risultato += ((ore + 12) * 3600);
   } else if (ore > 12) {
      risultato += ((ore - 12) * 3600);
   }
   return risultato;
   
}


void tot(int risultato, int risultato1){

int ore2,minuti2,secondi2;
int totale;

if(risultato>risultato1){totale=risultato-risultato1;}
else{totale=risultato1-risultato;}

secondi2 = totale % 60;
totale = (totale - secondi2)/60;
minuti2 = totale % 60;
totale = (totale - secondi2)/60;
ore2 = totale % 24;

printf("Tempo tra i due orari --> %d : %d : %d",ore2,minuti2,secondi2);

}


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti