0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 35
1

Функция abs и как обойтись без нее

08.10.2014, 16:02. Показов 9217. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна помощь. При написании кода столкнулся с некой проблемой, что при использовании функции abs работает все отлично, но мне ее использовать запрещено ( преподаватель запретил использовать функции в коде), я пытался заменить его с помощью оператора if , но тогда не верно работает код.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double a1 = 1;
    double a2 = 2;
    double a3;
    double E;
    cin >> E;
    int k = 3;
    double y;
    a3 = ((a1 + 2 * a2) / 3);
    y = (a3 - a2);
    while (y >= E)
    {
        if (y < 0)
        y = -y;
        k++;
        a1 = a2;
        a2 = a3;
        a3 = 0;
        a3 = ((a1 + 2 * a2) / 3);
    }
    cout << k;
    system("pause");
    return 0;
}
Пробывал оператор if вставлять не в цикл все равно вывод значение K=3;
Вот с использование функции abs:
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double a1 = 1;
    double a2 = 2;
    double a3;
    double E;
    cin >> E;
    int k = 3;
    a3 = ((a1 + 2 * a2) / 3);
    while (abs(a3 - a2) >= E)
    {
        k++;
        a1 = a2;
        a2 = a3;
        a3 = 0;
        a3 = ((a1 + 2 * a2) / 3);
    }
    cout << k;
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2014, 16:02
Ответы с готовыми решениями:

Имеет ли значение функция eof, или можно обойтись без нее?
Никогда не использовала eof ранее и считаю, что при решении некоторых задач с файлами можно...

Как максимально просто обойтись без delay? Не вовремя срабатывает одна функция
Приветствую всех! Кратко опишу задачу, а затем проблему, которая возникает при попытке её...

Как обойтись без x
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на...

Как обойтись без x
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на...

17
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
08.10.2014, 16:10 2
ты бы всю задача написал бы
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2014, 16:11 3
Если так:
C++
1
2
3
4
5
    y = (a3 - a2);
    if (y < 0)
        y = -y;
    while (y >= E)
    {
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:15 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
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
 
int main()
{
    double a1 = 1;
    double a2 = 2;
    double a3;
    double E;
    cin >> E;
    int k = 3;
    a3 = ((a1 + 2 * a2) / 3);
    double mod = a3 - a2;
    if (mod < 0)
    {
        mod = -mod;
    }
    while (mod >= E)
    {
        k++;
        a1 = a2;
        a2 = a3;
        a3 = 0;
        a3 = ((a1 + 2 * a2) / 3);
        mod = a3 - a2;
        if (mod < 0)
        {
            mod = -mod;
        }
    }
    cout << k;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 35
08.10.2014, 16:16  [ТС] 5
Цитата Сообщение от alsav22 Посмотреть сообщение
Если так:
пробовал, так вообще не выводит k;
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:30 6
по-моему, что с модулем, что без него, прога не работает
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2014, 16:34 7
Цитата Сообщение от ProgramsUser Посмотреть сообщение
пробовал, так вообще не выводит k;
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
#include <iostream>
using namespace std;
 
int main()
{
    double a1 = 1;
    double a2 = 2;
    double a3;
    double E;
    cin >> E;
    int k = 3;
    a3 = ((a1 + 2 * a2) / 3);
    double y = (a3 - a2);
    if (y < 0)
        y = -y;
    while (y >= E)
    {
    //while (abs(a3 - a2) >= E)
    //{
        k++;
        a1 = a2;
        a2 = a3;
        a3 = 0;
        a3 = ((a1 + 2 * a2) / 3);
    }
    cout << k;
    system("pause");
    return 0;
}
Миниатюры
Функция abs и как обойтись без нее  
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:36 8
k все время равно 3ем, явно сам алгоритм хромает, что вообще нужно сделать?
0
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
08.10.2014, 16:39 9
Пиши задачу
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2014, 16:40 10
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
явно сам алгоритм хромает, что вообще нужно сделать?
При чём здесь тогда вопрос темы? Как заменить abs() я показал? Что не устраивает?
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:40 11
alsav22, а в цикле присвоить модулю новое значение забыли, цикл бесконечный
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2014, 16:42 12
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
а в цикле присвоить модулю новое значение забыли
Я забыл? Оно мне надо? Это копипаст твоего цикла из первого поста.
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:45 13
alsav22, забавный, запусти код который написал и посмотри что он не работает
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 35
08.10.2014, 16:46  [ТС] 14
Цитата Сообщение от karandashbest Посмотреть сообщение
Пиши задачу
Функция abs и как обойтись без нее
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2014, 16:47 15
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
запусти код который написал
Я написал? Я там только abs() убрал (так как вопрос темы: как сделать без abs()). Запусти свой код с abs(), который, якобы:
Цитата Сообщение от ProgramsUser Посмотреть сообщение
при использовании функции abs работает все отлично
, и увидишь, что он точно так же криво работает.
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 35
08.10.2014, 16:48  [ТС] 16
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
k все время равно 3ем, явно сам алгоритм хромает, что вообще нужно сделать?
там просто должны быть маленькие значения E, я скинул задачу, посмотри.
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
08.10.2014, 16:50 17
ProgramsUser, ну так я скинул решение в 4ом посте , пробуй , должно работать

Добавлено через 30 секунд
alsav22, ты что-то путаешь , я не топикстартер
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 35
08.10.2014, 16:51  [ТС] 18
Цитата Сообщение от Nevermind_qqq Посмотреть сообщение
ну так я скинул решение в 4ом посте , пробуй , должно работать
да-да, я попробовал, все работает, спасибо)
0
08.10.2014, 16:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2014, 16:51
Помогаю со студенческими работами здесь

не как без вас не обойтись
1.Нужно выразить из формулы s=v*t-(at*t)/2 переменную. t 2.Как преобразовать вещественное число в...

Как обойтись без списка?
Есть список Tick в который несколько раз в секунду добавляются новые объекты (Time, Volume)....

Как обойтись без капчи
Уважаемые господа! Подскажите, кто знает, какие элементы кода можно использовать, чтобы обойтись...

Как обойтись без сокетов?
Здравствуйте! Стоит следующая задача: есть сервер с виртуальным хостингом, есть от 2 до 5...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru