goo blog サービス終了のお知らせ 

真・女神転生imagine-JZ13(バックアップ)

Broachで投稿していた記事のバックアップです。

今週はいろいろと

2010-07-31 23:26:17 | C言語教室での出来事
ある意味、良かった週かも、ですが。あくまで私個人にとっては。

講師から与えられた課題は1~52。
「○月○日までに13まで終わっといてください」
「○月○日までに40まで(以下略)」
という授業(?)の進め方をしています。

一応、「課題1はどういうことを習ってほしいかというと…」というような解説はあるのですが、あとは完全放置になります。
(解説と言っても、判っている人が相手も判っているつもりで解説するので全く理解できませんw)
それぞれがそれぞれのペースで黙々と勝手に進めていくような形です。
で、私はまだ35くらいまでしかできてないのですが、他の人で元々詳しい人はすでに52まで終わっています。

で、私は判らない人で、講師に聞きに行っても上記のような説明の仕方しかできない人なので理解できず、もう諦めて聞きに行かずに自分で本を読みながらゆっくり理解するようにしています。
本に集中していると、突然、講師の怒鳴り声が聞こえました。

「あなたね!それ、失礼じゃないですか?!」
講師席は教室の一番後ろにあるのですが、恐ろしくて振り返れないw

「ヘタクソってどういうことですか?一文字ずつしか認識しないように作ってるからですか?
あなたは出来るから?出来るからってどうなんですか?!
一人で先さき進めてますけど、あなたのプログラムはキレイじゃないでしょ?
ワタシ、何度も言ってますよね?!こういうふうに作ると他人が見て判りづらいって!
それを全く直さずに他人のプログラムにケチをつけるってどういうことなんですか?!
ヘタクソって、失礼でしょ!ヘタクソってどういうことなんですか?!」

とにかく声がでかいw
そしてこの講師、どうも話がループするクセがあるようで、何度も「ヘタクソ」を連呼しますw

叱られている相手は元々知識もあって、すでに52まで進んでいる人。
ただ、かなり影が薄くて声も小さい人です。
講師に対しても何か反論してるようですが、声が小さすぎて全く聞こえませんw

爺さん…もとい、講師の言葉だけ拾って要約すると、その人のプログラムが判りづらいので
卒業生の作ったプログラムをサンプルとして見せて「こういうふうに作ってください」と解説していた模様。
なんか、爺さんが気に入ってるらしい卒業生のファイルがあって、それをいつも見せられるのですが、「○○宣言」「入力部分」など、事細かにコメントが入ってるんです。

コメントというのは「判り切っている部分にはつけない」というルールがあります。
無駄にファイルが長くなって逆に見づらくなるからです。
「入力部分」なんて、誰が見ても入力部分(キーボードから文字を入力する部分)なので、本来はつける必要はありません。
しかし、ここは学校なので、後進の生徒はそれが入力部分だなんて判らないので非常に有難いのです。
(てゆーか、そこは講師が教えるべき所なんですが、卒業生のファイルを見て勝手に覚えてください、というスタンスの人なので^^)

しかし、判っている人が見たら恐らく「そんなトコまでコメント付けるなよ。鬱陶しい。」と思うでしょうね。
それで、叱られている人は「そんな初心者が作ったようなファイル見せられても。」という意味で「ヘタクソ」という言葉を使ってしまったんだと思います。

確かに失言ではありますが、だからってその一言だけを拾ってそんなに激怒しなくてもw
てゆーか、叱られている方の人の声が全く聞こえないので、講師が一方的に怒ってるだけに聞こえますw
なんとなく気が弱そうな人なので、驚いて黙ってしまったのかもしれません。
(私は、講師がループに入ったら「ハイハイわかりましたー!」と強制終了かましますw)

教室内が重ーい雰囲気になるのも構わず、講師は演説よろしく怒鳴り散らします。
「だいたいあなたね!そうやって自分ひとりで勝手に進めてますけど!
そんなに偉いんだったら、判らない人を教えてあげてくださいよ!
まだ15が終わってない人も居るんですよ!?
あなたはもう52まで終わったからヒマでしょ?!」

ちなみにこれも、「そんなに偉いんだったら」から無限ループで10分くらい同じ事言ってましたw
15が終わってない人、居心地悪いだろw
てか「周りの人を教えろ」って、自分の仕事、放棄かよwww
私はと言うと、講師が怒鳴り散らすので本に集中できず、「しゃーねぇ、休憩にすっかw」と出て行きましたw
そして。
煙草休憩後も講師の怒鳴りは続き、トータル30分くらい怒ってましたかね。
ある意味エネルギッシュw

しかし、それから後。

叱られた当人ではなく、もう一人、元々詳しい人が居るのですが、その人がやたらと周りに「どうです?判ります?」と声をかけてくれるようになったんです。
(喫煙者1/2いわく「急にフレンドリーになったよねwww」)
講師も怒鳴った甲斐があったねw
ぶっちゃけ、この人も判っている立場から教えてくれるので全く理解できませんw
だから2回目からはやんわり断ってますけどw
隣の席の人のほうが、ちゃんと判らない立場まで下りてから説明してくれるから理解できるんだよねw

まあ、叱られた人がスケープゴートになった形でしたが、教室内の雰囲気は良くなりました。
しかし気になるのは、その叱られた人が金曜日休んだこと…。
月曜から来るのかなぁ…?^^

金曜日のワ・タ・シ☆

2010-07-25 02:24:37 | C言語教室での出来事
20日までは「課題1から13までやってください」だったんです。
それが、21日から「みなさん13まではできましたね。では次は40まで…」
っておい!いきなり40かwww
しかも21日の丸一日使って14から40までの解説を一気にw
覚えられるかっちゅーねんwww

22日半日かかって14を作りました。(前半は説明をもう一度聞いていた)
で先日の23日。15を作るのにホントに丸一日かかったよw

そしてこれがモンダイの課題15。

------------------------------------
C課題15:制御構造
10個のアレーに下記のようにランダムに数
値が入っている。それを昇順に並べ変えるプ
ログラムの作成。また、ソート前のアレーとソー
ト後のアレーの内容を表示すること。
array[]={3,2,5,6,1,3,2,7,0,4}
-----------------------------------

めさ悩みました。
このへんから「ユーザー関数」が入ってくるのですが、
まずその「ユーザー関数」という存在を知りませんからね。
ちまちまちまちまmainの中で
「1個目と2個目を比較して、小さいほうを1個目の所に入れ替えれば…」
と作っていたら、ものすごゴチャゴチャしてきてワケ判らないことにw
ループを最低3つ作らなきゃいけないんですよね。
書いてる途中から
「ここのループがここに戻って、この処理が終わったらここに…戻るんだよね???」
と自分でも混乱して、どうしたらいいか判らなくなってきました。
ゴチャゴチャしすぎてて、動作と動作がうまくつながらず、暴走の嵐でw
で、考える。
「これってサブルーチン化できないのかな…?」
実はサブルーチン化、これが「ユーザー関数」です。
で、そこまでは考えついたものの、具体的にどうしたらいいかが判らないw
煮詰まって煙草休憩にw(勝手に出て行っていいんだ♪)

そこにはちょうどサボ…いや、煙草休憩していた喫煙者1/2が。
「どこまでできました?」と話題を振ってくれたので、「15で悩んでる」と言ったら
「ああ、それ僕、参考書丸写しで作りましたよwww」と。

教科書として使っている本のほかに、教室の本棚にいくつか参考書があり、
「判らない人は勝手にそれを見て調べてください」と言われるので利用してます。
で、ページを教えてもらって、同じく丸写ししましたw

int sort(int a[ ], int n)
 /* a=入力文字列*/
 /* n=データの個数*/

{
int min;
 /*最小値*/
int i,j;
 /*カウンタ用の変数*/
int min_no;
 /*最小値が格納されている要素番号*/

for (i=0; i<n-1;i++){
min_no=i;
 /*min_noを初期化*/
min=a[min_no];
 /*minを初期化*/

 /*最小データを探す*/

 for (j=i+1; j<n; j++){
  if(a[j]<min){
   min_no=j;
 /*最小データを入れ替える*/
   min=a[j];
  }
 }


 /*先頭のデータと最小のデータを交換する*/
 a[min_no]=a[i];
 a[i]=min;
 }
return (0);
}
(コメント欄まですべて丸写しw)

で。
写したはいいが、まったく意味が判らないw
その本の解説部分を必死で読むこと数時間。
昼休憩をはさんで、本の解説は理解したが、
このプログラムの何がどう「ソート」になるのか理解する為、
「aに具体的な数字を入れてどう動くか」を紙に書くw
「おけ!把握した!」と思った時にはすでに午後3時だったぜ♪
(途中何度か寝てたのはナイショだ)

そして、上記をプログラムに追加して、テスト。
…まったく動かない…^^;
なにしろ参考書に書いてあったのは上記のプログラムのみ。
これをどうやってmainの中に組み込むか、まで書いてないんだよねw
ここからまた四苦八苦。

学校は16時30分まで。
16時20分頃まであーでもないこーでもない、とやってたんですが、
見かねた隣の席の人が「どうしたの?」と声をかけてくれました。
で。

「あ、呼び出し方が間違ってるだけですよ。
ここの変数をこうして…こうして…」と直してくれたら
まともに動くようになったぉ♪ビバ隣の人♪

完成品はこちら。
/*============================*
課題名:C課題15:制御構造

引数: なし
戻り値: なし
*============================*/

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define OK 0
#define NG 1

/*==============*
*      ソート      *
*==============*/


上記関数部分貼り付け

/*==============*
*    メイン処理    *
*==============*/


int main(void)
{
int i;
int array[] = {3,2,5,6,1,3,2,7,0,4};
int n=10;


printf("ソート前=");
for(i=0; i<=9 ; i++)
 /*i番地のカウンタ。iが9になるまで繰り返す*/
printf("%d",array[i]);
 /*array[0]から[9]までの数値を連続表示*/
printf("10");
 /*改行のみ*/

/*ソート*/

sort(array, n);
 /*sort=上でつけた関数名。変数aに上記arrayの中身を代入、nに上記回数を代入*/

/*ソート終わり*/

{
printf("ソート後=");
for(i=0; i<=9; i++)
printf("%d",array[i]);
printf("10");
}
return(OK);
}


結果はこんなふうに表示されます。(点線なしね)
-------------------------------------
ソート前=3256132704
ソート後=0122334567
続行するには何かキーを押してください
-------------------------------------

ソート前の内容を表示後、関数を呼び出して演算したあと結果を表示、なだけですね。
arrayの中身を「キーボードから入力しろ」とか言われたらお手上げだが、これはとりあえず完成w

1課題1日使ってたら、課題40まで終わるのはいつになることやらw
…くそう。ここに貼り付けるとタブが表示できないからすごく見にくいw

自習→宿題へ

2010-07-18 16:58:34 | C言語教室での出来事
現在、教室内のほぼ全員が詰まっているのがこの課題。

課題名:C課題12:三項演算子

機能: キーボードから数字を入力して、その数値が
偶数か奇数かを表示するプログラムを作成。
数字以外は再入力する。
(三項演算子を使用すること)


で、基本的なプログラムはこれ。(中身だけ貼ります)

int main(void)
{
int a,x; /*aとxをint=整数として設定*/

scanf("%d",&a); /*10進法でキーボードからaのアドレスへ入力*/
x=a%2; /*aを割った余りをxに代入*/
(x=(x==1)? 75:71); /*xが1(真)ならばK(ascii75)を、1以外(偽)ならG(ascii71)をxに代入*/
printf("%c10",x); /*xの内容を文字として表示*/
printf("G=偶数、K=奇数10"); /*表示されるアルファベットの説明をしてるだけ*/
return(0);

}
----------------------------------------------
が三項演算子。
注1:文中の「10」は「改行」コードです。(ex.K=奇数10)
通常は¥n(半角で円マークエヌ)と書き、プログラムのオリジナルでもそう入力してますが、
ここに貼り付けるとCSSの関係からか、なぜかバックスラッシュエヌになってしまいます。
「読み替えてください」というのも見づらいかな、と思い、同じ意味の10に書き換えました。
(\nと入力して円マークエヌに見えてますか…?)

注2:/* */で囲まれた部分(緑文字)はコメントです。
環境はC++なので文頭に//とつけるだけでコメントになるのですが、授業内容がCなのでコメントの書式もCの書式で統一しています。
----------------------------------------------

これは、お題の「三項演算子」は使用していますが「数字以外は再入力」という動きはしないので×。
動きとしては「1」と入力したら画面に「K」改行して「G=偶数、K=奇数」とだけ出ます。
「0」と入力しても「G(偶数)」と表示されるという穴は目をつぶってやってください。そこ修正するのメンドいんでw
(2で割り切れるかどうかしか判定してないので、0を数字に含めないとなると数式からやり直すハメになる)

もともと「まあとりあえず、三項演算子を使って動くようにしてからifかなんかで分岐しよう」と考えていたのでここから改造を始めます。
改造したのがこちら。

int main(void)
{
int a; /*aをint=整数として設定*/

do   /*数字以外ならここに戻って繰り返し*/
{
printf("数字を入力して下さい10"); /*「数字を入力して下さい」を表示*/
a=getchar( ); /*文字を一文字ずつ(キャラクター属性で)入力*/

}while ((47 >= a) || (a >= 58)); /*数字/文字判定 数字以外を抽出*/

a=a%2; /*割って余りを求める*/
(a=(a==1)? 75:71); /*余りが1なら奇数K(ascii75):0なら偶数G(ascii71)を表示*/
printf("%c10",a); /*aの内容=入力された数字を表示*/
printf("G=偶数、K=奇数10"); /*表示内容の説明*/
return(0);
}

通常、これでお題はクリアです。通常は!
しかし、これを作っている途中でボソっと後ろのほうから講師の声が聞こえます。

「これだったら2ケタや3ケタ入力したらおかしくなるでしょ?よく考えなさいよ!」
他の人が叱られてる声でした。(言い方もかなりきつい)

確かに、上記のプログラムで複数ケタで入力してみると、最初に入力した数字しか残らないので誤作動します。
例えば、326と入力すると正解は「偶数」ですが、最初に入力した「3」しか認識できないので「奇数」と判定されます。
これが聞こえたので全員が一斉に「じゃあ複数桁で入力できるようにしようか」(☆これは簡単)と言っていた矢先。
(☆getcharをgetsに換えて「文字列入力」にし、キャスト演算子を使って文字列から数字に変換するだけ。あとは1ケタになるまで2で割ればオケ。)
他の人が「全部数字が入るとは限らないでしょ?途中でアルファベットとか入ったらどうするんです?」と言われ…。(今ココ
で、お題のハードルはどんどん高くなっていきます。^^;

<チラ裏>
みんな顔を突き合わせてボソボソと「なんか言ってることが変わってきてない?」と漏れる漏れるグチの嵐w
いや確かに、色々な可能性を考えなきゃいけないんでしょうけど、最初からそのレベル求められるの?って。^^
お題(=講師は『仕様書』と言います)は大雑把にしか書いてないのに、あとからあとから付け足されてイヤミっぽく感じるのですよ。
「現場では完璧な指示の仕様書なんてありませんよ!」なんて鼻高々に言われても、現場なんて出たことないしなぁ…てか、恐らくプロになんかならない(なれない)しなぁ…てw
</チラ裏>

scanf("%c",&文字列バッファ)で、複数桁を一文字ずつ認識する所までは成功していますが、その先が判らず、みんなで煮詰まってます。
恐らくバッファの番地番号で一文字ずつ「数字/文字判定」をやればいいんでしょうけど、まず何文字入るか未定ってところが…。
もっと根本的な所でも、キャラ属性で一文字ずつ認識したあと、数値(intとか)に変換する方法が判らない…。^^
scanfでc、d、f、なにで取っても最終的に整数にできないのでどうしたもんかなぁ…。
なのであとは自習でなんとか考えるのみです。死にそうです。

自習!

2010-07-18 14:56:20 | C言語教室での出来事
とゆーわけでVisual Studioも手に入れて、もっぱらネットで自習しております。
フレさんに教えてもらった「苦しんで覚えるC言語」というサイトを利用してますが、丁寧で判りやすいです。

もちろん、まったくの予備知識なしにここを見ても「判りやすい」かどうかの判断はできないと思いますが、一応私は学校で習ってますんで…。^^
とにかく、学校の講師は「自分が言い易い順番で説明しています」と公言するように、自分の思いつきで説明をしてくれるので、知識がピース状になってしまってうまくつながらないので、こういった「セオリー通りに説明」してくれるサイトを利用してバラバラのピースをそれぞれのブロックにつなげています。

もともと他言語などをやっていて予備知識がある人は、講師のやり方でも「○○を××に置き換え」たりして理解できると思うんですけどね…。(これが「経験者対象の講座なのか」と聞いた所以でもあります。)

自習のほうはまだ変数の辺りまでしかできてないのですが、判ると面白いです。
だいぶ理解できてきたようで、学校の課題(ループの辺りまで)も文法的な躓きなく進められるようになってきました。
(こないだ叫んでいた「○○でバッファ取ってるのに確保できてないのはなぜだぁぁぁ!←ラベル名だけで、型名が入ってなかった」という基本的なポカミスは勘弁)

長くなるから次の記事で具体的な課題&グチを炸裂♪

Visual Studioを借りてきたぉ

2010-07-15 20:23:54 | C言語教室での出来事
家でも勉強ができるように、と、ソフトを貸してもらいました。
さあ、インストール!!

…プロダクトキーどこだ…?
ああ、あったあった。説明書に隠れてた。
え…3ライセンス…?

1個目…「無効です」
2個目…「無効です」

…え゛。
入力ミスしたのかと激しく見直すも間違ってない。
ヤバい。あと1個しかないよ…?

3個目…通りました。
が、非常に不安に。

もしこれが3ライセンスしかなくて私が使ってしまったら他の人が使えなくなります。
びびって講師に直電してもーたw

明らかに「はぁ?なにいってんの?」というニュアンスで
「プロダクトキーは1回使ったら消えるというものではないので問題ないですよ?」

ええええ?うそぉぉぉ?!

講師「なにか違うのを入れたんじゃないんですか?」(=入力ミスしてるんじゃないのか?)

私「あー、じゃあ大丈夫なんですね?入れちゃいますよ?(最後のプロダクトキー)」

講師「別に心配するようなことじゃないです。今までも生徒さんが入れてますから。」

ほんまかぁぁぁぁ?今までに2人しか使ってなかった、とかいうオチじゃないよな???

で現在、激しくビビりながら入れてます。^^

しかし、大丈夫なのか?この講師。
ライセンスという概念を知らないのだろうか…?
ちゃんと電話もしたからいいよね?!

ちなみに。
他にもいろいろ(WINDOWS SERVERとか)入ってるぽいですが、
全部のプログラムをインストールすると1.7GBになるようです♪
インストール時間かかってたまらないのだがw