Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает условие в операторе ветвления if 
:(
    Опции темы
champion
Дата 16.11.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Вот код:
Код

#include <stdio.h>
int main ( void );
int main ( void ) {
 float a, b, c, step, runto, endin, result;
 printf ("Please, enter a, b, c, runto, endin, step: ");
 scanf ("%f %f %f %f %f %f", &a, &b, &c,  &runto, &endin, &step);
 if ( (result = (a==0) ? -c/b : 0)==0 ) {
  while (runto <= endin) {
[color=red]   result = ((runto*runto*a+b*runto+c)*((runto-step)*(runto-step)*a+b*(runto-step)+c)<=0) ? runto : 0 ;[/color]
   if (result!=0) printf("%f", result);
   runto=runto+step;
  }
 }else{
  printf ("\nresult: %f", result);
 }
 return 0;
}
\
Не работает то, что выделено красным. В чем ошибка?


--------------------
user posted image
PM MAIL   Вверх
Walker
Дата 16.11.2007, 16:01 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 1
Всего: 16



В такой конструкции, которую Вы наворотили, Вам-то сложно разобраться, ещё сложнее нам. Подобные синтаксические изыски не показатель мастерства, а затруднение отладки. Что именно не работает? Работает не так, как нужно или вообще не компилируется? Беглый осмотр показал, что в условии Вы вычисляете результат произведения двух квадратичных уравнений (кошмар!). Знак будет определяться, главным образом, по вторым членам, а точнее, step должен быть больше runto, как минимум. Разбейте выражение нат простые элементы и вычислите промежуточные значения - так будет проще!

Это сообщение отредактировал(а) Walker - 16.11.2007, 16:04


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alek86
Дата 16.11.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



перепиши код нормально, и сам, авось, разберешься )


--------------------
user posted image    user posted image
PM MAIL   Вверх
orthrus
Дата 16.11.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: нет
Всего: 16



Ты там со скобками чегото намутил, точнее не правильно раставил. Надобно тебе все переписать по человечиски, а то без рюмки не разберешься smile 


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
0lmer
Дата 17.11.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



мда, такой код на отладку только врагам давать. smile

Цитата(orthrus @  16.11.2007,  16:50 Найти цитируемый пост)
а то без рюмки не разберешься  


Я даже с рюмкой не разобрался. smile

PM   Вверх
archimed7592
Дата 17.11.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(champion @  16.11.2007,  15:37 Найти цитируемый пост)
Не работает то, что выделено красным. В чем ошибка?

В чём ошибка зависит от того, что понимать под терминами "работает" и "не работает". С телепатами пока что, к сожалению, напряг...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Peter
Дата 19.11.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Это как бы решение квадратного уравнения методом... как там его? "Научного тыка", что ли?
Во-первых, переменную типа float не рекомендуется сравнивать с нулём! Там арифметика неточная! Лучше переменные переделать в double.
Код
if(a == 0)
{
    if(b == 0)
    {
        if(c == 0) printf("\nresult: every real number");
        else printf("\nresult: empty set");
    }
    else printf("\nresult: %f", -c/b);
}
else
{
    while(runto <= endin)
    {
        if((a*runto*runto + b*runto + c) * (a*(runto+step)*(runto+step) + b*(runto+step) + c) <= 0)
        {
            printf("\nresult: %f", runto);
            break;
        }
        runto += step;
    }
    if(runto > endin)
        printf("\nresult: empty set");
}

При проверке длинного условия к runto желательно прибавлять step (как я сделал), а не отнимать. Последний if - для того, чтобы проверить, наткнулся цикл на решение или нет.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
archimed7592
Дата 19.11.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Peter @  19.11.2007,  19:01 Найти цитируемый пост)
как там его? "Научного тыка", что ли?

Эмпирическим путём.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Peter
Дата 19.11.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Цитата(archimed7592 @  19.11.2007,  21:35 Найти цитируемый пост)
Эмпирическим путём.

Вспомнил: метод проб и ошибок.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Silent_s
Дата 9.12.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 2.12.2007
Где: Москва

Репутация: нет
Всего: 0



А никто не подскажет как можно сравнивать в конструции if else переменные с строковой константой? То есть имеется условие
Код

#include <locale.h>
main()
{ 
    char y, n;
    setlocale(LC_ALL, "Russian");
    printf("Хотите увидеть грудь?(y/n)");
    scanf("%c",&y);
    if (y == 'a')
        printf("\n( . )( . )\n\n на те=)\n");
    else 
        printf("\nА зря классная грудь...\n");
    getch();
}

Как можно сравнить что введена именно та  строка которую нам надо? К примеру если сюда применить не y а yes ????
--------------------
Мой блог
PM MAIL   Вверх
zkv
Дата 9.12.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Silent_s @  9.12.2007,  23:48 Найти цитируемый пост)
К примеру если сюда применить не y а yes ???? 

если Си, то strcmp(), если С++, то лучше использовать std::string например.
PM MAIL   Вверх
Silent_s
Дата 10.12.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 2.12.2007
Где: Москва

Репутация: нет
Всего: 0



Для С. Я что то  не врубился как она работает... Объясните плз.. А то головва под ночь пухнет smile 

Это сообщение отредактировал(а) Silent_s - 10.12.2007, 00:47
--------------------
Мой блог
PM MAIL   Вверх
bsa
Дата 10.12.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Silent_s, strcmp(s1,s2) возвращает:
отрицательное число, если s1 < s2
0, если s1 == s2
положительное число, если s1 > s2
обычно, ее используют в следующем виде:
Код
if ( !strcmp(s1, s2) ) {...} //сделать что-то, если строки равны


Это сообщение отредактировал(а) bsa - 10.12.2007, 00:52
PM   Вверх
zkv
Дата 10.12.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Код

int main()
{ 
    char answer[100];
    setlocale(LC_ALL, "Russian");
    printf("Хотите увидеть грудь?(yes/no)");
    scanf("%s", answer );
    if ( strcmp(answer, "yes" ) == 0 )
        printf("\n( . )( . )\n\n на те=)\n");
    else 
        printf("\nА зря классная грудь...\n");
    getch();
}

PM MAIL   Вверх
Silent_s
Дата 10.12.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 2.12.2007
Где: Москва

Репутация: нет
Всего: 0



Всем спасибо, наберу 100 сообщений, наставлю плюсегов! smile 
--------------------
Мой блог
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.