2
1

একটা ফাংশন থেকে একটি ইনুপুটের জন্য কি দুইটা মান কখনো রিটার্ন পাওয়া সম্ভব? সম্ভব হলে সেটা কিভাবে। ধরুন রিকারসিভ ফাংশনের বেলায় কাঙ্ক্ষিত মানের সাথে সাথে ফাংশনটি কতবার কাজ করছে এটাও আমার জানা দরকার। সেক্ষেত্রে আমি কি করবো?

অগ্রিম ধন্যবাদ।

asked 04 Jan '16, 14:55

abrarriyad's gravatar image

abrarriyad
14628


কিছু কিছু প্রোগ্রামিং ভাষায় ফাংশন থেকে একাধিক মান রিটার্ণ করা যায় (যেমন: পাইথন, গো)। আবার সি ভাষায় ফাংশন থেকে একাধিক মান রিটার্ণ করা যায় না। এই ক্ষেত্রে সুবিধাজনক উপায় হচ্ছে ফাংশনের ভেতরে পয়েন্টার পাঠিয়ে দেওয়া এবং সেই পয়েন্টার যেই ভেরিয়েবলকে পয়েন্ট করছে, সেটি পরিবর্তন করা। তাহলে যেই ফাংশন থেকে কল করা হয়েছে, সেখানেও পরিবর্তন হয়ে যাবে। এভাবে ফাংশনের প্যারামিটারে একাধিক পয়েন্টার পাঠিয়ে কাজ করা যায়।

আরেকটি উপায় হচ্ছে গ্লোবাল ভেরিয়েবল ব্যবহার করা, তবে এটি ভালো পদ্ধতি নয়। কারণ কোড বড় হলে পরবর্তি সময়ে মেইনটেইন করা ঝামেলা হয়।

permanent link

answered 05 Jan '16, 06:33

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
5.8k1026

ফাংশন থেকে একাধিক ডাটা পাঠানোর জন্য Struct ব্যবহার করতে পারেন। তবে recursive ফাংশনে Struct না ব্যবহার করা ভালো। আপনার প্রব্লেমের সমাধানের জন্য আপনি Global variable ব্যবহার করতে পারেন। যেমন আমি factorial বের করতে একটি ফাংশন ( fact() ) তৈরি করেছি যেখানে আমি Global variable ( int c ) এর মান এক এক করে বাড়িয়েছি যতবার ফাংশন কল হয়েছে। এভাবে আমি জানতে পারলাম কতবার ফাংশন কল হল।

#include<stdio.h>

int c;
int fact(int n)
{
    c++;
    if(n==1)
        return 1;
    return n*fact(n-1);
}

int main()
{

    c=0;
    printf("Fact(5)=%d",fact(5));
    printf(" Count=%d\n",c);
    return 0;
}

এখন আসি Struct দিয়ে কিভাবে একটি ফাংশন থেকে একাধিক ডাটা পাঠাবেন। ধরি আমাদের একটি ফাংশন আছে ( cal() ) যা দিয়ে আমি কোন সংখ্যার SquareCube বের করবো। ধরে নিচ্ছি আপনার Struct সম্পর্কে ধারনা আছে। প্রথমে আমরা একটি ডাটা টাইপ বানাবো। ধরি Struct দিয়ে বানানো ডাটা টাইপ এর নাম data যা দুটি int ডাটা ( sqrcube ) ধারন করে। আশা করি এরপরের কাজ গুলো বুঝতে পারবেন।

  #include<stdio.h>

struct data{
    int sqr,cube;
};

data cal(int n)
{
    data result;
    result.sqr=n*n;
    result.cube=n*n*n;
    return result;
}


int main()
{
    data n=cal(5);
    printf("Square=%d",n.sqr);
    printf(" Cube=%d\n",n.cube);
    return 0;
}
permanent link

answered 04 Jan '16, 17:31

Kaiser%20Ahmed's gravatar image

Kaiser Ahmed
3.2k419

edited 04 Jan '16, 19:16

ভাইয়া ভাল আনসার দিয়েছেন।

(09 Mar '16, 15:15) Zahirul_Islam_Monir

একটি ফাংশন কোন ভাবেই একটির বেশী মান রিটার্ন করতে পারে না। আপনি এ ক্ষেত্রে এ্যারে ইউজ করতে পারেন। যেখানে আপনি একাধিক ইন্ডেক্স ব্যাবহার করে একাধিক মান এক সাথে রিটার্ন করতে পারবেন। আবার পয়েন্টার ও ব্যাবহার করতে পারেন যেখানে আপনার মান রিটার্ন করার দরকার নেই জাস্ট ঐ ভেরিয়েবলের মান আপডেট হবে। এটা প্রয়োজন বুঝে করতে হয়।

permanent link

answered 04 Jan '16, 17:21

mabdsalam12's gravatar image

mabdsalam12
453114

You can also warp multiple value with an object and return that object from a method.

permanent link

answered 10 Feb '16, 12:38

muztaba's gravatar image

muztaba
537

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×26
×6

question asked: 04 Jan '16, 14:55

question was seen: 1,628 times

last updated: 09 Mar '16, 15:15