- 1 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:14:52 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 14 pc11.2ch.net/test/read.cgi/tech/1181735298/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 91代目 pc11.2ch.net/test/read.cgi/tech/1182607405/
- 599 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:50:59 ]
- バイナリーサーチというものをやる場合
データが小さい順もしくは大きい順に並んでなかったらできない? つまりめちゃくちゃなデーターがあったら一旦それをバブルソートなどで整列させないとダメってことですか?
- 600 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:51:52 ]
- そう。
- 601 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:21 ]
- わざわざバブルソートを選択する理由も無いけどな
- 602 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:46 ]
- >>599
その通りです バブルソートである必要はありませんが…
- 603 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:00:04 ]
- バブルソート突っ込まれ過ぎワロタ
- 604 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:19:51 ]
- >>599
揃っているからこそのバイナリサーチじゃないか。 って、仕組み見たら一目瞭然だと思うが・・・・・ で、バブルソートである意味はない。 でも、ふと思ったのは、必要なものをすべて見つける必要はなくて 一つ見つければいいというのであれば、動的に必要な部分だけ ソートしながら利用するっていう使い方もあるのかな、と思った。 レイトバインディングのように、対象要素が大きくて ソートの初期化コストが大きかったり頻繁に要素が追加されるという状況で使えないかな? それともそういう場合はB-Treeとかを使っておくべき?(追加のコストによるのかな?)
- 605 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:08:21 ]
- #include いろいろ
struct list{ int data; struct list *next; }; void showlist(); int main(void){ int indata,i,j; struct list *head,*test; head=NULL; while(1){ printf("数を入力(終了は0)>");scanf("%d",&indata); if(indata==0) break; test=(struct list*)malloc(sizeof(struct list)); test->data=indata; test->next=head; head=test; } showlist(); return 0; } void showlist(){ struct list *now; while (now!=NULL){ printf("%d ",now->data); now=now->next; } }; 構造ポインタで次々入力しshowlistで表示するというのを作ったんだけど これ実行したら、mainのreturn 0の上のshowlistがプロトタイプ宣言が無いと警告でるんですがどうしたらいいですか?
- 606 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:25:05 ]
- void showlist(void);
↑型を入れる
- 607 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:14:24 ]
- #include <stdio.h>
void inputdata(int data[],int n); int main(void){ int x[10]; inputdata(x,10); return 0; } void inputdata(int data[],int n){//inputdata関数 int i; for(i=0;i<n;i++){ printf("Input data>"); scanf("%d",&data[i]); } for(i=0;i<n;i++){ printf("data[%d]=%d",i,*data[i]); } } C言語について質問です 配列x[0]〜x[9]のそれぞれに値を入れて表示するというinputdata関数を作ってみたいんですが これ動きません。どのように関数を直せばよいのでしょうか?
- 608 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:19:42 ]
- int *data[]
- 609 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:34:33 ]
- printf("data[%d]=%d",i,*data[i]);
↓ printf("data[%d]=%d",i,data[i]);
- 610 名前:デフォルトの名無しさん [2007/07/03(火) 20:55:02 ]
- 2^8は65,536でしょうか?
- 611 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:58:26 ]
- それくらいぐぐれよ
www.google.co.jp/search?q=2%5E8
- 612 名前:デフォルトの名無しさん [2007/07/03(火) 21:09:46 ]
- さんkyさう
- 613 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:15:15 ]
- つーかプログラミング勉強してる奴が電卓の使い方も(その存在も?)和歌ランとは・・・
- 614 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:19:11 ]
- 小学生なんだろ。
- 615 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:47:58 ]
- 2^8 = 16^2 = 0xFF
- 616 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:52:29 ]
- 二次元配列で構造体を使って
その中身の計算に 違う二次元配列の中身を用いないといけないんだけど すげーキレそう
- 617 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:57:59 ]
- ゆとりは相変わらずキレやすいな。
- 618 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:03:50 ]
- トイレに行くと血が・・・ orz
- 619 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:04:52 ]
- >>618
今日あの日だろ
- 620 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:14:14 ]
- >>618
肛門様を大事に
- 621 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:25:36 ]
- cdっていう配列があったとして
&cd[0] と cd は全く同じ意味ですか?
- 622 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:05 ]
- ほぼ同じ意味
- 623 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:28 ]
- >>621
「2*2」と「1*4」は同じですか? という質問と同じです。 値も型も同じですが、意図が違います
- 624 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:32 ]
- cdとブルーレイくらいしか変わらない
- 625 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:28:25 ]
- sizeofの引数にしてみそ
- 626 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:47:34 ]
- void型の関数でwhileやifの途中で関数を終わらせるにはどうしたらいいでしょうか?
int型とかなら if(x==1) return 0; とかやれば関数から抜け出せるけど void型はどうやるんですか?
- 627 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:48:33 ]
- return;
- 628 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:02:09 ]
- だが、ループの途中からリターンするのはあんまり気持ちのいいもんじゃないよ。
- 629 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:05:51 ]
- そして、じゃあbreakはどうなんだ?というような宗教論争に
- 630 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:12:35 ]
- ネストされたループとか考えるとループ中のreturnはやむを得ない気がする。
- 631 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:03:33 ]
- 10GBぐらいある巨大なテキストデータの中のある1行を
書き換えたいんだけどどうやればできますか。 普通にやると,また10GB書き出さないと出来ないような。
- 632 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:10:57 ]
-
双方向リストに関する質問です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4492.txt 双方向リストの先頭と末尾へ要素を追加する関数と、 先頭と末尾の要素を削除する関数を書いてみたのですが、 末尾要素を削除する関数 DelTail() が思うように動いてくれません。 free()する対象が悪いのではないかと推測していますが、 検討もつかないというのが実際のところです。 他の関数についてもツッコミいただければと思います。
- 633 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:11:06 ]
- >>621
int cd[10]; として、 &cd[0] の型は int* で、 cd の型は int [10] だな。 全く同じではない。
- 634 名前:デフォルトの名無しさん [2007/07/04(水) 01:18:05 ]
- 632
www.geocities.jp/ky_webid/cpp/library/003.html ●C++編(標準ライブラリ) 第3章 list listは双方向リストを構築したテンプレートクラスです。
- 635 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:18:07 ]
- >>631
ファイルでもメモリーでもどっちでもいいが、書き換えサイズが同じなら、読んで書いて閉じればそれで終わり。 挿入や削除ならそこでちょん切ってリスト構造で繋ぎ直す。
- 636 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:43:20 ]
- >>634
そのページのC編のほうのも参考にしてみたのですが、 できればグローバル変数を使わずに、 かつ、リスト操作関数の引数も、リストへのポインタだけにしたいのです。 逆に、関数内で作業用の変数が増えるのはあまりこだわりません。 もちろん、良識のある範囲で少ないほうがいいのですが。
- 637 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:44:58 ]
- Add系の関数の引数はデータもあるので、
増やす方は2コ(リストと要素)、減らす方は1コ、というのが正しいですね。
- 638 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:45:03 ]
- >>631
ファイルをリスト構造にする。 ところどころにダミーデータをいれておいて、そこをバッファに使う。 書き換えたい所を含んだクラスタを別のクラスタに繋ぎなおす。 別のファイルにパッチ情報として〜行目はこの内容に置き換わりました、のような情報を入れてセットで扱う。 直した所から後ろをそっくり書き直す
- 639 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:11:46 ]
- fgets(hoge, 64, stdin);
みたいにしたとき、入力が64文字以上あるとどうなりますか? 63文字目までがhogeに入って後は無視されるんでしょうか?
- 640 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:14:48 ]
- 63文字だけ stdin から読み込む、だけ。
後は次の読み込みがあれば、その時に読み込まれる。
- 641 名前:639 mailto:sage [2007/07/04(水) 03:07:44 ]
- では、64文字目以降の改行までを無視することはできますか?
fflush(stdin); してしまうと、リダイレクトされてきた時に 改行以降も全て捨てられてしまうのでは?
- 642 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 03:16:35 ]
- hoge[62] = 0;
hoge[63] = 1; fgets(hoge, 64, stdin); if(hoge[63] == 0 && hoge[62] != '\n') { scanf("%*[^\n]s"); getchar(); }
- 643 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:40:22 ]
- int *p,a;
p=&a; ってやったら *pはaと同じ(*p=a)になるんでしょ でも@=&aとやらず*p=aはなんでダメなの?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:43:50 ]
- *p==a
p==&a
- 645 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:48:28 ]
- int *p,a;
p=&a; *p = 10; printf("%d\n",a); a = 20; printf("%d\n",*p);
- 646 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:50:31 ]
- pが未初期化だとどこさしてるかわからんのに
その先に値を書き込もうとするか
- 647 名前:デフォルトの名無しさん [2007/07/04(水) 12:10:01 ]
- STL勉強してるんだけど
vector<string>とかできるの?
- 648 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:10:52 ]
- スレタイ読めないの?
- 649 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:42:43 ]
- 試せば分かることをわざわざ聞きにくるやつに
スレタイを正しく読むのは難しいだろ
- 650 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:05:10 ]
- 試して出来ないから聞いてんじゃないの?
少しは予測しろよw
- 651 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:16:20 ]
- それは有り得ない話だ。
- 652 名前:デフォルトの名無しさん [2007/07/04(水) 13:20:44 ]
- STL勉強してるんだけど
vector<vector>とかできるの? vector<vector<int>>とか vector<vector<vector>> とかできるの?
- 653 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:25:34 ]
- これはひどい
- 654 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:31:33 ]
- スレタイくらい読め
- 655 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:58:39 ]
- STLはC言語では使えん
vector<vector<int> > vector<vector<vector<int> > > で試せ
- 656 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:34:52 ]
- つ[名前空間]
まあスレタイも読めないおばかさんは一生悩んでろ。
- 657 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:09:49 ]
- switch( uMsg )
case WM_CREATE: test1=1; test2=2; break; case WM_CREATE: { test1=1; test2=2; } break; case WM_CREATE: { test1=1; test2=2; } return; case WM_CREATE: { test1=1; test2=2; return; } どれ使ってもOK?
- 658 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:06 ]
- OK
- 659 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:26 ]
- {}で囲むのは途中で変数宣言したいとき。
breakとreturnは意味が違う。
- 660 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:16:09 ]
- 別に変数宣言しなくても囲ってもいい
- 661 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:09:43 ]
- switch、caseに関わらず、別にスコープは好きなところで使って構わない。
- 662 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:14:36 ]
- 関数内ならね。
- 663 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:16:27 ]
- >>641
fflushは入力バッファに対してどう作用するか定められていない (出力バッファを吐き出すことだけが規定されている)ので、 このスレとしては知らないという答えになる。
- 664 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:50:24 ]
- { }は見やすくするためにつけたけど、どこでも使ってOKなのね。
breakとreturnはよく考えるとぜんぜん意味が違う事に気づいた なぜreturnが入ってたんだろうw
- 665 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:07:30 ]
- 関数と定義するとき、プロトタイプ宣言が必要って言われてますよね?
プロトタイプ宣言って必要なんですか? なくても動くと思うのですが・・・
- 666 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:13:08 ]
- なくても動きますし、必須でもありません。
あなたがいらないと思うなら必要ではないでしょう・
- 667 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:16:40 ]
- なくても必ず正しく動くわけじゃないぞ。
- 668 名前:デフォルトの名無しさん [2007/07/04(水) 19:20:45 ]
- 自前の関数を関数内で使うときじょんじょが大事になる
- 669 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:35:19 ]
- 例えばいつもおなじみのstdio.hという標準入出力ライブラリのヘッダファイルには
printf関数やらfopen関数やらのプロトタイプ宣言がずらずらと並んでる stdio.hにはプロトタイプ宣言だけが書かれてて,printf関数やfopen関数の実装はstdio.cに記述されている ライブラリってのはヘッダファイルとソースファイルが対になっていて ヘッダファイルに「このライブラリはこんな機能を提供しますよ〜」っと目次みたいなもんを書いてるわけだ それがプロトタイプ宣言 なんでこんなことを分けるするかってのはソースを分割して機能別にライブラリ化するため 1個だけのソースファイルでプログラミングしてる時は必要無いけど普通はプロトタイプ宣言も書いておく main関数の前にずらずら別の関数の実装が並んでいると,どこがmainの始まりか探すのが大変なのもある
- 670 名前:デフォルトの名無しさん [2007/07/04(水) 20:18:02 ]
- 年と月を入力して
2007 7 sun mon tue wed thu fri sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 みたいな万年カレンダーを作りたいんですけど、アルゴリズムを詳しく教えてほしいです。 よろしくおねがいします。
- 671 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:19:53 ]
- あ、数字がずれてる…。
sunのnの下に1がきてmonのnのしたに2がくる感じです
- 672 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:38:15 ]
- kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4502.txt
上のプログラムは、入力した文字を逆向きにプリントしちゃうはずの 自分でゆうのもなんですが、優れものなんです。が 実行すると、何故か変な文字列が入っちゃいます>< こんな感じ↓(testと入力した場合) www.uploda.org/uporg888409.jpg.html どなたか、原因を教えてくださいな 教えてくれた方に、僕のケツ穴差し上げます><
- 673 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:42:44 ]
- ソース見た瞬間意識が朦朧としてきた
- 674 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:49:51 ]
- >672
文字列の終端は'\n'じゃない てめえの汚えケツ穴なんぞ誰がいるかってんだ
- 675 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:05:09 ]
- >>673
朦朧としてると、こっちから押し倒しちゃうze(はぁと >>674 ありがちんこ☆ \0か!
- 676 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:09:59 ]
- あえて断言しよう
>>674は絶好のチャンスを失った、と。
- 677 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:12:21 ]
- >>670
#include <unistd.h> int main(int argc, char *argv[]){return execlp("cal", "cal", argv[2], argv[1], NULL);}
- 678 名前:デフォルトの名無しさん mailto:age [2007/07/04(水) 21:14:37 ]
- 例えば、以下のような4つの要素からなる列が複数あるものに対して、
次のような処理: (1)1番目の要素が同一の場合、後から出現したものを採用する (2)3番目の要素でソートする を行いたいのですが、どのようなアルゴリズムになりますか? 例) 0010 ABC 60 70 0022 BCD 56 76 0010 EFG 85 34 0003 HIJ 70 98 ↓ 0010 EFG 85 34 0003 HIJ 70 98 0022 BCD 56 76
- 679 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:15:51 ]
- 普通に配列につめてソートします。
- 680 名前:678 mailto:age [2007/07/04(水) 21:50:09 ]
- >>679
普通に配列からソートする場合、 どのように(1)の条件をクリアしますか? そこで困っています。
- 681 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:59:03 ]
- 同じものが出てきたら上書きする
- 682 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:25:35 ]
- 1番目の要素が同一かどうか調べて、同一なら上書きすればいい(例だと、消去してる?)
- 683 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:29:19 ]
- >>680
0000番から9999番までの箱を用意してそれぞれの箱に入れていく。 で、既に入ってる場合は入ってるものを捨てて代わりを入れる。 全部入れ終わったらソート。 無駄だらけだけど分かりやすい考え方だとこんな感じ?
- 684 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:30:50 ]
- int i, j, k, n;
for(i=n-1; i> 0; i--) { for(j=i-1; j>=0; j--) { if(a[j]==a[i]) { for(k=j; k<n-1; k++) a[k] = a[k+1]; n--; i--; } } } こんな感じで同じものを消去すりゃいいんじゃね?
- 685 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:31:14 ]
- ソートしてからの方が効率いいだろ・・・
- 686 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:34:55 ]
- >>685
ソートしちゃうとどれが先にでてきたか分からなくならない? いや、マージソートとかならいいけど
- 687 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:38:45 ]
- >>686
そのための安定ソートだろ 入門篇ならバブルソートだろう
- 688 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:44:16 ]
- >>685
ソートは3番目の要素でするんだぞ?
- 689 名前:678 mailto:age [2007/07/04(水) 22:45:58 ]
- >>683
それ考えたんですけど、 実際は0000000000番から9999999999番まで(10桁)あり、 番号も全部あるわけじゃないからやっぱり効率悪いですよね。 はやさも求められているんで・・・ ハッシュとか2分探索とか使うんですかね?
- 690 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:50:51 ]
- >688
一番目の要素で安定ソート 一番目の要素でのかぶりを削除 三番目の要素でソート ってことだろ。
- 691 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:53:29 ]
- インデックス情報を付加しといて qsort という手もある。
- 692 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:05:49 ]
- 標準ライブラリに無いのが難点だけど
重複してるかどうか調べるのはハッシュ使うのがいいと思う
- 693 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:08:01 ]
- インデックス用の配列mallocしてqsortが一番楽だろ
- 694 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 09:38:27 ]
- >>672
それどっかの入門書に載ってたぞ
- 695 名前:デフォルトの名無しさん [2007/07/05(木) 15:50:14 ]
- CからつかえるフリーのXMLライブラリないですか?
- 696 名前:デフォルトの名無しさん [2007/07/05(木) 15:53:13 ]
- 何方か標準関数のプログラムの作り方教えてください
- 697 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 15:54:07 ]
- 日本語でもう一度
- 698 名前:デフォルトの名無しさん [2007/07/05(木) 15:55:33 ]
- >>672見たらmain内で関数宣言してるけど、これはなに?
そういう手法があるの?関数の内容よりそっちに目がいった。 こんなことしたことないけど、どうなの?
- 699 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 15:58:24 ]
- そりゃキミが知らないだけだろ
|

|