C/C++の宿題を片付けます 78代目

このエントリーをはてなブックマークに追加
952935:2006/12/13(水) 01:40:29
>>937-938
レスありがとうございます。

>>941
>>943
レスありがとうございます。
メモリの動的確保って言ってもデータを入れるためのメモリとアドレスを
入れるためのメモリの違いってことだったのですか。
詳しい解説ありがとうございました。
953デフォルトの名無しさん:2006/12/13(水) 01:41:37
>>948
staticなオブジェクトが0初期化されるのは立派にC言語の仕様であり
保障されているから心配無用。

どーしてもautoにしたいんなら
char *ppArea[MAX_LINE] = { 0 } ;
でよい。
954デフォルトの名無しさん:2006/12/13(水) 01:43:42
NULL == 0 ではないが、0はNULLという仕様
955デフォルトの名無しさん:2006/12/13(水) 01:48:09
callocなら領域確保と同時にゼロクリアされる。
956796だっけ?:2006/12/13(水) 01:48:18
JIS のページ探すの面倒くさい。
でも多数決で 0x00 は環境依存じゃないということで...
第一 static で取れば下品なコードじゃなくなるな。
>>952
ちゅことで >>938 でOK。だけど freeArea() の一行削除は忘れるな。

>>950
ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
957デフォルトの名無しさん:2006/12/13(水) 01:55:00
\0でNULLになるんじゃないの?
958デフォルトの名無しさん:2006/12/13(水) 02:02:42
>>957
そりゃ文字列の終端定義。
959952:2006/12/13(水) 02:04:44
>>956
はい、分かりました。
色々とありがとうございました。
960デフォルトの名無しさん:2006/12/13(水) 02:05:34
>>956
(void *)0はNULLだけど、NULLが全ビット0とは限らない。
961デフォルトの名無しさん:2006/12/13(水) 02:08:12
↑へ?どんな処理系?
962デフォルトの名無しさん:2006/12/13(水) 02:08:30
>>945
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

class symdata
{
public:
    string name;
    int cnt;
    int len;
    symdata() { cnt = 0; len = 0; }
    symdata(const string& s, int n)
    { name = s; cnt = n; len = s.length(); }
};

bool cmp(symdata *a, symdata *b)
{
    return (a->len > b->len);
}
963デフォルトの名無しさん:2006/12/13(水) 02:09:43
>>962のつづき。

main()
{
    string s;
    map<string, symdata> table;
    vector<symdata*> v;

    while (cin >> s) {
        if (table.find(s) == table.end()) {
            table[s] = symdata(s, 1);
            v.push_back(&table[s]);
        } else {
            ++table[s].cnt;
        }
    }
    sort(v.begin(), v.end(), cmp);
    for (vector<symdata*>::iterator i = v.begin(); i != v.end(); ++i)
        cout << (*i)->name << ":" << (*i)->cnt << endl;
}
964デフォルトの名無しさん:2006/12/13(水) 02:10:46
3vs3で開始する
965デフォルトの名無しさん:2006/12/13(水) 02:12:33
966デフォルトの名無しさん:2006/12/13(水) 02:13:40
>>959
教えていて気持ちがいいね。
熱心だしすぐ理解してくれるし。
でも毎回名前の番号が変わるからちょっと認識しにくかった。
まぁどうでもいいけど。
967950じゃないが:2006/12/13(水) 02:15:27
>>956
0をポインタに変換したらNULLに変換されるし
(NULLの内部表現が0でない環境ではコンパイラが変換コードを生成する必要がある)
NULL==0は NULL==(void *)0 と解釈されて1を返すけど
memsetはvoid *sの引数を*(unsigned char *)s=0見たいな感じで埋められるから
そこをchar *の値として参照してもNULLじゃないかもしれない
968デフォルトの名無しさん:2006/12/13(水) 02:15:29
Randomized quick sortまで実装したけどあってるかどうかの判別がつかない・・・ orz
969デフォルトの名無しさん:2006/12/13(水) 02:22:43
>>961
具体的な処理系は知らない。規格の話。
970デフォルトの名無しさん:2006/12/13(水) 02:26:32
純粋に規格的な話だと、staticオブジェクトの初期化は大丈夫。
memset()はNGかな。

まぁ、NULLのビット表現が0でない処理系なんて、intが16bitだったり
文字セットがEBCDICだったりするような処理系より全然レアっつか
俺は見たことないし、ぶっちゃけ気にする必要はないけどな。

んな処理系で動かしたら、多分他の部分で問題山積みだぞw
971デフォルトの名無しさん:2006/12/13(水) 02:26:57
>>967
signed bit の話なら立ってれば補数なので 0 なら立たないよ。
いや、俺が君の話を理解できないだけなんだけど。
まぁ疑問なら試せば良いと思う。
972デフォルトの名無しさん:2006/12/13(水) 02:29:57
>>971
>>967が言ってるのは全然そういう話ではない。
memset()は「ビット的に」ゼロにしてしまう。
だから、NULLが「ビット的に」ゼロで無い実装では、それを
「ポインタとして」解釈するとnull pointerではないということになる。

一方、ポインタへのゼロの代入は、たとえNULLが「ビット的に」ゼロでない
実装でも、いつでもnull pointerとして扱われる。
そうした実装の場合、staticなpointerオブジェクトに対しては、
null pointerをあらわすビット値が、おそらくCランタイムの
スタートアップコードによって書き込まれるはずだ。
規格に準拠するならば。
973デフォルトの名無しさん:2006/12/13(水) 02:44:08
↑なるほど、言いたいことは理解した。
けど、不毛だよ。

>>956 で俺が書いた
> ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
は『ビット的にゼロじゃないNULL』なんか無いだろって事。
君らは『ビット的に非ゼロなNULL』が存在しても良いって前提で話をしてるでしょ。

これは原理主義者と現実主義者の議論でしかないから....
俺はずっと memset() でポインタ初期化を続けるよ、まぁこれも memset() が個別代入より
早いっていう原理主義なんだけどね。
974デフォルトの名無しさん:2006/12/13(水) 02:48:17
>>973
単に「規格的はどうか」という議論をしているのに「俺様脳内方針」を
ブチ挙げる君も、随分空気読めてない人だな。
勝手にすれば?としか。

ま、実際問題としてはそれでOKであることは否定しないだろ、誰も。
975デフォルトの名無しさん:2006/12/13(水) 02:54:37
まぁまぁ。お二人とも。
宿題なんだから提出して採点者の前で動けばいいのだ。








じゃだめ?
976デフォルトの名無しさん:2006/12/13(水) 02:55:41
今はそんな話ではない。黙ってろ。
977デフォルトの名無しさん:2006/12/13(水) 02:58:23
じゃあ、俺はもう寝る
978デフォルトの名無しさん:2006/12/13(水) 02:58:31
つうかstaticオブジェクトの初期化についても知らないわ
サイズ固定の配列をわざわざmalloc()で確保するわ
null pointerに関する規格上の定義も知らないわ
しまいには俺は何がなんでもmemset()で初期化するんだとか逆切れか

なんか面白いもん見せてもらったわw
979デフォルトの名無しさん:2006/12/13(水) 02:58:56
↑お前バカ?
俺が書いたのは話が噛み合わない理由が
・俺は現実的な話をしてる
・俺以外は規格上の話をしてる
事を認めた上で不毛と書いただろ。
噛み合わない話を続けた非は認めるけどな。
980デフォルトの名無しさん:2006/12/13(水) 03:00:54
なるほど、規格も知らないで
「現実的な話」かwwwww
981979:2006/12/13(水) 03:01:41
すまん.
>>974 に対して書いた。
>>978
別に逆切れはしてないよ。
982デフォルトの名無しさん:2006/12/13(水) 03:45:13
>>790
s州大学だよな?いっそpdfうpしてくれたらもっと早くできたのに ゚・(ノД`)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3174.txt

・・・レポートは自分で書けよ?
983982:2006/12/13(水) 03:48:18
命令実行回数とか数え間違えてるかもしれないからチェックがんばって orz なんかもう眠い
984982:2006/12/13(水) 03:55:50
あとSelection sortは教科書見て書き直さないとバレると思うぞ
連投スマソ
985デフォルトの名無しさん:2006/12/13(水) 03:59:52
>>982
お前いいやつだな
986デフォルトの名無しさん:2006/12/13(水) 04:05:00
>>985
どうせWikiに各種ソートのプログラム置かなきゃいけないからついでだと思って。
地味に面倒だったけどやり始めたら止まらなくなった。

あとグローバル変数の宣言がおかしいところを発見したけど修正は自分でやってくれ
というかなんでこれコンパイルエラーにならないんだろ・・・
987デフォルトの名無しさん:2006/12/13(水) 06:21:35
>932
void shuffle(int *arr, int n)
{
int r, t;
arr[n-1] = n - 1;

if(n==1) return;
else {
shuffle(arr, n-1);
r = rand() % n;
t = arr[n-1];
arr[n-1] = arr[r];
arr[r] = t;
}
}
988デフォルトの名無しさん:2006/12/13(水) 07:20:24
[1] 授業単元:Cプログラミング
[2] 問題文:
BCDコードに変換する関数を作成しなさい。
IN :ASCIIコード(NULLストップ)
OUT:BCDコード、桁数

[3] 環境
[3.1] OS: (Windows)
 [3.2] bcc
 [3.3] C言語
 [4] 期限: 無期限
[5] その他の制限:

宜しくお願い致します。
989デフォルトの名無しさん:2006/12/13(水) 08:35:14
>>988
BCDコードなんだから入力される文字列は0〜9で考えていいんだよな?
あと変換されたBCDコードはどうやって出力すりゃいいんだ?
@printfで出力?(画面に変換結果表示するだけ)
A戻り値をchar*にして返す?(受け取った方は不要になったらfreeする必要がある)
Bそれとも既に確保されてるメモリのポインタを受け取って
 そっちに出力?(確保領域が溢れる場合が有る)
とりあえず簡単な@で書いとく。
#define B(c,n) (((c-0x30)>>n)&0x01)
void strtobcd(char* str)
{
printf("before:\n%s\n",str);
int i=0;
printf("after :\n");
while(str[i]){
if(str[i]<'0' || str[i]>'9'){printf("decode error\n");break;}
printf("%d%d%d%d ",B(str[i],3),B(str[i],2),B(str[i],1),B(str[i],0));
i++;
}
}
990デフォルトの名無しさん:2006/12/13(水) 09:46:40
>>848
上2つのテキスト、内容まったく同じじゃね?
991長岡:2006/12/13(水) 10:16:17
長岡係数を求めるプログラムを早急に作成してください。。
お願いします
992デフォルトの名無しさん:2006/12/13(水) 10:18:35
>>991
>>1を読んでテンプレ守って書き直してね。
長岡係数って何?
その辺の説明も書こうね。
993長岡:2006/12/13(水) 10:23:54
自分もよくその辺もわからないんでそれも説明していただくとありがたいです。図々しくてすみません。。。
994デフォルトの名無しさん:2006/12/13(水) 10:25:20
ABのスレできいてるやつか
ここはBASICのスレじゃねえぞ
995デフォルトの名無しさん:2006/12/13(水) 10:25:47
>>1を読んで理解できないのなら日本語を勉強してくださいとしか…
996デフォルトの名無しさん:2006/12/13(水) 10:27:05
>>991
Perlの実装ならここにあったよ。
数値積分してるみたいだけど。
http://www-lab.ee.uec.ac.jp/vlab/bridge/nagaoka/integral.html
997デフォルトの名無しさん:2006/12/13(水) 10:27:37
>>996
氏ね
998長岡:2006/12/13(水) 10:29:06
>>996
ググって出てくるくらいの情報はいいです
書けないんなら黙っていてください
999992:2006/12/13(水) 10:29:13
>>993
長岡係数とやらを理解して説明できるようになったらまたおいで。
プログラムの部分しか請け負わないよ。
1000デフォルトの名無しさん:2006/12/13(水) 10:29:20
>>996 あんた最低だよ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。