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

Поиск:

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


Шустрый
*


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

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



dav

ну вроде работает, но я попытался сделать, при вводе значений с клавиатуры и выдаёт бесконечный цикл дивайдед бай зиро)


Код

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

double func(double x, double a, double b, double c)
{
   double f = -999;                         

   if((x + a) < 0 && c == 0 && (a * x) != 0 
      f = 1. / (a * x) - b;
   else if((x + a) > 0 && c != 0 && x != 0  
      f = (x - a) / sin(x);
   else if(c != 6.)                        
      f = 10. * x / (c - 6.);

   return f;
}

int main()
{
    double f, x, xn, xk, dx, a, b, c;
    printf("Enter xn < x < xk (xn) \n", xn);
     scanf("%lf", &xn);
     
     printf("Enter xk: \n", xk);
     scanf("%lf", &xk);
     
     printf("Enter step: \n");
     scanf("%lf", &dx);
     
     printf("Enter a: \n");
     scanf("%lf", &a);
     
     printf("Enter b: \n");
     scanf("%lf", &b);
     
     printf("Enter c: \n");
     scanf("%lf", &c);
   
    puts("Argument\t\tValue");
    x = xn;

repeat:
    printf("%6.2lf\t\t", x);
    f = func(x, a, b, c);
    f == -999 ? puts("   divide by zero") : printf("%15lf\n", f);

    x += dx;
    if(x <= xk)
       goto repeat;
   
   system ("pause");
    return 0;
}


Как организовать ввод с клавы?

Тут получается сначала создаётся прототип функции и потом она вызывается, в зависимости от переменных?

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


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


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

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



Цитата(Kruger2 @  14.1.2011,  20:38 Найти цитируемый пост)
ну вроде работает, но я попытался сделать, при вводе значений с клавиатуры и выдаёт бесконечный цикл дивайдед бай зиро)

не знаю, у меня нормально работает. 
Цитата(Kruger2 @  14.1.2011,  20:38 Найти цитируемый пост)
Как организовать ввод с клавы?

так как ты его и сделал.
Цитата(Kruger2 @  14.1.2011,  20:38 Найти цитируемый пост)
Тут получается сначала создаётся прототип функции и потом она вызывается, в зависимости от переменных?

что-то в этом роде.
Цитата(Kruger2 @  14.1.2011,  20:38 Найти цитируемый пост)
Через for как то красивее было

а это кто писал? не ты ли?  smile 
Цитата(Kruger2 @  14.1.2011,  12:58 Найти цитируемый пост)
По поводу goto, я везде читал, что его нельзя юзать, но препод дал задачку именно на его примере и это какбэ требование




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


Шустрый
*


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

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



код выше, ввожу теже данные, что были у тебя в проге и получаю
xn = -50., xk = 50., dx = 10., a = 505., b = -10., c = 6.;

F=
X= 

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


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


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

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



Цитата(Kruger2 @  14.1.2011,  22:03 Найти цитируемый пост)
код выше, ввожу теже данные, что были у тебя в проге и получаю

а вот я получаю:
Цитата
Enter xn
-50
Enter xk:
50
Enter step:
10
Enter a:
505
Enter b:
-10
Enter c:
6
Argument                Value
-50.00             -2115.294176
-40.00               731.432524
-30.00              -541.480644
-20.00               575.061867
-10.00              -946.654440
0.00             divide by zero
10.00               909.891161
20.00              -531.247629
30.00               480.753843
40.00              -624.066282
50.00              1734.160090




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


Шустрый
*


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

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



пилять копи паст моей проги?)
может мой компилятор на си чего то не воспринимает?)

Добавлено через 11 минут и 22 секунды
получилось, перезашёл, пересохранил и вышло, спасибо)

ещё вариантик через for помоги допилить. где я там ошибся?

Код

#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;    
}     

  

П.С.

Кошелк вмз в студию) ну или в личку smile 
PM MAIL   Вверх
Dov
Дата 14.1.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Kruger2 @  14.1.2011,  22:36 Найти цитируемый пост)
может мой компилятор на си чего то не воспринимает?)

вполне возможно... 
может прокладку?



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


Шустрый
*


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

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



см предыдущее сообщение)
PM MAIL   Вверх
миг
Дата 15.1.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Фантом @ 14.1.2011,  16:57)

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

У нас в институте(МАМИ) был препод хорошо знал высшую математику. и вот заставили его вести фортран.. т.к. язык программирования он знал плохо, то очень часто ходил и спрашивал других преподов, что значит тот или иной оператор.. Стоило написать программку которая выходит за круг понятий этого препода, то он сразу терялся..  Затем он проверял выходной результат и если результат сходиться, то засчитывал работу. Некоторые студенты его даже обманывали с выходными данными, а он не замечал..
--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
Kruger2
Дата 15.1.2011, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

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

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

}     
     

     

объясните кто нить, почему мне тут выдаёт просто 
F=
F=
F=

 и т.д., 2 стены уже сломал)

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


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


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

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



Цитата(Kruger2 @  15.1.2011,  22:13 Найти цитируемый пост)
объясните кто нить, почему мне тут выдаёт просто 
F=
F=
F=

 и т.д., 2 стены уже сломал)

Спокойнее надо быть.  smile Посмотрите на строку из Вашего кода:
Код

printf(" F= \n", &F);

Первый параметр printf - это формат вывода. В формате могут находиться поля для подстановки значений, а также обычные символы (которые в таком виде и будут выведены). Но в Вашей форматной строчки никаких полей для подстановки значений нет, поэтому все, что печатается - обычные символы из форматной строки.

Кроме этого, Вам явно надо печатать значение переменной F, а не значение указателя на нее, так ведь? Поэтому & там совершенно лишнее. Итого нормальная строка должна выглядеть так:
Код

printf(" F= %f\n",F);


Кстати, странно, что она Вам вообще хоть что-то печатает - в этом тексте громадное количество синтаксических ошибок. Первый else не относится к if (поскольку тот зарыт внутри цикла), перед вторым не завершена ; основная часть if , тип возвращаемого функцией main значения не определен (это для С89, конечно, не фатально, но нехорошо).

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


Шустрый
*


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

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



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

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

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

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

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


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

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


 




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


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

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