C++について勉強しようと思っています。
はじめて書くにはどのようなことに挑戦した方がいいでしょうか?
いくつかあげていただけますと挑戦しがいがあります。
ゲームでなくても構いません。
コンパイラ:VS2005 C++
プログラム歴 1週間程度
一応HalloWorld程度は出せます。
if文とfor分も多分理解しています。
C言語を始めるにあたって
Re:C言語を始めるにあたって
「C++でプログラムを書く練習をするには、どのような事をすればいいか」
という質問で宜しいでしょうか。
①参考書などを読む
②学んだ事(if文、while文など)を利用するプログラムを考える
②考えたプログラムを実際に書き、動くか確かめる
大体こういう風にすれば、自然と書き方が分かってくると思います。
もし、「自分でプログラムが思いつかない」というのであれば、2つばかり問題を出してみます。
【1】1~100までの値を表示する。但し、3の倍数の時は"Fizz"、5の倍数の時は"Buzz"
3の倍数でも、5の倍数でもある時は"FizzBuzz"と表示させる。
------実行例------
1
2
Fizz
4
Buzz
Fizz
------------------(以下略)
【2】for文(2重ループ)とif文を用いて、下記の模様を表示すること。
□■□■□■
■□■□■□
□■□■□■
■□■□■□
□■□■□■
■□■□■□
とりあえずは、基本的な構文を使ってみたり、自作の関数を作ってみたり、基本的な事からしっかりと
固めていけばいいと思います。
ある程度慣れてきたら、クラスや例外処理、線形リスト、ソート等のアルゴリズムに挑戦すれば
いいと思います。(参考までにどうぞ)
という質問で宜しいでしょうか。
①参考書などを読む
②学んだ事(if文、while文など)を利用するプログラムを考える
②考えたプログラムを実際に書き、動くか確かめる
大体こういう風にすれば、自然と書き方が分かってくると思います。
もし、「自分でプログラムが思いつかない」というのであれば、2つばかり問題を出してみます。
【1】1~100までの値を表示する。但し、3の倍数の時は"Fizz"、5の倍数の時は"Buzz"
3の倍数でも、5の倍数でもある時は"FizzBuzz"と表示させる。
------実行例------
1
2
Fizz
4
Buzz
Fizz
------------------(以下略)
【2】for文(2重ループ)とif文を用いて、下記の模様を表示すること。
□■□■□■
■□■□■□
□■□■□■
■□■□■□
□■□■□■
■□■□■□
とりあえずは、基本的な構文を使ってみたり、自作の関数を作ってみたり、基本的な事からしっかりと
固めていけばいいと思います。
ある程度慣れてきたら、クラスや例外処理、線形リスト、ソート等のアルゴリズムに挑戦すれば
いいと思います。(参考までにどうぞ)
Re:C言語を始めるにあたって
プログラムを習い始めたばかりでC++を理解するのはかなりしんどいです。
私が思うに、
1:C言語を一通り(プリプロセッサと関数ポインタ以外の部分)を覚えて扱えるようにする。(I/O関係は細かく覚えなくても良い)
2:データ構造(リンクリスト、ツリー構造、ハッシュ、etc)とアルゴリズム(バブルソート、挿入ソート、マージソート、クイックソート、etc)を実装できるようにする。
3:C++言語(文法)を覚える。
4:C++のライブラリを覚える
5:デザインパターンを覚える
6:C++のライブラリの一部を自分で実装してみる。
7:effective C++,more effective C++, effective stlを読破する。
とりあえずは4まですれば、C++を一通り読んで書くことは出来ると思います。
#実際の現場は知らないのですが、C++を使う職業プログラマーはこれを全部終わっているんじゃないかと勝手に思っています。
私が思うに、
1:C言語を一通り(プリプロセッサと関数ポインタ以外の部分)を覚えて扱えるようにする。(I/O関係は細かく覚えなくても良い)
2:データ構造(リンクリスト、ツリー構造、ハッシュ、etc)とアルゴリズム(バブルソート、挿入ソート、マージソート、クイックソート、etc)を実装できるようにする。
3:C++言語(文法)を覚える。
4:C++のライブラリを覚える
5:デザインパターンを覚える
6:C++のライブラリの一部を自分で実装してみる。
7:effective C++,more effective C++, effective stlを読破する。
とりあえずは4まですれば、C++を一通り読んで書くことは出来ると思います。
#実際の現場は知らないのですが、C++を使う職業プログラマーはこれを全部終わっているんじゃないかと勝手に思っています。
Re:C言語を始めるにあたって
conio さん
1の解答
for(int i=1; i<101; i++){
if(i%15 == 0) printf("FizzBuzz\n");
else if(i%5 == 0) printf("Buzz\n");
else if(i%3 == 0) printf("Fizz\n");
else printf("%d\n",i);
}
2の解答
bool Array[5][5] = {
{0,1,0,1,0},
{1,0,1,0,1},
{0,1,0,1,0},
{1,0,1,0,1},
{0,1,0,1,0},
};
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(Array[j] == 0) printf("□");
else if(Array[j] == 1) printf("■");
if(j == 4) printf("\n");
}
}
で一応はできました。
意図したとおりでしょうか?
御迷惑でなければ他に問題を出していただけますと助かります><
1の解答
for(int i=1; i<101; i++){
if(i%15 == 0) printf("FizzBuzz\n");
else if(i%5 == 0) printf("Buzz\n");
else if(i%3 == 0) printf("Fizz\n");
else printf("%d\n",i);
}
2の解答
bool Array[5][5] = {
{0,1,0,1,0},
{1,0,1,0,1},
{0,1,0,1,0},
{1,0,1,0,1},
{0,1,0,1,0},
};
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(Array[j] == 0) printf("□");
else if(Array[j] == 1) printf("■");
if(j == 4) printf("\n");
}
}
で一応はできました。
意図したとおりでしょうか?
御迷惑でなければ他に問題を出していただけますと助かります><
Re:C言語を始めるにあたって
【2】はこんな感じでも良いかと。 --------------------------------------------------- #include <stdio.h> int main(void) { for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ if((i + j) % 2 )printf("□"); else printf("■"); } printf("\n"); } return(0); } --------------------------------------------------- 自分が参考書や基本情報技術者試験で、解いた問題の類似例です。参考にどうぞ。 強制でも何でもないので、暇な時に解いてみるといいかと。 あと、やはり参考書があれば参考書の例題を解いてみたり、参考書を見ずに参考書のプログラムを 書いてみると一番よく練習出来ると思います。 ①for文を使って、配列の要素を入れ替えて表示する(配列の中身も入れ替わっていること) 【例】a[5] = {1,2,3,4,5} 【出力】a[5] = {5,4,3,2,1} ②for文を使って、二次元配列a[5][5]の縦と横の要素を入れ替える。 【例】 11111 10000 11111 00001 11111 【出力】 10111 10101 10101 10101 11101 ③数当てゲームを作る。(ランダムに1~9の数字をxに代入。scanf関数で読み込み。) 外した場合、数が大きいか少ないかを表示し、再入力させる。 【例】3の場合 【出力例】 数を入力してください:6 大きいです! 数を入力してください:1 小さいです! 数を入力してください:3 正解です! ④10人の成績(0~50点)を入力し、入力を元に下記の様な表を作る。(範囲外の入力は再入力を促すこと) 【出力例】 50点:★ 40~49点:★★ 30~39点: 20~29点:★★★★ 10~19点:★★ 0~ 9点:★ ⑤簡単なタイピングゲームを作る。入力された文字が合っていれば文字を消し、 全て消した時ゲームクリア!と表示させる。但し、\rを用いて改行させないようにする。 【出力例】 test est st t ゲームクリア! ⑥配列a[30]に適当な数字を入れておき、0以外の数字があるかを全て探索する。 但し、0以外の数字があった時は、見つけた順番通りに「0以外の数字"●"が●個ありました」と表示させること。 【例】 a[30]= {0,9,8,1,0,0,3,2,4,1,4,9,9,8,8,0,0,1,2,3,4,1,9,3,0,0,0,2,1,5}; 【出力】 0以外の数字"9"が4個ありました 0以外の数字"8"が3個ありました 0以外の数字"1"が5個ありました 0以外の数字"3"が3個ありました 0以外の数字"2"が3個ありました 0以外の数字"4"が3個ありました 0以外の数字"5"が1個ありました
Re:C言語を始めるにあたって
HTML+JavaScript -> Java -> C++ を独学していった私ですが、
いきなりプログラミング言語を覚えるのに C++ というのは、
確かにマスターするのに時間がかかるかと思います。
私が C++ を覚えたのは C++ の入門書からでした。
なので、入門書にある例題や問題を実際に書いて、
さらに自分の思い通りに動くかコードをちょっといじって確かめたり、
他のソフトのサンプル(ここならサンプルプログラミングの館)を見て、
どのように動いているのかコードを読んでみたりするといいでしょう。
現在覚えているところでは C 言語でも共通のところですので、
組木紙織さんの方法から覚えていってもいいと思いますよ。
conio さんの問題の解答ですが、(私から言うのもおかしいですが)
問2 が惜しいです。
問題では6x6サイズですが、5x5で出力されています。
ほぼ正解している、ということなので、別解を書いてみました。
とのことなので、私からも問題を3つ。
【3】conio さんの問題【1】の条件追加問題です。
1行辺り5個の値を表示するようにする。ただし、整形した形で表示させること。
数値の入力を求め、その数値の文字数の正方形の模様を表示する。
このとき入力する値及び表示する値は浮動小数点として扱い、計算、表示すること。
また、0を入力した場合、エラーを表示し、再度入力を促すこと。
浮動小数点の値の型は double を使用すること。
いきなりプログラミング言語を覚えるのに C++ というのは、
確かにマスターするのに時間がかかるかと思います。
私が C++ を覚えたのは C++ の入門書からでした。
なので、入門書にある例題や問題を実際に書いて、
さらに自分の思い通りに動くかコードをちょっといじって確かめたり、
他のソフトのサンプル(ここならサンプルプログラミングの館)を見て、
どのように動いているのかコードを読んでみたりするといいでしょう。
現在覚えているところでは C 言語でも共通のところですので、
組木紙織さんの方法から覚えていってもいいと思いますよ。
conio さんの問題の解答ですが、(私から言うのもおかしいですが)
問2 が惜しいです。
問題では6x6サイズですが、5x5で出力されています。
ほぼ正解している、ということなので、別解を書いてみました。
{ printf("1 の解答\n"); bool b[2]; for(int i=1;i<=100;++i){ b[0] = (i%3 == 0); b[1] = (i%5 == 0); if(b[0]) printf("Fizz"); if(b[1]) printf("Buzz"); if(!b[0] && !b[1]) printf("%d",i); printf("\n"); } } { printf("2 の解答\n"); for(int y=0;y<6;++y){ for(int x=0;x<6;++x){ if((x+y)%2 == 0) printf("□"); else printf("■"); } printf("\n"); } }> 御迷惑でなければ他に問題を出していただけますと助かります><
とのことなので、私からも問題を3つ。
【3】conio さんの問題【1】の条件追加問題です。
1行辺り5個の値を表示するようにする。ただし、整形した形で表示させること。
例) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz --------------------------------------------(以下略)【4】conio さんの問題【1】の処理追加問題です。
数値の入力を求め、その数値の文字数の正方形の模様を表示する。
例) 2を入力した場合: □■ ■□ 3を入力した場合: □■□ ■□■ □■□【5】2つの値を求め、その2値のそれぞれ加減乗除(左右入れ替えてそれぞれ計算)した値を表示する。
このとき入力する値及び表示する値は浮動小数点として扱い、計算、表示すること。
また、0を入力した場合、エラーを表示し、再度入力を促すこと。
浮動小数点の値の型は double を使用すること。
例) 2 5.5 を入力した場合: 2.000000 + 5.500000 = 7.500000 2.000000 - 5.500000 = -3.500000 2.000000 * 5.500000 = 11.000000 2.000000 / 5.500000 = 0.363636 5.500000 + 2.000000 = 7.500000 5.500000 - 2.000000 = 3.500000 5.500000 * 2.000000 = 11.000000 5.500000 / 2.000000 = 2.750000# ちょっと長くなってしまいました。