سلام رفقای برنامهنویس! توی این مقاله قراره با انواع مختلف تعریف تابع در زبان C آشنا بشیم. هدفمون بررسی اینه که آیا عدد واردشده توسط کاربر عدد اول هست یا نه. توی چهار مثال، همین کار با سبکهای متفاوت انجام میشه تا ببینیم چطور میشه ورودی، خروجی و ساختار تابع رو مدیریت کرد.
نکته: فرض بر اینه که عدد ورودی همیشه عدد طبیعی مثبت باشه؛ چون عدد اول باید از 1 بزرگتر باشه و جز 1 و خودش، مقسومعلیه نداشته باشه.
مثال ۱: بدون آرگومان، بدون مقدار برگشتی
#include <stdio.h>
void checkPrimeFlag();
int main() {
checkPrimeFlag(); // بدون آرگومان
return 0;
}
void checkPrimeFlag() {
int value, trial, isComposite = 0;
printf("Enter a positive number: ");
scanf("%d", &value);
if (value == 1) {
isComposite = 1;
} else {
for (trial = 2; trial <= value / 2; ++trial) {
if (value % trial == 0) {
isComposite = 1;
break;
}
}
}
if (isComposite)
printf("%d is not prime.\n", value);
else
printf("%d is prime.\n", value);
}
مثال ۲: بدون آرگومان، با مقدار برگشتی
#include <stdio.h>
int readPositive();
int main() {
int number, step, isNotPrime = 0;
number = readPositive(); // دریافت از تابع بدون آرگومان
if (number == 1) {
isNotPrime = 1;
} else {
for (step = 2; step <= number / 2; ++step) {
if (number % step == 0) {
isNotPrime = 1;
break;
}
}
}
if (isNotPrime)
printf("%d is not a prime number.\n", number);
else
printf("%d is a prime number.\n", number);
return 0;
}
int readPositive() {
int value;
printf("Please enter a number: ");
scanf("%d", &value);
return value;
}
مثال ۳: با آرگومان، بدون مقدار برگشتی
#include <stdio.h>
void verifyPrime(int input);
int main() {
int inputNum;
printf("Type a positive integer: ");
scanf("%d", &inputNum);
verifyPrime(inputNum); // ارسال به تابع
return 0;
}
void verifyPrime(int input) {
int x, isComposite = 0;
if (input == 1) {
isComposite = 1;
} else {
for (x = 2; x <= input / 2; ++x) {
if (input % x == 0) {
isComposite = 1;
break;
}
}
}
if (isComposite)
printf("%d is not prime.\n", input);
else
printf("%d is prime.\n", input);
}
مثال ۴: با آرگومان، با مقدار برگشتی
#include <stdio.h>
int isPrime(int input);
int main() {
int userNumber, result;
printf("Enter an integer greater than 1: ");
scanf("%d", &userNumber);
result = isPrime(userNumber); // آرگومان همراه مقدار برگشتی
if (result == 1)
printf("%d is not a prime number.\n", userNumber);
else
printf("%d is a prime number.\n", userNumber);
return 0;
}
int isPrime(int input) {
int k;
if (input == 1)
return 1;
for (k = 2; k <= input / 2; ++k) {
if (input % k == 0)
return 1; // ترکیبی
}
return 0; // اول
}
بالاخره کدوم بهتره؟
این بستگی به مسئله داره. برای این مثال که هدف بررسی عدد اول بود، روش چهارم بهتر عمل کرد چون تابع فقط کار بررسی رو انجام داد و مسئول ورودی یا نمایش خروجی نبود. تابع isPrime() فقط جواب منطقی میده و کنترل بقیه چیزها مثل نمایش پیام دست برنامه اصلیه.
امیدواریم این آموزش براتون مفید بوده باشه! این مقاله توسط سایت علمی رایشمند برای شما آماده شده است.