Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
TBIKC
web dev
104 / 90 / 9
Регистрация: 23.09.2010
Сообщений: 737
1

Программа постоянно печатает степени целого числа 2

22.08.2011, 22:51. Просмотров 2332. Ответов 24
Метки нет (Все метки)

Напишите программу, которая постоянно печатает степени целого числа 2,
соответственно 2, 4, 8, 16, 32, 64 и т.д. Число повторений вашего цикла не должно,
быть определено (т.е. вы должны создать бесконечный цикл). Что случилось,
когда вы выполнили эту программу?


Ничего не выводит, где я не прав ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main()
{
    int num = 0;
    while (true) 
    {     
          cout << num << endl;  
          return num^2; 
   
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2011, 22:51
Ответы с готовыми решениями:

Посчитать 2 в степени целого длинного числа
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { int i; double...

Найти значение суммы используя рекурсию нахождения целого степени числа а
Найти значение суммы ряда используя рекурсию нахождения целого степени числа а

Написать рекурсивную функцию для вычисления натуральной степени заданного целого числа
Рекурсия. Помогите исправить программу: Напишите рекурсивную функцию для вычисления натуральной...

Написать программу, которая делит числа в 5 степени на число в 14 степени и выводит ответ в 5 степени. Найти ошибку
Ребят, такая проблема, задание: Написать программу, которая делит числа в 5 степени на число в 14...

Программа, вычисляющая корень четвертой степени от числа
Доброго времени суток. Народ, кому не сложно, создайте программу, вычисляющую корень четвертой...

24
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
22.08.2011, 22:55 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    double num = 0;
    while (true) 
    {     
          cout << (int)pow(num,2) << endl;  
   
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
TBIKC
web dev
104 / 90 / 9
Регистрация: 23.09.2010
Сообщений: 737
22.08.2011, 23:00  [ТС] 3
При этом варианте, выводит бесконечно нули
0
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
22.08.2011, 23:12 4
Исправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    int y=0;
    while (true) 
    {     
          cout << (int)pow(2,y++) << endl;  
   
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
22.08.2011, 23:12
TBIKC
web dev
104 / 90 / 9
Регистрация: 23.09.2010
Сообщений: 737
22.08.2011, 23:18  [ТС] 5
не работает
0
Миниатюры
Программа постоянно печатает степени целого числа 2  
Teravisor
31 / 31 / 2
Регистрация: 07.08.2011
Сообщений: 89
22.08.2011, 23:37 6
Цитата Сообщение от TBIKC Посмотреть сообщение
не работает
Возведение в степень, pow

А конкретнее, оно не знает к какому виду привести аргумент у функции pow.

Попробуйте заменить строку на
C++
1
cout << (int)pow(2.0,num++) << endl;
1
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
22.08.2011, 23:41 7
TBIKC, используйте в аргументах 2. вместо 2
1
Paporotnik
383 / 227 / 12
Регистрация: 06.07.2011
Сообщений: 512
22.08.2011, 23:43 8
нули у тебя выводятся, потому что очень быстро происходит переполнение int. сделай ограничение на количество выводимых значений и получишь свои степени двойки.
и зачем так заморачиваться, если можно в этом же цикле после вывода просто умножать на 2?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
int num = 2; 
while (true) {
    cout<<num<<endl;
    num=num*2;
    if (num>100000) break;
}            
}
2
Teravisor
31 / 31 / 2
Регистрация: 07.08.2011
Сообщений: 89
22.08.2011, 23:47 9
Цитата Сообщение от Paporotnik Посмотреть сообщение
нули у тебя выводятся, потому что очень быстро происходит переполнение int. сделай ограничение на количество выводимых значений и получишь свои степени двойки.
и зачем так заморачиваться, если можно в этом же цикле после вывода просто умножать на 2?
Не поверите, вариант с pow() не нули выводит, а -2147483648, компилил из-под minGW. А ваш вариант - будет выводить нули. Так что разница есть.
0
TBIKC
web dev
104 / 90 / 9
Регистрация: 23.09.2010
Сообщений: 737
22.08.2011, 23:49  [ТС] 10
спасибо, всё заработало )
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    int num = 1;
    while (true)
    {     
          cout << num << endl;
          num *=2;
          if(num>500) break;
    }
}
0
Paporotnik
383 / 227 / 12
Регистрация: 06.07.2011
Сообщений: 512
22.08.2011, 23:53 11
Не поверите, вариант с pow() не нули выводит, а -2147483648, компилил из-под minGW. А ваш вариант - будет выводить нули. Так что разница есть.
а вы пробовали "мой вариант" скомпилить и посмотреть?
тот же MinGW с NetBeans:
0
Миниатюры
Программа постоянно печатает степени целого числа 2  
Teravisor
31 / 31 / 2
Регистрация: 07.08.2011
Сообщений: 89
23.08.2011, 00:27 12
Цитата Сообщение от Paporotnik Посмотреть сообщение
а вы пробовали "мой вариант" скомпилить и посмотреть?
тот же MinGW с NetBeans:
а где 1073741824?
Плюс не красиво константы в коде расставлять. Не культурно это.

Вообще в задаче стояло - сделать БЕСКОНЕЧНЫЙ цикл, поэтому мы его и делали.
Ваш вариант вот в таком виде лучше в плане переносимости между платформами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int num = 1;
    while (true) 
    {
        num=num*2;
        cout<<(int)num<<endl;
//В этой строке заменить -2 на -1 если unsigned - как это отследить не помню.
        if (  num>=(1<<(sizeof(num)*8-2))  ) break;
    }
}
В таком варианте можно спокойно заменять тип int на char, short int по надобности. Разве что << не поддерживает long long int на х32 процессорах по крайней мере, надо переопределять, да и в задачу это не входило.

или отслеживанием флага переполнения(это уже ассемблер, но способ, ИМХО, намного эффективнее)
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
23.08.2011, 00:37 13
Цитата Сообщение от TBIKC Посмотреть сообщение
не работает
потому что нет функции pow с int
double float пожалуйста но куда приводить int
посему
Цитата Сообщение от almazsr Посмотреть сообщение
int y=0;
поменяй на double y
во втором посте было правильно

Добавлено через 2 минуты
Цитата Сообщение от Paporotnik Посмотреть сообщение
не нули выводит, а -2147483648,
а unsigned int уже отменили
0
Olga_
845 / 187 / 18
Регистрация: 01.08.2011
Сообщений: 502
23.08.2011, 07:20 14
Если нужны степени двойки, то зачем умножать, когда есть битовые операции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
const int N = 10000;
 
int main()
{
    int i = -1, num = 1;
    while (++i < N)
    {
 
       cout << num << endl;
       num <<= 1;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
Просто лис
Путешественник вселенной
187 / 154 / 119
Регистрация: 01.03.2011
Сообщений: 664
23.08.2011, 08:58 15
Вот с счетчиком до 1000 (т.к при бесконечном цикле значения вываливаются в inf)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double i=1.0;
    for (;i!=1000.0;)
    {
        cout<<pow(2.0,i)<<"\n";
        i++;
        }
        system("pause");
        return 0;
        }
0
Olga_
845 / 187 / 18
Регистрация: 01.08.2011
Сообщений: 502
23.08.2011, 09:56 16
Если кто за красоту кода (а сам в программе break использует), то лучше уж так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
    unsigned long num = 1;
    int i = (sizeof(num) << 3) - 1;
    while (i--)
       cout << (num <<= 1) << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
diagon
Higher
1941 / 1207 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.08.2011, 10:04 17
C++
1
for (int i = 1 ; ; ( usleep(90000), std::cout << (1ll << i++) << std::endl) );
2
Olga_
845 / 187 / 18
Регистрация: 01.08.2011
Сообщений: 502
23.08.2011, 10:11 18
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
for (int i = 1 ; ; ( usleep(90000), std::cout << (1ll << i++) << std::endl) );
А цикл бесконечный
0
diagon
Higher
1941 / 1207 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.08.2011, 10:30 19
Цитата Сообщение от Olga_ Посмотреть сообщение
А цикл бесконечный
Так задание такое =\
Зато при переполнении последовательность просто начинает выводиться заново.
0
Olga_
845 / 187 / 18
Регистрация: 01.08.2011
Сообщений: 502
23.08.2011, 10:33 20
Да, точно, такое задание Ну раз автору темы так надо, пусть будет так
0
23.08.2011, 10:33
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2011, 10:33

Программа, которая выводит на экран код двухбайтового целого числа
Программа, которая выводит на экран код двухбайтового целого числа.

Программа, которая выводит на экран код однобайтового целого числа
Программа, которая выводит на экран код однобайтового целого числа.

Программа перевода целого числа без знака в двоичную систему счисления
Здравствуйте . Помогите , пожалуйста , реализовать программу перевода целого числа без знака в...


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

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

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