• 締切済み

C#(超)入門本のテスト問題がわかりません……

プログラムの(超)入門本でC#を勉強しています。 しかし、収録されているテスト問題に、答えがなく、困っています。 解答をお教えいただけないでしょうか。 ◆問題:このカレンダーを、C#によって記述しなさい http://cdn.uploda.cc/img/img5000f0dac9286.jpg ◆自分の考え 横と縦をカウントするフィールドを作り、横を七回forループ、縦を四回繰り返す 日にちをカウントするstring型フィールドを作り、一回ループ毎に一つづつ足す int tate, yoko ; string hinichi ; for(tate=1,tate<=4,tate++){ for(yoko=1, yoko<=7,yoko++){ } } ↑ここから先を、どう書いていいのかがわかりません。 どうやって、開始を水曜日からにするのか どうやって、hinichiに、1づつ足していくのか どうやって、31でカウント増加をストップさせるのか よろしくお願いします。

みんなの回答

noname#217196
noname#217196
回答No.1

たぶんテキストをそこまでのページを読み返せばピンときそうに思います。 まずhinichiのデータ型は文字列型より正の整数型がふさわしいでしょう。するとインクリメントや31との数値比較ができるようになります。 ループからの脱出にはbreak, exitなどが使えますが、大外のループでhinichiが31以下か判定するほうがすっきりするでしょう。

xKURO-69x
質問者

お礼

ありがとうございました! 勉強になります!

関連するQ&A

  • [C言語]三目並べ

    三目並べのプログラムで、以下のようなコンピュータの思考ルーチンを作っている所なのですが、 /* 後手で先手に初めに真ん中に置かれたら角に置く */ /* 後手で先手に初めに角に置かれたら真ん中に置く */ この二つがうまくいかないようで困っています。どこか間違っているのでしょうか? void com( char te ) { int total,kado,aite,a,tate,yoko,ok = 0; /* 0 = 空 te = 1(○) → aite = 2(×) 1 = ○ te = 2(×) → aite = 1(○) 2 = × */ /* 勝てる場所を探す */ for ( tate = 0; tate < 3; tate++ ) { /* 横一列 */ if( brd[tate][0] == 0 && brd[tate][1] == te && brd[tate][2] == te ) { brd[tate][0] = te; return; } if( brd[tate][0] == te && brd[tate][1] == 0 && brd[tate][2] == te ) { brd[tate][1] = te; return; } if( brd[tate][0] == te && brd[tate][1] == te && brd[tate][2] == 0 ) { brd[tate][2] = te; return; } } for ( yoko = 0; yoko < 3; yoko++ ) { /* 縦一列 */ if( brd[0][yoko] == 0 && brd[1][yoko] == te && brd[2][yoko] == te ) { brd[0][yoko] = te; return; } if( brd[0][yoko] == te && brd[1][yoko] == 0 && brd[2][yoko] == te ) { brd[1][yoko] = te; return; } if( brd[0][yoko] == te && brd[1][yoko] == te && brd[2][yoko] == 0 ) { brd[2][yoko] = te; return; } } if( brd[0][0] == 0 && brd[1][1] == te && brd[2][2] == te ) { /* 斜め1 */ brd[0][0] = te; return; } if( brd[0][0] == te && brd[1][1] == 0 && brd[2][2] == te ) { brd[1][1] = te; return; } if( brd[0][0] == te && brd[1][1] == te && brd[2][2] == 0 ) { brd[2][2] = te; return; } if( brd[0][2] == 0 && brd[1][1] == te && brd[2][0] == te) { /* 斜め2 */ brd[0][2] = te; return; } if( brd[0][2] == te && brd[1][1] == 0 && brd[2][0] == te) { brd[1][1] = te; return; } if( brd[0][2] == te && brd[1][1] == te && brd[2][0] == 0) { brd[2][0] = te; return; } /* 相手の勝ちを阻止する */ aite = te % 2 + 1; for ( tate = 0; tate < 3; tate++ ) { /* 横一列 */ if( brd[tate][0] == 0 && brd[tate][1] == aite && brd[tate][2] == aite){ brd[tate][0] = te; return; } if( brd[tate][0] == aite && brd[tate][1] == 0 && brd[tate][2] == aite){ brd[tate][1] = te; return; } if( brd[tate][0] == aite && brd[tate][1] == aite && brd[tate][2] == 0){ brd[tate][2] = te; return; } } for ( yoko = 0; yoko < 3; yoko++ ) { /* 縦一列 */ if( brd[0][yoko] == 0 && brd[1][yoko] == aite && brd[2][yoko] == aite){ brd[0][yoko] = te; return; } if( brd[0][yoko] == aite && brd[1][yoko] == 0 && brd[2][yoko] == aite){ brd[1][yoko] = te; return; } if( brd[0][yoko] == aite && brd[1][yoko] == aite && brd[2][yoko] == 0){ brd[2][yoko] = te; return; } } if( brd[0][0] == 0 && brd[1][1] == aite && brd[2][2] == aite){ /* 斜め1 */ brd[0][0] = te; return; } if( brd[0][0] == aite && brd[1][1] == 0 && brd[2][2] == aite ) { brd[1][1] = te; return; } if( brd[0][0] == aite && brd[1][1] == aite && brd[2][2] == 0 ) { brd[2][2] = te; return; } if( brd[0][2] == 0 && brd[1][1] == aite && brd[2][0] == aite){ /* 斜め2 */ brd[0][2] = te; return; } if( brd[0][2] == aite && brd[1][1] == 0 && brd[2][0] == aite) { brd[1][1] = te; return; } if( brd[0][2] == aite && brd[1][1] == aite && brd[2][0] == 0) { brd[2][0] = te; return; } /* 後手で先手に初めに角に置かれたら真ん中に置く */ if ( te == 2 ) { for ( a = 0; a < 9; a++ ) { total += brd[a/3][a%3]; } kado = brd[0][0] + brd[0][2] + brd[2][0] + brd[2][2]; if ( total == 1 && kado ==1){ brd[1][1] = te; return; } } /* 後手で先手に初めに真ん中に置かれたら角に置く */ if ( te == 2 ) { for ( a = 0; a < 9; a++ ) { total += brd[a/3][a%3]; } if ( total == 1 && brd[1][1] == aite){ brd[0][0] = te; return; } } /* ランダム */ srandomdev(); do { a = random() % 9; tate = a/3; yoko = a%3; if ( brd[tate][yoko] == 0 ) { ok = 1; } } while ( ok == 0 ); /* 盤面に書き込み */ brd[tate][yoko] = te; }

  • CSSで縦長・横長の写真を一定に並べたい

    写真のギャラリーのようなものを作成しています。 写真のサムネイルが200×150pxのものと150×200pxのものがあり、並びはランダムです。 この写真を正方形の方眼紙に並べるように配置したいと思っています。 テーブルで作成すれば楽なのですが、文書構造的にCSSで行いたいと思っています。 リストでマークアップして、それぞれのli要素を200pxの正方形にしてから、その中央に画像を表示させたいのですが… 縦長の写真はtext-align:center;で処理ができるので、できましたが、横長写真の上下位置が中央になりません。 横長写真が入っているli要素だけに対してクラスを指定すればできそうなのですが、数が多いので、一括で処理できないか、と奮闘しております。 試しにli要素に対してline-heightを200pxで指定し、img要素に対してvertical-alignをmiddleで指定してみたのですが、Firefoxではうまくいくものの、IE(8)でNGでした。 現在のソースは以下の通りです。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ギャラリー</title> <style type="text/css"> <!-- #content { width: 612px; } #content ul { margin: 0px; padding: 0px; } #content li { list-style: none; line-height: 200px; float: left; height: 200px; width: 200px; text-align: center; border: 2px solid #009933; } #content li img { vertical-align: middle; } --> </style> </head> <body> <div id="content"> <ul> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> <li><img src="images/yoko.gif" alt="横" width="200" height="150" /></li> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> <li><img src="images/tate.gif" alt="縦" width="150" height="200" /></li> </ul> </div> </body> </html> どなたかお分かりになる方、いらっしゃいましたら、お知恵を拝借できれば幸いです。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • 画像を順番にセルへ入れる(空白がある場合)

    画像の一覧をテーブルで作成したいです。 画像が増える可能性がありますので、画像が何枚であっても利用できるスクリプトにしたいと考えています。 例えば、画像が12枚の場合、 →横6枚並べるテーブルにすると、空白セルがなくきっちり画像のみでテーブルが完成する。 この場合は、いろんなコードを見よう見まねで下記のように作りました。 Total_set=12;//枚数 Img_Yoko=6;//横に並べる枚数 Img_Tate=Total_set/Img_Yoko;//行数 Kaku=".gif";//拡張子 ImgDir="./img/;//画像格納フォルダ Str = '<table cellspacing=0>'; Ga_Name=0;//画像の番号セット for(i=0;i<Img_Tate;i++){ Str += '<tr>'; for(j=0;j<Img_Yoko;j++){ Str +='<td>'; Str +='<img src="'+ImgDir+Ga_Name+Kaku+'" border="0"></td>'; Ga_Name++; } Str += "</tr>\n"; } Str += "</table>\n"; document.write(Str); 汎用性を持たせたいので、6で割り切れない時の処理をどうにかしたいのです。 例えば、画像が15枚に増えた場合、 →横6枚並べるテーブルにすると、3行目が3枚の写真と3個の空白セルになるようにしたい。 この空白セルの処理をどうしたらよいのか・・・悩んでます。余りとかを利用するのかな~?とかも考えたのですが、うまくいきません。 上記のスクリプトの改造、または全然違うやり方でも構いませんので、アドバイスよろしくお願いします。

  • ■Excel VBA グローバルな書き方■

    Sub 跳ね返る() Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim hyouji As String, yoko As String, tate As String hyouji = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do Cells(X, Y).Value = hyouji '★ For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next Cells(X, Y).Value = hyouji For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next          '★ If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If Loop End Sub ************************************ 上記のプログラムを Dim a() EndSub Dim b() EndSub Dim c() endSub Sub main() a b c EndSub のような、mainを動かせばabcも動く グローバルな(ローカルでもいいのですが) プログラムにするにはどうしたらいいですか? ★印から★印までの間の動作が同じような動作で 二つあるので、それを一つにまとめ 尚且つ、表示と時間稼ぎと表示削除の 3つの動作を分けた形にしたいです。 質問が下手で申し訳ありません…;;

  • SELECTすると変更できない?

    横が120以上のものの中から、縦が50であるものを1レコード消す という処理をします。 mysql_query('START TRANSACTION'); $sqlsel = 'SELECT id, tate, yoko FROM dbtb WHERE yoko > 120'; $res = mysql_query($sqlsel); while ($line = mysql_fetch_row($res)) {  if ($line[1]) == 50) {   $sqldel = 'DELETE FROM dbtb WHERE id = "' . $line[0] . '" LIMIT 1';   mysql_query($sqldel);  } } mysql_query('COMMIT'); やりたいことに対してストレートなソースではないですが、SERECTしてforでループさせているときに、途中でDELETEしてもレコードの削除はできるんですか?

  • 九九のプログラム

    public class kuku{ public static void main(String[] args){ int[][] hyou=new int[10][10]; System.out.print(" "); int i; int yoko; for(i=1;i<hyou.length;i++){ yoko=(int)(Math.random()*10); hyou[i][0]=yoko; System.out.print(" "+hyou[i][0]); } System.out.println(); int j; int tate; for(j=1;j<hyou[0].length;j++){ tate=(int)(Math.random()*10); masu[0][j]=tate; System.out.println(hyou[0][j]); }}} これを実行すると乱数がダブって表示されてしまうのですが、ダブらないようにし、appletで実行できるようにしたいのですがどのように直したらいいのでしょうか。どなたかアドバイスください。

  • ▲ExcelのVBA▼困っています

    何度もVBAで質問させてもらい助けてもらっています。 懲りずにまた質問ですが… 下のプログラムは"●"が跳ね返るものなのですが… ●の後を■と▲が追うようなプログラムにするには なにを追加すればいいのでしょうか…?; どなたか教えて下さい;;お願いします;; Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim maru As String, yoko As String, tate As String Sub 描画() Cells(X, Y).Value = maru End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() maru = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

  • コマンドライン引数

    コマンドライン引数で以下のようなプログラムを実行したいのですが どうしたらいいのか分かりません!! みなさんの意見を聞かせてください(lll´Д`lll)    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□ プログラムは途中まで作ったのですが、肝心なとこは 全く分りませんっっ #include <stdio.h> int main(int argc, char *argv[]) { int yoko, tate, i, j; if( argc < 3 ) return(1); sscanf( argv[1], "%d", &yoko ); sscanf( argv[2], "%d", &tate ); for( j = 0; j < tate; j++ ) { printf("\n"); } return(0); } /* end of pat2.c */

  • ●Excel VBA 配列●教えて下さい

    a~tの文字が順々に文字を追っていくプログラムにしたいと思い 配列を使用したのですが…プログラムが稼動しません、 下記のプログラムでは何が足りないのでしょうか わかる方いたら教えて下さい; 配列の使い方についてアドバイスがあれば そちらも教えていただきたいです…。 '――ここから―― Dim time1 As Integer, time2 As Integer, n As String Dim X As Integer, Y As Integer Dim yoko As String, tate As String Dim suuji (19) As String Sub 描画() Cells(X, Y).Value = suuji End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() suuji (0) = a suuji (1) = b suuji (2) = c suuji (3) = d suuji (4) = e suuji (5) = f suuji (6) = g suuji (7) = h suuji (8) = i suuji (9) = j suuji (10) = k suuji (11) = l suuji (12) = m suuji (13) = n suuji (14) = o suuji (15) = p suuji (16) = q suuji (17) = r suuji (18) = s suuji (19) = t For n = 0 To 19 Cells(X,Y).Value = suuji (n) Next X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub '――ここまでです―― 何度も同じような質問をさせてもらってすみません;

  • C言語の問題

    C言語の問題ができません。 誰か教えてください。 「複数の人の平均年齢を求めるプログラムを作成せよ。最後の人の年齢を入力した後には、負の数を入力するものと約束する。for構文を用いて各人の年齢の読み込みと加算を順次行ない、負の数が入力されたらこれを判定条件としてforループを抜け平均年齢を求めるプログラムにせよ。」 このような問題です。なるべく早くどなたか回答してもらえるととても助かります。

専門家に質問してみよう