トップページ⇒tech
1001コメント370KB

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】
0002デフォルトの名無しさん2005/08/10(水) 17:12:05
47代目: http://pc8.2ch.net/test/read.cgi/tech/1120522752/
46代目: http://pc8.2ch.net/test/read.cgi/tech/1119514274/
45代目: http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0003デフォルトの名無しさん2005/08/10(水) 17:12:56
44代目: http://pc8.2ch.net/test/read.cgi/tech/1116914132/
43代目: http://pc8.2ch.net/test/read.cgi/tech/1115794784/
42代目: http://pc8.2ch.net/test/read.cgi/tech/1113811213/
41代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
0004デフォルトの名無しさん2005/08/10(水) 17:13:40
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
0005デフォルトの名無しさん2005/08/10(水) 17:14:21
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
09代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
08代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
07代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
06代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
05代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
04代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
03代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
02代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
01代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0006デフォルトの名無しさん2005/08/10(水) 17:31:22
ぬるぽ
0007デフォルトの名無しさん2005/08/10(水) 17:32:53
次すれ
http://pc8.2ch.net/test/read.cgi/tech/1122705615/
じゃねの?
0008デフォルトの名無しさん2005/08/10(水) 17:37:00
VIPに汚染されたスレなんか誰がいくか
0009デフォルトの名無しさん2005/08/11(木) 11:07:53
【質問テンプレ】
[2] 問題文(含コード&リンク): x1,y1,x2,y2に外接する楕円があり
点x,yがその円の内側か外側かの判定をする関数を作れ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ANSI C
 [3.3] 言語: C
[4] 期限: 9月1日まで
[5] その他の制限: なし
0010デフォルトの名無しさん2005/08/11(木) 12:02:31
(x1,y1),(x2,y2)に外接する「円」でおk?
0011デフォルトの名無しさん2005/08/11(木) 12:05:05
>>10
箱の中に入ってる楕円の中か外かというイメージです
0012デフォルトの名無しさん2005/08/11(木) 12:06:23
楕円じゃ、2点だと特定できないもんねぇ。
つーか、(x1, y1) - (x2, y2)の線分も楕円がつぶれた形と言えるし。
そうか、全ての点は内側に成らない可能性があるから判定の必要ないじゃん(ぉぃ
0013デフォルトの名無しさん2005/08/11(木) 12:09:11
(x1, y1)
(x1, y2)
(x2, y2)
(x2, y1)
の4点に外接する楕円ってこと?
0014デフォルトの名無しさん2005/08/11(木) 12:14:12
>>13
あーは子の中に入ってる楕円ってそういう意味かなるほど。
>>9
問題文をもっとわかりやすくかけよ
0015デフォルトの名無しさん2005/08/11(木) 12:16:46
申し訳ないです
0016デフォルトの名無しさん2005/08/11(木) 12:34:06
楕円の焦点が斜めにあるときも考慮するのか?と考えた瞬間思考をとめた俺ガイル
なんかうまい方法あるのかな??期待してます。
0017デフォルトの名無しさん2005/08/11(木) 12:37:54
斜めの楕円とかあり得るの?あり得るならまた問題文の不備だ罠。

>>9
ま、斜めを考慮しないなら

/* 外側なら正、楕円上ならゼロ、内側なら負を返す */
int wrt_ellipse(double x1, double y1, double x2, double y2, double x, double y)
{
double x0, y0, a, b, d;
x0 = (x1 + x2) / 2.0; y0 = (y1 + y2) / 2.0; a = (x2 - x1) / 2; b = (y2 - y1) / 2;
d = (x - x0) * (x - x0) / (a * a) + (y - y0) * (y - y0) / (b * b);
return d == 1.0 ? 0 : (d > 1.0 ? 1 : -1);
}
0018デフォルトの名無しさん2005/08/11(木) 12:38:37
さすがに斜めは無しです・・・
0019デフォルトの名無しさん2005/08/11(木) 12:39:45
>>17
おお!ありがとうございます!!!
0020デフォルトの名無しさん2005/08/11(木) 12:40:53
>>11
箱の中なら内接じゃないのか?
0021デフォルトの名無しさん2005/08/11(木) 15:19:57
a
0022お願いします。2005/08/11(木) 15:23:12
[1]初心C++
[2] 問題文:後で。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:NET2003
 [3.3] 言語: C++
[4] 期限:5時間くらい
[5] その他の制限:Array,Struct,Class,Function,Strings(Pointer無し)
0023デフォルトの名無しさん2005/08/11(木) 15:27:00
なにこいつ。問題文を用意してから纏めて書けよな。
0024デフォルトの名無しさん2005/08/11(木) 15:28:08
制限が意味不明・・・
0025デフォルトの名無しさん2005/08/11(木) 15:34:19
時間がどんどん過ぎてゆくww
5時間くらいっていつまでだwwww
0026お願いします。2005/08/11(木) 15:36:46
まず、Data Fileを見つける(下の英文)。そこには、
PhrasesとそのResponsesとが上から交互にリストしてある。
このDataFile名をchatbot.txtとする。

hello
hello to you too
my name is
thank you for telling me your name
your name
my name is Mr. Computer
my mother
tell me more about your family
I like to
why do you like this
I like
I like that too
my
this sounds important to you
I go to
Tell me more about where you go
I must
what will happen if you don't do this
bye
goodbye
0027お願いします。2005/08/11(木) 15:37:49

例えば、ユーザーがhelloと入れたらコンピューターはhello to you tooと応える
ファイルのデータをプログラム内のArrayにロードして、ユーザーのInputにパターンがあるか
探す。(find関数を使って)もしあれば、応える。Structとかも使ってよい。
==は使ってはいけない。

もし”my name is mud" や"do you know my name is" のInputなら
"thank you for telling me your name." と返す。

プログラムはランダムに選ばれる3つのDefaultResponsesも含んでなければいけない。
もし、適切なResponseがChatbotにないときにこの内の一つを返す。

ユーザーがbyeと入れたら、プログラム終了。

ユーザーInputを"I"以外全てLowercaseに変える。
0028デフォルトの名無しさん2005/08/11(木) 15:44:29
酷い英語だ。
0029お願いします。2005/08/11(木) 15:47:26
英語のを日本語に訳したんですけど
0030デフォルトの名無しさん2005/08/11(木) 15:49:24
なんか、ところどころ変な英語混ぜてルー大柴みたいな文章だな。
0031デフォルトの名無しさん2005/08/11(木) 15:57:36
ワロタw
つか酷い英語だと思ったら全部目的語を抜いてるのかよ。
"do you know my name is"ってなにかと思った。
私の名前が存在していることを知っていますかってなんじゃw
で、制限についてもうちょっとまともな説明は無いのか?
0032デフォルトの名無しさん2005/08/11(木) 16:13:54
要は人工無脳か。
0033お願いします。2005/08/11(木) 16:22:12
I hope someone is working for me,,,,
0034デフォルトの名無しさん2005/08/11(木) 17:27:17
But anybody don't do it....
0035デフォルトの名無しさん2005/08/11(木) 18:24:07
[2] 問題文:
int a=1; int b=2; int c=3;
void f(int x, int y, int z){
int b=0;
a=a+x; b=b+y; c=c+z;
printf("%d,%d,%d,",a,b,c);
}
main(){
int a;
a=10; b=20; c=30;
f(100,200,300);
printf("%d,%d,%d\n",a,b,c);
}
の出力結果が 101,200,330,10,20,330になるのですが
理解できません。解説おながいします。
[3.3] 言語: C
[4] 期限: [無期限]
0036デフォルトの名無しさん2005/08/11(木) 18:28:50
>>35
グローバルスコープとmain()関数内スコープを持つ二つのaがあることは判るかな?
同様にグローバル変数とf()関数内ローカル変数の二つのbがあるわけだ。
cは唯一グローバルにしかないからこれが一番判りやすかろう。
cの出力の結果を踏まえて、aとbについても考えてみれば判るんでないかな?
0037352005/08/11(木) 18:42:54
>>36
ありがとうございました。
とても解りやすい説明ですね。
モヤモヤが晴れてすっきりしました。
0038お願いします。2005/08/11(木) 23:28:58
>>26お願いします
0039お願いします。2005/08/11(木) 23:30:53
>>26お願いします
0040デフォルトの名無しさん2005/08/11(木) 23:57:35
制限が糞過ぎてやる気にならん。
== つかうなってなんだよ。
std::map つかわせろよ。
0041お願いします。2005/08/12(金) 00:27:29
お願いしますよ〜
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

string reply(string input)

int main()
{
string chat[100000];

ifstream file;
file.open("chatbot.txt");

for(int i=0; ; i++)file>>chat[i];

string input=" ", output=" ";

cout<<"Hello! Talk to me"<<endl;

do{
getline(cin, input);
output=reply(input);

}while(input!="bye");
0042デフォルトの名無しさん2005/08/12(金) 00:30:18
return 0;
}

string reply(string input)
{
int p1, p2

p1=input.find("hello")

ここまでやってつまってます。。。
0043デフォルトの名無しさん2005/08/12(金) 00:45:43
ああすばらしきかなstringの値渡し。
マジセンスねぇ
0044デフォルトの名無しさん2005/08/12(金) 00:50:11
データファイルを読み込む先が
std::vector<std::pair<std::vector<std::string>, std::string> >になりそうだけど、いい?
0045デフォルトの名無しさん2005/08/12(金) 00:58:38
>>41
一応動作するはず。
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <fstream>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
typedef std::vector<std::pair<std::string, std::string> > array;
array read_data_file(std::ifstream& data_file) {
    std::string input, output;
    array res;
    while (std::getline(data_file, input) && std::getline(data_file, output))
        res.push_back(std::make_pair(input, output));
    return res;
}
void convert(std::string& str) {
    const char delimiters[] = " \t,.;:\"?!";
    std::string::size_type start_index = str.find_first_not_of(delimiters);
    while (start_index != std::string::npos) {
        std::string::size_type end_index = str.find_first_of(delimiters, start_index);
        if (end_index == std::string::npos) end_index = str.length();
        if (!(end_index - start_index == 1 && str[start_index] == 'I'))
            for (std::string::size_type i = start_index; i < end_index; ++i)
                str[i] = std::tolower(str[i]);
        start_index = str.find_first_not_of(delimiters, end_index);
    }
}
0046>>45 の続き2005/08/12(金) 00:59:19
std::string random_response() {
    int r = rand() % 3;
    return r == 0 ? "yeah" : r == 1 ? "huh" : "hmm";
}
int main() {
    std::srand(unsigned int(std::time(0)));
    std::ifstream data_file("chatbot.txt");
    array res = read_data_file(data_file);
    std::string input;
    while (std::getline(std::cin, input)) {
        convert(input);
        array::iterator begin = res.begin(), end = res.end();
        while (begin != end && input.find(begin->first) == std::string::npos) ++begin;
        if (begin == end)
            std::cout << random_response() << std::endl;
        else
            std::cout << begin->second << std::endl;
        if (input.find("bye") != std::string::npos) break;
    }
}
0047予言2005/08/12(金) 01:00:27


次に>>22は、「vector は習ってないので使わないでできないでしょうか」と、言う。


0048452005/08/12(金) 01:00:35
後はまぁ頑張って。
0049デフォルトの名無しさん2005/08/12(金) 02:10:10
vecto(ry
0050デフォルトの名無しさん2005/08/12(金) 02:40:43
[2] 10進数で最大64桁の正の整数を、同じく10進数で最大32桁の正の整数で割り、小数点第一位を四捨五入して答えを表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: RedHat Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: Cのみ
[4] [2005年08月15日07:30まで]
[5] その他の制限: 標準でインストールされないライブラリは使用不可


0051412005/08/12(金) 04:55:13
#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
#include <cctype>
using namespace std;

int main()
{
srand(time(0));
string chat[100];
string input, output, sentense;
int p1, x, res;

ifstream file1;
file1.open("chatbot.txt");

if(file1.fail()) exit(1);

for(int i=0; i<100; i++)
{
getline(file1, sentense);
chat[i]=sentense;
}

cout<<"Hello! Talk to me."<<endl;
0052デフォルトの名無しさん2005/08/12(金) 04:57:08
do{
getline(cin, input);

for(int c=0; ; c++)
{input=tolower(input[c]);}

x=input.find(" i ");

if(x>=0)input.insert(x+2, " I ");


for(int i=0; i<100; i+=2)

{

p1=input.find(chat[i]);
0053デフォルトの名無しさん2005/08/12(金) 04:57:43
if(p1>=0)
{

cout<<chat[i+1]<<endl;

break;

}



}
else //Default
{
res=rand()%3;
if(res==0) {output="I have no response.";}
else if(res==1) {output="Talk to me again.";}
else {output="Try again.";}
cout<<output<<endl;
break;

}
}while(input!="bye");

return 0;
}
0054412005/08/12(金) 04:58:15
kokomade dekimasitaga umaku ikimasen teiseionegaisimasu
0055デフォルトの名無しさん2005/08/12(金) 07:36:03
>>52の4行目のfor文の終了条件が俺には見えないが・・・文字列長でいいんでないの?

あと>>52の7〜9行目みたいなのは、とりあえず大枠が完成するまで
コメントアウトしといてもいいと思う。。’I’を使わなくていいデータもあるから。。

以上C++は触ったこともない俺より。。データ型とか関数とかよくわかってないから
そのへんは他の方にtouch!!

んで>>45-46さんが書いてくれてるから見ときな。。
0056前スレの606、875です2005/08/13(土) 23:06:08
すみません前スレより参りました。
前スレの>>985のコードを組み込んだのですが、強制終了してしまいます。
私の組み込み方が悪いのかも知れませんので、前スレ985のコードを取り込んだ
すべてのコードをロダにUPしていただけませんでしょうか。お力添えよろしくお願いいたします。
0057デフォルトの名無しさん2005/08/13(土) 23:27:36
人に頼む方法もあるが、自分から情報を出すという手もある。
・自分で手を入れたソース
・出てくるエラー
・強制終了の手順
をアップしてみたら?
0058前スレの606、875です2005/08/14(日) 00:01:15
>>57
はい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
これが元のコードです。
このコードに前スレ985の関数を追加し、mainのwhileの前で呼んでも、
登録の時、ファイルを開く時にほとんどの場合、強制終了してしまいます。
0059デフォルトの名無しさん2005/08/14(日) 00:30:30
いや・・だから・・・
・問題文(条件やら前提やら全部)
・あなたが修正を加えたソース
・操作手順(データファイル作って、次に読み込ませるところまで)
・データファイルの内容
・もしコンパイル時にエラーが出るならそのエラー
をUP。
答えられる人でも情報が小出しだと、面倒で答えたくなくなるから。
聴く人も丁寧にやらなくちゃ・・・ね?
0060デフォルトの名無しさん2005/08/14(日) 00:33:37
>>56
ちゃんと動いたぞ。Linuxだけど。細かくは見てない。
0061前スレの606、875です 2005/08/14(日) 02:05:07
>>59
すみません。何度も同じ問題を貼るのはよくないのかな。。と思いましたので・・・。
では、機能追加の分も付け加えてもう一度貼らせていただきます。

問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/857.txt
元コード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
修正したコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/858.txt

>>60
実行されたコードをロダにUPしていただけるとありがたいのですが・・・。
よろしくお願いいたします。
0062デフォルトの名無しさん2005/08/14(日) 02:39:05
>>61
で、前スレ985(987)が来たわけだが。こっちに差し替えって読まなかった?
/* ファイルを読む */
void ReadFromFile() {
    Person* person = (Person*)malloc(sizeof(Person));
    FILE* stream = fopen(OUTPUT_PATH,"r");
    if (stream) {
        while (fscanf(stream,"%d%s%s",&person->number,&person->name,&person->position) == 3) {
            person->next = NULL;
            SetMember(person);
            person = (Person*)malloc(sizeof(Person));
        }
        fclose(stream);
        free(person);
    }
}
0063デフォルトの名無しさん2005/08/14(日) 12:18:11
[2] 問題文(含コード&リンク):ファイル内容を16進表記で表示するコマンドを作成せよ。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年08月15日まで
[5] その他の制限: %xは使用してはいけない
0064デフォルトの名無しさん2005/08/14(日) 13:25:28
>>63

#include <stdio.h>
#include <stdlib.h>

static const char* hexDigits = "0123456789abcdef";
static const char  hexMask = (1 << 4) - 1;
static const int   width = 10;

int main(int argc, char* argv[]) {
  FILE* fp;
  int len, bytes = 0;
  unsigned char buf[256];
  if(argc <= 1) {
    fprintf(stderr, "こう使う。hexdump FILE\n");
    exit(1);
  }
  if((fp = fopen(argv[1], "rb")) == NULL) {
    fprintf(stderr ,"ひらけね\n");
    exit(1);
  }
  while(0 < (len = fread(buf, sizeof(char), sizeof(buf), fp))) {
    int i;
    for(i=0; i < len; i++) {
      putchar( hexDigits[(buf[i] >> 4) & hexMask] );
      putchar( hexDigits[ buf[i]       & hexMask] );
      printf("%s", ((++bytes % width) == 0)? "\n": " ");
    }
  }
  fclose(fp);
  return 0;
}
0065デフォルトの名無しさん2005/08/14(日) 13:44:29
>>64
ありがとうございます!
0066デフォルトの名無しさん2005/08/14(日) 16:39:48
%xがダメなら%Xを使えばいいじゃない。
0067デフォルトの名無しさん2005/08/14(日) 16:41:41
おまえ、クビ。
0068デフォルトの名無しさん2005/08/14(日) 16:49:53
王妃様に向かってなんてことを
0069デフォルトの名無しさん2005/08/14(日) 16:59:26
整数のデータを線形リストに格納しているとする。リストは次のように
定義され、空はマクロNULLで表す。

struct TreeNode{
int value;
struct TreeNode* left;
struct TreeNode* right;
};

二分木と正の整数nを受け取り、nよりも大きな値を持つ要素の位置と
値を出力する、次のような名前と型を持つC言語の関数を定義せよ。

void printLargerForTree(struct TreeNode* data,int n);

ただし二分木中のノードの位置は次のような数で表現することにする。

・ルートノードの位置は0で表現される。
・あるノードの位置がxで表されるとき、そのleft側の子ノードの位置は2x+1
そのright側の子ノードの位置は2x+2で表される。

この関数を定義するにあたって、printLargerForTreeの引数を一つ増やした
補助的な関数
void printLargerForTreeAux(struct TreeNode* data,int n,int pos);
を再帰的に定義し、この関数を利用してvoid printLargerForTreeを定義せよ。

お願いします。
0070デフォルトの名無しさん2005/08/14(日) 17:06:59
>>69
>>1のテンプレ読もうか
0071デフォルトの名無しさん2005/08/14(日) 18:12:38
[2] 問題文(リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/859.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年08月16日まで
[5] その他の制限:問題文に記載

0072デフォルトの名無しさん2005/08/14(日) 21:04:51
>>71 初心者なので間違ってたらごめんなさい(><)
char *str_insert(char *s1,char *s2,int pos)
{
char temp[255];
int i, j = 0, len;

for (i = 0; s1[i] != '\0'; i++); len = i;
if (len < pos) return NULL;

for (i = pos - 1; s1[i] != '\0'; i++, j++) temp[j] = s1[i];
temp[j] = '\0';

for (i = 0; s2[i] != '\0'; i++); len = i;

for (i = 0; i < len; i++){
s1[pos - 1] = s2[i];
pos++;
}

for (i = 0; temp[i] != '\0'; i++){
s1[pos - 1] = temp[i];
pos++;
}
s1[pos - 1] = '\0';
return s1;
}
0073デフォルトの名無しさん2005/08/14(日) 21:13:37
>>71
#include <string.h>

char *str_insert(char *s1,char *s2,int pos)
{
  size_t len1, len2;
  len1 = strlen(s1);
  len2 = strlen(s2);
  if (pos > len1)
    return NULL;
  memmove(s1 + pos + len2, s1 + pos, len1 - pos);
  memmove(s1 + pos, s2, len2);
  s1[len1 + len2] = '\0';
  return s1;
}
0074デフォルトの名無しさん2005/08/14(日) 21:20:31
>>69
大きいノードすべてを表示するのか、それとも1つだけでよいのか
0075デフォルトの名無しさん2005/08/14(日) 21:37:17
>>74
すいません。
大きいノード全てを表示します。
0076デフォルトの名無しさん2005/08/14(日) 21:48:19
void printLargerForTree(struct TreeNode* data,int n)
{
  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
>71
元の文字列が250文字あって、たとえば50文字を挿入するとかってヤヴァくね?
0078デフォルトの名無しさん2005/08/15(月) 00:40:18
>>77
宿題だし。それに、それを呼び出し元が管理するか呼び出し先が
管理するかはポリシーの問題。
0079772005/08/15(月) 00:46:05
>78
でも挿入位置のチェックだけは呼ばれた側でやるの?おかしくね?
0080デフォルトの名無しさん2005/08/15(月) 00:50:01
与えられた引数でできることはするポリシーなんだよ、うぜーな
0081デフォルトの名無しさん2005/08/15(月) 00:56:50
>80
でも与えられたポインタがNULLかどうかはチェックしない、と
0082デフォルトの名無しさん2005/08/15(月) 00:59:41
>>77は自分でコード出さない割に必死だな
0083デフォルトの名無しさん2005/08/15(月) 01:07:55
テストケースからプログラム作ることで、そこら辺の曖昧さを明確にせざるをえない
0084デフォルトの名無しさん2005/08/15(月) 01:08:14
str系のNULLチェックしないのはスタンダードポリシーだ
0085デフォルトの名無しさん2005/08/15(月) 01:15:02
たとえば、
strcpy()の受け側の文字列が十分に大きくない場合 (つまり、プログラマが間抜けか不精で、
コピーする前にサイズをチェックすることを怠った場合)、何が起こるかわからない。
固定長文字列を溢れさせるのはクラッカーが好むテクニックである。
0086デフォルトの名無しさん2005/08/15(月) 10:12:49
じゃあ、どうすればいいの?(;´Д`)
0087デフォルトの名無しさん2005/08/15(月) 10:27:53
課題出してる人だってわかって書いてるだろ
ただの宿題なんだろうし。
0088デフォルトの名無しさん2005/08/15(月) 14:24:17
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/861.txt
[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
>88
すまん、簡単すぎて食指が動かん。

んー・・?
たぶん>>71と同一人物だろうが、前の奴らに礼くらいしたらどうだ?
0090デフォルトの名無しさん2005/08/15(月) 16:19:50
高専だか何だか知らないが、
こんな簡単なものも自分で解けなくて、本当に卒業出来るのだろうか。
0091デフォルトの名無しさん2005/08/15(月) 16:56:49
仕事を回されたとき自分じゃできず、周囲に迷惑をかけるぱたーん?
0092デフォルトの名無しさん2005/08/15(月) 17:02:03
>>88
初心者なんで間違っていたらごめんなさい

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/862.txt
0093デフォルトの名無しさん2005/08/15(月) 17:05:44
>92
君は?
009492!=882005/08/15(月) 17:13:01
このスレでCを勉強してるものです
0095デフォルトの名無しさん2005/08/15(月) 17:19:11
>94
ワロス
問題文よく嫁w
0096デフォルトの名無しさん2005/08/15(月) 17:45:24
>>88
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/863.txt
0097デフォルトの名無しさん2005/08/15(月) 18:02:11
>96
>(男:'M' 女:'F')

とあるが'M','F'以外の入力もおけ
かつ'M'以外なら女にしてもおけ?
0098デフォルトの名無しさん2005/08/15(月) 18:04:35
>>88
#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
>98
>97
0100デフォルトの名無しさん2005/08/15(月) 18:25:04
>98
%c
0101デフォルトの名無しさん2005/08/15(月) 18:28:46
>>100
改行が残ってバッファをクリアしたりするのメンドイ。
■ このスレッドは過去ログ倉庫に格納されています