C/C++の宿題なら俺にやらせろ!
■ このスレッドは過去ログ倉庫に格納されています
0001C++房 ◆9ye75cT6
NGNG今まで8ヶ月、毎日休まず一生懸命C++を勉強してきた。
わからない宿題若しくは処理があったら俺にやらせてくださいm(_ _)m
ただしソート、2分木など俺が5分以上悩むの問題はお断りだ。
他の手強に聞いてくれ
0153142=148
NGNGてゆーか EffectiveC++読まなきゃだめだね(苦笑
どうもさんくすでした。
0154デフォルトの名無しさん
NGNGどういうときに使う?
あんまり意味があるとは思えないんだけど
0155デフォルトの名無しさん
NGNGhas-a時に、
ベースクラスのprotectedメンバを操作する場合
(ベースクラスのコンストラクタやデストラクタがprotected等)や、
ベースクラスの仮想関数をオーバーライドする場合。
0156デフォルトの名無しさん
NGNG所有/包含の代わりに使う。「それを実装手段とする」だね。また継承元
のprotedtedメンバを使えるという点で、包含よりも柔軟な事がある。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNGあちらのスレは何気に荒れているからかな。
0159デフォルトの名無しさん
NGNGなるほどねぇ、俺は絶対やりたくないですね
面倒でも所有させちゃいます。
0160デフォルトの名無しさん
NGNG所有/包含とfriend class宣言のセットが一番ポピュラーなんでしょうな。
0161デフォルトの名無しさん
NGNGだから所有の1つの方法なんだって。
>>160 のいってるように、
protectedにアクセスするだけなら
メンバとして所有してfriendを使ってもいい。
オーバーライドが必要ならprivate継承。
0162デフォルトの名無しさん
NGNGって書いてあるけど、何をそんなにムキになってるんだ?
0163デフォルトの名無しさん
NGNGあんまりバカだから。
>>159
> なるほどねぇ、俺は絶対やりたくないですね
> 面倒でも所有させちゃいます。
とかバカ丸出し。
その所有を実現するために、
場合によっては必要なんだよ。
夏ってこんな奴ばっかりだな。
0164デフォルトの名無しさん
NGNG必要な例って何?
すべて所有で置き換え可能だから、
C#やJavaではprivate継承がないんでしょ。
0165デフォルトの名無しさん
NGNG>>155>>156
0166デフォルトの名無しさん
NGNGだから、プロテクトメンバーを捜査する必要がある場面って何かある?
勿論柔軟なプログラムが可能だろうけど、親クラスの実装に強く依存することになるんでない?
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGSOFTBANK刊、「詳説C++」のP165〜P168に、まさにそのような論議が
書かれています。XはYを使って実装される、の関係を表すのに、できる
だけ包含/所有を使い、private/protected継承は使わないように、と
推奨されています。
他の欠点として、継承すると、親クラスは一つしか使えないことがあげ
られています。包含/所有を使えば、いくつでもはめ込むことが可能で
すから。
protectedなメンバを参照する機会というのは、実際、あまりないでしょ
う。論理的な組み立ての流れの中で、そのような場合も考慮しておか
なければならないでしょうが、実務の世界では親クラスの設計が悪い
時に現れてくるかもしれません。
0169花男
NGNGC言語の構造体の問題です。
「1:00から5:00まで4時間分の電車の時刻表がある。この時間帯(1:00〜4:00)
のある時刻を入力し、次の電車の到着時刻は何分後で何時何分か表示せよ
(時刻表)
1時 10分 24分 35分 40分 55分 59分
2時 13分 26分 37分 49分
3時 7分 15分 45分
4時 30分 51分 」
ちなみに自分はプログラムではCが初めてでそれも数ヶ月はじめたばかりの厨房です。
せめてヒントを下さい。よろしくお願いいたします。
0170デフォルトの名無しさん
NGNGして所有させればいいように思う。それから A* ap = &b; とできないので、
ポリモーフィックな動作をさせられないのは意外だった。
##include <iostream>
using namespace std;
class A {
protected:
int i;
A() { i = 111; }
virtual void print() const { cout << i << endl; }
};
class B : private A {
int j;
public:
B() : A() { j = 222; }
void print() const { A::print(); cout << j << endl; }
};
int main()
{
B b;
b.print();
}
0171デフォルトの名無しさん
NGNG構造体を使わずに書けるが。
0172花男
NGNG0173デフォルトの名無しさん
NGNG時刻を構造体に入れるの?
0174デフォルトの名無しさん
NGNG#include <stdio.h>
struct train_arrival {
int hour;
int min;
} TA[] = {{1, 10}, {1, 24}, {1, 35}, {1, 40}, {1, 55}, {1, 59}, {2, 13}, {2, 26}, {2, 37},
{2, 49}, {3, 7}, {3, 15}, {3, 45}, {4, 30}, {4, 51}, {-1, -1}};
int main(void)
{
int h, m, i = 0, j, k;
printf("現在時刻を入力して下さい(hh:mm)? ");
scanf("%d:%d", &h, &m);
while (TA[i].hour >= 0)
if ((j = TA[i].hour * 60 + TA[i].min) < (k = h * 60 + m)) i++;
else break;
printf("次の電車の到着まで後 %d分で、%d時%d分に到着します。\n", j - k, j / 60, j % 60);
return 0;
}
0175花男
NGNG本当に申し訳ありません。やむを得ぬ用事が出来てしまったためまた改めてこのスレで
質問します。またどうぞよろしくお願いします。
173さんの質問は・・・恐らくint型で。
0176デフォルトの名無しさん
NGNG0177花男
NGNG0178デフォルトの名無しさん
NGNG>>174さんのサービスについてのコメントはなしですか?
0179デフォルトの名無しさん
NGNGマルチだからあちこちのスレ見てて忙しいんだよ
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGこういう場合は答えを書かずにつき合ってやった方がいいのか。
これからそうしようか。
0182デフォルトの名無しさん
NGNG機能が変容するから多態できなくて当然
class battle_ship {
protected:
report local_order(command) ;
public:
void sail(void) ;
void move(two_dimensional_direction) ;
void attack(battle_ship) ;
void attack(submarine) ;
void communicate(station) ;
void suicide_bomb(void) ;
} ;
class space_battle_ship : protected battle_ship {
public:
void takeoff(void) ;
void move(three_dimensional_direction) ;
void attack(space_battle_ship) ;
using battle_ship::communicate ;
using battle_ship::suicide_bomb ;
void hadouho(three_dimensional_direction) ;
} ;
battle_ship yamato ;
space_battle_ship uchu_senkan_yamato ;
0183デフォルトの名無しさん
NGNGまったくやる気の見えないやつはマルチポストしたりしてうざかったりするので
ずばり答を書いて追い払うこともあったりする(w
今回はヒントをくれということだったんで、少しの間付き合ってみようかと思ってた。
0184デフォルトの名無しさん
NGNGusing宣言を行うと、何か特別な意味があるの?virtualがついてない
から関数のオーバライドとも違うようだけど・・・・
>>183
なるほど。これから場の雰囲気を読むようにしますね。
0185デフォルトの名無しさん
NGNGメソッドをインポートしているだけ。
void communicate() { battle_ship::communicate(); }と記述しなくていい。
0186デフォルトの名無しさん
NGNG>継承すると、親クラスは一つしか使えない
ってどゆこと?
0187デフォルトの名無しさん
NGNG例えば Stackクラスを Listクラスで実装するとして
class Stack {
List l1;
List l2;
};
のように Listクラスを Stackクラスの中に必要なだけ埋め込み
できるけど、継承したら Listクラスの実体は一つしかできない。
0188デフォルトの名無しさん
NGNGん?特にbattle::とスコープを解決しなくても、public継承なら親クラスの
関数はそのまま継承されてくると思うけど?usingをつけないと都合の
悪いことがあるのかな、と思って。
0189デフォルトの名無しさん
NGNGスマソ、protected継承でした。逝ってきます・・・・・・
0190186
NGNG0191デフォルトの名無しさん
NGNGそしたら、こういう場合の B::print は、public属性なのでしょうか、それとも
protected属性なのでしょうか。わけが分からなくなってきました(~_~;)
class A {
int i;
public:
A() { i = 111; }
void print() const { cout << i << endl; }
};
class B : protected A {
public:
using A::print; // void print() const { A::print(); }
};
class C : protected B {
public:
using B::print;
};
int main()
{
B b;
C c;
b.print();
c.print();
}
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGそんなもんやってみれば一発じゃん
0194花男=169
NGNG特に174さん問題解いてくださって本当にありがとうございました!
すれ違いになってしまって174さんの書きこみ(解答)を見ずに175、177
のレスを書いた後席をはずしてしまいました。というか外出しておりまして
現在も外から書いております。本当に返事が遅れてしまい申し訳ありませんでした。
現在用事を済ませ、見せていただいています。あんなに早く解ける方がいるとは
思いませんでした。
今更なのですが{-1, -1}(8行目)がどういうことか分からないのですが
解説して頂けないでしょうか。
このプログラムそのものに関してはこれからじっくり考えさせて頂きたいと
思います。
0195デフォルトの名無しさん
NGNGwhile (TA[i].hour >= 0) の所でwhileを抜ける為。
0196花男
NGNGレス有難うございます。もう少し分かりやすく説明して頂けないでしょうか。
0197デフォルトの名無しさん
NGNG>>195さんも書かれていますが、最低限のエラートラップです。
配列添字が範囲を超えてしまうのを防いでいます。
0198デフォルトの名無しさん
NGNGそれから入力する時刻が1:00〜4:00までに限定されていますが、これは
チェックしてないので、チェックするように変えてみてください。
0199花男
NGNG考えさせてください。プログラムの全体の形は理解するのに時間がかかると
思いますので・・
もっと厨房的な質問になってしまうのですが
printf("現在時刻を入力して下さい(hh:mm)? "); の(hh:mm)
のような表記で時間が出るのでしょうか。本当に厨房な質問ですみません。
0200デフォルトの名無しさん
NGNG数ヶ月でそれかよ、、、そんなの始めて2日以内のところだろ、、
0201デフォルトの名無しさん
NGNG違う違う。11:22のようにコロン( : )を間に挟んで入力してくれ、という意味。
例えば 1時20分なら 1:20[enter] と入れればよい。
0202花男
NGNGお恥ずかしい限りです。
じっくり考えたいと思います。皆さんありがとうございました。
0203デフォルトの名無しさん
NGNG本に書いてあることを鵜呑みにしないで、実践することも必要だぞ。
こんなケース無いだの、ベースクラスが悪いだの、
頭の中で空想しても何も得ることはない。
要は所有が必要なときに、その実装として何が最適かだ。
メンバで持つだけで解決できなかったり、
ベースクラスが変更できないときに、
実装できません・ベースクラスの設計が悪いです・
僕は悪くありませんじゃプロとして失格だろ。
自分の知識の無さが恥ずかしくて、自分を正当化ばかりしていないで、
設計の選択肢の1つとして覚えておけ。
誰もお前に、その手法を強制しているわけじゃない。
言ってること理解できるか?
0204名無しさん@Emacs
NGNGカコイイ!! 確かにそうだと思う.
…でもベースクラスの設計が悪かったんだよぉ, 残業になったのは
俺のせいじゃないよぉ、ウワアアアァァァンヽ(´Д`)ノ
…ごめん, 俺テンパってるかもしれん. 逝って来る.
0205デフォルトの名無しさん
NGNGそれよりも日本語として変。
0206デフォルトの名無しさん
NGNGパーミッションをゲットするにはどうすればいいのでしょうか?
0207デフォルトの名無しさん
NGNGベースクラスの設計が悪くてプロテクトメンバーをいじる必要があるなら、
継承させずにもう一枚少し大きめなラッパーを書きますが、何か?
0208デフォルトの名無しさん
NGNGこういう粘着の質問に答えたヤシは災難だな、いってることも矛盾だらけだし
0209デフォルトの名無しさん
NGNGどれが正しいというもんでもない。
チーム開発では統一しなきゃいかんけど。
絶対に正しいプログラムは作れないという数学的証明があるらしい。
0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG>絶対に正しいプログラムは作れないという数学的証明があるらしい。
何もしないプログラム。
nop
すぐ終わるプログラム。
halt
0212デフォルトの名無しさん
NGNGチューリングマシンの停止問題っすか?
0213デフォルトの名無しさん
NGNG0214花男
NGNGどなたか助けてください。困っている点その�@コンパイルしたら>>174 で通るんですが
「パラメーターが足りません」とエラー表示され実行されないんです。
どうしたら良いのでしょうか。
�Awhile〜else break;間の意味を解説して頂けませんでしょうか。
お願いします。
0215デフォルトの名無しさん
NGNG機種依存文字。
0216花男
NGNG0217デフォルトの名無しさん
NGNG215「丸つき数字を使うなヴォケ」ということです。
分かりましたか?
0218デフォルトの名無しさん
NGNGできた実行形式のファイルの名前は何?
0219花男
NGNG実行形式のファイル名は「shukudai.c」とつけました。
お願いします。上記の2点に関して教えてください。
0220218
NGNG他に同名のファイルがあって、そっちを実行してんじゃないかとおもった。
0221デフォルトの名無しさん
NGNGk = h * 60 + m;
while (TA[i].hour != -1) {
j = TA[i].hour * 60 + TA[i].min;
if (j >= k) break;
i++;
}
ちょっと変更してみた。多少わかり易くなったと思うけど。
これでもわからないですか?
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNGwhileの中の条件式は、配列TAが最後まで到達したかどうか見てる。
TAの初期化で最後に{-1,-1}ってのがあるだろ。それと比べてる。
これは番兵という手法で一般的に使われる。
ifの中は時と分で表されたものを分だけに直して、大小比較してる。
たとえば3時15分だったら、(3*60+15)=195分とかね。
構造体のままだと大小比較できないから分に直してるわけだ。
で、入力された時刻と時刻表を比べて入力された時刻の直後の時刻表の時刻が
出てきたらbreakしてる。
こんなもんでいいかな。
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG要はデータに絶対出てこない数値が入っていれば良いんでは?
0226花男
NGNGわかりやすく説明して頂いたように思います。
ありがとうございます。たいへん助かりました。
{-1,-1}に関しては前もどなたかにお聞きしたのですが
使い方が難しいですね。
ところでコンパイルの方は何故エラーが出てしまうのでしょう。
0227224
NGNG最後を{5,0}にすると
while (TA[i].hour >= 0)
を
while (1)
とかけるようになる。
終端検出の比較と次の到着時刻を求める比較とを
同じにすることで、ループ中の比較回数を減らす手法だと
解釈していたんだけど。
0228デフォルトの名無しさん
NGNGでも5時は (現在の仕様では) ありえないし。
でも100%現実には-1時はないから -1の法がいいけどな。
0230223
NGNGんん。おれの番兵の解釈間違ってるのか。
番兵って言葉どの本で覚えたんだっけかな。
手近にある「プログラミング作法」を開いてみると、
訳語が「番人」だったけど載ってた(以後「番人」で統一する)。
ちょっと引用すると、
>データの末尾にNONWORDを2〜3個追加しておくと、プログラムのメイン処理ルー
>プが格段にシンプルになる。これは番人(sentinel)値を追加して境界をマーク
>するテクニックの一例だ。
(「プログラミング作法」103ページ)
コードまでは載せないけど、ここに書いてあることからおれが読み取れることは
・あるデータの集まりがあって
・その末尾にありえないデータを置いておく。このありえないデータ値を「番人」と呼ぶ
・データの集まりを一通り舐めるときは番人が出現するまでループをまわす
ということなんだけど、この解釈で間違ってる?
間違ってるとすると認識を改めないと。
0231デフォルトの名無しさん
NGNGあるデータの集まりを探索するときに、末尾に必ず条件にマッチする
データ(これには番兵であるという印を付けておく必要がある)を置いて
おく。このことによって(ループのたびに行われる)終了判定の式を省く
ことができる。
ってのが(いわゆる)番兵の使用法ですよね。
たぶん223さんの頭にあるのは、Cの文字列のNULL終端子みたいな
ものだと思うのですが、そういうのを番兵と呼ぶのは、少なくとも私は
聞いたことないです。
0232223
NGNGそうです。確かにCの文字列の終端子が頭にありました。
>>174の例でいうと{5,0}とか、拡張を考えると{25,0}みたいな
ものをおいておくとループの中で
・配列の末尾かどうか
・条件に合うものかどうか
という二つの判定を一つに省くことができるということですね。
で、番兵にぶちあたったかどうかというのはループの外で判定すると。
なるほど一つ賢くなりました。ありがとうございました。
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG言語はC++かCで。
0235デフォルトの名無しさん
NGNGsprintf()
0236234
NGNG0237デフォルトの名無しさん
NGNGなんで?
0238234
NGNG0239234
NGNGここで聞いたのが間違いでした。
0240デフォルトの名無しさん
NGNGてめー、Cをなめてんじゃねーのか?
勘違いすんじゃねーよボケ!
0241デフォルトの名無しさん
NGNG本気で教えてもらいたいなら、そういうなめた態度止めろよ。
0242デフォルトの名無しさん
NGNG最初からここで質問しようとすんなよ。
ネタだと勘違いするヤツが出てくんだろが。
0243デフォルトの名無しさん
NGNG仕事で、そういう処理を書くなら、
漏れは迷わずsprintf使うけどな。
何か問題あんの?
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG'\0'で終わる、charの配列。
0246デフォルトの名無しさん
NGNGそういう処理を自分で書く宿題なのだと思われ。
0247デフォルトの名無しさん
NGNG仮数部のビット数を得るマクロとか、ありましたっけ?
0248デフォルトの名無しさん
NGNG書けばいいじゃん。IEEEの浮動小数点っしょ?
0249デフォルトの名無しさん
NGNGfloat.h嫁
0250花男
NGNG2度ほど教えて頂いたのですが、今回で最後にしますのでもう1度だけ同じ質問
に関して教えて頂きたいです。どうぞよろしくお願い致します。
>>174 という解答を頂いたのですがint h, m, i = 0, j, k;の部分が
分かりません。どうしてm, i を他の記号に置き換え、hをゼロとするのでしょうか。
あともうひとつ、仮にこの時刻表が1時〜5時までではなくて2時〜5時だった場合、{}内を
{2, 13}, {2, 26}, {2, 37},・・・以下を書いていくと思うのですが最後の
{-1, -1}はどのように書き換えればよいのでしょうか?これを本当に最後にしますので
宜しくお願いします。
0251デフォルトの名無しさん
NGNG#include <string.h>
main()
{
char ans[]="dictionary";
char guess[]="----------";
char a;
int i,count=0;
do{
printf("%s",guess);
printf("アルファベットを入力してください。:");
a=getchar();
for(i=0;i<10;i++) if(a==ans[i]) guess[i]=a;
count++;
}while(strcmp(ans,guess)!=0);
printf("正解は%sでした。\n",ans);
if(count<15)
{
printf("%d回目で正解です。あなたの勝ち。\n",count);
}
else
{
printf("%d回目で正解です。あなたの負け。\n",count);
}
}
0252デフォルトの名無しさん
NGNGゲームです。
countで、何回で正解したのかを計測している
のですが二倍ぐらいの数になってしまいます。
あと、10、11行目がdoの二回目以降、二回
実行されてしまいます。どうしてでしょう。
この本のソースは間違っているんでしょうか。
■ このスレッドは過去ログ倉庫に格納されています