Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
1

Составить программу табулирования функции

25.09.2011, 12:06. Просмотров 1286. Ответов 20
Метки нет (Все метки)

Задание
Составить программу табулирования функции

http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=\frac{ln(x+1)}{{x}^{2}-1}

на отрезке [0;1] с шагом 0.05. Предусмотреть блокировку от деления на 0. Результаты расчетов напечатать в виде «при х=… f(x)=… ».
Мой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
main()
{
    float x,y,num,denom;
    clrscr();
    for (x = 0 ; x<=1.05 ; x+=0.05)
    {
       num = log(x+1);
       denom = pow(x,2)-1;
       if (denom != 0)
       {
         y=num/denom;
         printf("At x=%.2f f(x)=%f \n",x,y);
       }
       else
       {printf("At x=%.2f there is division by zero\n",x);}
    }
    getch();
}
при х=1 ноль не получется
C
1
pow(x,2)-1
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 12:06
Ответы с готовыми решениями:

Составить программу табулирования функции
помогите составить программы табулирования функций на интервале с шагом табулирования h....

Составить программу табулирования функции
Составить программу табулирования функции f(x), где х изменяется с шагом h. Значение a вводить с...

Составить программу табулирования функции с заданным шагом
составить программу табулирования функции Y с шагом 0.5. Y=(x^2+ cos(x))/x на языке Си

Написать программу табулирования функции
Доброго времени суток, что-то у меня не компилируется программа, подскажите пожалуйста где ошибка,...

Разработать программу табулирования функции
Доброго времени суток! Помогите разобраться! есть задание: Разработать программу табулирования...

20
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 12:39 2
Цитата Сообщение от Athlon_33_88 Посмотреть сообщение
при х=1 ноль не получется
pow принимает и возвращает вещественные числа. То, что pow(x, 2) - 1 != 0 при x = 1, связано с погрешностью в машинном представлении чисел с плавающей точкой. Производи сравнение с точностью до некоторой эпсилон. Кстати, здесь использовать pow для возведения в квадрат - очень неэффективно. Вместо этого лучше писать "x * x"
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
25.09.2011, 12:42  [ТС] 3
а можно не большой примерчик?я не знаток си.
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
25.09.2011, 13:17 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define A 0
#define B 1
#define STEP .05
#define epsilon 1e-6
 
int main()
{
    double x, numerator, denominator;
 
    for(x = A; x < B + STEP; x += STEP)
    {
    numerator = log(x + 1);
    denominator = x * x - 1;
 
    if(fabs(denominator) < epsilon)
        printf("At x = %.2f there is division by zero\n", x);
    else
        printf("At x = %.2f y = %.2f\n", x, numerator / denominator);
    }
 
    exit(0);
}
1
25.09.2011, 13:17
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
13.10.2011, 22:08  [ТС] 5
Решил не флудить, напишу тут.
Хочу заполнить массив и вычислить его максимальный и минимальный элементы.
почему максимальный элемент = 37814120?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#define SIZE 20
 
main()
{
    int y[SIZE];
    int min,max,rnd,i;
    srand(time(NULL));
    for (i=0;i<SIZE;i++)
    {
        rnd = rand()%201 - 100;
        y[i]= rnd;
        printf("y[%d]= %d\n",i+1,y[i]);
    }
    max = y[0];min = y[0];
    for (i=1;i<=SIZE;i++)
    {
        if(y[i]<min)
        {min = y[i];}
        if(y[i]>max)
        {max = y[i];}
    }
    printf("Minumal: %d ; Maximum: %d",min,max);
    getch();
}
Снова погрешности?
0
aeshes
444 / 207 / 21
Регистрация: 07.10.2011
Сообщений: 462
13.10.2011, 22:21 6
вот тут
C++
1
for (i=1;i<=SIZE;i++)
надо i<SIZE;
при i=SIZE ты выходишь за границы массива и читаешь мусор из памяти
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 04:44 7
И соответственно, индексация массивов в С начинается с нуля, а не с единицы
0
amor1k
Студент
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
14.10.2011, 07:46 8
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#define SIZE 20
 
main()
{
        int y[SIZE];
        int min,max,rnd,i;
        srand(time(NULL));
        for (i=0;i<SIZE;i++)
        {
                y[i]= rand()%201 - 100;
                printf("y[%d]= %d\n",i+1,y[i]);
        }
        max = y[0];min = y[0];
        for (i=0;i<SIZE;i++)
        {
                if(y[i]<min)
                {min = y[i];}
                if(y[i]>max)
                {max = y[i];}
        }
        printf("Minimum: %d ; Maximum: %d",min,max);
        getch();
}
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 10:04  [ТС] 9
Каюсь,упустил из виду знак "=" ,считал с единицы потому, что y[0] условно считаю за максимальный и минимальный элементы.
Подскажите как из 2.675435 например сделать просто 2.67,можно ли это сделать как-нибудь с помощью "%.2f".
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 10:08 10
Цитата Сообщение от Athlon_33_88 Посмотреть сообщение
Подскажите как из 2.675435 например сделать просто 2.67,можно ли это сделать как-нибудь с помощью "%.2f".
ты в общем-то сам ответил на свой вопрос
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 10:13  [ТС] 11
C
1
2
x=2.675435;
x=("%.2f",x);
Примерно так,или компилятор выругается на меня?
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 10:17 12
Цитата Сообщение от Athlon_33_88 Посмотреть сообщение
Примерно так,или компилятор выругается на меня?
я имел в виду что-то типо такого:
C
1
2
3
double x = 2.675435;
/* ... */
printf("%.2f\n", x); /* вывод x на экран с точностью до двух знаков после десятичной точки */
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 10:20  [ТС] 13
с выводом я разобрался,а вот как отбросить все ненужное от числа кроме десятых и сотых частей?есть функции или надо продумывать высокоточные алгоритмы?т.е. сделать его 2.6700000
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 10:24 14
Athlon_33_88, а зачем, спрашивается? Я думаю, для формата, в котором в C хранятся числа с плавающей точкой, это сделать в общем случае невозможно
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 10:34  [ТС] 15
Думал избежать погрешностей таким образом.Можно ли сделать вывод русских символов в консольных приложениях си?пишу прграммы на C-Free 4.0
0
Nameless One
Эксперт С++
5802 / 3452 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 10:43 16
Athlon_33_88,
Цитата Сообщение от Athlon_33_88 Посмотреть сообщение
Можно ли сделать вывод русских символов в консольных приложениях си
зависит от ОС, локали, кодировки.
Можешь посмотреть здесь: Русские шрифты в консоли
0
aeshes
444 / 207 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 11:07 17
Цитата Сообщение от Athlon_33_88 Посмотреть сообщение
Думал избежать погрешностей таким образом.
поправьте меня, если ошибаюсь, но по-моему, отбрасывание значащих цифр числа ведет только к накоплению погрешности, а не избавлению от нее
0
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 13:09  [ТС] 18
Разделить каждый элемент массива на разность между компонентами, имеющими максимальное и минимальное значение. Отпечатать преобразованный массив y[20].
Выводит нолики .Делал уже и промежуточную переменную и пытался заполнить массив вещественных чисел, все равно везде нули.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
#define SIZE 20
 
main()
{
    int y[SIZE];
    int min,max,rnd,i,difference;
    srand(time(NULL));
    
    for (i=0;i<SIZE;i++)
    {
        rnd = rand()%201 - 100;
        y[i]= rnd;
    }
    max = y[0];min = y[0];
    for (i=1;i<SIZE;i++)
    {
        if(y[i]<min)
        {min = y[i];}
        if(y[i]>max)
        {max = y[i];}
    }
    difference = max-min;
    for (i=0;i<SIZE;i++)
    {
        printf("y[%d]= %d \t=> y[%d]= %f \n",i+1,y[i],i+1,y[i]/difference);
    }
    printf("Minumal: %d ; Maximum: %d ; Difference: %d",min,max,difference);
    getch();
}
0
Миниатюры
Составить программу табулирования функции  
aeshes
444 / 207 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 13:43 19
у тебя элементы массива и разница - целые числа, и деление выполняется целочисленно, т.е., если знаменатель больше числителя - будет 0.
Сделай массив y и difference типом double
1
Athlon_33_88
(x(x_(x_x(О_о)x_x)_x)x)
63 / 55 / 6
Регистрация: 04.09.2010
Сообщений: 301
14.10.2011, 15:53  [ТС] 20
Можно ли как-нибудь создать массив, размер которого задается пользователем?
Вот так компилятор ругается
C
1
2
3
4
int SIZE;
printf("Please enter size: ");
scanf("%d",&SIZE);
int y[SIZE];
Так приложение виснет.
C
1
2
3
4
int SIZE;
int y[SIZE];
printf("Please enter size: ");
scanf("%d",&SIZE);
0
14.10.2011, 15:53
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 15:53

Проверьте программу табулирования функции
Табулирование функции (sin(sqrt(3.2+x)))/(a+cos(x+pi/7)) при а=2,4 10&lt;=x&lt;=50, dx=10. значения...

Написать программу табулирования сложной функции
Как посчитать &quot;а&quot;? Помогите пожалуйста #include&lt;stdio.h&gt; #include&lt;math.h&gt; int main(void) ...

Написать программу табулирования сложной функции
Помогите плиз(( Функция дана во вложении. правила форума


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.