IPB

Здравейте ( Вход | Регистрация )

> Основи на C++, Част 8, Решение на задачите на Гл. Ас. Н. Касъклиев
vIkToRsHeFa
коментар Feb 6 2008, 18:04
Коментар #1


.: БосСс В ДжУнГлАтА :.

Група: Администратори
Коментари: 15,312
Регнат: 25-April 05
От: Гр. Пловдив
Пол: Мъж



Цитат
Задача 1. Да се напише програма, която намира произведението на целите числа от m до n, където m и n са дадени естествени числа и m ≤ n. За целта да се използва операторът do/while.
#include <iostream.h>
int main()
{cout << "m= ";
int m;
cin >> m;
if (!cin)
{cout << "Error. Bad Input! \n";
return 1;
}
if (m <= 0)
{cout << "Incorrect Input! \n";
return 1;
}
cout << "n= ";
int n;
cin >> n;
if (!cin)
{cout << "Error. Bad Input! \n";
return 1;
}
if (n <= 0)
{cout << "Incorrect Input! \n";
return 1;
}
if (m > n)
{cout << "Incorrect Input! \n";
return 1;
}
int prod = 1;
int i = m;
do
{prod = prod * i;
i++;
} while (i <= n);

cout << prod << "\n";
return 0;
}
В случая независимо от условието длаи е изпълнено или не при do/while е характерно че тялото на цикъла тоест операторите в рамките на фигурните скоби се изпълняват поне веднъж. Ако вече условието е не е изпълнено и повече пъти. Не взимането в предвид на това води доста често до трудно откриваеми грешки.


Цитат
Задача 2. Нека a е неотрицателно реално число. Да се напише програма, която приближено пресмята квадратен корен от a по метода на Нютон.
Упътване: (метод на Нютон) Дефинира се редица от реални числа x0, x1, x2, x3, … по следния начин:

X0=1,
Xi+1 = 1/2(Xi + A/Xi),
i = 0 , 1, 2...

Сумирането продължава докато абсолютната стойност на разликата на последните два констуирани елемента на редицата стане по-малка от ε, ε>0, е дадено достатъчно малко реално число.

#include <iostream.h>
#include <iomanip.h>
#include <math.h>
int main()
{cout << "a= ";
double a;
cin >> a;
if (!cin)
{cout << "Error! Bad Input! \n";
return 1;
}
if (a < 0)
{cout << "Incorrect Input! \n";
return 1;
}
cout << "eps= ";
double eps;
cin >> eps;
if (!cin)
{cout << "Error! Bad Input! \n";
return 1;
}
if (eps <= 0 || eps > 0.5)
{cout << "Incorrect Input! \n";
return 1;
}
double x0;
double x1 = 1;
do
{x0 = x1;
x1 = 0.5*(x0 + a/x0);
} while (fabs (x1-x0) >= eps);
cout << setprecision(6) << setiosflags(ios :: fixed);
cout << "sqrt(" << a << ")= " << setw(10) << x1 << "\n";
return 0;
}
Нищо ново, ако някой има въпроси или не му е ясно нещо нека драсне. smile.gif


Цитат
Задача 3. Да се напише програма, която проверява дали съществува решение на деофантовото уравнение a1.x1 + a2.x2 + a3.x3 + a4.x4 = a в интервала [p, q], където a1, a2, a3, a4, a, p и q са дадени цели числа, p<q.
В решението са пропуснати дефинициите и въвеждането на стойности на променливите a1, a2, a3, a4, a, p и q, тъй като са правени преди. Условието p<q прави подходящ оператора do/while.
int main()
{…
if (p>=q)
{cout << "Incorrect Input!\n";
return 1;
}
int x1 = p;
bool b;
do
{int x2 = p;
do
{int x3 = p;
do
{int x4 = p;
do
{b = a1*x1 + a2*x2 + a3*x3 + a4*x4 == a;
x4++;
} while (!b && x4 <= q);
x3++;
} while (!b && x3 <= q);
x2++;
} while (!b && x2 <= q);
x1++;
} while (!b && x1 <= q);
if (cool.gif cout << "yes\n";
else cout << "no\n";
return 0;
}
Целта на този последен пример е да демонстрира, че цилките могат да се влагат един във друг очти неограничено, внимавайте само с променливите да не стане безкраен цикъла. smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Отговори (1 - 1)
i_nikolov_
коментар Dec 19 2010, 19:13
Коментар #2


Нов Потребител

Група: Потребители
Коментари: 2
Регнат: 18-December 10
Име: i_nikolov_
Пол: Мъж



Цитат(vIkToRsHeFa @ Feb 6 2008, 18:04) *
Цитат
Задача 1. Да се напише програма, която намира произведението на целите числа от m до n, където m и n са дадени естествени числа и m ≤ n. За целта да се използва операторът do/while.
#include <iostream.h>
int main()
{cout << "m= ";
int m;
cin >> m;
if (!cin)
{cout << "Error. Bad Input! \n";
return 1;
}
if (m <= 0)
{cout << "Incorrect Input! \n";
return 1;
}
cout << "n= ";
int n;
cin >> n;
if (!cin)
{cout << "Error. Bad Input! \n";
return 1;
}
if (n <= 0)
{cout << "Incorrect Input! \n";
return 1;
}
if (m > n)
{cout << "Incorrect Input! \n";
return 1;
}
int prod = 1;
int i = m;
do
{prod = prod * i;
i++;
} while (i <= n);

cout << prod << "\n";
return 0;
}
В случая независимо от условието длаи е изпълнено или не при do/while е характерно че тялото на цикъла тоест операторите в рамките на фигурните скоби се изпълняват поне веднъж. Ако вече условието е не е изпълнено и повече пъти. Не взимането в предвид на това води доста често до трудно откриваеми грешки.


Здравей rolleyes.gif Имам същата задача за курсова работа, само че искат да е написана на C със printf и scanf.Би ли могъл по някакъв начин да ми помогнеш? Благодаря предварително smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 потребител(и) четат тази тема (2 гости и 0 скрити)
0 Потребител(и):

 



- Елате в .: BGtop.net :. Топ класацията на българските сайтове и гласувайте за този сайт!!! Олекотена версия

Сега е: 14th October 2019 - 11:26