C/C++小心者スレッドP ..
565:デフォルトの名無しさん
09/11/23 15:09:23
C言語の質問です。
C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時
はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。
そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。
ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。
プログラミング環境は、
・Borland C++ Compiler 5.5.1
・Microsoft Visula Stdio 2005
の二つあります。
どうぞお願いします
566:デフォルトの名無しさん
09/11/23 15:13:31
いや別にコンソール使わなくてもいいと思うけど
567:デフォルトの名無しさん
09/11/23 15:19:55
オセロ
568:デフォルトの名無しさん
09/11/23 15:29:16
ウィンドウ出す方法でも勉強したらいいんじゃね
569:デフォルトの名無しさん
09/11/23 16:58:24
>>564
ハァ?
570:デフォルトの名無しさん
09/11/23 20:47:18
>>569
俺も>>564は普通に当然だと思うが
571:デフォルトの名無しさん
09/11/23 21:21:03
>>565
テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない?
昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし
572:565
09/11/23 21:50:09
>>566
おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・
窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m
>>567
なるほど!いいですね
次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね!
ありがとうございました
>>568
ぐ、やはりWindowsプログラミングですかね、
とりあえずこのソースを打ち込め!的なページを見てみます
>570
テトリスですか!いいですね、、、
mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます!
ありがとうございました
573:デフォルトの名無しさん
09/11/24 00:20:57
CとC++の違いをお願いします。
また、
URLリンク(www.amazon.co.jp)
この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか
574:デフォルトの名無しさん
09/11/25 00:50:20
どうみてもC
VC++はCも扱える
575:デフォルトの名無しさん
09/11/25 02:04:41
どう見てもC
初心者の俺がもってるイメージとしては
c = 関数関数関数関数
cpp = c + クラス他
576:デフォルトの名無しさん
09/11/25 02:07:32
言語仕様としては間違ってなくもないけど
実際のコーディングがまったく違うよ。
577:デフォルトの名無しさん
09/11/25 19:49:14
C++を有る程度使えるようになってから
このまえCだけで全部つくる必要がでたときすごくとまどったな
なんつっても文字列操作が…
578:デフォルトの名無しさん
09/11/25 23:00:39
いつかC++のクラスやSTLが突然使えなくなる日が来るんじゃないかと思ふことがある
579:デフォルトの名無しさん
09/11/28 00:24:14
〜ヘッダ〜
class BBB;
class AAA{
BBB *processor;
void do();
}
〜ソース〜
AAA::do(){
BBB &processor = *(this->processor);
processor.execute();
}
プログラミングの出来る友達のソースを見たらこのような記述がありました。
このようにするメリットって何があるのですか?
友達にも聞いたのですが、いまいち理解できませんでした。
580:デフォルトの名無しさん
09/11/28 03:24:18
いわゆるpimplだな。
他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。
AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと
ならない。プライベートメンバでも何でも。
でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに
なる。
だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を
置く。ポインタなら中身が分からなくてもサイズは確定するから。
で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。
581:デフォルトの名無しさん
09/11/29 05:28:36
下のプログラムで、なぜかswitchのところでひっかかってしまいます。原因は何でしょうか。
プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。
int suuji;
suuji = rand() % 5 ;
printf("\n\n\n\nテストプログラム1\n");
switch (suuji)
{
case '0' :
printf("\nCASE 0");
break;
case '1' :
printf("\nCASE 1");
break;
case '2' :
printf("\nCASE 2");
break;
case '3' :
printf("\nCASE 3");
break;
case '4' :
printf("\nCASE 4");
break;
}
return 0;
582:581
09/11/29 05:30:54
頭にくる
int main(void)
がぬけてました。
また、ひっかかるというのは表示されないということです
583:デフォルトの名無しさん
09/11/29 06:40:40
suuji = rand() % 5 + 0x30;
これで^^
584:デフォルトの名無しさん
09/11/29 08:38:50
やべえ俺>>583を見てもなお引っかかっちまった
文字'0'(ASCIIコード0x30)と比較してるのか
585:デフォルトの名無しさん
09/11/29 14:14:52
if(1){****}
とあった場合、
まともな(有名どころのg++とかVCとか)コンパイラなら
if(1)という無駄なオーバーヘッドは消してくれると期待できますか?
あるいはif(0)も同じく最適化してくれますかね?
586:585
09/11/29 14:22:33
#include <iostream>
const int num = 1;
int main()
{
if(num){std::cout << "num" << std::endl;}
if(!num){std::cout << "!num" << std::endl;}
return 0;
}
これがg++ (最適化-O1) でasmファイルが同じになりました。
他のコンパイラでも期待して良い物なのでしょうか?
587:デフォルトの名無しさん
09/11/29 18:11:43
よほど特殊な狂った(または単純に超絶バカな)コンパイラでなければ、最適化を
切ったりしない限りは当たり前のように消える
588:デフォルトの名無しさん
09/11/29 18:32:50
>>587
ありがとうございます。
589:デフォルトの名無しさん
09/11/29 19:33:54
C++のクラス&構造体に関する質問です。
構造体を静的メンバとして定義するには、どうしたらいいのでしょうか。
以下のようなコードで、int型の数値をstruct型にまとめたいのです。
class Perception {
public:
static int trackingPointX;
static int trackingPointX;
}
int Perception::trackingPointX = 0;
int Perception::trackingPointY = 0;
int main() {
printf("%d", Perception::trackingPointX);
return 0;
}
いろいろと検索・試作してみましたが、実装方法が分かりませんでした。
よろしくお願いします。
590:デフォルトの名無しさん
09/11/29 19:44:36
>>589
よくわからんな。
そのコードのどこが気に入らないの?
591:デフォルトの名無しさん
09/11/29 19:49:13
struct Perception
{
static int trackingPointX;
static int trackingPointY;
};
592:589
09/11/29 19:51:37
>>590
printf("%d", Perception::trackingPoint0.x);
printf("%d", Perception::trackingPoint1.x);
printf("%d", Perception::trackingPoint2.x);
・・・という風にしたいんです。
593:デフォルトの名無しさん
09/11/29 19:56:42
#include <stdio.h>
struct _Perception
{
struct Point{ int x; int y; };
Point trackingPoint0;
Point trackingPoint1;
Point trackingPoint2;
};
_Perception Perception;
int main()
{
printf("%d", Perception.trackingPoint0.x);
/* ...*/
return 0;
}
594:589
09/11/29 20:22:19
>>593
構造体をクラス変数として使いたいなら、メンバ変数として定義した上で
あらかじめクラスを作っておく方法しかないんですかね・・・。
595:デフォルトの名無しさん
09/11/29 20:28:31
>>594
クラスインスタンス作るのが気に入らないなら 593 のメンバ変数に static つければいいだろうが。
>>593 要らんところで予約名使うなよ。
596:589
09/11/29 20:38:31
>>595さんの方法も試してみます。ありがとうございます。
とりあえずは以下の方法で実装できました。(言われてみれば当たり前かも・・・汗)
struct TrackingPoint { int x; int y; };
class Perception {
public:
static TrackingPoint trackingPoint0;
static TrackingPoint trackingPoint1;
static TrackingPoint trackingPoint2;
};
TrackingPoint Perception::trackingPoint0 = {0, 0};
TrackingPoint Perception::trackingPoint1 = {1, 1};
TrackingPoint Perception::trackingPoint2 = {2, 2};
int main() {
printf("%d", Perception::trackingPoint0.x);
printf("%d", Perception::trackingPoint1.x);
printf("%d", Perception::trackingPoint2.x);
return 0;
}
597:デフォルトの名無しさん
09/12/02 00:53:41
MFCを使ったサンプルプログラムを実行したいのですが、
.NET 2008だと有料版を買うしか無いのですよね・・・?
598:デフォルトの名無しさん
09/12/02 01:28:33
>>597
「.NET 2008」って、「Visual Studio .NET か Visual Studio 2008」ってこと?
まあ、そうだね。MFCを無料で入手する手段はないと思うよ。
ちょっと試すぐらいなら、現在無料で配布中の VS 2010 懼ァイ22でいけるか
もしれない。
599:デフォルトの名無しさん
09/12/02 04:05:07
>>598
説明が足りなくてすいません
Visual Stadio .NET Express EditionでMFCを使用したサンプルプログラムの動きを見たかったのです
VS2010なら、動作してくれるのかな?
ちょっとダウンロードして実行してみます
600:デフォルトの名無しさん
09/12/02 10:03:55
1回動けばいいだけなら評価版をダウンロードすればいいだけだな
601:デフォルトの名無しさん
09/12/07 21:57:33
a、b、cの3つのint型にそれぞれ8bit(01001110のようなもの)のデータをくっつけたいのですが、どうすればよいでしょうか。
つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように
ひとつの24bitのデータにしたいのです。
なにか良い手段がありましたら、お願いします。
602:デフォルトの名無しさん
09/12/07 23:27:47
>>601
a、b、cを左に8回シフトして0xffffff00(32bitの場合)とANDを取り
次に8bitデータとORを取る
603:デフォルトの名無しさん
09/12/07 23:28:31
あっごめん24ビットデータか
じゃあ0xffff00とANDを取って
604:デフォルトの名無しさん
09/12/08 01:14:20
>>601
> つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように
これ、 4 ビットずつ 3 つで 12 ビットのデータにしてね?
605:デフォルトの名無しさん
09/12/08 01:27:26
>>604
606:デフォルトの名無しさん
09/12/08 04:37:51
>>601
1行目と2行目以降が同じ意味に聞こえないんだけど、もしかしてこういうこと?
int d = ((a & 0xff) << 16) | ((b & 0xff) << 8) | (c & 0xff);
607:デフォルトの名無しさん
09/12/08 07:44:40
visual C++ 2008 Express Edition でシンプルなソフトを作ってみました。
そこで質問があるのですが、もし分かる人いたら教えてください。
@実行ファイルにアイコンをつけたいんですが、プロジェクトファイルを作成してしまった後でも、
アイコンをつける方法はあるのでしょうか。
(アイコンの絵柄のきれいさはあまりこだわりませんが、せっかくなんでアイコン作ってみたくて)
ARelease環境で作成されたフォルダをみると
プログラムの中で使う画像ファイルがなぜかないので手作業でフォルダに追加しないといけなかったり、
作成されたフォルダの中にexeファイル以外のファイルが8つぐらいあったりしてごちゃごちゃするので、
最終的に作成するファイルをexeファイルだけにする方法はないでしょうか?
608:デフォルトの名無しさん
09/12/08 12:46:29
昔はリソーススクリプトをごりごりしていたけど(VC++ 6.0)
いまはXMLになっている気がする(VS 2003頃からか)
とりあえず、スレ違い
Visual Studio 2008 Part 19
スレリンク(tech板)
609:デフォルトの名無しさん
09/12/08 14:11:26
>>607
>最終的に作成するファイルをexeファイルだけにする方法はないでしょうか?
ビルド後のイベントに消すコマンドを書けばよいがそんなことは普通しない。
分割コンパイルの意味がなくなる。
610:デフォルトの名無しさん
09/12/08 20:40:37
>>601が真にやりたいことが理解できてなくて
説明がうまいこといってないのか
俺の読解力がないのかが判断つかねえ
611:デフォルトの名無しさん
09/12/08 21:29:28
R=5 G=3 B=8から、RGB値の#538が欲しい、だと解釈したので>>606でいいと思ってる
612:デフォルトの名無しさん
09/12/08 21:41:17
サンプルのdが0x538だったら惑うことも無かったろう
613:612
09/12/08 21:42:19
8bitの合成で24bitだから正しくは0x050308か
614:デフォルトの名無しさん
09/12/11 12:49:28
>>601
今の人はビットフィールドって知らないのか?
615:デフォルトの名無しさん
09/12/11 12:51:22
はぁ?
616:デフォルトの名無しさん
09/12/11 12:58:29
>>610
1行目と2行目の関連がまるで見えないので説明の問題だと思う
617:デフォルトの名無しさん
09/12/11 13:00:10
>>614
もし、8ビット毎の合成だったらunionだけでOKだな
618:デフォルトの名無しさん
09/12/11 16:24:01
C++/CLIってググっても情報少ないんだけど、
あまり使われていないのでしょうか?
619:デフォルトの名無しさん
09/12/11 16:31:41
えぇ、使われてません。
C++のルールからあまりに外れまくっている上に
C#より面倒なくせにやれることはC#未満という有様なので。
用途がすごく限られます。
620:デフォルトの名無しさん
09/12/11 16:45:58
>>618
殆どはC#とC++の情報を読み替えるだけで賄える
621:デフォルトの名無しさん
09/12/12 10:38:17
aとbというunsigned long型で、
aとbの差が±30以上ならint型cに1を入れる、というプログラムを作成したいのですが、
なにかいい方法はありませんか?
622:デフォルトの名無しさん
09/12/12 10:42:36
普通に引き算の結果を比較するんじゃダメなの?
623:デフォルトの名無しさん
09/12/12 10:43:50
>>621
どうやったらダメだったのかとか自分の案くらい書けば?
624:デフォルトの名無しさん
09/12/12 10:44:31
unsigned じゃ引き算の結果のマイナスは表現できないから困るだろ
625:デフォルトの名無しさん
09/12/12 10:51:25
int main(){
unsigned long a = 39.5;
unsigned long b = 6.4;
unsigned long d;
if(a>b){
d = a-b;
}else{
d = b-a;
}
int c = 0;
if(d>30){
c= 1;
}
cout << c << endl;
}
626:デフォルトの名無しさん
09/12/12 10:51:25
絶対値とりゃいい
627:デフォルトの名無しさん
09/12/12 11:49:49
if (a >= b + 30 || b >= a + 30) {
c = 1;
}
628:デフォルトの名無しさん
09/12/12 11:53:10
最大値付近だとまずくない?
629:デフォルトの名無しさん
09/12/12 12:15:02
まずかった
なんか綺麗に書けないかなと思ったけど難しかった
630:デフォルトの名無しさん
09/12/12 12:34:01
if (abs(a-b) > 30) c = 1;
631:デフォルトの名無しさん
09/12/12 12:34:58
「30以上」
632:デフォルトの名無しさん
09/12/12 12:42:20
abs()の引数はintじゃねーの?
633:デフォルトの名無しさん
09/12/12 13:28:53
unsigned longのままでやりたいなら
c = (a > b ? a - b : b - a) > 30 ? 1 : c;
634:デフォルトの名無しさん
09/12/12 15:08:18
横からスマソ
int型のif文で、
if (x <= -50)
みたいにできなかったっけ?
635:デフォルトの名無しさん
09/12/12 15:16:04
>>634
出来るが、一体どうしたね
636:デフォルトの名無しさん
09/12/12 15:21:43
いや、int型のほうは負も扱えたよなと思って
637:デフォルトの名無しさん
09/12/12 15:22:29
>>636
今更なにを。。。
どの言語を普段お使いの方ですか?
638:デフォルトの名無しさん
09/12/12 18:59:13
ここ数年、開発部門から離れてCとかC++も触れる機会が無かったからさ
そろそろ戻れるって聞いて、必死で覚えなおしてる
639:デフォルトの名無しさん
09/12/12 19:01:58
×戻れる
○戻される
640:デフォルトの名無しさん
09/12/12 19:14:33
>>1
なんで宗教的な話は禁止とか書いてあんの?
プログラムと宗教って何か関係性でもあったの?
普通に考えたらプログラム板なんだから宗教の話なんてスレチのイタチだってのに
わざわざ書くってことは何か理由がってのこと?
641:デフォルトの名無しさん
09/12/12 19:51:37
はい
642:デフォルトの名無しさん
09/12/12 20:37:59
>>640
vimとemacsのどちらがよりC++コーディングに適しているのか教えてください
643:デフォルトの名無しさん
09/12/12 21:20:01
以下のコードのように文字列定数の先頭アドレスを返して
関数呼び出し元で利用するのは問題ないでしょうか。
手元の環境(gcc 4.4.0)では"abc"と表示されました。
#include <stdio.h>
char *func() {
return "abc";
}
int main(void) {
puts(func());
return 0;
}
644:デフォルトの名無しさん
09/12/12 21:41:40
>>643
定数は問題ない
645:デフォルトの名無しさん
09/12/12 21:58:57
問題ないけど戻り値の型はconst chara*のほうがいいと思う
646:643
09/12/12 22:46:26
ありがとうございます。
647:デフォルトの名無しさん
09/12/13 04:59:03
>>642
それはエディタ論争だから鼬害
648:デフォルトの名無しさん
09/12/13 10:14:46
>>647
バカ発見www
単に彼は「宗教的な話は禁止」の例えで出したんだろjk
649:デフォルトの名無しさん
09/12/13 10:20:43
この板における「宗教」の意味を理解してないか、わざと理解してないふりをしてるアホには、
何を言っても無駄だろう。
650:デフォルトの名無しさん
09/12/13 11:21:40
viにしろ!!!!
651:デフォルトの名無しさん
09/12/13 13:22:13
神は量子クラスを継承して光子オブジェクトを作られたわけだが
それ以前から原子クラスを継承した水素オブジェクトは存在したのだな
652:デフォルトの名無しさん
09/12/13 13:33:22
>>651
いや存在してないと思うぜ。逆じゃねぇのか?
あと、テンプレートの特殊化の方が近いと思うんだぜ。
template<double spin, double Mass, double Electric charge, 俺の知らない要素>
class SubatomicParticle;
653:デフォルトの名無しさん
09/12/13 13:48:26
逆というか、skyとgroundクラスをまず最初に作って
そのとき一緒にwaterクラスも実装したらしい
654:デフォルトの名無しさん
09/12/13 15:26:49
宗教的な話題は禁止します。
655:デフォルトの名無しさん
09/12/13 15:33:52
リアル宗教ktkr
656:デフォルトの名無しさん
09/12/13 17:01:10
C#信者だけど質問してもいい?
657:デフォルトの名無しさん
09/12/13 17:31:08
どうぞ
658:デフォルトの名無しさん
09/12/13 17:40:34
どうぞじゃねぇよ
スレ違いだろ
659:デフォルトの名無しさん
09/12/13 18:00:32
C#信者だけど(C/C++の)質問してもいい?
660:デフォルトの名無しさん
09/12/13 18:08:40
>>659
ダメ
改宗してからおいでなさい。
661:デフォルトの名無しさん
09/12/13 18:15:40
C/C++/C# は宗教だったのか
662:デフォルトの名無しさん
09/12/13 18:26:25
そうです!!
663:デフォルトの名無しさん
09/12/13 20:14:15
すみませんがどうすればいいか教えてください。
下記のコードのcuetarget=cue_parse_file(fp);までは実行に成功するのですが、cd_dump(cuetarget);以降が実行されず、実行が止まってしまいます。
#include "C:/libcue-1.3.0/bin/cd.h" #include "C:/libcue-1.3.0/bin/cdtext.h" #include "C:/libcue-1.3.0/bin/cue_parser.h" #include "C:/libcue-1.3.0/bin/libcue.h" #include "C:/libcue-1.3.0/bin/rem.h" #include "C:/libcue-1.3.0/bin/time.h"
int main(int argc, char** argv) {
FILE *fp; /*ファイルポインタの宣言 */
Cd *cuetarget;
/* ファイルのオープン */
if ((fp = fopen("S:/CDImage.cue", "r")) == NULL) {
printf("file open error!!\n");
exit(EXIT_FAILURE); /*エラーの場合は異常終了する */
}else{
cuetarget=cue_parse_file(fp);
if (cuetarget=NULL){
exit(EXIT_FAILURE); /*エラーの場合は異常終了する */
}else{
cd_dump(cuetarget);
}
}
fclose(fp); /*ファイルのクローズ */
return (EXIT_SUCCESS);
・エラーメッセージ
特になし。
・実行環境
OS:WindowsXP コンパイラ:MingW IDE:NetBeans6.0.1 使用したライブラリ:libcue-1.3.0( URLリンク(sourceforge.jp) )
・最終的にやりたいこと
Cueシートの全てのトラックの、トラック名、アーティスト名などの属性を、別に用意したファイルの内容で自動的に置き換える。
(そのためにCueシートの解析用ライブラリをDLしてきた。)
664:デフォルトの名無しさん
09/12/13 20:18:23
とりあえず、PATHを通しとけ
CUEファイルに原因があるかもしれないから
CUEをどこかにあげてみて
665:デフォルトの名無しさん
09/12/13 20:44:05
>>664
PATHは通してあります。
CUEはこれです。
URLリンク(www1.axfc.net)
666:デフォルトの名無しさん
09/12/13 21:19:00
>>663
この辺があやしい
if (cuetarget=NULL){
667:663
09/12/13 21:27:17
解決しました。ありがとうございます。我ながら何をやっているのか…。
668:デフォルトの名無しさん
09/12/14 20:10:06
定数を左辺値にしないから・・・・・
669:デフォルトの名無しさん
09/12/14 20:27:02
いまどきのコンパイルなら警告出るだろ
670:デフォルトの名無しさん
09/12/14 22:50:01
脳内警告が常に出ます
671:デフォルトの名無しさん
09/12/15 10:07:23
>>668
左辺値の意味わかってないだろ。
まあどっちにしても定数を左に置くやつは信用できないけどな。
672:デフォルトの名無しさん
09/12/15 10:30:07
>>671
右の間違いだろ
673:デフォルトの名無しさん
09/12/15 10:44:07
プログラムの意味的にそうするのが自然であればそれでいいけど
単に凡ミスを防ぐために読みづらくするのは嫌だと言ってんの。
674:デフォルトの名無しさん
09/12/15 11:21:39
なんだ嫌なのか。
675:デフォルトの名無しさん
09/12/15 12:01:02
俺も定数を左に置くような奴を見たら、どっかおかしい人だと思うだろうな、正直。
当然、そう書こうとする動機は知っているが。
==と間違えて=を書く確率は、ちょっと慣れたまともなCプログラマなら0に限りなく
等しい。つまり、予防策としての効果も0に限りなく等しい。
よって、見た目に優れた書き方の方が良いが、左に定数を書く方がみんな見やすいと
思っているなら相当な変わり者だろう。物事は何でもかんでも対称的ではない。左と
右でどっちが感覚的に自然か、についても対称的な話ではない。現実に定数は右に
書かれる率が圧倒的に高い。
というようなことを感覚で判断できないか、または==と=を間違えることが実際に
ある人なのか、どちらにしても信用には値しないだろうな。
676:デフォルトの名無しさん
09/12/15 12:03:56
ミスの確率の高さ低さより、致命傷になるかどうかじゃね?
今時のコンパイラを正しく使っていれば、間違えても致命傷にはならない
だろうとは思う。
677:デフォルトの名無しさん
09/12/15 12:11:20
if ( MIN <= x && x < MAX ) {} とかは書くけど、
==と=のミスを避けるために左に定数を書くことはないなぁ。
でも、
>ちょっと慣れたまともなCプログラマなら0に限りなく
は、ソースがないから単なる妄想だね。^^
そしてハーブサッター先生の言葉を思い出そう。
678:デフォルトの名無しさん
09/12/15 12:16:48
ハーブサッターの言葉なんぞ多すぎてどれだか分かんねぇよw
679:デフォルトの名無しさん
09/12/15 12:21:59
ハーブサッターの言葉?
気の利いたコードは害悪だ、ってのは覚えてるな。
680:デフォルトの名無しさん
09/12/15 13:54:54
個人的には
>>677
> >ちょっと慣れたまともなCプログラマなら0に限りなく
> は、ソースがないから単なる妄想
そういう統計は誰も取ってくれそうもないが、経験則としてはあるなあ。
681:デフォルトの名無しさん
09/12/15 14:08:48
長くCを書いてると、比較の時は自然と==と入力してしまう
682:デフォルトの名無しさん
09/12/15 15:02:15
0に限りなく近いなら定数を左辺にするテクや、=に警告するコンパイルなんて生まれなかったろうに。
683:デフォルトの名無しさん
09/12/15 15:06:07
if (!ちょっと慣れたまともなCプログラマ) {
682 名前: デフォルトの名無しさん [sage] 投稿日: 2009/12/15(火) 15:02:15
0に限りなく近いなら定数を左辺にするテクや、=に警告するコンパイルなんて生まれなかったろうに。
}
684:デフォルトの名無しさん
09/12/15 15:17:15
小心者はどこへいった・・・
685:デフォルトの名無しさん
09/12/15 21:57:19
俺様は比較で代入なんて間違えないぜwwwwっていう勘違いちゃんならいるけど
686:デフォルトの名無しさん
09/12/15 22:35:07
俺様は比較で代入なんて間違えないぜwww
ただタイプミスするだけなんだぜwwww
ダメじゃんorz
687:デフォルトの名無しさん
09/12/15 23:37:27
\(^o^)/オワタ
688:デフォルトの名無しさん
09/12/16 10:47:01
結構膨大なコード書いてきたけど、ごく初期は別にして普通に一度も間違えないけどな
689:デフォルトの名無しさん
09/12/16 11:08:54
間違えることよりも、早期発見できるほうが重要だけどな。
他人の作ったコードもメンテすることあるし。
690:デフォルトの名無しさん
09/12/16 14:09:20
タイプミスばっかでげんなり
691:デフォルトの名無しさん
09/12/16 15:27:40
>>688
PL/SQL と並行してやってると、代入/比較どころか
文字列のクォーテーションまで間違うぜ!
692:デフォルトの名無しさん
09/12/16 16:10:07
他人に「定数は左に書こうぜ」とか言ってたらさらにキチガイじみてるな
693:デフォルトの名無しさん
09/12/16 16:11:16
他人の作ったコードのメンテで「定数は左に」って役に立つの?
右に書いてあるコードを全部左に置き換えてからコード読むとか?
694:デフォルトの名無しさん
09/12/16 16:17:45
「仕事じゃバカのコードもメンテしなきゃならないんだよ」理論の失敗例だな
695:デフォルトの名無しさん
09/12/16 18:25:03
vbの即時で文法ミス見つける機能が他の環境にもあれば そのうち実現するか
696:デフォルトの名無しさん
09/12/17 04:02:14
パソコンの時刻を2038年1月19日3時14分7秒の30秒前に設定して30秒後どうなるのかを誰か試してみてくれないか?
うちのパソコンでは何かうまくゆかないんだ
697:デフォルトの名無しさん
09/12/17 05:03:28
女の腐ったような回りくどさだな
どうせ30年弱の間には解決するだろ
698:デフォルトの名無しさん
09/12/17 08:04:46
何でC/C++スレで2038年問題を?
699:デフォルトの名無しさん
09/12/17 11:32:43
「C/C++スレ」ではなく「小心者スレ」だから
700:デフォルトの名無しさん
09/12/17 11:33:45
>>695
文法ミスじゃないから原因を特定しにくいバグになるんじゃないの?
だから、コンパイル時にエラーとなるように定数を左辺に置くという小技が出てきたわけで。
今は警告でるんだからそんな小技はデメリットしかないと思うよ
701:541
09/12/17 17:41:27
>>541で質問した者です。
検索の結果、やりたいことは「重複順列の列挙」と言うのだと分かりました。
また、列挙までのサンプルソースも手に入りました。
が、
あまりにも数字が多いので、必要のない物を出力前に除外しようと思い立ちました。
そこで質問です。除外条件で
・m桁目に2がある数値は除外
・0が5個以上連続している数値は除外
・左右反転して同一数値になるものは最初に出力した物以外出力しない
等々、どうやって条件付けしたらいいのか分かりません。
702:デフォルトの名無しさん
09/12/17 18:03:47
>>701
どういうものが必要ないかを俺が決めていいのかよ??
じゃぁ(ry
703:デフォルトの名無しさん
09/12/17 19:37:56
条件付けで処理が増える分、余計に遅くなるだけな気もするが。
704:デフォルトの名無しさん
09/12/18 06:40:17
選択整列法の平均比較回数が約N^2/4になるのはなぜですか?
705:デフォルトの名無しさん
09/12/18 10:50:35
平均っていうか、単純選択ソートの比較回数は固定のはずでは
706:デフォルトの名無しさん
09/12/18 10:59:38
選択ソートの比較回数は(N-1)*N/2じゃないの?
707:デフォルトの名無しさん
09/12/18 11:38:27
失礼、挿入整列法でした。
708:デフォルトの名無しさん
09/12/19 00:49:35
スレ違いかもしれないけど。
wiiyourselfとかwiiremoteなどのwii関係のC,C++用のライブラリーでとっつき安いライブラリのおすすめがある人いませんか?
自分の作ったVRウォークスルーもどきにヘッドトラッキングを導入したいんだけど。
709:デフォルトの名無しさん
09/12/19 01:22:28
>>707
俺最低。異物挿入法とか読んだ。どこに異物があるのか。
710:デフォルトの名無しさん
09/12/19 01:49:11
>707
大雑把に説明してみる。
Insertion sort ではどの位置に要素を挿入するべきかを判定するために比較が用いられている。
最初逆順に並んでいる場合(=最悪の場合)は比較回数は 0+1+2+...+(n-1)=n(n-1)/2 になる。
各ステップにおいてどの位置に挿入することになるかは等確率となるため平均を考えると半分の位置になる。
従って 0/2+1/2+2/2+...+(n-1)/2=1/2(0+1+2+...+(n-1))=n(n-1)/4 となる。
711:デフォルトの名無しさん
09/12/19 01:58:03
補足。
>各ステップにおいてどの位置に挿入することになるかは等確率
例えば最悪値で n-1 回比較するケースにおいて平均を考えると (1+2+...+(n-1))/(n-1) = n(n-1)/2/(n-1) = n/2
で大体半分。↑の式でも正確じゃないけどまぁオーダーとしては合ってるはず。
712:デフォルトの名無しさん
09/12/19 02:59:32
質問なのですが、投げられた例外の型ってどうやって判定してるんですか?
catchで分岐する時です。
静的に分かるものですか?
それとも実行時型情報みたいなの使うんでしょうか?
713:デフォルトの名無しさん
09/12/19 08:32:55
>>712
っ URLリンク(msdn.microsoft.com)
714:デフォルトの名無しさん
09/12/19 08:36:11
>712
静的には分からないので
>実行時型情報みたいなの
を使ってる。
g++ の場合だと正に std::type_info を使ってるらしい。
詳しく知りたい場合は BinaryHacks おすすめ。
715:デフォルトの名無しさん
09/12/19 14:51:07
try{
// コード
}catch(Exception1 e){
//例外1
}catch(Exception2 e){
//例外2
}catch(Exception3 e){
//例外3
}
716:デフォルトの名無しさん
09/12/20 16:14:52
#include <iostream>
using namespace std;
int main()
{
int n=100;
double k = 1.0/n;
for(double i=0.5;i >= -0.5; i-=k){
double x =0.0;
x = i;
cout << x << endl;
}
return 0;
}
これをコンパイルして実行したら0のところがe-16とかの小さい数になってしまいます。
原因を教えてください
717:デフォルトの名無しさん
09/12/20 16:18:46
>>716 URLリンク(www.kouno.jp)
718:デフォルトの名無しさん
09/12/20 17:25:17
>>717
ありがとうございます
0のところだけ別に入れます
719:デフォルトの名無しさん
09/12/20 19:23:07
>>716
0以外の場合は浮動小数点誤差が情報落ちして消えてしまうけど、
0の場合は誤差がそのまま有効な数値になるから。
で
cout << x << end;
を使わず
printf("%.2f\n", x );
を使えばいい
720:デフォルトの名無しさん
09/12/20 20:04:57
定数は左に、インド人は右に。
721:デフォルトの名無しさん
09/12/20 20:44:05
なつかしいなおいw
722:デフォルトの名無しさん
09/12/20 21:42:41
インド人は右ってどういう意味?
723:デフォルトの名無しさん
09/12/20 21:51:22
ハンドルは右
724:デフォルトの名無しさん
09/12/20 21:54:28
そういう意味か!!!
725:デフォルトの名無しさん
09/12/20 22:49:34
>>724 「インド人を右に」でぐぐれ
726:デフォルトの名無しさん
09/12/20 23:01:19
>>716みたいなのだと、100倍した値で計算して、表示の時に100分の1するのもいいかもな
727:デフォルトの名無しさん
09/12/21 01:03:47
別の言い方をすれば、ostreamで浮動小数点数を出力しようとするとprintfの%g相当ということだな。
<iomanip>をインクルードして、例えば
cout << fixed << setprecision(2) << x << endl;
と書けば、%.2f相当の出力になる。
728:デフォルトの名無しさん
09/12/21 22:37:27
VS2010β2のC++を使ってみました。
UInt32 aa;
aa = 0x12;
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
fs->Close();
作成したtmp.binが使用中のままになっているため、2回繰り返すとエラーになってしまいます。
Closeしただけではダメなのでしょうか?
すいませんがよろしくお願いします。
729:デフォルトの名無しさん
09/12/21 23:35:48
>>728
CLIの質問は大胆すぎるので別スレでどうぞ
730:デフォルトの名無しさん
09/12/21 23:38:00
>>728
エラーとはどういうこと?
次のように、単純に2回実行することを試したが、なんの例外も投げられることなく実行されるけど。
using namespace System;
using namespace System::IO;
int main()
{
UInt32 aa;
aa = 0x12;
{
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
}
{
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
}
}
731:728
09/12/22 01:08:58
>>730
すいません、他のサブルーチンがひっかけてました。
ありがとうございました。
732:デフォルトの名無しさん
09/12/22 01:35:39
>>731
そうそう、BinaryWriterのCloseは、大元のストリームもCloseすることになっているから、
fs->Close()は無くても平気だよ。もちろん、あっても害はないから気にしなくても全然問題ない。
733:デフォルトの名無しさん
09/12/24 02:58:29
すみません、
普通、構造体のインスタンスに、STLで見かける.size()メンバなんて有りませんよね?
URLリンク(marupeke296.com)
ここの「アニメーション上位レベル構造体」が「SetLoopTimeメソッド」で.size()されていて
そのままインスタンスを作ってコンパイルしようとすると、当然のように
>error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません
と出ます。
この構造体は何か、普通と違った使い方をしているのでしょうか?
それとも私が、何か知らなければいけない事を知らないだけなのでしょうか。
734:デフォルトの名無しさん
09/12/24 04:52:19
>733
C++は詳しく知らないし、僕が昔使っていたときにはinterfaceなんてなかった気もするがおそらく
class CHighLevelAnimController : IHighLevelAnimController {
private:
vector<struct HLANIMATION_DESC> m_Amin;
CHighLevelAnimController operator=(CHighLevelAnimController& c) { return c; }
public:
CHighLevelAnimController() { }
~CHighLevelAnimController() { }
bool SetLoopTime(UINT, FLOAT);
...
};
CHighLevelAnimControllerクラスは、IHighLevelAnimControllerインターフェイスを継承(実装)して
m_Aminオブジェクトは、vector<>のようなテンプレートクラスのインスタンスとしてCHighLevelAnimControllerクラスまたはその基底クラスで定義されている
interfaceキーワードに詳しい人詳細キボン
735:デフォルトの名無しさん
09/12/24 05:39:46
>>734
Windowsでは、どこかのヘッダで#define interface structってされているだけ。
>>733
自分も、m_Animは実際にはなんらかのSTLコンテナか何かなのだと思う。
736:デフォルトの名無しさん
09/12/24 11:08:03
>>734 >>735
何か特別な使い方かと思いましたが、STLに包んでいるとかなのですね。
ありがとうございました。
737:デフォルトの名無しさん
09/12/28 16:13:02
すみません。
起動や大型のファイル群を読み込むなどで10秒前後待たせる時
画面にLoading表示やその進行状況を表示したいのですが、
あれはどう実装するものなのでしょうか?
普通に組むと1つの工程(ファイルなど)単位で処理が停止してしまいますし、
「Loading」「読み込み画面」などの検索ワードでは違うものばかりHitし、
実現方法を見つけられずにいます。 何かご助言を頂けると幸いです orz
738:デフォルトの名無しさん
09/12/28 16:24:50
マルチスレッド
739:デフォルトの名無しさん
09/12/28 16:57:06
1ファイルの読み込み途中の経過を出したいなら、読み込みの関数を呼ぶ度に進行状況のウィンドウを書き換える
740:デフォルトの名無しさん
09/12/28 17:13:38
>>738
ググってみました。マルチプロセス処理というものが有るのですね。
これで実現への道筋が見えました。ありがとうございました。
>>739
そうですね。その程度なら勉強〜開発時間を殆どかけずにやれそうですね。
ありがとうございました。
741:デフォルトの名無しさん
09/12/28 17:15:01
凝ったLoading画面を作るならマルチスレッドが楽
止まってないことだけ示したいなら、一部読み込んでは表示、を繰り返せばいい
742:デフォルトの名無しさん
09/12/28 17:15:41
マルチプロセスとマルチスレッドは一般的には別物だぜ
743:デフォルトの名無しさん
10/01/04 09:19:30
端折れば
マルチプロセス>メモリ空間が別
マルチスレッド>同じメモリ空間
744:デフォルトの名無しさん
10/01/04 14:01:26
HAL研のプログラミングコンテストの難易度をおしえてください。
ひととおり文法勉強したんですが、難しく思えます
745:デフォルトの名無しさん
10/01/04 18:35:29
2009年のを見たけど、C++を適切に勉強していれば(文法的には)難しくはないと思うけどな
最短経路問題とかその類のロジックを問う問題でしょ
文法が分からないのであればそれ以前のレベルってことだね
746:デフォルトの名無しさん
10/01/04 19:20:51
どうやらプログラミングではなく、アルゴリズムを競うコンテストっぽいね。
747:デフォルトの名無しさん
10/01/04 21:20:54
>>744
俺も去年の春からプログラミングを勉強し始めたばかりで参加してるけど
アルゴリズムを考えるだけだから文法がわかってれば何も難しくもなくね?
難易度はどうですかって質問の答えにはなってないとは思うけど
748:デフォルトの名無しさん
10/01/05 01:18:43
>>745
>>746
>>747
なるほど。じゃ用意されている関数を使えるレベルすらないので
もう少し勉強してからトライします。もう終わりそうですけど。
レスありがとうございました。
749:デフォルトの名無しさん
10/01/07 06:18:50
openmpはマルチプロセスにする方法はありますか?
750:デフォルトの名無しさん
10/01/07 14:17:20
const Hoge*
const Hoge&
Hoge const*
Hoge const&
の違いを実例を挙げて詳しく教えてください。
751:デフォルトの名無しさん
10/01/07 16:17:41
実例だったら自分で組んでみれば分かるだろ。
752:デフォルトの名無しさん
10/01/07 17:02:22
俺も
const&
の2つがよくわからん。
753:デフォルトの名無しさん
10/01/07 17:18:14
const Hoge& と Hoge const& は一緒だから気にするな
& を超えて Hoge& const になると変わる
754:753
10/01/07 17:19:46
ごめん
何かわけのわからんことを言った
参照はもともと変更不可だから Hoge& const のようなものは無かった
Hoge* const はある
755:デフォルトの名無しさん
10/01/07 17:30:50
>>754もちつけ。参照も変更可能。
#include <iostream>
int main() {
int a = 10, b = 20;
int &r = a;
std::cout << r << std::endl;
r = b;
std::cout << r << std::endl;
/*
int &const cr = a; // `const' qualifiers cannot be applied to `int&'
std::cout << cr << std::endl;
cr = b;
std::cout << cr << std::endl;
*/
int *const cp = &a;
std::cout << *cp << std::endl;
//cp = &b; // error: assignment of read-only variable `cp'
std::cout << *cp << std::endl;
return 0;
}
756:デフォルトの名無しさん
10/01/07 21:52:05
delete this;
って適切に現在?のオブジェクトを破棄してくれるのですか?
757:デフォルトの名無しさん
10/01/07 22:21:38
適切に使えば
758:デフォルトの名無しさん
10/01/07 23:39:12
>>755
>>753が言ってるのは「別のオブジェクトを指すように変更することはできない」ってことだよ。
Hoge&は最初からHoge*const相当で、参照にHoge*に対応するものはないんだから。
759:デフォルトの名無しさん
10/01/08 09:32:09
>>758
別のオブジェクトを指すように変更することはできない?
いつからそうなってんの?w
int a = 10, b = 20;
int &r = a;
std::cout << r << std::endl;
r = b;
std::cout << r << std::endl;
これを実行して確認しる。
760:デフォルトの名無しさん
10/01/08 09:33:45
>>758
あーごめんw 俺が狂ってた。
r = b;
これはひょっとして、代入されてるのか。
( つд∩)うえーん
( つд・∩)チラ
761:デフォルトの名無しさん
10/01/08 09:42:09
int a = 10, b = 20;
int &r = a;
std::cout << &a << ' ' << &b << std::endl;
std::cout << r << ' ' << &r << std::endl;
r = b;
std::cout << r << ' ' << &r << std::endl;
実行結果:
0x22cce4 0x22cce0
10 0x22cce4
20 0x22cce4
___
←樹海| オワタ
 ̄|| ̄ ┗(^o^ )┓三 >>753 >>758 両氏ごめん
|| ┏┗ 三
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
762:デフォルトの名無しさん
10/01/08 09:50:12
学校の課題で配列に10個の実数を入力して最大値と最小値を求める問題なんですが、最大値は正常に出力されますが、最小値がうまく出力されません。
#include<stdio.h>
int main (void)
{
float x[11];
float max,min;
int i;
printf("実数を10個入力してください\n");
for ( i = 1; i <= 10; i++){
scanf("%f",& x[i]);
}
max = x[0];
for ( i = 1; i <= 10; i++){
if (x[i] > max){
max = x[i];
}
}
min = x[0];
for ( i = 1; i <= 10; i++){
if (x[i] < min){
min = x[i];
}
}
printf("最大値は%fです\n",max);
printf("最小値は%fです\n",min);
return 0;
}
どこが原因なんでしょうか?
763:デフォルトの名無しさん
10/01/08 09:56:55
x[0]が未初期化
764:デフォルトの名無しさん
10/01/08 12:59:46
すみません。複数のクラスを辿りループ処理をするプログラムで
クラス毎に1度だけ変数の初期化をさせたい場合、
1.コンストラクタを使う (再初期化が必要になった場合、結局の後者いずれかが必要に・・?)
2.各クラスのグローバルスコープに初期化用のstatic boolを置いて処理
3.初期化用メソッドを別に作って纏めて管理
この3つが思い付くのですが、
どういう初期化が定番、もしくは設計的に無難だと思われますでしょうか?
765:デフォルトの名無しさん
10/01/08 13:29:43
staticイニシャライザじゃダメなの?
766:765
10/01/08 13:30:28
ごめんJavaと勘違いしてました
767:デフォルトの名無しさん
10/01/09 09:17:09
>764
辿るのはクラスなのオブジェクトなの?
初期化するのはクラス毎なのオブジェクト毎なの?
どんな処理しようとしてるのかが良く分からない。
擬似コードでいいから書いてみてくれた方が答えやすい。
「クラス毎に1度だけ」の条件を抜いた上で感覚で答えれば、
それが本当に「初期化」ならコンストラクタにすると思う。
状態の再設定が必要なら reset() みたいなメソッドも作るだろうね。
>各クラスのグローバルスコープ
言いたいのはクラススコープじゃね?
768:デフォルトの名無しさん
10/01/10 12:33:35
>>767
初期化じゃなくて再設定って言わないとですね;
>各クラスのグローバルスコープ
すみませんでした、そんなの無いですよね;
つい完成するまでは1行で済むクラスの置いてるソースファイルのグローバルスコープにstatic boolを置く癖から。。 表現に注意します;
そして、変数の再設定メソッドが良さそうですね・・ありがとうございました。
769:デフォルトの名無しさん
10/01/15 17:08:21
すみません。
「配列にはしたくない変数名の末尾」に数字を付けるのは、滅多に見ない気がするのですが、何か危険なのでしょうか?
以前はhennsuuA ..B ..C としていたのですが、最近はhennsuu1 ..2 ..3 とやっているのですが・・
770:デフォルトの名無しさん
10/01/15 17:10:45
そういう命名がふさわしい場合が滅多に無いから
771:デフォルトの名無しさん
10/01/15 17:16:39
a, b, c, 1, 2, 3 なんて機械的な命名ではなく、それぞれの変数の役目に合った意味のある名前を付けるべき
いい名前が思い浮かばないのなら変数名スレに相談してみては
772:デフォルトの名無しさん
10/01/15 17:22:51
単純に通し番号を振るのがふさわしいような場合は、普通は似たような処理をそれぞれ
の変数に適用するだろうから、素直に配列にすることが多いだろ。
配列はふさわしくないが通し番号がふさわしい、という場面が滅多に無いから、そういう
命名も滅多に見ないだけ。
で、その言い方だと頻繁に通し番号を振ってるようだから、やはり命名がおかしいか、
よほど特殊なジャンルで活動しているか。まぁ、後者ならこんな質問は出ないだろうと
思うので、多分前者だろう。
773:デフォルトの名無しさん
10/01/15 17:24:18
たまに通し番号が多発しやすいジャンルもあるから、何を作っててそういうコードに
なるのか知りたい気もする
774:デフォルトの名無しさん
10/01/15 18:12:39
>>770-773
ありがとうございます。危険性そのものは多分、無いのですね。
私のプログラミング能力の低さから来てる問題なのが大半だとは思います。
あとは、
変数1の値に応じて処理をわけ、変数2の値に応じて処理を分け と
どっちも1桁の数値だから配列にして置いてても良いのですが、
一応種類が全く違う2つなので、名前を別にしたいのですが
違い過ぎると使い間違えそうになるので・・とりあえずa, b, c, 1, 2, 3 と
やっちゃってました。
変数名スレッドなるものが有るんですね。 探して見てこようかと思います。
ありがとうございました。
775:デフォルトの名無しさん
10/01/15 19:05:36
まーゲームなんかだと変数名にシリアル振りたくなることはある
でも今時そこまでガチに汚く組まないと困ることはコンシューマでも珍しい
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4744日前に更新/246 KB
担当:undef