C言語なら俺に聞け! Part 95

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立ててやるからPart87には構わないでくれ
2v(^o^i)d○v(^o^i)d○v(^o^i)d:04/11/20 20:58:06
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 94
http://pc5.2ch.net/test/read.cgi/tech/1099212476/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
3デフォルトの名無しさん:04/11/20 20:59:26
これはもうだめかもわからんね
4デフォルトの名無しさん:04/11/20 21:01:21
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
5デフォルトの名無しさん:04/11/20 21:04:02
またネタスレが立ったのか
6デフォルトの名無しさん:04/11/20 21:05:34
ギニアで体重798sの男性発見!!!

赤道直下のパプアニューギニアのサレント市でおそらく人類史上最重量
の男性の存在がわかった。
フルージャ・ナトレスさん31歳 牧畜業を家族9人で営んでいる。
フルージャさんは身長174センチで体重が798kg!!!
ウェストは244センチで皮下脂肪率が77%であると公表している。

詳細http://tmp4.2ch.net/test/read.cgi/tubo/1100789674/l50
7デフォルトの名無しさん:04/11/20 21:07:06
%pってポインタの中身を見る時に使うのかい?
8デフォルトの名無しさん:04/11/20 21:10:19
それはIntel64bitアーキテクチャで推奨された書き方やね
9デフォルトの名無しさん:04/11/20 21:20:21
>>7-8
ANSI/ISOでポインタ値の表示と決められている。
10デフォルトの名無しさん:04/11/20 21:34:08
>>8-9
int x;
printf("%p", &x);

これでxのアドレスが表示されてるっぽいんだけど、
%pはポインタ限定ってわけではない?
xの前に&をつけてるからokって事になってるの?
ここんとこがよく理解できないんで助けてー
11デフォルトの名無しさん:04/11/20 21:41:43
int -> int 型
int* -> (int への)ポインタ型
12デフォルトの名無しさん:04/11/20 21:46:16
ポインタ以外入れても動くんだけどね
13デフォルトの名無しさん:04/11/20 21:51:38
書式とパラメータの整合性なんて見てないからな

そういう意味では
>>%pはポインタ限定ってわけではない?
は正しい

でもそういう使い方や理解はするな
14デフォルトの名無しさん:04/11/20 22:43:36
wp = (unt *)calloc(YOUSOSUU, sizeof(unt));
if(wp == NULL){
printf("メモリ借りれませんでした。 けちんぼ!1\n");
exit(1);
}
wp_adr = wp;
こんなコードがとある関数に書いてあります。
この関数を何回か呼び出すと
segmentation faultと出て異常終了します。
原因として考えれることを紹介しているサイトはありますか?
または、ぐぐ語を教えてもらえませんか?
1514:04/11/20 22:44:37
最後に
wp=wp_adr;
free(wp);
この二文が抜けてました。
すいませんでした。
1614:04/11/20 22:49:33
たびたび何度もすいません。

puts("koko0");
wp = (unt *)calloc(YOUSOSUU, sizeof(unt));
puts("koko1");

こんな風に書いてて
koko0は表示されてその後に
segmentation fault
と出るのです。
17デフォルトの名無しさん:04/11/20 22:52:14
untとYOUSOSUUを晒せ
1814:04/11/20 22:54:36
typedef unsigned int unt;
define YOUSOSUU 8;

YOUSOSUUというのは
unt ary[YOUSOSUU];
という風に
unsigned int型の配列をいくつ用意するかを指定しています。
19デフォルトの名無しさん:04/11/20 23:08:34
malloc系で鼻から悪魔が出るケースは、
まず間違いなく、ポインタ絡みのエラー。
特に、
・mallocした以外の領域をfreeしていないか
・確保したサイズ以上の領域を書き換えていないか
を確認すべし。
207 = 10:04/11/20 23:12:09
>>11-13
レスthx
こういう使い方はやめときます
21デフォルトの名無しさん:04/11/20 23:12:15
>>14
calloc を malloc に変えろ
22デフォルトの名無しさん:04/11/20 23:13:52
callocしたポインタとfreeするポインタは等しいのかしら
2314:04/11/20 23:20:14
wp = (unt *)calloc(YOUSOSUU, sizeof(unt));
if(wp == NULL){
printf("メモリ借りれませんでした。 けちんぼ!1\n");
exit(1);
}
wp_adr = wp;

・・・処理・・・

wp=wp_adr;
free(wp);

こんな風に書いているので
callocする場所とfreeする場所は等しいと思いますが・・・
処理中にwp_adrは使っていません。
24デフォルトの名無しさん:04/11/20 23:22:44
wpでなんか壊してるな
25デフォルトの名無しさん:04/11/21 00:03:15
とにかく、callocで落ちるなら、>19に書いた通り
ヒープの管理ブロックを壊してるのは間違いないと思う。
callocの呼び出し前と呼び出し後にprintfでも入れて確かめる。

で、callocで得たアドレスとfreeしているアドレスが同じかも確かめる。
それでもおかしいなら、領域オーバーを疑う。
26デフォルトの名無しさん:04/11/21 00:16:44
こんばんは。基本的なことで恐縮なんですが、
このようにプログラムを書いて

#include <stdio.h>

main( ){
int* x;
int* y;
scanf("%d %d",x,y);
printf("%d %d\n",*x,*y);
}


%./a.out
1 2

と入力すると、

1 2
セグメンテーション違反です

と表示される理由がわかりません。
一体なんのせいでセグメンテーション違反と怒られてるのでしょうか。
27デフォルトの名無しさん:04/11/21 00:20:10
メモリをちゃんと確保してないから
28デフォルトの名無しさん:04/11/21 00:21:46
>>26
アクセス権が無いところにアクセスしようとしたから。
29デフォルトの名無しさん:04/11/21 00:23:38
初めint x;って書いてたけどコンパイラに「int*じゃ( ゚Д゚)ゴルァ!!」と怒られて
変数宣言を書き換えたに一票
30デフォルトの名無しさん:04/11/21 00:30:02
int x[1];
int y[1];
で全て解決、万々歳。

・・・・本人の理解が進まない点を除いて。
31デフォルトの名無しさん:04/11/21 00:32:00
int x;
int y;
scanf("%d",&x,&y);

にしましょう。

int *x;
int *y;
では、ポインタを格納する変数があるだけです。

イメージ的には(※理解するだけにとどめて、これで覚えないで下さい)
[               ]
[               ]
とアドレス(住所)を書ける欄(変数)が2つあります。これは使い回されるものとします。

[東京都品川区〜〜〜〜]
[東京都新宿区〜〜〜〜]
と、前の人が書いたままなので、勝手に何か使えば問題が発生します。

[神奈川県横浜市〜〜〜]
[千葉県千葉市〜〜〜〜]
と、自分で正しいアドレス(住所)に書き換えてあげなければなりません。
あるいは、紙(変数)に書いたりせずに口頭(&x,&y)でアドレス(住所)を教えてあげなければなりません。



これを見て将来ダメになっても私は知りません
32デフォルトの名無しさん:04/11/21 00:38:31
俺の経験上、居丈高に教えてるのは初心者に2,3本毛が生えたやつらだよ。
多少分かるようになった初心者は、お前こんなのも分からないのかよと馬鹿にしつつ自分の知識をひけらかしたくなる。
もう少しすると興味が無くなるのでROMるかスレ自体からいったん離れる。
さらにもう少しすると煽りに徹するようになる。答えは書かない。ピンポイントでヒントだけ教えてやる。
安易に答えを教えてしまうと質問者のためにならないから。
さらにもう少しすると再びROMる。
すっかり古参と化した彼らはスレと住人たちのの成長を生温かく見守るようになる。
33デフォルトの名無しさん:04/11/21 00:44:00
そんな気持ち悪いのになりたくないです
34デフォルトの名無しさん:04/11/21 00:53:10
>>32
で 943 さんよ、934 は何のアドレスを返しているんだい?
35デフォルトの名無しさん:04/11/21 01:08:05
誤爆?
36デフォルトの名無しさん:04/11/21 01:11:36
934 :デフォルトの名無しさん :04/11/20 11:55:31
>>933 スレ違い

struct string{ char mojiretu[256]; };
struct string fusianasan(void)
{
struct string kusosure = { "sine" };
return kusosure;
}

941 :デフォルトの名無しさん :04/11/20 15:22:04
ローカル変数を(ry
Cで文字列を返したいときに
初心者が陥りやすい例を示しているのかと思ってスルーしてたんだが。

942 :デフォルトの名無しさん :04/11/20 15:54:17
>>941 ry しないで続きをどうぞ
何が起こると言い出すか見物の悪寒

943 :デフォルトの名無しさん :04/11/20 16:24:12
>>942
「ローカル変数だ」と言えばこれ以上のくだくだしい説明はいらんと思うが。
こんな当然のことで高みの見物を決め込んでるとすれば、
それがおまえの技量ということだな。 プッ
では わかっていないリアル厨房のおまえのために書いてやろう。
           ~~~~~~~~~~~~~~~~~~
ローカル変数のアドレスを返しているが、関数から出てしまえばその領域は破棄される。
したがって親ルーチンがそれを受け取っても、この領域へのアクセスは違法となる。
ただし、偶然にも文字列が残ったままになっている可能性もあるので、
結果だけを見れば正常に動作することもある。が、違法行為だ。
わかったか、坊や。
37デフォルトの名無しさん:04/11/21 01:33:39
哀れな>>943
38デフォルトの名無しさん:04/11/21 01:36:44
教えたがりにロクな香具師はいないという好例だな
39デフォルトの名無しさん:04/11/21 01:40:17
俺は

友達とか相手の場合はヒント程度にとどめる(その瞬間だけ解っても意味無いし)
赤の他人(こういうとこ)には完全に教える(別に相手はどうでもいいし)
40デフォルトの名無しさん:04/11/21 01:43:12
>>39
お前の事なんて知ったこっちゃない
41デフォルトの名無しさん:04/11/21 01:50:24
俺は 適度に煽りつつ新しいネタを見つけるのが楽しいんじゃないかと。。
42デフォルトの名無しさん:04/11/21 02:42:04
ちょっとお聞きしたいのですが、
木構造において子の数が一定ではない場合のデータ定義はどのようにすればいいのでしょうか?
2分木であれば

struct node {
 int data;
 struct node *left;
 struct node *right;
}

上のように、左の子と右の子、2つへのポインタを定義するのですが、ここで不定数の子へのポインタを定義したいのです。

struct node {
 int data;
 struct node *leaf[100];
};

このようにポインタ配列を使うことを考えたのですが、これでは子の数が制限されてしまいます。
可能であれば、その時における子の数だけのポインタを確保したいのですが、
なにか良い方法があるようでしたら教えていただけないでしょうか?
43デフォルトの名無しさん:04/11/21 02:45:19
ポインタのポインタを使ってポインタ配列を動的確保する
って安直な案はだめですか
44デフォルトの名無しさん:04/11/21 02:46:38
struct node {
int data;
struct node *child; /* 一番左の子ノード */
struct node *brother; /* 兄弟(右のノード) */
};
とか?
45デフォルトの名無しさん:04/11/21 04:00:30
46デフォルトの名無しさん:04/11/21 04:11:57
>>43
ありがとうございます。

struct node {
 int data;
 struct node **leaf;
};

このように定義して、状況に応じてポインタ配列を動的確保することでうまくできました。
実は一度 struct node *leaf; と定義し、leaf にポインタ配列の動的確保を試みたのですが、
失敗したため、この方法は敬遠していました。 ですが、考えてみればうまくいかないのは至極当然の事ですね。
手を掛けていただき、ありがとうございました。
47デフォルトの名無しさん:04/11/21 07:21:23
struct node {
 int data;
 struct node *leaf[];
};

mallocで確保するときにサイズ調節
48デフォルトの名無しさん:04/11/21 09:46:54
おはようございます。>>26です。
みなさんのアドバイスを参考に考えてみたんですが、よくわかりませんでした。

どこがわからないのかと言いいますと、*演算子と&演算子の違いがわかりません。
みなさんの御指摘もその周辺についてで、>>31さんは特にそこを指摘していると思うのですが、
もう少しアドバイスを頂けないでしょうか。

自分の理解では次のようにプログラムを書けば動くはずと考えていましたが
実際にはコンパイル出来ません。

#include <stdio.h>

int main(void){
int* x;
int y;
*x = 10;
&y = x;
printf("%d\n",y);
return 0;
}

&y=x がおかしいとコンパイラにはねられるわけなんですが、
これはどうしてダメなんでしょうか。
int *x と int y の宣言はどのように処理されているのでしょうか。
よろしくお願いします。
49デフォルトの名無しさん:04/11/21 10:03:18
>&y=x がおかしいとコンパイラにはねられるわけなんですが、
>これはどうしてダメなんでしょうか。
と思うのは
>どこがわからないのかと言いいますと、*演算子と&演算子の違いがわかりません。
というより、そもそも左辺値と右辺値がわかっていないと思われる。

あと、
&y=x;じゃなくて、x=&y;がやりたいことじゃない?
5026:04/11/21 10:12:42
>>49
>&y=x;じゃなくて、x=&y;がやりたいことじゃない?

レスありがとうございます。
この場合は &y=x がやりたいことで、
なぜこれだとコンパイルに失敗するかがわからないのです。

*xのアドレスxを、yのアドレス&yに入れてやれば
&yは"10"の入っているアドレスを指すことになるはずだと考えて
このように書いているのですが、どうしてダメなのかがわからないのです。
51デフォルトの名無しさん:04/11/21 10:28:30
>>50
&yに代入することはできないから。
int a = 3;
50 = a;
がコンパイルできないのと同じ。
52デフォルトの名無しさん:04/11/21 10:32:43
>というより、そもそも左辺値と右辺値がわかっていないと思われる。
と答が書いてあるのに>>50は馬鹿か?
53デフォルトの名無しさん:04/11/21 10:38:30
>>52
だから左辺値と右辺値がわかってないんだって。
54デフォルトの名無しさん:04/11/21 10:39:51
こっちがネタスレか?(゚д゚ ≡ ゚д゚)
55デフォルトの名無しさん:04/11/21 10:44:20
行末の改行コードを削除する関数にかっこいい名前を
付けてやってください。ちなみに私のださいセンスだと


void Chomp(char *szTarget);

Perlか!!
56デフォルトの名無しさん:04/11/21 10:45:32
TrimReturnCodeとか
57デフォルトの名無しさん:04/11/21 10:48:27
>>55
そういうのは大抵stripと命名してる。
58デフォルトの名無しさん:04/11/21 10:57:54
void Kiri!(char *szTarget);
5926:04/11/21 11:18:06
左辺値と右辺値について調べてみました。
どこがいけなかったか理解できました。
scanfの疑問も解けました。
どうもありがとうございました。
60デフォルトの名無しさん:04/11/21 11:21:39
const char *argv[]

char *const argv[]
の違いってなんですか?
61デフォルトの名無しさん:04/11/21 11:51:12
>>26
おまえ偽者だろ。わざとやってるだろ。
62デフォルトの名無しさん:04/11/21 12:23:00
知鷹X42
63デフォルトの名無しさん:04/11/21 13:01:48
26のやりたい事はyのアドレスにxの内容を書き込みたい、ということだよな。
&yには代入できない。&yはたとえば「10000」とかいうアドレスを表す「値」であって、
値に代入は出来ない。10 = aできないのと同じ。
ただし当然ながら、別の方法でアドレスに値を書き込むことはできる。
64デフォルトの名無しさん:04/11/21 15:06:53
>>63
うるせー馬鹿。
65停止しますた。。。:04/11/21 17:57:14
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ

ここは削除依頼出てます
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************

本スレ誘導

C言語なら俺に聞け! Part 95
http://pc5.2ch.net/test/read.cgi/tech/1100956766/
66デフォルトの名無しさん:04/11/21 18:30:36
てすと
67デフォルトの名無しさん:04/11/21 22:37:49
こっちが本スレだろ?
68デフォルトの名無しさん:04/11/21 22:39:57
そう思いたいのですか?
69デフォルトの名無しさん:04/11/21 22:42:28
voidごっこはあっち逝け
70デフォルトの名無しさん:04/11/21 23:03:12
ほんものかもよ!
71デフォルトの名無しさん:04/11/21 23:05:05
ほんものはもっと慇懃御無礼
72デフォルトの名無しさん:04/11/22 02:40:23
void情報があるときいて見に来たんですがー
どこ?
73デフォルトの名無しさん:04/11/22 03:41:06
劣化コピーもしくは耄碌した本人ならこのスレのクローンにいるようです
74デフォルトの名無しさん:04/11/22 10:04:33
こっちが削除?
75デフォルトの名無しさん:04/11/22 16:06:50
この板の削除人は空気の読める奴だから、あまり無茶なことはしないよ。
両方継続してhttp://pc5.2ch.net/test/read.cgi/tech/1100956766/が
終わったらこっちを再利用するんじゃないかね。
76デフォルトの名無しさん:04/11/22 16:44:17
>>75
ばっさり消さないと
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
のようにいつまでも残るじゃないか
77デフォルトの名無しさん:04/11/22 16:54:34
>>76あそこの空気も、あれはあれで生きてていいんじゃないかね。
78デフォルトの名無しさん:04/11/22 17:01:29
>>77
ネタがやりたいならマ板でやれよ
79デフォルトの名無しさん:04/11/22 21:49:30
age
80デフォルトの名無しさん:04/11/22 21:50:34
ママに聞けってのもあるよな。
81デフォルトの名無しさん:04/11/22 22:44:42
> こっちが削除?

そそ。こっちが削除されます。
82デフォルトの名無しさん:04/11/22 22:45:45
なんでそう消したがるの?
83デフォルトの名無しさん:04/11/22 22:46:18
>>82
ネタがやりたいならマ板でやれよ
84デフォルトの名無しさん:04/11/22 22:47:28
は?何言ってんだ?
85デフォルトの名無しさん:04/11/22 22:47:57
まあ、こっちは内容なかったもんな。
ちょうどいいのでは?
86デフォルトの名無しさん:04/11/22 22:53:32
あっちの自演厨に負けたな
87デフォルトの名無しさん:04/11/22 22:56:43
ということにしたいのですね?
(負け惜しみすぎー)
88デフォルトの名無しさん:04/11/22 23:01:00
負けを認めてるのは負け惜しみとは言わんが?
89デフォルトの名無しさん:04/11/22 23:03:22
ということにしたいのですね?
  ヘ_ヘ
 ミ ・ ・ ミ
  (  ° )〜
90デフォルトの名無しさん:04/11/22 23:15:44
  ヘ_ ヘ
 ミ `∀´,ミ
  (  ° )〜
91_∧______:04/11/22 23:33:10
ということにしたいのてすにだー
92デフォルトの名無しさん:04/11/22 23:41:59
向こうで日下部ごっこがはじまってるよ
93停止しますた。。。:04/11/23 13:24:54
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ

ここは削除依頼出てます
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************
**************** 糸冬 了 ****************

本スレ誘導

C言語なら俺に聞け! Part 95
http://pc5.2ch.net/test/read.cgi/tech/1100956766/
94デフォルトの名無しさん:04/11/23 13:38:05
Test
95デフォルトの名無しさん:04/11/23 14:18:41
文字列コピーをしようと思ったんですが、うまくいきません。
どうすればうまくいきますか?
char *copy(char *dest, char *src)
{
 char *tmp;

 tmp = dst;
 while ((*src++ = *dst++ ) != NULL);

 return tmp;
}


...'dst'
(さらにsrcとdstを逆に扱っていると思われ)
96sammy:04/11/23 14:47:46
教えてください。
標準入力からテキストファイルを読み込み、
行を短い順に出力しなさい。 但し、行は
最大 80 文字とし、 80 文字以上の行は先
頭 80 文字だけの行として取扱い 出力し、
空行は出力しないで下さい。 また、同じ
長さの行は入力した順番に出しなさい。
なお、取り扱える行数は実行時のコン
ピュータのメモリーのサイズのみに依
存 しなければなりません。 勝手な上
限を設けてはいけません。
97デフォルトの名無しさん:04/11/23 14:48:26
宿題スレへ
9897:04/11/23 14:54:23
とは言ったものの、簡単なのでパッパと済ますか。簡単な方法は以下の2つ。

1) 構造体を作って各行の文字数を予め構造体内に書き込んでおき、全行を読み終わった時点で
  文字数をキーにしてqsort()に放り込む

2) 各行をとにかく配列に取り込み、全行を読み終わったら以下のような比較関数をqsort()に適用する
sort_func(char* c_1, char* c_2) {
 return strlen(c_1) - strlen(c_2);
}

2)ではstrlen()の呼び出し回数が増えるので速度は低下するが、より単純である。
1)のほうがスマート。
9997:04/11/23 15:09:34
っと、そう単純じゃなかった。

> 空行は出力しないで下さい。 また、同じ
> 長さの行は入力した順番に出しなさい。
これを忘れてたorz
空行無視は、最終表示部分でstrcmp(target, "\0")とやってふるい落とすか、
もしくは入力時点で判定して配列に代入しない。
同じ長さの行を入力順に出力するには、第2キーによるソートをする必要がある。
よって、>>98の1)の構造体を使った方法を取る事になる。
更に、
> なお、取り扱える行数は実行時のコン
> ピュータのメモリーのサイズのみに依
> 存 しなければなりません。 勝手な上
> 限を設けてはいけません。
この条件はリスト構造の使用を示唆している。
typedef struct s_in_str {
 char str[81],
 short len,
 unsigned index,
 struct s_in_str next
} in_str;

ここまで書いて非配列なリストをどうやってqsort()に渡すかという所で詰まったのでgive up(´∀`;)
realloc()で誤魔化すか?
100デフォルトの名無しさん:04/11/23 15:10:29
- struct s_in_str next
+ struct s_in_str* next
101sammy:04/11/23 15:32:50
<<99
詳しく書くとどのようなプログラムになりますか?
102デフォルトの名無しさん:04/11/23 15:43:47
>>96
マルチ、繰り返し、いい加減にしろ
答える奴はぼけ
103デフォルトの名無しさん:04/11/23 16:13:30
教えてください。
標準入力からテキストファイルを読み込み、
行を短い順に出力しなさい。 但し、行は
最大 80 文字とし、 80 文字以上の行は先
頭 80 文字だけの行として取扱い 出力し、
空行は出力しないで下さい。 また、同じ
長さの行は入力した順番に出しなさい。
なお、取り扱える行数は実行時のコン
ピュータのメモリーのサイズのみに依
存 しなければなりません。 勝手な上
限を設けてはいけません。
104デフォルトの名無しさん:04/11/23 16:21:41
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
105デフォルトの名無しさん:04/11/23 16:22:21
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
106デフォルトの名無しさん:04/11/23 16:24:23
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
107デフォルトの名無しさん:04/11/23 16:51:35
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

できれば、夜の7時までにお願いします。その後遊びに行きたいので。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
108デフォルトの名無しさん:04/11/23 16:53:28
>>99
非配列なリスト用のqsort書けばいいだけ
109デフォルトの名無しさん:04/11/23 16:54:31
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

できれば、夜の7時までにお願いします。その後遊びに行きたいので。
110デフォルトの名無しさん:04/11/23 17:04:43
関数で関数名の前に戻り値以外に何か書いている場合それは何ですか?
私は出会ったことが無いのですが、他のスレッドで、見ました。
111デフォルトの名無しさん:04/11/23 17:06:48
呼び出し形式(例えばfastcall)を指示してたりとか。コンパイラ依存
112デフォルトの名無しさん:04/11/23 18:03:35
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

夜の7時までにお願いします。今コンパ中なんで、帰ったらできてるようにな。
113デフォルトの名無しさん:04/11/23 18:30:11
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

夜の7時までにお願いします。あと30分だ。怠けているんじゃないぞ。
114デフォルトの名無しさん:04/11/23 18:35:45
>標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。

・行番号と文字列長、標準入力のファイルポインタ、をテーブルとしてメモリに展開。
・テーブルを文字列長→行番号でソート。
・標準入力をfseek()で先頭に。
・標準入力をテーブルのファイルポインタへfseek()して表示。
 文字列長が0になるかテーブル最後まで繰り返し。

って漢字仮名。
115デフォルトの名無しさん:04/11/23 18:37:19
>関数で関数名の前に戻り値以外に何か書いている場合それは何ですか?
static とか?
116デフォルトの名無しさん:04/11/23 18:37:28
>>114
プログラム晒せや、蛸!!!!!!!!
117デフォルトの名無しさん:04/11/23 18:41:55
>>99
>非配列なリストをどうやってqsort()に渡すかという

リストからもう一つ配列に作り直せばよかろうに...
118デフォルトの名無しさん:04/11/23 18:42:01
文字数を順に格納する場所を示すポインターでも持って、
また、何文字の行があるのか0と1で表す配列でも持って(領域80個)、
1文字のときから追って、行数の少ないところから、ファイルの最初から、
順に該当するものを出力するだけ?
119デフォルトの名無しさん:04/11/23 18:42:12
課題
『標準入力からストファイルを読み込み、順に出しなさい。
但し、行は最大 8番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/ihtml のホームページのソースをた果を頭 5 、
最後行を示しない。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズ
120デフォルトの名無しさん:04/11/23 18:43:59
>>117
そうすると巨大ファイルを食わされてメモリ不足に陥ったら何も出来ずにメモリ確保エラーで止まるかと。
121デフォルトの名無しさん:04/11/23 18:44:41
なんでqsortにこだわるんだよ。
自力でマージソートしろ。
122デフォルトの名無しさん:04/11/23 18:45:42
何でもかんでも自力実装って、本人は満足するだろうけど周りから見ると見苦しいだけじゃん
123デフォルトの名無しさん:04/11/23 18:46:00
>120

どのみち
>実行時のコンピュータのメモリーのサイズのみに依存
124デフォルトの名無しさん:04/11/23 18:47:22
>>122
見苦しいのはリンクリストを無理やりqsortする馬鹿だろ
125デフォルトの名無しさん:04/11/23 18:48:56
ソート部分にまでバグ混入の余地を増やすよりはマシ
126デフォルトの名無しさん:04/11/23 18:49:10
>>112
awkが簡単な気がする。
127デフォルトの名無しさん:04/11/23 18:50:36
リンクリストくらいテンプレート使えよ。
128デフォルトの名無しさん:04/11/23 18:51:10
Cしか分からない低脳にテンプレートなどという高度なものを期待するのは愚かしい
129デフォルトの名無しさん:04/11/23 18:51:35
>>120
実行時のコンピュータのメモリーのサイズには依存していいんじゃなかったのか?
130デフォルトの名無しさん:04/11/23 18:54:36
>>129
リンクリスト作成が終わった後で必要数の配列メモリを確保する方式だと、リンクリスト作成時点で
メモリ割り当てが限界まで来てる場合に身動きが取れず、結果としてソートも出力も出来ないってことです。
131デフォルトの名無しさん:04/11/23 18:54:37
とにかく巨大なメモリを確保して
「このプログラムは実行するコンピュータのメモリサイズの制限により動作しません」
と言い張れば解決だな。
132デフォルトの名無しさん:04/11/23 18:55:17
>131

それだ!
133デフォルトの名無しさん:04/11/23 18:59:39
>>130
そのリンクリストには処理すべきデータは洩れなく入っているのか?
つまり最後のデータを入力し終えた時点でメモリをちょうどぴったり使い切った状態とどうして言えるのかって意味だ。
奇跡に近い確率だぞ。
134デフォルトの名無しさん:04/11/23 19:00:23
テンプレートって何か説明しろ。
135デフォルトの名無しさん:04/11/23 19:01:07
>>125
無理いってすまんかったな・・・
136デフォルトの名無しさん:04/11/23 19:02:42
>>133
いえ。処理すべきデータが収まりきらなかった場合を考えてます。
例えば5GBのテキストを食わされて処理していったものの、3.8GBを処理した時点でメモリ割り当て限界に
達したとか。その場合、リンクリストの配列化に必要な更なるメモリを割り当てることが出来ませんよね。
3.8GBのテキストならば配列化にも数十MBのメモリが必要でしょう。
137デフォルトの名無しさん:04/11/23 19:03:28
地球は地殻と地表のプレートからなっているのは知っているか?
10枚のプレートだよ。
138デフォルトの名無しさん:04/11/23 19:04:33
>137
マンヘル...マントルが抜けてたOTZ
139デフォルトの名無しさん:04/11/23 19:05:11
>>137
メガトン級の馬鹿だなぁ。
140デフォルトの名無しさん:04/11/23 19:06:09
>136
>リンクリストの配列化に必要な更なるメモリを割り当てることが出来ません

この後、どうしろと言うのだ?
141デフォルトの名無しさん:04/11/23 19:06:11
>>136
何が何でもオンメモリで処理しないといけないのか?
5GBとか言ってる時点で32bitOSでは処理しきれないぞ。
142140:04/11/23 19:07:50
引用が不適切だったな

>5GBのテキストを食わされて処理していったものの、3.8GBを処理した時点で
>メモリ割り当て限界に達したとか。その場合、

その場合どうしろと?
143デフォルトの名無しさん:04/11/23 19:10:10
>>142
その場合はハードディスクをフォーマットして、初めから何もなかった事に
して構いません。
144デフォルトの名無しさん:04/11/23 19:10:14
>>140
だから、リンクリストの配列化は大変だー、という話をしてるんです。
解法としては、いくつかの行の処理を諦め、配列化に必要なメモリを
割り当てられるまで最終行から順番に領域を開放していくことでしょうかね。

または、配列化用のインデックスをファイル読み取り時点で100個ぐらいずつ
確保し、reallocで配列を広げていくことでしょうか。
145140:04/11/23 19:11:20
>143
了解した。
146デフォルトの名無しさん:04/11/23 19:13:57
>>144
>いくつかの行の処理を諦め

次のルールに抵触
>勝手な上限を設けてはいけません。

データこぼすのは単なる制限より悪質だぞ
147デフォルトの名無しさん:04/11/23 19:15:36
>>146
何も出力されないよりはマシかと。この対策は"勝手な上限を設けるもの"ではなく、
"メモリサイズのみに依存"でしょう。
148デフォルトの名無しさん:04/11/23 19:16:55
頑迷で無知で馬鹿な人間は救いがないな。
149デフォルトの名無しさん:04/11/23 19:17:30
「シーケンスAの要素を整列せよ」という要求に対して、
「シーケンスBという部分集合を勝手に定義して整列しました」と納品に行ったら
がくがくぶるぶる
150デフォルトの名無しさん:04/11/23 19:18:08
>>149>>147 宛てな
151デフォルトの名無しさん:04/11/23 19:18:13
>146

でたらめな出力するくらいなら、何もしないのが常識だぞ(w
152151:04/11/23 19:19:06
失礼、 147 宛てね。
153デフォルトの名無しさん:04/11/23 19:20:31
>>149
うーん、フェイルセーフは考えないのが普通なんでしょうか?
仕様書が与えられているならまだしも、「こんな感じで作って〜」と
言われたら細かい仕様は作る側に任されると思うんですが。

この課題の場合、"勝手な上限を設けるもの"というのは、
#define MAX_NUM 100000
struct s_table str_table[MAX_NUM];
といった上限決め打ちを規制するものだと思いましたが。
154デフォルトの名無しさん:04/11/23 19:21:09
>「シーケンスBという部分集合を勝手に定義して整列しました」
「えぇ、もちろんバグでは有りません。仕様です。」
155デフォルトの名無しさん:04/11/23 19:22:07
>フェイルセーフ

もまい、もう一回学習しなおせ(w
156デフォルトの名無しさん:04/11/23 19:23:27
>>153
誰も要求してないことをしてるだけ
マシもへったくれもねえんだよ

>>151 を500回、声に出して朗読しろ
157デフォルトの名無しさん:04/11/23 19:25:01
>146
>146
>146
 :
158デフォルトの名無しさん:04/11/23 19:26:19
>>155
あー、フェイルソフトですね。すいません。

>>156
全てを読みきれなかったら何もしないんですか?
読みきれた分までで処理というのはおかしい?
159デフォルトの名無しさん:04/11/23 19:26:22
>>98
全く余計なことを・・・
160デフォルトの名無しさん:04/11/23 19:32:01
>158
あのね、読みきれなかった文が短かったら出てこないでしょ?
それは、

154 :デフォルトの名無しさん :04/11/23 19:21:09
>「シーケンスBという部分集合を勝手に定義して整列しました」
「えぇ、もちろんバグでは有りません。仕様です。」

って事なんだよ、わかる?
161デフォルトの名無しさん:04/11/23 19:34:32
まずいですか?まずいんですね。すいません。
162デフォルトの名無しさん:04/11/23 19:34:40
>>160
アンマン買ってきてと言われて売り切れていたから手ぶらで買えるというのは正しくないですよね。
そこで肉まんを買って最大限要求を満たすのが正しいとお思いますが違いますか?
163デフォルトの名無しさん:04/11/23 19:36:02
>>158
>全てを読みきれなかったら何もしないんですか?

だから、そうだよ。くどい。


>読みきれた分までで処理というのはおかしい?

処理そのものじゃない。
注文どおりならおかしくない。

注文と違うことを勝手に(←ここ重要)やることが
技術以前のところで間違ってるといっているんだ。

あんたのコードの出力が何に使われるのかも勝手に決めてるよな。
技術以前のところで間違ってるぞ。
164デフォルトの名無しさん:04/11/23 19:37:02
>>162
アンマンを10個買ってきてと言われたけど7個しか無かった、というのがこの場合の例だと思うんですが


もしそうなら当然7個買って帰るから反例として都合が悪いんでしょうか(笑)
165デフォルトの名無しさん:04/11/23 19:38:06
>アンマン買ってきてと言われて売り切れていたから手ぶらで買えるというのは正しくないですよね。
>そこで肉まんを買って最大限要求を満たすのが正しいとお思いますが違いますか?

しゅーきょー上の理由により、肉まんが食えんのだよ。よって最低最悪。金返せ(w
166デフォルトの名無しさん:04/11/23 19:40:39
>164
ちょっと違うだろ。
買えなかった3個は買えた7個と違わないから、10個→7個でもOK。
10人がバラバラの要求で、7人分しか買って帰らなかった、問題だろ?
167デフォルトの名無しさん:04/11/23 19:41:39
手ぶらで帰るよりは問題じゃないでしょう
168デフォルトの名無しさん:04/11/23 19:42:22
>手ぶらで帰る

争いがなければ、ね。
169デフォルトの名無しさん:04/11/23 19:43:44
>>167
「手ぶらで帰る」←これも要求にない

自分の責任範囲にない障害で要求を完了できないとき、
要求元への相談がないことが問題。これは技術以前。
170デフォルトの名無しさん:04/11/23 19:44:22
つーわけで質問者は出題者を問い詰めて来い
171デフォルトの名無しさん:04/11/23 19:45:07
>170

131 :デフォルトの名無しさん :04/11/23 18:54:37
とにかく巨大なメモリを確保して
「このプログラムは実行するコンピュータのメモリサイズの制限により動作しません」
と言い張れば解決だな。
172デフォルトの名無しさん:04/11/23 19:45:35
>>169
引きこもり2ちゃんねらは知らないかもしれないけれど
そういうのは一般社会では融通のきかないおばかさんと蔑まれます。
173デフォルトの名無しさん:04/11/23 19:46:37
>>170
腐ってもここはム板
「要求元への相談」がプログラムで言うと何かがわからない者ば黙ってろ
174デフォルトの名無しさん:04/11/23 19:48:38
仕様で「途中まででも処理する」と決まってればそうする。
決まってなければ、処理未完了は仕様を満たさないから、何もしない。
でいいだろうが
175デフォルトの名無しさん:04/11/23 19:48:46
>>173
コマンドライン引数でも勝手に増やすか?
176デフォルトの名無しさん:04/11/23 19:49:33
>172

一般社会では、融通をきかせたつもりの「余計なお世話」がまかり通るのか(w
177デフォルトの名無しさん:04/11/23 19:49:48
>>172
引きこもりはお前らしいな。
3つ足りないことの影響範囲に責任を負わない者が判断すべきことではない。
責任範囲の感覚が備わっておらず大変な決断を勝手にやってのけた人は「おばかさん」程度では済まされないよ。
178デフォルトの名無しさん:04/11/23 19:51:35
あんまんの買出しに出かけたアルバイトのお茶くみに
ずいぶん大きな責任が負わされてるんだなw
179デフォルトの名無しさん:04/11/23 19:55:17
まぁ、一般では目的のものが買えなかった場合の代替品を
頼む側、頼まれる側が考慮するけどね。

プログラムでは要求に無いものは作ってはダメだよ。
それこそ、
>ハードディスクをフォーマットして、初めから何もなかった事に
してもOKと言い出しかねん(w
180デフォルトの名無しさん:04/11/23 19:56:51
エラー処理とあんまんのお使いでは喩えとして不釣合いだろう。
181デフォルトの名無しさん:04/11/23 19:57:43
>あんまんのお使い

ぢゃ、アンパンマンのお使い
182デフォルトの名無しさん:04/11/23 20:00:29
正しいアプリケーションとは(上にあるものほど優先順位が高い)
1. 有限時間内に終わること
2. 正しく処理を行うこと
3. 2.が不可能な場合、処理を中断し不可能だと通知すること
4. それなりにスケーラブルであること(なるべくソフトには制限を設けず、OSやPCの限界に依存)
5. それなりに効率的であること(高速に動作し、メモリを使いすぎない)
183デフォルトの名無しさん:04/11/23 20:02:08
>>182
1.
1.
3.
4.
5.
184デフォルトの名無しさん:04/11/23 20:04:20
>正しいアプリ
>正しく処理を行うこと

プ
185デフォルトの名無しさん:04/11/23 20:06:58
>>178
そのバイトの勝手な判断が、接客中の失礼につながり、
億単位の取引を逃したら、アルバイト君は身銭でも切れるんだろうか。

ここで「接客」を持ち出したのは私だが、あなたもそれを否定できない。
自分の仕事の成果が何に使われるのかは、あなたの責任範囲ではないからだ。
取引先との交渉を持ち直させるのに必要な技能も資源も持たないよな。
それを責任と権限がないというんだよ。

wとか書いているが、本気でわからないとしたら笑い事じゃないぞ
186デフォルトの名無しさん:04/11/23 20:09:36
そうか、最近の企業は取引相手をアンマンで接待するのか。メモっとこう。
187デフォルトの名無しさん:04/11/23 20:11:18
ぢゃ、アンパンマン
188デフォルトの名無しさん:04/11/23 20:12:07
くだらない話はもうやめ。
189デフォルトの名無しさん:04/11/23 20:12:18
>>186
お前、何の話がしたいんだ?
障害に対する処理のあり方の話はもうしたくなくなったのかw
190デフォルトの名無しさん:04/11/23 20:13:56
>億単位の取引を逃したら、アルバイト君は身銭でも切れるんだろうか。
そいういうのは法律で禁じられてるわけだが。
191デフォルトの名無しさん:04/11/23 20:14:38
くだらない話はもうやめ。
192デフォルトの名無しさん:04/11/23 20:15:01
>>180
いや、こいつの場合はあんまんのお使いまで戻って話す必要がある。
責任範囲に対する考え方が、ふざけているのではなく大真面目で間違っている。
193デフォルトの名無しさん:04/11/23 20:16:06
最近クリマンっていうのがコンビニで売っているね。
194デフォルトの名無しさん:04/11/23 20:16:08
問題の核心はあんまんの代替としてにくまんが許容されるか否かということだろう。
195デフォルトの名無しさん:04/11/23 20:16:19
>障害に対する処理のあり方

だから、間違ったことするくらいなら何もしない方がマシだって
余計なことするなって
下手な考え休むに似たり、って昔からいうだろ(w
196デフォルトの名無しさん:04/11/23 20:17:08
いやそうじゃない。企業の接待としてアンパンとカレーパンのどちらが伝統的かどうかだ。
197デフォルトの名無しさん:04/11/23 20:17:11
>>190
会社の金を無断で流用することも禁じられている

お前、何の話がしたいんだ?
障害に対する処理のあり方の話はもうしたくなくなったのか?
198デフォルトの名無しさん:04/11/23 20:17:56
>>197
ニュー速に帰れよ
199デフォルトの名無しさん:04/11/23 20:18:21
むしろ、障害時における小泉首相の対応が一国の首相としてふさわしいものであったかどうかだ。
200デフォルトの名無しさん:04/11/23 20:19:01
話そらすのに必死だな (プ
201デフォルトの名無しさん:04/11/23 20:20:08
くだらない話に必死だな (オナラプー
202デフォルトの名無しさん:04/11/23 20:21:19
くだらなくねえよ、メモリ枯渇の話はな
203デフォルトの名無しさん:04/11/23 20:21:55
とりあえず今日はそこまでにしたら?
荒れてるわけだし。
204デフォルトの名無しさん:04/11/23 20:23:30
何気ない引き篭もりの一言でここまでスレ荒らさなくてもいいのにな。
205デフォルトの名無しさん:04/11/23 20:24:01
メモリが無い時に、おまえらがいくらがんばっても意味ねーよ
206デフォルトの名無しさん:04/11/23 20:24:23
だな。喧嘩両成敗だ。
207デフォルトの名無しさん:04/11/23 20:26:57
Ruby!!!!!!!!!!>>>>>>>>>>>>>>>>>>>>
208デフォルトの名無しさん:04/11/23 20:28:13
つか「入力ファイルの大きさは1GBまで(ただし100万行以内)」とか
仕様上に上限を設けるのがふつう。
それ以上超えた使いかたしたら、何起こってもしらね。
209デフォルトの名無しさん:04/11/23 20:29:31
>取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
>依存 しなければなりません。 勝手な上限を設けてはいけません。
210デフォルトの名無しさん:04/11/23 20:30:48
>>209
そんな仕様を受け入れるプログラマは馬鹿だということだ。
211デフォルトの名無しさん:04/11/23 20:31:05
この親にしてこの子あり
男児の人格障害はほとんどの症例で母親に問題がある
212デフォルトの名無しさん:04/11/23 20:38:29
Rubyしあこうこう!!!!!!!!!
Ribuy!!!!!!!!!!!!んむhっばにRubytukaouy!!!!!!!
213デフォルトの名無しさん:04/11/23 20:39:00
Rubynotmaetnarashimeru!!!!!!!!!!!!!!
214デフォルトの名無しさん:04/11/23 20:39:24
RRRRRRRRRRUYBBBBBBBBYYYYYYYYYYYYYYYY 意s難波rおね!
215デフォルトの名無しさん:04/11/23 20:39:48
Rubyhasauikougenngo!
216デフォルトの名無しさん:04/11/23 20:40:19
undefinedなのかunspecifiedなのかをはっきりしろ。
217デフォルトの名無しさん:04/11/23 20:40:50
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
Ruby!!!!!!!!!!!!!!!!!!!!!!!!
218デフォルトの名無しさん:04/11/23 20:47:48
くだらないことで喧嘩するから>>217みたいなのが発生してしまったではないk
219デフォルトの名無しさん:04/11/23 21:01:16
>>281111111111111855



Rubyyyyyyyyyyyyyyyyyyyy!!!!!!!!!!!!!!!!!!!WE}っdq3t







Rbuyodasiakpoyui!!!!!!!!!RRRRRRRRRRRいう゛っypd@sdp
Rviupsdoufo;q2k,e4k,qd
Ryuby8o2i40w9dpfispw
220デフォルトの名無しさん:04/11/23 21:08:03
このスレからまた一人発狂者が生まれました。ザーメン。
221デフォルトの名無しさん:04/11/23 21:10:15
Ruby is nanbar one!
Ruby is the most best better good language than any other languages.
Enjoy Ruby!
222デフォルトの名無しさん:04/11/23 21:20:54
>118
ちょと解読&考えてみた。

・作業用に最大80個のファイルを作成する
・文字の数によって、1〜80の作業ファイルのいずれかに追記する。
 何文字の行があるのか0と1で表す配列で持つ(領域80個)
・行数の少ないところから、作業用ファイルの最初から、順に出力する

これ、メモリほとんど使わないYo!
223デフォルトの名無しさん:04/11/23 21:39:36
小さいテキストのとき無駄だから却下
224デフォルトの名無しさん:04/11/23 22:06:48
>>222
フェイールソォフトの問題点はそこじゃあない。
それでも1000テラバイトのファイルを入力したら
空き容量が足りなくて失敗することもあるだろう。

つまりディスク容量が足りなくなったらプログラムが自動的に
ショップまでハードディスクを買出してくるように作るべきだと。
225デフォルトの名無しさん:04/11/23 22:13:09
ひどい状況だな(w
226デフォルトの名無しさん:04/11/23 23:28:22
>>224
予算が足りなかったら自動的にアイフルと契約してお金を借りるように
なってるとなおいいね。w
227デフォルトの名無しさん:04/11/23 23:38:31
>>224
その前には、容量が逼迫してきたら自動的にアップローダーを起動して、画像ファイルに変換にしたものをネットにアップロードするとかか?
228デフォルトの名無しさん:04/11/23 23:39:46
マジレスするとそれは運用レベルの話。
229デフォルトの名無しさん:04/11/23 23:42:35
>>227
それともzipの蓮に「萌え」と入れてうpするか?
230デフォルトの名無しさん:04/11/24 22:24:44
>222
ちょと解読&考えてみた。

・何文字の行があるのか0と1で表す配列exist[]で持つ(領域80個)
・for(i=1; i<=80; ++i){
  if(exist[i])
   入力の先頭からi文字に一致する行を表示
 }

これ、メモリほとんど使わないYo!
231デフォルトの名無しさん:04/11/24 22:32:51
関数へのアドレス渡しなんですが構造体などを関数で飛ばしたい場合
アドレスにすればより効率よく早いと思いますが
それはint型やfloat型にもいえることなんでしょうか?
232デフォルトの名無しさん:04/11/24 22:34:05
>>231
いいえ。
233デフォルトの名無しさん:04/11/24 22:47:09
>>231
組み込み型は値渡しの方が一般的。
234デフォルトの名無しさん:04/11/24 23:00:20
>>231
100バイトの構造体を飛ばす代わりに4バイトのポインタ渡すのは効率的だけど
intもfloatも4バイトだから効果なし(サイズは一例)。
それどころかデリファレンスでむしろ遅くなる。
235デフォルトの名無しさん:04/11/24 23:14:43
定数を渡せないしな。
236デフォルトの名無しさん:04/11/24 23:17:47
>>231
実測せずに効率を語ろうとする怠け者に話すことはない
237デフォルトの名無しさん:04/11/24 23:20:14
>>236
お前には聞いてません。黙っててください。
238デフォルトの名無しさん:04/11/24 23:25:36
>>237
礼儀知らず
239デフォルトの名無しさん:04/11/25 00:06:04
実測より理屈が先だろ
240デフォルトの名無しさん:04/11/25 00:08:22
仕様できちんと決められているならば理屈も出せるんだがな
241デフォルトの名無しさん:04/11/25 00:17:01
数値計算をしていて、構造体の配列が非常に大きいのが必要になりmallocなどを用いることで
解決しました。
なぜ、ふつうに配列を定義したときにはある程度の配列数しか定義できなくて
mallocなどで動的にメモリを確保すると、より多くの配列を定義できるようになるのでしょうか。
(ポインター型のサイズなどと関係があるのでしょうか?)
どういう仕組みでなっているのか興味を持ち質問しました。
すいませんが教えてください。
242デフォルトの名無しさん:04/11/25 00:18:46
通常の配列は領域をスタックに確保するから
243デフォルトの名無しさん:04/11/25 00:27:34
一般に
ヒープの領域のサイズ>>>>>>>>>>>>>>スタックのサイズ
だから
244デフォルトの名無しさん:04/11/25 00:27:41
>>241
ざっくり言うと、普通に配列を定義しようとするとスタック領域というメモリ領域にそれを作ろうとする。
このスタックにはサイズの制限があることがあって、制限がある場合は、それ以下の大きさのものしか作れない。
(そのサイズって64KBとかそんな感じ)
このサイズを超えるような操作をしてしまうと「スタックオーバーフロー」とかいうエラーになったりする。
一方、mallocはヒープ領域というメモリ領域にそれを作ろうとして、まぁ大体は、実メモリ一杯まで取れたり
するので、巨大な配列でも作れる。

詳しくは、スタック領域、ヒープ領域、mallocでググれ。
245デフォルトの名無しさん:04/11/25 00:30:35
VCだとデフォルトでスタック領域は1MB、ヒープ領域は4GB弱。実メモリを超えても使えるよ。
246デフォルトの名無しさん:04/11/25 00:36:35
32bit環境では、リニアに使えるのが4GBまでってだけでOSさえちゃんと対応していて
メモリ量が十分(物理・仮想あわせて)だったら1GBのメモリを10個確保することも可能。
247デフォルトの名無しさん:04/11/25 00:38:42
どうもありがとうございます。
ヒントをいただいたので、そこからググってみます。
(グーグルで調べろってことですよね?)
248デフォルトの名無しさん:04/11/25 00:38:53
ほむほむ。
249デフォルトの名無しさん:04/11/25 00:40:11
double MIN = 0.0;
double MAX = 10.0;
double dt = 0.01;
euler(MIN, MAX, dt) //積分結果の最後の値を返す
0から10.0まで積分計算をし、積分結果の最後の値を返す関数eulerがあるのですが、
途中の計算過程も出力するようにするにはどうすればいいのですか?
250デフォルトの名無しさん:04/11/25 00:40:15
ここは親切なインターネッツですね。
251デフォルトの名無しさん:04/11/25 00:42:13
>>249
計算途中にprintfを入れまくる
252デフォルトの名無しさん:04/11/25 00:42:15
>>249
printf("%f\n", euler(MIN, 0.01, dt));
printf("%f\n", euler(MIN, 0.02, dt));
...
253デフォルトの名無しさん:04/11/25 01:11:30
241,247です。

ヒープ領域とはスタック領域とは基本的に全然違うのですね。
ヒープ領域は関数の外側にあるという感覚でいいのでしょうか?
となると、ヒープ領域にあるデータを参照するのには、関数の内部にある
スタック領域のポインターのようなものを用いてヒープ領域のデータを
読み取ってそれをスタック領域に持ってきて計算する、というようなことを
行っていると考えていいでしょうか?

こうやって考えてみると、ヒープ領域のデータを参照することと
スタック領域のデータを参照するときとやること自体は変わらず、
計算時間としては変わりないと考えればいいのでしょうか?
それともデータ構造を調整(すいません、どのように表現すればいいのか
わかりませんでした。)することがヒープ領域を参照するには余分に必要で、
計算時間はより長くかかると考えてよいのでしょうか?
254デフォルトの名無しさん:04/11/25 01:12:36
【えっと・・・】ググれ。
255デフォルトの名無しさん:04/11/25 01:13:16
>>253
スタック領域も関数の外側にあるわけだが・・・
だから間接的な再帰ができる
256デフォルトの名無しさん:04/11/25 01:15:50
>>253
プロセスの空間はOSによって割り当てられます。コードはこのへん、スタックはこのへん、ヒープはこのへん、というように
領域ごとに役割が与えられます。で、プロセスから見ると


って、説明難!勉強が足りないな。
プロセスから見たメモリ空間と実際のメモリ空間は違うもの、と認識しとけばいいかな。
はじめて読む486とか読めば結構詳しく書いてある。
257デフォルトの名無しさん:04/11/25 01:16:07
>>245
32ビット Windows でのユーザプロセス空間は最大2GBですよ?
(とある設定変更しても3GBまで)
258デフォルトの名無しさん:04/11/25 01:17:07
スタック…LIFOのデータ構造を持つ自動変数用、関数呼び出し用領域。

ヒープ…sbrkなどのシステムコールによってメモリの一部が割り当てられ、
    クライアントにポインタを返す。サーバアプリケーションなどの
    場合、確保したメモリはちゃんと解放してやらないとメモリが
    枯渇し、新たなメモリを確保することができなくなり、最悪
    サーバが落ちる。これをメモリリークと言う。
259デフォルトの名無しさん:04/11/25 01:21:35
>> 255

あ、そうでした。スタック領域も関数の外側でしたね。すいません。
じゃあ、やること自体は一緒で実行速度も一緒ですね。
(registerとかは関係なしで)

うーんと関数って呼び出すたびに、関数内で定義した変数のために
スタック領域をいじくると考えるとすごく計算時間がそんな感じがしました。
単にデータを参照するという計算時間時間だけでなく、このようなところにも
関数を使うことで計算時間が長くなってしまうのですね。
(すいません、間違ってたら教えてください)
やっぱ、プロファイラを使うとき意外はインライン展開するようにしたほうが
いいな、と思いました。

もうちょっとググってみます。
260デフォルトの名無しさん:04/11/25 01:24:11
>> 256

どうもありがとうございます。
"はじめて読む486"、読みます^^。
261デフォルトの名無しさん:04/11/25 01:26:31
>>259
そろそろ寝るぞ
スタック領域をいじくらない関数つーとレジスタでも使うってことか
そのレジスタの中身はどこにバックアップされると思う
それとプロファイラを使うときだけインラインを抑止したら意味ねえぞ
262デフォルトの名無しさん:04/11/25 01:26:38
>>253
今は
・ローカル変数はスタックに取られるからサイズに注意しないといけない
・それより大きな変数を使いたければ、mallocを使う。んで、それはヒープという所に取られる
・static変数、グローバル変数は、それらとはまた別の場所に取られる
・それらは、場所が違うだけで、使う方法は一緒だし、計算時間もほぼ一緒
と思っておけばいいよ。
263デフォルトの名無しさん:04/11/25 01:31:27
この本がお勧め。
エキスパートCプログラミング―知られざるCの深層
http://www.amazon.co.jp/exec/obidos/ASIN/4756116396/249-8849878-3464321
264デフォルトの名無しさん:04/11/25 01:47:44
どうもありがとうございます。

そのレジスタの中身はどこにバックアップされると思う

レジスターの中身のバックアップを取っているとは知りませんでした。
うーんと、スタックでしょうか?

 "エキスパートCプログラミング―知られざるCの深層"

これも読んでみます。
265デフォルトの名無しさん:04/11/25 01:51:32
>>263の本は読んでないけどかなり評判いいな。
Cの下でどんな事が起きてるのかを理解するにはアセンブラに触れる必要があるからね。

レジスタの中身はスタックにバックアップされる。コンパイラは、それによる
スタックポインタ位置移動も計算してローカル変数の偏移値を求め、
辻褄を合わせてアセンブルする。コンパイラのソースを読め、なんて無茶な人も居るけど、
そんなのムリムリカタツm(ry
266デフォルトの名無しさん:04/11/25 02:04:33
> それとプロファイラを使うときだけインラインを抑止したら意味ねえぞ

てっきり、プロファイラーを使うときにはインラインしたらだめだと思っていました。
今、やってみて気づきました。すいません、どうもありがとうございました。
267デフォルトの名無しさん:04/11/25 07:12:35
釣りなのか
それとも
マジで低レベルの話なのか
268デフォルトの名無しさん:04/11/25 16:07:21
double MIN = 0.0;
double MAX = 10.0;
double dt = 0.01;
euler(MIN, MAX, dt) //積分結果の最後の値を返す
0から10.0まで積分計算をし、積分結果の最後の値を返す関数eulerがあるが、
途中の計算過程も出力しろや!!

269デフォルトの名無しさん:04/11/25 20:27:53
>>265
あんまし、勉強にはならないと思うよ ・・・面白いけど
270デフォルトの名無しさん:04/11/25 22:49:24
271デフォルトの名無しさん:04/11/26 18:01:11
今まで、利用していただけだから気づかなかったけど、

FFFTPの作者って、ソースを見る限り
凄いプログラマーなんだな〜っと思ったよ。
272デフォルトの名無しさん:04/11/26 18:07:21
コピペばかりだけどな
273デフォルトの名無しさん:04/11/26 18:34:19
すごい数のグローバル変数だな。
274デフォルトの名無しさん:04/11/26 18:42:31
有り得ないよな。ハンドルすらロクに使ってないからな
275デフォルトの名無しさん:04/11/26 21:18:55
FFFTPなんて使えないソフトの代表例
276デフォルトの名無しさん:04/11/26 21:22:35
最高ソフトFTP!!!!!!!
FFFTP>>>>>>>>>>>>>>>>>>>>>C
277デフォルトの名無しさん:04/11/26 21:26:17
↓RubyとFFFTPの比較
278デフォルトの名無しさん:04/11/26 22:41:00
>>277
りんご>>貯金箱
279デフォルトの名無しさん:04/11/26 23:14:22
>>278
C++のストリームに見えてしまう…orz
280デフォルトの名無しさん:04/11/26 23:30:32
たわし > お前ら
281デフォルトの名無しさん:04/11/27 00:10:20
たわしは海外旅行。
282デフォルトの名無しさん:04/11/27 00:13:07
なんだ、女の三助さんかと思った
283デフォルトの名無しさん:04/11/27 00:13:29
やっぱりその……FFFTPのコードはある意味凄いって事でいいの?
漏れ、あのコードはなかなか読めなくて……。
自信なくしてんだ……。
284デフォルトの名無しさん:04/11/27 00:18:07
う〜ん・・・いわゆる「駄目」なプログラムの代表例ですね。
285デフォルトの名無しさん:04/11/27 00:26:41
これくらい読めないと、仕事でプログラム読むのは無理だろ。
286デフォルトの名無しさん:04/11/27 00:37:21
まあ、たしかに。仕事なら酷いプログラムなんていくらでも
読まなくちゃならんし。
287デフォルトの名無しさん:04/11/27 01:14:11
どこにそーすあんの?
288デフォルトの名無しさん:04/11/27 01:31:46
289デフォルトの名無しさん:04/11/27 04:47:47
http://www.jisc.go.jp/ X3010
これ落とせないの?
290デフォルトの名無しさん:04/11/27 05:00:20
全部読み込んだあとキャッシュフォルダからコピー
291デフォルトの名無しさん:04/11/27 05:16:47
>>290
ダメでした。
「文書のプロパティ」を見る限り
コピーできないセキュリティになってるから
Adobe Reader がそれを許さないみたい
292デフォルトの名無しさん:04/11/27 05:39:23
>>291
うちはAdobe Readerをインストールしていないから閲覧ページを開くと自動的にダウンロードのダイアログが出る。
もしかしたらAdobe Readerを一度アンインストールすればダウンロードできるかも。
293デフォルトの名無したん:04/11/27 06:14:30
>>292
6.0.1でブラウザのアドオンリストから削除したらできました。
thxです。

でも6.0.2ではそれもAdobe Readerが
許さないようなのでバグかと
294デフォルトの名無しさん:04/11/27 10:22:08
httpリクエストをプログラムから発行するくらい君らには簡単でしょ?
295デフォルトの名無しさん:04/11/27 11:08:10
va_list に対して規格が要求している意味づけが理解できていません。

va_list は、使用前に va_start() 、使用後に va_end() を呼ぶ決まりになっていますが、
その使用中に、対象となる va_list の複写が行われ、その後
各々の va_list に対して別々の va_arg() が呼ばれた場合、
複写元の va_list についてだけ va_end() を呼べばよいのでしょうか?
それとも複写先の va_list についても va_end を
呼ばなくてはならないのでしょうか?
それとも va_list は、そのような使用法を認めていないのでしょうか?
296デフォルトの名無しさん:04/11/27 11:18:15
>>295
いっぺん void* で書いてみればわかるよ
297295:04/11/27 11:31:36
>>296
処理系依存の話ではなく、
「規格が要求している意味」の話です。
処理系によっては va_end() は、何も動作しないという
定義がされていることもあります。
298デフォルトの名無しさん:04/11/27 11:54:11
>>295
後者。
va_start()とva_copy()を呼び出したらそれに対応するように同じ関数内でva_end()を呼び出さなければならないと書いてある。
299295:04/11/27 12:10:09
>>298
ああ、C99 で va_copy() なんてものが出来たんですね。
ありがとう。

でも、それ以前はこの手の問題は曖昧だったのかな?

それと、vprintf 等の関数の引数として"複写"された va_list も
同じように(vprintf 内の終了処理として)va_end() を
呼ばなくてはいけないとか?
ますます訳が分からなくなってきたかも。
300デフォルトの名無しさん:04/11/27 13:07:37
char str[256];
のように、サイズを 2 のべきにするのには何か理由があるのでしょうか?
301デフォルトの名無しさん:04/11/27 13:09:37
>>300
無い
302デフォルトの名無しさん:04/11/27 13:12:10
>>300
ただ単に2進数にすると256は100000000、その他2のべき数はいずれも2進数にするとキリがいいように見える。
303デフォルトの名無しさん:04/11/27 13:25:37
>300
2のべきというより、アドレスビット幅でないの?
32bit=8バイトのxx倍
304デフォルトの名無しさん:04/11/27 13:30:28
>>300
アラインメントの関係でプロセッサのビット幅に合わせた方が
無駄が出ない可能性が高いから。
305デフォルトの名無しさん:04/11/27 14:28:30
>>300
仕様で決ってるから。
306デフォルトの名無しさん:04/11/27 14:30:58
>>305 うそでしょ?
307デフォルトの名無しさん:04/11/27 14:33:07
>>306
そういう仕様はよくあるよ?
308デフォルトの名無しさん:04/11/27 14:33:54
>>307
たとえば何というコンパイラ?
309デフォルトの名無しさん:04/11/27 14:37:55
>>308
コンパイラじゃなくて、仕様の話。
310デフォルトの名無しさん:04/11/27 14:44:40
すいません 質問させていただきます
./a.out 256
等と 引き数?をとっているんですが
これを 数字(10進)かどうか判断するのはどうすればいいのでしょうか?
今は、頭から1つずつ数字を取っていき それが0以上9以下ならと言う理由で
全ての桁をチェックしています
それと、11-22等のように記号付で取ったさいにその記号までをコピーするとか
言うのは どのようにできるのでしょうか?
すいませんが教えてくださいお願いします
311デフォルトの名無しさん:04/11/27 14:48:46
>>310
> 今は、頭から1つずつ数字を取っていき それが0以上9以下ならと言う理由で
> 全ての桁をチェックしています
isdisitでチェックしたほうが効率がいいだろう。

> それと、11-22等のように記号付で取ったさいにその記号までをコピーするとか
記号が現れたところまでをこぴーすればいい。
312デフォルトの名無しさん:04/11/27 14:52:39
>>311
どんな理由で効率がいいんですか?
313デフォルトの名無しさん:04/11/27 14:54:57
>0以上9以下
が 1つの条件で判断できるから
314デフォルトの名無しさん:04/11/27 14:59:11
なんだ、ソース上の効率か。
315デフォルトの名無しさん:04/11/27 14:59:27
>>311
記号が現れたところまでこぴーとはどうやるんですか?
316デフォルトの名無しさん:04/11/27 15:00:11
>>314
バイナリ上でも一回の条件判断である可能性は高いけど。
317デフォルトの名無しさん:04/11/27 15:01:19
>>316
見た目だけでしょ?
318デフォルトの名無しさん:04/11/27 15:01:26
>ソース上の効率

プ
319デフォルトの名無しさん:04/11/27 15:01:59
>>315
記号が現れたところで処理を中断すればいい。
320デフォルトの名無しさん:04/11/27 15:02:12
>見た目だけ

pu
321デフォルトの名無しさん:04/11/27 15:03:22
>>320
ちゃんと説明してくれませんか?
322デフォルトの名無しさん:04/11/27 15:04:30
isdigit系がどう実装されてると思ってるんだろう?
323デフォルトの名無しさん:04/11/27 15:04:36
一般的なライブラリではテーブルを使って1度判定するだけ
324310:04/11/27 15:06:38
>>311
ありがとうございます
isdisitと言うものを検索して見たのですが出ませんでした
すいませんが どのようなものか説明していただけないでしょうか?
すいませんがお願いします
>記号が現れたところまでをこぴーすればいい。
と なると私はこれも頭から1文字ずつ読んでいき記号が出るまでと言う風に
してしまうのですが こういう風なことを言っていられるのでしょうか?
すいませんが教えてください
325デフォルトの名無しさん:04/11/27 15:07:45
>>323
な、なんだってぇぇ
いわゆる全角も対応しているやつも考えたらすごいテーブルだ
326デフォルトの名無しさん:04/11/27 15:11:01
>>324
isdigit()
'0'から'9'までなら1、そうでなければ0を返す
327デフォルトの名無しさん:04/11/27 15:11:36
>>325
これって、判定する文字はunsigned charかEOFでなければならないらしいけど、
どうやって全角に対応しているんだろう。
328デフォルトの名無しさん:04/11/27 15:14:25
#define isdigit(c) ((unsigned)((unsigned char)(c) - '0') < 9)
こうすりゃテーブル不要。
329デフォルトの名無しさん:04/11/27 15:16:06
>328
ヴァカハケーン

符号なしはマイナスにはなりませーんw
330デフォルトの名無しさん:04/11/27 15:17:05
>329

...かわいそうに
331310:04/11/27 15:19:44
ありがとうございました
if(!(isdigit(c))) { exit(1);}
で 今までと同じことができました
でも今までの方が自分なりにわかりやすかったかも・・
332デフォルトの名無しさん:04/11/27 15:19:49
>>328
ヴァカでした。OTL
#define isdigit(c) ((unsigned)((unsigned char)(c) - '0') < 10)
333デフォルトの名無しさん:04/11/27 15:21:16
isdigitってアスキーコードで計算すんの?
334デフォルトの名無しさん:04/11/27 15:21:52
>>328
引き算が使われちゃってるね。
335デフォルトの名無しさん:04/11/27 15:22:35
文字コードが連続しているからいいんだけどね。。。
336デフォルトの名無しさん:04/11/27 15:23:50
>>331
strtolなんかも使ってみたらどう?
337310:04/11/27 15:26:42
>>333
わかんないです
今までは(c > '9')とかでやっていたのでそれの代替になったということは
そうなっているのではないでしょうか?
すいません わからないです  わかるかたいましたらすいませんがお願いします

>>336
すいません プログラムをはじめたばかりなので全然わからないんですよ
できれば それも説明していただければ嬉しいです
338デフォルトの名無しさん:04/11/27 15:27:10
>>335
それ以外にも、効率的に条件判断二回とほぼ同等になっちゃいそうだ。
339デフォルトの名無しさん:04/11/27 15:28:21
>>337
char *hoge;
long n = strtol("16-256", &hoge, 0);
とするとnには16、hogeには"-256"が入っている。
340デフォルトの名無しさん:04/11/27 15:32:49
>>339
そんなんはじめてみた
もっと詳しく
341デフォルトの名無しさん:04/11/27 15:40:05
long int
strtol(const char *nptr, char **endptr, int base);

説明
strtol() 関数は nptr の文字列の最初の部分を、 base を基数としてlong int に変換する。
この base は 2 から 36 までの値あるいは特別な意味を持つ値 0 (後述)でなければならない。
文字列の先頭には、任意の数の空白があってもよく、また数字の直前には `+' か `-' があってもよい。
base が 0 または 16 の場合には、 `0x' ではじまる文字列は 16 進数として扱われる。
これ以外の文字列に対して base が 0 の場合は、 `0' で始まる文字列は 8 進数として、それ以外の文字列は 10 進数として扱われる。
数字を表す文字列は long int に変換されるが、基数に対して有効でない数字が現れた時点で変換は終了する。
(11 進数以上では `A' は大文字・小文字に関わらず 10 を表し、 `B' は 11 を表現し、以下同様に、 `Z' は 35 を表す。)
endptr がヌル値 (NULL) でない場合は、最初に現れた不正な文字が strtol() によって *endptr に保存されている。
文字列に有効な数字がひとつもなければ、 strtol() は nptr の元の値を *endptr に代入する(そして 0 を返す)。
特に、*nptr が `\0' 以外で、戻された **endptr が `\0' ならば、文字列全体が有効だったことになる。
342デフォルトの名無しさん:04/11/27 15:51:35
int *p;とやった場合はアドレスを入れる宣言になって
式中に*pと出てきた場合はなにになるんでしたっけ?
343デフォルトの名無しさん:04/11/27 15:54:19
>>342
int 型になる。
344342:04/11/27 15:56:09
>>343
どういういみでしょうか?
私が読んでる本に書いてあった気がするんですが朝から探しているのですが
見つけられませんでした
確かその本には 全然意味が違うみたいなことを書いてあったんですが
345デフォルトの名無しさん:04/11/27 15:57:14
int n=100;
int *p=&n;

*p は int の 100
346デフォルトの名無しさん:04/11/27 16:07:45
>>344
ちなみに、何の本読んでるの?
347デフォルトの名無しさん:04/11/27 16:07:57
俺もポインタの事で質問だが

int *pの

pと&pはどう違うの?
348デフォルトの名無しさん:04/11/27 16:09:29
int *p の &p は int **
349デフォルトの名無しさん:04/11/27 16:12:33
>>344
どう書いてあるの?
350349:04/11/27 16:14:30
ああ、スマソ。見つけられないて書いてあるなw
351342:04/11/27 16:14:31
>>345
すいません ちょっと意味がわからないです

>>346
C言語によるプログラミング」って本です
352デフォルトの名無しさん:04/11/27 16:16:40
>>348
おーなるほど
サンクスm(_)m
353デフォルトの名無しさん:04/11/27 16:18:54
>すいません ちょっと意味がわからないです

int n=100;
int *p=&n;

printf("n は int の %d\n", n);
printf("*p は int の %d\n", *p);
354デフォルトの名無しさん:04/11/27 16:34:27
int *p; という変数の宣言は式の中で*pと書くとint型の値を得られるということ。
355デフォルトの名無しさん:04/11/27 17:58:37
atoiしたものをsprintfしてstrcmpすればいい
356デフォルトの名無しさん:04/11/27 18:36:44
int i = xxx("16-256");
これで i が -240 になるような関数xxxはありますか?
357デフォルトの名無しさん:04/11/27 18:37:53
>>356
作ればあるだろうけど、標準にはない。
Perl とか Python なら eval でできるんだろうけど。
358デフォルトの名無しさん:04/11/27 18:38:24
こっちのスレから消費しようよ。
http://pc5.2ch.net/test/read.cgi/tech/1100956766/
359デフォルトの名無しさん:04/11/27 20:17:47
>>357
単に引いてそれが0より小さかったら符号消したら言いだけじゃね?
次の方 実際にCで書いてください

360デフォルトの名無しさん:04/11/27 20:25:12
>>356
探索範囲を指定せよ
361デフォルトの名無しさん:04/11/27 20:25:26
define xxx("16-256"); -240
362359:04/11/27 20:27:20
ごめん
俺読み間違えてた
363359:04/11/27 20:29:53
んなもん 普通に引いてもなるじゃん
364デフォルトの名無しさん:04/11/27 20:38:04
int xxx(const char* str)
{
return -240;
}
365デフォルトの名無しさん:04/11/27 20:52:11
>>356
1番近いのはstrtolを繰り返し呼ぶことだな。
char *p;
int i = strtol("16-256", &p, 10);
int j = strtol(p, NULL, 10);
i += j;
366デフォルトの名無しさん:04/11/27 20:52:47
>>356
int xxx(const char * str)
{
FILE *fp;
char buf[200];
sprintf(buf, "awk 'END {print %.170s;}' /dev/null", str);
fp = popen(buf, "r");
fgets(buf, sizeof(buf), fp);
return atoi(buf);
}
367デフォルトの名無しさん:04/11/27 20:54:07
>366ならawkで許される演算なら何でもOK。
ex.: xxx("1+2*3/6");
368デフォルトの名無しさん:04/11/27 21:36:47
まじめにやるならパーサ作るだな
369デフォルトの名無しさん:04/11/27 21:38:51
>>366
Windows で動かないだろ。
370デフォルトの名無しさん:04/11/27 22:45:36
>>369
UxToolsぐらい入れとけよ
371デフォルトの名無しさん:04/11/27 22:47:07
>>370 なんすかそれ。
372デフォルトの名無しさん:04/11/27 23:27:56
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C
373デフォルトの名無しさん:04/11/27 23:38:30
RubyがCに進化する
374デフォルトの名無しさん:04/11/27 23:58:55
Cで複素数の計算をしたいのですが、どういう方法でするのが一般的ですか?
375デフォルトの名無しさん:04/11/28 00:14:02
とりあえずコンドームしろ
376デフォルトの名無しさん:04/11/28 00:14:04
complex
377デフォルトの名無しさん:04/11/28 00:22:33
>>374
実部と虚部にわけて計算すればよい。
たとえば、(2+3i)+(3+4i)という計算は、
実部として2+3の計算結果と
虚部として3+4の計算結果を別々に保存すれば良い。
それをわかりやすくするには構造体として
struct complex {
double re;
double im;
};
のようなものを定義しておけばよい。
378デフォルトの名無しさん:04/11/28 00:24:05
激しくスレ違いだが、C++なら標準で複素数クラスがある。一応。
379デフォルトの名無しさん:04/11/28 00:29:31
C99で複素数型ってのが追加になったんでなかったっけ?
記憶違いならスマソ
380デフォルトの名無しさん:04/11/28 00:32:01
なってる。_Complexとかcomplexとか。
381デフォルトの名無しさん:04/11/28 00:49:24
>>377
eのi乗はどうしたらいいですか?
382デフォルトの名無しさん:04/11/28 00:57:01
>>381
e^iはそのままe^iというものを定義して扱う。
それって分解できないでしょ。
383デフォルトの名無しさん:04/11/28 01:01:46
xor
384デフォルトの名無しさん:04/11/28 01:03:05
nor
385デフォルトの名無しさん:04/11/28 01:37:54
すいません、全部のソースはのせられないのですが、
ファイルに計算した数値を書きこむプログラムを作っているのですが、

printf("%f",S);
strcpy( aa , "文字・・・" );
strcpy( bbb , "文字・・・" );
fprintf( fp , "%s\n" , aa );
fprintf( fp , "%f %f %f",x,y,z);
fprintf( fp , "%s\n" , bbb );
fprintf( fp , "%f\n" ,S);
printf("%f",S);
printf("書き込みました。\n");
fclose(fp);
return 0;

としたときに、初めのSとあとのSの値が変わってしまうのですが、どうしてでしょうか?
386デフォルトの名無しさん:04/11/28 01:40:01
aa か bbb がバッファオーバーランして S に上書き
387デフォルトの名無しさん:04/11/28 01:41:06
具体的にはどうすればいいのでしょうか?
388デフォルトの名無しさん:04/11/28 01:43:14
aa と bbb の定義部分を載せる
389デフォルトの名無しさん:04/11/28 01:46:08
>>388
とりあえず解決しました。ありがとうございました。
390デフォルトの名無しさん:04/11/28 01:48:55
>>381
オイラーの公式で分解できるだろ。
391デフォルトの名無しさん:04/11/28 02:25:47
>>375
巨根ですが。
392デフォルトの名無しさん:04/11/28 03:20:57
mallocでメモリを確保するの意味が分かりません。
char t[5];

char *t=malloc(5*sizeof(char));
はいったいどういう違いがあるんでしょうか。
393デフォルトの名無しさん:04/11/28 03:24:40
マルチすんなボケカス
394デフォルトの名無しさん:04/11/28 03:35:26
マルチですか、すいません。
もしご存じでしたら私と同じ質問に対する回答へのリンクを貼ってください。
395デフォルトの名無しさん:04/11/28 03:47:15
>>392
ANSI Cでは配列のサイズは定数でなければならないことになってる。

配列のサイズが初めからわかっているのならそれでいいが、
必要なサイズがわからない場合は動的確保せざるをえまい。
396デフォルトの名無しさん:04/11/28 03:51:32
>>392
失せRuby!!!!!!!!!!!!
397デフォルトの名無しさん:04/11/28 03:52:07
C99はできますね。
398デフォルトの名無しさん:04/11/28 04:20:15
isspaceとisblank(どちらも標準)の違いを説明できるやつは
ここにはいなさそうだな。
399デフォルトの名無しさん:04/11/28 04:22:54
↑ぷRuby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
400デフォルトの名無しさん:04/11/28 05:38:27
>>398
isspaceは改行文字に対して真を返すが、isblankでは偽を返す。
401デフォルトの名無しさん:04/11/28 09:34:05
>>392
char t[5];
関数から出たら解放される。

char *t=malloc(5*sizeof(char));
関数から出ても解放されない。
402デフォルトの名無しさん:04/11/28 09:39:29
>mallocでメモリを確保する

・でかい領域を確保したいとき
・あとからサイズを拡張とかしたいとき
403デフォルトの名無しさん:04/11/28 09:41:52
それはわかるんですけど、
char t[5];
をグローバル変数としてしまえば
プログラムを終了するまで保持するわけですよね?

で、関数から出ても解放されないと言うことは
解放しなければ恒久的にそのアドレスのデータは残るというわけですよね?
と言うことはそのアドレスをテキストに落として
別のプログラムからそのアドレスにアクセスするという事も可能なのでしょうか?
404デフォルトの名無しさん:04/11/28 09:43:39
>>403
OSによる。
405デフォルトの名無しさん:04/11/28 09:44:51
Winは出来るの?
406デフォルトの名無しさん:04/11/28 09:45:42
>>405
OSによる。
407デフォルトの名無しさん:04/11/28 09:46:10
WinXPは出来るの?
408デフォルトの名無しさん:04/11/28 10:00:10
>>403
int main() {
  char *p = hoge("foo");
  char *q = hoge("bar");
  puts(p);
  puts(q);
  return 0;
}

上のようなときにグローバル変数を使うか動的に確保するかで挙動が違う。
char t[5];
char *hoge(char *p) {
  return strcpy(t, p);
}

char *hoge(char *p) {
  char *q = malloc(strlen(p) + 1);
  return strcpy(q, p);
}
409デフォルトの名無しさん:04/11/28 10:22:21
>>406
出来るOSを挙げてみそ
410デフォルトの名無しさん:04/11/28 10:23:14
このスレは次スレになるらしいからこっちから消費してくれ。
http://pc5.2ch.net/test/read.cgi/tech/1100956766/
411デフォルトの名無しさん:04/11/28 10:33:52
やだ
412デフォルトの名無しさん:04/11/28 11:49:57
C99って仕様変更多すぎでコンパイラベンダにスルーされそうな予感。
C++との互換性もなくなっちゃったわけで、C++への対応度が高まってきている
昨今、各コンパイラベンダがわざわざC99用のコンパイラを整備するだろうか。
413デフォルトの名無しさん:04/11/28 11:57:27
// stdint stdboolだけあれば十分
414デフォルトの名無しさん:04/11/28 12:06:21
>>412
gccはするに違いない
415デフォルトの名無しさん:04/11/28 12:22:33
> 昨今、各コンパイラベンダがわざわざC99用のコンパイラを整備するだろうか。

こいつぼけ。逆だろ? 今後でてくるCのコンパイラーがあったら、C99に対応していない
やつはあり得ない。
416デフォルトの名無しさん:04/11/28 12:23:55
> gccはするに違いない

gccはむしろC99寄り。現状でC99のほとんどの機能満たしているんだし、
わざわざへそまがりなことはしない。
417デフォルトの名無しさん:04/11/28 12:25:54
VS.NETは普通に対応してないだろ。
418デフォルトの名無しさん:04/11/28 12:31:07
>>409
組み込み系のOS
419デフォルトの名無しさん:04/11/28 12:35:14
Win3.1はできそうだな
420デフォルトの名無しさん:04/11/28 12:59:41
この板のコテハンとか口調に特徴もたせる奴って馬鹿ばっか
421デフォルトの名無しさん:04/11/28 13:10:36
ということにしたいのですね?
(負け惜しみすぎー)
422デフォルトの名無しさん:04/11/28 13:23:57
>>410
このスレを消費する速度より遥かに速い速度でそっちを埋めてしまえばいい
423デフォルトの名無しさん:04/11/28 14:23:22
まだVC vs gccを続けるんですか?
424デフォルトの名無しさん:04/11/28 14:24:35
>>418
いいかげん、組み込み至上主義は捨てろよ。
組み込みとそれ以外でどっちが特殊なのか考えてみろ
425デフォルトの名無しさん:04/11/28 14:26:27
>>424
特殊の基準による
稼働数かい?
426デフォルトの名無しさん:04/11/28 14:36:42
前スレの末路を見ると、キチガイが3人居ればスレなんかいとも簡単に埋まるということを実感するな。
427デフォルトの名無しさん:04/11/28 14:39:02
日曜日は基地外もひまなんだな
428デフォルトの名無しさん:04/11/28 14:40:38
キチガイは void 一人だけだろ?
429デフォルトの名無しさん:04/11/28 14:41:15
>>428
劣化コピーが暴れてただけだよ
430デフォルトの名無しさん:04/11/28 14:42:42
ということにしたいのですね?
431デフォルトの名無しさん:04/11/28 14:43:08
本人は絶対に全角"?"とか使わない品
432デフォルトの名無しさん:04/11/28 14:43:13
上げ厨は2人と見た
433デフォルトの名無しさん:04/11/28 14:47:45
>>420
そんなこといわないでよー にゃんにゃん
434デフォルトの名無しさん:04/11/28 14:50:08
age
435デフォルトの名無しさん:04/11/28 14:52:05
indentコマンドは-gnuで使ってますか? それとも-kr?
うちの会社は8割ぐらいが-kr派なんですが、
残り2割りに6通りぐらいの小さい派閥があって
まとまらない。
436デフォルトの名無しさん:04/11/28 14:58:30
bsd
437デフォルトの名無しさん:04/11/28 15:00:32
まとまらないってまとめるなら派閥の意見聞いたってしょうがないだろ。
438デフォルトの名無しさん:04/11/28 15:12:26
ある問題集で
「符号ありの整数型データをシフトするときは
常に算術シフトであると見なされるため、
符号ビットは不変である」
の答えが「×」なんです。

「○」になるものだとばかり思っていたのですが、
こういうものなのでしょうか
439デフォルトの名無しさん:04/11/28 15:13:53
>>438
補足です
記述が正しいものには「○」、
正しくないものには「×」をつけろ
という問題でした。
440デフォルトの名無しさん:04/11/28 15:19:03
そういうものです
441デフォルトの名無しさん:04/11/28 15:21:41
>>438
そういうもんです。論理シフトとはビット列を何も考えずにシフトするため符号付整数型のデータは
思い通りにシフトできません。簡単のために8bitで説明すると、こうなります。
00010000(10進値: 16)を右に2ビット論理シフトすると
00000100(10進値: 4)となり、4で割った状態となります。しかし
11110000(10進値: -16)を右に2ビット論理シフトすると
00111100(10進値: 60)となり、これは整数値に対する演算として望む結果ではないでしょう。算術シフトすると
11111100(10進値: 4)となり、-16に4をかけたものとなります。
442デフォルトの名無しさん:04/11/28 15:22:11
そもそも、符号ビットなんて存在するの?
443441:04/11/28 15:25:06
>>441
こいつぼけ。
> -16に4をかけたものとなります。
-16を4で割ったものとなります。

自虐的です
444デフォルトの名無しさん:04/11/28 15:27:42
>>440-443
ありがとうございます.

>>441
> 11110000(10進値: -16)を右に2ビット論理シフトすると
> 00111100(10進値: 60)となり、これは整数値に対する演算として望む結果ではないでしょう。算術シフトすると
> 11111100(10進値: -4)となり、-16を4で割ったものとなります。
こうなるんですよね? これは私が期待していた結果です.

なので問題の記述
> 「符号ありの整数型データをシフトするときは
> 常に算術シフトであると見なされるため、
> 符号ビットは不変である」
^^^^^^^^^^^^^^^^

は正しいと思うのですが
もしかして「常に算術シフトになる,とは限らない」ので「×」なんでしょうか?
445デフォルトの名無しさん:04/11/28 15:31:45
>>444
>もしかして「常に算術シフトになる,とは限らない」ので「×」なんでしょうか?

そうですね。
446デフォルトの名無しさん:04/11/28 15:32:04
左シフト
447デフォルトの名無しさん:04/11/28 15:32:42
絶対ググったほうが圧倒的に早いのになんでググらねぇの?
謎だ
448デフォルトの名無しさん:04/11/28 15:36:11
>>447
すみません。でも、私の代わりに調べたりしてくれるから、便利だなーって・・・
449438,439,444:04/11/28 15:38:07
>>447
誰?

>>446
tnx.
理解できました.

#include <stdio.h>
#include <stdint.h>

int
main(void)
{
signed int i = INT32_MAX;

printf("INT32_MAX = %d\n", i);
printf("INT32_MAX << 1 = %d\n", i << 1);

return 0;
}


450デフォルトの名無しさん:04/11/28 15:38:09
01000000 <<1はどうなる?
451デフォルトの名無しさん:04/11/28 15:39:27
>>449>>447じゃなくて>>448ですね.
すみませんでした.
452デフォルトの名無しさん:04/11/28 15:42:05
453デフォルトの名無しさん:04/11/28 15:44:08
三重婚ぐらいか
454デフォルトの名無しさん:04/11/28 15:55:46
>もしかして「常に算術シフトになる,とは限らない」ので「×」なんでしょうか?

「算術シフトするとは、言語の規格で決められていない」ので「×」
455デフォルトの名無しさん:04/11/28 16:11:45
分かったつもりで分からなくなった…

#include <stdio.h>
#include <stdint.h>

int main(void)
{
signed int i;
i = INT32_MAX; printf("%x\n", i);
i = i >> 1; printf("%x\n", i);
i = i << 1; printf("%x\n", i);
i = i << 1; printf("%x\n", i);
i = i >> 1; printf("%x\n", i);
return 0;
}

実行結果は
7fffffff
3fffffff
7ffffffe
fffffffc
fffffffe

右シフトは算術シフトで左シフトは論理シフト?
456デフォルトの名無しさん:04/11/28 16:16:24
左シフトに算術も論理もない。あるのはオーバーフローを考慮しないでシフトすると言う事実だけ。
457デフォルトの名無しさん:04/11/28 16:30:37
458デフォルトの名無しさん:04/11/28 16:35:13
>>457

こんなこと書いてる奴のサイトなんか参考にするなよ

>小数点以下を取り扱わないのですから当然の結果ですね。
>難しいことは分かりませんが、普通のシフト演算は整数の
>範囲ということになりそうです。
>勿論、コンピュータはこのシフト演算で計算をしているの
>ですから、少数点以下も取り使えるはずですが、今はよく
>わかりません。
459455:04/11/28 16:40:45
スパイラルしてきた…

#include <stdio.h>
#include <stdint.h>

int main(void)
{
unsigned int i;
i = 0x10000000; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i << 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
i = i >> 1; printf("%08x : %d\n", i, i);
return 0;
}

実行結果
10000000 : 268435456
20000000 : 536870912
40000000 : 1073741824
80000000 : -2147483648
40000000 : 1073741824
20000000 : 536870912
10000000 : 268435456

unsigned int なのに負? ヤバい, 分からん….
460デフォルトの名無しさん:04/11/28 16:42:55
>>459
printfにunsignedであることを教えてやらなきゃ
461デフォルトの名無しさん:04/11/28 16:43:02
こういうのは本読めば書いてあるだろ
考えることじゃない
仕様を調べるだけだ
462デフォルトの名無しさん:04/11/28 16:47:36
>>460, >>461
> d,i int 引数を符号付き 10 進表記に変換する。
か….
ちゃんとした本買わんといかんな….

すまんかったです….
そしてありがとうございました.

463デフォルトの名無しさん:04/11/28 16:52:44
464デフォルトの名無しさん:04/11/28 17:20:13
↑ブラクラ
465デフォルトの名無しさん:04/11/28 17:23:12
>>463
アホだwすげぇ
466デフォルトの名無しさん:04/11/28 18:05:09
>>457
そのページだけでも間違いがいくつもある。
記憶違いに基づくものはまだしも、そのページ内に書かれている情報だけでも矛盾が発生している。
467デフォルトの名無しさん:04/11/28 23:45:57
(・∀・)
468デフォルトの名無しさん:04/11/28 23:46:30
Part 96 がバトル状態です。
469デフォルトの名無しさん:04/11/28 23:48:36
>>468
必死っぷりがキモいね。
470デフォルトの名無しさん:04/11/28 23:48:43
なんつーかあれだな。
開発がHEADでどんどん進んでたまにstableにマージされるような感じだな。
Debianで言えば
87: woody
95: sarge
96: sid
こんな感じか。
471デフォルトの名無しさん:04/11/28 23:49:01
こっちはマターリいきましょう。
472デフォルトの名無しさん:04/11/28 23:49:32
>>470
デビーンキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
473デフォルトの名無しさん:04/11/28 23:51:55
長寿スレの割に結構人がいなくてマターリなのに、いきなり勃発して
数分の内にすさまじい量のレスがつくんだよな。
同じ内容で煽りあう上にぜんぶageだし。不思議不思議。
474デフォルトの名無しさん:04/11/29 00:25:40
分散するとログとるのが('A`)マンドクセ
475デフォルトの名無しさん:04/11/29 00:27:06
こっちは削除だろ
476デフォルトの名無しさん:04/11/29 00:28:19
おまいら!96に抜かれるぞ
477デフォルトの名無しさん:04/11/29 00:29:35
96は、とっとと世界の果ての断崖絶壁から落ちてしまえ
478デフォルトの名無しさん:04/11/29 01:36:51
読むのめんどくせえから、しばらく読むのよすよ。
何度もああいうの現れたけど、その度にこれで自衛してきた。
あんなのでスレ消費されてつきあってる暇なんかねえよ。
479デフォルトの名無しさん:04/11/29 02:24:57
>>478
どうせ自演なんだから、あっちは隔離スレでこっちが本物でOK
480デフォルトの名無しさん:04/11/29 02:47:57
> あっちは隔離スレでこっちが本物でOK

いっしょうけんめいそうおもいこみたがってますね? ;-)
481デフォルトの名無しさん:04/11/29 02:49:07
>>480
こっち来ちゃダメ
482デフォルトの名無しさん:04/11/29 03:08:18
って、おれはこっちしか書いてないぞ。
483デフォルトの名無しさん:04/11/29 04:13:57
学校の授業課題でCとJavaの文法上の違いと意味上の違いを書けという
課題が出たんですが教えて下さい。紛らわしいガセネタは勘弁願います。
484483:04/11/29 04:30:43
ちなみに
1. C→手続き型 Java→オブジェクト指向
2.Javaにはポインタがない。(ホントはある)
上記以外のことでお願いします。

あと、意味上の違いとは記述内容は同じでも実行内容が違うという意味です。
485デフォルトの名無しさん:04/11/29 04:41:59
>>2
> ソース丸投げ、「宿題」、書籍 は専門の別スレがあるのでそこへさようなら。
486デフォルトの名無しさん:04/11/29 05:41:42
>>484
>1. C→手続き型 Java→オブジェクト指向
>2.Javaにはポインタがない。(ホントはある)

これ、2つともガセネタだろ?
487デフォルトの名無しさん:04/11/29 05:49:57
それと

文法⊃意味

だろ。

「構文上の違いと意味上の違い」なら、話の筋が通るけど。
488デフォルトの名無しさん:04/11/29 05:58:24
寝ろよぼけ
489デフォルトの名無しさん:04/11/29 09:21:26
つーか、Javaと比較させるならC++が普通なのに
わざわざCと比較させてるあたりJava厨丸出しですね
490デフォルトの名無しさん:04/11/29 11:28:48
いまいち問題が不明瞭だな
491デフォルトの名無しさん:04/11/29 12:48:47
unsigned char を scanf で入力するときって
どうかけばいいんですか?
scanf("%c", uc);
でも大丈夫?
492デフォルトの名無しさん:04/11/29 12:57:24
ダメダメ
493デフォルトの名無しさん:04/11/29 12:58:37
>>491
文字を入力したいのか数値を入力したいのかはっきり汁。
494デフォルトの名無しさん:04/11/29 13:04:31
>>493
数字です。。
495デフォルトの名無しさん:04/11/29 13:10:29
>>491
ucの値渡しなら落ちる
496デフォルトの名無しさん:04/11/29 13:14:42
>>495
&un の間違いでした。
497デフォルトの名無しさん:04/11/29 13:15:36
じゃなくて &uc の間違いでした。
書式変換はどうしていすればいいのでしょうか?
ググってもでてこないんですが…
%cu とかでしょうか?
498デフォルトの名無しさん:04/11/29 13:37:33
int型の変数aに (19786^2)%30000 を代入してはいけないのですか?
コンパイルは出来るのですが、結果がおかしなことになりました。 
499デフォルトの名無しさん:04/11/29 13:43:36
>>498
まさか、(19786 * 19786) % 30000 と同じ結果になるなんて思ってないよね?
500デフォルトの名無しさん:04/11/29 13:44:14
>>498
別にいけないことはないっすけど、やりたいことと書いたことが一致してます?
その式って、

19786と2のxorをとって、それを30000で割った余りを求めてることになりますが。
501デフォルトの名無しさん:04/11/29 13:51:47
>>497
アスキーコードは正だから "c"でオケーかとおもう。
502デフォルトの名無しさん:04/11/29 13:52:08
>>499-500
すみませんでした・・。
503デフォルトの名無しさん:04/11/29 13:53:37
Basicあがり?
504デフォルトの名無しさん:04/11/29 14:16:34
>>501
おいおい、文字じゃなく数字だといってるじゃないか。

>>491
int(or short)で入力してからcastして切り詰めるしかないと思われ。
つーか、やりたいことをもう少し詳しくかけないか?
505デフォルトの名無しさん:04/11/29 14:45:26
>>491
"%hhu"
506デフォルトの名無しさん:04/11/29 16:03:59
>>504
0-255までの整数を入力して欲しいんです
507デフォルトの名無しさん:04/11/29 16:08:01
(;´Д`)
508デフォルトの名無しさん:04/11/29 16:45:44
unsigned int で値を受け取っといてから
0x000000ffで論理積とれ
509デフォルトの名無しさん:04/11/29 16:53:00
http://www.iis.u-tokyo.ac.jp/~susaki/c/func1.html
ここの問題全てなんですが・・・・
全部分かりません(丸投げ状態です(x_x)
どなたか解いて頂きたいのですが・・・・

よろしくお願いしますm(_ _)m
510デフォルトの名無しさん:04/11/29 16:57:59
ぼるじょあがC/C++の宿題を片付けますYO! 35代目
http://pc5.2ch.net/test/read.cgi/tech/1101568895/l50

宿題は宿題スレへ。
511デフォルトの名無しさん:04/11/29 17:03:46
int* とか、char* って何型なんですか?
int 型や char 型ではないことは分かるんですが…
ポインタ型とでもいうのでしょうか…?
512デフォルトの名無しさん:04/11/29 17:08:17
そう。
ポインタ型というやつ。
513デフォルトの名無しさん:04/11/29 17:11:30
>>508
ありがとうございます。
おとなしくそうすることにするです。。
514デフォルトの名無しさん:04/11/29 17:14:23
IPv4用の、マスク幅を指定するとマスクビットを作ってくれる
かっこいいトリッキーなマクロありますか?

「24ビット」と指定すると 0xFFFFFF00 を吐いてくれるような。
515デフォルトの名無しさん:04/11/29 17:18:03
Cでプログラミングしてるとき、「あー、アルゴリズムの意味的にはdo-whileかなぁ。。」
と一瞬匂っても、まいいかとforで書いてしまいます。
やっぱり、使い分けた方がいいですか?
僕は、プログラマでもなく、趣味でC言語をやっているわけでもないです。
数値計算に使うだけの、単純なのCユーザーです。
今のところ自分のコードは自分しか見ませんが、将来他人と共有する可能性もあります。
僕自身は読むときに違和感ありませんが、一般的な読む側の意見はどうなんでしょうか?
516デフォルトの名無しさん:04/11/29 17:20:24
unsigned ipmask(unsigned addr, int num) {
  return addr & (~0 << (32 - num));
}

result = ipmask(0x10203040U, 24);

こんな感じでいい?
517デフォルトの名無しさん:04/11/29 17:21:15
>>515
直感的に意味がわかりやすい方を使うのがベストです。
そうでない場合は使用する構文に一貫性を持たせるのが良いでしょう。
518516:04/11/29 17:23:11
あくまでマスクが欲しいんだね、それじゃ
#define ipmask(num) (~0 << (32 - num))
でどう?
519デフォルトの名無しさん:04/11/29 17:34:47
>>518
トリッキーなのが欲しいって言ってるんだから、
そういう正攻法なのはどうなんだろう。
520デフォルトの名無しさん:04/11/29 17:37:10
>>517
慣れるまではバグを覚悟し、使うように心がけます。
良いソースコードをネットで手に入れることは簡単で、なるべく読むように心がけているのですが、
達者な人に自分のコードを見られたことが無いというのはだめですね。。。。orz
(でも僕的には研究機密だったり)
ありがとうございました。
521デフォルトの名無しさん:04/11/29 18:23:13
http://www.cmagazine.jp/src/kinjite/c/variable.html#index15
って書いてあるんですが、コマンドライン引数の文字列を書き換えるのは大丈夫なんでしょうか…
例えば argv[1][0] = 'A' のようにです。
522デフォルトの名無しさん:04/11/29 18:24:35
あんまり大丈夫じゃないです
523デフォルトの名無しさん:04/11/29 18:26:03
大丈夫であることが保証されている。
ISO/IEC 9899:1999
5.1.2.2.1 Program startup -2
The parameters argc and argv and the strings pointed to by the argv array shall
be modifiable by the program, and retain their last-stored values between program
startup and program termination.
要は、argvによって指されている文字列はプログラムから変更可能でなければならない。
524デフォルトの名無しさん:04/11/29 18:26:50
全然大丈夫
constついてないんだから
525デフォルトの名無しさん:04/11/29 18:30:01
>>523-5524
ありがとうございます!!!
にしても規格から持ってくるなんて凄いですね。自分も次から見習います
526デフォルトの名無しさん:04/11/29 19:35:40
#include<time.h>を宣言して現在時刻を
ファイルに記録したいのですがどうしたら良いでしょうか?
現在時刻の表示だけなら出来るのですが、
ファイルへ書き込みが出来なくて困ってます。
どなたかご教授ください。
527デフォルトの名無しさん:04/11/29 19:37:23
strftime
528デフォルトの名無しさん:04/11/29 19:42:59
>>526
どんな関数があるか調べてみてください。
そしてその関数の使い方を良く読んで、どうすれば良いか考えてください。
http://cham.ne.jp/piro/p_stdfunc.html#time-header
529デフォルトの名無しさん:04/11/29 20:06:11
表示ができて書き込みができないって、どういうこった
530大原ゆき:04/11/29 20:16:40
>>526
もしかして、ファイルに書き込み許可を与えていないという落ちではありません?
ファイルに読み込み許可しかないファイルを扱おうとしていません?
良く調べて。
531デフォルトの名無しさん:04/11/29 20:20:56
もしかしてprintfは知ってるのにfprintfは知りませんという落ちだったりして
532デフォルトの名無しさん:04/11/29 20:25:01
大原ゆきが言うと、説得力がー10000マンコ
533デフォルトの名無しさん:04/11/29 20:34:17
>>526です。
えっとsystimeを文中に記述して、年月日・時分秒をDOS画面にprintfで表示しました。
この表示した年月日・時分秒を.txtや.datに、書き出したいと思っているのですが…。
>>527さんが教えてくれた「strftime」で書式化して.txtや.datに書き込む文を書けば良いでしょうか?

fprintfは知ってますが、最適なものを探してまして。説明不足ですみませんorz
534デフォルトの名無しさん:04/11/29 20:47:59
スレ違いだったらすみません。
音声処理で、ある音声データから特定の単語を認識したい(ワードスポッティングしたい)場合についてなんですが、DPマッチングはともかくとして連続DPマッチングがよくわからないです|||orz
出来ればプログラム例などをのせていただければ幸いですが、よければどんなアルゴリズムかだけでも教えてほしいです;
535デフォルトの名無しさん:04/11/29 20:57:46
このスレのレベルを考えて質問しなよ
536デフォルトの名無しさん:04/11/29 21:01:20
>>534
Juliusのソースを参考にしなさい
537デフォルトの名無しさん:04/11/29 21:04:52
どっちみち、ここがアルゴリズムを聞く場じゃないことも分からない奴に出来るようには思えないな
538デフォルトの名無しさん:04/11/29 21:05:12
自作自演がバレバレだよ。
539デフォルトの名無しさん:04/11/29 21:09:15
李 晃伸 (り あきのぶ)
こいつか。在日、京大だめだな
540デフォルトの名無しさん:04/11/29 21:14:01
もしやそれが大原?
541デフォルトの名無しさん:04/11/29 21:25:29
>>512
おお、偶然当たった

なんか手持ちの本でint*をint型のポインタってかいてあるのが
あるんですけど、これって誤りですよね?
542デフォルトの名無しさん:04/11/29 21:37:14
>>541
間違っていない。
無理やり誤りを挙げるとしたら「int型のポインタ」より「int型へのポインタ」と呼ぶ人の方が多いという程度。
543デフォルトの名無しさん:04/11/29 21:38:27
間違えた。「int(型)へのポインタ型」だ。どうでもいいことだけど。
544534:04/11/29 21:42:56
>>536
レスありがとうございます^^
Juliusのソースが参考できるのか。。。Julius = HMM の認識が強く、音響モデルをいじったりするときにしか使えないと思っていました。
さっそくみてみます。
545デフォルトの名無しさん:04/11/29 23:07:45
546デフォルトの名無しさん:04/11/30 07:24:14
C++ だとNULLを使わずに0を使うのが普通なんですが、これはCにもあてはまるんでしょうか?
547デフォルトの名無しさん:04/11/30 09:35:23
ぬるぽ
548デフォルトの名無しさん:04/11/30 09:51:22
32ビットの整数のなかに何個のビットが立ってるか
調べるマクロって無かったっけ?
549デフォルトの名無しさん:04/11/30 12:43:36
>>548
ループ回さんといかんから単純なマクロじゃできねぇべ。
素直に関数作った方がいいんでない?
#いや、マクロでもいいけど。
550デフォルトの名無しさん:04/11/30 14:33:05
>548
つーか、使用目的が思い浮かばん。
それは本当に必要なの?
551デフォルトの名無しさん:04/11/30 15:15:47
トリッキースレで見つけた
ありがとう
ループは好きじゃないし
552デフォルトの名無しさん:04/11/30 18:22:01
>>550
Java のクラス BitSet の中に cardinality() という
メソッドがある。

必要だと思ったから作ったんだろう。
553デフォルトの名無しさん:04/11/30 18:25:10
#define COUNT_BIT(v) ((v)==0? 0: "いくつか")
554デフォルトの名無しさん:04/12/01 07:40:50
>>548
x ^= -x & x
でリセットしていくのがかっこいい。
555デフォルトの名無しさん:04/12/01 15:33:28
質問させてください。
些細なことなのですが、
関数中に複数の return を使うのと、
あくまで return は一箇所に集めるのとでは
具体的にはどのような違いが出てくるのですか?
僕自身はなんとなく、関数を追うのが楽な気がして
できるだけ複数の return は使わないようにしているのですが・・・
よろしくお願いします。
556デフォルトの名無しさん:04/12/01 15:34:34
>>546
CはNULL使わないとダメ。
557デフォルトの名無しさん:04/12/01 15:44:38
>>555
好みの問題。
558デフォルトの名無しさん:04/12/01 15:59:05
>>555
リソースの開放が絡むなら一箇所にまとめた方が重複コードを省けるし
特にそれがないならその場でreturnした方がすっきりする。
基本的に>>557の言うとおり。よくあるパターンとしてはこんなのがある。

if(init1()){
 if(init2()){
  if(init3()){
   ...
   exit3();
  }
  exit2();
 }
 exit1();
}
return;

if(!init1()) return;
if(!init2()) { exit1(); return;}
if(!init3()) { exit2(); exit1(); return; }
...
exit3(); exit2(); exit1();
return;

if(!init()) goto err1;
if(!init2()) goto err2;
if(!init3()) goto err3;
...
err3: exit2();
err2: exit1();
err1:
return;
559デフォルトの名無しさん:04/12/01 16:24:55
int hoge() …(a)
{ hogefunc1(); hogefunc2(); }
と、
int hoge() …(b)
{
    hogefunc1();
    hogefunc2();
}
のどちらが見やすいと思いますか?

hoge() が hogefunc1() しか呼ばないんだったら(a)の方が縦長くならないので
大体は(a)のようにしてるんですが、二個以上命令があるなら(b)のように
書いた方が見やすいですかね?
560デフォルトの名無しさん:04/12/01 16:31:33
>>559
下のほう。初期化を1行に連ねるならまだ許せるけど、関数呼び出しを1行に複数置かれたくない
引数を取る場合が多いから普段から複数行に分けるため、たまに(a)のような書き方をされると気持ち悪い
561デフォルトの名無しさん:04/12/01 18:23:26
構造化を0初期化するにはメンバを1つずつ0初期化するしか方法はないでしょうか?
例えば、
struct s {
    int a;
    int b;
};
普通はこのように0初期化しますが、
struct s a = {
0,0
};
struct s a = (struct s)0;
こんなかんじでまとめて0にできないでしょうか?

定義時に初期化したいので、memsetなどは使えません。
562デフォルトの名無しさん:04/12/01 18:24:27
無理
563デフォルトの名無しさん:04/12/01 18:28:33
564デフォルトの名無しさん:04/12/01 18:36:11
>>561
struct s a = {0};
これで省略されたメンバは全て0で初期化される。
565561:04/12/01 21:14:43
>>564
ありがとうございます。
gccの-Wで警告が出ますが、気にしないことにします。
566デフォルトの名無しさん:04/12/01 21:58:57
argv[1] = "/a/b/c/d/"; argv[2] = "dir/";
char *p1, *p2;
if ((p1 = (char *) malloc(strlen(argv[1]) + 1)) == NULL) exit(1);
if ((p2 = (char *) malloc(strlen(argv[2]) + 1)) == NULL) exit(1);
strcpy(p1, argv[1]);strcpy(p2, argv[2]);
if (realloc(p1, strlen(p1) + strlen(p2) + 2) == NULL) exit(1);
strcat(p1, p2);

相対アドレスから絶対アドレスを作るプログラムの中に
上記のようなソースがあってp1が/a/b/d/dir/とならずにdir/になることがあります。
それでreallocの後に

for (i=0; i<20; i++)
p1[i] == '\0' ? printf("\\0") : printf("%c", p1[i]);

といれると

$ ./a.out /a/b/c/d/ dir/
\0\0\0\0/c/d/\0\0\0\0\0\0dir/
dir/
$ ./a.out /a/b/c/d/ a/
/a/b/c/d/\0\0\0\0\0\0a/\0\0
/a/b/c/d/a/
$ ./a.out /a/b/c/d/ aa/
\0\0\0\0/c/d/\0\0\0\0\0\0aa/\0
aa/
$ ./a.out /a/b/c/d/ aaa/
\0\0\0\0/c/d/\0\0\0\0\0\0aa/\0
aaa/

とp2が2文字を越えるとreallocでp1ぐちゃぐちゃになるんです。
何がおかしいんでしょうか?
567デフォルトの名無しさん:04/12/01 21:59:27
お尋ねしたいんですが、このプログラムを実行するとstrの代入した値が使われていない
と出ます。 どうしたらいいのか教えてください?

#include <stdio.h>

main() {
char *str[] = {"a", "b", "c"};
int e;
printf("選択 \n");
printf(" 1;a 2;b 3;c");
scanf("%d", &e);

printf("%s, str[e]");

return 0;
}
568デフォルトの名無しさん:04/12/01 22:01:03
>>567
使ってないから使ってないって出るだけだ。
そのソースは書いた通りに正しく動くはず。
569デフォルトの名無しさん:04/12/01 22:11:56
>>566
realloc()したら、その戻り値を使わないといけない。引き数として渡したp1は最早、使ってはいけない。
570デフォルトの名無しさん:04/12/01 22:12:07
>>561
static にしゅる。
571デフォルトの名無しさん:04/12/01 22:13:36
>>567
最後のprintf()を正しく書けば、未使用警告も綺麗に消えるぞ。
572デフォルトの名無しさん:04/12/01 22:14:20
はい、動くことは動くんですが数字を押しても反応がないんです
573デフォルトの名無しさん:04/12/01 22:16:16
エンター押せよ
574デフォルトの名無しさん:04/12/01 23:47:38
ここが新しいネタスレですよね?
575デフォルトの名無しさん:04/12/01 23:49:27
>>574
お前みたいな香具師はまとめてこっちへ行けよ↓
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
576デフォルトの名無しさん:04/12/02 12:49:32
>>559
>二個以上命令があるなら
>命令があるなら
>命令
>命令
577デフォルトの名無しさん:04/12/02 13:18:17
( ´_ゝ`)ブーン
578デフォルトの名無しさん:04/12/02 13:50:44
>566、>567はどうしたんだろうw
579デフォルトの名無しさん:04/12/02 18:23:21
週末の人がなんとかしてくれるんじゃない?
580デフォルトの名無しさん:04/12/02 18:46:55
週末までにこのスレ無くなる悪寒
581デフォルトの名無しさん:04/12/02 18:54:42
こうなったら大原ゆきに頼むしかないな
582デフォルトの名無しさん:04/12/02 20:42:52
#include <stdio.h>

void main()
{
   int *a,*b;

   *b = 1;
   *a = *b;

   printf("a = %p,b = %p",a, b);
}

これを実行したら、不正な処理で終了してしまうんですが、
一体何が悪いのでしょうか?
583デフォルトの名無しさん:04/12/02 20:45:20
>>582
a と b の領域がとられているだけで
*a と *b の領域はとられていない
584デフォルトの名無しさん:04/12/02 20:47:04
aかbのどちらかもしくは両方が不正である可能性が高い。
585デフォルトの名無しさん:04/12/02 20:48:24
void main()
この辺に原因がある可能性もあるな。
586デフォルトの名無しさん:04/12/02 20:50:28
>>583
本当だ・・・orz
知らなかったよ。int型の領域取られてるものだと思ってた。
a = malloc(sizeof(int)); b = malloc(sizeof(int));
を追加したら、きちんと動くようになった。thanx.
587デフォルトの名無しさん:04/12/02 20:50:42
>>585
知ったかぶり
588デフォルトの名無しさん:04/12/02 20:52:33
不正な処理ってなんだ?
589デフォルトの名無しさん:04/12/02 21:01:08
よくあるWindowsのダイアログ
590デフォルトの名無しさん:04/12/03 00:05:00
初めてC言語やります
猫でも分かるWindowsプログラミングというものをかってみました
P10くらいにある以下のようなものをやりました(長いので略)
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);


リンク中...
libc.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Release/123.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

たぶん最初の設定の問題だと思うのです。どうしたらよいのでしょうか
591デフォルトの名無しさん:04/12/03 00:06:40
コンソールの設定になってる。
592デフォルトの名無しさん:04/12/03 00:12:25
>>590
【漏れは】猫でもわかる質問スレ【猫以下です】
http://pc5.2ch.net/test/read.cgi/tech/1054813207/

猫でも〜専用のスレが有るとは思わなんだ
593デフォルトの名無しさん:04/12/03 00:19:10
つーか基礎を飛ばすにもほどがあるな
594マルチ(*´Д`)ハァハァ:04/12/03 00:19:38
C言語なら俺に聞け! Part 96
http://pc5.2ch.net/test/read.cgi/tech/1101615970/503

503 名前:デフォルトの名無しさん[sage 2日目] 投稿日:04/12/02(木) 18:19:44
#include "resource.h"
これがあるときどう実行するんですか
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/memo01.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
595デフォルトの名無しさん:04/12/03 00:28:52
>>590
-W
596デフォルトの名無しさん:04/12/03 00:42:04
-W-
597デフォルトの名無しさん:04/12/03 00:50:38
(-W-)zZ乙・・・



Σ (0w0) ンドゥル!?
598デフォルトの名無しさん:04/12/03 01:16:49
アホかw
599デフォルトの名無しさん:04/12/03 01:44:35
素の突っ込みに新鮮味を覚えた
600デフォルトの名無しさん:04/12/03 02:37:18
601ほんたま:04/12/03 07:03:35
プログラマーのみなさん、教えてください。
ひとつのオブジェクトを2つに分裂させるコードを書きたいのですが、どう書けばいいのですか?
擬似的に2つに分裂したように見えるのではなくて、実際に2つに分裂するコードを書きたいのです。
つまり1つから2つのオブジェクトが同時に発生し、2つのオブジェクトの発生にはほんの少しの時間差もないという、事実上の分裂を書きたいのですが…
602デフォルトの名無しさん:04/12/03 07:06:21
CPUを二個載せる。
603デフォルトの名無しさん:04/12/03 09:04:25
時間止めればいいじゃん。
604デフォルトの名無しさん:04/12/03 10:26:57
ザ・ワールド
605デフォルトの名無しさん:04/12/03 10:31:43
なるほど
606デフォルトの名無しさん:04/12/03 14:44:41
allocでメモリ確保した後、
freeで解放しなきゃならんのはわかっているのだが
エラー時にある人は
「そのプロセスが途中で落ちた時にエラーコードを実行しない場合がある為、
 メモリリークやポートを掴んで離さない事がある。
 危険だ。」
と言い、またある人は
「そんな事は無い。エラーコードを実行する。」
と言っている。

危惧しているエラーは
「途中で電源を無理矢理落とした時」等です

どっちが本当なんだよ先輩ドモ!
どう作ればいいんだ_| ̄|○
607デフォルトの名無しさん:04/12/03 14:50:24
対象OSのACPI仕様見ろよ
608デフォルトの名無しさん:04/12/03 15:46:04
>>606
エラーコードてのはプロセス異常終了前のコード?
どんな場合でも必ず実行される訳ではないでしょ。
> メモリリークやポートを掴んで離さない事がある。
> 危険だ。」
メモリやポートをまともに管理できない OS を使うのなら
どの道、常に危険と隣り合わせの日々よ。
609デフォルトの名無しさん:04/12/03 15:59:35
>「そんな事は無い。エラーコードを実行する。」

そんな事は無い。
610606:04/12/03 16:21:30
>>607 >>608 >>609
レスありがd

まとめると、
・対象OSによっては異常終了側のコードが走ってfreeされる
・走るかどうかは対象OSのACPI仕様参照
・走らない場合は「危険と隣り合わせの日々」

こんな感じでしょか?
ACPI仕様って始めて聞いた言葉なのでググってみるッス

       〜誰も頼りに出来ない新米PGより〜
611デフォルトの名無しさん:04/12/03 17:02:55
誰もお前のことは頼りにしてないから安心しる
612openGL初心者:04/12/03 17:31:17
openGLを使ったプログラム作成を助けてください。Visual Cプログラムの関数void 図形(void)の部分なのですが、問題は以下の通りです。
「表面の座標(x,y,z)が下の左式、その点における法線nが下の右式で表される立体を描け。
ここで、θおよびφはそれぞれ0<=θ<=2πおよび-π/2<=φ<=π/2の範囲をとる媒介変数であって、定数hは0<=θ<πにおいて0.3、π<=θ<=2πにおいて2とする。
なお、法線ベクトルnは正規化されてないことに注意せよ。」という問題です。また描画要素としてGL_QUADS_STRIP(隣接四辺形)を使うことが条件です。
どなたか教えてくださいお願いします。尚、初心者なのでコードの説明をしていただけると幸いです。
613デフォルトの名無しさん:04/12/03 17:37:01
>>612
マルチすんなやボゲ
質問以前の問題だ
614デフォルトの名無しさん:04/12/03 19:33:21
>>612
マルチは別に構わんが
代行なら宿題スレで頼んでみたら?

このスレでは質問点を明確にしないと場違いだよ
615デフォルトの名無しさん:04/12/03 19:35:59
614 の続き

「構わん」て、俺べつに許可/禁止の権利があって言ってるわけじゃないからね
あなたの例えば聞き込み調査のような行動についてストーカーしてるほどヒマじゃないし
だいいち動機がそもそもないよってだけさ
616デフォルトの名無しさん:04/12/03 21:04:21
BolandC++でコンパイルしよとしたら、
Fatal:ファイルHELLO.OBJが開けません
と、でました。
他のプログラムはちゃんとできたのにこれだけできません。
なにが原因なのでしょうか?
617デフォルトの名無しさん:04/12/03 21:15:00
C言語で、EUC→Sift JISの文字コード変換のやり方教えてください。
618デフォルトの名無しさん:04/12/03 21:21:15
>>617
原理的に、できない。
619デフォルトの名無しさん:04/12/03 21:23:13
ウソ教えるなw
変換ライブラリを拾ってきて文字列を突っ込めば出来るよ
620デフォルトの名無しさん:04/12/03 21:25:24
621デフォルトの名無しさん:04/12/03 21:26:01
>>617
マザーボードが対応していないと無理です。
622デフォルトの名無しさん:04/12/03 21:30:22
>>606
他のリソースはともかくメモリはプログラム終了時に全部解放される。
623デフォルトの名無しさん:04/12/03 21:31:37
>>622
とは限らないんだって、何度言ったらわかるんだ。
過去ログ読め。
624617 :04/12/03 21:34:11
どうもです。ICUってライブラリがあるとわかったので使い方教えてください。
EUC→Sift JISだけでいいので。
625デフォルトの名無しさん:04/12/03 21:35:49
>>624
ICU 使うにはデュアルCPU が必須です。
626デフォルトの名無しさん:04/12/03 21:37:28
「途中で電源を無理矢理落とした時」には、メモリとかポートは解放されると見なして
いいんじゃないかなぁ。
627デフォルトの名無しさん:04/12/03 21:43:10
>「途中で電源を無理矢理落とした時」等です

「等」が気になる。
「飲みかけのコーヒーをマザーボードにこぼした時」とか
「ゴジラにマシンごと踏み潰された時」とかだろうか?
628デフォルトの名無しさん:04/12/03 21:43:19
その無理矢理って表現は、
コンセントからプラグ引っこ抜くようなことをイメージしてしまうんだけど違うよね?

電源ボタン長押しとかでACPIに管理任せる的なことを指してるんだよね?
629デフォルトの名無しさん:04/12/03 21:44:20
Sift JISってtypoじゃなくて本気で書いてるんだ。
「円周率はおよそ3」になるわけだ。
630デフォルトの名無しさん:04/12/03 22:11:19
>>627
その例のときは気にしても意味がないんじゃないのか?
631デフォルトの名無しさん:04/12/03 22:24:04
「途中で電源を無理矢理落とした時」はポートが開いたままになるので
外付けのハードが壊れる時がある
632デフォルトの名無しさん:04/12/03 22:59:31
はぁ?
633デフォルトの名無しさん:04/12/03 23:04:06
634デフォルトの名無しさん:04/12/03 23:04:57
[PR] 2chカレンダー2005仮予約受付中 [PR]
http://chbox.com/goods/
635デフォルトの名無しさん:04/12/03 23:06:29
2つの論理式が同じ値をもつかどうかを調べるにはどうしたらよいでしょうか?
↓こういう方法しかないですか?
bool x, y;
bool z = (x && y) || (! x && ! y);
636デフォルトの名無しさん:04/12/03 23:07:15
637デフォルトの名無しさん:04/12/03 23:11:12
>>635
適当に展開すればいいんじゃ?
638デフォルトの名無しさん:04/12/03 23:11:26
>>635
==
639デフォルトの名無しさん:04/12/03 23:12:25
#include<stdio.h>

int main(void){
  char *str[5];

  for(int i = 0; i < 5; i++){
     printf("input : \n");
     gets(str[i]);
  }
}

これを実行したら、3つ目の文字列を入力したときに、終了してしまうのですが
5つ全部入力するにはどうしたらよいのでしょうか。
640デフォルトの名無しさん:04/12/03 23:12:46
bool z = !(!x ^ !y)
641デフォルトの名無しさん:04/12/03 23:13:38
>>639
main()
{
char *str;
gets(str);
}

こーやってるのと同じ
642デフォルトの名無しさん:04/12/03 23:14:21
>>639
str[0]からstr[4]の指してる先は確保してるかい? ブラザー
643デフォルトの名無しさん:04/12/03 23:17:18
>>638 >>640 ありがとうございます。勉強になりました。
644デフォルトの名無しさん:04/12/03 23:23:57
>>641-642
すみません、お二方どうもありがとうございます。
645デフォルトの名無しさん:04/12/04 10:08:35
char buf1[20] , buf2[20];
があったとして、buf1に改行コードが入ってるの。
これをbuf2にコピーしたいんだけど、改行コードは除去したいのよ。
なんか簡単な方法ない?
646デフォルトの名無しさん:04/12/04 10:11:44
int i, j = 0;
for (i = 0; i < 20; i++)
  if (buf1[i] != '\n')
    buf2[j++] = buf1[i];
647デフォルトの名無しさん:04/12/04 10:55:13
int i, j = 0;
for (i = 0; i < 20; i++)
if (buf1[i] != 0x0D && buf1[i] != 0x0A)
buf2[j++] = buf1[i];
648デフォルトの名無しさん:04/12/04 11:56:45
>>647
'\r'と'\n'にしろ。
649デフォルトの名無しさん:04/12/04 12:01:01
はじめまして,Linux初心者です.タコなので何も分かりません.

X−Windowsがうごきません.この前,某雑誌の付録CD−ROMで,Linuxをインストールして,
X−Windowsをうごかそうと,いろいろやってから,startxをしたんですけど,フォントが
ないって怒られてだめでした.

タコなので,分かりやすく教えて下さい.
650デフォルトの名無しさん:04/12/04 12:14:13
651デフォルトの名無しさん:04/12/04 13:56:23
どっかのコピペか?
652デフォルトの名無しさん:04/12/04 17:32:22
バッファの先頭から12ビット連続1かどうか調べるのに
if(*(unsigned short *)buf & 0xf0ff != 0xf0ff) return 0;

unsigned short us = (buf[0]<<8) + buf[1];
if((us & 0xfff0) != 0xfff0) return 0;
に書きか変えると異常終了してしまうのですが
下は何所が変でしょうか?
653デフォルトの名無しさん:04/12/04 17:34:16
>>652
転置注意
654デフォルトの名無しさん:04/12/04 17:35:33
>>652
そもそもbufの型は何?
655デフォルトの名無しさん:04/12/04 17:36:33
分かっているくせに
656652:04/12/04 17:37:00
>>654
char *です
657デフォルトの名無しさん:04/12/04 17:46:49
>>601
オブジェクトというのがよくわからんが、
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/fork.2.html
658デフォルトの名無しさん:04/12/04 17:49:55
unsigned char *にするとか?
659652:04/12/04 17:56:34
>>658
ありがとう!!治ったみたいです
660デフォルトの名無しさん:04/12/04 17:56:39
>>546
> C++ だとNULLを使わずに0を使うのが普通なんですが
C++のコードあまり呼んだことが無いのですが、それは本当?

> これはCにもあてはまるんでしょうか?
0とNULLを同一視することがよくあるんでしょうか、という質問なら、

if(!p) // pはポインタ型

とか書くのは普通なので、Cでも当てはまる、のかな。
(自分は上の書き方好きじゃないけど。)
661デフォルトの名無しさん:04/12/04 17:58:41
>>660
C FAQ読んどけ。
662デフォルトの名無しさん:04/12/04 18:31:20
>>661
そもそも>>546はC言語の仕様を聞いているのではないでしょう。

少なくとも漏れは
int *n = 0;
なんてやってる奴見たらぬっころしますし、
そもそもCでは普通ではないと思います。
C++ではこれが普通だと言うのであれば、Cには当てはまらないです。>>546
663デフォルトの名無しさん:04/12/04 18:39:01
> 少なくとも漏れは
> int *n = 0;
> なんてやってる奴見たらぬっころしますし、

こいつぼけ。協調性のかけらも無い
664デフォルトの名無しさん:04/12/04 18:42:38
>if(!p) // pはポインタ型

好きです。
665デフォルトの名無しさん:04/12/04 18:43:15
>>662
C FAQ読んどけ。
666デフォルトの名無しさん:04/12/04 18:53:26
C FAQ がある限り存在意義のない厨が粘着しているようだな
667デフォルトの名無しさん:04/12/04 18:54:05
C++相談室 part37から引っ張り出してみる

>216 名前:デフォルトの名無しさん[sage] 投稿日:04/11/03 15:23:38
>漏れの手元の本には
>プラットフォームに応じてNULLの定義方法が異なっていたことにより
>プログラムが暴走する危険があった、と書かれてる
>
>例えば
>#define NULL ((char *)0)
>#define NULL ((void *)0)
>など。で、これを代入するとエラーがでる可能性がある
>C *cp = NULL; //エラー?
>ちなみにC++では数値の0は任意の型のポインタ値に変換できることが保証されている
>よって、0が一般的に使われている
>
>けど、現在のC++の標準には(void *)0のような定義は許可されていないので
>その標準にのっとった環境であればNULLを使用しても問題ない
>
>ただ、やっぱり今のC++プログラマはNULLではなく、0を利用するのが一般的、らしい

あとC++の関数などへ渡す引数のあいまい性を
(char *)0, (void *)0 とかで解決できなかった「過去」があったからってのもある
んで現在は習慣に乗っ取り、理由も知らずに NULL ではなく 0 を使うC++ユーザーが増えたわけだ
668デフォルトの名無しさん:04/12/04 18:59:06
>>662
NULLが定義されない場合を考えとけ。
669デフォルトの名無しさん:04/12/04 19:02:24
そんな環境捨てちまえ
670デフォルトの名無しさん:04/12/04 19:08:01
プリプロセッサ+キャストなんて気持ちわるくて使ってられん
Cでも0でいいだろ
671デフォルトの名無しさん:04/12/04 19:09:10
ちょっと試してみた。

int func(){
int* n = NULL;
return 0;
}
$ gcc -Wall -C null.c
null.c: In function `func':
null.c:2: `NULL' undeclared (first use in this function)

つまり、gccは捨てろということだ。
672デフォルトの名無しさん:04/12/04 19:11:56
とりあえず>>671はスルーで
673デフォルトの名無しさん:04/12/04 19:14:42
谷の嫁w
674662:04/12/04 19:16:45
>>665
いや、私は別にQuestionを投げているわけではないので…

で、CでもNULLを使わずに0を使うのが普通なの?>>663-665
675デフォルトの名無しさん:04/12/04 19:18:28
わざわざNULLと書く意味がわからない。
676デフォルトの名無しさん:04/12/04 19:18:57
そりゃぬるぽであることを"人間に"わかりやすく示すためでしょ
677デフォルトの名無しさん:04/12/04 19:20:12
>>674
NULLを使う人の方が多い(と俺は思っている)。
但し、0を使っても規格上は問題ない。
それにif (p)やif (!p)の書き方も(俺含め)それなりに使われている。
678660:04/12/04 19:20:35
>>667
なるほど。C++にはそんな歴史があったのですね。
勉強になりました。
679デフォルトの名無しさん:04/12/04 19:22:28
>>675
ハンガリアンさんならそういう主張もありでしょうね。
680デフォルトの名無しさん:04/12/04 19:22:57
零の表記法

int なら 0
float なら 0.f
double なら 0.
char* なら NULL
では
int* は?
void* は??
const int * volatile * volatile const は???
・・・つまり char* の時点で間違えていた

char* なら (char*)0
int * なら (int*)0
void* なら (void*)0
const int * volatile * volatile const なら (const int * volatile *)0

681デフォルトの名無しさん:04/12/04 19:25:04
NULLはマクロなんだから標準ヘッダを一つもインクルードしないと
エラーになるわけか。
682デフォルトの名無しさん:04/12/04 19:26:15
>676
ガッ
683デフォルトの名無しさん:04/12/04 19:26:15
> ・・・つまり char* の時点で間違えていた
どっちかというと0 == NULLとした時点かと。
684デフォルトの名無しさん:04/12/04 19:26:18
ていうかポインタ変数がnullかどうかのテストで、if (p)とかif (!p)と
書くのは全然普通だと思ってたが違うの?
685デフォルトの名無しさん:04/12/04 19:29:13
>>684
ANSI-Cで保障されているから普通でしょう
686デフォルトの名無しさん:04/12/04 19:33:57
ハンガリアンも今や絶滅種だし、これからは0で決まりだね
687デフォルトの名無しさん:04/12/04 19:35:53
言語仕様策定時にnullを予約語にするって解もあっただろうが、
現状はそうはなってないな。
688デフォルトの名無しさん:04/12/04 19:38:28
いまどきANSI...
689デフォルトの名無しさん:04/12/04 19:38:44
>>684
そういう書き方以外で0とNULLを同一視するところってあまり無いですよね?
たとえば、>>662に書いてある
int *p=0;

int *p=NULL;
って書くし、if文も
if(p!=0)
じゃなくて
if(p!=NULL)
って書かれるのが普通かと思ってるのですが
(規格上では問題ないのは知っていたとしても)。
690デフォルトの名無しさん:04/12/04 19:39:46
Cと言うよりUNIXなのですが、
よろしいでしょうか。

dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
close(fd);
execlp("cat", "cat", NULL);

としたのですが、
fdに何か書き込んでも、
fdから何も出てきません。
何がいけないんでしょうか。
691デフォルトの名無しさん:04/12/04 19:40:39
>>689
普通
if (!p){;}
692デフォルトの名無しさん:04/12/04 19:40:44
>>689
たしかにそうだが、>>681の問題もある。
俺なら、Cの場合NULLを使い、C++の場合0を使う。
693デフォルトの名無しさん:04/12/04 19:41:28
>>689
どちらも「普通に」見るけど?
694デフォルトの名無しさん:04/12/04 19:41:57
>>690
UNIXプログラミング質問すれ Part4
http://pc5.2ch.net/test/read.cgi/tech/1095843584/l50#tag704
695689:04/12/04 19:43:39
>>691
いやいや、
if(!p) と if(p!=NULL) のどっちが普通か、という話ではなく、
if(!p) っていう書き方以外では、あまりNULLと0を同一視しないですよね、
ということを言いたかったわけなんです。
696デフォルトの名無しさん:04/12/04 19:43:47
漏れは

NULLを使う
 比較や代入などをみて、
 その変数がポインタ型であることがわかりやすい他者(自身を含む)への考慮
0を使う
 (作成時の)自分がわかればそれで良し

って解釈。文句は受け付けません。
697デフォルトの名無しさん:04/12/04 19:45:02
どうしてもポインタに0をつかってはいけないという風潮を作りたいらしい。
698デフォルトの名無しさん:04/12/04 19:46:47
まあ、0の代入先がポインタ変数であることぐらいプログラマは
よく知ってるんだろうから、わざわざNULLを使う必要はないな。
アドレス即値をポインタ変数に代入することなんてほとんどないんだし。
699デフォルトの名無しさん:04/12/04 19:46:56
ちょっと疑問に思ったんだけど、
int i = NULL;
ってOKなんだっけ?
700デフォルトの名無しさん:04/12/04 19:48:14
>>699
コンパイルは通るけど、ぼけ確定
701デフォルトの名無しさん:04/12/04 19:49:05
>694
ありがとうございます。
702デフォルトの名無しさん:04/12/04 19:52:13
>>698
> アドレス即値をポインタ変数に代入することなんてほとんどないんだし。
じゃあ0のときもNULLでいいじゃん、と思えるのだが…

漏れは>>696の意見にほぼ同意だが、必ず自分しか使用しない、ということが
分かってるプログラムを書くことが無いので、
事実上NULLしか使わない。
703デフォルトの名無しさん:04/12/04 19:52:29
NULL使うにはヘッダをインクルードしなきゃいけないし。
ポインタを対象としていることを分かりやすくするためなんて良く聞くけど、
ハンガリー記法と同じでそんなの全然訳に立たない気がする
704デフォルトの名無しさん:04/12/04 19:54:11
705デフォルトの名無しさん:04/12/04 20:00:05
>>687
> 言語仕様策定時にnullを予約語にするって解もあっただろうが、
> 現状はそうはなってないな。
初版でそうしなかったからもう歯止めが利かないんだろうね。
現状、NULL(null)を勝手に#defineし直してるソースもよく見るから、そういうソースが軒並み通らなくなっちゃう
706デフォルトの名無しさん:04/12/04 20:04:43
>>704
なるほど。つまり、
コードを書く際には
馬鹿な奴のために、ポインタにはNULLを代入し、
コードを読む際には、NULLに頼らず判定を行うべきである、と。

>>703
> 全然訳に立たない気がする
まあ、平常時に役に立たないのは同意。仕様上全く問題ないコードだし。
707デフォルトの名無しさん:04/12/04 20:06:07
NULLに頼って判定する馬鹿がいるのか?
708デフォルトの名無しさん:04/12/04 20:08:28
>>707
いるからこんなことが書いてあるのだろう。
http://www.kouno.jp/home/c_faq/c5.html#9
709デフォルトの名無しさん:04/12/04 20:10:07
>>706
事実上役に立たないけれど書いとくと理解の助けになるという点では
冗長な括弧追加とさほど変わらないね。読む人のことを考える、と。
710デフォルトの名無しさん:04/12/04 20:15:59
if(!strcmp("nullpo", "ぬるぽ")){ ... }
このとき strcmp() == NULL を期待する?
711デフォルトの名無しさん:04/12/04 20:18:03
>>710
期待しない。>>708を読んだら充分理解した。
712デフォルトの名無しさん:04/12/04 20:18:09
713デフォルトの名無しさん:04/12/04 20:18:18
>>710
714デフォルトの名無しさん:04/12/04 20:18:42
0 にすらならない
715デフォルトの名無しさん:04/12/04 20:20:54
はい次の方〜。
716デフォルトの名無しさん:04/12/04 20:32:57
NULLでも0でも良いって言っている奴は存在意義無いね。
そんなことコンパイラでも分かるし。

他人が読んだり編集したりするときのことも考えなきゃ。
717デフォルトの名無しさん:04/12/04 20:41:20
他人が読むときのこと考えてるならその話はもうやめれ
718デフォルトの名無しさん:04/12/04 20:59:56
>>717
どちらでもいいと言っているのは、多分他人に読まれる事のない
汚いソースでもおおかた書いている香具師だろう。
719デフォルトの名無しさん:04/12/04 21:02:28
綺麗な日本語書けよ。
720デフォルトの名無しさん:04/12/04 21:05:47
声に出して読みたいソースコード
721デフォルトの名無しさん:04/12/04 21:08:28
ようするにNULLってのは
if ((a == 0) || (a == 1))
の冗長な括弧のようにプログラムを分かりやすくはするが、
そのかわりに見やすさを多少犠牲にし、マクロと
キャストによりほんのわずかながら危険性がうpし、
ヘッダをインクルードしなきゃ使えないのでウザイってこと
722デフォルトの名無しさん:04/12/04 21:14:39
>>721
> 見やすさを多少犠牲にし、
逆。可読性を向上させるために用いる。

> マクロとキャストによりほんのわずかながら危険性がうpし、
するわけない、と思っているが、どんな危険性が?
723デフォルトの名無しさん:04/12/04 21:20:35
学校ではSunOSでvi使ってプログラミングしているのですが、自分のPCはWinXPなので
viとかないわけですが、Windowsで使えるvi互換エディタを教えてください。
724デフォルトの名無しさん:04/12/04 21:22:02
>>723
cygwinがいいんじゃないか?
725デフォルトの名無しさん:04/12/04 21:23:14
めどー
726デフォルトの名無しさん:04/12/04 21:25:06
>>723
gVim
727723:04/12/04 21:25:58
>>724
軽く調べて見たのですが、Dos窓でUNIXコマンドが使えるようになるんですか?
コマンドってもcpとかrm、lsくらいしか知りませんが・・・
728デフォルトの名無しさん:04/12/04 21:27:03
めどーはEmacs互換か(^o^;)
729デフォルトの名無しさん:04/12/04 21:27:04
grepとか使えるとプログラミングにも役立つかと
730デフォルトの名無しさん:04/12/04 21:28:06
1個1個コンパイルしてパス通せば何とか
731デフォルトの名無しさん:04/12/04 21:35:20
>>727
そんくらいなら使える

つーても、あくまで「UNIXごっこ」には違いないからな・・・
本当にUNIX系のOSをちゃんと憶えるつもりなら
エミュじゃないUNIX系OSしかないと思う

おまえさんの経済状況を知らんのだが
本音を言わせてもらうと、もう1台Linux機を用意して
LANでゲイツ機とつなぐのがベストと考える
732デフォルトの名無しさん:04/12/04 21:38:05
VMwareの中にLinux入れてしまえば良い
733723:04/12/04 21:38:50
>>731
そうですか。まあ実際にUNIX使ってても、まだ「ごっこレベル」なんで一応それでOKですね。
やっぱりLinux機あったほうがいいですか・・・勉強で組む程度のプログラムならマシンパワーも
いらないですよね。安い中古ノートでも探すかな・・・
734助けてください:04/12/04 21:39:00
エラー文で
jikken.c:150: error: parse error before ';' token
jikken.c:150: error: parse error before ')' token
って出るんですが・・・。tokenのないエラー文なら対処できるんですけど
これって何を意味してるんでしょうか??

ちなみに150行目前後は
148|}
149|else{
150|if(j=0;j<count2;j++){
151|if(strcmp(keep,M1[j].tsuduri)==0){
ってカンジになってます
735デフォルトの名無しさん:04/12/04 21:42:55
150はifじゃなくてforでは?
736デフォルトの名無しさん:04/12/04 21:43:20
ほう。
737助けてください:04/12/04 21:45:55
>>735
・・・_| ̄|○・・・はうぅ・・
 ほんとですね、2時間くらいなやんでました・・・

 ありがとうございます
738デフォルトの名無しさん:04/12/04 21:47:43
>>734じゃないけど、俺の脳内コンパイル通ってたよ。
739デフォルトの名無しさん:04/12/04 21:49:46
/*add.c*/
int add(int a, int b)
{
return a+b;
}

/*sub.c*/
int sub(int a, int b)
{
return a-b;
}

/*mul.c*/
int mul(int a, int b)
{
return a*b;
}

/*div.c*/
int div(int a, int b)
{
return a/b;
}

ヘッダファイルを使って
この4つのファイルをリンクするにはどうしたらいいですか?
740デフォルトの名無しさん:04/12/04 21:52:01
プロトタイプ宣言でぐぐる
741デフォルトの名無しさん:04/12/04 21:53:36
>>739
意味がわからん。
4つをリンクしてどういう出力がほしいんだ?
742デフォルトの名無しさん:04/12/04 21:55:08
>>737
ごめん。ワロタ
743デフォルトの名無しさん:04/12/04 22:06:23
==header.h==
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);

==main.c==
#include<stdio.h>
#include"header.h"

int main(void)
{
int i;
i=add(1,1);
printf("result = %d\n",i);
return 0;
}
744デフォルトの名無しさん:04/12/04 22:11:04
warning: no newline at end of file
ってエラーは何を意味するんでしょう?
745デフォルトの名無しさん:04/12/04 22:11:55
>>744
ファイルの最後に改行がない
無視しても構わない
746デフォルトの名無しさん:04/12/04 22:13:07
最終行で改行しよう。
…そのwarningって何を警戒するための警告なんだろう?
747デフォルトの名無しさん:04/12/04 22:13:24
>>702
> じゃあ0のときもNULLでいいじゃん、と思えるのだが…

0はアドレスでなく、ヌルポインタであるという印のような
ものなので、わざわざNULLというマクロを使用するのは
冗長に思えるわけ。つまり0という定数でそのポインタが
ヌルポインタであることは明らかってこと。
748デフォルトの名無しさん:04/12/04 22:16:01
>>745
 問題はないんですね。ありがとうございます。
749デフォルトの名無しさん:04/12/04 22:21:27
> ヌルポインタであるという印のようなもの
ますますNULLの方がふさわしい気が…

上の方では
0だと定数なのかヌルポインタか一目で分からない、
(代入先の変数がポインタなのか違うのか分からない)
って理由でNULLを使おう、と行っているように見えるのですが。

> そのポインタがヌルポインタであることは明らかってこと。
ポインタかどうかっていうのが一目で分からないよね、ということでは。
ポインタであると知ってれば、ヌルポインタであることは明らかだと
思いますが。
750デフォルトの名無しさん:04/12/04 22:22:55
putcについて質問なんですが、

int c='a';
putc(c,fp);

だったらちゃんとファイルにaが出力されますが

int c=10;
putc(c,fp);

では10が出力されません。数字は出力できないのでしょうか?
751デフォルトの名無しさん:04/12/04 22:23:45
putcのcはcharのc
752デフォルトの名無しさん:04/12/04 22:24:07
>>698はそういうことは書いてないと思うぞ。
753デフォルトの名無しさん:04/12/04 22:24:47
>>746
改行までを1行としてパーズするヘボヘボコンパイラに当たったら
最終行がコンパイルされないという危惧からじゃないか?
754デフォルトの名無しさん:04/12/04 22:24:56
int c='1';
putc(c,fp);
c='0';
putc(c,fp);
755デフォルトの名無しさん:04/12/04 22:24:59
>>750
文字コード10の文字が出力される。
756デフォルトの名無しさん:04/12/04 22:25:45
だからfprintfがあるんじゃねーか。
757デフォルトの名無しさん:04/12/04 22:25:59
UNIX系のアプリにはファイルの最後に改行があるものとして扱うものが
多いからね。
758756:04/12/04 22:26:26
もちろん>>750へのレス
759デフォルトの名無しさん:04/12/04 22:26:46
>>745-476 >>748
確か規格ではソースコードが改行で終わっていない場合の動作は未定義だったはず。
例え鼻から悪魔が(ry
760デフォルトの名無しさん:04/12/04 22:27:02
>>750
fputc() は、キャラクタ c を unsigned char にキャストし、 stream に書き込む。

両方で
printf("%d\n",c);
をやってみると何かわかるかも。
761デフォルトの名無しさん:04/12/04 22:29:15
>>744-746 >>748
文字列が終端していない。
"の閉じ忘れ。
762デフォルトの名無しさん:04/12/04 22:29:41
>>751
厳密には正しくない。
763デフォルトの名無しさん:04/12/04 22:30:05
>>761
違う。
764デフォルトの名無しさん:04/12/04 22:31:19
>>761
そういう場合>>744のようなメッセージになるの?
warningでなくerrorになりそうだが。
765デフォルトの名無しさん:04/12/04 22:31:38
>>761
gcc使ったことないだろ
766744:04/12/04 22:33:49
>>746
 確かにソースファイルの最後を改行したら消えました
 ありがとうございます
767デフォルトの名無しさん:04/12/04 22:47:07
Mozillaのガイドラインにも最後は改行しろって書いてあったような。
768デフォルトの名無しさん:04/12/04 22:49:15
Mozillaのガイドラインによると1行コメントは外道らしい
769750:04/12/04 22:50:35
>>756
 fprintf使うとやりたいのがうまくいきそうです、ありがとうございます
770デフォルトの名無しさん:04/12/04 22:55:53
Mozillaのコーディング規約は、いろんな環境で
開発されることを想定してるからねぇ。

古いCの仕様では 1行コメント駄目だし、
そういうコンパイラは今でもいっぱいあるのは確か。
771デフォルトの名無しさん:04/12/04 22:57:18
GNUの規約によるとスペースでインデントをするのは外道らしい。TABを使え!だそうだ
772デフォルトの名無しさん:04/12/04 22:58:59
C言語のソフトってどこで手に入れることができますか?

馬鹿みたいな質問すいません
773デフォルトの名無しさん:04/12/04 22:59:20
Vectorに行ってください
774デフォルトの名無しさん:04/12/04 23:00:11
gnuのコーディング規約って、
int func(i,j)
int i,int j
{
...
}
じゃ無かった?
(使ったこと無いので↑で本当に正しいのか自信が無いが、こんな感じの奴)

もしかしたらMozillaもそうだったかも。
775デフォルトの名無しさん:04/12/04 23:00:13
GNUは2文字スペース字下げやってるのにTAB使えとはね。
字下げが8文字以上になったらTABに変換しろってことなんだろうけど。
実際Emacsもそのような挙動をするし。
776デフォルトの名無しさん:04/12/04 23:01:00
ぶっちゃけGNUのコードフォーマットは
変態的。
777デフォルトの名無しさん:04/12/04 23:01:54
返値の型と関数名の間に改行を入れろってのもある

というかスレ違い
778デフォルトの名無しさん:04/12/04 23:05:20
>>777
777を取っておきながらその発言! shame on you!!!
779デフォルトの名無しさん:04/12/04 23:08:10
スタイルなんかは T-1000 のように変身潜行する能力がすべてさ
780デフォルトの名無しさん:04/12/04 23:08:49
777なんて要らないから1024を目指そうぜ
781デフォルトの名無しさん:04/12/04 23:50:11
int型をchar型に変換する関数ってあります?
782デフォルトの名無しさん:04/12/04 23:51:37
にゃーがね
783デフォルトの名無しさん:04/12/04 23:52:02
実際、LSI-Cはコンパイラオプションによっては最終行に改行がないと誤動作する。
784デフォルトの名無しさん:04/12/04 23:53:21
>>781
ムーリ!o(゚Д゚)っ
785デフォルトの名無しさん:04/12/04 23:56:50
>>781
32bit環境と仮定
typedef struct _int2char {
char c1;
char c2;
char c3;
char c4;
} int2char;

使い方は
int2char i2c;

忘れた。教えて偉い人
786デフォルトの名無しさん:04/12/04 23:56:52
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!
union
788781:04/12/04 23:58:40
int c;
c=getc(file);

↑のカンジで読み出したcをchar型の配列に1文字ずつ入れたいんですが
何か方法ありませんか?
789デフォルトの名無しさん:04/12/05 00:01:22
>>788
castして代入。警告を恐れない猛者なら単に代入でもよい。
790デフォルトの名無しさん:04/12/05 00:01:35
scあんf
791デフォルトの名無しさん:04/12/05 00:04:29
>>788
そのまま代入でおk

ある特定の処理系で警告が出ないように書かなければならないとしたら世界中飛んで回らねばならない
そんなこと言ってる香具師で本当にやってる者は俺の知る限りいない
792788:04/12/05 00:07:15
>>791
 そのまま代入するとSegmentation fault (core dumped)になるんで
gdbで調べるとその代入文がでてくるんで困ってるんです
793デフォルトの名無しさん:04/12/05 00:12:16
fileはちゃんと開かれてるのか?
794デフォルトの名無しさん:04/12/05 00:19:27
>>792
添え字に使ってる変数が不定または範囲外は?
795792:04/12/05 00:20:16
>>793
 なぜか代入する配列の宣言を変えたら解決しました

 ありがとうございました
796デフォルトの名無しさん:04/12/05 00:23:45
>>795
char *unko;

char *unko[300];
じゃねーだろなw
797デフォルトの名無しさん:04/12/05 00:24:12
>>796
間違い
char unko[300];

(´・ω・`)・・・・
798デフォルトの名無しさん:04/12/05 00:28:42
>>796
  。゜(゚´Д`゚)ノウンコ-
799デフォルトの名無しさん:04/12/05 00:29:29
>>798
野糞?
800デフォルトの名無しさん:04/12/05 00:30:58
下劣な奴が本当に劣っている例だな
801デフォルトの名無しさん:04/12/05 00:54:05
ポインタにcを代入したんだろうな。<Segmentation fault
802デフォルトの名無しさん:04/12/05 01:19:04
>>789
警告出る処理系なんてあるの?
803デフォルトの名無しさん:04/12/05 01:20:31
>>788
カンジって…
もしかして漢字か
804デフォルトの名無しさん:04/12/05 01:24:48
>>802
791 だが、あるよ。
学生でも知っていそうな、そこいらへんのやつとか。
805デフォルトの名無しさん:04/12/05 01:43:14
VCの病的なWallとか
806デフォルトの名無しさん:04/12/05 01:54:54
>>804
どういう警告が?
getcて戻り値intだよなぁ…
807デフォルトの名無しさん:04/12/05 01:58:50
intからcharに入れるんだから、警告出すコンパイラもありそうじゃない?
808デフォルトの名無しさん:04/12/05 02:02:58
お前らアホ?馬鹿?Ruby?
809806:04/12/05 02:03:38
>>807
ごめん。>>788を読み間違えてた。
810デフォルトの名無しさん:04/12/05 02:04:28
>>808
ばか!!ばか!!まRuby!!!
811デフォルトの名無しさん:04/12/05 02:24:05
mRuby(みさくらRuby)の実装を希望します
812デフォルトの名無しさん:04/12/05 02:26:36
>>810
まRubyとtalbyって似てるよね。
http://www.talby.jp/
813デフォルトの名無しさん:04/12/05 02:34:32
まRunaby
814デフォルトの名無しさん:04/12/05 03:29:54
まRubyル。
ちなみに東京の丸ビルは丸くない。

東京:
http://minami.typepad.com/photos/moblog/040308_09040001.html

大阪:
http://www1.linkclub.or.jp/~spanky/YH001/osaka/10marubill.html
815デフォルトの名無しさん:04/12/05 04:09:14

ちょっとお聞きしたいんですが、
void Hoge( void )
{
: //(略
return ;
}
の return ; って必要ですか?
自分は書かないほうなんですけど、他人のソース見ててふと思ったので書き込みました。
816デフォルトの名無しさん:04/12/05 04:10:16
書け
817デフォルトの名無しさん:04/12/05 04:12:21
はい  
818デフォルトの名無しさん:04/12/05 04:13:25
>>815
可読性のために書いておけ。

そこでreturnしない変態的な関数
作る奴もいるしな。
819デフォルトの名無しさん:04/12/05 04:22:16
処理のテーブル化、というのはどういうことでしょうか?

関数ポインタを配列に入れて、ループで処理すること、
と勝手に想像してみたのですが、あってます?
820デフォルトの名無しさん:04/12/05 04:22:34
あってるよ
821デフォルトの名無しさん:04/12/05 05:08:17
ループで処理、じゃなく
配列のindexで処理選択って感じかな。
822デフォルトの名無しさん:04/12/05 06:03:21
BORLAND C++ COMPILER使ってるんですが、これって画像の取り込みなどは可能なのでしょうか?
もしよろしかったら教えて下さいませm(_ _)m
823デフォルトの名無しさん:04/12/05 06:16:36
>>822
画像の取り込みと言っても色々あるだろ
何がやりたいんだ
824デフォルトの名無しさん:04/12/05 11:39:45
IDEの背景色変えたいだけじゃない?
825デフォルトの名無しさん:04/12/05 15:07:37
googleの画像検索結果から画像を取り込んで
ふたばに貼り付ける……とかをしたいのでは?
826デフォルトの名無しさん:04/12/05 15:33:25
あんたがやりたいだけだろ
827デフォルトの名無しさん:04/12/06 02:13:41
じゃあさ,じゃあさ,
FAXからTIFF画像を取り込んで
ある程度ノイズを消してから,任意のプリンタで出力したい
ってのは?
828デフォルトの名無しさん:04/12/06 02:33:31
かってにやってろよ
829デフォルトの名無しさん:04/12/06 03:38:37
>822
可能です。
>827
可能です。

最近、師走ですえn。
830デフォルトの名無しさん:04/12/06 09:45:07
Delphiじゃなきゃ無理だろ
831デフォルトの名無しさん:04/12/06 10:10:28
fortranが熱い!
832デフォルトの名無しさん:04/12/06 12:35:59
名前がカコいいふぉーみゅらとらんすれーしょん
833デフォルトの名無しさん:04/12/06 21:21:12
コンパイルに成功してプログラムが実行できない場合、確認する方法はないですか?
ちなみに実行すると何もでず、終了もしない状態になります
834デフォルトの名無しさん:04/12/06 21:35:11
何も出ず、終了もしないことは確認できてるんじゃないのか?
835833:04/12/06 21:55:53
>>834
すみません、確認するっていうのはプログラムが終了しない原因を確認する方法です。
ソースのどこがおかしいのか・・・
836デフォルトの名無しさん:04/12/06 21:57:04
デバッガも無いのか?
837デフォルトの名無しさん:04/12/06 22:00:32
シングルモルトだな
838833:04/12/06 22:02:57
>>836
 何も出ません、暴走状態です
839デフォルトの名無しさん:04/12/06 22:06:46
もう一度問う
デバッガも無いのか?
840デフォルトの名無しさん:04/12/06 22:08:00
プログラムが暴走するなんてよくあることだしな。
ループにprintfでも突っ込んどけば。
カウンタで何回かしたら強制的にループを終えるように
してもいいし。
841833:04/12/06 22:12:46
>>839
gdbならありますが
842デフォルトの名無しさん:04/12/06 22:16:06
使えよ
843833:04/12/06 22:18:02
>>842
 gdbで走らせても走り続けて何も出ず、暴走するだけなんですが・・・
844デフォルトの名無しさん:04/12/06 22:18:44
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
845デフォルトの名無しさん:04/12/06 22:20:16
いわゆる周期境界条件の処理をしたいのですが、これをコンパイルすると
エラーがでるのですが、どこがいけないのか教えていただけませんか?

double isincell(double p)
{
 if ( p > L ) {
   return p-L;
 } else if ( p < 0 ) {
   return p+L;
 } else {
   return p;
 }
}
Lはセルの1辺の長さで#defineで定義済み。コンパイラ(BCC)のエラーは

エラー E2188 kadai.c 139: 式の構文エラー(関数 isincell )
警告 W8070 kadai.c 146: 関数は値を返すべき(関数 isincell )
警告 W8057 kadai.c 146: パラメータ 'p' は一度も使用されない(関数 isincell )

139行目が最初のifの行です。

お願いします。
846デフォルトの名無しさん:04/12/06 22:22:46
>>845
エラーまたは警告はそれだけ?
847デフォルトの名無しさん:04/12/06 22:24:15
>>845
Lの定義は浮動小数点になってる?
848デフォルトの名無しさん:04/12/06 22:25:48
>>844
マルチ氏ね
849845:04/12/06 22:27:13
>>846
>>847
申し訳ありません、>>847見て気づきました。
#define L (・・・空欄)
になってました・・・orz

どんな値入れればいいかわからんから空欄にしたままだった・・・

お騒がせしました。
850デフォルトの名無しさん:04/12/06 22:35:08
>>844
include <stdio.h>

void main()
{
int i;
printf("スロットマシーン\n");
printf("コインを入れてください\n");
scanf("%d",&i);

printf("oxo\n");
printf("777\n");
printf("oox\n");

printf("おめでとう");
}
851デフォルトの名無しさん:04/12/06 22:54:15
助けてください。
OSはUNIXでc言語でお願いします。期日は早めでお願いします。
1.c言語を用いてスロットマシーンをつくってください。
2.構造体利用を用いたプログラムをつくって下さい。
以上の二つです。
852デフォルトの名無しさん:04/12/06 22:58:12
>>851

#include <stdio.h>

void main()
{
struct {
int i;
}slot;
printf("スロットマシーン\n");
printf("コインを入れてください\n");
scanf("%d",&slot.i);

printf("oxo\n");
printf("777\n");
printf("oox\n");

printf("おめでとう");
}
853デフォルトの名無しさん:04/12/06 23:45:37
こんなでどおかな?
ttp://v.isp.2ch.net/up/42b06453a023.txt
854デフォルトの名無しさん:04/12/06 23:48:38
>>853
ダイレクトエックスを使ってお願いします
855デフォルトの名無しさん:04/12/06 23:51:48
>>853
できれば効果音もつけて下さい。お願いします。
856デフォルトの名無しさん:04/12/06 23:56:22
仕様にないのでついかりょうきんになります。
10年後ぐらいにたぶんできます。
857デフォルトの名無しさん:04/12/06 23:56:32
>>853
できれば(;´Д`)ハァハァなおねーちゃんも表示して下さい。お願いします。
858デフォルトの名無しさん:04/12/07 00:00:58
Cでこの課題のプログラム作ってください
お願いしますm(__)m
英語の文章に出現する単語の中で、文字数が最も多い単語を出力して終了するプログラムを作成せよ。
入力データには英文字、スペースのみが含まれているものとし、単語とはスペースで区切られた連続する英文字の列とする。
文章の文字数は80文字以下で、一つの単語の文字数は32文字以下とする。
最長の文字数を持つ単語は文中にただ一つだけ存在するものとする。
よろしくお願いしますm(__)m
859デフォルトの名無しさん:04/12/07 00:02:04
>>858
ぼるじょあがC/C++の宿題を片付けますYO! 35代目
http://pc5.2ch.net/test/read.cgi/tech/1101568895/l50
860デフォルトの名無しさん:04/12/07 00:17:15
バニーガールどうぞ

printf("∩_∩\n");
printf("(*^o^)<いらっしゃいませ"\n);
861デフォルトの名無しさん:04/12/07 00:24:18
>>858
この板見てるとこういう宿題をよく見かけるが、データのフォーマットが不明なものが多いよな。
いきなり文字配列なのか、ファイルIOも視野に入れた課題なのか、とか。
862デフォルトの名無しさん:04/12/07 01:10:04
>ファイルIOも視野に入れ

そんな些細なことは気にするな(w
>文章の文字数は80文字以下で、一つの単語の文字数は32文字以下
だぜ?
863デフォルトの名無しさん:04/12/07 05:34:07
だいれくとえっくす使えにワロタ
864デフォルトの名無しさん:04/12/07 14:31:43
ゲー専の課題なのか?

865デフォルトの名無しさん:04/12/07 19:22:24
ここはゲームなインターネッコですね
866デフォルトの名無しさん:04/12/07 19:30:18
MS Word からある文字列がある行を出力したいのですが、どうやればいいんでしょう?
よろしくお願いします。
867デフォルトの名無しさん:04/12/07 19:33:30
C言語は独学でも十分学べますか?
あと他のプログラム全般についても独学でも学べるんでしょうか?
868デフォルトの名無しさん:04/12/07 19:34:42
独学で学べないものを挙げてみよ
869867:04/12/07 19:40:19
セックスは独学では学べないと思います
870デフォルトの名無しさん:04/12/07 19:45:00
アホだ。アホが居るよママ
871デフォルトの名無しさん:04/12/07 19:52:40
872デフォルトの名無しさん:04/12/07 20:25:20
はじめてのC
873デフォルトの名無しさん:04/12/07 20:26:06
('A`*)
874デフォルトの名無しさん:04/12/08 17:49:22
質問ですunsorted list(ソートされないリスト)で
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
と配列が渡されたとき、「75」を挿入すると

┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃75┃  ┃
┗━┻━┻━┻━┻━┻━┛
となるので正しいですか??

また、
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
から53を削除した場合、リストはどの様に並びますか?
よろしくおねがいしますm(_ _"m)
875デフォルトの名無しさん:04/12/08 18:36:17
>>874
マルチ氏ね
876デフォルトの名無しさん:04/12/08 18:42:07

クズは放置
877デフォルトの名無しさん:04/12/08 20:58:29
すいません C言語初心者ですが投稿させていただきます。

C言語で、ある処理でログ出力する際に同時刻に複数プロセスが出力すると、片方のプロセスがログ出力できないということがあるでしょうか??

もしある場合は、対処方法はありますか??
878デフォルトの名無しさん:04/12/08 22:24:54
>>877
環境によっては複数のプロセスが同時にファイルを開くことができる。
ログ出力と言うと通常追加で開くと思うが、例えばこんな現象が生じる。

プロセスAがストリームポインタを末尾(仮に100行目)に移動する。
プロセスBが(以下略
プロセスAが(100行目に)ログ出力する。
プロセスBが(以下略

これにより、プロセスAが出力した内容は消えてしまう。

OSによってはansi標準関数を使わないでOSが用意した関数を使用することで
排他的にファイルを開くことができるので避けることができる。
そういった手段が用意されていない場合は、ファイルパーミッションを落とすか
ファイル名を変えてしまうことによって回避するように工夫することになる。
879デフォルトの名無しさん:04/12/08 22:43:35
>>877
シェアードオープン
ミューテックスまたはセマフォ

このあたりを習得すれば、有る程度好きに出来る。
880デフォルトの名無しさん:04/12/08 23:08:05
こんばんは。リナックスのC言語を使っているのですが、
立方体を描いてそれを回転させるようなアニメーションはどうしたら良いのでしょうか?
立方体を描くところまではできたのですが動かすことができません。
やりかたの方法、載ってるサイト。またはそのような書籍があればお教え下さい。
よろしくお願いします。
881デフォルトの名無しさん:04/12/08 23:18:02
>>880
OpenGLスレにでも行け
882デフォルトの名無しさん:04/12/08 23:36:00
>>881
(多分)自前でレンダリングしてるんだろうから、それじゃスレ違い
883880:04/12/08 23:59:17
>>881
OpenGLってのでいけそうです。
ありがとうございました。
884882:04/12/09 00:01:49
orz
885デフォルトの名無しさん:04/12/09 00:03:07
>>884
ホームラン級の馬鹿だな
886デフォルトの名無しさん:04/12/09 00:12:22
LinuxnoCgengottenanndesuka?
887880:04/12/09 00:12:41
いえいえ
882さんもレスありがとうございました
888デフォルトの名無しさん:04/12/09 00:37:50
強いシンボル、弱いシンボルというものはどういうものでしょうか?
またそれらは実行時のパフォーマンスにどう影響するものでしょうか?
889デフォルトの名無しさん:04/12/09 04:20:02
電卓プログラムを作ってください!

出だしは

#include <stdio.h>

main()
{

ではじまって、switch文、while文,if文、break文、for文のみを使って、

1
+3

と入力すると

4

続けて

+sin30 
と入力すると

4.5
と出て、

Q
で終了できるようにお願いします!
890デフォルトの名無しさん:04/12/09 04:47:54
>>2の5行目に答えが
891デフォルトの名無しさん:04/12/09 04:50:37
スレ違いだしmain()が気にくわないし題意がわかんないしもうこんな時間だし
892デフォルトの名無しさん:04/12/09 13:26:37
>>888
強い: シンボリクリスエス
弱い: ニッポージャガー
893デフォルトの名無しさん:04/12/09 14:58:50
>>889
return 0 ぐらい入れろよ。
894893:04/12/09 14:59:19
ミス、return 0; な
895デフォルトの名無しさん:04/12/09 18:46:40
>>889
不可能。
896デフォルトの名無しさん:04/12/09 20:54:34
>>889
入力手段は? 念力?
897デフォルトの名無しさん:04/12/09 20:55:21
>>896
超魔術
898デフォルトの名無しさん:04/12/10 00:28:49
おまえら使えねーよ
マジ死んでいいから^^
899デフォルトの名無しさん:04/12/10 00:43:03
+sin30 が 4.5 になるところ以外はできた
900デフォルトの名無しさん:04/12/10 00:44:31
あぁ, 1+3+sin30 で 4.5 ってコトか.
ちょっと待っててね.
901デフォルトの名無しさん:04/12/10 13:59:34
円の三点が分かっていて、そこから中心点(cx,cy)と半径(r)を求める計算のプログラムを作ってみたのですが、
簡単な計算はできるのですが、複雑になると-1.#IND000000000という文字が出てしまいます。複雑な計算でもできるようにするにはどこを改良すればよいかどなたか教えていただけないでしょうか?

/* 始点 */
arcx[0] = arc[z][0].sx; arcy[0] = arc[z][0].sy; arcz[0] = arc[z][0].sz;

/* 中間点 */
arcx[1] = arc[z][1].sx; arcy[1] = arc[z][1].sy; arcz[1] = arc[z][1].sz;

/* 終点 */
arcx[2] = arc[z][2].sx; arcy[2] = arc[z][2].sy; arcz[2] = arc[z][2].sz;

for(i=0; i<3; i++) {
a[i][0] = arcx[i]; a[i][1] = arcy[i]; a[i][2] = 1.0;
a[i][3] = (arcx[i]*arcx[i] + arcy[i]*arcy[i]);
}
for(i=0; i<3; i++) {
tyu = a[i][i];
for(j=0; j<4; j++) {
a[i][j] /= tyu;
}
for(k=0; k<3; k++) {
erase=a[k][i];
for(j=i; j<4; j++){
if(k!=i) a[k][j] -= erase*a[i][j];
} } }
for(i=0; i<3; i++){
cx = a[0][3]/2; cy = a[1][3]/2;
r = sqrt((arcx[t]-cx)*(arcx[t]-cx)) + ((arcy[t]-cy)*(arcy[t]-cy));
}
902デフォルトの名無しさん:04/12/10 14:13:20
strcpyはつかっちゃだめよ
strcpyにつかっちゃうと、抜け出せなくなるから。
903デフォルトの名無しさん:04/12/10 14:22:06
>902
strcpyって何ですか?
904デフォルトの名無しさん:04/12/10 14:23:52
905デフォルトの名無しさん:04/12/10 14:32:37
>>904
どうしたらよいのでしょうか?
906デフォルトの名無しさん:04/12/10 15:19:38
>>905
>902を無視してstrcpy()を注意深く使う。
間違ってもstrlcpy()にしただけで安心してはいけない。
また、文字列の加工はstrcpy()やstrcat()を駆使するよりも
sprintf()一発ですむことが多い。sprintf()の書式をよく調べてみるといい。
907デフォルトの名無しさん:04/12/10 16:10:54
>>901
一見して何をしているプログラムか判らん。
最後のループは不要に見えるし、arcx[t]の tは何だ?

怪しいのは、
tyu = a[i][i];
for(j=0; j<4; j++) {
a[i][j] /= tyu;
の部分。a[i][i]が 0だとゼロ除算になってしまうし、極端に小さいと正しい
結果は出ない。「行列 ピポット 選択」でgoogleするとヒントが見つかると思う。

いちど手計算(電卓)で計算してみることを勧める。プログラムの中にprintf()を
入れて途中経過を表示するようにして、それが手計算と合っているか確認する
デバッグ手法が有効だ。
908デフォルトの名無しさん:04/12/10 16:33:21
>>907 arcx[t]のtはiの書き間違いです。アドバイスありがとうございます。
909907:04/12/10 17:32:52
ゴメン、typoした。
×ピポット
○ピボット (pivot)

//ピポットで検索しても結構ひっかかるようだがw
910デフォルトの名無しさん:04/12/10 17:53:16
先生方お願いします。

ファイルサイズが500MB近くのファイルがあります。
この中からあるキーワードが含まれている行を抽出しなければなりません。
あるキーワードは複数存在します。

上記で私が考えたのは、
ファイルを1行ずつ読み込み、その1行の中にキーワードが存在するか
調べるかアルゴリズムを考えたのですが、これだと非常に遅いです。
もっと早く調べる方法はありますか?

ファイルのバッファを全て落とし込むのはメモリ的に無理となっています。
911デフォルトの名無しさん:04/12/10 18:01:19
while(gets(line))
 for(i=0;i<word_count;i++)
  if(strstr(words[i], line)
  {
   見つかった;
   break;
  }
というようなコードをたぶん書いてるんだろうけど
>while(gets(line))
の部分をある程度まとめた行を同時に読み込んで処理する。
改行に関係なく100kbまとめてとかね。
> for(i=0;i<word_count;i++)
>  if(strstr(words[i], line)
の部分も高速化できるかもしれない
if(multi_str_str(words, word_count, line)
のように複数の単語を同時に検索するアルゴリズムを自分で実装する。
実際にやったことないからどの程度高速化するかは分からないけど。まあ腕次第。
912デフォルトの名無しさん:04/12/10 18:25:12
単純に1つの単語を調べるなら、BM法にすればいいんだけど
複数だと工夫がいるね。

で、I/Oの最速はメモリマップドファイルだけど、OSに依存する。
それに、実際に遅いのは物理ディスクにアクセスする部分であって、
メモリ上のコピーはそれほどでもない場合も多いから
stdioの関数を使って、setvbufするだけでも充分になる場合が多い。
913デフォルトの名無しさん:04/12/10 18:30:37
キーワード検索に"foo|bar|baz"な正規表現使うのはどのくらい速いんだろう。
自前でやるのと比べるとあんま速くないかな。
914デフォルトの名無しさん:04/12/10 18:34:27
時間制限みたいなのはあるんかい?
ないとしたら、お前さんの希望する検索時間ってのは
どれくらいなんだい?
915デフォルトの名無しさん:04/12/10 18:44:25
そうそう。
正規表現みたいな状態遷移での決定を
BM法みたいに末尾から行うのが
最速じゃないかと思うんだ。
(最大文字列長にあわせて、不足する末尾は?で埋めて)

ただ、500Mともなると
I/Oの割合の方が大きいんじゃないかと。
916デフォルトの名無しさん:04/12/10 18:52:20
>ただ、500Mともなると
>I/Oの割合の方が大きいんじゃないかと。
単に500Mのファイル読むだけならそんなに時間かからないからボトルネックは検索の方だよ。
CPUのキャッシュサイズに合わせて処理していくのがいいんじゃないの。
917デフォルトの名無しさん:04/12/10 18:59:48
500Mのファイルって、最近のディスク使っていて、データが最外周部にあっても
全部読むのに10秒近くかかるよ。

力任せ法での検索(先頭文字の検索だけ工夫をして)が
それ以上に時間がかかりそうなら、仕方ないけど。
918デフォルトの名無しさん:04/12/10 19:10:19
CPUのキャッシュを意識しなきゃいけないのは
基本的に、オンメモリのデータを複数回処理する時だけだね。

外部からデータを読んで、
それを一回読むだけで次へ移るような、ストリーム系の使い方だと
「キャッシュに収まるサイズで」というのはあまり意味がない。
919デフォルトの名無しさん:04/12/10 19:15:35
>>918
> for(i=0;i<word_count;i++)
>  if(strstr(words[i], line)
ここで複数回処理してるわけで。
複数キーワード同時検索って結局インデックスも複数持たざるを得ないから効果は薄い気がする。
920デフォルトの名無しさん:04/12/10 19:31:59
だからね、
先頭文字の一致だけ、ctype.hにあるようなテーブルを作って判定するのよ。
そして、
一致しなければ次の文字へ進む
一致したら(一回switchを挟んで)各文字列をmemcmpでチェック
という形にするだけで
全体の内の殆どは1回スキャンするだけになるし
複数スキャンする部分は充分小さいから
キャッシュサイズなんて意識する必要が無くなるの。

もちろん、OSのバッファ -> stdioのバッファ -> fgetsのバッファ
へのコピーが発生するけど、これが
ディスクへのアクセスと比べてどれほど実行時間を左右するのか、って話。
921デフォルトの名無しさん:04/12/10 19:36:16
だからね、
>先頭文字の一致だけ、ctype.hにあるようなテーブルを作って判定するのよ。
>そして、
>一致しなければ次の文字へ進む
>一致したら(一回switchを挟んで)各文字列をmemcmpでチェック
なんてベタ検索で効果が出るのかって話をしてるんだけど。
まあ検証するつもりはないからこれ以上はやめとくけど。
922デフォルトの名無しさん:04/12/10 19:50:28
最近C言語始めだしたて「C言語プログラミング検定3級」なるものを
受けようかと思っています。何かいい勉強方法などありましたらご教授
願えないでしょうか?宜しくお願いしますm(__)m
923デフォルトの名無しさん:04/12/10 19:51:49
>>922
そんな検定あるんだ…知らなかった。
924デフォルトの名無しさん:04/12/10 19:59:59
>なんてベタ検索で効果が出るのかって話をしてるんだけど。

あれ、「CPUのキャッシュ」の話じゃなかったの?
だったら、最初の方で書いたように
BM法を応用した末尾からの判定を、複数文字列に対応させたものを
メモリマップドファイルを用いて探索したものが最速だと、
俺は最初からずっと思っているよ。
そして、それはCPUのキャッシュサイズなんか関係ないし。

で、>>920程度ならすぐに実装できるけど
これ以上の工夫は結構手間がかかる。

そして、探索アルゴリズムの工夫による効果が
ディスクI/Oにかかる時間にと比べてどれほどの効果をもつのか
(実装にかかる手間が「充分意味のあるもの」と思えるほどなのか)
ディスクI/Oに比べてCPUのキャッシュの速度がどれほど実行時間に影響するのか
という話だと思ったんだけどね。
925デフォルトの名無しさん:04/12/10 20:05:03
まぁ取り敢えずgrepで速度的に問題ないか確認するところからだな。
場合によっちゃ、自前で書くより速いかも知らん。
926910:04/12/10 20:26:57
お前ら( ゚Д゚)⊃旦 チャノメヤ
質問者のレベルを・・・
927デフォルトの名無しさん:04/12/10 20:39:02
一応、試してみたよ。
手元にあった19M程のテキストファイル(MSHTML_TLB.h)から、"foo","bar","zot"の3つを探索。
探索するだけで、「見つかったから何かする」というのは無し。
これを30回繰り返すけど、
サイズが小さいから、全てOSのキャッシュにのっているはず。
fopen()は、"rb"で。
bccだから、memcmpすらインライン展開はされてない。

ベタなfgets()+strstr()x3 およそ8.2秒
これにsetvbuf() およそ8.0秒 
>>920 およそ3.0秒

もちろん、境界条件等は無視したから、実際にはもう少し変わってくるけど。
さて、これ以上のアルゴリズムの工夫で3.0秒がどの程度減らせるのか、
CPUのキャッシュやアセンブラを意識した最適化でどの程度になるのか。

実際に500Mのファイルから探索するなら、
ディスクからの読み込みで、約10秒かかる。
928デフォルトの名無しさん:04/12/10 21:24:10
初心者です。
使用月と月々の諸料金を入力して、その合計と平均を出そうというプログラムを組みました。

#include <stdio.h>
int main(void)
{
int i;
int a[10],l,x,s;
float avg;
s=0;
printf("使用何ヶ月目か入力>>\n");
scanf("%d\n",&l);
printf("請求金額を入力>>\n");
for(i=0;i<=l-1;i++){
scanf("%d\n",&x);
a[i]=x;
s=a[i]+s;
printf("合計 %d\n",s);
}
avg=0;
avg=s/i;
printf("月額平均 %f\n",avg);
return 0;
}

しかし、一回目に0以外の数値を代入しても(例えば10)一番初めの合計が「合計 0」と表示されしまいます。
これを一回目の入力をiとしたら、一番初めの合計を「合計 i」と表示させるにはどうしたらいいんでしょうか?
また、このプログラムを簡潔にするにはどこを改良すればよいかどなたか教えていただけないでしょうか?
ちなみに環境はMicrosoft Visual C++ 5.0で、エラー・警告等はありません。
929デフォルトの名無しさん:04/12/10 21:37:23
まず、
× scanf("%d\n",&l);
○ scanf("%d",&l);

scanf("%d\n",&x);も同様。
930デフォルトの名無しさん:04/12/10 21:48:30
scanfは面倒くさいからfgetsとatoi使え。
あとavg = 0;は直後でs/iを代入しているんだから無駄。
そのs/iはsもiも整数だから結果も整数になる。((double)s) / iにでもしろ。
どうせだからavgはdoubleにしろ。
931デフォルトの名無しさん:04/12/10 22:40:28
>>930
スレ違い
こっちでやれ↓
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
932デフォルトの名無しさん:04/12/10 22:56:50
>>929-930
ありがとうございます。
言われた通りに入力したらちゃんと実行出来ました。

scanfの代わりにfgetsとatoiですか。調べてみます。
ありがとうございました。
933初心者A:04/12/10 23:02:04
#include<stdio.h>
int main(void){
int a;
a = 1;
printf("number%d\n , 0");
} return 0;

参考書見ずに書いてみました。もしかしたらどこか違うカモ…
まず1歩目です!
934デフォルトの名無しさん:04/12/10 23:05:12
>>932
騙されるな
結構有名なアフォ議論だぞ
935デフォルトの名無しさん:04/12/10 23:39:56
>>403
http://homepage2.nifty.com/DSS/WinSys/Win/FileMapping.htm

Windows固有の機能。

まあほかのOSにも似たような機能はあるのかもしれんが。
936デフォルトの名無しさん:04/12/10 23:48:19
>>935
君は単一仮想記憶を知らないな?
937デフォルトの名無しさん:04/12/10 23:50:59
>>935
君は空気を読めないな?
938デフォルトの名無しさん:04/12/10 23:51:58
________.  |  ・・・「からけ」?
|||          | \____ __
|||          |  )\       ∨
|||    空  気.   <⌒ヽ ヽ
|||         \ ( ´ー`)    ∧∧
|||_________V(   丿V^  ●Д゚,,)
|,,|          |,,| ヽ (      と  ,)
              ノ )     |  |〜
            ∧          .し`J,,.
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄\
939900:04/12/11 00:45:24
>>889
三角関数対応の電卓だよ.
こっちに書いたから使ってね.

七行プログラミング part4
http://pc5.2ch.net/test/read.cgi/tech/1051703369/814
940デフォルトの名無しさん:04/12/11 13:06:10
>>933
int a;
a = 1;
は int a = 1;
とまとめられる。
のはいいんだがaは何に使ってるんだ?
941デフォルトの名無しさん:04/12/11 13:26:35
>printf("number%d\n , 0");

そもそも number%d\n , 0 って表示させてどうするw
942デフォルトの名無しさん:04/12/11 13:31:33
>%d

...何が表示されるんだろう
943デフォルトの名無しさん:04/12/11 14:31:43
>>941
「returnの場所がおかしい」と、一番の餌で釣れない933て一体。。。
944デフォルトの名無しさん:04/12/11 16:41:10
なるほど!おもろいな
945デフォルトの名無しさん:04/12/11 19:04:35
>>941
いや、%dは不定値に置き換わるから。
946デフォルトの名無しさん:04/12/11 21:12:10
そろそろ埋め立てる方針らしいのでなんか荒れるネタきぼんぬ。scanf類以外で
947デフォルトの名無しさん:04/12/11 21:12:56
freeしろ。必ず。
948デフォルトの名無しさん:04/12/11 21:13:32
>>947
前橋召喚の呪文?
949デフォルトの名無しさん:04/12/11 21:42:51
初心者です。

参考書によって
void main() と書いてあるものと
int main() と書いてあるものの2種類ありますよね。
intにしてreturnしても、どこにも使われてないし
プログラムも問題なく動くので
全部voidでいいと思うんですが。

voidにしてはいけない理由でもあるのでしょうか。
950デフォルトの名無しさん:04/12/11 21:45:50
仕様でintにしろと決められてるから
951デフォルトの名無しさん:04/12/11 21:48:10
mainの戻り値はシステムに使われてる品
952デフォルトの名無しさん:04/12/11 21:50:24
>>949
例えば、このスクリプト内ではプログラムの返り値を使います。

#!/bin/sh
i=100
while [ $i -lt 253 ]
do
a=`ssh 192.168.0.$i who 2> /dev/null`
if [ $? == 0 ]
then
echo "192.168.0.$i" $a
fi
i=`expr $i + 1`
done
953デフォルトの名無しさん:04/12/11 21:51:39
>>952
「このプログラムは返り値を提供しません。標準出力の結果を勝手に解析してください」
でもいい気がするんだけど。実際リターンコードは結構適当だし。
954デフォルトの名無しさん:04/12/11 21:54:32
すみません。先輩から「最近のCの規格で、voidは大文字でも良くなったよ」と聞きました。
試しに
int main(VOID)
{
 printf("VOID(・∀・)\n");
 return 0;
}
を実行してみると、ちゃんと動きました。

この規格は、いつ決まったのでしょうか?
参考になるURL等ありましたら教えてください。
955デフォルトの名無しさん:04/12/11 21:55:25
>>953
返り値はUNIXツールの習慣なんだけど、実際返り値があるとシェルプログラムから
扱うときに非常に便利なんだ。
返り値にもメタファがあって、習慣どおりにしないと不便になる。
956954:04/12/11 21:56:27
すみません。ちょっと間違えました。
957デフォルトの名無しさん:04/12/11 21:56:44
>>951
その「システム」を ISO/IEC9899 は定義せずに shall とか言ってるわけだ
958デフォルトの名無しさん:04/12/11 22:02:03
>>950
そんな決まりはない
959デフォルトの名無しさん:04/12/11 22:03:24
>>955
&&で繋いで処理する時なんかかな?
./configure && makeとか
960デフォルトの名無しさん:04/12/11 22:03:33
>>958
馬鹿
961デフォルトの名無しさん:04/12/11 22:07:58
>>958
無知
962デフォルトの名無しさん:04/12/11 22:12:23
>>960
よく読めよ
返却値の型が int の main を受理できなければならないだけで
それ以外を implementation-defined としているだろ
ちゃんと文書化してあれば合法なんだよ
963デフォルトの名無しさん:04/12/11 22:15:19
>>954
windows.hなんかをインクルードするとそうなる。
windows.hの中でインクルードされているwindef.hかどっかに#define VOID voidと書かれているから。
964デフォルトの名無しさん:04/12/11 22:16:27
>>954
その先輩アホだから見限った方が良いよ
965デフォルトの名無しさん:04/12/11 22:16:46
DWORDとかVOIDとか、使いたくないんだけど。。
966デフォルトの名無しさん:04/12/11 22:18:20
どうせならVoidやTrueも通るようにすればいいのに
967デフォルトの名無しさん:04/12/11 22:19:00
>>966
Pascalプログラマ?
968デフォルトの名無しさん:04/12/11 22:20:14
HTMLを手書きしてる人で
<Html>
<Head><Title>hoge</Title>
</Head>
</Html>
ってやってるのがいたな
969954:04/12/11 22:26:42
>>963
windows.hなんて全然使ってません。
#includeしているのは、<stdio.h>だけです。

gccとbccとvctkの全てで動作を確認しました。
嘘だと思うなら、試してみてください。
970デフォルトの名無しさん:04/12/11 22:28:46
>>962
「ちゃんと文書化してあれば」って何のことだ?
社内規定?
971954:04/12/11 22:28:50
あと、
int main(Void) { ... }
でも動きました。
972デフォルトの名無しさん:04/12/11 22:29:09
教えてください。
入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。
警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main)
警告2:コードは効果をもたない。(関数 main)
警告3:問題のあるポインタの変換。(関数 input)
ソース↓
#include <stdio.h>
#define MAX 256

char *input();

void main()
{
*input();
}

char *input()
{
char s[MAX];

printf("COMMAND:");
scanf("%s", s);

return s;
}
973デフォルトの名無しさん:04/12/11 22:30:58
>>972
つ、釣られないぞ…
974デフォルトの名無しさん:04/12/11 22:31:16
>>972
マルチポストするな消えろ
975デフォルトの名無しさん:04/12/11 22:31:56
>>972
char *input()はですねー、char*型の返り値を返す、inputという関数の定義なんですよー にゃんにゃん
976デフォルトの名無しさん:04/12/11 22:32:39
>>960-961
規格を読んだことのない半可通
977973:04/12/11 22:33:21
>>972
お前が言いたいだろうことを最大限考慮してやった↓。
これがしたいんだろ?

#include <stdio.h>
#define MAX 256

char *input();

void main()
{
  char* p;
  p = input();
  printf("%s\n", p);
}

char *input()
{
  static char s[MAX];

  printf("COMMAND:");
  scanf("%s", s);

  return s;
}
978デフォルトの名無しさん:04/12/11 22:33:33
979デフォルトの名無しさん:04/12/11 22:34:49
>>976
環境依存のコード書く馬鹿?
980デフォルトの名無しさん:04/12/11 22:35:31
>>979
>>976は揚げ足取りたいだけの馬鹿
981デフォルトの名無しさん:04/12/11 22:37:02
バカって言われて悔しかったんだろ
もうほっとけ
982デフォルトの名無しさん:04/12/11 22:37:04
K&Rでvoid mainに関する記述があるのはどのあたり?
983デフォルトの名無しさん:04/12/11 22:38:03
>>979
環境依存?覚えた言葉をすぐ使っちゃダメってママに言われたろ?
984デフォルトの名無しさん:04/12/11 22:38:12
*char input()
で駄目?
985!=976:04/12/11 22:38:31
>>980
揚げ足を取っているわけではなくて、まれではないと思うよ。
986デフォルトの名無しさん:04/12/11 22:38:58
>>983
・・・しょぼい煽りだな。
狭い世界で生きててくださいねw
987デフォルトの名無しさん:04/12/11 22:40:13
>>985
希ではないから良いコードだというわけではないだろう。
988デフォルトの名無しさん:04/12/11 22:40:24
  /■\
  (´Д`iill) 
  (⊃ ⊂)
 (⌒(⌒_.ノ
989デフォルトの名無しさん:04/12/11 22:40:55
で、K&Rにvoid mainに関する記述はないの?
990デフォルトの名無しさん:04/12/11 22:41:16
ごめん、誤爆。
991デフォルトの名無しさん:04/12/11 22:41:46
>>987
良いか悪いかじゃない。規格に定まっているかのような嘘をつくな
992デフォルトの名無しさん:04/12/11 22:41:48
>>958=>>962=>>976=>>983はトリップ付けてね
993949=954:04/12/11 22:43:42
>>949はこれほど好意的に受け止めてもらったのに
>>954
int main(VOID, argv)
int VOID;
char **argv;
{ ... }
は相手にしてもらえませんでした。
ちょっと悲しいです。

でも、>>946さんなどには満足していただけたかと思います。
994デフォルトの名無しさん:04/12/11 22:44:15
次はPart96だな
995!=976:04/12/11 22:44:29
>>987
例えば、組み込み。
ヘッダは自分で書くことが非常に多い。
996デフォルトの名無しさん:04/12/11 22:44:54
>>991
頭悪いなぁ…
997デフォルトの名無しさん:04/12/11 22:45:41
>>995
(;´Д`)だから?
998デフォルトの名無しさん:04/12/11 22:45:41
1000下と
続きはこっちで

C言語なら俺に聞け! Part 96
http://pc5.2ch.net/test/read.cgi/tech/1101615970/
999デフォルトの名無しさん:04/12/11 22:46:05
(・∀・)イイ!!
続きはこっちで

C言語なら俺に聞け! Part 96
http://pc5.2ch.net/test/read.cgi/tech/1101615970/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。