*これは何? [#ked25b4d]
初心者用の課題を集めて見ました。言語は問いません。入力出力は特に問いません。キー入力でもファイルでもソースにべた書きでもいいです。答えは誰かが書いてくれます。それまではスレで聞いてください。
**元ネタ [#wfadc8e5]
プログラミング初心者スレ・Part1~
http://yutori.2ch.net/test/read.cgi/news4vip/1195645613/~

-旧wikiから移行作業中。リンク切れなどあるかも。

#contents
 2 :以下、名無しにかわりましてVIPがお送りします。:2007/11/21(水) 20:50:08.21 ID:cmLDyUZr0
     基本形
     
     #include<stdio.h>
     
     void main()
     {
     
     return 0;
     
     }

*課題一覧 [#t977d1f0]
**ループ練習 [#d39c3a1e]
Hello World![改行]を5回表示させてください。
print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。
-出力結果
 Hello World!
 Hello World!
 Hello World!
 Hello World!
 Hello World!
可能ならコマンドラインから入力を受け取って、n回表示するように改造してください。
何回目のHello World!かも表示してみてください。
-実行例(Java)
 java hellos 7(ここはコマンドラインの入力)
 Hello World! 1
 Hello World! 2
 Hello World! 3
 Hello World! 4
 Hello World! 5
 Hello World! 6
 Hello World! 7
//Hello World連呼して済まない
せっかくだから何が悪いのかもちゃんと書きなさいよ><
**C言語 [#mbd3e531]
という訳で、元ネタで示された基本形の悪いと考えられるところを突っ込む。~
ちなみに、元ネタは以下のもの。

**素数 [#y0b85ec0]
***素数判定 [#s07e540a]
入力された整数が素数であるか判定するプログラムを作りなさい。
-回答例
--[[C言語版>プログラミング言語/C/素数判定]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#u543d3a3]]
--[[Python版>素数判定(with Python)]]
 #include<stdio.h>
 
 void main()
 {
 
 return 0;
 
 }

***素数を求める [#bc8736e8]
1からnまでの範囲の整数から素数を見つけてすべて出力しなさい。
一見どこにでもあるようなスタイルに見えるが、いくつかの真似するべきでない過ちを含んでいる。すなわち

ヒント:[[エラトステネスの篩-wikipedia>http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9]]
-main関数がvoid型になっている
-returnが値を返している
-使ってもいないライブラリを読み込んでいる。

-出力例
 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
というものだ。

-回答例
--[[Java版>初心者用課題/例/素数を求める/Java]]
--[[C言語版>初心者用課題/例/素数を求める/C]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#e48df6ac]]
**うるう年測定 [#i0d67516]
入力された整数がグレゴリオ暦(いつも使ってるやつ)でうるう年であるか判定せよ
最初の、main関数がvoid型になっているのは、非常によくみるコードだ。~
けれども、ANSIではmain関数はint型で定義するよう定められている。~
標準に従うべきか?という議論はあるだろうけれども、俺様オンリーソースでない限り、標準に従っておくのが無難だ。~
スレでは標準にこだわる標準厨が沸くことがあるが、
厳密に標準に準拠する必要はないと筆者は考えているので、
「可能な限り」標準に従えるよう、努力すれば十分だろう。~
それを差し引いても、voidなmain関数はよくない書き方だといえる。~
ちなみに、大学の講義で使われる教科書や、古いタイプの教授はmainをvoidで書きたがる傾向にあるので、注意が必要だ。~
さらにいえば、voidすら書かない古いタイプのものある"rogue"などがそうだ。

[[閏年-wikipedia>http://ja.wikipedia.org/wiki/%E3%81%86%E3%82%8B%E3%81%86%E5%B9%B4]]
次のreturnが値を返しているという点だが、
これは「mainがvoid型なのに、値を返すのはおかしい」という意味である。~
もしmainがint型なら、値を返すのもおかしくはない。~
voidのreturnで返された値は、処理系によっては無視されるだろうが、
厳密には正しくないので、returnだけにしておくか、そのまま`}`に落としてしまって、
voidであることを読み手に理解させたほうが良いだろう。~

-出力例
 1992年はうるう年です
 2000年はうるう年です
 2001年はうるう年ではありません
これらを踏まえて書くと、先の基本形は

-回答例
--[[C言語版>初心者用課題/例/うるう年測定/C]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#r3e10171]]
 #include<stdio.h>
 
 int main()
 {
 
 return 0;
 
 }
となる。~

**ハノイの塔 [#cce62ade]
与えられたn枚の円盤を用いたハノイの塔を''再帰的アルゴリズム''を用いて解くプログラムを作成せよ。出力は円盤の移動の記録及び手数とする。
今回はmainをint型に直したので、returnが値を返していてもおかしくなくなった。~
きちんとした土台の上に家を建てることが、丈夫な家への近道なのである。

[[ハノイの塔-wikipedia>http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94]]
-解答例
--[[Prolog>初心者用課題/例/ハノイの塔/Prolog]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#r9efcc5f]]
さらに言えば、1行目の

 #include<stdio.h>

**行列関係 [#r0678f80]
***転置行列 [#q9f27a17]
入力された行列の転置行列を求めよ
これも不要といえる。いわゆる"おまじない"とされるものであるが、
実際これは、画面に文字を表示する等(printf)の便利なライブラリを読み込んでいるに過ぎない。
だが、じっさいのプログラムは何もしていないのでこのライブラリ"stdio.h"はまったく利用されていない
ことになる。~
最終的には以下のように添削されよう。

-入力例
 1 2 3
 4 5 6
 7 8 9
-出力例
 1 4 7
 2 5 8
 3 6 9

[[転置行列-wikipedia>http://ja.wikipedia.org/wiki/%E8%BB%A2%E7%BD%AE%E8%A1%8C%E5%88%97]]

-回答例
--[[C言語版>http://blackapples.web.fc2.com/c/sample1.txt]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#o1ceec0c]]

**線形合同法 [#pc7a3f04]
線形合同法を用いて0<=x<1の範囲の乱数を発生させるプログラムを作成せよ。M=65536(=2^16),A=997,B=1,Xの初期値を12345として100個の乱数を発生させ,その値と平均を出力しなさい。

[[線形合同法-wikipedia>http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95]]

※実際のプログラムにこの乱数を使ってはいけません。あくまで初心者用課題です。実際はメルセンヌツイスタでも使いましょう。

-出力例
 0.8047  0.2430  0.2977  0.7755  0.1405  0.1119  0.5266  0.0315  0.4149  0.6418
 0.9050  0.2534  0.6121  0.2548  0.0421  0.9879  0.9665  0.6227  0.7974  0.0321
 0.9626  0.6673  0.2803  0.4326  0.3346  0.5605  0.8500  0.4865  0.0669  0.7243
 0.1161  0.7406  0.3940  0.8304  0.9378  0.9918  0.8002  0.8008  0.4246  0.2869
 0.0199  0.8074  0.9357  0.9228  0.0374  0.2719  0.0807  0.4464  0.0871  0.8663
 0.7188  0.6546  0.6535  0.5125  0.9595  0.5943  0.4708  0.3823  0.1620  0.5622
 0.5235  0.8976  0.9359  0.1054  0.0459  0.7303  0.1404  0.0206  0.5224  0.8023
 0.8850  0.3548  0.6873  0.2854  0.5290  0.4047  0.5252  0.6015  0.6818  0.7174
 0.2702  0.4225  0.2027  0.0897  0.4069  0.6702  0.2012  0.5684  0.6695  0.5166
 0.0366  0.4504  0.0425  0.3835  0.3182  0.2826  0.7602  0.9427  0.9056  0.8619
 int main()
 {
 
 平均=0.5070
-回答例
--[[C言語版>初心者用課題/例/線形合同法/C]]
 return 0;
 
 }

**数当てゲーム [#d082e883]
これは答えの数を探すゲームです。適当な数を入れると正解よりも大きいか小さいか,または正解であるか出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
-回答例
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#b1a863ae]]

**数当てゲーム その2(Hit&Blow) [#ffeaab60]
これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。~
具体的には~
正解が1234だとして~
4321 と入力 4blow~
1245 と入力 2hit 1blow~
なおルール上4422などのゾロ目の正解は出ないようにしましょう。~
また、先頭が0だとn桁の数字じゃなくなるのでせっかくなので0は発生させないようにしましょう。
-回答例
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#od23e209]]

**Fizz Buzz [#vd9b7570]
1〜100までの数字を表示するプログラムを作成せよ。
ただし、3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、3と5の両方で割り切れる場合は「FizzBuzz」を数字の代わりに表示すること。

-出力例
 1
 2
 Fizz
 4
 Buzz
 Fizz
 7
 8
 Fizz
 Buzz
 11
 Fizz
 13
 14
 FizzBuzz
 16
 (中略)
 98
 Fizz
 Buzz

[[FizzBuzz-wikipedia>http://ja.wikipedia.org/wiki/FizzBuzz]]

-回答例
--[[C言語版>初心者用課題/例/Fizz Buzz/C]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#xb9545ca]]

**カレンダー出力 [#i5e3e061]
年と月を入力してカレンダーを出力する。
画面フォーマットはCUI,GUI,WEB等自由とする
-回答例
--[[C言語版>初心者用課題/例/カレンダー出力/C]]
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#v8444f3a]]

**ポインタを使った構造体の加工 [#m81cd2c5]

**配列いじり [#w5561ad6]
配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。
例:
-置換前
 3 5 2 4 2
-置換後
 3 0 0 0 0

-回答例
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#d5c23dc0]]


**Caesar暗号解読 [#h54a0395]
Caesar暗号を解読するプログラムを作り,暗号を解読してください。
暗号鍵(何文字ずらすか)は不明ですが、文字列に"person"が含まれることがわかっています。ご利用ください。
Caesar暗号については[[シーザー暗号-wikipedia>http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7]]を参照してください。
-暗号文
"qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj"
(最初と最後のダブルクォートは除く)
-使用される文字の列
"abcdefghijklmnopqrstuvwxyz .,-"
(ダブルクォートは除く。空白もあります。注意してください。暗号文にセミコロン";"が含まれています。これは置換するべき文字列に含まれていないので、そのままにしてください。)

-回答例
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#h97ae94f]]
--[[C言語版>初心者用課題/例/Caesar暗号解読/C]]

**フィボナッチ数列 [#p59f794f]
フィボナッチ数列とは下記の数列のように今の項と前項の和が次の項となるような数列です。

1 1 2 3 5 8 13 21 34 55 89 144

課題1 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いて書いて下さい。ただしnはコマンドライン引数で得るものとします。
-回答例
--[[C言語版>初心者用課題/例/フィボナッチ数列1/C]]

課題2 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いずに書いて下さい。ただしnはコマンドライン引数で得るものとします。
-回答例
--[[C言語版>http://blackapples.web.fc2.com/c/sample2.txt]]

課題3 再帰呼出しを用いた場合と用いない場合、どちらがどのような点で優れているかを考えて下さい。
-回答例
--[[Blog参照>http://vipprog.blog108.fc2.com/blog-entry-9.html]]

**英単語しりとりゲーム [#d026f28e]
[[課題:しりとり]]
// {{quote_page('課題:しりとり')}}

**ファイル読み込んで標準出力に出す [#h5a7e0c7]
[[課題:ファイル入力標準出力]]

**Base64 [#u8004ae1]
入力されたデータをエンコード/デコードするプログラムを作成せよ。
データの入出力方法は自由とする。

[[Base64-wikipedia>http://ja.wikipedia.org/wiki/Base64]]

-回答例
--[[Ruby版>プログラミング言語/Ruby/初心者用課題解答例#q2bfc331]]

**累乗 [#x6e30de3]
aのn乗を返すような2引数の関数(メソッド)を下記の方法で作って下さい。ただしa, nは正整数とします。(0や負の数に関しては考慮しなくても結構です。)~
課題1. aをn回かけるループ文を使って作って下さい。

課題2. 課題1で作った物より高速なものを作って下さい。(計算時間のオーダーがlg(n)となるように)。~
計算時間のオーダーがlg(n)というのは平たく言えばnに対して計算の手間(例えばループ回数)がおおよそlg(n)回ということです。~
ここではnが8程度ならば凡そ3回、1024程度ならば凡そ10回の手間で計算できる、というように解釈していただければ構いません。
-解答例
--[[Blog参照>http://vipprog.blog108.fc2.com/blog-entry-14.html]]

[[プログラミング言語/Perl]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS