C++ 累乗の計算です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ののき

C++ 累乗の計算です

#1

投稿記事 by ののき » 13年前

簡単な計算プログラムを作ろうとしましたが、次のようなエラーが出て失敗してしまいました。
どのように修正すれば、直るのでしょうか。ぜひ、ご指導ください。

------ ビルド開始: プロジェクト: プログラミング実習, 構成: Debug Win32 ------
実習1.cpp
c:\users\rain\documents\visual studio 2010\projects\プログラミング実習\プログラミング実習\実習1.cpp(28): error C2297: '<<' : 無効です。右オペランドには型 'const char [5]' が指定されています。
c:\users\rain\documents\visual studio 2010\projects\プログラミング実習\プログラミング実習\実習1.cpp(28): error C2676: 二項演算子 '^' : 'std::basic_ostream<_Elem,_Traits>' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

コード:

/*****************************************************************************
*シリアルケーブルで一つのファイルを転送した際にかかる時間を求めるプログラム
*
* なお、シリアルケーブルの転送速度は一秒間に960文字とする。文字は半角英数で計算する。よって、一文字は1バイトとする。 
* 入力は、メガバイト単位。
*  計算方法は、メガバイト*2^20/960で秒数に換算、次に一時間分の秒数、3600秒で割る。
*  計算結果は、時間単位で表される。
*  mega*2^20/960/3600
*  
*
*    
*
*
*
******************************************************************************/
#include <iostream>
char line[10000];
double mega;


int main()
{
	using namespace std;
	
	cout<<"ファイルのメガバイトの値を入力し、エンターを押してください";
	
	cin>>mega;
cout<<"転送にかかる時間は"<<mega*2^20/960/3600<<"です";

	
	

	
return(0);
}

maru
記事: 150
登録日時: 13年前

Re: C++ 累乗の計算です

#2

投稿記事 by maru » 13年前

コメントにある mega*2^20/960/3600 の 2^20 の部分は 2 の 20乗と言う意味ですが、
c/c++の ^ は別の意味になります。 2^20 の部分を正しい値に直せばエラーはなくなります。

ののき

Re: C++ 累乗の計算です

#3

投稿記事 by ののき » 13年前

^を使わずに、計算をしようと、pow関数を用いて、記述したのですが、つぎのようなエラーが出て、動作致しませんでした。
ご指導お願いいたします。

------ ビルド開始: プロジェクト: プログラミング実習, 構成: Debug Win32 ------
実習1.cpp
c:\users\rain\documents\visual studio 2010\projects\プログラミング実習\プログラミング実習\実習1.cpp(27): error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(583): 'long double pow(long double,int)' の可能性があります。
c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(535): または 'float pow(float,int)'
c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(497): または 'double pow(double,int)'
引数リスト '(int, int)' を一致させようとしているとき
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

コード:

/*****************************************************************************
*シリアルケーブルで一つのファイルを転送した際にかかる時間を求めるプログラム
*
* なお、シリアルケーブルの転送速度は一秒間に960文字とする。文字は半角英数で計算する。よって、一文字は1バイトとする。 
* 入力は、メガバイト単位。
*  計算方法は、メガバイト*2^20/960で秒数に換算、次に一時間分の秒数、3600秒で割る。
*  計算結果は、時間単位で表される。
*  mega*2^20/960/3600
*  
*
*    
*
*
*
******************************************************************************/
#include <iostream>
#include<math.h>
char line[10000];
double mega,byde;


int main()
{
	using namespace std;
	
	cout<<"ファイルのメガバイトの値を入力し、エンターを押してください";
	byde=pow(2,20);
	
	cin>>mega;
	cout<<"転送にかかる時間は"<<mega*byde/960/3600<<"です";

	
	

	
return(0);
}

アバター
kimuchi
記事: 163
登録日時: 13年前
住所: 東京

Re: C++ 累乗の計算です

#4

投稿記事 by kimuchi » 13年前

pow関数がオーバーロード関数なので、
1引数目を「double」「float」「long double」のいずれかでキャストする必要があります。

この場合は代入する変数が「double」なので、
「byde=pow(2.0,20);」あるいは「byte=pow((double)(2),20);」とする必要があります。

参考:
http://connect.microsoft.com/VisualStud ... 0-10-c2668
http://e-words.jp/w/E382AAE383BCE38390E ... 38389.html

アトラス
記事: 1
登録日時: 13年前

Re: C++ 累乗の計算です

#5

投稿記事 by アトラス » 13年前

pow関数の第1引数がdouble型なので
pow(2.0,20)としてみてはどうですか?

maru
記事: 150
登録日時: 13年前

Re: C++ 累乗の計算です

#6

投稿記事 by maru » 13年前

このエラーをよく読めば分かります。
> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(535): または 'float pow(float,int)'
> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(497): または 'double pow(double,int)'
> 引数リスト '(int, int)' を一致させようとしているとき
この文を翻訳するすると、
「power関数の引数は float 型と int 型、または double 型と int 型だよ。だから int 型, int 型という引数の pow 関数はしーらない!」
と言っています。

byte = power(2, 20);
としていますが、普通に数値の 2 や 20 は int 型とみなされます。
double型で定数を書く場合、2.0 とします。

余談:
2 の n乗を計算しろっていわれると初心者ほど pow関数を使いたがるけど、こんなのは
(1 << n);
が簡単。今回は n = 20;が分かっているから、

コード:

#include <iostream>
using namespace std;
int main()
{
    double mega;
    cout<<"ファイルのメガバイトの値を入力し、エンターを押してください";
    cin>>mega;
    cout<<"転送にかかる時間は"<<mega*(1<<20)/960/3600<<"です";
    return(0);
}
とすればいいでしょう。(コンパイルしてません。)

ののき

Re: C++ 累乗の計算です

#7

投稿記事 by ののき » 13年前

ご解答ありがとうございます。pow(2,20)をpow(2.0,20)としたところ、無事実行できました。
double型などのことを考えて記述しなければならないことに気づかされました。
初心者ですが、これからもよろしくお願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る