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

C প্রোগ্রাম: দেওয়া সংখ্যাকে শব্দে রূপান্তর করা

নিউমেরিক্যাল ভ্যালু বিশিষ্ট একটি স্ট্রিং দেওয়া থাকলে, টাস্ক হলো দেওয়া সংখ্যাগুলো শব্দে রূপান্তর করা।

যেমন ইনপুট "361" থাকলে আউটপুট শব্দে হবে "Three hundred sixty one"। এই সমস্যা সমাধানের জন্য আমাদের নম্বর এবং তার প্লেস ভ্যালু ( Ones, Tens, Thousands ইত্যাদি) খেয়াল রাখতে হবে।

কোডটি শুধু ৪ ডিজিট পর্যন্ত (০ থেকে ৯৯৯৯) সাপোর্ট করে। সুতরাং ইনপুট ০ থেকে ৯৯৯৯ পর্যন্ত হতে হবে।

আমরা ১,১১১ বিবেচনা করি, তাহলে প্লেসগুলো হবে −

C প্রোগ্রাম: দেওয়া সংখ্যাকে শব্দে রূপান্তর করা

উদাহরণ

ইনপুট: "1234" আউটপুট: one thousand two hundred thirty four
ইনপুট: "7777" আউটপুট: seven thousand seven hundred seventy seven

দেওয়া সমস্যা সমাধানের জন্য আমরা যে পদ্ধতি ব্যবহার করব −

  • ইনপুট স্ট্রিং হিসেবে নিন।
  • বিভিন্ন ভ্যালুর জন্য অ্যারে তৈরি করুন।
  • ইনপুটের দৈর্ঘ্য অনুযায়ী সিদ্ধান্ত নিন কত প্লেস পর্যন্ত আউটপুট দেখাবে।
  • প্লেস অনুযায়ী আউটপুট দেখান।

অ্যালগরিদম

Start
  ধাপ ১ → function convert(char *num) এ
    int len = strlen(num) ডিক্লেয়ার ও ইনিশিয়ালাইজ
    If len == 0 then,
      fprintf(stderr, "empty string\n")
      Return
    End If
    If len > 4 then,
      fprintf(stderr, "Length more than 4 is not supported\n")
      Return
    End If
    char *single_digit[] = { "zero", "one", "two","three", "four","five","six", "seven", "eight", "nine"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
    char *tens_place[] = {"", "ten", "eleven", "twelve","thirteen", "fourteen","fifteen", "sixteen","seventeen", "eighteen", "nineteen"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
    char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
    char *tens_power[] = {"hundred", "thousand"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
    num প্রিন্ট
    If len == 1 then,
      single_digit[*num - '0'] প্রিন্ট
      Return
    End If
    While *num != '\0'
      If len >= 3
        If *num -'0' != 0
          single_digit[*num - '0'] প্রিন্ট
          tens_power[len-3] প্রিন্ট
        End If
        len ১ কমান
      End If
      Else
        If *num == '1' then,
          sum = *num - '0' + *(num + 1)- '0' সেট
          tens_place[sum] প্রিন্ট
          Return
        End If
        Else If *num == '2' && *(num + 1) == '0' then,
          "twenty" প্রিন্ট
          Return
        End else If
        Else
          i = *num - '0' সেট
          i? tens_multiple[i]: "" প্রিন্ট
          num ১ বাড়ান
          If *num != '0' then,
            single_digit[*num - '0'] প্রিন্ট
          End If
        End Else
        num ১ বাড়ান
      End Else
    End while
  ধাপ ২ → main()-এ
    convert("9132") ফাংশন কল
Stop

উদাহরণ

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// দেওয়া নম্বর শব্দে প্রিন্ট করার ফাংশন
void convert(char *num) {
    int len = strlen(num);
    // কেসগুলো
    if (len == 0) {
        fprintf(stderr, "empty string\n");
        return;
    }
    if (len > 4) {
        fprintf(stderr, "Length more than 4 is not supported\n");
        return;
    }
    // প্রথম স্ট্রিং ব্যবহার হবena
    char *single_digit[] = { "zero", "one", "two", "three", "four","five", "six", "seven", "eight", "nine"};
    // প্রথম স্ট্রিং ব্যবহার হবena, অ্যারের ইনডেক্সিং সহজ করতে
    char *tens_place[] = {"", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    // প্রথম দুটি স্ট্রিং ব্যবহার হবena, অ্যারের ইনডেক্সিং সহজ করতে
    char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"};
    char *tens_power[] = {"hundred", "thousand"};
    // ডিবাগিং উদ্দেশ্যে মাত্র
    printf("\n%s: ", num);
    // সিঙ্গেল ডিজিট নম্বরের জন্য
    if (len == 1) {
        printf("%s\n", single_digit[*num - '0']);
        return;
    }
    // num '\0' না হওয়া পর্যন্ত ইটারেট
    while (*num != '\0') {
        // প্রথম ২ ডিজিটের জন্য কোড পথ
        if (len >= 3) {
            if (*num -'0' != 0) {
                printf("%s ", single_digit[*num - '0']);
                printf("%s ", tens_power[len-3]); // এখানে len 3 বা 4 হতে পারে
            }
            --len;
        }
        // শেষ ২ ডিজিটের জন্য কোড পথ
        else {
            // 10-19 এক্সপ্লিসিটলি হ্যান্ডল করতে হবে। দুটি ডিজিটের যোগফল
            // "tens_place" স্ট্রিং অ্যারে-এর ইনডেক্স হিসেবে ব্যবহৃত হয়
            if (*num == '1') {
                int sum = *num - '0' + *(num + 1)- '0';
                printf("%s\n", tens_place[sum]);
                return;
            }
            // 20 এক্সপ্লিসিটলি হ্যান্ডল করতে হবে
            else if (*num == '2' && *(num + 1) == '0') {
                printf("twenty\n");
                return;
            }
            // বাকি টু-ডিজিট নম্বরগুলো অর্থাৎ 21 থেকে 99
            else {
                int i = *num - '0';
                printf("%s ", i? tens_multiple[i]: "");
                ++num;
                if (*num != '0')
                    printf("%s ", single_digit[*num - '0']);
            }
        }
        ++num;
    }
}
int main() {
    convert("9132");
    return 0;
}

আউটপুট

nine thousand one hundred thirty two

  1. C#-এ ডিজিটকে শব্দে রূপান্তর করা

  2. C#-এ স্ট্রিংয়ের শব্দ সংখ্যা গণনা

  3. পাইথনে গ্রে কোড রূপান্তর

  4. পাইথনে সংখ্যাকে পূর্ণসংখ্যার লিস্টে রূপান্তর