تحديات برمجيةالتحدي التاسع - حل التمرين الثالث بلغة C
المطلوب
قم بتعريف دالة إسمها SquareRoot()
، عند استدعاءها نمرر لها عدد, فترجع ناتج قيمة الجزر التربيعي ( Square Root ) له.
بعدها قم بتجربة هذه الدالة في البرنامج.
الحل بلغة C
#include <stdio.h>
// SquareRoot هنا قمنا بتعريف الدالة
double SquareRoot(double number) {
// إذا كان العدد أصغر من صفر فإنها ترجع رسالة خطأ و العدد 1- كدليل على أن الناتج خطأ
if (number < 0) {
fprintf(stderr, "Cannot calculate square root of a negative number\n");
return -1;
}
// إذا كان العدد بين 0 و 1 فإنه سيتم إرجاعه كم هو
if (number == 0 || number == 1) {
return number;
}
// التخمين الأول للناتج
double guess = number / 2.0;
// هنا قمنا باستخدم طريقة نيوتن-رافسون للتقريب التكراري
for (int i = 0; i < 100; i++) {
guess = 0.5 * (guess + number / guess);
}
// هنا قمنا بإرجاع الناتج
return guess;
}
// هنا قمنا بتجربة الدالة
int main() {
double inputNumber = 25.0;
double result = SquareRoot(inputNumber);
// إذا لم يكن الناتج 1- فإنها ستطبع كم هو الجواب
if (result != -1) {
printf("Square root of %lf is: %lf\n", inputNumber, result);
}
return 0;
}
#include <stdio.h>
// SquareRoot هنا قمنا بتعريف الدالة
double SquareRoot(double number) {
// إذا كان العدد أصغر من صفر فإنها ترجع رسالة خطأ و العدد 1- كدليل على أن الناتج خطأ
if (number < 0) {
fprintf(stderr, "Cannot calculate square root of a negative number\n");
return -1;
}
// إذا كان العدد بين 0 و 1 فإنه سيتم إرجاعه كم هو
if (number == 0 || number == 1) {
return number;
}
// التخمين الأول للناتج
double guess = number / 2.0;
// هنا قمنا باستخدم طريقة نيوتن-رافسون للتقريب التكراري
for (int i = 0; i < 100; i++) {
guess = 0.5 * (guess + number / guess);
}
// هنا قمنا بإرجاع الناتج
return guess;
}
// هنا قمنا بتجربة الدالة
int main() {
double inputNumber = 25.0;
double result = SquareRoot(inputNumber);
// إذا لم يكن الناتج 1- فإنها ستطبع كم هو الجواب
if (result != -1) {
printf("Square root of %lf is: %lf\n", inputNumber, result);
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Square root of 25.0 is 5.0