スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-) | [編集]

プログラミングの授業のクラス分け

プログラミングの授業(JAVA)のクラス分けが今日ありました。
標準クラスと発展クラスがあり、発展クラスに属する条件は以下の2つの内、1つ以上を満たすこと。
・プログラミングの経験がある。
・(経験は無くても)やる気がある。
私は、前者をちょっぴり満たし、後者を満たすので発展クラスを希望したのですが、発展クラス希望者は簡単な問題を出され、それを任意のプログラミング言語で記述するちょっとした試験があったんですよ。
私はなんちゃってプログラマーなので本当に基本的なことしかできないので、テストの問題が解けなかったら発展クラスをあきらめて、標準クラスでまったりいこうと思いました。

<私のスペック>
・C++
独学
配列まではおk
構造体、ポインタは無理
・BASIC
数学の授業
配列まではおk
VBじゃないから行番号使いますwww



発展クラス希望者用設問
・発展クラスを希望した人は、つぎの設問に答えるプログラムを書いてください。プログラムは、どんなプログラミング言語で書いても構いませんが、まず、そのプログラミング言語名を書いてから、解答となるプログラムを書いてください。
(発展クラスを希望したがプログラミングの経験のない人は、プログラミング言語名のところに"経験なし"とだけ書いて、プログラムを書く必要はありません。)

二つの整数p,qが与えられたとき,pとqとの間に存在する整数(p,qは含みません。)の総和を変数sumに計算して残すプログラムを書きなさい。p,qの大小や符号がどうであるかについては何の指定もありません。

プログラムは、変数p,q,sumが与えられているものとして、その計算を行う部分だけを書いてください。計算にp,q,sumのほかに変数や配列が必要であれば、使ってもかまいません。ただし、p,q,sum以外に使った変数や配列については、どんな形(種類)のものとして使ったのか、説明を書き添えてください。



「これは解けそうだ!」と思って解くことにしました。

設問をよく読まずに、一生懸命C言語のヘッダ部分を思い出してた私、乙!
「何をincludeすればいいんだっけ?」とか全然悩む必要なかったのね><
てか、ヘッダ部分を書くにしても、普通の人は絶対こんなところで悩まないけどね!


まずは、問題の意図を解釈するところから始まりますね。

私が最初にした解釈
sum=p+q
アホすぎwww

次にした解釈
i=p
if(i sum=sum+i;
i++;
}
実際にはpがqより小さいとは限りませんね(´・ω・`)
そんなわけで、これもボツ。

そして、小さい方をs、大きいほうをbという関数を用意してそこに放り込めばいいことに気付いた。
この作戦なら2つめの解釈で作ったプログラムがほとんどそのまま流用できます。

「よし、書くぜ!」
って思ったら、なんかC++の細かい部分に自信がなくなってきたので、BASICに逃げましたwww

↓私の解答
PGクラス訳テスト-私の解答-
FC2ブログが不等号をタグと誤認してしまうので、画像を張りました。
かなりいい加減に作られたプログラムなので、初心者さんは見ない方がいいと思います(´・ω・`)
for文使うべきっぽいところもgotoで誤魔化してますしね(汗)

ブログ書いてて気付いたんですが、最後の一文の存在すっかり忘れてたwww
勝手にi,s,bという変数を用意したのに何の説明も書いてないやOTL

他にも不安要素がいくつか。
まず、110行目はいらないと思う。
次に、thenの後に2つ処理を並べるのを「,(カンマ)」で思い通りの結果になるのか不明。

↓テキストバージョン
pg_class_wake.txt

このプログラムを正しく修正してくれる神募集中です><
そもそも解釈の時点で間違ってるよ!っていう指摘があったらマジで教えて下さい。


<アマゾンリンク>
■私がC++の独学に用いた参考書と、そのシリーズ
やさしいC 第2版 やさしいC++ 第2版 やさしいJava 第3版
やさしいC 第2版
やさしいC++ 第2版
やさしいJava 第3版
■私が用いた開発環境(の最新版)
Visual Studio 2005 Academic Edition
Visual Studio 2005 Academic Edition
スポンサーサイト
日記 | 【2006-04-11(Tue) 23:28:56】 | Trackback:(1) | Comments:(4) | [編集]
コメント
コメント欄が小さいので見難かったらスマン
その問題は、計算する部分だけって事だけど動く形で投稿しちゃいます^^;問題の回答の部分は3行で終了w

#include <stdio.h>
#include <math.h>
int main(void) {
 int p,q;
 int num,sum;
 // 入力
 printf("p="); scanf("%d",&p);
 printf("q="); scanf("%d",&q);
 // pがqより大きかったら交換
 if ( p>q ) { q^=p; p^=q; q^=p; }
 num = q-p-1; // pとqの間の数の個数
 // 和を求める
 sum = (p+q)*num/2;
 // 表示
 printf("%d",sum );
 return 0;
}
2006-04-12 水  00:03:43 |  URL | やんぴん #Ial1ugQc [編集]
2度目の投稿スマンorz
さっき投稿したのが、即効で作ったコードで無駄が多かったので、改めて書き直したのを投稿します^^;

んで、全部書くのは面倒なので、その課題の答えになる部分だけw

sum = (p+q)*(abs(q-p)-1)>>1;

これ1行で終了♪無駄な変数一切無し&一行でしかも高速。
簡単に解説すると、「abs(q-p)-1」がpとqの間の整数の数で、後は等差数列なのでΣkの公式に放り込んで、÷2の部分をビットシフトで書いてできあがり~。

んじゃ、課題がんばってね~^^
2006-04-12 水  01:13:27 |  URL | やんぴん #Ial1ugQc [編集]
等差数列・・・そんなのもあったね(笑)
これが数学のテストとかで、計算するのが自分だったら何とか楽しようとして、その解法を思いついたかもしれないけど、今回はコンピューターが計算してくれるからね(´・ω・`)
いや、正確には書くだけで誰も計算しないかwww

ところで、「>>1」って記述は何?

あと、課題ではないよ。その場で書かされただけ。

授業の間が暇なので大学の端末室から書き込んでみましたb
2006-04-12 水  15:20:51 |  URL | 防衛結界@大学 #CSTlVyZA [編集]
「>>1」は右方向へのビットシフトで、要するに÷2。なぜ「/2」と書かないかと言うと、ビットシフトの方が速いから。

もっと詳しく知りたーいって時は、「ビットシフト」ってググってちょw
2006-04-12 水  22:03:03 |  URL | やんぴん #Ial1ugQc [編集]
コメントの投稿


管理者にだけ表示を許可する

トラックバック

この記事にトラックバックする(FC2ブログユーザー)

2006/04/15 19:45 | ミネシアブログ | pとqとの間に存在する整数(p,qは含まず)の総和 面白いネタがあったので遊んでみよう。元記事はhttp://aueu.blog18.fc2.com/blog-entry-195.htmlで、取り上げられている問題。以下に問題文を引用させてもらう発展クラス希望者用設問・発


Copyright © あぅえぅなブログ All Rights Reserved. Powered By FC2. 
skin:*cuteblog*   
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。