Programmazione

  • Materia: Programmazione
  • Visto: 8526
  • Data: 07/05/2008
  • Di: Redazione StudentVille.it

Linguaggio C: calcolo minuti secondi tra due date

esercizio svolto o teoria

A cura di: Administrator

/*
 * Scrivete una funzione che accetti in input l'ora, suddivisa 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 quantita' di tempo in
 * secondi che intercorre tra due orari, entrambi i quali siano compresi
 * all'interno di un ciclo di 12 ore dell'orologio.
 */
#include <stdio.h>
unsigned int pastSeconds(unsigned int, unsigned int, unsigned int);
int
main(void)
{
	unsigned int h1, m1, s1;
	unsigned int h2, m2, s2;
	unsigned int ps1, ps2, diff;
	int invalid_data = 1;
	/* ottiene primo orario (ORE MINUTI SECONDI) */
	while (invalid_data) {
		printf("Inserire il primo orario (ORE MINUTI SECONDI: ");
		scanf("%u%u%u", &h1, &m1, &s1);
		if ((h1 < 23) && (m1 < 60) && (s1 < 60))
			invalid_data = 0;
		else
			printf("Orario non valido! Reinserirlo\n\n");
	}
	invalid_data = 1;
	/* ottiene secondo orario */
	while (invalid_data) {
		printf("Inserire il secondo orario (ORE MINUTI SECONDI: ");
		scanf("%u%u%u", &h2, &m2, &s2);
		if ((h2 < 24) && (m2 < 60) && (s2 < 60)) {
			/* Gli orari devo essere in uno stesso arco di 12 ore */
			if ((h1 / 12) != (h2 / 12))
				printf("Gli orari devono essere in uno stesso arco di 12 ore!\n\n");
			else
				invalid_data = 0; /* dati validi */
		} else
			printf("Orario non valido! Reinserirlo\n\n");
	}
	ps1 = pastSeconds(h1, m1, s1);
	ps2 = pastSeconds(h2, m2, s2);
	if (ps1 > ps2)
		diff = ps1 - ps2;
	else
		diff = ps2 - ps1;
	printf("Tra le ore %.2d:%.2d:%.2d e le ore %.2d:%.2d:%.2d ", h1, m1, s1,
		h2, m2, s2);
	printf("intercorrono %u secondi\n", diff);
	return 0;
}
unsigned int
pastSeconds(unsigned int hour, unsigned int min, unsigned int sec)
{
	return (sec + (min * 60) + ((hour % 12) * 60 * 60));
}