[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.
Rispondi
Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

[Risolto] - Esercizio in C - Differenza due orari

Messaggio da SIV »

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 26 lug 2009, 14:13, modificato 1 volta in totale.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 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

Messaggio da Mario Vanoni »

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: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

Re: Esercizio in C - Differenza due orari

Messaggio da albatros »

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 3.x
Linux 3.x
Messaggi: 534
Iscritto il: dom 27 apr 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

Messaggio da Vic Steele »

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 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

Re: Esercizio in C - Differenza due orari

Messaggio da SIV »

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);

}

Rispondi