1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
31 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:18:42 ] つまりアーキテクチャに依存するわけですよ
32 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:19:49 ] >>31 が全て ということで自分の環境で測れ>>4
33 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:25:05 ] 今ならながらほとんどをlogで処理するのにdoubleで計算ってどうなんだって思った。 ただ扱うファイルが非常に多いからfloatでいいかなー。 あるファイルを入力 2500個のファイルで検査、その出力結果が一番高いものが 入力のファイルと一致するかを見る。 それを3000回だよ。 ちなみに2500個のファイルの中身にまたファイル名が書かれてて その中身のファイルの数値を取り入れるんだけどね。
34 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:27:45 ] floatの方がSSEの最適化が効く
35 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:36:12 ] 最近makeを見飽きてきた。 make,make,make,make
36 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:40:28 ] 一瞬化粧の濃い人を思い浮かべてしまった
37 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:50:31 ] C言語の浮動小数点はライブラリの関数がすべてdoubleで かかれているという罠があるのは有名な話だな…… Cのfloatは遅いという話の出所。 もう昔の話だったか……
38 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:06:31 ] Cには暗黙の昇格ルールというものがあってだな。float=float+floatはfloadt=(float)((double)float+(double)float)なのよ。 C++ではルールが違うけれども。
39 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:08:06 ] かなりの初心者で悪いが、質問させてくれ 最近C言語をやりはじめたんだが、gccを入力するとバッチファイルとして認識されてないって出るんだ 環境変数もいじってみたがよくわからない 教えてくださいエロい人
40 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:13:22 ] OSは?「gccを入力すると」を具体的に。
41 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:14:40 ] ファイルが多くなってくると分割コンパイルちょっと時間かかるよね。 あれがちょっといや。 コンパイルされたのはわかったけどダラダラと書きやがってと。 エラーでるときはcc -c file.cとかと一緒にでるし。
42 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:15:24 ] 察するにWindows環境? 環境変数PATHを直せば良いんじゃないか?
43 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:17:45 ] ググレカス
44 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:22:06 ] これか? ttp://ja.uncyclopedia.info/wiki/%E3%82%B0%E3%82%B0%E3%83%AC%E3%82%AB%E3%82%B9
45 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:23:05 ] >>40 詳しいこと書かなくてごめん OSはWindowsXP gccはそのままだよ。コマンドプロンプト開いて、gccでファイル実行しようとすると “gcc”は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。ってでる そんでググってみて環境変数のpathに含まれてないからってでたからちょこちょこ環境変数いじってみたけど駄目だった 説明下手くそですまん
46 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:26:17 ] シグインでいいじゃん
47 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:26:46 ] >>45 ちょこちょこじゃなくてしっかりいじってこい そうしてhelloworldくらい実行できるようになってからこのスレにこい
48 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:29:57 ] いじるのめんどいんだったら 10GB削ってLINUXいれたら すぐ使えます
49 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:34:58 ] >>47 そうだよな…ありがとう でもググッてみてもいじり方がよくわからないんだ 何十回も変更してみたけど駄目だった もうちょっと頑張ってみる >>48 ありがとう それも試してみる
50 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:36:58 ] どうみても48が一番時間かかるとおもうけど
51 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:55:13 ] >>46 が真実
52 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 03:43:10 ] @rem gcc.bat @echo off del /F /Q %*
53 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 03:44:27 ] >>49 もしかしてUNIXバイナリをWindowsに持って来て動かそうとしてないか? Windowsネイティブでgcc動かすのは結構敷居が高いぞ? おとなしくCygwin使うか、Windows限定で良いならMSVC++2005Expressやbccのほうがラク。
54 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 11:06:11 ] >>29 >floatの計算はdoubleに変換される 計算後元に戻すから鈍い >>38 >Cには暗黙の昇格ルールというものがあってだな。float=float+floatはfloadt=(float)((double)float+(double)float)なのよ。 真っ赤な嘘乙。 整数型の場合と違って、実数型は(c89ですら)単精度同士の演算が認められている。 >>34 >floatの方がSSEの最適化が効く 常にそうではないが、可能性が高いとはいえるね。 >37 >C言語の浮動小数点はライブラリの関数がすべてdoubleで >かかれているという罠があるのは有名な話だな…… C99にはmath.hの全ての関数にfloat版が用意されている。そのお蔭か、本来ない筈のC++でも使えることが多い。 >Cのfloatは遅いという話の出所。 いや、藤原の翁によると、あくまで関数は副次的としていて、実数演算がdoubleで実装されているのが理由だとしているようだ。
55 名前:デフォルトの名無しさん [2007/10/16(火) 12:10:15 ] セレロンだがfloatが速い #include<stdio.h> #include<time.h> #define N 50000000 floatloop(){ int i,c=clock();float r=1.0; for( i=0 ; i<N ; i++ ){r *= 2.5;r/=2.5;r+=1.001;r-=1.001;} c=clock()-c;printf( "float %dmsec value %f\n", c ,r);} doubleloop(){ int i,c=clock();double r=1.0; for( i=0 ; i<N ; i++ ){r *= 2.5;r/=2.5;r+=1.001;r-=1.001;} c=clock()-c;printf( "double %dmsec value %f\n", c, r);} main(){ floatloop();doubleloop();}
56 名前:デフォルトの名無しさん [2007/10/16(火) 12:16:41 ] math.hもfloatの方が速い #include<stdio.h> #include<time.h> #include<math.h> #define N 5000000 floatloop(){ int i,c=clock();float r=10.0; for( i=0 ; i<N ; i++ ){r=log(r);r=exp(r);r=pow(r,2);r=sqrt(r);} c=clock()-c;printf( "float %dmsec value %f\n", c ,r);} doubleloop(){ int i,c=clock();double r=10.0; for( i=0 ; i<N ; i++ ){r=log(r);r=exp(r);r=pow(r,2);r=sqrt(r);} c=clock()-c;printf( "double %dmsec value %f\n", c, r);} main(){ floatloop();doubleloop();}
57 名前:デフォルトの名無しさん [2007/10/16(火) 12:19:16 ] CPUでハードウェア的に計算可能なのはdoubleだときいた だからfloatは鈍いと 違うのか
58 名前:デフォルトの名無しさん [2007/10/16(火) 12:21:45 ] ハードウェアとして浮動小数点演算が組み込まれているはずだ すると今のCPUは、doubleもfloatも入っているのか?
59 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 12:42:15 ] >>55 素朴な疑問だが、最適化掛けるとループの中身が消えそうだがコンパイラとオプションは? # まぁ、floatが速いと言うことには同意だが。 >>56 うーん、こっちは辻褄が合わないなあ。コンパイラとオプションはどうなっている? # 関数を適切に呼び出しているなら、float ⇔ doubleの変換が頻繁に入るから遅くなる筈なんだ。 >>57 大丈夫、今時のCPUはfloatでも計算可能だ。 >>58 そそ、そういうこと。 実際、加減算、乗算は速度的にビット幅は余り影響しない。まして除算はビット幅が広いほど確実に遅くなる。
60 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 13:08:44 ] 一つ発見。>56をgccでコンパイルしたら、log()ではなくlogf()、exp()ではなくexpf()を呼び出していたよ。 それならそれで、floatの方が速いのも納得。尤も、初期のXeonでは有意差が得られなかったけれど。 # gcc(3.4.6)使用。オプションは -O3 -msse2 -lm、-msse2は事実上影響なかった。
61 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:04:37 ] C言語を勉強しようと思ってるんですけど、 普通のエディタじゃできないんですか? コンパイラがよく分からなくて何かできないんですけど。
62 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:08:19 ] >>61 コードを書くだけならどんなエディタでも構わないと言えば構わない。 コンパイラにVisualStudioのような統合環境を使うのなら、ビルトインのエディタを使うのが無難だと思う。 コンパイラにbccやlsicを使うのはよした方がいい。 コンパイラにgccを使うのならコマンドライン環境そのものの使い方にも慣れる必要がある。 まぁもっとも、一部の天才のように読むだけで勉強できるのならエディタもコンパイラも要らないわけだが。
63 名前:デフォルトの名無しさん [2007/10/16(火) 14:09:09 ] 普通のエディタでかける でも初心者は、BCC developerつかっとけ
64 名前:BCC Developer導入法 [2007/10/16(火) 14:15:01 ] BCC Developer導入法 www.codegear.com/jp/downloads/free/cppbuilder へ行って Borland C++Compiler / Turbo Debugger Windows 5.5 8.85 MB をクリックして、必要事項を記入してファイルを落とす 落としたら、メールで送られてきたパスワードを入力してインストールする デバッガをインストールするときのパスワードは ReadmeInstall.txt に書いてある つぎに BCC Developerをインストールする 下をダウンロードする www.vector.co.jp/soft/dl/win95/prog/se180695.html www.cmagazine.jp/download/setbcc15b.exe 解凍したフォルダをbccdevに名前を変更して、C:\borlandへ移動する 一方でsetbcc.exeを起動して、すすむを5回押して設定を押す その後、C:\borland\をbccdev\BccDev.exeを起動して コンパイラ C:\borland\bcc55\Bin\bcc32.exe デバッガ C:\borland\bcc55\Bin\TD32.EXE を入力して設定ボタンを押す ファイル→新規作成 を選んで、ディレクトリは、C:\borland\bccdev、プロジェクト名はtestとしokボタンを押す 再び、ファイル→新規作成 を選び、ファイル名のところへhello.cppを入力してokボタン #include<stdio.h> int main( ){ printf( "Hello world!\n" ); return 0;} をコピペして、プロジェクト→メイクしてMake End!!が出ればコンパイル成功 次に実行→実行してHello world!がDOS画面に出れば成功
65 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:26:23 ] 今MKEditorを使ってるんですけど、 これじゃできませんか?
66 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:27:24 ] それとBCC Developerって無料ですか?
67 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:29:28 ] >>66 >62は無視ですか?
68 名前:デフォルトの名無しさん [2007/10/16(火) 14:32:08 ] MKEditorで書けるが、コンパイルは自分でやる必要あり BCC Developerは無料で簡単
69 名前:デフォルトの名無しさん [2007/10/16(火) 14:34:09 ] BCC Developerなら、今ならの導入でわからないところを教えてやるよ
70 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:40:53 ] >>67 すみません、よく分からなくて。
71 名前:デフォルトの名無しさん [2007/10/16(火) 14:41:45 ] とりあえず >>64 をやってみ
72 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:42:33 ] どうしてもBCCDeveloperを勧めたい香具師がいるらしいから、一緒に地獄に落ちておけばいいと思うよ。
73 名前:デフォルトの名無しさん [2007/10/16(火) 14:46:26 ] じゃあどれか良くて、BCCDE
74 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:46:57 ] www.sgnet.co.jp/c/ このサイトの勉強をしたいんですけど。 できますか?
75 名前:デフォルトの名無しさん [2007/10/16(火) 14:46:59 ] じゃあどれか良くて、BCCDevloperのどこが悪い?
76 名前:デフォルトの名無しさん [2007/10/16(火) 14:49:16 ] >>74 BCC Developerでできるが、そのサイトは勉強にむいていない 質が良くない
77 名前:デフォルトの名無しさん [2007/10/16(火) 15:04:36 ] ここは初心者向きの勉強サイト ある程度わかったらSTLへ進むと良い hp.vector.co.jp/authors/VA001944/c-begin/text01.html effy.ldw.jp/c/index.html
78 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:08:28 ] >>74 できますか?って…自分の頭のことを他人に聞くなよw
79 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:12:38 ] まずはBCC Developerをダウンロードすればいいんですよね?
80 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:12:42 ] >>77 後者は兎も角、前者はLSI-C86を使っている時点でアナクロに過ぎると思う。
81 名前:デフォルトの名無しさん [2007/10/16(火) 15:13:29 ] >>79 >>64 の順序どおりにやってみて
82 名前:デフォルトの名無しさん [2007/10/16(火) 15:14:56 ] >>80 そこは見なかったことにすれば初心者向き
83 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:15:35 ] わかりました。 皆さんありがとうございます。
84 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:23:01 ] >74のサイトは他のスレでダメ出しされていた。 私も間違いを指摘するメールを出したが改めるどころか返事もなかった。
85 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 16:06:18 ] >>54 C++でもISO/IEC 14882:2003 (X3014:2003)では、 float版とlong double版がdouble版の関数名で多重定義されている。 ほげfとかほげlみたいな関数はないことになっているだろうけど。
86 名前:デフォルトの名無しさん [2007/10/16(火) 16:35:58 ] [1] 授業単元:プログラミング2(C言語) [2] 問題文(含コード&リンク):マージソート merge(data1,n1,data2,n2,data3)を使い,merge_sort(data1,n,data2)を作成せよ。 関数の再帰的定義(?)というものを使って作成するみたいです。注:nへはdata1の要素数(整数型)を代入する。 注:data2はdata1を整列した配列とする。 用意された整数値データ int data[20]={9,10,8,7,6,20,-4,8,9,11,5,15,-7,12,23,3,24,-11,30,6} [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:? 学校ではktermでcc [ファイル名]とやっています [3.3] 言語:C [4] 期限: ([200?年10月17日24:00まで] [5] その他の制限:merge()は自分で作りました。 #define N 10 void merge(int data1[], int n1, int data2[], int n2, int data3[]){ int index1, index2, index3, i; index1 = index2 = index3 = 0; while(index1 < n1 || index2 < n2){ if(index1 < n1 && index2 < n2){ (data1[index1] >= data2[index2])?(data3[index3++] = data1[index1++]) :(data3[index3++]=data2[index2++]); for (i=0; i<(2*N) ;i++) printf("%d,", data3[i]); printf("\n");} else if(index1 < n1){ for (;index1 < n1 ;index1++) data3[index3++] = data1[index1]; } else {for( ; index2 < n2 ; index2++) {data3[index3++] = data2[index2];}} } }
87 名前:デフォルトの名無しさん [2007/10/16(火) 16:39:32 ] 自力で頑張ろうとしてたんですがどうしてもうまくできません。。 提出期限は明日までですが、ここまで頑張ったならしっかり理解して終わりたいです。 期限すぎてからでもいいのでどなたかお願いします。。 コンパイルエラーが出るので使えませんが一応自分の作り書けたものも載せておきます。 もし構想みたいなのはよければどこがダメなのか教えてもらえれば明日頑張って続き作ります>< void merge_sort(int data1, int n, int data2) { int i,j, cut = n / 2; if ( cut > 0 ){ int samp_left[cut],samp_right[n - cut]; for( i = 0 ; i < cut ; i++) samp_left[i] = data1[i]; for( i = cut ; i > n ; i++ ) samp_right[i]=data1[i]; if( n != 2 ){ merge_sort(samp_left,cut,data2); merge_sort(samp_right,n - cut ,data2); } } merge(samp_left,cut,samp_right,(n - cut),data2); }
88 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 16:55:17 ] C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/l50
89 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:27:20 ] >>87 とりあえずぱっと見ておかしいところ…… >void merge_sort(int data1, int n, int data2) data1とdata2は配列だから、int data1[]とかint *data2とかやらないと。 >for( i = cut ; i > n ; i++ ) 継続条件の不等号が逆だと思う >samp_right[i]=data1[i]; iがcutから始まってるから、samp_rightの添え字がずれちゃうね 足し引きして調整しないと >meege_sort(samp_left,cut,data2); >merge_sort(samp_right,n - cut ,data2); merge_sortの第三引数は結果を受け取る変数だから、 双方ともにdata2に受け取ったら上書きされちゃうと思う。 meege_sort(samp_left,cut,samp_left);みたいにして同じ配列で受け取るか、 sorted_leftとかの配列を新たに宣言して、それを第三引数に指定すべき。 >merge(samp_left,cut,samp_right,(n - cut),data2); もしsorted_leftとかを新たに作るんだったら、ここの引数も直す そうでないならこのままでいい 大筋としては特に考え方が間違ったりはしてないと思うよ 今は携帯だからこれ以上無理 >>88 丸投げしたいわけでもないみたいだし、いんじゃね 何で宿題スレのテンプレ使ってるのか知らんけど
90 名前:デフォルトの名無しさん [2007/10/16(火) 17:33:35 ] 汎用性を重視しているのですが、DLLを使う場合に一般的なのは、 LIBファイルを使って最初からリンクしてしまうパターンでしょうか? それともLoadLibraryで随時リンクするパターンでしょうか?
91 名前:89 mailto:sage [2007/10/16(火) 17:37:31 ] あ、書き忘れ cut==0のとき(n==1のとき)、samp_leftとかが宣言されてないからmerge関数を呼び出すとこでエラーが出る とりあえずの対処法としては、mergeをifブロックに押し込んで、 n==1 (cut==0)の時はdata2にそのままデータを入れる
92 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:38:22 ] >>90 スタティックリンクだとDLLのバージョンで悩まなくて済む
93 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:44:33 ] てか宣言されていないとか以前の問題か スコープが……
94 名前:デフォルトの名無しさん [2007/10/16(火) 17:57:32 ] VCExpress2008Beta2で以下のような最小Winプログラムを実行しようとしたのですが、 ビルドに失敗してしまいます。何故なのでしょうか? #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; } エラー 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup MSVCRTD.lib エラー 2 fatal error LNK1120: 1 unresolved externals C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe
95 名前:デフォルトの名無しさん [2007/10/16(火) 18:01:43 ] >>94 Windowsアプリを作るなら、コンパイルオプション設定する必要があるんじゃないか。 VCは知らんが、例えばBorlandなら「-W」とか。
96 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:05:53 ] >>95 プロジェクトの設定を変えたら動きました。ありがとうございます
97 名前:デフォルトの名無しさん [2007/10/16(火) 18:23:12 ] なんてスレ違いのやつなんだ
98 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 20:02:52 ] >>87 marge関数内ではdata1[],data2[]は読み込みしかしていないから >merge_sort(samp_left,cut,data2); >merge_sort(samp_right,n - cut ,data2); は merge_sort(data1,cut,samp_left); merge_sort(data1 + cut,n - cut ,samp_right); としてもいいと思う。 (merge関数がブラックボックスなら宣言にconstついてない時点で却下だけど) あとC言語だと配列宣言時の要素数指定に変数が使えないから >int samp_left[cut],samp_right[n - cut]; はだめだと(C++では通ってしまう) int *samp_left,*samp_right; samp_left = malloc(cut*sizeofint)); samp_right = malloc((n-cut)*sizeofint)); として当然merge呼び出した後 free(samp_left);free(samp_right); とする。
99 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:57:09 ] INT_MAX + 1 とすると、オーバーフローを起こすのですが INT_MAX + 1.0 にすると、2147483648.000000 と出て、エラーが出ません。 double型はどこまで値を扱えるのか誰か教えてくださいませんか?
100 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:58:10 ] struct node{ T data; node *left; node *right; }; void deletetree(node *t){ if(t==NULL)return; deletetree(t->left); deletetree(t->right); delete t; } void deletetree(node *t){ node *route[1024]; node *p,q; int n=0; for(p=t;){ while(q=t->left;q!=NULL;q=q->left){route[n]=p;n++} delete p; } }
101 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:58:54 ] ごめんなさい誤爆しました
102 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:08:42 ] >>99 DBL_MAX まで DBL_MAX は float.h で定義されている
103 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:29:39 ] 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458 953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304 583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 こんな数が得られましたw ありがとうございます
104 名前:デフォルトの名無しさん [2007/10/17(水) 03:18:10 ] あるコンパイラで作ったC言語のライブラリを 別のコンパイラから利用できることってあるんですか?
105 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 03:21:06 ] あります
106 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 03:28:42 ] ありがとうございました。
107 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 05:49:34 ] XP使ってるんですが、どうもコンパイラをうまく設定できません。 LSI C-86というのの設定がわからず、Borland C++ Compiler 5.5 ってのも 落とせるところのリンクが死んでます・・・手っ取り早くコンパイルするにはどうすればいいでしょうか
108 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 07:38:10 ] >>107 www.forest.impress.co.jp/lib/stdy/program/progdevenv/ VC2005ExpressかTurboC++ExpressをDLすればよし。どちらもコマンドラインでコンパイル可能。
109 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:40:31 ] >>107 Borland C++Compiler 5.5 www.borland.com/jp/products/cbuilder/freecompiler.html ここのダウンロード、まったく反応ありませんね〜。 昨日からC言語をはじめた者ですが、どこかにミラーサーバ ありませんか??
110 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:53:02 ] >>109 ttp://www.codegear.com/jp/downloads/free/cppbuilder
111 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:41:44 ] うーんBorland C++Compiler 5.5って落とせたけどコンパイル、実行の仕方がわからない・・・ インストールしても実行ファイルがなくてどうすればいいのやら
112 名前:BCCはこれよめ [2007/10/17(水) 14:02:15 ] BCC Developer導入法 www.codegear.com/jp/downloads/free/cppbuilder へ行って Borland C++Compiler / Turbo Debugger Windows 5.5 8.85 MB をクリックして、必要事項を記入してファイルを落とす 落としたら、メールで送られてきたパスワードを入力してインストールする デバッガをインストールするときのパスワードは ReadmeInstall.txt に書いてある つぎに BCC Developerをインストールする 下をダウンロードする www.vector.co.jp/soft/dl/win95/prog/se180695.html www.cmagazine.jp/download/setbcc15b.exe 解凍したフォルダをbccdevに名前を変更して、C:\borlandへ移動する 一方でsetbcc.exeを起動して、すすむを5回押して設定を押す その後、C:\borland\をbccdev\BccDev.exeを起動して コンパイラ C:\borland\bcc55\Bin\bcc32.exe デバッガ C:\borland\bcc55\Bin\TD32.EXE を入力して設定ボタンを押す ファイル→新規作成 を選んで、ディレクトリは、C:\borland\bccdev、プロジェクト名はtestとしokボタンを押す 再び、ファイル→新規作成 を選び、ファイル名のところへhello.cppを入力してokボタン #include<stdio.h> int main( ){ printf( "Hello world!\n" ); return 0;} をコピペして、プロジェクト→メイクしてMake End!!が出ればコンパイル成功 次に実行→実行してHello world!がDOS画面に出れば成功
113 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:09:45 ] 入門編ってのはあくまでC言語の入門であってPC入門じゃない コンパイラ自体はただのソフトなんだからそれぐらい自分で解決できるようになっておけ
114 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:37:49 ] >>110 ありがとうございました! 無事Win95で起動させました! このPCの余生の用途が決まりました。
115 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:50:58 ] >>111 実行ファイルが無いって…… インストール先をちゃんと見てみたのか?
116 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:52:05 ] というか別に実行ファイルを探す必要は無いんだよ PATHを通せば
117 名前:998 [2007/10/17(水) 19:19:02 ] 前スレでfopenでセグメンテーション違反が出て、 ポインタの取り扱いミスとの指摘を受けたものです。 ポインタ勉強したのですが、イマイチ分かりません。 数値計算用プログラムで配列の要素をかなりたくさん使っているのですが、 それも原因として挙げられますか?
118 名前:デフォルトの名無しさん [2007/10/17(水) 19:20:13 ] 質問させてください 数字、文字、それ以外の1つの文字列を入力し入力後に その文字列を数字、文字、それ以外の各配列に分けそれぞれの内容を 表示するプログラムなのですが int i, suji_cnt = 0, moji_cnt = 0 ,kigou_cnt =0; char str[NUM],suji[NUM],moji[NUM],kigou[NUM]; printf("Input:"); scanf("%s",&str); for(i=0; str[i] != '\0';i++){ if(str[i]>='0' && str[i]<='9'){ suji[suji_cnt++] = str[i]; } else if(str[i]>='a' && str[i]<='z'){ moji[moji_cnt++] = str[i]; } else{ kigou[kigou_cnt++] = str[i]; } } printf("数字: %s Input Length : %d\n", suji,suji_cnt); printf("文字: %s Input Length : %d\n", moji,moji_cnt); printf("それ以外: %s Input Length : %d\n", kigou,kigou_cnt); return 0; } と書くと表示されるとき最後のほうで変な記号? みたいなものも表示されるのですがどこがおかしいのでしょうか? よろしくお願いします。
119 名前:デフォルトの名無しさん [2007/10/17(水) 19:22:56 ] 数値の符号を反転させるにはどうしたらいいですか?
120 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:30:34 ] >>118 文字列を'\0'で終わらせてないから。
121 名前:119 mailto:sage [2007/10/17(水) 19:33:10 ] すみませんつけたしです。 反転の他に、(+)にする、(-)にする方法もあれば教えて頂きたいです。 数値は signed前提です。
122 名前:119 mailto:sage [2007/10/17(水) 19:42:44 ] 連投すみません。 なんとか解決できたかも知れません。 符号を反転させるには、 x *= -1; でき、 if( x < 0){ x *= -1; } ------------ if( x > 0){ x *= -1; } で、できそうです。 もっとスマートな方法があれば教えて頂きたいです。 よろしくお願いします。
123 名前:デフォルトの名無しさん [2007/10/17(水) 19:43:33 ] >>120 ありがとうございます。 解決できました。
124 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:51:30 ] 符号をプラスにするなら x = x * x / x; とかでできるんでない?多分
125 名前:124 mailto:sage [2007/10/17(水) 19:52:50 ] やべ、何言ってんだ俺w 今の無しにしてorz
126 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:56:38 ] >>117 ソースうp!
127 名前:124 mailto:sage [2007/10/17(水) 19:58:37 ] 改めて…… >>122 x = -x;
128 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:59:27 ] >>119 数値計算の速度がシビアじゃないところなら >>122 よりも x=-x; x=abs(x); x=-abs(x); が分かりやすい (オレはね)
129 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:08:56 ] 高速さがシビアに要求されるなら、 むしろ乗算を使わない128のほうが速い気がする。
130 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:11:47 ] 誰か測れ
131 名前:デフォルトの名無しさん [2007/10/17(水) 20:18:07 ] #include <iostream> #include <time.h> #include <math.h> #define N 500000000 using namespace std; f0(){int x=10,n,c; c=clock();for(n=0;n<N;n++)x=-x;c=clock()-c; cout << x<<" "<<c<<endl;} f1(){int x=10,n,c; c=clock();for(n=0;n<N;n++)x=abs(x);c=clock()-c; cout << x<<" "<<c<<endl;} f2(){int x=10,n,c; c=clock();for(n=0;n<N;n++)if(x>0)x=-x; else x=-x;c=clock()-c; cout << x<<" "<<c<<endl;} main(){ f0();f1();f2();}