【初心者歓迎】C/C++室 Ver.38【環境依存OK】 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
07/06/03 22:33:55
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.37【環境依存OK】
スレリンク(tech板)l50
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)


2:デフォルトの名無しさん
07/06/03 22:35:41


3:デフォルトの名無しさん
07/06/03 22:57:43
3ならC++は廃れる。

4:デフォルトの名無しさん
07/06/03 22:59:14
殺す

5:デフォルトの名無しさん
07/06/03 23:00:47
           ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` ) < 通報しますた!!
          /,  /   \_______
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \       ((( )))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
       /  /~\ \     ( ´Д`) < しますた!!!
       /  /   >  )     (ぃ9  )  \_______
     / ノ    / /    /    ∧つ
    / /   .  / ./     /    \     (゚д゚)  シマスタ!!
    / ./     ( ヽ、     / /⌒> )     ゚(  )−
   (  _)      \__つ  (_)  \_つ     / >   (・∀・)シマスタ!! .マスタ!! .スタ!!

6:デフォルトの名無しさん
07/06/03 23:01:44
おいおい
ここはいつからネタスレになったんだ

7:2
07/06/03 23:08:10
             >―:::::::::::::::::::::::V::<
          /::::::::::::::::::::::::::::::::::::::::::::\
     ゝ---‐彡'´:::::::::/::;::::::::::::::::::::::::::::::::ヽ
       ̄//:::::::/::/l:::::l::|:::ヽ::::::::ヽ::::::ハ
    ー=ニ:ィ::/::l:/::/::::/:::::l:::\::ヽヽ::::l::::::::l
.        /::;l:/-イ:l、:::::::::::/l::/l:∧::::}::::|::::::、\
       l::/'l:::::::::::トl_ヽ:::::///zl左∨:::::l:::::::::::‐≧-
       l:{ ゝ::::::::{代fjヘ:{/´ 弋チ, }::::メテ:≦≠-
       `ゝ ヽ::l:::≧= }`    ̄ ノィ/´::l/
           j/ヽlヘ  丶       彳!:/  殺すなんて・・・
          ´  l´ ヽ、' ⌒  /ノィk1
               />‐ 彡 ´ ̄  〉
              {:.: ̄ ̄   .:.:.:.:.:└-、_
              _/>:.:.:.:.:..:.:_:.:-‐:.:.:. ´.:└┐
          __/.:./ ./:. :.:.:.: ̄:.:.:.-‐ .:. _ -‐'^`ア ヽ
.          /l/.:.  人:.    .:.:.:.:. _、-‐    /   ∧
         {/ .:  /  \___ -‐ ´             ∧
.         /:   '    |         l /      l|
        /: .: l              l |      l|
         l.: .:.:. |    , ゚         ヽ| l     〈

機動戦士ガンダム00
URLリンク(www.gundam00.net)

8:2
07/06/03 23:12:01
            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` ) < ころしますだ!!
          /,  /   \_______
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \       ((( )))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
       /  /~\ \     ( ´Д`) < 殺します!!!
       /  /   >  )     (ぃ9  )  \_______
     / ノ    / /    /    ∧つ
    / /   .  / ./     /    \     (゚д゚)  シマスタ!!
    / ./     ( ヽ、     / /⌒> )     ゚(  )−
   (  _)      \__つ  (_)  \_つ     / >   (・∀・)シマスタ!! .マスタ-ベーション!!

9:デフォルトの名無しさん
07/06/04 00:05:40
構造体の初期化で
={0}とmemsetによる初期化ってどう違うのでしょうか?
またどちらの方がいいですか?

10:デフォルトの名無しさん
07/06/04 00:11:34
>>9
前者の方が普遍的。
後者は間違いの元。
積極的に使う理由がないなら前者でOK。

11:デフォルトの名無しさん
07/06/04 00:14:09
動作はそんなに変わらないけど
={0} : 他のメンバが初期化されてない、って警告が出る場合がある。
memset : ビットパターンが0であると保証されているわけではない型
(ポインタとか)でぐだぐだ言われる場合もないわけでもない。それと、
ゼロクリア処理であって、初期化ではないので、挟もうと思えば処理を
挟むことができてしまう。

12:9
07/06/04 00:29:40
>>10-11
ありがとうございます。できるだけ前者を使う事にします。

13:デフォルトの名無しさん
07/06/04 00:53:18
                  / .:/::i:! ,:li ::::jl::. |:::::.   ::| !:| ヾ:::: |ヽ::iィ"/}ヽ\ ヾ}
               l ::/i:::l:| j:l|:::;ハ::. ト;:::::  j |l-‐|ヤl k'//リ }゙i 〉、} }
              j::/::i:::l::l i::|l:;-!十!::::: /  |!  l }リ  |lヾン j|,! ∧∨
               |/|::l:::l:::| j;lfl:::|   |:j }:::/    _,jzヶ=ュ!、{  レ' /ヽ〉〉
                 || |::i::::l:::i l::| l::| _,.z;リュj:/     ケ{! :::::: Y!〉ヽ、_,/ //、\
                ‖ |::l、:|:::ト、:!ヾa´::::ヾ`       ゙t._''''ゲ'゙ ! jN 〈〈  ヽ.ヽ
                |! !:トN:::l::l:トィf{!; :;;;;rう          ̄   j,.イ! トi、ヽ\ ) 〉
              | ∧!:l:ト:ト:ljヘ ` `=‐''´             ,小:i:. l |::、 )_)`'"
             /〃X! /人ーヘ        `_       /i.:.li:|::. l l::i
            / // .::::;イ' アー:ヽ、      ‘ー’   ,イ|::i :.i::ト、::| |::!
            /,イ// .::;ィ' j  j/| : :i::|in、_         / |:l::i.:.:i:| }::! |:|
           / / / j .::/l | / / ,! : :i:::li:j::|:「フi ‐ -  '′ |:|::i:.:.i:| j:;! !|
       〃  l / | :/ !l/ ,イ{,/_:_::l:::j⊥'-'"j     ・∵!|:j:::// //  |l

14:デフォルトの名無しさん
07/06/04 04:53:15
Borland C++ 5.5.1+BCC Developerを使っています。
あるクラスのメンバ関数を別ファイルにし#includeしているのですが

・型限定子 '***' がクラス名または名前空間名ではない
・宣言が正しく終了していない

というエラーが出ます。

このファイルをプロジェクトからはずすとコンパイルでき
問題なく実行できるのですが、なぜでしょうか。
また、クラス宣言内に関数を書いてもうまくいきます。

15:デフォルトの名無しさん
07/06/04 05:11:56
どうせ ***.cpp を #include してるんだろうが、
***.cpp もそれ単体でコンパイルされるからだ。

つーか、何で #include してるかが気になる。

16:デフォルトの名無しさん
07/06/04 09:23:11
system関数でunixのコマンドを実行する際に、結果が戻ってくる前に、次の行へ実行を移したいのですが、
どのようにすればよいのでしょうか?
コマンドラインでいうところの&をつけてバックグラウンドで実行するような形にしたいのです。

17:デフォルトの名無しさん
07/06/04 10:15:54
>>16
一般的にsystem()はシェルを経由してコマンドを呼び出すので、単に&をつければいい。
Ex.
system("sleep 86400&");

18:デフォルトの名無しさん
07/06/04 10:19:54
情報系学部の大学2年です。将来はプログラマ・システム関係に就きたいと思っています。
環境は自分のパソコンにCygwinを入れて使っています。
今まではアスキー出版の「C言語入門」という本で勉強してきて基本的なことは理解しています。
それでC++にはいつ頃から入ればいいでしょうか?まだ早いでしょうか?
またこれから何を勉強していったらいいかいまいち先がわかりません。
簡単なゲームを製作することが目標です。
ただプログラミングは楽しんでいるのでこれからも続けていきたいです。
大学の授業ではC言語のアルゴリズムを勉強中です。

19:デフォルトの名無しさん
07/06/04 10:30:28
いつでも

20:デフォルトの名無しさん
07/06/04 13:23:33
車のナンバーと色の情報を100台分入れるArrayを作るために
struct car {int number;
string color;
};
car cars[100];
のように宣言したのですが。

これを並び替えるための関数を作り、関数の宣言したいのですが。
void function(car cars[])
のような宣言の仕方でいいのでしょうか?

質問がわかりにくくて、申し訳ないです。

21:デフォルトの名無しさん
07/06/04 13:25:30
void function(struct car*)とか
void function(struct car[])で良いんじゃないの。

22:デフォルトの名無しさん
07/06/04 13:26:46
>>20
AoSよりSoAを使え。


23:デフォルトの名無しさん
07/06/04 13:26:55
それでいいと思うけど、高々並び替えるだけの目的なら関数を自作する必要はないと思うよ。
その構造体の比較関数をオーバーロードして、std::sort()呼ぶだけでいいんだから。

24:デフォルトの名無しさん
07/06/04 13:29:38
>>22
パフォーマンスを気にするようなレベルじゃないならAoSでいいんでね?
どうせ100台分だってことだし。

25:20
07/06/04 13:45:11
回答ありがとうございました、助かりました。
また質問で悪いんですけども、下のように2種類のファイルを呼んだんですけども
二個目のexample2の部分でエラーがでてしまいます。
何が悪いんでしょうか?

#include<fstream>

int main(){
ifstream fin("sample1.txt"); /* 入力ファイルストリーム 宣言 */
fin >> x;
fin >> y; /* 読み込み */
cout << x << ' ' << y << endl; /* 表示 */
fin.close(); /* 読み込み終了 */

ifstream fin("sample2.txt"); /* 入力ファイルストリーム 宣言 */
fin >> a;
fin >> b; /* 読み込み */
cout << x << ' ' << y << endl; /* 表示 */
fin.close(); /* 読み込み終了 */

return 0;
}


26:デフォルトの名無しさん
07/06/04 13:48:34
コンパイルエラー出まクリスティ

27:デフォルトの名無しさん
07/06/04 13:53:26
同一のスコープ内で 同じシンボル名の変数(fin な)を2回宣言してる

28:20
07/06/04 13:54:52
二種類のファイルを呼ぶには、どうしたらいいのでしょうか・・・

29:デフォルトの名無しさん
07/06/04 13:57:17
違う名前にするかopen使うかすればいいんじゃねーの
入門書読めばわかる

30:デフォルトの名無しさん
07/06/04 14:27:31
クラスでnew,delete演算子をオーバーロードしたいんですが、
staticじゃないといけないんでしょうか?
エラーが出て困ってます。


31:デフォルトの名無しさん
07/06/04 14:30:56
そうですか。

32:デフォルトの名無しさん
07/06/04 14:55:06
そうですね。

33:デフォルトの名無しさん
07/06/04 15:17:32
そうですく。
そうですれ。

34:デフォルトの名無しさん
07/06/04 15:28:45
>>31-33金くれ

35:デフォルトの名無しさん
07/06/04 18:32:08
>>30
staticを付けなくてもstatic扱いされる。だって実体がまだ/もう存在していないから。
これに限らず静的メンバは、ただそのクラスに関連があるからクラス宣言の中に入っているだけと思えばいい。

36:デフォルトの名無しさん
07/06/05 00:51:23
>>9
遅レスなんだが、みんな{0}初期化なの?

個人的にCでtypedef enumを使うんだが、こいつが一番始めにいると
型違いエラー(警告だっけ?)になるからずっとmemsetを使うようになったんだが。
わざわざ、メンバの順番意識するなんてバカらしいし・・・

37:デフォルトの名無しさん
07/06/05 00:55:30
浮動小数点数の0とヌルポインタのビットパターンが
単に0を並べただけと規定されているわけではないから

もちろん自分の環境でそうなっているのなら、
移植性無視してやるという選択肢はある

38:デフォルトの名無しさん
07/06/05 00:56:43
そういう構造体にはコンストラクタを作ってしまうので無問題。

39:デフォルトの名無しさん
07/06/05 01:03:05
>>37
>>38
いや、C++だったらコンストラクタでポチポチ初期化するよ。
浮動小数点は使わない(使えない)環境なんで問題ないんだが、
NULLポインタはどうしようもないな。今の環境は0だから問題ないんだけど。




40:デフォルトの名無しさん
07/06/05 01:32:09
コンストラクタでよいのなら、
そのような構造体用の初期化関数をつくってポチポチ初期化してみては。
あるいは、初期化専用のglobal変数を確保しておいて、それを代入することで
初期化するとか。

後者はmutexを初期化するときにPTHREAD_MUTEX_INITIALIZERを使う
のと同様の使い勝手になると思いますので、そういう感じの
名前をつけておけば紛らわしさも無いかと。

41:デフォルトの名無しさん
07/06/05 01:46:07
>あるいは、初期化専用のglobal変数を確保しておいて、それを代入することで
初期化するとか。
一時期はそういう風に初期化してた。
const XXX_STR INIT_TABLE = {0};  // global

ソース内
XXX_STR strValue;
strValue = INIT_TABLE

で、構造体のメンバの頭にtypedef enumが来たときにVCでコンパイルエラー。
確かにそうだよな・・・って思って、全部memsetにしたんだ。
組込みなもんで、C→C++になんて早々変わらないんだ。
しばらくはこのままmemsetでやっていこうと思う。


42:デフォルトの名無しさん
07/06/05 01:49:20
>>41
global変数なら
= { 0 }
とかは、べつにいらないのではないでしょうか。

43:デフォルトの名無しさん
07/06/05 01:50:02
つうかenumは明示的に指定して初期化すべきだろ
memsetて

44:デフォルトの名無しさん
07/06/05 01:59:21
>>42
global変数ってのは間違ってたかな?
初期化用のconstデータを作るって感じで

>>43
構造体内のメンバに変更があったときに、面倒なのと
チーム内で変数の0=異常値として扱ってるのでまぁいいかなと・・・
いや、わかってるんだけどね・・・昔からの流れは中々変えさせてもらえなくて

45:デフォルトの名無しさん
07/06/05 02:08:21
>>44
global変数の場合ですと、ゼロで初期化したいだけなら、規格に
準拠している処理系なら自動的にそうなるので、= { 0 } は不要です。

enumのようなものを含む型に初期値を正しく与えたい場合には、例えば
= { none, 0, ... }
とでも書けばよいではありませんか。
global変数による初期化を利用するのなら、こう書くのは一箇所だけ、
型の定義を変えても変更はそこだけで済みます。


46:デフォルトの名無しさん
07/06/05 02:29:01
>>45
いや、組込みなんで、処理系なんてもんがいてくれればそれでいいんだけど
RAM配置からコールドスタート処理、レジスタ設定からその他初期化処理まで
やるのは自分なわけで・・・って関係ないか。
ま、そんなわけで、自動的に初期化なんてしてはくれないわけですよ。

>enumのようなものを含む型に・・・
{0}によって、後ろの省略されたメンバを0で初期化するって話とずれてません?
全部、初期化子書くなら初期化用の関数でも同じですよね?

って、そろそろすれ違いなんでやめますか。
板汚し、失礼しました。

47:デフォルトの名無しさん
07/06/05 02:42:48
>46
組み込みのイニシャルルーチンは無いの?
そこでRAMの初期化をするはずなんだが

48:デフォルトの名無しさん
07/06/05 02:48:22
>>47
領域クリアしてるよ
いくつかの領域にわけて、初期化内容に応じてどこまで初期化するか決定してる。
で、そこで初期化されると困るけどメインルーチンに戻ってきたときには
初期化しておいてほしいやつとかを、ぽちぽち初期化してる。

いや、そんな変数ばっかの環境が悪いとかは言わないで・・・

49:デフォルトの名無しさん
07/06/05 03:04:00
>48
なんでRAM全領域を初期化しないの?

50:49
07/06/05 03:06:39
ここ初心者対象スレだったね。
組み込みの話題は別にします。

51:デフォルトの名無しさん
07/06/05 03:19:39
π計算はそのパソコンの性能がわかるって聞いたんだけど質問させて。
Q1,πって高校数学でも式作れるよね?
  それをプログラムにすればいいんじゃない?とか思ったんだけど・・
  でもサイト調べたら難しい公式とか使ってるけどどうして?
Q2,円周率のプログラムってなんで桁に限界あるの?一応無限までだせそうだけど
  パソコンつけっぱなしでどんどんでてくるんじゃないのかなっておもったんだけど
  どこどこの大学が何桁まで出した!とかあってあれ?って思った
Q3,高校数学レベルでいいから簡単なπ求めるプログラムを教えて。
  使用してるのはC言語のWINDOWS

学校で聞いてきになったんだけど、言葉足らずだったらごめん

52:デフォルトの名無しさん
07/06/05 03:21:23
>>51
URLリンク(www1.coralnet.or.jp)

53:デフォルトの名無しさん
07/06/05 03:25:23
>>51
 ちょっと行ってみる。ありがとう。

54:デフォルトの名無しさん
07/06/05 03:25:41
クロスコンパイラが.bssを分けてくれない?
.bssは分けてくれるけどそれをゼロクリアするスタートアップコードはついて
無いし、自分でも書いてない?(セグメント別れてるんなら書くの簡単だと思うけど)

組込みって奥が深くてわかんないや

55:51
07/06/05 03:35:07
>>52
 だった・・

今見てきたけど、このくらいの質問は論外なんだなって思った。
学校で聞いてもそれは今関係ない、いつかやるからって言われるし・・
まぁいつかわかるとおもうけど

56:デフォルトの名無しさん
07/06/05 03:36:41
>>55
「マチンの公式 多倍長演算」でぐぐってみろ。

57:51
07/06/05 03:45:42
>>56
夜中に申し訳ない!

58:デフォルトの名無しさん
07/06/05 03:50:05
>>41
Cなら enum を 0 で初期化してもエラーにはならないはず。
C++ ならエラーになるけど、その場合はコンストラクタが使えるし、
= {} も使える。

C/C++ のどっちかが決まってるなら問題にならないはず。
CのソースをC++でもコンパイルできるようにしたいときだけ、
面倒な話になる。

59:デフォルトの名無しさん
07/06/05 04:09:56
>54
おそらく初期化ルーチンはライブラリ化されていると思うよ。
どこのマイコンコアだかわからんが、メーカー純正のコンパイラ?

組み込みのCの場合でもスタック以外のRAM領域はクリア(つまり0)されているのが基本


60:デフォルトの名無しさん
07/06/05 04:30:00
連結リストを利用したプログラムを作ったんですがうまくいきません
ソース URLリンク(kansai2channeler.hp.infoseek.co.jp)
コンパイラ BCC5.5

デバッガを走らせて見たところ、39行目のscanf("%d",&ch);の実行後にstartPtrの値がNULLになったことが原因みたいなんですが、
なぜここでstartPtrの値が変わるかわかりません
BCC5.5のバグかなんかでしょうか?

61:デフォルトの名無しさん
07/06/05 04:38:02
>>60
バグってるのはすぐ処理系のせいにする君の頭だ
char型の変数に%dを突っ込むな
%dはint型のポインタを要求する

62:デフォルトの名無しさん
07/06/05 04:43:00
まぁ初心者のうちはありがちなことだな>処理系のバグを疑う

63:デフォルトの名無しさん
07/06/05 04:44:09
ほんとだorz
ありがとうございます
なんか、こういうミスで詰まること多いんですよね

64:デフォルトの名無しさん
07/06/05 04:53:05
>>60
startPtr + 9 は一体どこをポイントしているとお思いか?
自分の無理解無努力無責任のつけをコンパイラに転嫁させませぬよう。

65:デフォルトの名無しさん
07/06/05 04:54:23
これって、char型の変数とか言ってる>61も大間違いなのに、それで勝手に納得している>63ってなんなの?

66:デフォルトの名無しさん
07/06/05 07:46:12
>>64-65
startPtr + 9で問題ないだろ

67:デフォルトの名無しさん
07/06/05 08:23:53
ってか、Cのソースなのに、for文の中で変数宣言しちゃうのはどうかと。

68:デフォルトの名無しさん
07/06/05 08:30:08
C99だと思えば、ってBCCはC99非対応だけどね

69:デフォルトの名無しさん
07/06/05 13:23:44
>>65
???
chはchar型でそのポインタにintサイズ書き込んだら近くのメモリ壊すのは当たり前だと思うが
まぁ言葉足らずとかのレベルで間違いとも言い切れないな

あとどうでもいいことだが
(startPtr+9)->
って書くよりは
startPtr[9].
のほうがスマートでわかりやすい気がする

さらに言わせてもらえば
startPtrは他の変数にコピーしといて
for(int c=0;c<10;c++;startPtr++){
printf("%d個目の文字を入力してください:",c+1);
scanf("%d",&(startPtr->data));
startPtr->nextPtr=startPtr+1; // ++startPtrにして上のstartPtr++無くしてもいいんだが
}
startPtr->nextPtr=NULL;
でとっといた startPtr のコピーを戻してやればスマートじゃないかと


70:デフォルトの名無しさん
07/06/05 13:27:54
>>69
for(int c=0;c<10;c++;startPtr++){
これは
for(int c=0;c<10;c++,startPtr++){
の間違い


71:デフォルトの名無しさん
07/06/05 13:36:12
>>69
for(int c=0;c<10;c++,startPtr++){
これは
for(int c=0;c<10;c++;startPtr++){
の間違い探し

72:デフォルトの名無しさん
07/06/05 13:40:54
てんで話にならない。

73:デフォルトの名無しさん
07/06/05 13:43:07
>>72
誰がうまいことを言えと(ry

74:デフォルトの名無しさん
07/06/05 13:43:49
いやー、わからんかったw
画面上でも1ドットだぜ・・・

75:デフォルトの名無しさん
07/06/05 21:57:56
大学2年です。現在、C言語の勉強をしています。
制御構造やポインタなど基本的なことは理解できました。
これから何をしていけばいいでしょうか?将来はプログラマ志望です。
授業ではアルゴリズムを勉強しています。
勉強しておいたほうがいい言語や順序みたいなものを提示してくださると嬉しいです。

76:デフォルトの名無しさん
07/06/05 22:00:29
フローチャートを勉強してるの?

77:デフォルトの名無しさん
07/06/05 22:00:50
>>75
擬似でいいからアセンブラ

78:デフォルトの名無しさん
07/06/05 22:04:44
分かりました、専ブラに挑戦してみます。

79:デフォルトの名無しさん
07/06/05 22:08:57
プログラマでも入る分野で結構違うと個人的には思う。
>>77のアセンブラもいいと思うし、割り込みとかマルチスレッドなんかもいいんじゃね?
可読性とか汎用性とかデザインパターン、テストとかデバッグ技術もあってもいいかも?

アルゴリズムって実際に役に立つかな?
いろんなプログラムを山ほどこなしてるほうがいい気がする。

80:デフォルトの名無しさん
07/06/05 22:15:30
>>79
>>75の大学がどこかは知らないが、大抵大学の授業で教えるアルゴリズムっていうと
基礎の基礎で結構重要だろw

81:デフォルトの名無しさん
07/06/05 22:18:43
学生時代を思い返してみると、オートマトンとかやってたような・・・
俺、役に立ってねぇ・・・
もっと基礎的な内容かな?ソートとか?
ソートなんて、バブルソートとクイックソート以外は必要なときに毎度調べてるな。

82:デフォルトの名無しさん
07/06/05 22:19:09
>>75
宿題スレで宿題解くのオススメ

83:デフォルトの名無しさん
07/06/05 22:25:36
アルゴリズムでオートマトンはやらなかったなぁ
ソートとか探索とかリストとかやったかなぁ・・・?
仕事でそのまま使えるってことは少ないだろうけど、基礎を覚えておいて損は無い

84:デフォルトの名無しさん
07/06/05 22:29:01
問題「ソートするプログラムを書け」
俺「qsort(...); はい終わり^^」

85:デフォルトの名無しさん
07/06/05 22:30:50
まあ、一口にプログラマといっても
「標準ライブラリに丸投げでOK」から「自力でアルゴリズムをひねり出すことを要求される」まで幅広いわけで

86:デフォルトの名無しさん
07/06/05 22:32:25
つ[安定ソートするプログラムを書け]

87:デフォルトの名無しさん
07/06/05 22:32:29
あぁ、言われて見れば重要だなぁと思ってきたw
リスト、スタック、キューとかのデータ構造とかか。
素因数分解とかは、暗号化とかの分野いかなきゃ使う機会はなさそうだな


88:75
07/06/05 22:50:14
有り難うございます。
授業のアルゴリズムではソートやリスト構造、木構造などをやっています。
アセンブラですか。何か必要な環境等は必要でしょうか?
またC++も興味があるのですが勉強可能でしょうか?環境はCygwinです。

89:デフォルトの名無しさん
07/06/05 22:55:43
>>88
やる気があれば何でも可能。
>>82のアドバイスをうけて、慣れてきたら同じ課題をCっぽい解き方、
C++っぽい解き方の両方やってみたりしても良いかも。



90:デフォルトの名無しさん
07/06/05 22:57:04
>>86
つ[std::stable_sort()]

91:デフォルトの名無しさん
07/06/05 23:08:45
>>88
紙とペンさえあれば勉強できる

>>90
C言語で解け

92:デフォルトの名無しさん
07/06/05 23:18:29
紙と鉛筆で間に合うのは頭のいい人だけ
常人は適当にmasmなりインラインアセンブラ等ケースで身に着けましょう

93:デフォルトの名無しさん
07/06/05 23:19:30
やべぇ俺頭いいのか

94:デフォルトの名無しさん
07/06/05 23:26:17
アセンブラの勉強するときはシミュレータ上で動かしたいよね

VirtualPC とか VmwarePlayer とか Bochs とか qemu とか
いろいろあるけど、どれがいいんだろう?

95:75
07/06/05 23:36:48
なるべく無料で環境は揃えたいところです;
あと、どうもMicrosoft製はソフトが重いイメージがあるので微妙です。
なのでVisual Studioはどうも慣れません。
大学の先生もなるべくUNIX上でコンパイル・実行したほうがいいと言っています。

96:デフォルトの名無しさん
07/06/05 23:39:25
じゃあnasmとかどうでしょ?

97:デフォルトの名無しさん
07/06/05 23:40:24
>>95
はいはいかわいい子犬ちゃん

98:デフォルトの名無しさん
07/06/05 23:47:21
VisualStudioの環境が重ければソースを外部で編集するようにして
構成ツールをmake代わりに使ったり、clだけ利用すればいい話
てかいくらなんでもUNIX推奨は冗談だろう…

99:デフォルトの名無しさん
07/06/05 23:48:45
>>98
俺はそうしてる。つっても芽衣の開発環境じゃないんだが。
普段がテキストエディタなもんで、そっちのほうがやりやすい。

100:デフォルトの名無しさん
07/06/05 23:50:21
VisualSutudioの環境が重ければPC買い換えればいい

・・・もしかしてだいぶMSにお布施してるかな、漏れ。

101:デフォルトの名無しさん
07/06/05 23:55:22
>>95
かわいこちゃん・・・
人の話聞いて知ったかするより、自分でWinとUnix系の違いを
自分で調べて知りなさい。

102:デフォルトの名無しさん
07/06/06 00:43:54
>>98
最近のゲーム機やパチンコ台の液晶なんかの場合はUNIX系環境が主流だな
そっち方面ならcygwinやlinuxでなれておくと楽だぞ
あのへんなら開発環境に金かからんし

Winだけのプログラム勉強したいならともかく、
広い意味でプログラムの勉強したいならVisualStudioはオススメしない


103:デフォルトの名無しさん
07/06/06 00:46:43
プログラムの勉強なら環境はなんだっていいだろ

104:デフォルトの名無しさん
07/06/06 00:51:27
いいだろ

105:デフォルトの名無しさん
07/06/06 00:53:21
マジかよ
もうvsのインターフェースに慣れちゃったぜ…orz

106:デフォルトの名無しさん
07/06/06 01:23:45
>>103
MSの環境は独自の俺様仕様が多過ぎる、それに値段も高い
SDKのバージョン変わるとコンパイル通らなくなったりするし
小規模なプログラムだといいけど大規模になるとあの互換性のなさには泣けてくるぞ
開発以外の余計な事に時間取られすぎるんだよ

いまだに一部ゲームで古いDirectXとか使ってるのはそのせいだろうし

仕事の関係で多数の環境、日立のshcとかgcc、ボーランドCとかLSI-C、CodeWarrior その他いろいろ
使ってきたけどあそこまでかけ離れてるのはMS環境だけだ


107:デフォルトの名無しさん
07/06/06 01:35:06
それでもMSを勧める人がいるのはやっぱ「MSだから」だと思うよ?
SDKとかMFCをC++の勉強に使うなんて、とても勧められないし
コンパイラのバグもちょくちょくあったりする。
設定に困ったときにネットで探せば色々見つかるってのは大きいと思う。
コンパイラのバグなんて、MS環境でもなきゃ中々しにくくね?
まぁ、bccやgccならそれなりにサイトも多いけどやっぱMSに比べると・・・

やっぱ、作ったもんが動くからプログラミングって楽しいんじゃね?
とはいえ値段や仕様変更の多さには同感だw

108:デフォルトの名無しさん
07/06/06 02:56:46
値段は(学割だけだけど)凄まじいダンピング始めたからなぁ
Visual C++ は単品で持ってたけど、VSのあの安さなら買っちゃうって

109:デフォルトの名無しさん
07/06/06 04:25:45
VC++.net2003でmain.cpp, Sphere.hとSphere.cppとファイルを分割しました
Sphere.hにint Collide( Sphere, Sphere )という関数を定義して, Sphere.cppで実装しました
このint Collide( Sphere, Sphere )をinline関数にしたいのですが、上手く行きません
.h, .cppのどちらにもinlineを書く, どちらか一方に書く場合と試しましたが上手く行きません
どちらにもつけない場合は上手く行きます
どうすればinline関数にできるでしょうか?無理なのでしょうか?
よろしくお願いします


110:デフォルトの名無しさん
07/06/06 04:26:58
inline関数は内部リンケージを持つからヘッダファイルには書くな。

111:109
07/06/06 04:36:03
内部リンケージで調べたら分かりました
ありがとうございました

112:デフォルトの名無しさん
07/06/06 04:55:09
内部リンケージって言葉を聞いたばっかりで
理解せずに使ってるだけな馬鹿は無視しろ

113:デフォルトの名無しさん
07/06/06 04:56:48
>>110
inline 関数はヘッダに書くもんだろw

114:デフォルトの名無しさん
07/06/06 06:07:24
正しくはinline関数の「宣言だけ」ならヘッダには書くな、書くなら「定義」まで
書け、って事だな

115:デフォルトの名無しさん
07/06/06 06:13:31
具体例としてはジャネリックな独自テンプレートライブラリを作る時とかか
なんか極めて限られるような状況ですな

116:デフォルトの名無しさん
07/06/06 07:31:36
>>110
inline 指定とリンケージは関係ないよ。

117:デフォルトの名無しさん
07/06/06 07:32:28
>>116
でもヘッダファイルに宣言だけしたらリンカエラーでるじゃん?

118:デフォルトの名無しさん
07/06/06 07:35:02
なんという面倒くさい仕様…
これは暗に「よほどのことが無い限り使うな」と言っているので同じではないか

119:デフォルトの名無しさん
07/06/06 07:36:50
>>117
定義が無いからだろ。リンケージも inline も関係ない。

120:デフォルトの名無しさん
07/06/06 07:39:09
>>118
その認識で問題ない。 inline で速度が変わる状況なんてかなり減ってきてるし、
これからも減るだろうし。

121:デフォルトの名無しさん
07/06/06 07:40:49
もうinline化なんかコンパイラに任せろよ
適当にやってくれるだろ

122:デフォルトの名無しさん
07/06/06 07:45:38
>>118
ついでに言えば、最早コンパイラはオブジェクト間最適化を行なう時代。
inline指定なんぞせんでもコンパイラの方で勝手に(別ファイルの関数さえ)インライン展開してくれるよ。

123:デフォルトの名無しさん
07/06/06 07:46:05
>>119
静的リンケージだから定義がないんじゃないのか?

124:デフォルトの名無しさん
07/06/06 07:47:01
内部、だ。

125:デフォルトの名無しさん
07/06/06 07:51:14
>>119
それはおかしい。extern宣言しても他のファイルで定義してある
inline関数は使えんぞ。

126:デフォルトの名無しさん
07/06/06 08:03:10
>>125
なるほど。 inline は関係あるな。

7.1.2p4 より
"An inline function shall be defined in every translation unit in which it is used and
shall have exactly the same definition in every case."

inline 関数は使われるソースごとに定義が必要になるってことらしい。
エラーになるのはこのルールに違反するからであって、リンケージは
関係ない。

127:デフォルトの名無しさん
07/06/06 08:05:29
>>126
お前最初にinline関係ないって言ったじゃん。いい加減な事を言うな。

128:デフォルトの名無しさん
07/06/06 08:19:03
ごめんよ。 >119 を書いた時点では分割コンパイルを意識してなかったんだ。

129:デフォルトの名無しさん
07/06/06 08:20:18
( ゚д゚)ポカーン

130:デフォルトの名無しさん
07/06/06 08:21:37
分割コンパイルを使わないとC++の意味が・・・・・

131:デフォルトの名無しさん
07/06/06 19:15:39
getchar(c);

c - '0' /*cの中が文字か数字かをしらべる*/


c - '0' の意味がわかりません
これは何をやってるんですか?

132:デフォルトの名無しさん
07/06/06 19:18:36
c - '0' は普通数字を 0 〜 9 の数値に変換するときに使うけど

133:デフォルトの名無しさん
07/06/06 19:43:22
ざっと C++ のドラフトを見ても、
仮想関数テーブルに関する記述がないんですが、
仮想関数テーブルは C++ の仕様上には
全く存在しない概念なんでしょうか?

134:デフォルトの名無しさん
07/06/06 19:50:11
ABIとか、Implementation Specificな話は規格には載らないんじゃないの

135:デフォルトの名無しさん
07/06/06 19:53:29
>>131
'0'ってのは数値的には0x30、そこから順に0x39('9')まで並んでる
だから文字として入力したものを数値に変換するときはそういうこともするけど・・・

キャラクターコードの意味わかってないなら
isdigitとか使っとけ
変換するなら
atoiとかstrtol使えばいい

それコメントが間違ってるよw

関数使わずに調べるなら
if((c >= '0') && (c <= '9'))
でいいだろうし、
変換したいならその後に c-'0' したほうがいいと思う

c-'0' じゃ数字かどうか調べてないしな・・・


136:デフォルトの名無しさん
07/06/06 19:58:24
直接プログラミングではない質問なのですが、
ネットワーク外部にインストールしたRuby等の.exeを、ファイル共有した状態で
例えば
\\マシン名\\Ruby\bin\ruby.exe
にあるruby.exeを実行したくて
Path環境変数に"\\マシン名\\Ruby\bin"を追加したのですが、うまくいきません。

そもそも無理なのか、または指定のやり方が間違っているのでしょうか?

137:デフォルトの名無しさん
07/06/06 20:02:41
歯医者に風邪治してくれと言ってるようなもの
スレ違い

138:デフォルトの名無しさん
07/06/06 20:14:38
下手な例えだな

139:デフォルトの名無しさん
07/06/06 20:43:07
>>134
つまり、仮想関数テーブルは Implementation Specific な話ということなんですね。
了解しました。

140:1/2
07/06/06 20:51:48
#include <stdio.h>
int main(void)
{
int a, b, n;
puts("整数を2つ入力してください");
scanf("%d %d", &a, &b);
puts("演算子を入力してください");
n = getchar();
switch(n)
{
case '+':
printf("%d\n", a+b);
break;
case '-':
printf("%d\n", a-b);
break;
case '*':
printf("%d\n", a*b);
break;
case '/':
printf("%d\n", a/b);
break;
case '%':
printf("%d\n", a%b);
break;
}
return 0;
}

141:2/2
07/06/06 20:52:58
#include <stdio.h>
int main(void)
{
int a, b, n;
puts("整数を2つ入力してください");
scanf("%d %d", &a, &b);
puts("演算子を入力してください");
n = getchar();
switch(n)
{
case '+':
printf("%d\n", a+b);
break;
case '-':
printf("%d\n", a-b);
break;
case '*':
printf("%d\n", a*b);
break;
case '/':
printf("%d\n", a/b);
break;
case '%':
printf("%d\n", a%b);
break;
}
return 0;
}

142:2/2
07/06/06 20:53:38
上記のプログラムを作ったのですがコンパイルして実行すると
「演算子を入力してください」
でプログラムが終了してしまいます。
何故でしょうか?
環境はcygwinです。

143:デフォルトの名無しさん
07/06/06 20:58:13
>>142
getchar() で改行文字を読み込んでいるから

144:142
07/06/06 21:09:30
>>143
"改行文字を読み込んでいる"、とはどういうことでしょうか?

145:デフォルトの名無しさん
07/06/06 21:22:48
scanf で数値の後にいれた改行が stdin のバッファに残っている
getchar でバッファに残った改行文字が取り出される

とりあえず

scanf("%d %d", &a, &b);

scanf("%d %d%*[\n]", &a, &b);

または

scanf("%d %d", &a, &b);

scanf("%d %d", &a, &b);
while(getchar()!='\n');

としてみては?

146:142
07/06/06 21:29:59
>>145
無事解決しました。有り難うございます。
直後の改行が残ってたんですね;
あらかじめ、a,bに値を代入してscanfを削除したらちゃんと実行できた訳ですね。

147:デフォルトの名無しさん
07/06/06 23:46:17
Google Booksすげーな。言語の本無料でみれんじゃん

148:デフォルトの名無しさん
07/06/06 23:57:06
>>147
それって、前にTVでやっていた著作権切れの本を公開する奴?

149:デフォルトの名無しさん
07/06/07 06:26:40
NULLが0でない環境が存在するのと同様に、
0がぬるぽじゃない環境ってのもあるんでしょうか?

150:デフォルトの名無しさん
07/06/07 06:28:41
0がぬるぽでない環境が存在するのと同様に、
NULLが0じゃない環境ってのもあるんでしょうか?

151:デフォルトの名無しさん
07/06/07 06:49:24
トートロってんじゃねぇよって事ですか
よく考えると自分も質問の意図を把握できてないのに気づいたので取り下げます

152:デフォルトの名無しさん
07/06/07 09:12:19
>>149
0 こそが真のヌルポインタだよ。
ただ、これだけだと整数型とか小数型の値としてもとれるから、
NULL ってマクロを使ってそれを回避できるようにもしてるだけ。

153:デフォルトの名無しさん
07/06/07 09:53:37
>>152
そんな隙だらけの説明しかできないんならヌルポインタについて語るのはやめとけ。
↓これでいいだろ。
URLリンク(www.kouno.jp)

154:デフォルトの名無しさん
07/06/07 09:57:54
自分の読解力の無さを人の文章力のせいにするな

155:デフォルトの名無しさん
07/06/07 10:10:02
確かに隙が多かったな。

>ただ、これだけだと整数型とか小数型の値としてもとれるから、

これは、

#ただ、これだけだと「プログラムを読む人間」 が、この 0 が
#数値の 0 か、ヌルポインタの 0 かを、そこからだけでは読み取れないので、

という風な意味。

156:デフォルトの名無しさん
07/06/07 10:13:43
自分の文章力の無さを人の読解力のせいにするな

157:デフォルトの名無しさん
07/06/07 10:18:00
コピペうざす

158:デフォルトの名無しさん
07/06/07 10:25:38
自分のうざさを人のうざさのせいにするな

159:デフォルトの名無しさん
07/06/07 10:33:51
彼は分裂症で、彼の否定する自分自身とは彼自身では違う人格なのだから良いんだよ。

160:デフォルトの名無しさん
07/06/07 10:54:04
何もかもみんなお前のせいだ

161:デフォルトの名無しさん
07/06/07 14:32:34
for(;;)
{
struct st* a;
get(&a); /* callocで構造体配列作成しaに割り当て */
free(a);
}
これをコンパイルすると、syntax error: missing';' before 'type'
とでます。アドバイスを頂けないでしょうか。お願いします。

162:デフォルトの名無しさん
07/06/07 14:36:43
申し訳ありません。161の件は宣言の前にif-break;を入れていたのが原因
のようです。しかし、freeのときにエラーが出るのがわからなく
その件について助言お願い致します。

163:デフォルトの名無しさん
07/06/07 14:42:07
>>162
その原因の行も書いてよ。

自分がコンパイラになったつもりでたどればわかる

164:デフォルトの名無しさん
07/06/07 14:47:38
aをNULLで初期化したらエラー消えるはず

165:デフォルトの名無しさん
07/06/07 14:49:08
は関係ありませんねすいません

166:デフォルトの名無しさん
07/06/07 15:18:12
161です。レスありがとうございました。自己解決しました。
if(FALSE)break;
struct st* a;
get(&a);
free(a);
だとコンパイルできなくて
struct st* a;
if(FALSE)break;
get(&a);
free(a);
だと実行時エラー。
struct st* a = NULL;
if(FALSE)break;
get(&a);
free(a);
で解決しました。C言語に慣れておらずいまいち理解できないので
すごく変な勘違いしてそうですね…。

167:デフォルトの名無しさん
07/06/07 15:27:24
変数の宣言がブロックの先頭じゃなかった、という落ちか・・・
実行時エラーは何か勘違いしてる

168:デフォルトの名無しさん
07/06/07 15:32:37
おそらく、get() の先のcallocで取ったポインタを * つけないで代入してるんだろうな

169:デフォルトの名無しさん
07/06/07 15:32:46
実行時エラーというか実行時警告というか
あれは未初期化ポインタに対するアクセスのエラーだから
リリースビルドにすれば実行時に落ちることは無い
しかしその前にコンパイラの方で未初期化に対するどうたらこうたらっていう
警告が出るはずなんだが…

170:デフォルトの名無しさん
07/06/07 15:34:10
>>169
get で &つけて呼び出してるから、警告は出ないんじゃないかな。
その関数で代入失敗してるっぽい。

171:デフォルトの名無しさん
07/06/07 15:38:09
そうかごめん
試しにそうしたら確かに通っちゃったよ…

172:デフォルトの名無しさん
07/06/07 15:41:04
コンパイルの段階で出てくるのが コンパイルエラー
(リンクの段階で出てくるのが リンクエラー)
出来上がった実行ファイルを実行して出てくるのが 実行時エラー

m(c)alloc で得られたポインタではない非NULL 値を realloc しようとしたんじゃねーかな?

173:デフォルトの名無しさん
07/06/07 15:44:43
って calloc と書いてあったな…
get(struct st**) の実装晒したほうが早いぞ

174:デフォルトの名無しさん
07/06/07 15:52:12
getの実装は既存のライブラリです。でも一応、callocの部分を
確認したところキャストはされていませんでした。
ブロックの先頭・値初期化の不備は、お恥ずかしいミスです。
ところで、C++てエラーメッセージがわかりにくくないですか?
関数や引数のクイックインフォも出なくて、難しすぎて泣けてきます。

175:デフォルトの名無しさん
07/06/07 15:56:37
いや、これそのままなら初期化いらないはずなんだって。
getの仕様によるけどな。

176:デフォルトの名無しさん
07/06/07 15:59:17
あ、>>168はキャストのことじゃなくて、参照を考慮にいれてないって
ことでしょうか?でも多分、get()には問題はないはずです。
たった4行のコードでここまで悩める俺みたいなバカは
プログラマに向いてないんでしょうねorz

177:デフォルトの名無しさん
07/06/07 16:08:38
>>176
だったら get(arg) の仕様は?

第一引数 arg の内容を書き換えるだけ ならば、
 NULL 初期化しなくても、実行時エラーは出ないつくりになる(はず)。

第一引数 arg の内容を確認してから書き換える ならば、
 NULL 初期化が必須になるだろう。

この違いは get() を作った奴が指示すべきで、それを利用する側は、
その指示に従うしかない。 (で、その指示がない場合は作った奴を呪う)

178:デフォルトの名無しさん
07/06/07 18:47:58
コマンドプロンプトで色々なコマンドが用意されていると思うのですが、
それをC言語で使用するにはどうすればいいのでしょうか?
具体的に言いますと、とりあえずexeファイルにa.txtをD&Dしたらそのディレクトリに
copy_a.txtというファイルを作成したりしたいです。コマンドプロンプトでいうとcp a.txt copy_a.txtですね。
まぁやりたいのはcpコマンドではなくて、javacコマンドとjavaコマンドなのですが・・・。

179:デフォルトの名無しさん
07/06/07 18:51:14
system関数

180:178
07/06/07 18:51:42
まぁ、要はJAVAのコンパイルが面倒なのでドラッグするだけで出来るソフトをCで作りたいって話なんです。

181:178
07/06/07 18:54:29
>>179
ありがとうございます。
ちょっとやってみます。

182:デフォルトの名無しさん
07/06/07 19:19:13
strcmp(buf, '\0');
でエラーが出るのですが、何か書式を間違ってるでしょうか?
文字列を最後まで1文字ずつ取得して、文字数を数えるプログラムを作ろうとしています。
最後取得したら\0がbufに入ると思うのですが、上の文でエラーが・・・

183:デフォルトの名無しさん
07/06/07 19:23:49
>>182
URLリンク(www.linux.or.jp)
引数の型が違う。(というかたぶんstrcmp()が何をする関数なのか勘違いしている)

184:デフォルトの名無しさん
07/06/07 19:26:23
そもそもそんな関数呼ぶくらいならstrlenでいいじゃん


185:デフォルトの名無しさん
07/06/07 19:37:02
>>183
とりあえずnullmoji[2]に'\0'を入れてstrcmpをしたら正常に動作しました。
ありがとうございました。

>>184
そういう課題なんです・・・

186:デフォルトの名無しさん
07/06/07 19:42:50
C++でクラスを書くとき、Javaの書き方に合わせようと思って、

#define Public public:
#define Private private:
#define Protected protected:

って定義して、んでヘッダファイルを

Public int getNum();
Public void setNum(int num);

みたいに書いてみたんだけど、これと似たようなことをやる人は多い?
それとも明らかにC++の常識からは外れた書き方?

187:デフォルトの名無しさん
07/06/07 19:46:56
他言語を真似るマクロは愚の骨頂だと俺は思う

なにより読みにくいし、なら java でかけよと言いたい

188:デフォルトの名無しさん
07/06/07 19:52:34
>>186
m9( ´,_‥`)プッ

189:デフォルトの名無しさん
07/06/07 19:56:46
つか
Javaってpublicだのprivateだのの先頭、いつから大文字で書くようになったんだ

190:デフォルトの名無しさん
07/06/07 19:57:08
>>186
PASCAL風に
#define BEGIN }
#define END }
なんてやられたソースをおまえは許せるんだな?

191:デフォルトの名無しさん
07/06/07 19:59:41
Bourne shellの作者のSteve BourneがALGOL風のトンチキなマクロを定義して
シェルを書いたのは(勿論悪い意味で)有名

192:デフォルトの名無しさん
07/06/07 20:20:55
>>187
関数一覧をカテゴリ別に並べて書きたくて……

>>188
(´・ω・`)

>>189
いや先頭が小文字のpublicとかは予約語なんで

>>190
……ええと、すいません

193:デフォルトの名無しさん
07/06/07 20:23:51
マクロなんだから予約語も糞もないだろ

194:デフォルトの名無しさん
07/06/07 20:26:05
#define for if(0); else for

とかできるんだぜ。

195:デフォルトの名無しさん
07/06/07 20:29:36
>>186
やるな。
理由は色々あるが、一番実害があるのはこんなところか。

#define public public:

としたとして、

class A {
public void foo();
void bar();
};

の bar のアクセス指定がどうなるか考えてみよう。
これは public だ。

だが、見た目から直感的に感じるのは private だろう。
こういう齟齬が発生するから、してはいけない。

196:デフォルトの名無しさん
07/06/07 20:29:41
>>192
あほすぎw


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4991日前に更新/258 KB
担当:undef