ধরুন আমরা এমন কিছু ফাংশন তৈরি করতে চাই যা একাধিক আর্গুমেন্ট নিতে পারে, সেখানে কোনো নির্দিষ্ট সংখ্যক আর্গুমেন্ট নেই। আমরা তিনটি ফাংশন sum(), max() এবং min() করতে চাই, তারা যথাক্রমে সংখ্যার যোগফল, সর্বাধিক সংখ্যা এবং সর্বনিম্ন প্রদত্ত সংখ্যা গণনা করতে পারে। এই ফাংশনগুলির প্রতিটি তাদের প্রথম আর্গুমেন্ট হিসাবে গণনা করা আর্গুমেন্টের সংখ্যা গ্রহণ করবে। এই ধরনের ফাংশন সংজ্ঞায়িত করার জন্য আমাদের ফাংশন আর্গুমেন্টে উপবৃত্তাকার (...) তিনটি বিন্দু ব্যবহার করতে হবে। এটি ব্যবহার করার জন্য আমাদের stdarg.h হেডার ফাইল অন্তর্ভুক্ত করতে হবে। এই ধরনের ফাংশনকে variadict ফাংশন বলা হয়। পরিবর্তনশীল আর্গুমেন্ট অ্যাক্সেস করার জন্য চারটি ভিন্ন জিনিস আছে যা আমরা লক্ষ্য করতে পারি −
-
va_list :এটি সমস্ত প্রদত্ত আর্গুমেন্ট সঞ্চয় করে
-
va_start :এটি পরিবর্তনশীল আর্গুমেন্ট এপি ভেরিয়েবল অ্যাক্সেস করা শুরু করবে
-
va_arg :এটি প্রদত্ত প্রকারের পরবর্তী আর্গুমেন্ট পুনরুদ্ধার করতে ব্যবহৃত হয়
-
va_end :এটি ভেরিয়েবল আর্গুমেন্ট লিস্ট অ্যাক্সেস করা শেষ করে
সুতরাং, যদি আমরা ফাংশনকে কল করি যেমন −;
- সমষ্টি(5, 5, 2, 8, 9, 3)
- সর্বোচ্চ(3, 5, 9, 2)
- মিনিট(6, 8, 5, 2, 6, 7, 9)
তাহলে আউটপুট হবে 27 (সমস্ত পাঁচটি সংখ্যার যোগফল), 9 (প্রদত্ত তিনটি সংখ্যার সর্বোচ্চ), 2 (প্রদত্ত ছয়টি সংখ্যার সর্বনিম্ন)।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
একটি ফাংশনের যোগফল সংজ্ঞায়িত করুন (), এটি cnt, এবং আর্গুমেন্টের পরিবর্তনশীল সংখ্যা গ্রহণ করবে
- va_list ap সংজ্ঞায়িত করুন
- va_start(ap, cnt) দ্বারা ap আরম্ভ করুন
- n :=0
- আরম্ভ করার জন্য i :=0, যখন i
- n :=n + va_arg(ap, int) দ্বারা পরবর্তী আর্গুমেন্ট
- সর্বনিম্ন :=বর্তমান
- সর্বোচ্চ :=বর্তমান
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <stdio.h> #include <stdarg.h> int sum (int cnt,...) { va_list ap; int i, n; va_start(ap, cnt); n = 0; for (i=0;i<cnt;i++){ n += va_arg(ap, int); } va_end(ap); return n; } int min(int cnt,...) { va_list ap; int i, current, minimum; va_start(ap, cnt); minimum = 99999; for (i=0;i<cnt;i++){ current = va_arg(ap, int); if (current < minimum) minimum = current; } va_end(ap); return minimum; } int max(int cnt,...) { va_list ap; int i, current, maximum; va_start(ap, cnt); maximum = 0; for (i=0;i<cnt;i++){ current = va_arg(ap, int); if (current > maximum) maximum = current; } va_end(ap); return maximum; } int main(){ printf("%d\n",sum(5, 5, 2, 8, 9, 3)); printf("%d\n",max(3, 5, 9, 2)); printf("%d\n",min(6, 8, 5, 2, 6, 7, 9)); }
ইনপুট
sum(5, 5, 2, 8, 9, 3) max(3, 5, 9, 2) min(6, 8, 5, 2, 6, 7, 9)
আউটপুট
27 9 2