【初心者歓迎】C/C++室 Ver.44【環境依存OK】
>>949 どこで詰まってるのかよくわからんが、代数的に解かなくても
>m 番の石を最初に取り除く.直前に除いた石から時計回りに石をたどって k 個目を取り除く作業を,残り 1個になるまで繰り返す
この手順通りのことを実際にやるようなプログラムを作ればいいんでない?
0xFFFLの最後のLが意味わからんとです
Lを付けるとlong型
0L とか 4095L とか
>>949 継子立てでいけると思うけど、どうダメだった?
巨大配列の男ですが、ご指摘してくれたように、領域確保が要素数に対して少なかったという理由でした。
課題もなんとか終わりました。質問に対して答えてくれた方々、本当にどうもありがとうございました。
どこで聞けばいいのかわからないのでとりあえずここで。
配列のサイズってどこに格納されているんでしょうか?
gcc -S でソースを眺めてみたところ特にサイズらしきデータが見当たらず、
sizeofした結果は即値で見つけやすかったんですが。
関係あるかどうかinfo scopeでは配列はサイズは表示されるのですが、
型と要素数では表示されないんですね。
スレ違いなら誘導よろ。
>>958 配列のサイズって格納されてるの? 俺はできるだけ
vector とか使って size わかるようにして使うようにしてるけど。
>>958 配列サイズメモリには残っていない
コンパイル中にだけ残っている
サイズ知りたければvector
配列サイズは、メモリには残っていない
>>958の人気にshit
ただし、newで作った配列は、どこかにサイズ情報を持ってる。返されるアドレスの直前とか。
そうでないと、delete[]で正しく開放できないからね。
レスどうも。
スタック上の固定長配列はオフセットに化けてメモリ上には展開されないって感じでしょうか。
>>962 そういえば、delete[]はサイズ意識しますもんね。
今度newした配列見てみることにします。
new[]でも要素数を知る方法はプログラマが用意しない限りない。
>>933 すみません、ご指摘ありがとうございました。
966 :
282: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++です
答えはfcloseが無いから。
968 :
デフォルトの名無しさん:2007/12/07(金) 21:11:57
すいません初心者で基本的なことかもしれませんが、
知っている方がおられれば教えてください
10進数で11とかだと16進数でbになると思うのですが
4桁で000bと出力するにはどうすればよろしいでしょうか?
よろしくお願いします。
うまくいきました。ありがとうございます。
ageたり、282とか間違ってるし答えも単純だし、終わってるな俺 orz
printf("%04x", 11);
971 :
デフォルトの名無しさん:2007/12/07(金) 21:20:01
>>970 すいません、ありがとうございます。
04の0が抜けてました。
ほんとうにありがとうございます。
非仮想インターフェースの使い方がいまいち解りません
多重継承時に処理のし忘れを防止するというのはわかるが
それだけのためにラッパーを作るのはどうかなという気がしないわけでもないのですが…
使い方なんてわからなくてもいいんじゃない?
意味や意図がわかってれば
public な仮想関数は2つの役目を担っているので
public な非仮想関数と private な仮想関数に分けましょう
ってことを意識すれば public な仮想関数は気持ちわるい
そうやって1つのエンティティに1つの役目を負わすことを意識して
シンプルで扱いやすい設計ができた経験があれば
>>972 気持ち悪いと思うならやめた方がいいと思う。
そもそもある設計手法が効果的に働くためには一定の条件が必要で、
>>972のプログラムではNVI(Non Virtual Interface)が効果的に働かない部類のものかもしれない。
将来的に不具合が出てきたら変えればいい。
パターンは大事だけど、経験も大事。
すみません
デルファイのようにGUIでプログラムできるC++はありますか ボーランドC++以外のやつ有りますか?
・VC(CLI + .net)
・WideStudio
ドットネットと、ボーランド以外ではWideStudioしかないってことで良いかな?
なんか初めの二つは、SP2とドットネットのインストールが必須な上に作業中の動作が重いんだ
古いパソコンでもDelphi6のように動くC++が使いたいとおもった
あと、もっとも簡単にC++でネィティブwindowsアプリを開発するにはどうしたらいいかな? ATLやWTLが簡単なの?
なんかこれでも難しいんだ・・・
MFC
wxWidgets
一番簡単なのは、MFCですか? wxWidgetsですか? WTLですか? ネイティブで簡単なのが良いです
>>982 釣りか?
一番なんてものは主観だ
全て使ってみて自分で選べ
詳しくないが結構 MFC 嫌う人多いね。
Win32API の方が良いといって使ってたりする。
だれかwindows APIのみを使って、windowsアプリを開発できるC++の開発環境を開発してもらえないだろうか?
Windows APIつかえばいいじゃん
標準入力からnを入力して、
A[n][n]の配列を宣言するにはどうしたらいいですか?
int n;
scanf("%d",&n);
int A[n][n];
int **A;
A=new int*[N];
for(n=0;n<N;n++)A[n]=new int[N];
vector< vector<int> > A(10);
for(int n=0;n<10;n++)A[n].resize(10);
993 :
989:2007/12/08(土) 11:52:25
994 :
989: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
C99とかだろ?
>>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));
かな。
C99じゃないんだろ。
>>997 自分の環境も書かずに質問するからそうなる。
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。