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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция в заданном интервале, ошибка 1.#j при выводе ответа 
V
    Опции темы
Kruger2
Дата 14.1.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


Вариант 1.


F = 1 / (a * x) - b; при х + а < 0 и с = 0

F = (x - a)/sinx; при х + a > 0 и с ≠ 0

F = 10 * x / (c - 6);  в остальных случаях



Код

#include <stdio.h>
#include <math.h>

main ()
{
     float x, xn, xk, dx, a ,b, c, F, sinx;
     
x= xn
     
     printf("Enter interval xn<= x <=xk  xn(-) to xk(+): \n");
     scanf("%f %f", &xn, &xk);
     
     printf("Enter path (dx): \n");
     scanf("%f", &dx);
     
     printf("Enter x, a, b, c: \n");
     scanf("%f %f %f %f", &x, &a, &b, &c);
    
   
     
     
  repeat:  if (x + a < 0 && c == 0)
       F = 1 / (a * x) - b;
       
        
     
       if (x + a > 0 && c !=0) 
          F = (x - a)/sinx;
        
         
          
       else 
            F = 10 * x / (c - 6); 
            
       printf("%.2f \n", F);
       
       x += dx;
       
       if (x <= xk) {
       goto repeat;
       }
       else
           printf("EOF\n\n"); 
       

system("pause");
return 0;
     
}




Ввожу интервал от 100 до 1000, с шагом 10. x = -10, a=5,  b=10, c = 0 - должен быть расчет для первого случая  F = 1 / (a * x) - b; ответ должен быть -9,98, а мне выдаёт 16,66, к тому же уходит за пределы предела 100 - 1000.

Если ввожу для второго случая  if (x + a > 0 && c !=0) 
          F = (x - a)/sinx;    x=10, a=5 b=10 c=1

получаю ошибку 1.#J

Мне кажется ошибок тут несколько: где то в интервалах, в переменных и где то ещё.

По поводу goto, я везде читал, что его нельзя юзать, но препод дал задачку именно на его примере и это какбэ требованиеsmile

Это сообщение отредактировал(а) Kruger2 - 14.1.2011, 14:07
PM MAIL   Вверх
Kruger2
Дата 14.1.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <stdio.h>
#include <math.h>

main ()
{
     float xn, xk, a, b, c, F, x, dx, sinx, xas;
     
      x= xn;
      
     printf("Enter interval xn<= x <=xk  xn(-) to xk(+): \n");
     scanf("%f %f", &xn, &xk);
     
     printf("Enter path (dx): \n");
     scanf("%f", &dx);
     
     printf("Enter a, b, c: \n");
     scanf("%f %f %f", &a, &b, &c);
     
     repeat: if (c == 0 || x + a < 0) {
        printf ("1st case     \n");
        F=1/a*x-b;
        }
        
     else if (c !=0 || x + a > 0) {
          printf ("2nd case     \n");
          F=(x-a)/sin(x);
          }
          
          else {
               printf("3rd case    \n");
               F=(10*x)/(c-6);
               }
               
       printf("%f\n\n", F);
     
               
     x +=dx;
     if (x <= xk) {
        goto repeat;
        }
     else 
     printf("End of file\n\n");
     
system ("pause");



Теперь и ответ неверный и цикла нетsmile

Это сообщение отредактировал(а) Kruger2 - 14.1.2011, 15:27
PM MAIL   Вверх
Kruger2
Дата 14.1.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что бы все таки уйти от гото попробовал через while 



Код

main ()
{
     float xn, xk, a, b, c, F, x, dx, sinx, xas;
     
     
      
     printf("Enter interval xn<= x <=xk  xn(-) to xk(+): \n");
     scanf("%f %f", &xn, &xk);
     
     printf("Enter path (dx): \n");
     scanf("%f", &dx);
     
     printf("Enter a, b, c: \n");
     scanf("%f %f %f", &a, &b, &c);
     
     x= xn;
     
     
     while (x <= xk) {
           x +=dx;   
           
      if (c == 0 || x + a < 0) {
            printf("case 1");
            F=1/(a*x)-b;
        }
                else if (c !=0 || x + a > 0) {
                    printf("case 2");
                    F=(x-a)/sin(x);
                    }
                    else {
                         printf("case 3");
                         F=(10*x)/(c-6);
                         }
        printf("%f\n\n", F);
       }
                             
system ("pause");
}


но тоже не вышло)



Тому кто поможет решить  даю  1 WMZ smile 


Это сообщение отредактировал(а) Kruger2 - 14.1.2011, 16:18
PM MAIL   Вверх
Фантом
Дата 14.1.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



В первом варианте бардак с if-ами, которые должны быть вложенными (но таковыми не являются). Дальше это исправлено, но && почему-то поменялось на ||. Там же появилось F=1/a*x-b; (в отличие от исходно правильного F=1/(a*x)-b;. Вывод - не стоит пытаться исправлять сразу несколько ошибок.  smile 

Цитата(Kruger2 @  14.1.2011,  13:58 Найти цитируемый пост)

По поводу goto, я везде читал, что его нельзя юзать, но препод дал задачку именно на его примере и это какбэ требование

Хм... а можно узнать (если не секрет), где водятся такие преподы?

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


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

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



del.

Ты уже исправил, но ошибку не написал.

Это сообщение отредактировал(а) A5uKa - 14.1.2011, 17:03
PM   Вверх
Kruger2
Дата 14.1.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да не суть важно, ниже уже 2 более близких решения, как мне кажется и всё равно никаких результатов)

Добавлено через 5 минут и 1 секунду
Бардак в первом вроде поправил во втором варианте. 

&& или изменил на || и, потому что по условиям оба условия должны выполняться. && будет выполняться если хотя бы 1 утверждение верно.

формула изменилась, потому что криво формулу переписал просто.

Добавлено через 7 минут и 18 секунд
Препроды такие водятся в Молдове, бабушке под 80 лет smile 
PM MAIL   Вверх
RastaDja
Дата 14.1.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не знаю нужно есчё или нет, но
Код

#include "stdafx.h"
#include "iostream"
#include <sstream>
#include <math.h>

int _tmain(int argc, _TCHAR* argv[])
{
    double a,b,c;
    short xn, xk, step;
    std::cout<<"enter xn < x < xk and step \n" << "xn: ";
    std::cin>>xn;
    std::cout<<"enter xk < x < xk \n" << "xk: ";
    std::cin>>xk;
    std::cout<<"step: ";
    std::cin>>step;
    std::cout<<"enter a,b,c \n";
    std::cout<<"a:";
    std::cin>>a;
    std::cout<<"b: ";
    std::cin>>b;
    std::cout<<"c: ";
    std::cin>>c;

    short x;
    double F = 0.0;
    for(x=xn; x<=xk; x+=step){
        std::cout<<"x="<<x;
        if((x+a)<0 && c==0){//при х + а < 0 и с = 0
            F=1.0/(double)(a*x) - b;
        }else{
            if((x+a)>0 && c!=0){//при х + a > 0 и с ≠ 0
                F=(x-a)/sin((double)x);
            }else{
                F = 10 * x / (c - 6);
            }
        }

        std::cout<<" F="<<F<<std::endl;
    }


    
    return 0;
}





--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Kruger2
Дата 14.1.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



эм, а в си тоже самое можно?)

нужно нужно ещё)
PM MAIL   Вверх
Фантом
Дата 14.1.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Kruger2 @  14.1.2011,  17:03 Найти цитируемый пост)
&& или изменил на || и, потому что по условиям оба условия должны выполняться. && будет выполняться если хотя бы 1 утверждение верно.

На самом деле - с точностью до наоборот.  smile Логическое "И" - это именно &&.

Цитата(Kruger2 @  14.1.2011,  17:03 Найти цитируемый пост)

Препроды такие водятся в Молдове, бабушке под 80 лет

Понятно. По-видимому, это возрастное.
PM   Вверх
Kruger2
Дата 14.1.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хотя вроде понял саму задачу. сейчас попробую перевести в си
PM MAIL   Вверх
RastaDja
Дата 14.1.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kruger2 @  14.1.2011,  17:35 Найти цитируемый пост)
эм, а в си тоже самое можно?)

нужно нужно ещё) 


все что тебе нужно, это
Код

short x;
    double F = 0.0;
    for(x=xn; x<=xk; x+=step){
        std::cout<<"x="<<x;
        if((x+a)<0 && c==0){//при х + а < 0 и с = 0
            F=1.0/(double)(a*x) - b;
        }else{
            if((x+a)>0 && c!=0){//при х + a > 0 и с ≠ 0
                F=(x-a)/sin((double)x);
            }else{
                F = 10 * x / (c - 6);
            }
        }
        std::cout<<" F="<<F<<std::endl;
    }

замени  std::cout на Print
а std::cin на scan
и вот тебе С


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Kruger2
Дата 14.1.2011, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <stdio.h>
#include <math.h>

main ()
{
     double a, b, c;
     short xn, xk, step, sinx;
     
     printf("Enter xn < x < xk (xn) \n", xn);
     scanf("%u", &xn);
     
     printf("Enter xk: \n", xk);
     scanf("%u", &xk);
     
     printf("Enter step: \n");
     scanf("%u", &step);
     
     printf("Enter a: \n");
     scanf("%lf", &a);
     
     printf("Enter b: \n");
     scanf("%lf", &b);
     
     printf("Enter c: \n");
     scanf("%lf", &c);
     
     short x;
     double F= 0.0;
     
     for (x = xn; x <= xk; x += step){
         printf("x= \n");
         if ((x + a)< 0 && c == 0) {
                    F = 1.0/(double) (a*x) - b;
         }else {
               if ((x + a) > 0 && c != 0){
                      F = ((x - a) / sinx);
                      }else {
                            F = 10 * x / (c - 6);
                       }
               }
               
               printf("F= \n", &F);
         }
         
         
 system ("pause");    
 return 0;    
}     
     

     

Не выводит ответов:(

К тому же как пишу sin (x) выдает ошибку  smile 
PM MAIL   Вверх
Dov
Дата 14.1.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



А так тебя не устроит? 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 14.1.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Dov @  14.1.2011,  20:02 Найти цитируемый пост)
А так тебя не устроит?  

 
Цитата

 double f = -999;                         /* ошибка деления на ноль*/

а что ж не воспользоваться NaN`ом :
 
Цитата

 double f = .0/0;                         /* ошибка деления на ноль*/

остальной код не смотрел...


Это сообщение отредактировал(а) mes - 14.1.2011, 21:11


--------------------
PM MAIL WWW   Вверх
Dov
Дата 14.1.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(mes @  14.1.2011,  20:11 Найти цитируемый пост)
а что ж не воспользоваться NaN`ом :

не знал про такую возможность. теперь буду знать, спасибо.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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