Problema Timer .campion 2009
0Un timer este un dispozitiv care poate emite un semnal sonor dupa o perioada de timp specificata.
- Cerinta
Scrieti un program care, cunoscand ora curenta, precum si perioada de timp stabilita, determina ora la care semnalul sonor va fi emis.
- Date de intrare
Fisierul de intrare timer.in contine pe prima linie ora curenta sub forma:
HH:MM:SS
unde:
HH reprezinta ora curenta (cuprinsa intre 00 si 23)
MM reprezinta minutul curent (cuprins intre 00 si 60)
SS reprezinta secunda curenta (cuprinsa intre 00 si 60).
Pe cea de a doua linie este specificata perioada de timp dupa care timer-ul va emite semnalul sonor sub forma:
A:B:C
unde
A reprezinta numarul de ore, B reprezinta numarul de minute, iar C reprezinta numarul de secunde. Daca A este 0, atunci poate fi omis. De asemenea, daca A si B sunt ambele 0, pot fi omise. De exemplu 100:60 inseamna 100 de minute si 60 secunde, ceea ce ar fi echivalent cu 101:0 (adica 101 minute si 0 secunde) sau 1:41:0 (o ora si 41 minute).
- Date de iesire
Fisierul de iesire timer.out va contine o singura linie pe care va fi scrisa ora la care semnalul sonor va fi emis sub forma:
HH:MM:SS
(unde SS si MM trebuie sa fie cuprinse intre 00 si 59, iar HH intre 00 si 23). Atentie! se vor specifica exact doua cifre atat pentru ora, cat si pentru minute, respectiv secunde!
Daca ora la care semnalul sonor va fi emis nu este in aceeasi zi, atunci se va specifica si numarul de zile dupa care va fi emis semnalul sonor sub forma
HH:MM:SS+D
- Restrictii
0 ≤ A, B, C ≤ 1 000 000 000
- Soltuia
#include #include char timp[100], timp_dat[100]; int ora, min, sec, ora_dat, min_dat, sec_dat, zile = 0; int i, j, n, lung, poz, aux, ok = 1, nr_pct = 0; int main() { FILE *f = fopen ("timer.in","r"); FILE *g = fopen ("timer.out","w"); fscanf (f,"%s", &timp); fscanf (f,"%s", &timp_dat); fclose(f); n = strlen (timp); lung = strlen (timp_dat); ora = (timp[0] - '0') * 10 + timp[1] - '0'; min = (timp[3] - '0') * 10 + timp[4] - '0'; sec = (timp[6] - '0') * 10 + timp[7] - '0'; for (i=0; i< lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; ora += aux; aux = 0; while (timp_dat[i] != ':' && i < lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; min += aux; aux = 0; while (timp_dat[i] != ':' && i < lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; sec += aux; aux = 0; } i = 0; if (nr_pct == 1) { aux = 0; while (timp_dat[i] != ':' && i < lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; min += aux; aux = 0; while (timp_dat[i] != ':' && i < lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; sec += aux; aux = 0; } i = 0; if (nr_pct == 0) { aux = 0; while (timp_dat[i] != ':' && i < lung) { aux = aux * 10 + timp_dat[i] - '0'; i++; } i++; sec += aux; aux = 0; } min += sec / 60; sec = sec % 60; ora += min / 60; min = min % 60; zile = ora / 24; ora = ora % 24; if (ora >= 0 && ora <= 9) fprintf (g,"0%d:", ora); else fprintf (g,"%d:", ora); if (min >= 0 && min <=9) fprintf (g,"0%d:", min); else fprintf (g,"%d:", min); if (sec >= 0 && sec <= 9) fprintf (g,"0%d", sec); else fprintf (g,"%d", sec); if (zile > 0 ) fprintf (g,"+%d", zile); fprintf (g,"\n"); fclose(g); return 0; }
Alte rezolvari ale problemei pot fi vizualizate facand click pe urmatorul link.