Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
#1

Плавающая запятая - C++

12.02.2014, 23:15. Просмотров 615. Ответов 5
Метки нет (Все метки)

Добрый день, было дано задание перевести программу с Делфи(среда Лазарус) на С++.
До этого с Си языками вообще не встречался. После одного вечера программа заработала, но возникла одна проблема, в программе изменяется точность вычислений, и это у меня не заработало. Я Скинул код оригинала программы на паскале и на Си++, буду рад, если подскажите в чем дело. Заранее спасибо.
Pascal
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
const xn=-0.5;
      xk=0.3;
var dx:real;
 
var i,n:integer;
    t,x,eps,s:real;
begin
dx:=(xk-xn)/9;
x:=xn;
while x<=xk+dx/2 do
 begin
  eps:=1;
  for i:=1 to 6 do
   begin
    eps:=eps/10;
    n:=0;
s:=1;
t:=1;
while abs(t)>eps do
 begin
  n:=n+1;
  t:=-t*x;
  s:=s+t
 end;
    writeln('|',x:8:2,' |',eps:9:6,' |',s:7:4,' |',n:6,'  |');
   end;
  readln;
  x:=x+dx
 end;
readln
end.
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
34
35
36
37
38
39
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    
    int n, i;
    float dx,x, eps, s,t,xn,xk;
    
        cout << "Enter xn";
        cin >> xn;
        cout << "Enter xk";
        cin >> xk;
        dx = (xk - xn) / 9;
        x = xn;
        while (x <= xk + dx / 2) 
        {
            eps = 1;
            for (i = 1; i <= 6; i++)
            {
             eps = eps / 10;
             n = 0;
             s = 1;
             t = 1;
             while (abs(t) > eps) 
             {
                 n = n + 1;
                 t = -t*x;
                 s = s + t;
             }
             cout << "|" << x << "|" << eps << "|" << "|" << s << "|" << n << "|" << endl;
             x = x + dx;
            }
         
        }
//  return 0;
}
Добавлено через 42 секунды
Думаю, что ошибка где-то в 20-25 строке кода на си
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 23:15     Плавающая запятая
Посмотрите здесь:

Длинно-плавающая запятая - C++
Я хочу числовой тип с плавающей запятой и очень большим sizeof, стандартного такого нет: , а я хочу на много больше. Например, 1024 байта....

Дробные числа - плавающая и фиксированная точки - C++
Считал, что float - с фиксированной точкой, а double - с плавающей. То, что у float была точность для меня было доказательством, ведь, если...

Оператор запятая - C++
int I, j; j=10; i = (j++, j+100, 999+j); почему выведет 1010 а не 1110?

Оператор запятая - C++
почему тут выдает ошибку на endl cout &lt;&lt; 666,666 &lt;&lt; endl;

Запятая в операторе scanf - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;RUS&quot;); int s, a, b, c, d, e, f; printf(&quot;введите...

Особенонсти перегрузки оператора запятая - C++
Препод на защите прошлой лабы задал вопрос - чем отличается перегрузка оператора запятая от других... Перерыл кучу статей, пишут только,...

Оператор запятая в return и задача - C++
Всем ДВС! Разъясните пожалуйста, почему тимус принимает #include &lt;cstdio&gt; #include &lt;cstdlib&gt; const int MAXN = 1 &lt;&lt; 5; ...

знак для Float (точка и запятая) проблема - C++
в одной проге atof() и fprintf(%f, float_arg) используют точку, в другой запятую =\ обе проги компилю я, а надо чтоб они выбрали что-то...

Найти позицию (номер символа), в которой находится первая запятая - C++
Обработка строк. Задание 7.1. Составить программу, которая вводит строку символов, выполняет ее обработку, в соответствии с...

Вывести на экран слова перед которыми стоят запятая и пробел. - C++
Вывести на экран слова перед которыми стоят запятая и пробел. Не могу понять как ее реализовать чайниг в этом деле) Добавлено через 6...

Нюансы использования оператора запятая или что такое UB и с чем его едят - C++
Почему студия и ideone выдают разные значения для a и b? в студии выходит a = 10 , b = 10 в ideone a = 20, b =10 #include...

Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире - C++
Помогите написать пожалуйста программу: &quot;Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире.&quot; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
12.02.2014, 23:39     Плавающая запятая #2
Цитата Сообщение от Newchap Посмотреть сообщение
dx = (xk - xn) / 9;
* * * * x = xn;
* * * * while (x <= xk + dx / 2)
попробуй так
C++
1
2
3
dx = (xk - xn) / 9.0;
* * * * x = xn;
* * * * while (x <= xk + dx / 2.0)
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
13.02.2014, 09:32  [ТС]     Плавающая запятая #3
Amandosov, Внес это в свой код, но проблема не изменилась, программу также выдает одно значение Епс на одно значение аргумента. Все равно признателен за совет
SatanaXIII
Супер-модератор
Эксперт С++
5592 / 2626 / 240
Регистрация: 01.11.2011
Сообщений: 6,459
Завершенные тесты: 1
13.02.2014, 09:39     Плавающая запятая #4
Newchap, попробуйте в двадцать седьмой строке заменить abs на fabs - для работы с дробными числами.
C++
27
while (fabs(t) > eps)
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
13.02.2014, 09:51     Плавающая запятая #5
Когда я переводил свой код тоже нарвался на одну вещь: аналогом Delphi типа real в c++ будет double. Хотя может и проблема не в этом.. Что-то в алгоритме смущает..
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
13.02.2014, 09:57  [ТС]     Плавающая запятая #6
Пардон, один из операторов стоял в неправильном месте, ошибку исправил.
Извиняюсь за лишнюю тему

Добавлено через 5 минут
Вот правильный, вдруг нужен будет или что) Всем Спасибо)
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
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    
    int n, i;
    float dx,x, eps, s,t,xn,xk;
    
        cout << "Enter xn";
        cin >> xn;
        cout << "Enter xk";
        cin >> xk;
        dx = (xk - xn) / 9.0;
        x = xn;
        while (x <= xk + dx / 2.0) 
        {
            eps = 1.0;
            for (i = 1; i <= 6; i++)
            {
             eps = eps / 10.0;
             n = 0;
             s = 1;
             t = 1;
             while (abs(t) > eps) 
             {
                 n = n + 1;
                 t = -t*x;
                 s = s + t;
             }
             cout << "|" << x << "|" << eps << "|" << "|" << s << "|" << n << "|" << endl;
             
             
            }
            x = x + dx;
         
        }
//  return 0;
}
Yandex
Объявления
13.02.2014, 09:57     Плавающая запятая
Ответ Создать тему
Опции темы

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