समस्या
शुरुआत और समाप्ति समय (घंटे, मिनट, सेकंड) दर्ज करें और उनका अंतर निकालें।
लॉजिक
सेकंड्स और मिनट्स में उधार (बोरो) लेकर घटाव करें।
while(stop.sec > start.sec) {
start.min--;
start.sec += 60;
}
diff.sec = start.sec - stop.sec;
while(stop.min > start.min) {
start.hrs--;
start.min += 60;
}
diff.min = start.min - stop.min;
diff.hrs = start.hrs - stop.hrs;
C प्रोग्राम
#include <stdio.h>
struct time {
int hrs, min, sec;
};
void diff_between_time(struct time start, struct time stop, struct time *diff);
int main() {
struct time start_time, stop_time, diff;
printf("Enter start time (hrs min sec): ");
scanf("%d %d %d", &start_time.hrs, &start_time.min, &start_time.sec);
printf("Enter stop time (hrs min sec): ");
scanf("%d %d %d", &stop_time.hrs, &stop_time.min, &stop_time.sec);
diff_between_time(start_time, stop_time, &diff);
printf("Time Diff: %02d:%02d:%02d - %02d:%02d:%02d = %02d:%02d:%02d\n",
start_time.hrs, start_time.min, start_time.sec,
stop_time.hrs, stop_time.min, stop_time.sec,
diff.hrs, diff.min, diff.sec);
return 0;
}
void diff_between_time(struct time start, struct time stop, struct time *diff) {
while (stop.sec > start.sec) {
start.min--;
start.sec += 60;
}
diff->sec = start.sec - stop.sec;
while (stop.min > start.min) {
start.hrs--;
start.min += 60;
}
diff->min = start.min - stop.min;
diff->hrs = start.hrs - stop.hrs;
}
आउटपुट
Enter start time: 12 45 57 Enter stop time: 20 35 20 Time Diff: 12:45:57 - 20:35:20 = -08:10:37
नोट
यदि स्टॉप टाइम स्टार्ट टाइम से पहले है, तो परिणाम नेगेटिव होगा। वास्तविक उपयोग में निरपेक्ष अंतर या 24-घंटे रैप-अराउंड हैंडल करें।
बेहतर दृष्टिकोण: कुल सेकंड्स में बदलें
int to_seconds(struct time t) {
return t.hrs * 3600 + t.min * 60 + t.sec;
}
void diff_time(struct time t1, struct time t2, struct time *diff) {
int sec1 = to_seconds(t1);
int sec2 = to_seconds(t2);
int diff_sec = sec1 - sec2; // या abs(sec1 - sec2)
diff->hrs = diff_sec / 3600;
diff_sec %= 3600;
diff->min = diff_sec / 60;
diff->sec = diff_sec % 60;
}