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

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

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

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

27.07.2015, 23:16. Просмотров 687. Ответов 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++):

Можно ли написать более оптимальный или простой код, используя цикл for? - C++
собственно сабж. #include &lt;iostream&gt; using namespace std; int main() { int sum, count, ost; for (count = 0;...

Можно ли написать этот код более компактно? - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; void main() { int x, y; cout &lt;&lt; &quot;input x = &quot;; cin &gt;&gt; x; cout...

как можно более просто написать эту программку(более понятным языком для начинающего) - C++
7. Установить, четным или нечетным является число цифр в записи данного натурального числа. Если число цифр нечетно, вывести среднюю цифру....

Изменить код, используя цикл - C++
Помогите разобраться с циклом, Есть код, его надо изменить под циклический, как сделать х3, помогите пожалуйста. #include &quot;stdafx.h&quot; ...

Можно ли инициализировать динамический массив не используя цикл? - C++
Когда создавали статический массив, можно было сделать так: int array={1,5,14,23,32,45,67}; Можно ли такое же сделать с динамическим...

Можно ли сделать бесконечный цикл с while, используя тип bool? - C++
... bool f; f=false; while(f=false) { ... ... ... if(....)//какое-то условие f=true;//цикл прерывается

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
15984 / 10252 / 1536
Регистрация: 24.12.2010
Сообщений: 19,336
27.07.2015, 23:33 #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  [ТС] #3
Цитата Сообщение от Байт Посмотреть сообщение
rep plz, хотелось бы увидеть постановку задачи. Впрочем, по приведенному коду она легко восстанавливается. Надо возвести x в степень y. Так?
У вас ошибочка. По всем законам математики x0 = 1
А код может выглядеть так.
Код C++Выделить код
1
for(s=1, step=0; step<y; step++) s *= x;
Это вместо строк 14-27
ну ладно, подзабыл математику
а цикл for использовать нельзя. обязательно while
Байт
Эксперт C
15984 / 10252 / 1536
Регистрация: 24.12.2010
Сообщений: 19,336
27.07.2015, 23:33 #4
Если надо непременно использовать while, а не for, следует заметить, что любой for-цикл можно преобразовать в while-цикл (и наоборот). Просто в данном случае добавится несколько строчек.
rep plz
Заблокирован
27.07.2015, 23:38  [ТС] #5
Цитата Сообщение от Байт Посмотреть сообщение
Если надо непременно использовать while, а не for, следует заметить, что любой for-цикл можно преобразовать в while-цикл (и наоборот). Просто в данном случае добавится несколько строчек.
т.е. ответ на мой вопрос - можно?
Байт
Эксперт C
15984 / 10252 / 1536
Регистрация: 24.12.2010
Сообщений: 19,336
27.07.2015, 23:40 #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  [ТС] #7
Цитата Сообщение от Байт Посмотреть сообщение
Рекомендую в качестве полезного упражнения на досуге преобразовать несколько for-циклов в while (и наоборот)
Уверяю вас, потраченное время в дальнейшем окупится с лихвой.
спасибо. обязательно попробую. пока подумаю почему s = 1
_Ivana
3057 / 1744 / 151
Регистрация: 01.03.2013
Сообщений: 4,925
Записей в блоге: 2
27.07.2015, 23:57 #8
Цитата Сообщение от rep plz Посмотреть сообщение
пока подумаю почему s = 1
Потому что нейтральный элемент требуемого моноида, естественно
rep plz
Заблокирован
28.07.2015, 00:16  [ТС] #9
Цитата Сообщение от _Ivana Посмотреть сообщение
Потому что нейтральный элемент требуемого моноида, естественно
так бы сразу и сказали что моноида требует. это многое объясняет
_Ivana
3057 / 1744 / 151
Регистрация: 01.03.2013
Сообщений: 4,925
Записей в блоге: 2
28.07.2015, 00:24 #10
Если бы уважаемый Байт вам сказал такое сразу, это могло бы вас смутить, поэтому он начал издалека. Но как только вы изъявили желание "подумать, почему" (С) - пришло время сказать правду
rep plz
Заблокирован
28.07.2015, 00:42  [ТС] #11
Цитата Сообщение от _Ivana Посмотреть сообщение
Если бы уважаемый Байт вам сказал такое сразу, это могло бы вас смутить, поэтому он начал издалека. Но как только вы изъявили желание "подумать, почему" (С) - пришло время сказать правду
да я бы и сам догадался не хотел просто лишать смысла ваш уважаемый пост под двусмысленным номером 8

Добавлено через 11 минут
Цитата Сообщение от Байт Посмотреть сообщение
1
for(s=1, step=0; step<y; step++) s *= x;
в этом случае приходится объявлять s дважды. в условии цикла и в майне
Kerry_Jr
Модератор
Эксперт PHP
2185 / 1981 / 692
Регистрация: 14.05.2014
Сообщений: 5,791
Записей в блоге: 1
Завершенные тесты: 5
28.07.2015, 00:43 #12
Цитата Сообщение от rep plz Посмотреть сообщение
объявлять s дважды
единожды в мэйне перед циклом.
Renji
1901 / 1299 / 291
Регистрация: 05.06.2014
Сообщений: 3,719
28.07.2015, 05:38 #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  [ТС] #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 #15
Цитата Сообщение от rep plz Посмотреть сообщение
s = x; while (step < y ) { s *= x; step ++; }
Именно с вайлом лучше уже не сделаешь, потому что здесь лучше подойдёт for.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 07:22
Привет! Вот еще темы с ответами:

Написать, используя цикл for, ввод с клавиатуры 10 чисел - C++
Написать, используя цикл for, ввод с клавиатуры 10 чисел. Цикл может прерваться, если пользователь ввел любое отрицательное число.

Как можно записать код в более компактном виде? - C++
Вывести столбиком след. числа 3,2, 3,2, 3,3, 3,3,........3,9 у меня вышло довольно размазан: #include &quot;iostream&quot; #include &quot;conio.h&quot; ...

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

Найти более оптимальный способ решения задачи - C++
Вот задача: Имеется две таблицы: 1) Items (Id identity(1,1) int, Name varchar(50)) в которой хранятся составляющие продукты и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2015, 07:22
Ответ Создать тему
Опции темы

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