-1,2,-3,4…という数列
Re: -1,2,-3,4…という数列
(これが課題かはわかりませんが)課題の丸投げは禁止です。
フォーラムルールをお読みください。
なにか試したこと、途中まで書いたコードなどは無いですか?
以下、フォーラムルールより転載
フォーラムルールをお読みください。
なにか試したこと、途中まで書いたコードなどは無いですか?
以下、フォーラムルールより転載
どう質問していいか解らない時は、以下のテンプレをコピペして、
各項目に対して答える形で記載して下さい。
[hr]
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
[hr]
時々「あああ」とか「あいうえお」などという名前で投稿される方がいますが、
ふざけているように捉えられる場合が多く、熱心に回答してあげようという気を殺いでしまいます。
また、「初心者です」「初心者」「初めまして」「名無し」のような
その場だけの名前、また、多くの人が重複して使うであろう名前は避けてください。
なるべくオリジナルな名前を決め、以後同じ名前を使い続けてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: -1,2,-3,4…という数列
何項めまで出力したいのですか?こんにちは さんが書きました:-1,2,-3,4,-5…
さておき、ロジックとしては、
1から上限の数値までループする。
ループの中で、
・その数が奇数ならば-1倍した値を出力する
・その数が偶数ならば、そのまま出力する
てな感じでいいと思います。
どなたかの回答みたいにハードコーディングするのではなくて。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: -1,2,-3,4…という数列
ご指摘ありがとうございます。訂正しました。
Re: -1,2,-3,4…という数列
”powを使わないこと”という制限が課せられた問題の場合power関数を自作ください。
ここhttp://detail.chiebukuro.yahoo.co.jp/qa ... 1477039149をご参照して下さい。
ここhttp://detail.chiebukuro.yahoo.co.jp/qa ... 1477039149をご参照して下さい。
Re: -1,2,-3,4…という数列
ペアノの公理的に厳格に定義するとしてみれば、「最初の数には"前者”が存在しない」「他の数には必ず"前者”が存在する」「その数は"前者”より大きいか等しい」という公理をみたさい数列は当てはまらないことになります。
Re: -1,2,-3,4…という数列
言語が指定されていませんが、C言語だと仮定するとpow関数の引数はdouble型です。
どうして引数をわざわざfloat型にキャストしているのですか?
N1570 7.12.7.4 The pow functionsより引用
そもそもiの偶奇によって1か-1を出したいだけなので、わざわざpow関数なんか使わずに とすればいいでしょう。Synopsis
1 #include <math.h>
double pow(double x, double y);
float powf(float x, float y);
long double powl(long double x, long double y);
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: -1,2,-3,4…という数列
という方法を採用すると、 となりますね。box さんが書きました:・その数が奇数ならば-1倍した値を出力する
・その数が偶数ならば、そのまま出力する
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: -1,2,-3,4…という数列
間違えました。自然数(順序数)に減法を導入してに負の数を考えているので「整数」ですから「最初の数-1には”前者”が存在しない」「”後者”の絶対値は”前者”の絶対値より1大きい」「”後者”の値は”前者”の値と符合が逆になる」だと思います。
Re: -1,2,-3,4…という数列
ご指摘ありがとうございます。訂正しました。
#include <stdio.h> //ヘッダー部分
#include <math.h> //数学演算
int main(void) { //main関数
const int N=100;
int i; //ループ変数
for(i=1; i <= N; i++){ //for文i=1より初めてNより小の間 1ずつ増やし
printf("%d\t", i % 2 == 0 ? i : -i ); //交互に正-負を操り換えし:三項演算子
} //標準出力に数列を書き出す::::::条件? 処理1:処理2;
return N; //main関数の返却値:通常0:必要に応じて-1などを返す
}
Re: -1,2,-3,4…という数列
>Synopsis
>1 #include <math.h>
>double pow(double x, double y);
>float powf(float x, float y);
>long double powl(long double x, long double y);
このシノプシスは知りませんでした。普通doubleしか使わないのにfloat の方が分かりやすいのかなと思ったけど気付かなかったです。(コンパイラーからワーニングがだせるのかな?W4にすれば)
>1 #include <math.h>
>double pow(double x, double y);
>float powf(float x, float y);
>long double powl(long double x, long double y);
このシノプシスは知りませんでした。普通doubleしか使わないのにfloat の方が分かりやすいのかなと思ったけど気付かなかったです。(コンパイラーからワーニングがだせるのかな?W4にすれば)
Re: -1,2,-3,4…という数列
[訂正版]すみません。
>何が C++ なんですか?
.cppだとOKで.cだとエラーになる。ベターCの範疇ではあるような気はします。
[as if」ルール]http://okwave.jp/qa/q4536269.html
#include <stdio.h>
int main(void)
{
const int N = 100;
int i,t,x,y,z;
for(i = 1; i <= N; ++i){
x=(i & 0x1); y=!x; z=(y-x);//2進数の1桁は1,0を繰り返す
t = i * z; //zは1-0, 0-1を繰り返す
printf("%d\t", t); //結果1,0を-1,1の符号変換
} //に置き換える
return N;
}
.cppだとOKで.cだとエラーになる。ベターCの範疇ではあるような気はします。
[as if」ルール]http://okwave.jp/qa/q4536269.html
Re: -1,2,-3,4…という数列
DirectXの勉強をしていてふと回転行列を考えました。
(ベクトルの180度回転問題と捉えて見ました。)
(ベクトルの180度回転問題と捉えて見ました。)
Re: -1,2,-3,4…という数列
このコードは、必要な関数の宣言(宣言を含むヘッダのインクルードを含む)が無いので、metaphor さんが書きました:>何が C++ なんですか?
.cppだとOKで.cだとエラーになる。ベターCの範疇ではあるような気はします。
gcc 4.8.2ではC言語としてはコンパイルが通りますが、C++としてはコンパイルが通りません。
したがって、C++よりはCに近いコードであり、「.cppだとOKで.cだとエラーになる」という主張は不適切でしょう。
for文の初期化での変数宣言は、C99以降では許されているので問題になりません。
このコードに必要なインクルードを補ったものをC言語のコードとみなすことの最大の障害は、規格に合っていなそうなint main()という定義でしょう。
(C++では関数の定義で引数を書かないのはvoidと同じなので問題ありません)
しかし、C言語でのint main() { ... }は引数が無い関数を(引数の情報を宣言せずに)定義するものであり、
引数が無く戻り値がint型のmain関数は規格に合っているので、このコードは必要なインクルードを補えば規格上全く問題ないC言語のコードになるはずです。
c - Difference between int main() and int main(void)? - Stack Overflow
オフトピック
もしもint main()ではなくvoid main()とかいうゴミが使われていた場合は、完全にC++としては不正なC言語の(処理系依存の)コードになっているところでした。
void main()をめぐるどうでもいい話 - Qiita
void main()をめぐるどうでもいい話 - Qiita
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: -1,2,-3,4…という数列
そうでしたか。どうもありがとうございます。
VS2008を使ったので規格は旧いと思われるしMicrosoftn
の独特な”処理系依存”があると思われます。
(Linux系は忘れてしまってgcc,g++は使ってたはずなのに思い出せません。
VS2015は使い始めて3か月にもなりません。インテリセンスの便利さに取り込まれてしまいました。)
VS2008を使ったので規格は旧いと思われるしMicrosoftn
の独特な”処理系依存”があると思われます。
(Linux系は忘れてしまってgcc,g++は使ってたはずなのに思い出せません。
VS2015は使い始めて3か月にもなりません。インテリセンスの便利さに取り込まれてしまいました。)
Re: -1,2,-3,4…という数列
何やら自分の中途半端なコードであらぬ方向に話が行ってしまって申し訳ないです。
設問に対するメソッドの提示が出来ればそれで良いだろうと判断したので、そのようにしました。
実際、観るべき箇所は1行ですし、こういう方向に話が行くとは思いませんでした。
自分は他言語の利用者で、情報収集の過程でこの掲示板に辿り着きました(頭の体操になると思いコードを書きました)。
C/C++は多少なり知識はありますけれども、語れるほどではありません。
「スコープ内でのみ利用する変数はスコープ内で宣言する」ってコードを書く上での原則だと思うのですが、Cにおいてはそうでもないのですか?
「関数ブロックの前方に変数宣言を纏める」なども含めて、かなり古い習慣だと思うのですが。
もし、それが必要とされるなら、個人的にはこういった書き方した方が良いのでは?って思います。未初期化の変数宣言って落ち着かないですし。
的はずれな事を言っていたらごめんなさい。
設問に対するメソッドの提示が出来ればそれで良いだろうと判断したので、そのようにしました。
実際、観るべき箇所は1行ですし、こういう方向に話が行くとは思いませんでした。
自分は他言語の利用者で、情報収集の過程でこの掲示板に辿り着きました(頭の体操になると思いコードを書きました)。
C/C++は多少なり知識はありますけれども、語れるほどではありません。
「スコープ内でのみ利用する変数はスコープ内で宣言する」ってコードを書く上での原則だと思うのですが、Cにおいてはそうでもないのですか?
「関数ブロックの前方に変数宣言を纏める」なども含めて、かなり古い習慣だと思うのですが。
もし、それが必要とされるなら、個人的にはこういった書き方した方が良いのでは?って思います。未初期化の変数宣言って落ち着かないですし。
的はずれな事を言っていたらごめんなさい。
Re: -1,2,-3,4…という数列
>何が C++ なんですか?
フェイントに為って注意力散漫になり見事やられた。
[訂正版]
>もしもint main()ではなくvoid main()とかいうゴミが使われていた場合は
日本がゴミだらけにならないよう文部科学省に
「C/C++のmain関数の使用に関する重要案件」として教育勅語を発行してもらわないといけないかなと思います。
フェイントに為って注意力散漫になり見事やられた。
[訂正版]
#include <stdio.h>
const int N = 100;
int i; int x, y, z;
int main(void) { i=0;
while (i - N) { //(i-100) が0以外true
x = (i & 1); y=x << 1; z=i=y - 1 - i;//2進数の1桁目:yは2<->0
printf("%d\t", z);//printf文の中で代入を行っていました//i=-i
}return N;
}
日本がゴミだらけにならないよう文部科学省に
「C/C++のmain関数の使用に関する重要案件」として教育勅語を発行してもらわないといけないかなと思います。
Re: -1,2,-3,4…という数列
みなさんがんばってコードを書かれていますが、読みやすさや修正しやすさといった点においてどうなんでしょうか。
あたりで十分な気がします。
あたりで十分な気がします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: -1,2,-3,4…という数列
高度なアドレス渡しという技術を用い複雑な予備機能も備え誰にも分り易く
堅固なアルゴリズムに基づき社内の規範ともいえる。よって金一封.....白日夢da..
堅固なアルゴリズムに基づき社内の規範ともいえる。よって金一封.....白日夢da..
#include <stdio.h>
int Su_Retu(int* num,int* sign){ /* アドレス渡し */
printf("%d\t", *sign * *num); /* 絶対値と符号を組み合わせて出力する */
(*num)++; /* 次の項の絶対値は今の項の絶対値+1 */
*sign = -*sign; /* 次の項の符号は今の項と反対 */
return *num; /* 予備 */
}
int main(void) {
int i;
int num = 1; /* 初項の絶対値は1 */
int sign = -1; /* 初項は負 */
for (i = 0; i < 100; i++) { /* 100項出力する */
Su_Retu(&num,&sign);
}
return 0;
}
Re: -1,2,-3,4…という数列
掛け算で符号をつけるのが嫌なので、
漸化式を使うとすれば、
こんな解答もありでは?
#include <stdio.h>
int main(void)
{
const int n = 5; // 数列の項数
for (int i = 1; i <= n; i++)
printf("%d,", i & 1 ? -i : i); // 数列の一般項
puts("...");
return 0;
}
#include <stdio.h>
int main(void)
{
int n = 5; // 数列の項数
int a = -1; // 数列の初項
while (--n >= 0) {
printf("%d,", a);
a = (a < 0 ? 1 : -1) - a; // 漸化式による次の項
}
puts("...");
return 0;
}
#include <stdio.h>
int main(void)
{
const int n = 5; // 数列の項数
for (int i = 1; i <= n; i++) {
if (i & 1) putchar('-'); // 奇数なら '-' を表示
printf("%d,", i);
}
puts("...");
return 0;
}
オフトピック
metaphorさんの多くのプログラムで、理解できないこと。
・return N; を使うのはなぜ?
・int x, y, z を使うのはなぜ?
・インデントがおかしい。
・return N; を使うのはなぜ?
・int x, y, z を使うのはなぜ?
・インデントがおかしい。
Re: -1,2,-3,4…という数列
ありがとうございます。追加しました。
・return N; を使うのはなぜ?
・int x, y, z を使うのはなぜ?
・インデントがおかしい。
べつに(深い)意味はないです。C言語の書き方に慣れてないからです。
(マダキヅカレテナイヨウダ)
[ハマノ マサゴハ尽くるとも世にキュウスウヒョジノ種は尽くまじ-イシカワサユリさんノトーーイシンセキノインタビューヨリ]
#include <stdio.h>
int main(void)
{
const int n = 5; // 数列の項数
int i;////VC++2008 .cではerrorになるので...
for (i = 1; i <= n; i++)
printf("%d,", i & 1 ? -i : i); // 数列の一般項
puts("...");//2進数の1桁:1なら-i --- 0ならi
return 0;
}
#include <stdio.h>
int main(void)
{
int n = 5; // 数列の項数
int a = -1; // 数列の初項
while (--n >= 0) {//5 が0になるまで繰り返し
printf("%d,", a);
a = (a < 0 ? 1 : -1) - a; // 漸化式による次の項
} // aが負:1+a --- aが正:-1-a
puts("...");
return 0;
}
#include <stdio.h>
int main(void)
{
const int n = 5; // 数列の項数
int i = 1;//VC++2008 .cではerrorになるので...
for (i = 1; i <= n; i++) {
if (i & 1) putchar('-'); // 奇数なら '-' を表示
printf("%d,", i);//2進数1桁目を '-'符号に変換
}
puts("...");
return 0;
}
・int x, y, z を使うのはなぜ?
・インデントがおかしい。
べつに(深い)意味はないです。C言語の書き方に慣れてないからです。
(マダキヅカレテナイヨウダ)
[ハマノ マサゴハ尽くるとも世にキュウスウヒョジノ種は尽くまじ-イシカワサユリさんノトーーイシンセキノインタビューヨリ]
Re: -1,2,-3,4…という数列
もしmallocを使いメモリ領域を確保せよという課題が付加されたら..