কম্পিউটার টিউটোরিয়াল

সি প্রোগ্রাম দিয়ে দুটি সময়ের পার্থক্য (Time Difference) বের করা

সময়ের পার্থক্য ক্যালকুলেট করা

দুটি সময় (ঘণ্টা, মিনিট, সেকেন্ড) এর পার্থক্য বের করতে হলে সেকেন্ড এবং মিনিটে বরো (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) লজিকের বদলে টোটাল সেকেন্ডে কনভার্ট করলে কোড সিম্পল ও বাগ-ফ্রি হয়।
  • নেগেটিভ ডিফারেন্স হ্যান্ডল করার জন্য অ্যান্টলুইট ভ্যালু নিন।
  1. C প্রোগ্রাম: ডেকাগন (Decagon) এর পরিসীমা গণনা

  2. C++-এ দুটি কনসেনট্রিক সার্কেলের মাঝপথের এলাকা বের করার প্রোগ্রাম

  3. এক্সেলে দুটি সংখ্যার পারসেন্টেজ ডিফারেন্স বের করার পদ্ধতি

  4. পাইথনে দুটি লিস্টের পার্থক্য (Difference) বের করার প্রোগ্রাম