1 :
デフォルトの名無しさん :
2001/05/30(水) 01:50 コンピュータ言語を効率良く短期に確実に覚えたい!! VB・Java・VC++等
>効率良く短期に確実に覚えたい 失格です。
受験勉強だと思ってガリ勉したまえ。 ただ、世の中どうしてもプログラム的発想ができない人もいるので、 誰でも絶対にマスターできるというわけではない。 誰もが必ず東大に入れるわけではないのと同じ。勉強してもダメな人はダメ。
定期的にこの手のスレが立つね。 質問してる暇があるなら、とにかく始めろ!! と私は言いたい。
コードを書くべし! 書くべし! ひたすら書くべし!
8 :
デフォルトの名無しさん :2001/05/31(木) 09:23
わかりやすい ちゅー鳥ある で一通りなめて あとは自分で簡単なのからつくってみる サンプルつきのAPIとか関数のリファレンスもほしいですね 僕の場合Webと本で資料あさったり読んだりする時間と 書いてる時間は3:7くらい 新しい言語だと資料がすくなくて大変だね
プログラマ板で聞く
fj.comp.lang.cで質問しましょう。 きっと手取り揚げ足取り教えてくれますよ。
fj.comp.lang.cって何?
13 :
デフォルトのやる気なし :2001/05/31(木) 11:27
>>11 > きっと手取り揚げ足取り教えてくれますよ。
ワラタ。 (^◇^;
あるときふと何でも理解できるようになる
なこたーある。
そう突然、思考がプログラム的になるんだよな。 最近は、ものごとをクラスオブジェクトとしてとらえたりすることもしばしば。 現実世界で、デザインパターンを適用しようとしてしまうところまでいけばしめたもの。
17 :
16 :2001/05/31(木) 13:04
んなこたーない
18 :
16 :2001/05/31(木) 13:08
にしても、講義や授業で擬似プログラミング言語つかわずにC言語で説明しろやゴラァと、 先生に思わず言ってしまうくらいになればいい。
プログラミングの勉強は目隠しをして山を登るようなもんだ。 やたらツライし今自分がどこにいるのかも大体でしか分からないし、 下手すると崖から落ちたりもするが、 ただただ登っていれば気が付くと頂上に着いてるんだよ。 でもすぐにまた次の頂上が待ってるんだけどねー。
>>14 突然、神が降りる。プログラマなら一度は経験しますね。
>>20 あたぃ プログラマーになってから1年くらいだけど
なかなか神が降りてきません。
22 :
20 :2001/05/31(木) 17:38
>>21 小難しい本読むなり、トンデモな仕様の実装方法なり解放がみつからねぇ〜って
ぐらい悩んで、その日はスパっと帰ります。
家族でメシ食って風呂にゆっくり入って早く寝ましょう。
次の日、デスクに座った瞬間悩んでいた問題の解放が湧き上がってきます。
・・・って感じ。突然悟りが開けるから。
23 :
デフォルトの名無しさん :2001/05/31(木) 22:14
>20 ありますね 煩雑なクラス設計を眺めていたらデザインパターンに落とし込めることに 気づいて夢中でコーディングしたり 神が降りるって自分の場合 1 ひらめく 2 能率が一定時間驚異的にあがる の2種類あります
24 :
デフォルトの名無しさん :2001/06/01(金) 00:16
プログラミング言語とかライブラリ利用法の学習には、実際にコーディングしてみるのが一番効率良いと思うんですが。 でも、デザインパターンとかUMLみたいな知識の学習はちょっと違いますよね。 どういうふうにして馴れていきましたか?
25 :
デフォルトの名無しさん :2001/06/01(金) 00:40
まずプログラムを書き散らして、いろいろな場面で痛い目にあって、 ああやはりきちんとした方法論が必要だよなあ、と実感することが大切かな。 それをすっぽかして、いきなり *高級な* 方法論に触れても、 ありがたみを感じないだろうし、身につかないと思う。 こういう考え方をドキュソというんだろうか。 でもなあ。
26 :
デフォルトの名無しさん :2001/06/01(金) 00:49
確かに。 デザインパターンを勉強しても、過去に自分で似たような構造を作る経験があったりすると理解しやすい。 prototypeとかflyweightとか、すぐにはわからんかったよ。
27 :
デフォルトの名無しさん :2001/06/01(金) 01:39
>19-20 やる気が湧いてきました。ありが とぉっ!!
お!最近初めて神がおりてきたような感じにあったよ!
本質を捉えろ! あとは応用問題に過ぎなくなる。
がんばりすぎて神に召されないようにね!
32 :
デフォルトの名無しさん :2001/06/01(金) 16:19
33 :
デフォルトの名無しさん :2001/06/01(金) 18:25
ドキドキ...
最近さっぱり神が降りてきません もう歳かな
35 :
デフォルトの名無しさん :2001/06/01(金) 18:56
>34 あなたは神となり、どこかで頭を抱えている若手プログラマに 救いの手をさしのべるのdeath!!!!!!!!!!!!!!!
36 :
デフォルトの名無しさん :2001/06/02(土) 07:57
漏れの場合はとりあえず適当な本を一冊買っておいて、 遊びがてら適当にソース書いてみて行き詰まったときに初めて本で調べる。 漏れにとって本は辞書代わり見たいなもの。 面倒くさいから最初から通して読んだりとかはしない。
>>36 俺もそうだね、入門書は半分ぐらい読みながら進めるけど後は辞書的使い方になる。
入門書より索引やサンプルコードが充実してる本の方が良いやね まったくの初心者というのならば話は別だけど
俺は入門書で感覚をつかんでいろいろ遊べるようになったら詳細な本を買って辞書的につかいますね 入門書は再びやるときに感覚を取り戻すために使います。
たしかに、プログラミング言語C++を通して読む奴は少なかろう。
入門書相当ならネット探せばいくらでも載ってるし表面的なおいしい部分 しか書いてないので買うだけ無駄。一番必要なのは裏も表も網羅されて いる巨大なリファレンスマニュアルだけでいいよ。
42 :
デフォルトの名無しさん :2001/06/02(土) 20:52
>41 でも入門サイトって使えないのが多くて、探し回るくらいなら 本買ったほうが良かったりする 技術や言語にもよるのかなぁ 俺のレベルが低いせいもあるが・・
>>42 同感です
よく勉強のためにMSDNをみろ、とか言うやつが多いけど
効率よく勉強するには向いていない。
ある程度実力がついてからじゃないとMSDNやネットの情報は
活用できないと思われリ。
初心本は、技術や言語をオーバービューするのに良いと思う。 粗い骨組みを簡単な本で組み上げておいて、肉付けをリファレンス本でするのが良いのでは。
45 :
デフォルトの名無しさん :2001/06/04(月) 13:32
余計な注釈とか無しの簡潔に書かれた文法書やAPIのリファレンスを 頭からざっと読んで、ネットでサンプルコード探してざっと読んで、 あとは書きながら勉強、というのが良いと思う。 おれ年寄りだから、AT&T の c-frontについてきた"Annotated" じゃ ないただの C++ reference manual で C++ 学んだ。ページ数少ない ので読むのはラク。
46 :
デフォルトの名無しさん :2001/06/04(月) 14:06
リファレンス本だけで全体像がつかめるには、それなりの経験が必要ですね。
47 :
デフォルトの名無しさん :2001/06/04(月) 20:16
入門書と謳ってるのに、サンプルコードが解説対象以外の機能 盛り込みまくりで、解説も難解なのってたまにありますよね。 その分野の本がまだそれしか出てない場合は仕方なく買ったりしますが、 読んでいて切れそうになります
48 :
デフォルトの名無しさん :2001/06/04(月) 21:03
>>19 C始めてまだ2ヶ月・・
挫折しつつも、簡単なプログラム作って達成感に酔いしれてる
ちょっとやる気が沸いた今日この頃(´ー`
49 :
ジャヴァック :2001/06/04(月) 23:02
暗記しようとは思わないこと。 その時は理解できなくてもいいから闇雲にコーディング。 いずれわかります。 理論は後から付いて来ます。
50 :
デフォルトの名無しさん :2001/06/04(月) 23:08
>>48 わかるわかる!
漏れもC++始めた頃は辛かったよ…
電波さんですか?>51
53 :
デフォルトの名無しさん :2001/06/05(火) 00:10
>>50 いまは使いこなせてますか?
聞かせてくれ〜
勇気をちょうだい♪
54 :
244 :2001/06/05(火) 00:20
なめんなこのage荒らしが。冗談もほどほどにしとけやゴラァ。
55 :
デフォルトの名無しさん :2001/06/05(火) 16:02
>54、>51 電波さん怖い
なめんなよ
58 :
デフォルトの名無しさん :2001/06/11(月) 02:11
プログラム初心者の友達が会社で研修してます。 ちょっとその研修に疑問があります。 アルゴリズムの勉強がメインだそうで、 最大公約数や2分探索、クイックソートなどを 考えてコーディングって感じだそうです。 一日の80%以上は考えることに使って、 コーディングの時間の割合は20%くらいです。 もう3ヶ月くらいになりますが、 「画面に文字を表示させて、入力させて、表示と入力を判定して 正しかったら別の文字、ちがったらもういちど同じ文字を表示。 これを繰り返す」 って感じの簡単なプログラムをフローチャートにさせても ぱぱっと出来ないです。 発見させてるアルゴリズムを考えさせるよりも、 そのアルゴリズムを実際に使えるようにする場面を体験することの方を 重視すべきだと思います。 併せて、ある機能をプログラムに落とし込んでいく経験をどんどんするべきだろうと おもうし、そのために必要なAPIを見つけて使う勉強もしていくべきだと思います。 机上で考えることよりも、どんどんコーディングすべきだと 思うのです。 皆さんどう思われますか
>>58 >ちょっとその研修に疑問があります。
って〜か、「ちょっとその人の資質に疑問があります」
じゃねーの?
その会社の方針は正しいよ。というか素晴らしい。
長い目で社員を育てているんだから。
でも、その期待に応えられそうにないね、そいつ。
60 :
58 :2001/06/11(月) 02:27
こんなのもやってるそうです a^2=b^2+c^2 aとbとc、それぞれ整数で100以下の組み合わせをさがす もっとも効率のよいプログラムを書いてください 数字の組み合わせの例 5^2=4^2+3^2 僕は職業プログラマのくせに、 3重ループしか思いつかなかったです。
>>60 揚げ足を取るようで、ごめんなさい。
でも、整数ではなく、自然数ですよね。(^^;
62 :
デフォルトの名無しさん :2001/06/11(月) 03:19
>>60 その問題の答えを教えてください。
俺も総当りで、調べる方法しか思い浮かびません。
>>62 効率のよいプログラムが何を指すか分かりませんが、
計算量を減らす事を指しているのなら、これも総当たりですが、
配列を100の2乗分用意すれば、2重ループに減らせます。
また、平方根を求めるのが早い処理系なら、
毎回、根を求める事により同じく、2重ループに減らせます。
それ以上は、アルゴリズムを調べないと何とも…。
但し、本当に100以下で良いのであれば、
全て記録しておけば良いと思うのは、自分だけでしょうか…。
int n = 100; for (int b = 1; b <= n; b++) { for (int c = b + 1; c <= n; c++) { int a2 = b*b + c*c; for (int a = 2; a * a < a2; a++) { if (a*a == a2) { cout << "found! : " << a << "^2 = " << b << "^2 + " << c << "^2" ; break; } } } } でどうだろ? あうち、これのオーダー、計算わかんないや(^^;
65 :
デフォルトの名無しさん :2001/06/11(月) 06:00
(m+n)^2 = (m-n)^2 + (2mn)^2 でやれば? やはり 3重ループにはなるが。
>>65 それって本当に全部の場合を網羅できるのか?
a^2 = b^2 + c^2 ( a>b>c )で、メモリ効率を無視して、ループ1回に、 2重ループが1回で作ると(手抜きで配列を+1してますが)こんな感じです。 #include <stdio.h> #include <stdlib.h> #define MAX 100 typedef long Int; typedef long Long; void hit(Int i,Int j,Int k) { printf("%d^2 = %d^2 + %d^2\n",i,j,k); } int fermat () { Int *x1; Long *x2; Int i, j ; Long l; if ((x1=calloc(sizeof(Int),MAX*MAX+1))==NULL) { return -1 ; } if ((x2=calloc(sizeof(Long),MAX+1))==NULL) { free(x1); return -1 ; } for (i=1;i<MAX+1;i++) { l=(Long)i*i; x1[l]=i; x2[i]=l; } for (i=1;i<MAX+1;i++) { for (j=1;j<=i;j++) { l=(x2[i]+x2[j]); if (l<=MAX*MAX && x1[l]) hit(x1[l],i,j); } } free(x2); free(x1); return 0 ; } でも、自分のマシンでは、2500くらいまで(しか)動きま(せんで)したが、 やはりメモリを使い過ぎるため、毎回、根を求めた方が良さげです…。 int fermat () { Long *x2; Int i, j , k ; Long l ; if ((x2=calloc(sizeof(Long),MAX+1))==NULL) { return -1 ; } for (i=1;i<MAX+1;i++) { x2[i]=(Long)i*i; } for (i=1;i<MAX+1;i++) { for (j=1;j<=i;j++) { l=(x2[i]+x2[j]); k=sqrt(x2[i]+x2[j]+1); /* +1 はいらないかも… */ if (k<=MAX && l==(Long)k*k) hit(k,i,j); } } free(x2); return 0 ; } これでも、相当古い処理系でなければ、3重ループより早いかと…。
68 :
デフォルトの名無しさん :2001/06/11(月) 08:06
>>66 できます。証明はピタゴラスあたりが知ってるのでは..
ああ、すべての項を d倍する奴も含めてね、念のため。
>>68 計算すると、mn=1,0になるけど、本当に大丈夫なのか?
>>65 この式は元の式の変換ではなく、ただの恒等式だよ。
71 :
70 :2001/06/11(月) 09:06
まちがえた。恒等式は
(m+n)^2 = (m-n)^2 + 4mn
だった。
>>65 の式は完璧間違い。
72 :
デフォルトの名無しさん :2001/06/11(月) 09:57
>>60 ・a>b>=cを仮定して良い
・(a,b,c)=(偶,奇,奇),(偶,偶,偶),(奇,偶,奇),(奇,奇,偶)以外はありえないから無視する
これだけでかなり削減できる気がする。
なんで i^2 のテーブルを使わないの? int x[101]; for( i=1; i<=100; i++ ) x[i] = i*i; としておけば a^2=b^2+c^2 は x[a]=x[b]+x[c]。 すなわち x[] の集合内で A=B+C となる組み合わせを求めるだけ。
なんかCマガのクイズやってる気分だ・・・(藁
75 :
67 :2001/06/11(月) 21:04
今までとはアプローチを変えてみました。 a^2 = b^2 + c^2 ( a>b>c ) として、aとbの差をxと表すと、 c^2 = a^2 - ( a - x )^2 c^2 = 2ax - x^2 よって、任意の値(c)の平方(c^2)が 2ax - x^2 の式に当てはまるものを、 総当たりしてやれば良いので…。( 説明が下手でごめんなさい ) int fermat () { long *x,i,j,k,l; if ((x=calloc(sizeof(long),MAX+1))==NULL) { return -1; } for (i=1;i<=MAX;i++) { x[i]=i*i; } for (i=1;i<=(long)(MAX/1.4);i++) { for (j=1;j<i;j++) { k=x[i]-x[j]; l = k/j/2 ; if (l+j<=MAX && l>i && k==l*j*2) { hit(l+j,l,i); } } } free(x); return 0; } 2重ループのiとjは、それぞれ式のcとxに対応しています。
76 :
75 :2001/06/11(月) 23:13
何を電波ってたのだろうか…、と言う訳で訂正。 a^2 = b^2 + c^2 ( a>b>c ) として、aとbの差をxと表すと、 c^2 = a^2 - b^2 c^2 = ( b + x )^2 - b^2 c^2 = ( b^2 + 2bx + x^2 ) - b^2 c^2 = x^2 + 2bx よって、任意の値の平方(c^2)が x^2 + 2bx の式に…………… 申し訳ありませんでした。m(_ _)m プログラムの中身については、正し(くあって欲し)いと思います。
77 :
65 :
2001/06/11(月) 23:13 うむ、間違いだったよ
>>71 正解は
(m^2+n^2)^2 = (m^2-n^2)^2 + (2mn)^2
だったよ。訂正してくれればいいのに。
m=2, n=1 と置くと 5,3,4ね