double R;
if (x+y < 0)
R = x*x + y*y;
else
R = sqrt(x+y);
return R;
}
int main() {
double a, b;
cin>>a>>b;
double Z = F(a, b)+F(a/b, F(a*a, b*b));
printf("%.20f", Z);
}
Misol2
To’rtburchakning tamonlari va bitta diagonali berilgan. Uning yuzasini topuvchi dastur tuzing.
Yechimi:
To’rtburchak yuzasi diagonal ajratgan tamonlari (a, b, e) va (c, d, e) bo’lgan ikkita uchburchaklar yuzalari yi’gindisiga teng.
Uchburchak yuzasini ikki marta hisoblashga lozim. Ikki marta bir xil amalni yozmaslik uchun uchburchak yuzasini topadigan funksiya tuzamiz va unga ikki marta murojaaat qilamiz.
#include #include #include using namespace std;
double surface_traingle(int a, int b, int c) {
double p = (a+b+c) / 2.0;
double s = sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
int main() {
int a, b, c, d, e;
cin>>a>>b>>c>>d>>e;
double s = surface_traingle(a, b, e) + surface_traingle(c, d, e);
printf("%.10f", s);
}
Rekursiv funksiyalar Funksiya tanasida o‘zini o‘zi chaqirsa rekursiya deyiladi. Rekursiya ikki xil bo‘ladi:
Oddiy – agar funksiya o‘z tanasida o‘zini chaqirsa;
Vositali – agar birinchi funksiya ikkinchi funksiyani chaqirsa, ikkinchisi esa o‘z navbatida birinchi funksiyani chaqirsa.
Masalan: Faktorialni hisoblash funksiyasini olamiz. U o‘zini ichida oldingilarini chaqiradi.
long Faktorial(int n)
{
if (!n) return 1;
else return n * Faktorial (n - 1);
}
Xuddi shunday darajani hisoblash funksiyasini ham misol keltirish mumkin.
Dasturi
Matematik ifodasi
double Daraja(double x, int n)
{
if (!n) return 1;
else return x * Daraja(x, n - 1);
}
Namuna. Rekursiv funksiyadan foydalangan holda ikkita sondan raqamlari yig‘indisi katta bo‘lgan sonni topuvchi dastur tuzing.
int sum, sum_1, sum_2 ;
int raqam(int son)
{
sum += son % 10;
son = son / 10;
if (son == 0) return sum;
raqam (son);
}
int main()
{
int sum_1 = 0, sum_2 = 0;
int son_1, son_2;
cin>>son_1>>son_2;
sum_1 = raqam(son_1);
sum_2 = raqam(son_2);
if (sum_1 > sum_2) cout << son_1; else cout<getch();
return 0;
}