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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста разобраться с Switch case 
:(
    Опции темы
ZXSpectrum
Дата 24.4.2012, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу предупрежу ,что я полный ламер) Мне нужно выполнить лабораторку с  использованием конструкции switch-case. Вот ее условие:


Вычислить и вывести на экран значения аргумента и значения функции, заданной несколькими выражениями, для заданного интервала  хн ≤ x ≤ хк и шага dx изменения аргумента. Параметры a, b, c – действительные числа.
Вариант 10.
user posted image

Вот что я сумел на данный момент сделать, вся загвоздка в том что я не знаю как задать нужное мне условие для "case",который непременно желает оставаться константой(

Код
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

main()
{

    int a, b, c, dx, F, xn, xk, x;
    int n;
    
    printf("Enter:\n");
    std::cout<<"a = ";            
    std::cin>>a;                
    std::cout<<"b = ";            
    std::cin>>b;    
    std::cout<<"c = ";            
    std::cin>>c;                
    std::cout<<"xn = ";            
    std::cin>>xn;                
    std::cout<<"xk = ";            
    std::cin>>xk;        
    std::cout<<"dx = ";            
    std::cin>>dx;        
    
    n=0;
    printf("Results:\n");

    for (x=xn; x<=xk; x=x+dx)
    {
         switch(x-10<0 && a==0) 
         {case 1: case 2: case 3: case 4: case 5:  case 6: case 7: case 8: case 9: case 10:
          case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: 
          case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: 
          case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40:
              F =(cos(x)+1)/(b-x);     break; 
         
          switch(x-10>0 && a!=0)
          {case 1: case 2: case 3: case 4: case 5:  case 6: case 7: case 8: case 9: case 10:
          case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: 
          case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: 
          case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40:
              F=(a*x*x-b*x+c)/(sin(x)); break;  
                  
                     
          default: F=(log(x+c))/(2*b);}}
         
         
    }
         printf ("%3d.      x=%6.2f     F=%8.3f\n\n",n,x,F);
         printf("F=%d \n", F);
        getch();
        return 0;
        
}


Ну вот ее рабочее решение с помощью if else :


Код
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float a, b, c, dx, F, xn, xk, x;
int n;

clrscr();

printf("Enter a, b, c, xn, xk, dx:\n");
scanf("%f%f%f%f%f%f",&a,&b,&c,&xn,&xk,&dx);
n=0;
printf("Results:\n");

for (x=xn; x<=xk; x=x+dx)
    {
     if (x-10<0 && a==0)
            {F =(cos(x)+1)/(b-x);}

        else if (x-10>0 && a!=0)
            {F=(a*x*x-b*x+c)/(sin(x));}

        else
            F=(log(x+c))/(2*b);

    printf ("%3d.      x=%6.2f     F=%8.3f\n\n",n,x,F);
    }

getch();
return 0;
}

Всем СПАСИБО ЗА ВНИМАНИЕ!!!

Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 24.4.2012, 10:43
PM MAIL   Вверх
disputant
Дата 24.4.2012, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ZXSpectrum @ 24.4.2012,  06:12)
Сразу предупрежу ,что я полный ламер) Мне нужно выполнить лабораторку с  использованием конструкции switch-case. Вот ее условие:


У вас какое-то "зачем просто, если можно сложно"...
С чего вы вообще решили, что в этой задаче требуется применение switch-case? 

Но если ну очень надо, то подумайте вот о чем:

Выражение x-10<0 - это bool со значениями true и false (1 и 0 при приведении к int)... Как и x-10>0, a==0, a != 0. Надо только немного повозиться, чтоб получить конкретные, но разные числовые значения (не пересекающиеся). Подумайте, как.

Кстати, можно совсем тупо: при помощи if-else получить одно из трех значений (скажем, 0, 1 и 2), а потом использовать его в switch для расчета smile.

Это сообщение отредактировал(а) disputant - 24.4.2012, 07:10
PM MAIL   Вверх
borisbn
Дата 24.4.2012, 09:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(ZXSpectrum @  24.4.2012,  06:12 Найти цитируемый пост)
Ну вот ее рабочее решение с помощью if else :

смотря на первое решение как-то не особо верится, что второе сделал ты сам...
Ну это так... лирика... В чём вопрос-то ? Есть второе решение. Оно красивое. Правильное. Работает. Что ещё нужно ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 24.4.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ZXSpectrum
Код
int cond1 = (x < 10) ? 4 : 0;
int cond2 = (x > 10) ? 2 : 0;
int cond3 = (a == 0) ? 1 : 0;
int cond = cond1 + cond2 + cond3;
//cond:
//0x05 for x-10 < 0 and a == 0
//0x02 for x-10 > 0 and a != 0


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



И ещё. Я бы перед делением в первом случае на (b-x), во втором - на sin(x) и в третьем - на 2*b, проверил бы, что этот знаменатель не равен нулю. Причём числа с плавающей точкой просто так сравнивать нехерошо. Так что потребуется функция типа такой
Код
bool isZero( double x, double eps = 1e-42 ) {
    return fabs( x ) < eps;
}

а дальше
Код

if (x-10<0 && a==0)
{
    F =  isZero( b-x ) : 0.0 ? (cos(x)+1)/(b-x);
}
else if (x-10>0 && a!=0)
{
    F = isZero( sin(x) ) ? 0.0 : (a*x*x-b*x+c)/(sin(x));
}
else
{
    F = isZero( 2*b ) ? 0.0 : (log(x+c))/(2*b);
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ZXSpectrum
Дата 25.4.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем Спасибо!! Попробую правильно реализовать ,предложенные вами варианты.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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