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

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

Войти
Регистрация
Восстановить пароль
 
 
rep plz
Заблокирован
#1

Можно ли написать более оптимальный код, используя цикл while? - C++

27.07.2015, 23:16. Просмотров 649. Ответов 29
Метки нет (Все метки)

собственно сабж.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int x, y, s, step = 1;
 
    cout << "Vvedite x" << endl;
    cin >> x;
    cout << "Vvedite y" << endl;
    cin >> y;
 
    if (y == 0)
    {
        cout << "S ravno 0" << endl;
    }
 
 
    if (y >= 1)
    {
        s = x;
        while (step < y )
        {
        s *= x;
        step ++;
        }
    cout << "x v stepeni y = " << s;
    }
 
    return 0;
}
если есть более простые варианты, хотелось бы их увидеть
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2015, 23:16     Можно ли написать более оптимальный код, используя цикл while?
Посмотрите здесь:

как можно более просто написать эту программку(более понятным языком для начинающего) C++
C++ Какой вариант более оптимальный?
Написать, используя цикл for, ввод с клавиатуры 10 чисел C++
Написать код для флага РФ, используя только атрибуты C++
Как можно записать код в более компактном виде? C++
Можно ли инициализировать динамический массив не используя цикл? C++
Можно ли написать этот код более компактно? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
27.07.2015, 23:33     Можно ли написать более оптимальный код, используя цикл while? #2
rep plz, хотелось бы увидеть постановку задачи. Впрочем, по приведенному коду она легко восстанавливается. Надо возвести x в степень y. Так?
У вас ошибочка. По всем законам математики x0 = 1
А код может выглядеть так.
C++
1
for(s=1, step=0; step<y; step++) s *= x;
Это вместо строк 14-27

Добавлено через 4 минуты
Если надо непременно использовать while, а не for, следует заметить, что любой for-цикл можно преобразовать в while-цикл (и наоборот). Просто в данном случае добавится несколько строчек.
rep plz
Заблокирован
27.07.2015, 23:33  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #3
Цитата Сообщение от Байт Посмотреть сообщение
rep plz, хотелось бы увидеть постановку задачи. Впрочем, по приведенному коду она легко восстанавливается. Надо возвести x в степень y. Так?
У вас ошибочка. По всем законам математики x0 = 1
А код может выглядеть так.
Код C++Выделить код
1
for(s=1, step=0; step<y; step++) s *= x;
Это вместо строк 14-27
ну ладно, подзабыл математику
а цикл for использовать нельзя. обязательно while
Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
27.07.2015, 23:33     Можно ли написать более оптимальный код, используя цикл while? #4
Если надо непременно использовать while, а не for, следует заметить, что любой for-цикл можно преобразовать в while-цикл (и наоборот). Просто в данном случае добавится несколько строчек.
rep plz
Заблокирован
27.07.2015, 23:38  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #5
Цитата Сообщение от Байт Посмотреть сообщение
Если надо непременно использовать while, а не for, следует заметить, что любой for-цикл можно преобразовать в while-цикл (и наоборот). Просто в данном случае добавится несколько строчек.
т.е. ответ на мой вопрос - можно?
Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
27.07.2015, 23:40     Можно ли написать более оптимальный код, используя цикл while? #6
Цитата Сообщение от rep plz Посмотреть сообщение
подзабыл математику
Для программиста это совершенно не допустимо.
Цитата Сообщение от rep plz Посмотреть сообщение
а цикл for использовать нельзя. обязательно while
C++
1
2
3
4
5
6
s=1;
step = 0;
while(step < y) {
  s *= x;
  step++;
}
Рекомендую в качестве полезного упражнения на досуге преобразовать несколько for-циклов в while (и наоборот)
Уверяю вас, потраченное время в дальнейшем окупится с лихвой.
rep plz
Заблокирован
27.07.2015, 23:49  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #7
Цитата Сообщение от Байт Посмотреть сообщение
Рекомендую в качестве полезного упражнения на досуге преобразовать несколько for-циклов в while (и наоборот)
Уверяю вас, потраченное время в дальнейшем окупится с лихвой.
спасибо. обязательно попробую. пока подумаю почему s = 1
_Ivana
2824 / 1649 / 142
Регистрация: 01.03.2013
Сообщений: 4,711
Записей в блоге: 2
27.07.2015, 23:57     Можно ли написать более оптимальный код, используя цикл while? #8
Цитата Сообщение от rep plz Посмотреть сообщение
пока подумаю почему s = 1
Потому что нейтральный элемент требуемого моноида, естественно
rep plz
Заблокирован
28.07.2015, 00:16  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #9
Цитата Сообщение от _Ivana Посмотреть сообщение
Потому что нейтральный элемент требуемого моноида, естественно
так бы сразу и сказали что моноида требует. это многое объясняет
_Ivana
2824 / 1649 / 142
Регистрация: 01.03.2013
Сообщений: 4,711
Записей в блоге: 2
28.07.2015, 00:24     Можно ли написать более оптимальный код, используя цикл while? #10
Если бы уважаемый Байт вам сказал такое сразу, это могло бы вас смутить, поэтому он начал издалека. Но как только вы изъявили желание "подумать, почему" (С) - пришло время сказать правду
rep plz
Заблокирован
28.07.2015, 00:42  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #11
Цитата Сообщение от _Ivana Посмотреть сообщение
Если бы уважаемый Байт вам сказал такое сразу, это могло бы вас смутить, поэтому он начал издалека. Но как только вы изъявили желание "подумать, почему" (С) - пришло время сказать правду
да я бы и сам догадался не хотел просто лишать смысла ваш уважаемый пост под двусмысленным номером 8

Добавлено через 11 минут
Цитата Сообщение от Байт Посмотреть сообщение
1
for(s=1, step=0; step<y; step++) s *= x;
в этом случае приходится объявлять s дважды. в условии цикла и в майне
Kerry_Jr
Модератор
Эксперт PHP
2129 / 1925 / 669
Регистрация: 14.05.2014
Сообщений: 5,635
Записей в блоге: 1
Завершенные тесты: 5
28.07.2015, 00:43     Можно ли написать более оптимальный код, используя цикл while? #12
Цитата Сообщение от rep plz Посмотреть сообщение
объявлять s дважды
единожды в мэйне перед циклом.
Renji
1753 / 1180 / 274
Регистрация: 05.06.2014
Сообщений: 3,398
28.07.2015, 05:38     Можно ли написать более оптимальный код, используя цикл while? #13
Ну, если гоняться именно за оптимальностью (а не простотой):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<cmath>
using namespace std;
 
int main()
{
    double x;//что возводится в степень
    int n;//в какую степень
    cin>>x>>n;
    double res=1,exp=x;
    for(int i=1;i<=n;i<<=1,exp*=exp)
        if(n&i)
            res*=exp;
    cout<<res<<" "<<pow(x,n)<<endl;
    return 0;
}
rep plz
Заблокирован
28.07.2015, 07:21  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #14
Цитата Сообщение от Renji Посмотреть сообщение
Ну, если гоняться именно за оптимальностью (а не простотой):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
* * double x;//что возводится в степень
* * int n;//в какую степень
* * cin>>x>>n;
* * double res=1,exp=x;
* * for(int i=1;i<=n;i<<=1,exp*=exp)
* * * * if(n&i)
* * * * * * res*=exp;
* * cout<<res<<" "<<pow(x,n)<<endl;
* * return 0;
}
стоп. а где цикл while?

Добавлено через 1 минуту
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
единожды в мэйне перед циклом.
и действительно
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.07.2015, 07:22     Можно ли написать более оптимальный код, используя цикл while? #15
Цитата Сообщение от rep plz Посмотреть сообщение
s = x; while (step < y ) { s *= x; step ++; }
Именно с вайлом лучше уже не сделаешь, потому что здесь лучше подойдёт for.
rep plz
Заблокирован
28.07.2015, 07:25  [ТС]     Можно ли написать более оптимальный код, используя цикл while? #16
Цитата Сообщение от taras atavin Посмотреть сообщение
Именно с вайлом лучше уже не сделаешь, потому что здесь лучше подойдёт for
это самые приятные слова, которые мне говорили за последние 15 минут
Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
28.07.2015, 22:56     Можно ли написать более оптимальный код, используя цикл while? #17

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Потому что нейтральный элемент требуемого моноида
До чего приятно услышать умные слова! Я, правда, грешным делом, считал множество положительных целых чисел полугруппой с единицей по умножению, но ни дела, ни удовольствия, это не меняет

Цитата Сообщение от Renji Посмотреть сообщение
если гоняться именно за оптимальностью

Однако, имхо, можно и еще оптимальнее, воспользовавшись чем-то вроде дихотомической рекурсии. Соответствующие коды приводились уже на форуме неоднократно, в том числе и вашим покорным слугой.
_Ivana
28.07.2015, 23:00
  #18

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Я, правда, грешным делом, считал множество положительных целых чисел полугруппой с единицей по умножению
Вы просто используете другие слова
https://ru.wikipedia.org/wiki/%D0%9F...BF%D0%BF%D0%B0
https://ru.wikipedia.org/wiki/%D0%9C...BE%D0%B8%D0%B4

Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
28.07.2015, 23:03     Можно ли написать более оптимальный код, используя цикл while? #19
А если кому рекурсия не по вкусу, то опять же любой рекурсивный алгоритм можно реализовать в виде итерационного и наоборот. Правда, это упражнение уже посложнее чем for - while. И, конечно, интереснее.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Вы просто используете другие слова
Слов много, истина - одна. Не правда ли?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 23:09     Можно ли написать более оптимальный код, используя цикл while?
Еще ссылки по теме:

Можно ли написать более оптимальный или простой код, используя цикл for? C++
C++ Написать программу обмена каждых двух соседних значений в векторе, используя цикл
Написать игру "Угадай число", используя цикл while C++
C++ Найти более оптимальный способ решения задачи
Можно ли сделать бесконечный цикл с while, используя тип bool? C++

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

Или воспользуйтесь поиском по форуму:
_Ivana
28.07.2015, 23:09     Можно ли написать более оптимальный код, используя цикл while?
  #20

Не по теме:

Байт, правда. Зря вы от хаскеля отвернулись - там подобная красота на каждом шагу, начиная с библиотечных абстракций Например, произведение элементов коллекции вычисляется через свертку по вышеупомянутому моноиду

Yandex
Объявления
28.07.2015, 23:09     Можно ли написать более оптимальный код, используя цикл while?
Ответ Создать тему
Опции темы

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