Тема: Програма та компілятор дивно себе поводять.
Компілятор програму компілює, але видає попередження на скріні.
Після того, як змінив:
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, але я не телепат, так що напевне не знаю.
Для відправлення відповіді ви повинні увійти або зареєструватися