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

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

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

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

24.09.2009, 17:12. Просмотров 2103. Ответов 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);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
24.09.2009, 17:16     задача на оператор While #2
Ошибка заключается в том, что тип данных К и N должен быть double.Потому что функция POW работает только с переменными типа double.
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
24.09.2009, 17:34     задача на оператор While #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, Кнопку "Спасибо" нажал случайно ))))
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
24.09.2009, 17:36     задача на оператор While #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();
}
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
24.09.2009, 17:39     задача на оператор While #5
R0mm, Тема: задача на оператор While )))
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
24.09.2009, 17:43     задача на оператор While #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();
}
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.09.2009, 20:49     задача на оператор While #7
Что-то мне подсказывает, что в этой задаче считать требуется в целых числах (long), не используя double и функцию pow().
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
24.09.2009, 21:17  [ТС]     задача на оператор While #8
ZVolodumur, спасибо, вы мне очень помогли)
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
25.09.2009, 13:09     задача на оператор While #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)
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 18:29     задача на оператор While #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;
 
}
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
25.09.2009, 21:21     задача на оператор While #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);
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
28.09.2009, 10:41     задача на оператор While #12
ZVolodumur, И что тебе не понравилось в моем комментарии??
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.09.2009, 10:45     задача на оператор While #13
Если подать в pow() аргумент целое число, то оно автоматически будет преобразовано в вещественное.
А в коде:
int K;
K=pow(2,1/N)
Будет сделано обратное - результат функции pow() будет преобразован в целое.
Если компилятор конечно не будет грязно ругаться
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
28.09.2009, 10:47     задача на оператор While #14
Цитата Сообщение от odip Посмотреть сообщение
Если подать в pow() аргумент целое число, то оно автоматически будет преобразовано в вещественное.
А в коде:

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

Добавлено через 6 минут
ZVolodumur, случайно спасибо нажал
ZVolodumur
49 / 49 / 3
Регистрация: 21.05.2009
Сообщений: 156
28.09.2009, 11:33     задача на оператор While #16
Цитата Сообщение от wolff-87 Посмотреть сообщение
Ошибка заключается в том, что тип данных К и N должен быть double.Потому что функция POW работает только с переменными типа double.
Незнаю что у тебя там за компилятор но ето не так...
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.09.2009, 11:36     задача на оператор While #17
В таких случая лучше по крайней мере результат функции явно привести к (int).
А в C++ еще придется и аргумент привести к (double).
Потому что в C++ библиотеке есть несколько похожих функций и компилятор не может понять какую именно нужно вызывать.
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
28.09.2009, 16:36     задача на оператор While #18
odip, но согласись сдвигами тоже можно решать эту задачу
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.09.2009, 18:41     задача на оператор While #19
Так и лучше сдвигами.
Скорее всего неявно подразумевается что pow() нельзя вызывать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2009, 09:41     задача на оператор While
Еще ссылки по теме:

C++ В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор?
Задача на подсчет больничных через оператор switch C++
C++ Оператор запятая в return и задача
C++ Как перегрузить оператор<< и оператор>> ?

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

Или воспользуйтесь поиском по форуму:
wolff-87
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
29.09.2009, 09:41     задача на оператор While #20
ZVolodumur, Если что то говоришь, то аргументируй свои высказывания.С чем связана ошибка?если при изменении на Float или Double она пропадает???
Yandex
Объявления
29.09.2009, 09:41     задача на оператор While
Ответ Создать тему
Опции темы

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