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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача, Циклы. 
:(
    Опции темы
VIvan
Дата 19.4.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Даны действительные числа x, e (x<>0, e>0). Вычислить с точностью e:

"Бесконечность"     (-1) в стпени k
"Знак суммы" =     ------------------------ *(x/2) в степени 2*k+1
k=0                           (k!)*(k+1)!

Код

#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
int k=1,col=0;
float x,E;
double ch=1,zn=1,p,sum;
clrscr();
printf("Введите значение x: ");
scanf("%f", &x);
while (x==0)
    {
    clrscr();
    printf ("ОШИБКА. X не может быть равен нулю\n");
    printf("Введите значение x: ");
    scanf("%f", &x);
    }
printf ("Введите точность Е: ");
scanf ("%f",&E);
while (E<=0)
    {
    clrscr();
    printf ("ОШИБКА. E должно быть больше нуля\n",x);
    printf ("Введите точность Е: ");
    scanf ("%f",&E);
    }
clrscr();
while ((ch/zn)>=E)
      {
      sum+=ch/zn;
      ++col;
      p=ch/zn;
      ch*=pow(-1,k)*pow(x/2,2*k+1);
      zn*=k*(k+1);
      }
printf ("-------------------------------------------------------------------------\n");
printf ("|Знач. x | Точность | Сумма  | Кол-во слаг. | Послед. слаг. | Неучт.слаг| \n");
printf ("-------------------------------------------------------------------------\n");
printf ("|%2.1f     | %2.1f      |  %2.2f  |  %d           | %2.3f         |  %2.3f   |\n",x,E,sum,col,p,ch/zn);
printf ("-------------------------------------------------------------------------\n");
getch();
}


Результат какой-то странный всегда получается. Если не трудно укажите на ошибку. Если таковая имеется. Буду очень признателен за помощь.   

Это сообщение отредактировал(а) VIvan - 19.4.2006, 16:28
PM MAIL   Вверх
CPlusPlusFAN
Дата 19.4.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VIvan @  19.4.2006,  16:21 Найти цитируемый пост)
Результат какой-то странный всегда получается.

Что значит "странный"? 
PM MAIL ICQ Jabber   Вверх
VIvan
Дата 19.4.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При любых вводимых результатах сумма либо 0 либо 1, а неучтенноне слагаемое улетает далеко в минус. Фактически вопрос в том, правильно ли описано выражение 
"Бесконечность"     (-1) в стпени k
"Знак суммы" =     ------------------------ *(x/2) в степени 2*k+1
k=0                           (k!)*(k+1)!
в программе 
Код

sum+=ch/zn;
      ++col;
      p=ch/zn;
      ch*=pow(-1,k)*pow(x/2,2*k+1);
      zn*=k*(k+1);
 
вот этот участок кода (считаем сумму, количество, последнее учитываемое слагаемое...)  
PM MAIL   Вверх
likehood
Дата 19.4.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Так у тебя же k не меняется, добавь k++.
Кстати, знаменатель лучше хранить в int64 а то с факториалом шутки плохи.
Да, и почему ты суммируешь с единицы а не с нуля. 
PM MAIL   Вверх
VIvan
Дата 19.4.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добавил k++, вроде нормально, правда неучтенное слагаемое всеравно в минусе, что как-то странно. И еще вопрос, что за тип данных int64, он в чистом С есть? k оставил равное единице, при 0, опять не считает. 
PM MAIL   Вверх
MAKCim
Дата 19.4.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

он в чистом С есть?

нет, зато есть long
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


666
**


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

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



Первое слагаемое (при к==0) можно учесть явно: оно должно быть равно х/2.

Цитата(VIvan @  19.4.2006,  17:35 Найти цитируемый пост)
что за тип данных int64

Целочисленный 64-разрядный тип.

Цитата(VIvan @  19.4.2006,  17:35 Найти цитируемый пост)
он в чистом С есть?

Зависит от твоего компилятора. Если пишешь на чем то типа Borland C++ 3.1, то там его нет, нужен компилер поновее. 
 
PM MAIL   Вверх
VIvan
Дата 19.4.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В принципе если k=0, должен нормально считать. Но работает только при k=1 
PM MAIL   Вверх
CPlusPlusFAN
Дата 20.4.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет инициализации переменной sum 
PM MAIL ICQ Jabber   Вверх
VIvan
Дата 22.4.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



C sum исправился, спасибо.
Еще одни вопросик остался, как записать вот это: ch*=pow(-1,k)*pow(x/2,2*k+1); без применения функции pow. Я пробовал ввести еще одну переменную, увеличивать ее в цикле и на нее домножать, но что-то никак. Подскажите пожалуйста как решить эту задачу. 
PM MAIL   Вверх
Lamak
Дата 23.4.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вобще можно к примеру так
P=pow(a,b); заменить на

P=a;
for(int i=1;i<b;i++)
  P*=a;

Но,зачем тебе это надо?Ведь первый вариант красивее и лучше.  
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
CPlusPlusFAN
Дата 23.4.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VIvan @  22.4.2006,  10:04 Найти цитируемый пост)
без применения функции pow.

А вот тут:

pow(-1,k)

вообще pow не нужно. Можно так:

(k&1)?1:-1

А вот тут, судя по твоему примеру, можно сделать так:

завести переменную со значением x/2, а затем на каждой итерации умножать её на (x*x)/4, чтобы каждый раз не высчитывать.

Добавлено @ 02:30 
Вот код:
Код

#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
int k=0;
float x,E;
double ch,zn=1,p,sum=0,temp,value;
clrscr();
printf("Введите значение x: ");
scanf("%f", &x);
while (x==0)
    {
    clrscr();
    printf ("ОШИБКА. X не может быть равен нулю\n");
    printf("Введите значение x: ");
    scanf("%f", &x);
    }
printf ("Введите точность Е: ");
scanf ("%f",&E);
while (E<=0)
    {
    clrscr();
    printf ("ОШИБКА. E должно быть больше нуля\n",x);
    printf ("Введите точность Е: ");
    scanf ("%f",&E);
    }
ch=x/2;
value=ch/zn;
clrscr();
while (value>=E)
      {
      sum+=value;
      p=value;
      k++;
      ch*=(x*x)/4;
      ch=-ch;
      zn*=k*(k+1);
      value=ch/zn;
      }
printf ("-------------------------------------------------------------------------\n");
printf ("|Знач. x | Точность | Сумма  | Кол-во слаг. | Послед. слаг. | Неучт.слаг| \n");
printf ("-------------------------------------------------------------------------\n");
printf ("|%2.1f     | %2.1f      |  %2.2f  |  %d           | %2.3f         |  %2.3f   |\n",x,E,sum,k,p,value);
printf ("-------------------------------------------------------------------------\n");
getch();
}

 
PM MAIL ICQ Jabber   Вверх
VIvan
Дата 23.4.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



За помощь ОГРОМНОЕ спасибо...
Цитата

Но,зачем тебе это надо?Ведь первый вариант красивее и лучше.

Надо не мне, а преподше-маньячке  smile  
PM MAIL   Вверх
CPlusPlusFAN
Дата 24.4.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(VIvan @  23.4.2006,  08:44 Найти цитируемый пост)
преподше-маньячке

Как мне это знакомо... 
PM MAIL ICQ Jabber   Вверх
AzanaptA
  Дата 11.9.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



либо я  - глупая, либо код нерабочий.  smile 
использую VC 6.0
выдаёт ошибку - fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.
помогите пожалуйста, я только учусь! smile 

Это сообщение отредактировал(а) AzanaptA - 11.9.2006, 21:50
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.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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