【初心者歓迎】C/C++室 Ver.44【環境依存OK】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/12/06(木) 13:58:29
>>949
どこで詰まってるのかよくわからんが、代数的に解かなくても

>m 番の石を最初に取り除く.直前に除いた石から時計回りに石をたどって k 個目を取り除く作業を,残り 1個になるまで繰り返す

この手順通りのことを実際にやるようなプログラムを作ればいいんでない?
953デフォルトの名無しさん:2007/12/06(木) 14:29:05
0xFFFLの最後のLが意味わからんとです
954デフォルトの名無しさん:2007/12/06(木) 14:31:34
>>953
long
955デフォルトの名無しさん:2007/12/06(木) 14:31:38
Lを付けるとlong型
0L とか 4095L とか
956デフォルトの名無しさん:2007/12/06(木) 14:34:04
>>949
継子立てでいけると思うけど、どうダメだった?
957デフォルトの名無しさん:2007/12/06(木) 21:50:36
巨大配列の男ですが、ご指摘してくれたように、領域確保が要素数に対して少なかったという理由でした。
課題もなんとか終わりました。質問に対して答えてくれた方々、本当にどうもありがとうございました。
958デフォルトの名無しさん:2007/12/06(木) 23:35:17
どこで聞けばいいのかわからないのでとりあえずここで。

配列のサイズってどこに格納されているんでしょうか?
gcc -S でソースを眺めてみたところ特にサイズらしきデータが見当たらず、
sizeofした結果は即値で見つけやすかったんですが。

関係あるかどうかinfo scopeでは配列はサイズは表示されるのですが、
型と要素数では表示されないんですね。

スレ違いなら誘導よろ。
959デフォルトの名無しさん:2007/12/06(木) 23:49:39
>>958
配列のサイズって格納されてるの? 俺はできるだけ
vector とか使って size わかるようにして使うようにしてるけど。
960デフォルトの名無しさん:2007/12/06(木) 23:50:37
>>958
配列サイズメモリには残っていない
コンパイル中にだけ残っている
サイズ知りたければvector
961デフォルトの名無しさん:2007/12/06(木) 23:51:10
配列サイズは、メモリには残っていない
962デフォルトの名無しさん:2007/12/06(木) 23:59:07
>>958の人気にshit

ただし、newで作った配列は、どこかにサイズ情報を持ってる。返されるアドレスの直前とか。
そうでないと、delete[]で正しく開放できないからね。
963デフォルトの名無しさん:2007/12/07(金) 00:06:26
レスどうも。

スタック上の固定長配列はオフセットに化けてメモリ上には展開されないって感じでしょうか。

>>962
そういえば、delete[]はサイズ意識しますもんね。
今度newした配列見てみることにします。
964デフォルトの名無しさん:2007/12/07(金) 00:58:34
new[]でも要素数を知る方法はプログラマが用意しない限りない。
965デフォルトの名無しさん:2007/12/07(金) 08:50:47
>>933
すみません、ご指摘ありがとうございました。
966282:2007/12/07(金) 20:55:28
テキストファイルに他のプログラム用のコードを書くプログラムなのですが、
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std ;
int main(){
stringstream ss;
FILE *fp ;
for ( int t = 0 ; t < 100 ; t++ ){
ss << "data" << t ;
cout << ss.str() <<endl;
if ((fp = fopen(ss.str().c_str(), "r" )) == NULL )
return 0 ;
ss.str("");}}
上記の部分で、ファイルはresult0〜result99まで存在しているにもかかわらず
result46でプログラムが終了します。
ifの判定ミス?だとは思うのですが、どうしてそうなるのかまったくわかりません。
コンパイラはborland C++です
967デフォルトの名無しさん:2007/12/07(金) 21:05:44
答えはfcloseが無いから。
968デフォルトの名無しさん:2007/12/07(金) 21:11:57
すいません初心者で基本的なことかもしれませんが、
知っている方がおられれば教えてください

10進数で11とかだと16進数でbになると思うのですが
4桁で000bと出力するにはどうすればよろしいでしょうか?
よろしくお願いします。
969デフォルトの名無しさん:2007/12/07(金) 21:13:37
うまくいきました。ありがとうございます。

ageたり、282とか間違ってるし答えも単純だし、終わってるな俺 orz
970デフォルトの名無しさん:2007/12/07(金) 21:14:54
printf("%04x", 11);
971デフォルトの名無しさん:2007/12/07(金) 21:20:01
>>970

すいません、ありがとうございます。
04の0が抜けてました。
ほんとうにありがとうございます。
972デフォルトの名無しさん:2007/12/07(金) 22:50:12
非仮想インターフェースの使い方がいまいち解りません
多重継承時に処理のし忘れを防止するというのはわかるが
それだけのためにラッパーを作るのはどうかなという気がしないわけでもないのですが…
973デフォルトの名無しさん:2007/12/07(金) 23:04:14
使い方なんてわからなくてもいいんじゃない?
意味や意図がわかってれば

public な仮想関数は2つの役目を担っているので
public な非仮想関数と private な仮想関数に分けましょう
ってことを意識すれば public な仮想関数は気持ちわるい

そうやって1つのエンティティに1つの役目を負わすことを意識して
シンプルで扱いやすい設計ができた経験があれば
974デフォルトの名無しさん:2007/12/08(土) 02:25:51
>>972
気持ち悪いと思うならやめた方がいいと思う。
そもそもある設計手法が効果的に働くためには一定の条件が必要で、
>>972のプログラムではNVI(Non Virtual Interface)が効果的に働かない部類のものかもしれない。
将来的に不具合が出てきたら変えればいい。
パターンは大事だけど、経験も大事。
975デフォルトの名無しさん:2007/12/08(土) 07:26:29
すみません
デルファイのようにGUIでプログラムできるC++はありますか ボーランドC++以外のやつ有りますか?
976デフォルトの名無しさん:2007/12/08(土) 08:05:46
・VC(CLI + .net)
・WideStudio
977デフォルトの名無しさん:2007/12/08(土) 08:18:40
>>976
サンクス
978デフォルトの名無しさん:2007/12/08(土) 08:28:10
ドットネットと、ボーランド以外ではWideStudioしかないってことで良いかな?
なんか初めの二つは、SP2とドットネットのインストールが必須な上に作業中の動作が重いんだ
古いパソコンでもDelphi6のように動くC++が使いたいとおもった
979デフォルトの名無しさん:2007/12/08(土) 08:33:03
あと、もっとも簡単にC++でネィティブwindowsアプリを開発するにはどうしたらいいかな? ATLやWTLが簡単なの?
なんかこれでも難しいんだ・・・
980デフォルトの名無しさん:2007/12/08(土) 09:06:44
MFC
981デフォルトの名無しさん:2007/12/08(土) 09:07:28
wxWidgets
982デフォルトの名無しさん:2007/12/08(土) 10:04:45
一番簡単なのは、MFCですか? wxWidgetsですか? WTLですか? ネイティブで簡単なのが良いです
983デフォルトの名無しさん:2007/12/08(土) 10:07:57
>>982
釣りか?
一番なんてものは主観だ
全て使ってみて自分で選べ
984デフォルトの名無しさん:2007/12/08(土) 10:55:08
詳しくないが結構 MFC 嫌う人多いね。
Win32API の方が良いといって使ってたりする。
985デフォルトの名無しさん:2007/12/08(土) 11:14:23
>>978
C++Builder6
986デフォルトの名無しさん:2007/12/08(土) 11:26:15
だれかwindows APIのみを使って、windowsアプリを開発できるC++の開発環境を開発してもらえないだろうか?
987デフォルトの名無しさん:2007/12/08(土) 11:39:08
Windows APIつかえばいいじゃん
988デフォルトの名無しさん:2007/12/08(土) 11:41:42
標準入力からnを入力して、

A[n][n]の配列を宣言するにはどうしたらいいですか?
989デフォルトの名無しさん:2007/12/08(土) 11:45:19
int n;
scanf("%d",&n);
int A[n][n];
990デフォルトの名無しさん:2007/12/08(土) 11:46:20
>>989
それじゃできないです
991デフォルトの名無しさん:2007/12/08(土) 11:47:56
int **A;
A=new int*[N];
for(n=0;n<N;n++)A[n]=new int[N];
992デフォルトの名無しさん:2007/12/08(土) 11:51:49
vector< vector<int> > A(10);
for(int n=0;n<10;n++)A[n].resize(10);
993989:2007/12/08(土) 11:52:25
>>990
できる。
994989:2007/12/08(土) 11:53:33
$ cat a.c
#include <stdio.h>

int main() {
int n;
scanf("%d", &n);
int A[n][n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
A[i][j] = i * 10 + j;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
printf("A[%d][%d]=%d\n", i, j, A[i][j]);
return 0;
}
$ cc -std=c99 a.c
$ ./a
3
A[0][0]=0
A[0][1]=1
A[0][2]=2
A[1][0]=10
A[1][1]=11
A[1][2]=12
A[2][0]=20
A[2][1]=21
A[2][2]=22
995デフォルトの名無しさん:2007/12/08(土) 11:54:32
C99とかだろ?
996デフォルトの名無しさん:2007/12/08(土) 12:07:32
>>992
> vector< vector<int> > A(10);
> for(int n=0;n<10;n++)A[n].resize(10);

10 ってなんだ?

cin>>n;
vector<vector<int> > A(n,vector<int>(n));

かな。
997デフォルトの名無しさん:2007/12/08(土) 12:08:28
>>993
定数値が必要っていわれます
998デフォルトの名無しさん:2007/12/08(土) 12:10:12
C99じゃないんだろ。
999デフォルトの名無しさん:2007/12/08(土) 12:10:22
>>997
自分の環境も書かずに質問するからそうなる。
1000デフォルトの名無しさん:2007/12/08(土) 12:25:09
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。