大学のプログラミング演習の課題を添削するスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/08/31(金) 04:21:39大学のプログラミング演習の課題をブラッシュアップしよう。
0002デフォルトの名無しさん
2007/08/31(金) 04:23:57問題は↓
ttp://www.syst.cs.kumamoto-u.ac.jp/~masato/pe2/
くれぐれも、担当助手に個別連絡しないようにしてください。
スレで十分に議論して結論をまとめてから、代表一名が連絡するように。
0003デフォルトの名無しさん
2007/08/31(金) 04:45:44不可でもつけられたのか?? 言いたいことあったら自分で言ってこい。
0004デフォルトの名無しさん
2007/08/31(金) 05:31:03> 問題2
> 以下のプログラムを見て,問に答えなさい.
> #include <stdio.h>
> #include <stdlib.h>
>
> #define SIZE 5
>
> int main()
> {
> int a[SIZE], i;
> int *b = (int *)malloc(sizeof(int)*SIZE);
>
> for (i = 0; i < SIZE; i++)
> a[i] = i * i;
>
> for (i = 0; i < SIZE; i++)
> b[i] = a[i];
>
> for (i = 0; i < SIZE; i++)
> printf("%d ", b[i]);
> printf("\n");
>
> return 0;
> }
0005デフォルトの名無しさん
2007/08/31(金) 05:31:37> 1. 「配列aとmallocで確保された領域bの違いは,
> 静的に確保されるメモリ領域と,
> __に確保されるメモリ領域という違いがある.」
> __に入る適切な言葉を以下から選びなさい.
>
> a.愛ゆえ
> b.俺的
> c.仮想的
> d.動的
これは酷い。
0006デフォルトの名無しさん
2007/08/31(金) 08:10:21にわかに
やにわに
0007デフォルトの名無しさん
2007/08/31(金) 08:37:54ttp://www.syst.cs.kumamoto-u.ac.jp/~masato/pe2/attendance.html
さすがに成績はロックしているようだけど何考えてるんだ?
0008デフォルトの名無しさん
2007/08/31(金) 09:11:060009デフォルトの名無しさん
2007/08/31(金) 09:32:320010デフォルトの名無しさん
2007/08/31(金) 09:36:49どっから、そういう発想が出てくるんだろ。
とっくに提出期限は過ぎている課題っしょ?
0011デフォルトの名無しさん
2007/08/31(金) 09:51:19成績提出期限までなら成績変えられるからなぁ
0013デフォルトの名無しさん
2007/08/31(金) 10:09:39リアルで死ね>>1
0014デフォルトの名無しさん
2007/08/31(金) 10:12:43へんてこなコードを書く人間を、
業界に送り込んでくる大学の
ほうが遥かにウザいのですが。
0015デフォルトの名無しさん
2007/08/31(金) 10:15:290016デフォルトの名無しさん
2007/08/31(金) 10:23:030017デフォルトの名無しさん
2007/08/31(金) 10:34:27いま教える立場にある人達がC言語を覚えたのは、
10年とか20年も前だったりするんだろう。
そして今だにK&Rを教科書として使っていたりしてさ。
大学は職業訓練校ではないぞ、と言いたい人もいるだろうが、
他所の国の大学生が書いたオープンソースのコードを見て、
自分のところの学生の書くコードと比べてみるべきだろう。
0018デフォルトの名無しさん
2007/08/31(金) 10:58:060019デフォルトの名無しさん
2007/08/31(金) 11:34:53staticという予約語がある以上、別の意味で「静的」なんて言うべきじゃないんだけど、まぁいいや。
0020デフォルトの名無しさん
2007/08/31(金) 12:42:38http://pc11.2ch.net/test/read.cgi/tech/1187521586/304-308
スレタイトルは添削とあるが、余りに酷いのでその気も失せた。
0021デフォルトの名無しさん
2007/09/01(土) 06:01:39あまりに酷い。
メモリの管理がテーマではないにしろ、mallocしたものをfreeしないで終了するなんて。
バグの原因になるのでfreeしないほうがいい教を布教するのは勘弁してほしいです。
0022デフォルトの名無しさん
2007/09/01(土) 23:58:400023デフォルトの名無しさん
2007/09/01(土) 23:59:460024デフォルトの名無しさん
2007/09/02(日) 00:00:28リアルで死ね
0025デフォルトの名無しさん
2007/09/02(日) 00:11:25あなたが自家用に書くプログラムで手抜きするのはいいが、学生に教えるのはマズいでしょう。
こういう例で勉強した学生さんは、freeする必要があるプログラムを書けないでしょう?
0026デフォルトの名無しさん
2007/09/02(日) 03:07:18それこそが、
バグの原因になるのでfreeしないほうがいい教
ってやつだな。
0027デフォルトの名無しさん
2007/09/02(日) 13:28:55この日付と内容の古臭さのギャップに驚いた
0028デフォルトの名無しさん
2007/09/04(火) 03:02:29ふつーJavaだろ?
0029デフォルトの名無しさん
2007/09/04(火) 06:52:48さび付いた頭でJavaを覚えなおせなんて酷だろう。
0030デフォルトの名無しさん
2007/09/04(火) 08:10:22課題の採点をするのは、助手とか博士課程の学生だよ?
だいたい、URLを削って出てくる研究室の研究内容は、
ttp://www.syst.cs.kumamoto-u.ac.jp/study.html
だよ。
JavaではなくCが必須だというのはわかるが、
プログラミングの基礎をCでやる必要はないと思う。
0031デフォルトの名無しさん
2007/09/04(火) 09:18:29言ってみれば、実験器具の使用方法を学んでいるのに等しい
のちのちC言語やFORTRANを使わされる人が多いからC言語やFORTRANを学ぶんだし
教養科目によっては「今の時代○○だよな」とかそういう「プログラミング思考なら何でもよし」なノリで選ばれることはあるけどな
0032デフォルトの名無しさん
2007/09/04(火) 10:05:530033デフォルトの名無しさん
2007/09/04(火) 17:43:16C言語である理由はほぼゼロだ
ポインタやらメモリ管理やらは不要な知識
Javaの「おまじない」もな
0034デフォルトの名無しさん
2007/09/04(火) 18:43:140035デフォルトの名無しさん
2007/09/04(火) 19:29:57MS-ExcelとVBAマクロで十分
だと思うんだよね。
変数や配列を表のオブジェクトとして持てば、
入出力のコードを書かなくて済むし、
処理中のデータの様子も見れるしさ。
キーボードからインタラクティブにデータを入力させ、
それをscanfで受けるとか、
もう、馬鹿馬鹿しい。
0036デフォルトの名無しさん
2007/09/10(月) 04:40:060037デフォルトの名無しさん
2007/09/18(火) 13:14:38ということでjavaなどやっても時間の無駄遣い。
というか自分しか使わないプログラムなんだから、スパゲッティだろうとメモリ管理がいい加減であろうと
どうでもよい。free()?いらねーよそんなもん。
大体、知識足らずを業界に送り込んでくるってなに甘えてんだ。
金融だろうと商社だろうと製造だろうと、どんな業界だって新入社員は実務経験ゼロで入ってくるんだよ。
そいつらを教育するところから仕事なんだろ。
多少なりともコンピュータに触る時間を作ってやった大学に感謝しろ。
0038デフォルトの名無しさん
2007/09/18(火) 13:22:05どうでもいいけど、マ板逝け
0039デフォルトの名無しさん
2007/09/18(火) 13:40:33いまどき学生の間にアルバイトやベンチャーで、
いくらでも実務経験を積んでいると思うのだが。
実務経験ゼロの人間も取っているが、
プログラミング経験ゼロは取っていない。
この違い、わかる?
仕事ではなく趣味や研究のために、
一人で我流でプログラムを書く技術があることを前提に、
複数人でチームを組み、仕事としてプログラムを書くために、
やり方や作法を矯正していくのが、実務のための教育。
0040デフォルトの名無しさん
2007/09/18(火) 16:26:25せめて、
間違ったことや変なことを教えて遠まわりさせるのだけは、
やめてもらいたい。
自動変数がメモリ上に静的に確保されるだなんて、
そんな言い方をするのは、大学だからといって許されることではない。
0041デフォルトの名無しさん
2007/09/18(火) 16:37:27バイトなんてただの社会見学だ、実務経験になんてならねえよ。
金融業務にバイトを携える企業があるか?? どこまで関われるかなんてたかが知れてる。
というかおまえさんは根本的に勘違いをしている。
>>複数人でチームを組み、仕事としてプログラムを書くために、
>>やり方や作法を矯正していくのが、実務のための教育。
大学はこんなことを目的としていない。
理系大学生のプログラミング教育は、自分自身で必要な数値解析を行えることを最終目的とする。
実務のための教育をされた人材を望むなら、まずそういう教育方針の学校探しから始めろ。
なんで学校で教えないんだよー、なんてのはただの甘えだ。
能力のある奴なんていくらでもいる。
結局、本人のレベルを見抜けなかった自分達が悪い。
0042デフォルトの名無しさん
2007/09/18(火) 16:52:19郵貯や社会保険庁のシステムの孫請けでアルバイトしていた学生が、
NTTデータに就職するなんていうのは、よくある光景なんだがなぁ。
上流工程をやる人間が現場を知らないと思ったら大間違いだよ。
できる学生は、ちゃーんと勉強している。
> 大学はこんなことを目的としていない。
当たり前だ。
あなたが引用した2行は、企業で行う新人教育の話だから。
その前提として、
> 仕事ではなく趣味や研究のために、
> 一人で我流でプログラムを書く技術
を、大学にいる間に習得しろという話なのだから。
0043デフォルトの名無しさん
2007/09/18(火) 16:59:33それは本当に正しい。
今の大学には、「情報教育」とか名乗っておきながら意味不明な授業を
展開する輩が多すぎる。
俺の分野で使うなら、どう確保されるなんて構わず、変数として使えれば困らん。
だから、こうすれば使えます、こう書けばいいんですとまでしか言わない。
もちろん聞かれりゃ答えるし、勉強したくなったやつは自分でしてる。
嘘を教えることは最大の罪だ。
これは、教育機関として絶対に許されるべきことじゃない。
0044デフォルトの名無しさん
2007/09/18(火) 17:13:23それは本当に正しい。
今の大学には、「情報教育」とか名乗っておきながら意味不明な授業を
展開する輩が多すぎる。
俺の分野で使うなら、どう確保されるなんて構わず、変数として使えれば困らん。
だから、こうすれば使えます、こう書けばいいんですとまでしか言わない。
もちろん聞かれりゃ答えるし、勉強したくなったやつは自分でしてる。
嘘を教えることは最大の罪だ。
これは、教育機関として絶対に許されるべきことじゃない。
>>42
そういう奴らは、今話してる「変な教育受けた使えない学生」じゃないでしょ。
もともとインターンなりで十分判断できた上で採るんだから。
今は、「大学でて、とりあえずプログラマ受けてみました」っていう学生についてだ。
そういう奴らが怪しげな知識を持っている、これは大学が悪いのか?? っていうことを
話してるんじゃないのか??
>仕事ではなく趣味や研究のために、
>一人で我流でプログラムを書く技術
だからこれは今の段階で十分取得できている。
あんた、大学研究で必要とされるプログラミングレベルを過剰評価してないか??
0045デフォルトの名無しさん
2007/09/18(火) 17:14:200046デフォルトの名無しさん
2007/09/18(火) 17:42:01> だからこれは今の段階で十分取得できている。
mallocしてfreeしないのは、習得できているとは思えないけどな。
少なくとも情報工学とか銘打っているところでは、許されないだろう。
たとえば生物工学の人なら、
研究のための道具の1つに過ぎないプログラムを書くというのなら、
目的どおりに動けば何でもいいと思うよ。
でもね、情報工学の人は、それはダメだろう。
学部1〜3年で様々な講義を受けておいて、
いざ研究となったら、それらを全て無視して、
動けば何でもいい、というのはお粗末過ぎる。
0047デフォルトの名無しさん
2007/09/18(火) 18:13:32たしかにそれは正しい。そのへんは>>44でも言ったとおり、許しがたい奴らが大勢いる。
これ以上なんか言うと教育論になってしまうな。
0048デフォルトの名無しさん
2007/09/20(木) 21:56:23常駐プロセスなら free するべきだろうけど、malloc したら必ずしも free する
必要はあるまい。
0049デフォルトの名無しさん
2007/09/20(木) 21:59:300050デフォルトの名無しさん
2007/09/21(金) 00:10:46ソフトウェア工学とか勉強しておいて、
そういう非対称で歪なプログラムを書くのは、
キチガイだと思うんだが。
0051デフォルトの名無しさん
2007/09/21(金) 00:20:43キチガイがあふれている世の中では生きにくいですね><
0052デフォルトの名無しさん
2007/09/21(金) 00:32:53今よりもずっとずっと未発達だった頃の
やりかたでやるのは、どうかと思うよ。
20年前と同じじゃん、と。
0053デフォルトの名無しさん
2007/09/21(金) 00:34:410054デフォルトの名無しさん
2007/09/21(金) 00:40:47そういう考え方は、昔にあったな。
プロセスの寿命は短く、
freeはバグの原因になるから、やらないこと
そういってプロセスをぼっこぼこforkしまくるというのが。
0055デフォルトの名無しさん
2007/09/21(金) 00:44:05というのなら、まだ、いい。
freeがバグの原因だとか言うようじゃ、死んだほうがいい。
freeして問題になるようなら、freeしなくても問題なんだ。
ただそれが、表に出て来ないだけで。
0056デフォルトの名無しさん
2007/09/23(日) 23:45:000057デフォルトの名無しさん
2007/09/24(月) 02:46:16いきなり何を言い出すんだ。
学生の教育なのだから、
たとえ例題が小さなプログラムだろうと、
大きなプログラムと同じようにやるべきだろう。
それともなにか、
あんたのところの研究では、
小さなプログラムだけで片付くのかい?
0058デフォルトの名無しさん
2007/09/24(月) 02:54:000059デフォルトの名無しさん
2007/09/24(月) 03:31:09なにその大きなプログラムとか小さなプログラムとか。
まずは、プログラムの大きさについて書いてくれ。
0060デフォルトの名無しさん
2007/09/24(月) 03:45:09小さなプログラムだから、適当でいいじゃん、という主張をしている人に聞いてくださいな。
0061デフォルトの名無しさん
2007/09/24(月) 03:49:50>>57 と同一人物なのかわかんないけど。
「小さなプログラム」という言葉は、このスレでは >>57 が初めて使ったと思うんだ。
なにをもって「小さなプログラム」としたいのか明らかにしてもらわないことには
話が進まないと思うよ。
0062デフォルトの名無しさん
2007/09/24(月) 04:03:14「小さなプログラム」という言葉は出てなかったね。
たとえば>>4のようなプログラム。
0063デフォルトの名無しさん
2007/09/24(月) 15:45:460064デフォルトの名無しさん
2007/09/29(土) 16:21:570065デフォルトの名無しさん
2007/09/29(土) 22:02:41free(p) ;
が
oPoolHoge.free(p) ;
とかになるだけじゃん。
0066デフォルトの名無しさん
2007/09/29(土) 22:11:030067デフォルトの名無しさん
2007/09/29(土) 22:59:32そんなことなら、freeしないのと一緒だろ。
0068デフォルトの名無しさん
2007/09/29(土) 23:06:001つは、その関数が繰り返し呼ばれたときにメモリリークしないこと
もう1つは、ポインタの指す先が無効であることを明確にすること
0069デフォルトの名無しさん
2007/09/29(土) 23:52:04スタックでなんとかならないか検討する。
atexitだけじゃなくて、atreturnとかatendofscopeがあればいいのに。
0070デフォルトの名無しさん
2007/09/30(日) 00:54:34C++のデストラクタは、スコープ抜けるタイミングで呼ばれるよ。
0071デフォルトの名無しさん
2007/09/30(日) 08:26:26RAIIでちゃんとやれば、リソースの解放忘れは、だいぶ気にしなくて良くなりますね。
GCC使うなら、Cでもcleanupのattributeをつけてやれば、似たことは出来ますけど。
0072デフォルトの名無しさん
2007/10/15(月) 08:50:100073デフォルトの名無しさん
2007/10/15(月) 15:21:270074デフォルトの名無しさん
2007/10/17(水) 10:49:14for(i in 1:9){for(j in 1:9{
の後はどうすれば九九が出ますか?
わからないんで教えてください。
0075デフォルトの名無しさん
2007/10/17(水) 13:16:190076デフォルトの名無しさん
2007/10/17(水) 13:47:58冗談はよしてくれ。
0077デフォルトの名無しさん
2007/10/17(水) 18:49:58#include<stdio.h>
#define MAX 9
int main()
{
int i, j;
for(i=1; i<=MAX; i++){
for(j=1; j<=MAX; j++)
printf("%d * %d = %d\n", i, j, i*j);
}
return 0;
}
多重ループが理解できればおk
0078デフォルトの名無しさん
2007/10/18(木) 16:11:10これのやりかたを教えてください。
0079デフォルトの名無しさん
2007/10/18(木) 16:56:32double x[101] = {0, 10};
for (int i = 1; i < 100; ++i) x[i + 1] = 0.5 * x[i] + 1;
0080デフォルトの名無しさん
2007/10/18(木) 18:00:48宿題を代わりにやるスレではないんだが。
ネタを振るなら、
大学名・学科名・教授名・科目名などを明らかにした上で、
問題の全文を晒してくれ。
0081デフォルトの名無しさん
2007/10/20(土) 13:09:45だから、
x[i]=pow(0.5,i-1)*8+2 だね。あとは適当に i を決めれば?
0082デフォルトの名無しさん
2007/10/22(月) 10:16:22スレ違い。
0083デフォルトの名無しさん
2008/02/01(金) 07:34:48高専>京大>東工・理科大>大学校・図書館情報≫電通・農工≫早慶≫高卒(農・水)>高卒(工・商)≒一橋>(要再教育の壁)>中卒≒高卒(普通)>(矯正不能の壁)>ソウル大(笑)≒東大
0084デフォルトの名無しさん
2008/02/16(土) 08:34:45当方文系私大5回生です。
プログラミング入門という科目があって
そこで初めてプログラミングを経験したのですが(VisualBasicをやってます)
ベテランプログラマーの方々に質問です。
実技試験とか提出した課題が全て
「テキストボックスを空白にしていない(TextBox1とか入ってる)」
or
「名前書き忘れ(Form1.vb[デザイン]とForm1.vbの両方に記名が必要とのこと
ちなみに提出したフォルダ名は学籍番号なので個人特定可能)」
といういずれかの理由で評価対象外となり
0点にされて単位もらえずまたもや留年の危機ww
デバッグ無しで開始すると課題テーマ通り正常に動作するのですが・・・・
開始ボタンをクリックするとテキストボックスが空白になるように
自分なりに工夫してみたつもりでしたが裏目に出た結果になりました。
名前はForm1.vb[デザイン]とForm1.vbの両方に氏名表記がないと
採点するつもりはないと断言されてしまいました。
片方あればいいと思ってたorz
この採点基準はプログラマー的には普通なんですか?
「その2つは講義中に当然の常識的プログラミングマナーとして注意した」
と言いくるめられてしまったが、タイピングに必死で先生の発言なんて
聞いてる余裕なかったんだよおおお
これは独り言ですが、私と同様の感覚で提出していた友人二人はちゃんと点数ありました。
なんでやねん。
0085デフォルトの名無しさん
2008/02/16(土) 10:34:58だから高校のときに皆必死でより偏差値の高い大学目指して勉強するのだ
0086デフォルトの名無しさん
2008/02/16(土) 10:52:170087デフォルトの名無しさん
2008/02/16(土) 10:58:120088デフォルトの名無しさん
2008/02/16(土) 12:38:450089デフォルトの名無しさん
2008/02/16(土) 13:31:16そいつの署名が残ってたから
0点にされただけだろうな
0090デフォルトの名無しさん
2008/02/18(月) 18:18:270091デフォルトの名無しさん
2008/02/18(月) 18:33:030092デフォルトの名無しさん
2008/02/19(火) 05:34:550093デフォルトの名無しさん
2008/02/19(火) 11:48:120094デフォルトの名無しさん
2008/02/19(火) 19:46:330095デフォルトの名無しさん
2008/02/20(水) 18:48:40処理単位に複数プロセスにして殺せばいいか。
0096デフォルトの名無しさん
2008/03/21(金) 00:31:42またfree()不要論者かよ。
すくなくとも教育なんだから、
きちんとリソースの管理をするように教えるべきだろ。
0097デフォルトの名無しさん
2008/03/21(金) 01:25:37本当に優秀で実戦的なノウハウ豊富なプログラマの人は、
他人にそれを教えることよりも、より多くのソフトウェアを産み出すことに、
限られた時間を使うだろう。
一流のプログラマとしてやっていけず脱落した人、
もしくは、疲れて引退した人でなければ、
とてもではないが、入門書を書くような暇はないだろう。
ろくな本がない理由は、そういうことだと思う。
0098デフォルトの名無しさん
2008/03/21(金) 03:07:490099デフォルトの名無しさん
2008/03/21(金) 05:48:36俺もそう思ってた
焼酎学校にまともな教師がいないのも同じ理由らしい
0100デフォルトの名無しさん
2008/03/22(土) 14:53:22コンサルタントは机上の空論の専門家だからな。
0101デフォルトの名無しさん
2008/07/09(水) 02:10:32頭おかしいよ
97の考えには同意できない
脱落とか、引退とか、
所詮生きてくための職業だろうが、
なんでそんな必死になってんの
0102デフォルトの名無しさん
2008/07/09(水) 05:30:03誰かわかる人がいれば教えてくれませんか。
ttp://uproda11.2ch-library.com/src/11100317.jpg
実行結果
データを読み込むファイル名を入力してください:input02.txt
データベース内のデータを並び替えます
並び替える科目を選んでください
(1)数学 (2)英語 (0)終了:1
並び替える順序を選んでください
(1)昇順 (2)降順 (0)終了:1
並び替える方法を選んでください
(1)単純交換ソート(バブルソート) (2)単純選択ソート
(3)クイックソート (0)終了:1
データベース内のデータを先頭から順番に表示します
Name: Spike
Math: 45 Eng: 30
Name: Rachel
Math: 55 Eng: 85
・・・・・・・・
・・・・・・・・
Name: Ross
Math: 90 Eng: 85
0103デフォルトの名無しさん
2008/07/09(水) 07:37:27同意!
0104デフォルトの名無しさん
2008/07/09(水) 11:02:00いちいちfreeすることに気を使うことよりも、より多くのソフトウェアを産み出すことに、
限られた時間を使うだろう。
一流のプログラマとしてやっていけず脱落した人、
もしくは、疲れて引退した人でなければ、
とてもではないが、freeを過不足なく丁寧に書くような暇はないだろう。
メモリリークしないOSやアプリケーションがない理由は、そういうことだと思う。
0105デフォルトの名無しさん
2008/07/09(水) 13:06:03何が分からないのかな?
0106デフォルトの名無しさん
2008/07/10(木) 01:07:44丁寧に書いてさえも、足りなかったり、余計な free() を取り除けなかったりする。
どっかの文庫のしおりにあったが、間違いを犯すのは、人間に与えられた(機械には与えられない)優れた能力だ。
丁寧さ、慎重さは、プログラマにとっては美徳だと思う。
コンパイルする前に、コミットする前に、デプロイする前に、少し思いをコードに馳せてみよう。
0107デフォルトの名無しさん
2008/07/17(木) 16:14:35どんな仕事でもそうだが、第一線で働き続けるというのは難しいのですよ。
0108デフォルトの名無しさん
2008/07/17(木) 16:16:570109デフォルトの名無しさん
2008/07/17(木) 16:17:21その通り。
freeを人間が管理するのは一流のプログラマのやることではない。
0110デフォルトの名無しさん
2008/07/17(木) 16:18:24終わってるな。
いまどきデータベースって言ったら、なぁ。
C言語でやるこっちゃないよ。DBMS使え。
0111デフォルトの名無しさん
2008/07/17(木) 20:36:590112デフォルトの名無しさん
2008/07/25(金) 12:46:02あまりに複雑でどうしてもちゃんとfreeできないというならば、それはGCを使えということだ。
0113デフォルトの名無しさん
2008/07/25(金) 13:00:42ちゃんとfreeできないほど複雑にしてしまうのは、一流のプログラマのやることじゃない。
0114デフォルトの名無しさん
2008/07/25(金) 13:19:580115デフォルトの名無しさん
2008/07/25(金) 13:26:09プロの仕事だからこそ、参照カウントやGCという乱暴な解決手段を避けるのですよ。
それらは問題解決に役立つ便利なものに見えて、かえって問題をややこしくするから。
0116デフォルトの名無しさん
2008/07/25(金) 13:42:20複雑でどうしてもちゃんとfreeできないんだから仕方ないだろ! って音をあげつつ逆切れするのが三流プログラマ。
複雑にならないように設計し、あるいは、複雑にしろと命令されるような仕事をやらなくて済むようにするのが一流プログラマ。
0117デフォルトの名無しさん
2008/07/25(金) 13:48:46半泣きになりながらどこでfreeするか検討したよ。
で、終わってからatexit()みたいな仕掛けでデストラクタもどきを実装すればよかったことに気づいた罠。
0118デフォルトの名無しさん
2008/07/25(金) 15:17:250119デフォルトの名無しさん
2008/08/02(土) 22:32:52本当ですか?
0120デフォルトの名無しさん
2008/08/06(水) 11:37:470121デフォルトの名無しさん
2008/08/06(水) 19:18:55BSDは?Linuxは?win32は?
0122デフォルトの名無しさん
2008/08/07(木) 13:35:490123デフォルトの名無しさん
2008/08/08(金) 11:43:36プロセスが終了する時点でfreeされていないメモリブロックの有無を確認する
というのがあるのだが。
乱暴にfreeを省かれていると、そういう確認ができなくなってしまう。
0124デフォルトの名無しさん
2008/08/09(土) 09:26:21そうじゃなければ勝手にしろってだけでは?
0125デフォルトの名無しさん
2008/08/09(土) 10:30:13どれがリークに繋がらないfree省略で、
どれがリークに繋がるfree忘れなのか、
ちゃんと管理できていればいいんだがな。
つまり、
メモリリークの有無を確認するときのみ、
前者についてfreeを呼び出すようにマクロで切り換えてコンパイルできるように・・・
ってするくらいなら、freeって直に書いてもいいんじゃないか?
0126デフォルトの名無しさん
2008/08/10(日) 08:46:52そうですよね。宿題スレで
p = malloc(sizeof(struct node)) + 1;
と書いてしまって、自力で誤りがみつけられず、散々悩みました。
私の環境では、のミス含みでは一見、振る舞いに異常がみられず、ただリリースができない、という状況でした。
free() をきちんとかき動作確認をすることで、malloc() にミスがないことが同時に確認できるわけです。
0127デフォルトの名無しさん
2008/08/10(日) 10:01:46C++にするだけで解決する問題だね。free()するかどうかは殆ど関係ない。
0128デフォルトの名無しさん
2008/08/10(日) 11:03:19C++なら尚更、ちゃんとやらないと、大変なことになるぞ。
0129デフォルトの名無しさん
2008/08/11(月) 11:06:200130デフォルトの名無しさん
2008/08/11(月) 11:54:10今ならそうですが、はじめてみためには、free() がうまくいかないねー、くらいしかわからなかったのでした。
0131デフォルトの名無しさん
2008/08/11(月) 12:23:47mallocが管理してるところをぶっ壊してるとか。
ものによるけど、それなりの規模のプログラムなら、
データ構造ごとにalloc/free用の関数作っちゃうから、
直にmalloc/free呼ぶことはほとんど無い。
0132デフォルトの名無しさん
2008/08/11(月) 14:02:19デバッグビルドではヒープ破損のチェックとか自動で行われるんだが・・・。
0133デフォルトの名無しさん
2008/08/11(月) 14:17:540134デフォルトの名無しさん
2008/08/19(火) 14:07:300135デフォルトの名無しさん
2008/09/07(日) 05:00:140136デフォルトの名無しさん
2008/09/25(木) 12:21:50ポインタ求む。
0137デフォルトの名無しさん
2009/02/16(月) 13:16:310138デフォルトの名無しさん
2009/02/16(月) 15:46:160139デフォルトの名無しさん
2009/02/16(月) 15:48:380140デフォルトの名無しさん
2009/04/09(木) 18:47:590141デフォルトの名無しさん
2009/04/10(金) 21:11:400142デフォルトの名無しさん
2009/04/10(金) 21:53:110143デフォルトの名無しさん
2009/04/16(木) 00:41:120144デフォルトの名無しさん
2009/05/08(金) 11:30:45それ階乗じゃなくてフィボなっち数です!(問4)
http://www.syst.cs.kumamoto-u.ac.jp/~masato/pe2/05/index.html
0145デフォルトの名無しさん
2009/05/08(金) 23:56:350146デフォルトの名無しさん
2009/05/09(土) 08:48:160147デフォルトの名無しさん
2009/06/25(木) 00:02:23ループ用のiやjまでグローバル変数ってなCのプログラムってどうよ?
0148デフォルトの名無しさん
2009/06/25(木) 00:16:400149デフォルトの名無しさん
2009/06/27(土) 22:47:02数値計算やシミュレーションは、
ほぼ全ての変数をグローバルで書く方が効率良い。
0150デフォルトの名無しさん
2009/06/27(土) 23:27:090151デフォルトの名無しさん
2009/06/29(月) 13:02:330152デフォルトの名無しさん
2009/06/29(月) 16:38:50int foo;
void func()
{
for (foo = 0; foo < 1000 * 1000; ++foo) {
// some sequence w/o function.
}
}
最適化でこれ相当になるかもしれない。
int foo;
void func()
{
for (int ic = 0; ic < 1000 * 1000; ++ic) {
// some sequence w/o function.
}
foo = 1000 * 1000;
}
でも、ループ内部で(グローバルな)関数を呼んでいたら無理。
つまり、グローバル変数だけで書かれたコードは一般的に遅くなる。
# 開発効率がいいかどうかはプログラマ次第だが……
0153デフォルトの名無しさん
2009/10/12(月) 12:48:35コードは意図した機能をストレートに書くべし、速度のために変な工夫をしたくなっても我慢しろ
って叩き込むべきだろう。
それにしても>>144は酷いな。
学生さんから授業料とって教えているのに、なんで20年も昔の内容を教えるんだろうな。
0154デフォルトの名無しさん
2009/10/12(月) 13:13:571、main関数内にダラダラ書いてあること。
あの内容に付けるべき関数名はmainじゃない。
mainとは別の関数にして、mainからそれを呼ぶようにすべき。
たった1つの関数を呼ぶだけのmainであっても、それは無駄じゃない。
2、main関数は2つの別の機能を持ってしまっていること。
リスト構造の構築 と リストのダンプ は、別の機能だから、それぞれ関数にすべき
たった2つの関数を呼ぶだけの関数であっても、それは無駄じゃない。
3、list_newで、mallocが失敗した場合に備えてない
4、llist_newは、3つのメンバの初期値を引数で受け取るべき
メモリは確保したら速やかに初期化すべきで、ゆえに、引数で受け取った初期値を代入してから返すほうがいい
5、mallocしたのをfreeしてないぞ
6、引数で引き回すのが面倒という理由でグローバル変数を使うべきじゃない
短いプログラムだからグチャグチャでいい、なんてのは学生さんに教えることじゃない。
いずれ書く大きなプログラムのために勉強してるんだから、短くても、大きなプログラムと同じように書くべき。
短いプログラムでしか通用しないことを勉強するのは無駄だし、いざ大きなプログラムを書くとなったときに困るんじゃ・・・
0155デフォルトの名無しさん
2009/10/13(火) 11:26:16・フィボナッチ数列のバッファに使うのなら可変長配列で充分だし、実際にリスト構造を扱う応用ではC++でSTLを使えばいいからリスト構造を教える意義が殆どない。
・配列版において配列の初期化にmemset()を使っているが、これもナンセンス。グローバルに置くなら初期化自体不要だし、そうでなくてもmemset()の使い方が間違っている。
・そもそも個数の13をマジックナンバーで与えるのは下策。神経を疑うと言ってもいい。
・これは細かい話になるが、fib()は静的にすべき。main()であれこれやるなというのは>154に既出だが、激しく同意。
0156デフォルトの名無しさん
2009/10/14(水) 00:54:05>実際にリスト構造を扱う応用ではC++でSTLを使えばいいからリスト構造を教える意義が殆どない。
こういうことを言う馬鹿に限ってリスト構造も作れなかったりしてな。
0157デフォルトの名無しさん
2009/10/14(水) 04:00:13リストを自分で作ることまでは、やらなくてもいいと思う。
(やらなくてもいいと、出来なくてもいいは違う。)
大学の授業って、1つの講義で一週間に、
授業90分、演習90分、自習180分くらいでしょ。
1年でそれなりのところまで行かないといけないから。
20年前と今とで、教える内容が同じなのはオカシイ。
そんな学校を卒業しても、20年前の新人と同じレベルだ。
使えない。
今の時代なら、
1年生の最後には、Scott MeyersやHarb Sutterの本を理解できるレベルにないと。
0158デフォルトの名無しさん
2009/12/23(水) 01:42:25Cだからそういう面倒くさいことやる必要が生じるのであってこれがLispか何かの問題ならかなりすっきりするんじゃないかな。
0159デフォルトの名無しさん
2010/01/17(日) 06:51:52問題は穴埋め、つまり他の誰かさんが書いたコードから
その意図を読み取り、必要な変更を行えということだ。
ろくにドキュメントもないソフトウェア資産を継承しなければならない
今の時代に合った教育じゃないか。
0160デフォルトの名無しさん
2010/01/17(日) 09:19:43自由に使っていいのか明確に規定していない課題や試験は
まずいと思います
0161デフォルトの名無しさん
2010/01/26(火) 21:07:05> 1、main関数内にダラダラ書いてあること。
mainにダラダラ書いていい。
main内で**重複するコードがあれば**、
関数としてくくり出し、それを該当箇所で呼べば良い。
汎用的に括りだされた関数は、**使われる側**であって、
mainはそれを**使う側**でしかない。
> ・そもそも個数の13をマジックナンバーで与えるのは下策。神経を疑うと言ってもいい。
これも上のケースと同様。複数の関数をまたがるように、
それぞれの中で13が使われているのならともかく、各関数を使う側の文脈として、
mainのスコープ内で一箇所だけ使われてるのなら、何も困らない。
main以外の関数の中でマジックナンバーを使う件とは、話が違う。
main以外での場合は、汎用性を完全に失墜させる愚行。使われやすさが失われる。
> 3、list_newで、mallocが失敗した場合に備えてない
デーモンプロセスになるわけでもないプログラムならば、
失敗して結構。オチて結構。
> 5、mallocしたのをfreeしてないぞ
プログラムの動作としてバグっているのならともかく、
そうでないのなら、ましてや、
実行後すぐ終了するような小規模プログラムならば見過ごせる。
> 6、引数で引き回すのが面倒という理由でグローバル変数を使うべきじゃない
これだけは最高に同意。気軽にソレを使っちゃだめ。
0162デフォルトの名無しさん
2010/02/01(月) 16:13:43main()にだらだら書いていると、そのロジックを他から利用したくなったときに書き換えが多く発生する。
main()はコマンドインタプリタとのI/F関数と言う位置づけに留めて処理の流れを書かない方がいい。
と言うのが、ある程度再利用を考慮に入れたプログラムの場合の鉄則。
最初から使い捨てが目的なら>161の言うようにmain()にマジックナンバーでも処理でも資源解放の
省略でも好きなように書いていいと思う。逆に言えば、使い捨てじゃないならどうすべきかは自明。
0163デフォルトの名無しさん
2010/04/02(金) 18:13:12わざわざ悪い習慣を染み込ませてから、それを拭うような矯正をするのは無駄だと思う。
たとえば
printf("Hello, world!\n");
なんてのを手本として示す人がいるけど、
自分が落ちた落とし穴に後輩をも落す陰湿な行為だと思うんだ。
0164デフォルトの名無しさん
2010/04/08(木) 11:13:11それのどこが問題なのか、詳しく。
もし仮に、私が想定している点を指摘したいのなら多くの人が落とし穴の存在にも気づいていないと思うのだが。
0165163
2010/04/08(木) 18:26:13冗長なようでも
printf("%s", "Hello, world!\n");
や
fputs("Hello, world!\n", stdout);
とすべき。
あるいは1行ごとに出力なら
puts("Hello, world!");
でもいい。
失敗例1)
printf("100%suki!\n");
失敗例2)
void foo(char *str) {
中略
printf(str);
後略
失敗例3)
#define MESSAGE "hogehogehoge"
中略
printf(MESSAGE);
0166デフォルトの名無しさん
2010/04/08(木) 19:07:17まぁ、Cの入門書は実際に使っている人間が書いていないことはほぼ間違いないから仕方ないんじゃね?
>163はその手のバッドノウハウを纏めてwikiで公開してくれる気はないかい?
私も仕事をやめたらやろうかと思っているのだが、仕事をやめる気になれるほど稼げていないから未だ無理なんだ。
0167デフォルトの名無しさん
2010/04/08(木) 19:41:050168デフォルトの名無しさん
2010/04/08(木) 19:56:30strcpy_s()が標準じゃないこともそうだけど、strcpy()で起きる問題の全てを解決できるわけではないし。
そもそも、実務ではstrcpy()というか、単純な文字列コピーを行なう機会は殆どないと思う。
# sprintf()が強力だし、文字列をコピーしなくてもポインタを引き渡せば済むことも多いし……
0170デフォルトの名無しさん
2010/04/12(月) 07:38:27めちゃめちゃどうでもいいことだな。
こんなこと律儀にやってるやついないだろ。
0171デフォルトの名無しさん
2010/04/13(火) 00:13:37とても大切なことだよ。
何らかの教育機関でプログラミングを習うのなら、なぜ大切なのか教わって当然だと思う。
0172デフォルトの名無しさん
2010/04/13(火) 09:12:33引数の与え方がどれほど大切かね?w
0173デフォルトの名無しさん
2010/04/13(火) 16:58:48レポート課題は自分でやれ。
0174デフォルトの名無しさん
2010/04/14(水) 01:27:43バグに時間を取られないようにするためには、必要なこと
0175デフォルトの名無しさん
2010/04/14(水) 09:25:360176デフォルトの名無しさん
2010/04/14(水) 16:14:03printfは基礎段階で用いる例であって、printfの使い方「だけ」の話ではない
これが適切にできないやつは、他でも同様のポカをする
0177デフォルトの名無しさん
2010/04/14(水) 18:21:53何を根拠に…。
で、例えばどんなポカをすると? 同様の?
0178デフォルトの名無しさん
2010/04/14(水) 18:33:590179デフォルトの名無しさん
2010/08/17(火) 20:39:55誰か問題どっかにうpしてくれないかな…
0180デフォルトの名無しさん
2010/12/06(月) 15:25:53大学レベルのプログラミング演習の課題をブラッシュアップしていこうう。
0181デフォルトの名無しさん
2011/08/12(金) 04:34:07.97医師の土井里紗氏はこう言った。
「首都圏はチェルノブイリ事故のような汚染はない、とされてきたが、(調査結果は)それを否定するもの。
降り積もった(高濃度汚染の)砂塵(さじん)が風などで吹き上がれば、皮膚や粘膜に吸着される可能性もあります」
0182デフォルトの名無しさん
2011/09/28(水) 22:14:04.33schemeインタプリタやOSぐらい演習で書かせりゃいいのに
■ このスレッドは過去ログ倉庫に格納されています