C/C++の宿題を片づけます 49代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/10(水) 17:10:47あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows/Linux/等々
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【前スレ】
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/
【歴代スレは>>2-13】
0075デフォルトの名無しさん
2005/08/14(日) 21:37:17すいません。
大きいノード全てを表示します。
0076デフォルトの名無しさん
2005/08/14(日) 21:48:19{
printLargerForTreeAux(data, n, 0);
}
void printLargerForTreeAux(struct TreeNode* data,int n,int pos)
{
if (data == NULL)
return;
if (data->value > n)
printf("% 3d %d\n", pos, data->value);
printLargerForTreeAux(data->left, n, 2 * pos + 1);
printLargerForTreeAux(data->right, n, 2 * pos + 2);
}
0077デフォルトの名無しさん
2005/08/15(月) 00:35:52元の文字列が250文字あって、たとえば50文字を挿入するとかってヤヴァくね?
0078デフォルトの名無しさん
2005/08/15(月) 00:40:18宿題だし。それに、それを呼び出し元が管理するか呼び出し先が
管理するかはポリシーの問題。
007977
2005/08/15(月) 00:46:05でも挿入位置のチェックだけは呼ばれた側でやるの?おかしくね?
0080デフォルトの名無しさん
2005/08/15(月) 00:50:010081デフォルトの名無しさん
2005/08/15(月) 00:56:50でも与えられたポインタがNULLかどうかはチェックしない、と
0082デフォルトの名無しさん
2005/08/15(月) 00:59:410083デフォルトの名無しさん
2005/08/15(月) 01:07:550084デフォルトの名無しさん
2005/08/15(月) 01:08:140085デフォルトの名無しさん
2005/08/15(月) 01:15:02strcpy()の受け側の文字列が十分に大きくない場合 (つまり、プログラマが間抜けか不精で、
コピーする前にサイズをチェックすることを怠った場合)、何が起こるかわからない。
固定長文字列を溢れさせるのはクラッカーが好むテクニックである。
0086デフォルトの名無しさん
2005/08/15(月) 10:12:490087デフォルトの名無しさん
2005/08/15(月) 10:27:53ただの宿題なんだろうし。
0088デフォルトの名無しさん
2005/08/15(月) 14:24:17[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C言語
[4] 期限: 2005年8月19日 07:30まで
[5] その他の制限:特になし
おながいします
0089デフォルトの名無しさん
2005/08/15(月) 15:35:58すまん、簡単すぎて食指が動かん。
んー・・?
たぶん>>71と同一人物だろうが、前の奴らに礼くらいしたらどうだ?
0090デフォルトの名無しさん
2005/08/15(月) 16:19:50こんな簡単なものも自分で解けなくて、本当に卒業出来るのだろうか。
0091デフォルトの名無しさん
2005/08/15(月) 16:56:490092デフォルトの名無しさん
2005/08/15(月) 17:02:03初心者なんで間違っていたらごめんなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/862.txt
0093デフォルトの名無しさん
2005/08/15(月) 17:05:44君は?
009492!=88
2005/08/15(月) 17:13:010095デフォルトの名無しさん
2005/08/15(月) 17:19:11ワロス
問題文よく嫁w
0096デフォルトの名無しさん
2005/08/15(月) 17:45:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/863.txt
0097デフォルトの名無しさん
2005/08/15(月) 18:02:11>(男:'M' 女:'F')
とあるが'M','F'以外の入力もおけ
かつ'M'以外なら女にしてもおけ?
0098デフォルトの名無しさん
2005/08/15(月) 18:04:35#include <stdio.h>
#include <string.h>
struct data {
char name[100];
char sex;
double sintyo;
double taiju;
};
int main(void) {
double d;
char buf[2];
struct data person;
for (; ; ) {
printf("名前入力:"); scanf("%s", person.name);
if (!strcmp(person.name, "end")) break;
printf("性別入力:"); scanf("%1s", buf);
person.sex = buf[0];
printf("身長入力:"); scanf("%lf", &person.sintyo);
printf("体重入力:"); scanf("%lf", &person.taiju);
d = person.taiju - (person.sintyo - 100) * 0.9;
printf("\n%s%sは、平均体重より%fkg%sです。\n\n", person.name, person.sex == 'M' ? "君" : "さん", d > 0 ? d : -d, d > 0 ? "多い" : "少ない");
}
return 0;
}
0099デフォルトの名無しさん
2005/08/15(月) 18:07:11>97
0100デフォルトの名無しさん
2005/08/15(月) 18:25:04%c
0101デフォルトの名無しさん
2005/08/15(月) 18:28:46改行が残ってバッファをクリアしたりするのメンドイ。
0102デフォルトの名無しさん
2005/08/15(月) 18:34:35なるへそ
(もれだったらgetchar()かな)
0103デフォルトの名無しさん
2005/08/15(月) 18:34:360104デフォルトの名無しさん
2005/08/15(月) 18:36:38#include <stdio.h>
#include <string.h>
struct data{
char name[100];
char sex;
double sintyo;
double taiju;};
int main(void) {
struct data unko;
while(1) {
int namelen = 0;
double heykin;
const char* govi;
printf("名前入力:");
fseek(stdin, SEEK_END, 0);
while(namelen < sizeof(unko.name)) {
int c = getchar();
if(NULL != strchr("\n\r", c)) { fseek(stdin, SEEK_END, 0); break; }
unko.name[namelen++] = c; }
if(namelen == sizeof(unko.name)) { printf("名前長っ!\n"); break; }
unko.name[namelen] = '\0'; if(strcmp(unko.name, "end") == 0) break;
printf("性別入力:"); scanf("%c", &unko.sex);
if(unko.sex == 'M') govi = "君";
else if(unko.sex == 'F') govi = "さん";
else { printf("ホモお断り。\n"); break; }
printf("慎重入力:"); scanf("%lf", &unko.sintyo);
heykin = (unko.sintyo < 100.)? 0.9 / ((101-unko.sintyo) * 2.): (unko.sintyo - 100.) * 0.9;
printf("体重入力:"); scanf("%lf", &unko.taiju);
if(unko.taiju < heykin) printf("%s%sは、平均体重より%.1f少ないです。\n", unko.name, govi, heykin - unko.taiju);
else printf("%s%sは、平均体重より%.1f重いです。\n", unko.name, govi, unko.taiju - heykin);}
return 0;}
0105デフォルトの名無しさん
2005/08/15(月) 18:44:37end入力以外でかってに終了するのはいくない
0106デフォルトの名無しさん
2005/08/15(月) 19:01:390107デフォルトの名無しさん
2005/08/15(月) 19:05:25例え format c: とか rm /* とか動いてもw
0108デフォルトの名無しさん
2005/08/15(月) 19:06:490109デフォルトの名無しさん
2005/08/15(月) 19:22:24011096
2005/08/15(月) 20:20:25性別として男と女しか認めないのはあまりに保守的で時代遅れだと思った。
それから、「さん」は性別にかかわりなく使える一般的な敬称だと思ってそうした。
反省はしていない。
0111デフォルトの名無しさん
2005/08/15(月) 22:48:34実用的には、「男」「女」以外に「不明」が必要だな。
0112デフォルトの名無しさん
2005/08/15(月) 22:55:11未回答とかはありかも(webのアンケートとか)
0113デフォルトの名無しさん
2005/08/15(月) 23:16:51未回答、男、女、男女の4通りの答えがあった。
てか、燃料くれよ。
0114デフォルトの名無しさん
2005/08/15(月) 23:23:32理にかなってるだろそれは。
まあ欲を言えば、チェックボタンを押す順番も取得したいところだが。
0115デフォルトの名無しさん
2005/08/16(火) 00:44:41構造体の再利用は考えないでいいのか?
一人目以降のデータを上書きだと実用的じゃないよな?
0116デフォルトの名無しさん
2005/08/16(火) 00:57:56宿題ごときに実用もクソもないと思われ。
このレベルの問題で再利用もクソもないと思われ。
こんなデータを上書きされても別に誰も困らないと思われ。
0117デフォルトの名無しさん
2005/08/16(火) 01:03:240118デフォルトの名無しさん
2005/08/16(火) 01:04:240119デフォルトの名無しさん
2005/08/16(火) 01:34:01http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/864.txt
012088
2005/08/16(火) 01:35:240121デフォルトの名無しさん
2005/08/16(火) 01:37:11012288
2005/08/16(火) 01:41:03012388
2005/08/16(火) 01:46:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/865.txt
0124デフォルトの名無しさん
2005/08/16(火) 01:52:58char NAMAE[100];
char SEX;
double SHINTYOU;
double TAIJYUU;
012588
2005/08/16(火) 01:54:38それさっき気付いたんですけど、また更新前のを送ってしまいました。orz
0126デフォルトの名無しさん
2005/08/16(火) 02:05:28おまえ今日から2軍な。
0127デフォルトの名無しさん
2005/08/16(火) 02:39:510128デフォルトの名無しさん
2005/08/16(火) 02:51:500129デフォルトの名無しさん
2005/08/16(火) 05:22:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/866.c
汎用の動的配列構造体はいろんな場面で使えると思います
あと、大きな改良ポイントはユーザー(もしくはテストベクタ)からの入力データを
どのように正規化するかかな
0130デフォルトの名無しさん
2005/08/16(火) 07:15:420132129
2005/08/16(火) 09:50:13866.cの修正点として2点
1)PERSON_INIT_NUMを0に設定するとセグフォがでるのを修正
2)引数なしで起動なら標準入力からで、コマンドラインからファイル名を入力したら
それを読み込むように変更しました.要望があればうpします
あとは、気が向いたら読み込んだデータをsqliteを使って保存するように変更してみますか
0133デフォルトの名無しさん
2005/08/16(火) 22:40:34kumikoさんがあり得ないほど太っている件
0134デフォルトの名無しさん
2005/08/16(火) 22:50:03体重と平均体重が一緒の場合はどうすればいい?
0135デフォルトの名無しさん
2005/08/17(水) 01:34:12double menseki(double,double);
int main()
{
double a,b,c;
c=menseki(a,b);
printf("底辺--");
scanf("%lf",&a);
printf("高さ--");
scanf("%lf",&b);
printf("面積は%.2fです\n",c);
return 0;
}
double menseki(double a,double b)
{
double c;
c=a*b/2;
return c;
}
面積が0.00になるんですが、どうしてでしょうか?
0136デフォルトの名無しさん
2005/08/17(水) 01:36:260.00になるだけまし
a, bが不定なのに参照している
未定義動作。ハードディスクをフォーマットされてな
0137デフォルトの名無しさん
2005/08/17(水) 01:39:180138デフォルトの名無しさん
2005/08/17(水) 01:41:520139デフォルトの名無しさん
2005/08/17(水) 01:42:45自分でa,bを自分で入力して面積をだしたいと思ったのです
0140デフォルトの名無しさん
2005/08/17(水) 01:43:530141デフォルトの名無しさん
2005/08/17(水) 01:46:021. 自分でa,bを自分で入力して
2. 面積をだしたい
その順序で組めよ
なぜa, bが不定なのか考えたのか?
0142デフォルトの名無しさん
2005/08/17(水) 01:58:41お、できた 順序か
サンクスです
0143デフォルトの名無しさん
2005/08/17(水) 02:01:53cは関数mensekiで定義される・・・とかかんがえてるんじゃなかろーか。
この手の説明をキチンとするには、プログラミングの代入ってどんなんとか、
関数は定義と呼び出しがあるんだとか、順番だとか、副作用だとか。のーみそがおかしくなる。
0144デフォルトの名無しさん
2005/08/17(水) 02:07:11>cは関数mensekiで定義される
なんかそんな感じです。
本見ながらやってるんだけど
面積を求める関数を作れみたいな問題でした
0145デフォルトの名無しさん
2005/08/17(水) 02:17:36プログラムでは数学で混用されている(という認識はないかもしれないが)
3種類のイコールが区別される。3種類のイコールとは、恒等(==)、代入(=)、
定義(関数の定義によって行う)。
0146デフォルトの名無しさん
2005/08/17(水) 02:39:07→ソースファイルが出来る
ソースファイルをコンパイルする
→実行ファイルが出来る
実行ファイルを実行する
→メモリにプログラムが読み込まれ、下準備した後main()から実行される。
メモリにはコード領域、スタック、ヒープがある。
ソースコードにはコード領域とヒープ領域の一部を書く。
実行時にはコード領域の内容を順次実行する。
なんか、上手な説明がないかなぁ。
0147デフォルトの名無しさん
2005/08/17(水) 11:53:46仕組みとか解説する勢いだな。
0148デフォルトの名無しさん
2005/08/17(水) 15:39:49・自動変数は最初はゴミが入っているので代入して綺麗にしないといけない
・変数は演算、代入で値が変わる
で、最後に
これらを踏まえた上でアルゴリズムを組みましょう
最初のうちはこんなもんでいいんじゃない?
0149デフォルトの名無しさん
2005/08/18(木) 19:09:390150デフォルトの名無しさん
2005/08/18(木) 19:23:050151デフォルトの名無しさん
2005/08/18(木) 19:39:20頭悪いな。
0152デフォルトの名無しさん
2005/08/18(木) 22:18:48他のスレでは別の意味で使うが(^^;;
0153デフォルトの名無しさん
2005/08/19(金) 23:28:15簡易シェルを作れと言われているんですが、
こんな感じですか? 問題点があったら教えてください。
int main()
{
char buffer[0x100];
for(;;)
{
printf(">");
if( gets(buf)==NULL)
{
break;
}
printf("入力されたコマンドは%sです\n",buffer);
}
return 0;
}
0154デフォルトの名無しさん
2005/08/19(金) 23:31:45gets 関数は境界チェックが無くて危険なので fgets 推奨。
あとは特に問題はないと思う。
0155129
2005/08/20(土) 00:33:51まだ他人に評価してもらうほどのものじゃないぞ・・・
printf(">");のあとにfflush(stdout);するのがいいんじゃないか
気をつけるべき点は>>154が言ってるようにユーザからの入力部分だな
バッファオーバーフローの話はいつまでたってもなくならんね
readline()使うとか。。プラットフォームに依存しちゃうか
0156デフォルトの名無しさん
2005/08/20(土) 00:35:260157デフォルトの名無しさん
2005/08/20(土) 09:57:50[2] 問題文(含コード&リンク):
縦64bit×横64bit、0と1の二値画像データを縦64bit×横64bitのまま細線化し、出力する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: C
[4] 期限: 2005年9月1日8:50まで]
[5] その他の制限:読み込むデータは「01.txt」とする。出力するデータの名前は任意とする。
いつもお世話になっております。
文字認識のプログラムをCで制作するにあたり、データの拡大&細線化する作業をしています。
しかし、肝心の細線化がうまくいかず、つまっております。
こんな、クソミソなへたれですがお力添えいただければうれしいです。
プログラム↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/868.txt
読み込むデータ↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/869.txt
0158デフォルトの名無しさん
2005/08/20(土) 10:18:42どういう細線化のアルゴリズムを採用したか。
どういう結果になるつもりか。
実際にはどういう結果になったか。
これらの情報があるとヒントが出せると思う。
0159デフォルトの名無しさん
2005/08/20(土) 11:41:19fflushは必要ない
getsの段階でflushされる
0160デフォルトの名無しさん
2005/08/20(土) 13:36:53あ〜おはアルファベットに直し、それ以外は 'N' を表示するプログラムを作れ、という問題で
とりあえず 'あ' だけ処理してみようと以下のルーチンを作成してみたのですが 'N' しか表示されません。
どうすれば正しく表示されるのでしょうかorz
#include <windows.h>
#include <stdio.h>
void main() {
WCHAR* temp = L"あいうえおかきくけこ";
for(int i = 0; i < wcslen(temp); i++) {
switch (temp[i]) {
case 'あ':
printf("%c", 'A');
break;
default:
printf("N");
}
}
}
0161デフォルトの名無しさん
2005/08/20(土) 13:44:08case L'あ':
0162デフォルトの名無しさん
2005/08/20(土) 14:57:51ああああ!Lが抜けてたのか!
申し訳ない。orz
無事解決しました。ありがとうございました。
0163デフォルトの名無しさん
2005/08/20(土) 16:11:26ひらがな全てをアルファベットに直す場合はどうするのでしょう?
地道に全てのひらがなに対応したswitchを用意するものなんですか?
0164デフォルトの名無しさん
2005/08/20(土) 17:34:340165デフォルトの名無しさん
2005/08/20(土) 17:49:160166デフォルトの名無しさん
2005/08/22(月) 00:09:47がむばってlisp組みます。はい。
0167デフォルトの名無しさん
2005/08/22(月) 00:19:070168デフォルトの名無しさん
2005/08/22(月) 00:38:020169デフォルトの名無しさん
2005/08/22(月) 00:40:46とりあえず、アトムとconsセルをどーやって表現するか決めるであります。
0170デフォルトの名無しさん
2005/08/22(月) 00:46:49どうでしょうか?
するとそれをコンパイルするコンパイラは次のような仕様になるはずです。
1. 入力が空ならなにも出力せずに正常終了。
2. 入力になにかあったら"Syntax Error" を出力して終了。
これなら Hello World に毛の生えたようなプログラムでコンパイラが作れるはずです。
0171デフォルトの名無しさん
2005/08/22(月) 00:53:26最低限、何らかの制御構造があるべきだと思う。
0172デフォルトの名無しさん
2005/08/22(月) 00:58:00[1] 授業単元: 夏休みの宿題
[2] 問題文(含コード&リンク):
コンパイラまたはインタプリタを設計/実装せよ。以下の機能をつけること。
変数、式、配列、関数定義/呼び出し、組み込み関数、制御構造
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): MinGW
[3.3] 言語:C
[4] 期限:9月1日まで
[5] その他の制限:文法はひととおり
0173デフォルトの名無しさん
2005/08/22(月) 00:59:580174デフォルトの名無しさん
2005/08/22(月) 01:08:50Smalltalk なんか制御構造無いっていえばないのに。
まあ式は代入だけで演算子なしでおっけーだろうけど。
組み込み関数は +1 と =0? と出力命令位でいいのかな?
マシン語みたいに配列は一個固定、1 byte だけ入れられるにして、
変数も一個だけ
制御構造は変数が0の時だけ次の命令を実行しないと、goto文でも付けておけば
いいかな?
関数定義はめんどくさいね。スタック作らないとだめなのかな?
■ このスレッドは過去ログ倉庫に格納されています