সময়ের পার্থক্য ক্যালকুলেট করা
দুটি সময় (ঘণ্টা, মিনিট, সেকেন্ড) এর পার্থক্য বের করতে হলে সেকেন্ড এবং মিনিটে বরো (borrow) লজিক ব্যবহার করতে হয়।
লজিক (Start - Stop)
// সেকেন্ড বরো
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;
সি প্রোগ্রাম (স্ট্রাকচার ব্যবহার করে)
#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("\nTime 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
মূল কোডে বাগ ফিক্স
মূল কোডে diff->sec = start.sec - stop.sec ছিল, কিন্তু লজিক অনুযায়ী এটি উল্টা হওয়া উচিত (stop - start)। নিচে সংশোধিত ভার্সন:
// সঠিক লজিক: stop - start (duration)
void time_diff(struct Time start, struct Time stop, struct Time *diff) {
// টোটাল সেকেন্ডে কনভার্ট করুন - সহজ ও বাগ-ফ্রি
long start_total = start.hrs * 3600 + start.min * 60 + start.sec;
long stop_total = stop.hrs * 3600 + stop.min * 60 + stop.sec;
long diff_sec = stop_total - start_total; // positive duration
if (diff_sec < 0) diff_sec = -diff_sec; // absolute difference
diff->hrs = diff_sec / 3600;
diff->min = (diff_sec % 3600) / 60;
diff->sec = diff_sec % 60;
}
সারসংক্ষেপ
- স্ট্রাকচার দিয়ে টাইম রিপ্রেজেন্টেশন ক্লিন হয়।
- বরো (borrow) লজিকের বদলে টোটাল সেকেন্ডে কনভার্ট করলে কোড সিম্পল ও বাগ-ফ্রি হয়।
- নেগেটিভ ডিফারেন্স হ্যান্ডল করার জন্য অ্যান্টলুইট ভ্যালু নিন।