Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
#1

задача на оператор While - C++

24.09.2009, 17:12. Просмотров 2180. Ответов 20
Метки нет (Все метки)

дано число N (тоесть его нужно ввести с клавиатуры), число N должно быть больше 0. Это N-степень числа 2 (двойки). Также известно, что N=2 в степени К (N=pow(2,K). Найти К. Вот я написал такой листинг, но он не работает. Помогите найти ошибки и исправить.
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <math.h>`
void main() {
   int K,N;
   printf("Enter N\n");
   scanf("%f",&N);
   while(N>0)
        K=pow(2,1/N);
        printf("K=%d,\n",K);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2009, 17:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос задача на оператор While (C++):

Оператор выбора. задача - C++
Для первых двадцати натуральных чисел определить – является ли это число четным в интервале от 3 до 11, нечетным в интервале от 1 до 9, ...

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

Условный оператор.Задача на полуокружность - C++
Дана точка на плоскости с координатами (х,у). Составить программу,которая выдаёт одно из сообщений:*Да*,*Нет*,*На границе* в зависимости от...

Задача на подсчет больничных через оператор switch - C++
Задача : Если стаж роботы до 3х лет , больничные - 50% от зарплаты , от 3х ло 5 лет - 60% , от 5 до 8 лет - 80 , больше 8 лет - 100% Не...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки - C++
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 - C++
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

20
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
24.09.2009, 17:16 #2
Ошибка заключается в том, что тип данных К и N должен быть double.Потому что функция POW работает только с переменными типа double.
0
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
24.09.2009, 17:34 #3
Цитата Сообщение от wolff-87 Посмотреть сообщение
Ошибка заключается в том, что тип данных К и N должен быть double.Потому что функция POW работает только с переменными типа double.
Бда...

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <math.h>`
void main() {
   int K=1,N;
   printf("Enter N\n");
   scanf("%d",&N);
   if(N>0)
   while(pow(2,K)<N)
   {K++;
   if(pow(2,K)==N)
   {
   printf("K=%d\n",K);
   break;
   }
   }
   getch();
}
Эсли правильно понял заданее

Добавлено через 5 минут
Bloodykeeper, Кнопку "Спасибо" нажал случайно ))))
2
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
24.09.2009, 17:36 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <stdio.h>
#include "conio.h"
#include <math.h>
void main() {
   float N, K;
   printf("Enter N\n->");
   scanf("%f",&N);
   K = log(N)/log(2.0);
   printf("K=%f\n",K);
   getch();
}
0
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
24.09.2009, 17:39 #5
R0mm, Тема: задача на оператор While )))
0
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
24.09.2009, 17:43 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <stdio.h>
#include "conio.h"
#include <math.h>
void main() {
   float N;
   int K(0);
   printf("Enter N\n->");
   scanf("%f",&N);
   while(pow(2.0, double(K))!=N) K++;
   printf("K=%d\n",K);
   getch();
}
1
odip
Эксперт С++
7161 / 3223 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.09.2009, 20:49 #7
Что-то мне подсказывает, что в этой задаче считать требуется в целых числах (long), не используя double и функцию pow().
1
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
24.09.2009, 21:17  [ТС] #8
ZVolodumur, спасибо, вы мне очень помогли)
0
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
25.09.2009, 13:09 #9
Цитата Сообщение от odip Посмотреть сообщение
не используя double и функцию pow().
Bloodykeeper, если эта тема еще интересна, то есть и такое решение
C++
1
2
3
4
5
6
7
8
   int K,N;
   printf("Enter N\n");
   scanf("%f",&N);
   while((N != 1) {
     K++;
     N >>= 1;
   }
   printf("K=%d,\n",K)
0
odip
Эксперт С++
7161 / 3223 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 18:29 #10
то есть и такое решение
Ошибок полно !

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
#include <stdio.h>
#include <stdlib.h>
 
int main( void ) {
 
unsigned long int N, N1;
int K;
int found_flag;
 
 
printf( "Enter N: " );
scanf( "%ld", &N );
if ( N<=0 ) { printf( "Error\n" ); exit( 1 ); }
N1= 1;
found_flag= 0;
for ( K= 0 ; K<32 ; ) {
    if ( N == N1 ) { found_flag= 1; break; }
    K++;
    N1<<= 1;
}
if ( !found_flag ) { printf( "Invalid N\n" ); exit( 1 ); }
printf( "K=%d\n", K );
 
return 0;
 
}
0
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
25.09.2009, 21:21 #11
Цитата Сообщение от odip Посмотреть сообщение
Ошибок полно !
Пардон, выпала строчка инициализации K=0
C++
1
2
3
4
5
6
7
8
9
   int K,N;
   printf("Enter N\n");
   scanf("%f",&N);
   K = 0;
   while(N != 1) {
     K++;
     N >>= 1;
   }
   printf("K=%d,\n",K)
Добавлено через 58 минут
Цитата Сообщение от АНК Посмотреть сообщение
scanf("%f",&N);
Да и здесь надо
C++
1
scanf("%d",&N);
0
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
28.09.2009, 10:41 #12
ZVolodumur, И что тебе не понравилось в моем комментарии??
0
odip
Эксперт С++
7161 / 3223 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.09.2009, 10:45 #13
Если подать в pow() аргумент целое число, то оно автоматически будет преобразовано в вещественное.
А в коде:
int K;
K=pow(2,1/N)
Будет сделано обратное - результат функции pow() будет преобразован в целое.
Если компилятор конечно не будет грязно ругаться
0
Delphin_KKC
UNIX-way
710 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
28.09.2009, 10:47 #14
Цитата Сообщение от odip Посмотреть сообщение
Если подать в pow() аргумент целое число, то оно автоматически будет преобразовано в вещественное.
А в коде:

Будет сделано обратное - результат функции pow() будет преобразован в целое.
Если компилятор конечно не будет грязно ругаться
А если будет - тогда
C++
1
2
int K;
K=static_cast<int>(pow(2,1/N));
Только если результат не поместится в int - эффект будет неожиданный.
0
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
28.09.2009, 10:54 #15
Вот.И я про что.У меня например компилятор ругается и говорит неоднозначно определен вызов функции pow.При изменение на float или double работает нормально.

Добавлено через 6 минут
ZVolodumur, случайно спасибо нажал
0
28.09.2009, 10:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2009, 10:54
Привет! Вот еще темы с ответами:

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости - C++
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...


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

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

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