Тема: Програма та компілятор дивно себе поводять.
Компілятор програму компілює, але видає попередження на скріні.
Після того, як змінив:
while (x=3)
на
while (x!=3)
.
Ще одна проблема, що програма опрацьовує число -3, як значення більше ніж 3.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Програма та компілятор дивно себе поводять.
Для відправлення відповіді ви повинні увійти або зареєструватися
Компілятор програму компілює, але видає попередження на скріні.
Після того, як змінив:
while (x=3)
на
while (x!=3)
.
Ще одна проблема, що програма опрацьовує число -3, як значення більше ніж 3.
може спробуйте
while (x==3)
// x=3 присвоєння
// x==3 порівняння
Пробував і так, але програма просто виконує
printf("Кiлькiсть значень <X> при яких y=0: %i\n", i);
і припиняє свою роботу та попередження не зникає.
ну я б чимось допоміг , але не вкурсі що там у вас відбувається в коді і як воно повинне працювати
Топікстартер себе дивно поводить.
Почитайте тут: http://segfault.kyiv.ua/smart-questions-ru.html
При значеннях х рівних -5, 0 та 5 – значення функції не визначено. Вихід з циклу здійснюється при значенні х = 3. В програмі повинні підраховуватися кількість значень, при яких функція дорівнює нулю (у=0).
x > -3 або x < 3 - y=x
x < -3 - y = (x^2 - 3 * x + 2) / 2
x > 3 - y=x^3
Топікстартер себе дивно поводить.
Почитайте тут: http://segfault.kyiv.ua/smart-questions-ru.html
та да, коротка вижимка є і в наших правилах, але їх як завжди ніхто не читає, ібо нема часу
При значеннях х рівних -5, 0 та 5 – значення функції не визначено. Вихід з циклу здійснюється при значенні х = 3. В програмі повинні підраховуватися кількість значень, при яких функція дорівнює нулю (у=0).
x > -3 або x < 3 - y=x
x < -3 - y = (x^2 - 3 * x + 2) / 2
x > 3 - y=x^3
це знов нам ні про що не говорить, ми любим код читати
Якщо не знайду відповіді, скину словесний алгоритм виконання програми.
Судячи з тексту попередження, компілятор інформує, що змінній x до початку циклу початкове значення не присвоюється, тому там може лежати що-завгодно. Поки присвоєння (замість порівняння) було в умові циклу, компілятор не лаявся, бо така конструкція формально є правильною: змінній присвоюється значення 3, воно ж використовується як умова циклу — це не нуль, тому працює як true, ми отримали нескінченний цикл. Коли ж замість присвоєння стало порівняння (!= чи ==), компілятор побачив, що змінна x не ініціалізована.
Ще одна проблема, що програма опрацьовує число -3, як значення більше ніж 3.
- розрахунок йде у дійсних, а порівнюємо з цілим(так не можна), потрібно порівнювати з наперед заданою похибкою (у моєму прикладі похибка дорівнює 2E-6) Також не рекомендую строгі умовні перевірки для дійсних.
#include <iostream>
using namespace std;
/*
x > -3 або x < 3 - y=x
x < -3 - y = (x^2 - 3 * x + 2) / 2
x > 3 - y=x^3
*/
float f(float x);
int main(){
float y, x;
float xn = -5.5f;
float xk = 5.5f;
float hx = 0.1f;
size_t zero = 0;
cout<<"\tx\tf(x)"<<endl;
for( x = xn; x < xk && x != 3; x += hx )
{
cout<<x<<"\t"<<(y = f(x))<<endl;
if( fabs(y) < 2E-6 )
zero++;
}
cout<<"zero count : "<<zero<<endl;
cin.get();
return 0;
}
float f(float x){
float y = 0;
if( x < -3 )
y = (x*x - 3*x + 2) / 2;
else
if( x > 3 )
y = x*x*x;
else
y = x;
return y;
}
Щоб було зрозуміло про що йде мова - надаю приклад як то кажуть з власного "життя"
#include <iostream>
using namespace std;
float f(float x);
int main(){
float x = 1000;
cout<<"x = "<<x<<endl;
x = x + 1E-5;
cout<<"x = "<<x<<endl;
return 0;
}
float f(float x){
float y = 0;
if( x < -3 )
y = (x*x - 3*x + 2) / 2;
else
if( x > 3 )
y = x*x*x;
else
y = x;
return y;
}
http://codepad.org/PatrqlpE
Вивід консолі
x = 1000
x = 1000
Щоб було зрозуміло про що йде мова - надаю приклад як то кажуть з власного "життя"
Щоб було зрозуміло, треба робити не від балди:
double x = 1000;
cout.width(10);
cout.precision(10);
cout<<"x = "<<x<<endl;
x = x + 1E-5;
cout<<"x = "<<x<<endl;
cin.get();
return 0;
Не знаю що ти своїм прикладом мав на увазі, але точність треба задавати коли ж бо використовується форматовані оператори.
може спробуйте
while (x==3) // x=3 присвоєння // x==3 порівняння
Типова помилка Дельфі-програмістів?
Типова помилка Дельфі-програмістів?
І не тільки. Більшість компіляторів вже давно навчилися показувати попередження про це; а щоб уникнути такої проблеми, Йоди нотація придумана:
while( 3 == x )
і присвоювання випадкове гарантовано компілятора помилку викличе.
nicoliafox написав:При значеннях х рівних -5, 0 та 5 – значення функції не визначено. Вихід з циклу здійснюється при значенні х = 3. В програмі повинні підраховуватися кількість значень, при яких функція дорівнює нулю (у=0).
x > -3 або x < 3 - y=x
x < -3 - y = (x^2 - 3 * x + 2) / 2
x > 3 - y=x^3це знов нам ні про що не говорить, ми любим код читати
А мені це багато про що говорить.
Itari,
Щоб було зрозуміло, треба робити не від балди:
- а тепер відвори це з флоатом у якого точність обмежена(ось такі приколи як у автора теми дуже часто пов'язані саме з float). А це щоб тобі краще було зрозуміло, що являє собою число з плаваючою комою http://codepad.org/JSzottiL
#include <iostream>
using namespace std;
int main(){
float x = 1000;
cout<<"x = "<<x<<endl;
x = x + 1E-5;
cout.width(10);
cout.precision(10);
cout<<"x = "<<x<<endl;
x = x + 1E-5;
cout<<"x = "<<x<<endl;
return 0;
}
Не знаю що ти своїм прикладом мав на увазі, але точність треба задавати коли ж бо використовується форматовані оператори.
- то зараз є гарна можливість занотувати собі на майбутнє мій приклад.
Компілятор програму компілює, але видає попередження на скріні.
Після того, як змінив:while (x=3)
на
while (x!=3)
.
Ще одна проблема, що програма опрацьовує число -3, як значення більше ніж 3.
Є деякі дивні компілятори котрбі видають таку помилку, не звертайте уваги.
Є деякі дивні компілятори котрбі видають таку помилку, не звертайте уваги.
Це що за компілятори такі?
програма опрацьовує число -3, як значення більше ніж 3.
Здається мені, що топікстартеру вже пора викласти свої опрацьовування, тоді можно буде зрозуміти, як автор теми нарвався на неприемності, і на які саме.
Гадаю, там є чарівне слово unsigned, але я не телепат, так що напевне не знаю.
Для відправлення відповіді ви повинні увійти або зареєструватися