C/C++の宿題片付けます 130代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 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
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

前スレ
C/C++の宿題片付けます 129代目
http://pc12.2ch.net/test/read.cgi/tech/1247438792/
2デフォルトの名無しさん:2009/08/14(金) 09:33:52
>>1おつ
3デフォルトの名無しさん:2009/08/14(金) 10:55:13
すげー130代目まで続いてるよー!
4デフォルトの名無しさん:2009/08/14(金) 10:59:01
それだけのアホどもの単位を取らせて来てやったんだな俺らは
奴ら社会に出て苦労してるだろうなw
5デフォルトの名無しさん:2009/08/14(金) 11:29:09
別の道に進んでるだろうから無問題
学生時代に理解できなかった分野へわざわざ進もうと思うだろうか

でもその矛盾に気がつかないままカリキュラムに流されるアホもいるんだろうな
で、速効でクビになって最近の若いやつらはとか情報系の大卒は使えんとか言われるわけだ
6デフォルトの名無しさん:2009/08/14(金) 11:33:58
★コードは回答者によって十分なテストが行われており、そのまま提出
しても大丈夫な場合が多いですし回答者どうしで相互チェックもそれな
りに行われているとも思いますが、それでも求められているもの
と異なる場合があり得ます

★回答者は質問点プレで記載されている処理系上で動作するように
回答すれば良いのですが、他の処理系でコンパイル可能だが
著しく動作が異なるとか動作しない場合は処理系依存と明記した
ほうがいいと思います。
(ライブラリが無く他の処理系ではコンパイル不能な場合はこの
限りではありません)
7デフォルトの名無しさん:2009/08/14(金) 15:56:04
[1] 授業単元:
    プログラミング
[2] 問題文(含コード&リンク):
    適当な事例問題(ex.最初のN個の素数を印字せよ)を作成し、5ステップ以上で段階的詳細化せよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Micro Soft Visual C++ 2008
 [3.3] 言語: C言語
[4] 期限: 2009年8月14日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
  制限は特にありません。

各ステップの理論などを、プログラムのコメント文、処理構造を構造化言語で表現してもらえるとありがたいです。
事例問題はなんでも構いません、むしろ簡単な事例だとありがたいです。
少々長い問題ですが申し訳ありません、お願いします。

8デフォルトの名無しさん:2009/08/14(金) 20:09:39
「最初のN個の素数を印字せよ」っていう問題ならともかく
そういうの丸投げしたらばればれでしょ
9デフォルトの名無しさん:2009/08/14(金) 21:12:56
前スレの一部、T大学のK先生に通報しました
10デフォルトの名無しさん:2009/08/14(金) 21:14:37
前スレにも書きましたが次スレができたみたいなのでこちらにも。
条件がつきたされました。
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
                  作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
                    として含まれていれば加点。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] Visual Studio 2005
 [3.3] 言語:C言語
[4] 期限: 8月17日(月)17:00(早いほうが望ましい)
[5] その他の制限: 習ったのはttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です
             この範囲内で作って頂けると嬉しいです。
             #include <windows.h>は使わないようにお願いします。
             出来れば色んな方の作品があることが望ましいです。
        (new)ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。

よろしくお願いします。
11デフォルトの名無しさん:2009/08/14(金) 21:18:45
>>9
なんと\(^o^)/
12デフォルトの名無しさん:2009/08/14(金) 21:42:22
未だにscanfとか教えてるのな、、、
13デフォルトの名無しさん:2009/08/14(金) 22:46:53
>>8
すいません、では金額を入力すると札と銭を判定するプログラムという仮定でどうでしょう?
ex)
金額: 26324
10000: 2枚
5000: 1枚
1000: 1枚
500: 0枚
100: 3枚
10: 2枚
5: 0枚
1: 4枚

これを段階的にお願いしたいです。
14デフォルトの名無しさん:2009/08/14(金) 23:00:53
Si国大学?
15デフォルトの名無しさん:2009/08/14(金) 23:26:18
>>14
大学を晒したところで有益になることがあると思いますか?
16デフォルトの名無しさん:2009/08/14(金) 23:29:10
>>10
多分>>9脅してるだけだろ前スレで似たようなことやってるやついたし
本当ならドンマイw夏だし変なやつ沸いてんだろ
17デフォルトの名無しさん:2009/08/14(金) 23:35:49
>>15
いや、晒すって程のもんでもないだろ
>>10の出してるページのインデックスページにちゃんと四国大学って書いてるんだし
18デフォルトの名無しさん:2009/08/14(金) 23:40:40
>>10なら分かるはずだよ
T大学のK先生
1910:2009/08/14(金) 23:45:21
>>16
だといいですw
>>17
15は僕じゃないですが四国大学でもないです。
2010:2009/08/14(金) 23:47:07
>>18
その情報だけならHP見たらわかりますからねえ
ちなみにメールは学内アドからしか送れないはずですがどうしました?
21デフォルトの名無しさん:2009/08/14(金) 23:56:00
>>20
学内アドから外部に送れないのは知ってるけど
外部から学内に送れないとは聞いたことない
実際1回目の課題についてヤフメで質問したらちゃんと返ってきたよ
2210:2009/08/15(土) 00:04:06
>>21
知らなかった・・・
学内→学外は可能ですけどね
23デフォルトの名無しさん:2009/08/15(土) 00:04:51
>>10の人気に嫉妬
24デフォルトの名無しさん:2009/08/15(土) 01:04:00
>>22
メールのやりとりもできるし、メッセでお話もできますよん
25デフォルトの名無しさん:2009/08/15(土) 19:27:44
>>13
ラウンジの9904.txt
適当に書いて適当にしかチェックしてないからバグ見つけたら自分で直せ
わかんないことへの質問は受け付けない
26デフォルトの名無しさん:2009/08/15(土) 19:44:49
随分とまた偉そうな方ですね…
27デフォルトの名無しさん:2009/08/15(土) 21:33:44
それはともかく
gcc -mno-cygwin
オプションで
#include <conio.h>
getch();
が使えました。
28デフォルトの名無しさん:2009/08/16(日) 16:35:26
>>25
ありがとうございます。
質問させてください、既婚ですか?よかったら・・・
まぁ自分男ですがww
29デフォルトの名無しさん:2009/08/16(日) 16:52:19
宿題を回答させたあげく嫁まで提出させるとはなんたる鬼畜
3010:2009/08/17(月) 04:51:40
ラストの書き込みです。
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
                  作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
                    として含まれていれば加点。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] Visual Studio 2005
 [3.3] 言語:C言語
[4] 期限: 今日の17:00
[5] その他の制限: 習ったのはttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です
             この範囲内で作って頂けると嬉しいです。
             #include <windows.h>は使わないようにお願いします。
             出来れば色んな方の作品があることが望ましいです。
        (new)ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。

よろしくお願いします。
31デフォルトの名無しさん:2009/08/17(月) 06:23:09
cout << "
[1] 授業単元:夏休みの課題(テーマが見つかりません)
[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。
               プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] Visual Studio 2005
 [3.3] 言語:C言語 <windows.h> は使わないようにお願いします。
[4] 期限: 今日
[5] その他の制限: 習ったのは http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。
        ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。";
32デフォルトの名無しさん:2009/08/17(月) 06:33:51
endlもつけてやりなよ。
33デフォルトの名無しさん:2009/08/17(月) 10:01:42
>>30
>>25のプログラムをちょこちょこっと書き換えれば文字列以外はできるなw

>>31
改行コード処理されなくね?w
34デフォルトの名無しさん:2009/08/17(月) 11:18:51
このままでは前スレのmain()再帰を提出するしかなさそうだな
>>31はC++だし
35デフォルトの名無しさん:2009/08/17(月) 12:28:38
>>34
#include <stdio.h>
int sub(const unsigned char *data){
  int bytes, length, lines;

  printf("%s", data);
  for(bytes=0, length=0, lines=0; data[bytes]; bytes++) {  // bytes = strlen(data);
    length++;
    if(data[bytes] == '\n') lines++;
    if(data[bytes] > 0x7f) { // S-JISの漢字は1文字が2バイト(ここの条件文だけは段階的に詳細可)
      if(! data[++bytes]) break; // 漢字の1バイトで終了となった場合
    }
  }
  printf("%d bytes, %d 文字, %d 行\n", bytes, length, lines);
  return 0;
}

int main(){
  static const unsigned char data[] =
"[1] 授業単元:夏休みの課題(テーマが見つかりません) " "\n"
"[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。 " "\n"
"               プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。 " "\n"
"[3] 環境 " "\n"
" [3.1] OS: WindowsXP " "\n"
" [3.2] Visual Studio 2005 " "\n"
" [3.3] 言語:C言語 <windows.h> は使わないようにお願いします。 " "\n"
"[4] 期限: 今日 " "\n"
"[5] その他の制限: 習ったのは http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。 " "\n"
"        ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。" "\n";

  return sub(data);
}
3610:2009/08/17(月) 16:26:07
>>35
ありがとうございます。
これはどういったプログラムなのでしょうか?
また
int main(){
  static const unsigned char data[] =
"[1] 授業単元:夏休みの課題(テーマが見つかりません) " "\n"
"[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。 " "\n"
"               プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。 " "\n"
"[3] 環境 " "\n"
" [3.1] OS: WindowsXP " "\n"
" [3.2] Visual Studio 2005 " "\n"
" [3.3] 言語:C言語 <windows.h> は使わないようにお願いします。 " "\n"
"[4] 期限: 今日 " "\n"
"[5] その他の制限: 習ったのは http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。 " "\n"
"        ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。" "\n";

  return sub(data);
}
の部分は何を意味してるのでしょう?
3710:2009/08/17(月) 16:55:33
ありがとうございました。
38デフォルトの名無しさん:2009/08/18(火) 18:34:08
>>10
文字列のquicksortやれ。オリジナリティ以外の条件は満たすだろう。
3938:2009/08/18(火) 18:34:49
うっかりマジレスしてしまった。すまん。
40デフォルトの名無しさん:2009/08/18(火) 20:54:55
マジレスでいいじゃないですか。

再帰といえば‥‥‥、エイトクイーンとかはどうですか?
41デフォルトの名無しさん:2009/08/18(火) 23:27:53
>>25 C++だけどいいのか。
42デフォルトの名無しさん:2009/08/19(水) 04:36:09
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):問題の基準に従い、
任意のローカルフォルダに置いた、指定したwords.txtの指定行から指定した行数の英単語を読み込み、
マージソートをして表示するプログラムを作成せよ。
同じようにヒープソートや基数ソートのプログラムも作成せよ。
問題の定義はhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9906.txt
指定されたwords.txtはサイズが大きいので他ロダに
http://www1.axfc.net/uploader/Ne/so/60050.txt&key=msortからDLしてください
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC 2008
 [3.3] 言語:C言語
[4] 期限:2009年8月21日まで
[5] その他の制限:細かい指定はファイルに書いてある通りです。ポインタと整列アルゴリズムまで習いました。
43デフォルトの名無しさん:2009/08/19(水) 19:27:44
[1] 授業単元:ウインドウズプログラミング
[2] 問題文(含コード&リンク):C言語のみで円グラフを作成せよ。
問題文と自分でガンガッタ途中経過は↓にあります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9907.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:VC 2008
 [3.3] 言語:C言語
[4] 期限:2009年8月21日
[5] その他の制限:C言語のみ(++や#は不可)
44デフォルトの名無しさん:2009/08/19(水) 20:17:35
>>43
面倒だからプロジェクトごとうpしてくれ
45 ◆CW6LlqZOVU :2009/08/19(水) 21:15:24
>>44
http://loda.jp/endraw/?id=1
つ「ぷろじぇくと(2.4M)」
46デフォルトの名無しさん:2009/08/19(水) 21:38:05
Windowsの関数つかっちゃいけないのかw
47デフォルトの名無しさん:2009/08/19(水) 22:11:26
VCなのにC99
48デフォルトの名無しさん:2009/08/20(木) 00:48:38
>>43
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9908.txt
円を分割するまではやったから
文字入れとかC89でやりたいとかは自分でやってくれ
49 ◆/91kCCQXBo :2009/08/20(木) 01:23:28
>>43
double rad=(point[0]/i)*2*3.141592;//ラジアン算出
double x=sin(rad)*10;
double y=-cos(rad)*10;
Pie(hdc,
0, 0, rc.right, rc.bottom,
(int)x+rc.right/2, (int)y+rc.bottom/2, rc.right/2, 0);
50 ◆CW6LlqZOVU :2009/08/20(木) 06:40:30
>>48-49
返信遅れてすいません
非常に助かります、ありがとうございました
これからどこを間違っていたかチェックしてみます
51デフォルトの名無しさん:2009/08/20(木) 21:33:18
>>46
ビデオメモリを直接叩くとかしないとw
52デフォルトの名無しさん:2009/08/21(金) 00:03:38
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2) を作ってもらいたいです…
53デフォルトの名無しさん:2009/08/21(金) 00:05:39
>>52
お安い御用だ!
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
return NULL;
}
54デフォルトの名無しさん:2009/08/21(金) 00:06:56
>>53
おいおい、何か引数はもらってるんだから使わなきゃダメだろ


55デフォルトの名無しさん:2009/08/21(金) 00:10:55
>>53の江戸っ子っぷりに惚れた
56デフォルトの名無しさん:2009/08/21(金) 00:11:32
strstrがmemのやつです… 速いほうが良いです…
57デフォルトの名無しさん:2009/08/21(金) 00:15:25
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):10×10マスの碁盤の内から、scanf命令で入力した2値をx,y座標として、
  その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。
  両者とも0から9までが入力されるものとします(エラー判定不要)。
  入力時の問い合わせメッセージは自由に表示させて下さい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++ 2008
 [3.3] 言語:C言語
[4] 期限: 2009年8月24日まで
[5] その他の制限:C言語のみ 多次元配列使用不可
58デフォルトの名無しさん:2009/08/21(金) 00:17:30
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
(void)p, (void)len1, (void)q, (void)len2;
return NULL;
}
/* 冗談 */
59デフォルトの名無しさん:2009/08/21(金) 00:22:49
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
p[len1] = '\0';
q[len2] = '\0';
return strstr(p, q);
}
60デフォルトの名無しさん:2009/08/21(金) 00:23:00
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
return strstr(p,q);
}
これでそれなりに動くんじゃね?
61デフォルトの名無しさん:2009/08/21(金) 00:29:40
連投すいません。
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):10×10マスの碁盤の内から、scanf命令で入力した2値をx、y座標として、
  その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。
  両者とも0から9までが入力されるものとします(エラー判定不要)。
  入力時の問い合わせメッセージは自由に表示させて下さい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++ 2008
 [3.3] 言語:C言語
[4] 期限: 2009年8月24日まで
[5] その他の制限:C言語のみ(++、#不可) 多次元配列使用不可
  
  よろしくお願いします。
62デフォルトの名無しさん:2009/08/21(金) 00:39:12
>>61
#include<stdio.h>

int main(void){
int x, y;
int data[10*10]={0};

while(1){
fprintf(stderr, "\nInput x y : ");
scanf("%d %d", &x, &y);
data[y*10+x]=1-data[y*10+x];
printf("\n");
for(y=0;y<10;y++){
for(x=0;x<10;x++) printf("%s", data[y*10+x]?"■":"□");
printf("\n");
}
}

return 0;
}
63デフォルトの名無しさん:2009/08/21(金) 00:44:12
>>56
動作は遅いが作り上げるまでが早い
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
unsigned int i;

if(len1<len2) return NULL;
for(i=0;i<len1-len2;i++,p++){
if(memcmp(p, q, len2)==0) return p;
}
return NULL;
}

回答を待ちきれなければBM法でググればソースが落ちてるよ
64デフォルトの名無しさん:2009/08/21(金) 00:56:06
>>52
BM法、BMH法を上回る超速アルゴリズムで実装した。比べてみな。

char* memmem(unsigned char *p, unsigned int N, unsigned char *q, unsigned int M){
unsigned int n,k,t[256];
for(n=0 ;n<256; n++) t[n] = M+1;
for(n=0; n<M; n++) t[ q[n] ] = M-n;
n=0;
while(n+M<=N){
if( memcmp(&p[n], q, M)==0 ) return (char*)(p+n);
n += t[ p[n+M] ]; } return NULL; }
6564:2009/08/21(金) 01:00:43
ここら辺参照。

検索の歴史 一文字進化するのに掛かった年数は、なんと… http://d.hatena.ne.jp/siokoshou/20060325

「たった一文字」進化するのに掛かった年数が。なんと。10年!! スゲーーーー!ありえない〜。一文字ですよ、一文字。
10年間誰もあと一文字に気づかなかったんだねぇ。こうやってみるとSundayすごい。すごすぎる。
6661:2009/08/21(金) 02:28:50
ありがとうございます。
非常に言いにくいんですが、問題文に抜けがありました。

[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):「for/while命令で表示した」10×10マスの碁盤の内から、
  scanf命令で入力した2値をx、y座標として、
  その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。
  両者とも0から9までが入力されるものとします(エラー判定不要)。
  入力時の問い合わせメッセージは自由に表示させて下さい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++ 2008
 [3.3] 言語:C言語
[4] 期限: 2009年8月24日まで
[5] その他の制限:C言語のみ(++、#不可) 多次元配列使用不可
  
  本当に申し訳ありません。よろしくお願いします。
67デフォルトの名無しさん:2009/08/21(金) 02:29:42
>>66
>>62の何が不満なの?
6861:2009/08/21(金) 02:55:20
勘違いすいません。
int data[10*10]={0}; の所でいきなり10×10マスの盤を表示させて
いるのかと思いましたが、for(y=0;y<10;y++){ for(x=0;x<10;x++)〜〜
の所で表示させるマス数を指定していたようでした。
for/whileでマス表示させていないと勘違いしていました。
本当にプログラム自体がド素人なので。
6961:2009/08/21(金) 02:59:12
int data[10*10]={0};
stderr
data[y*10+x]=1-data[y*10+x];
printf("%s", data[y*10+x]?"■":"□");
上記は何を表していますか?
70デフォルトの名無しさん:2009/08/21(金) 03:07:13
配列用意
標準エラー出力
反転
表示
7161:2009/08/21(金) 03:12:29
>>70
詳しく教えてください。
お願いします。
72デフォルトの名無しさん:2009/08/21(金) 07:27:40
プログラム分かんないのに人の作ったのにケチ付けるなんて
相当度胸のある奴だなw
73デフォルトの名無しさん:2009/08/21(金) 08:30:57
>>61
#include <stdio.h>

int main(void)
{
int i, x, y;

scanf("%d", &x);
scanf("%d", &y);

for(i=0; i<y; i++) puts("□□□□□□□□□□");
for(i=0; i<x; i++) printf("□");
printf("■");
for(i=x+1; i<10; i++) printf("□");
putchar('\n');
for(i=y+1; i<10; i++) puts("□□□□□□□□□□");

return 0;
}
74デフォルトの名無しさん:2009/08/21(金) 10:19:04
puts("□□□□□□□□□□");
putchar('\n');
上記は何を表していますか?

って言われそうw
75デフォルトの名無しさん:2009/08/21(金) 10:28:57
>>25が質問を受け付けないって書いた気持ちがわかるw
76 ◆/91kCCQXBo :2009/08/21(金) 11:56:39
>>061 コメント付けろ、だろ。 参考>>062
#include<stdio.h>
int main(void) {
  int x, y;
  int data[10*10]={0}; // data[0]を0で初期化、他のdataは0が設定される。

  while(1) {
    // 10x10の表を出力します。
    for(y=0; y<10; y++) {
      for(x=0; x<10; x++)
        if(data[y*10+x] != 0) // 1なら"■"、0なら"□"を出力。
          printf("■");
        else
          printf("□");
      printf("\n");
    }
    printf("\nInput x y : ");
    if(scanf("%d %d", &x, &y) != 2) {
      scanf("%*s"); continue; // 値の入力に失敗した場合。
    }
    if(x<0 || y<0 || x>9 || y>9) continue; // 入力した値のチェック
    data[y*10+x] = 1; // 指定の位置は1に変更。
  }
}
7761:2009/08/21(金) 12:49:24
>>76
説明ありがとうございます。
>>73
他にもこんな方法があったんですね。ありがとうございます。
78デフォルトの名無しさん:2009/08/23(日) 18:08:27
>>42
並び替えの基準が不明瞭です。問題の並び替えの例が間違っていませんか?
7978:2009/08/23(日) 19:20:01
失礼、逆からみてなんですね
80デフォルトの名無しさん:2009/08/23(日) 21:47:16
逆に並べた場合でも、aaaとzaの位置おかしくないか?
81デフォルトの名無しさん:2009/08/24(月) 02:53:15
桁数優先とは書いてないけどそういうことなんかな
82デフォルトの名無しさん:2009/08/26(水) 19:08:20
1] 授業単元:プログラミング
[2] 問題文 クワインマクラスキー法をC言語で実現
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
 [3.3] 言語:C言語
[4] 期限: 2009年9月4日
83デフォルトの名無しさん:2009/08/27(木) 02:07:13
[1] 授業単元:プログラミング
[2] 問題文: 2が一番小さい素数,3が2番目に小さい・・・i番目に小さい素数を返す関数nthprime(i)を作り、
       再帰呼び出しを利用した形で書け。この関数を用いて、1〜100番目の素数までを表示させよ
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン:任意
 [3.3] 言語:C言語
[4] 期限: 2009年8月28日
84デフォルトの名無しさん:2009/08/27(木) 02:38:32
nthprime(1) = 2
nthprime(2) = 3
nthprime(3) = 5
ってなる再帰関数をつくるのか?
なんか激しく効率悪い気がするが。
85デフォルトの名無しさん:2009/08/27(木) 05:40:10
>>83
#include <stdio.h>

int nthprime(int n)
{
int i, m;
if (n <= 0) return 0;
if (n == 1) return 2;

for (m = nthprime(n-1) + 1; /* 無限ループ */; ++m) {
for (i = 2; i*i <= m; ++i) {
if (m % i == 0) break;
}
if (i*i > m) return m;
}
}

int main(void)
{
int i;
for (i = 1; i <= 100; ++i) {
printf("%d\n", nthprime(i));
}
return 0;
}
86デフォルトの名無しさん:2009/08/27(木) 08:51:07
題意通りの解答ではあるんだろうけど、やっぱり無駄が多いよな。
再帰呼び出しの中で表示していいなら呼び出しは一回で済むんだが。
87デフォルトの名無しさん:2009/08/27(木) 09:10:15
再帰らしくなくなるのでやや反則なネタ。
配列のサイズを事前に見積もれるのが前提条件になるものの
関数内にstaticな配列を用意してやって既知の素数をキャッシュするという手もある。
88デフォルトの名無しさん:2009/08/27(木) 09:24:58
素数とその前後の素数の間に、簡潔な式で表せるような関係なんてないのに、
再帰を使う意味がわかんねーよw
89デフォルトの名無しさん:2009/08/27(木) 10:37:08
[1] 授業単元:プログラミング演習
[2] 問題文:構造体triangeleはメンバとして、各頂点の座標を表す構造体pointのp1,p2,p3を持つ。
また関数show_triangleはtriangleの内容を表示する。
乱数を利用してtriangleのインスタンスを1つ作成し、関数show_trianglwを利用して、その内容を表示せよ。
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン:任意
 [3.3] 言語:C言語
[4] 期限: 2009年8月30日
90デフォルトの名無しさん:2009/08/27(木) 12:27:31
1] 授業単元:プログラミング
[2] 問題文 クワインマクラスキー法をC言語で実現
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
 [3.3] 言語:C言語
[4] 期限: 2009年9月4日
91デフォルトの名無しさん:2009/08/27(木) 19:34:36
>>90
俺以外のこのスレの住人は誰も答えられない。
92デフォルトの名無しさん:2009/08/27(木) 19:46:09
93デフォルトの名無しさん:2009/08/27(木) 20:18:22
問題文

サーバー/クライアント型のTCPソケットプログラミングを行うとする。
サーバーをA、クライアントをBとしたときAはlisten()状態となることで
Bからの通信を受け付ける状態となる。ここで悪意のある第三者が
Cというクライアント型のアプリケーションを作成した。このCがAに
接続してしまうとAが悪意のある動きをしてしまう。そこでBというアプリ以外からの
通信を受け付けないためにはどうすればよいか。
94デフォルトの名無しさん:2009/08/27(木) 20:23:39
>>93
AとBが通信を行う際には決められた符号が必要なようにする
95デフォルトの名無しさん:2009/08/27(木) 22:15:16
Cの課題か
96デフォルトの名無しさん:2009/08/27(木) 22:26:55
どなたかよろしくお願いします!以下に問題を載せます。

入力した単語(英語・日本語)について,
会話を想定し何らかの応答を表示するプログラム(人工知能プログラム)を作成せよ.
想定会話シーンとして,その名称をプログラム実行時の冒頭に表示せよ.
応答する単語数の制限は特には設けない.

ヒント
@ 文字列のキーボードからの入力
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char data[256];
fscanf(stdin, “%s”, data);
A 文字列の一致の確認
if (strncmp(data, “hello”, strlen(“hello”)) == 0 ) {
printf(“%s”, “Nice too meet you.\n”;
}
B 無限ループ
while(1) {
ヒント@やヒントAの内容
}
#終了はControl-C

以上です。よろしくお願いします!
97デフォルトの名無しさん:2009/08/27(木) 23:27:35
>>96
テンプレに従わない馬鹿の課題はやりません
98デフォルトの名無しさん:2009/08/28(金) 00:22:14
>>96
ちゃんとやるには大変なんだけど、そういう学科なのか?
99デフォルトの名無しさん:2009/08/28(金) 00:23:39
テンプレどおりすればけっこー面白そうなのにな
100デフォルトの名無しさん:2009/08/28(金) 11:39:12
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9913.txt
上記URLの改変で、画像の90度回転・任意回転するプログラムを作る
任意回転の場合、画像を読み込む際に読み込み空白部分を埋め、斜めじゃなく正しく横に読み込ませる
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2009-9-1
101デフォルトの名無しさん:2009/08/28(金) 13:08:34
Windowsでテキストファイルをバッファに読み込して表示すると文字化けするんですが、
これはマルチバイトとANSIの話になってくるのでしょうか?テキストコードがなんであれ、
文字化けせずに自動的に綺麗に読み込んでくれるようにするにはどうすればいいのですか?
102デフォルトの名無しさん:2009/08/28(金) 13:09:32
WindowsAPIスレに池
103デフォルトの名無しさん:2009/08/28(金) 14:09:32
>>101
> テキストコードがなんであれ、文字化けせずに自動的に綺麗に読み込んでくれる
世の中のエディタがこうなってくれればいいのにねぇ
104かm:2009/08/28(金) 14:10:10
[1] 授業単元:C言語実習
[2] 問題文:
Excelからデータを抽出し表示させるプログラムを作れ。
・Excelは「会社名」「部署名」「管理No.」の項目とする。
・提出はexeファイルとソースを提出すること。
・プログラムは会社名を選択するとそれに付随した「部署名」「管理No.」が表示される。
※尚、会社名は同じ名前のものが複数ある場合全て表示させること。
[3] 環境
 [3.1] OS:WinXP Pro
 [3.2] VC
 [3.3] 言語:C
[4] 期限:2009年09月08日
[5] その他の制限:制限なし

よろしくお願いします。
105デフォルトの名無しさん:2009/08/28(金) 14:18:49
>>104
CSVファイルじゃなくってxlsから抜き出せっていうのか?
C言語実習でSDKの仕様はどこまで認められてるの?
つーか、ファイルフォーマットの指定がどうなってるの?
106デフォルトの名無しさん:2009/08/28(金) 15:29:37
>>102
ねーんだよカス
107デフォルトの名無しさん:2009/08/28(金) 15:42:39
>>106
あんじゃん、何パチこいてんの?
108デフォルトの名無しさん:2009/08/28(金) 15:50:33
まぁ確かにWindowsだったら多少ミスったりはするけど文字コード判別するためのAPIあるしな
内部取扱的に基本的にはうにこーど使うのが一番いいんだけどネ
ASCIIだのなんだのを使ってるとAPI周りの関数を使う時にうにこーどに変換して処理するから面倒っぽ
10996:2009/08/28(金) 21:46:54
すみません、テンプレがあることに気づきませんでした・・・
訂正しましたのでどなたかお願いします!

[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): 入力した単語(英語・日本語)について,
会話を想定し何らかの応答を表示するプログラム(人工知能プログラム)を作成せよ.
想定会話シーンとして,その名称をプログラム実行時の冒頭に表示せよ.
応答する単語数の制限は特には設けない.

ヒント
@ 文字列のキーボードからの入力
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char data[256];
fscanf(stdin, “%s”, data);
A 文字列の一致の確認
if (strncmp(data, “hello”, strlen(“hello”)) == 0 ) {
printf(“%s”, “Nice too meet you.\n”;
}
B 無限ループ
while(1) {
ヒント@やヒントAの内容
}
#終了はControl-C

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++
 [3.3] 言語: C・C++どちらでも可
[4] 期限: 2009年9月2日0:00まで
[5] その他の制限: 特にありません
11098:2009/08/28(金) 22:29:59
重要なことなのに無視?
ならいいわ
111デフォルトの名無しさん:2009/08/28(金) 22:30:50
98がちっとも重要に思えないw
112デフォルトの名無しさん:2009/08/28(金) 22:33:17
ぶっちゃけ、オウム返しにするプログラムでも要件を満たしていると言えなくない。
113デフォルトの名無しさん:2009/08/28(金) 22:34:01
>>110
toupper して strstr の方がよくね
とかいうの?
全て小文字、行頭決めうちでそれ以外は pardon me? でおk
114デフォルトの名無しさん:2009/08/28(金) 23:16:17
[1] 授業単元:C言語プログラミング演習
[2] 問題文:unsigned long の値を10進数の文字列に変換する関数を作成しなさい。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 2009年8月30日
11596:2009/08/28(金) 23:58:10
98さん
機械工学科です!
116デフォルトの名無しさん:2009/08/29(土) 00:06:33
[1] 授業単元: テトリス
[2] 問題文(含コード&リンク): NEXTブロックを生成、一時中断、コンティニュー
[3] 環境
 [3.1] OS: Vista
 [3.3] 言語: C++
[4] 期限: 明日
117デフォルトの名無しさん:2009/08/29(土) 00:41:30
>>114
10進数の文字列にしなさいの意味がわからない
10000000って値があったら10000000って文字列を作れってこと?

>>116
明日ってなめてんのかって>>114も明日かよっ
118デフォルトの名無しさん:2009/08/29(土) 00:46:16
std::istringstreamに食わせる方法をすぐに思いついてしまう俺は
完全なC++脳か?
119デフォルトの名無しさん:2009/08/29(土) 00:46:28
sprintf使えばいいだけじゃね?
120デフォルトの名無しさん:2009/08/29(土) 00:50:27
>>118
ビット演算で各桁切りだしてひっつければいいのかとおもった・・・
121デフォルトの名無しさん:2009/08/29(土) 01:31:40
>>120
ビット演算でやるんだ?
どうぞどうぞ
122デフォルトの名無しさん:2009/08/29(土) 07:28:09
2進数文字列と見間違えたのか
123デフォルトの名無しさん:2009/08/29(土) 09:47:51
>>116
で、ぷよぷよでもつくればいいの?
124デフォルトの名無しさん:2009/08/29(土) 09:50:02
マジカルドロップなら+10加点されます
125デフォルトの名無しさん:2009/08/29(土) 14:39:37
>>123
授業単元を見落としましたね
126デフォルトの名無しさん:2009/08/29(土) 19:21:44
>>114
#include <stdio.h>
char* ul2dec(char* buf, unsigned long val)
{
  unsigned long keta = 1000000000;
  unsigned long temp;
  int i;
  int j = 0;
  int flag = 0;
  for (i = 0; i < 10; ++i) {
    temp = val / keta;
    val -= (temp * keta);
    keta /= 10;
    if (temp) { flag = 1; }
    if (flag) {
      buf[j] = temp + '0';
      ++j;
    }
  }
  buf[i] = '\0';
  return buf;
}

int main(void)
{
  char buf[32];
  printf("[%s]\n\n", ul2dec(buf, (unsigned long )-1));
  printf("[%s]\n\n", ul2dec(buf, 1234567890));
  printf("[%s]\n\n", ul2dec(buf, 9));
  printf("[%s]\n\n", ul2dec(buf, 0));
  return 0;
}
127名無しさん@そうだ選挙に行こう:2009/08/30(日) 04:48:14
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9914.txt
問題の内容はテキスト内に書きました。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
 [3.3] 言語:C言語
[4] 期限:9月5〜10日
[5] その他の制限:C言語のみ

期限ですが出来れば早い方が好ましいです。
すみませんが宜しくお願い致します。
128名無しさん@そうだ選挙に行こう:2009/08/30(日) 04:53:21
>>127
#include <stdio.h>
#include <math.h>

int main(void)
{
double pi, r1, r2, h, V;

pi = atan2(1.0, 0.0) * 2.0;

printf("外径(m) = ");
scanf("%lf", &r1);
printf("内径(m) = ");
scanf("%lf", &r2);
printf("高さ(m) = ");
scanf("%lf", &h);

V = pi * h * (r1 * r1 - r2 * r2);

printf("中空円筒の体積:%lf(m^3)\n", V);

return 0;
}
129名無しさん@そうだ選挙に行こう:2009/08/30(日) 05:14:12
>>128さん
は、ッ早い!?
本当にありがとうございます。
130名無しさん@そうだ選挙に行こう:2009/08/30(日) 05:30:18
atan2()を使うのが嫌いな人は、pi = 3.14159265358979; とかにしといて
先生によっては「これ何?」って聞く人がいそうだから
131名無しさん@そうだ選挙に行こう:2009/08/30(日) 05:33:49
はい、わかりました。
細かい所まですみません、ありがとうございます
132名無しさん@そうだ選挙に行こう:2009/08/30(日) 06:35:02
M_PIでいいじゃんって思ったけど、VCだとダメなんだっけ。
133名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:02:26
だめじゃないよ
#ifndef M_PI
#define M_PI 3.14159265358979
#endif
こんなのもわからないの?
134名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:07:50
>>133
いやたまにね #define 使うと
「それ何ですかあ?」という出題者が多いのよ
135名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:09:51
#define _USE_MATH_DEFINES
VC++でM_PI使うなら普通こうだろw
136名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:12:00
>>132はVCだとmath.hをincludeしただけじゃM_PIが使えないって意味だろ
137名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:15:56
[1] プログラミング
[2] 特に指定はされず 適当に作って来いとのこと
[3] 環境
 [3.1] WindowsXP
 [3.3] 言語: C++
[4] 期限 9月5日
[5]制限 

よろしくお願いします
138名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:16:39
>>137
適当すぎるだろw
139名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:19:52
>>137
int main() { while(1);}
140名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:20:19
一番難しいというか選んだら負けな課題だな
141名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:24:43
適当ですいません
でも本当にわからないんです;
例えばif文を使って とかのほうがいいですかね?
142名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:27:14
メジャーな所でFizzBuzz問題でもやっとけ
それなら言い訳立つだろ
143名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:34:08
わかりました
調べてみましたが
なんとかなりそうなので
がんばります

ありがとうございました
144名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:37:25
ぐぐってみたけどFizzBuzz問題ってオートマトンなんだね
状態遷移表が書ければ楽だが逆に言えば遷移表を思いつけない人には
簡単に見えて実は難しい問題になってしまう
145名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:39:25
>>144
難しい解き方を考えてるんだな
146名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:41:20
いや正規表現の簡単なのにちょっと似ているなと思って
147デフォルトの名無しさん:2009/08/30(日) 22:45:09
【質問テンプレ】
[1] 授業単元:物理 自己学習
[2] 問題文(含コード&リンク):http://www.astro.phys.s.chiba-u.ac.jp/netlab/summer-school/TEXTBOOK/text1.pdf
ここの11ページにあるような図を書きたいけど参考にするものがなくてよく分かりません
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:g++ 4.3.3
 [3.3] 言語: C++
[4] 期限:無期限だけど早めに解決したいです
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
とくになし

お願いします
148デフォルトの名無しさん:2009/08/30(日) 23:18:03
>147
上の図1.3(x-t)の方なのか、それとも、図1.4(x-n)の方なのか
x-tの方は、Xを叩くかSDLとかOpenGLでシコシコするか
x-nの方は、gnuplotでも使ったら楽と思う、図(グラフ)を描くだけならね
グラフを描くソフトウェア作りたいのならgnuplotのソースコードを眺めたらいいと思う
149デフォルトの名無しさん:2009/08/30(日) 23:20:41
つEXCEL
150147:2009/08/30(日) 23:33:34
>>148
x-uの方です
グラフを書きたいというか(1.16)式を使って各点のデータ出したいです
とりあえず作ったけどだめでした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9916.cpp
151デフォルトの名無しさん:2009/08/30(日) 23:46:48
>150
17 for(i=0;i<=N-1;i++){
18 for(j=1;j<=100-1;j++)
19 u[i+1][j] = u[i][j] - (1.0/2) * nu *(u[i][j+1] - u[i][j-1]);
20
21 }
たぶんこうか、論理式をさらっと見て、文法チェックしてみた
17行目と19行目を変更した
152デフォルトの名無しさん:2009/08/31(月) 00:02:15
>>151
ありがとうございます
端がちょっとおかしいけど中心部は例のようにできました
153デフォルトの名無しさん:2009/08/31(月) 19:37:03
>>114
#include <stdio.h>
#define BUFFER_SIZE 32
char *ultos_recur(char *buf, unsigned int num, char *bufend){
 if (num >= 10) {
  buf = ultos_recur(buf, num / 10, bufend);
 }
 if (buf != bufend) {
  *buf++ = num % 10 + '0';
 }
 return buf;
}
void ultos(char *buf, unsigned int num, int buffer_size){
 *ultos_recur(buf, num, buf + buffer_size - 1) = '\0';
}
int main()
{
 char buf[BUFFER_SIZE];
 unsigned int val;
 val = (unsigned int)-1;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 ultos(buf, val, 4);
 printf("[%u] -> [%s]\n\n", val, buf);
 val = 1234567890;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 val = 9;
 ultos(buf, val, BUFFER_SIZE);
 printf("[%u] -> [%s]\n\n", val, buf);
 return 0;
}
154デフォルトの名無しさん:2009/08/31(月) 21:36:51
C言語であるパラメータの構造体のアドレスをゲットする関数について教えてください。

例えば
typdef struct AAAAA{
int a;
int b
}AAAAA_t;
のような構造体がある場合、

get(int param)
{
  ?????
}

を下記のようなmain関数から呼び出すと、paramに上記構造体のアドレスが返却されるという
ものを実装してますが
どうしてもうまくいきません。
宜しくお願いします。
int main(void)
{
get( ??? );
}
155デフォルトの名無しさん:2009/08/31(月) 22:04:56
意味が分からん
引数は何だ?
156デフォルトの名無しさん:2009/08/31(月) 22:07:54
http://pc12.2ch.net/test/read.cgi/tech/1250446591/
マルチかいたずらか分からないけどこっちはスルー推奨
157デフォルトの名無しさん:2009/08/31(月) 22:10:52
全部読み込んじゃったじゃないか

C言語なら俺に聞け(入門篇) Part 52
http://pc12.2ch.net/test/read.cgi/tech/1250446591/593
158デフォルトの名無しさん:2009/08/31(月) 22:14:56
あっレス番ついてねえ。ごめんよ
159デフォルトの名無しさん:2009/08/31(月) 22:16:55
明日までの宿題で困っています。誰かよろしくお願いします。

[1]C言語基礎
[2]再帰呼び出しを用いずに配列のクイックソートをする関数
void qsort_without_recursion(
void *target ,
size_t each_size,
size_t num_of_elements,
int (compare*)( const void*,const void*)
);
を実装し、テストプログラムを付けて提出
[3] Ubuntu linux/Gcc 4.0/C言語
[4] 9/1 正午まで
160デフォルトの名無しさん:2009/09/01(火) 04:34:27
>>154


void get(int *p)
{
 *p = &AAAAA_t;
}


int main(void)
{
 int addr;
 get(&addr);
}

携帯からだと疲れるorz
161デフォルトの名無しさん:2009/09/01(火) 04:42:09
>>137

int main(void)
{
 int (*mn)();
 mn=&main;
 mn();
}
162デフォルトの名無しさん:2009/09/01(火) 04:49:15
>161
Ha, ha, ha...
163159:2009/09/01(火) 20:56:22
期限過ぎてしまったのでもう結構です。
期待して損しました。
164デフォルトの名無しさん:2009/09/01(火) 21:08:16
>>163
はいどうも。
165デフォルトの名無しさん:2009/09/01(火) 22:15:22
期限過ぎたのか。作ったのにw
166デフォルトの名無しさん:2009/09/01(火) 22:18:42
クイックソート 非再帰 でぐぐるか
教科書見ればそのまま出てるからなあ
167デフォルトの名無しさん:2009/09/01(火) 22:31:41
クイックソートのpartitionのロジックはいまだにバグ無しで作り上がったことがない・・・
何かしらバグってる、そんなロジック
168デフォルトの名無しさん:2009/09/02(水) 00:21:07
みんな期限過ぎるの待ってたw
クイックソート 再帰 使わない でズバリでてくるよね。
助詞取ってぐぐるだけなのになぁ。
169デフォルトの名無しさん:2009/09/02(水) 01:30:35
わざわざ期限過ぎるのを待つほどヒマな人もなかなか
170デフォルトの名無しさん:2009/09/02(水) 02:08:37
スルーしてたら期限すぎて159が湧いたからレスしただけで、
わざわざ待ってたわけでもないだろ
171デフォルトの名無しさん:2009/09/02(水) 02:26:25
quicksortの非再帰版なら奥村晴彦さんのホームページに載ってるじゃないか

http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/

の algo.lzh の中の

qsort2.c

がそうだよ

なんでぐぐろうとしないの?
172デフォルトの名無しさん:2009/09/02(水) 02:49:55
>>90
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9919.txt

とりあえず作ってみた
ファイルフォーマット等、何も指定されてないから都合のいいようにした
ソースが汚いのはご勘弁
173デフォルトの名無しさん:2009/09/02(水) 03:08:06
>>172
エラー出まくりなんですけど

エラー E2453 quine1.c 139: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 135: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 142: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 145: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 148: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 159: 'void' 型のサイズは未知あるいはゼロ (関数 resize_vec )
エラー E2453 quine1.c 173: 'void' 型のサイズは未知あるいはゼロ (関数 clear_vec )
エラー E2453 quine1.c 181: 'void' 型のサイズは未知あるいはゼロ (関数 free_vec )
エラー E2453 quine1.c 241: 'void' 型のサイズは未知あるいはゼロ (関数 add_terms_uniq )
エラー E2453 quine1.c 242: 'void' 型のサイズは未知あるいはゼロ (関数 add_terms_uniq )
エラー E2453 quine1.c 280: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 281: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 287: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 288: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 300: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 302: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 325: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 328: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 332: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )

以下省略
174デフォルトの名無しさん:2009/09/02(水) 03:33:14
「あんまり当てにしないで」
こういいのこして
いとじゅんさんは逝った
175デフォルトの名無しさん:2009/09/02(水) 03:49:38
176デフォルトの名無しさん:2009/09/02(水) 16:52:36
[1]講座名:やさしいC言語
[2]
(1) 「ようこそC言語へ」という文字列を表示し改行するコード
printf関数を使う。
(2)「 ようこそC言語へ」と表示し改行してから「C言語をはじめましょう」
と表示し改行するコード。ただしprintfは一回しか使ってはならない。
[3] Windows Vista/Visual C++ 2008/C言語
[4] 9/10まで
177デフォルトの名無しさん:2009/09/02(水) 17:06:34
>>176
1番
#include <stdio.h>
int main(void){
printf("ようこそC言語へ\n");
return 0;
}
2番
#include <stdio.h>
int main(void){
printf("ようこそC言語へ\nC言語をはじめましょう\n");
return 0;
}
178176:2009/09/02(水) 17:55:55
>>177
早いですね。ありがとうございました。
179デフォルトの名無しさん:2009/09/02(水) 19:07:55
>>178
基礎の基礎だからね
180デフォルトの名無しさん:2009/09/03(木) 01:40:04
すみません。もう一題ありました。(分業で宿題してますです)
[1]講座名 やさしいC言語
[2]
(1)引数pTという名前のint型のポインタ変数を持つdouble値を返す
avgという関数を定義し,pTに長さ5の整数配列が渡されるものとして
その平均値を返すようにコードして下さい。局所変数はdouble型の
もの1個でsumという名前にすること。整数変数はiという名前の
もお1個を使用することが出来ます。pTが指す変数は[]で参照しない
で下さい。関数内で使用出来る数字は0と5のみとします。
+=演算子を必ず使用してください。
(2) 必要なヘッダファイルをインクルードした後、avg関数を先行定義し
main関数を定義して下さい。長さ5の整数配列testと整数i,double変数
ansを定義出来ます。これ以外の変数は定義しないで下さい。
先ず1回のprintf文を使って
「5人のテストの点数を入力して下さい」と表示し改行してください。
scanf文,for文を使ってtest配列変数に読み込んでください。
ans変数にavg関数の結果を入れて、1回のprintf文で
「5人の平均点はxx.xxxxxxx...です。」という形式で表示し改行して下さい。
★if,while,do while文では{}を省略しないで下さい。
★関数の宣言、定義の箇所は/*XXX関数の宣言*/という具合にコメントを入れて下さい。
[3] Windows Vista/Visual C++ 2008/C言語
[4]9/10迄(インフル騒動の行方によってはのびる可能性もありw)
181デフォルトの名無しさん:2009/09/03(木) 01:49:54
>>180
(1)
double avg(int *pT)
{
    double sum;
    int i;

    sum = 0;
    for(i = 0; i < 5; i++){
        sum += *(pT + i);
    }
    return sum / 5;
}
182デフォルトの名無しさん:2009/09/03(木) 01:51:13
>>180
(2)
#include <stdio.h>

/* avg 関数の定義 */
double avg(int *pT)
{
    double sum;
    int i;

    sum = 0;
    for(i = 0; i < 5; i++){
        sum += *(pT + i);
    }
    return sum / 5;
}

/* main関数の定義 */
int main()
{
    int test[5], i;
    double ans;

    printf("5人のテストの点数を入力してください\n");
    for(i = 0; i < 5; i++){
        scanf("%d", &test[i]);
    }
    ans = avg(test);
    printf("5人の平均点は%lfです。\n", ans);
    return 0;
}
183180:2009/09/03(木) 02:17:22
>>181,182
ありがとうございます。
それにしても激速な回答驚いてます。
問題が難しくて困ってたとこでした。
問題文自体意味がちんぷんかんぷんでした。
こういうの早くやるのには、良い参考書とか
サイトとかあるんでしょうか?
184デフォルトの名無しさん:2009/09/03(木) 02:34:58
>>183
作って遊ぶっていうのが一番近道だと思う。
ジャンケン作って戦略ジャンケンに進化させるとか。

とにかく書く。んで、わからんことはネットを漁る。
なるべく環境依存を払いつつ、デバッガで値を確認しながら、細かくデバッグって言うのも身につくと思う。
俺はそれで覚えた。
185181,182:2009/09/03(木) 02:53:08
>>183
教科書を読んで勉強する方が得意なら、その辺の参考書なりWebサイトなりを見て勉強すればいい。
問題を解いて勉強する方が得意なら、参考書なりWebサイトなりを参考にしつつ、
その辺にある問題を解くとか、>>184の言うように何か作ってみるといい。
お題を与えておく。
・数当てゲーム(とりあえず、ランダムな数字をヒントなしに当てさせる→次はヒント(答えが正解より大きいか小さいか)を与えられるようにしてみる)
・high and low(ググれば出てくると思う)
とか、ね。
186デフォルトの名無しさん:2009/09/03(木) 03:20:35
>>180
参考書じゃ高橋麻奈さんの「やさしいC」がぴったりだと思う
187180:2009/09/03(木) 03:48:01
>>186
夜分遅くにレスありがとうございます。
その本、講師が絶賛してました。
188デフォルトの名無しさん:2009/09/03(木) 07:21:06
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
  入力した任意の小数5つを降順にソートし出力する
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限: 本日中
[5] その他の制限:初心者用講座 配列を用いる

助けてください
189デフォルトの名無しさん:2009/09/03(木) 07:33:24
>>187
「C言語による アルゴリズム事典」 奥村春彦著 技術評論社
も座右の書としておくといいですよ。
190189:2009/09/03(木) 07:34:39
奥村晴彦著の間違えでした。すみません。
191デフォルトの名無しさん:2009/09/03(木) 08:07:44
俺のオススメ図書は「独習C」だぜ!

>>188
#include <stdio.h>
int main(void)
{
int i,j;
double a[5],temp;

for(i=0; i<5; i++){
printf("%d:",i+1);
scanf("%lf",&a[i]);
}
printf("\n\n");
for(i=0; i<4; i++)
for(j=i+1; j<5; j++)
if(a[i] < a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
for(i=0; i<5; i++)
printf("%f\n",a[i]);
return 0;
}
192デフォルトの名無しさん:2009/09/03(木) 08:13:03
お勧め書籍?
MSDNライブラリ、C、C++の仕様書
193188:2009/09/03(木) 09:15:13
>>191
ありがとうございます
194デフォルトの名無しさん:2009/09/03(木) 11:14:40
入れ替え回数が無駄に多いソートだなw
195デフォルトの名無しさん:2009/09/03(木) 11:26:35
[1] 授業単元:独習C++第3版
[2] 問題文(含コード&リンク):
  第7章 総合理解度チェック3
継承と継承の際のassignment operator (=)について質問があります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9922.cpp
上記のファイルをコンパイルすると以下のように出力します
output>>
Coord::operator= // why?
Show quadrant: 1
(o3=o1) X: 10, Y: 10

why?の部分で、なぜQuadオブジェクトを作成しているのに
そのベースであるCoordの方の=オペレータが呼ばれるのでしょうか。
また、Quad の=オペレータがQuad operator=(Coord ob)
というふうに、Coordをパラメータとして受け取ってますが
なぜQuadとして受け取らず、Coordとして受け取るのでしょうか。
詳しい解説お願いします・・

[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: C++
 [3.3] 言語: C++
[4] 期限: 本日中
[5] その他の制限:特にないです
196デフォルトの名無しさん:2009/09/03(木) 11:39:15
宿題じゃないものを無理矢理形式あわせて質問すんじゃねーよ
197デフォルトの名無しさん:2009/09/03(木) 12:23:30
>>195
以下のように出力しねーよ
operator+とかどこに消えた?
198デフォルトの名無しさん:2009/09/03(木) 12:36:04
途中からコピペしてあっただけか
デフォルト代入演算子でぐぐれ
199デフォルトの名無しさん:2009/09/03(木) 12:51:33
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
  正負混合で入力した任意の2進数5つを絶対値の昇順にソートし出力する
  さらに元の数の加算を求めよ
  (ただ加算するだけでなくソートしたことを踏まえて計算すること)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限: 本日中
[5] その他の制限:初心者用講座
         この問題の狙いは情報落ちを防ぐための方法を考えろとのことです

すみませんまた詰まりました助けてください
200デフォルトの名無しさん:2009/09/03(木) 13:30:06
>>199 こんな感じで。動作は保障しない。
#include <stdio.h>
#include <math.h>
int main(){
char buf[1024]={0};
char Num[5];
char T=0;
int i=0,j=0;;
printf("Input Binary Digit! signed flag is 8th bit!!\n");
for(j=0;j<5;j++){
scanf("%s",buf);
T=0;
for(i=7;i>=0;i--) T|=((buf[i]=='0' ? 0:1)<<(7-i));
printf("%d\n",T);
Num[j]=T;
}
printf("\n");
for(i=0;i<5;i++){//バブルソート
for(j=i;j<5;j++){
if(abs(Num[i])>abs(Num[j])){
T= Num[i];
Num[i]=Num[j];
Num[j]=T;
} } }
j=0;
for(i=0;i<5;i++){
printf("%d\n",Num[i]);
j+= Num[i];
}
printf("Total => %d",j);
return 0;
}
201デフォルトの名無しさん:2009/09/03(木) 13:32:09
ありゃ、インデントがつぶれてしまったなぁ。
整形してみてくれ。
202デフォルトの名無しさん:2009/09/03(木) 14:06:36
>>200
ありがとうございます
203デフォルトの名無しさん:2009/09/03(木) 14:37:11
>>200
それバブルソートじゃないからw
204デフォルトの名無しさん:2009/09/03(木) 14:46:22
えっ
205デフォルトの名無しさん:2009/09/03(木) 14:49:08
データの並びによってはきちんとソートできないし
バブルソートならNum[j] と Num[j+1] を比較するよ
206デフォルトの名無しさん:2009/09/03(木) 14:57:29
これは何ソートになるの?
207デフォルトの名無しさん:2009/09/03(木) 14:59:54
>>205
反例お願いします。
208デフォルトの名無しさん:2009/09/03(木) 15:00:59
0から順に、一番小さい値を探して並べてるから
選択ソートじゃない?
209デフォルトの名無しさん:2009/09/03(木) 15:01:23
ソートできないってことはないだろw
セレクションソートに似てるって言えるかもしれんが、
交換回数が無駄に多いw
210デフォルトの名無しさん:2009/09/03(木) 15:04:14
たしかに、SWAPする意味ないww鼻水ふいたww
211205:2009/09/03(木) 15:07:22
ごめん
ソートは確実におkでした
212デフォルトの名無しさん:2009/09/04(金) 00:36:42
213デフォルトの名無しさん:2009/09/04(金) 00:37:28
ミス
ごめ
214デフォルトの名無しさん:2009/09/04(金) 02:19:07
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9923.txt
問題の内容はテキスト内に書きました
3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
 [3.3] 言語:C言語
[4] 期限:9月5〜10日
[5] その他の制限:C言語のみ

早く出来れば好ましいです。
すみませんが宜しくお願い致します。
215デフォルトの名無しさん:2009/09/04(金) 02:58:46
@y = (3 * x + 2) * x - 6;
216デフォルトの名無しさん:2009/09/04(金) 10:06:48
>>214
A
#include<stdio.h>

main(void)
{
double x,y;

for(x=-3.0; x<3.1; x+=0.1){
y= (3 * x + 2) * x - 6;
printf("x=%4.1lf : y=%lf\n",x,y);
}
return 0;
}
217デフォルトの名無しさん:2009/09/04(金) 10:14:44
>>214
B
#include<stdio.h>

main(void)
{
double x,y;
double minx,miny=100;
double maxx,maxy=-100;
double sum=0;
int count=0;

for(x=-3.0; x<3.1; x+=0.1){
y= (3 * x + 2) * x - 6;
if(miny > y){miny=y;minx=x;}
if(maxy < y){maxy=y;maxx=x;}
sum+=y;count++;
}
printf("yの最小値は x=%4.1lf のとき y=%lf をとる。\n",minx,miny);
printf("yの最大値は x=%4.1lf のとき y=%lf をとる。\n",maxx,maxy);
printf("xが-3.0〜3.0の値をとるとき、yの平均値は %lf である。",sum/count);
return 0;
}
218デフォルトの名無しさん:2009/09/05(土) 07:51:15
>>199
任意の2進数というと、16bit、32bitにかぎらないように
思うのですが、55bitなどというのもありですか?
219デフォルトの名無しさん:2009/09/05(土) 07:58:30
まあ任意の二進数って時点で答える気力が失せるわな
220デフォルトの名無しさん:2009/09/05(土) 08:00:21
最大桁数決まってないと負数かどうかわからなくね?
221214:2009/09/05(土) 09:25:37
助かりました、ありがとうございます!
222デフォルトの名無しさん:2009/09/05(土) 10:23:01
>>220
たとえば10進数の-15なら -1111 なんじゃね?
「負数は補数で〜」なんて指定はないから。
223デフォルトの名無しさん:2009/09/05(土) 11:32:03
-をつけたら2進数にする意味があんまりない気もするがw
224デフォルトの名無しさん:2009/09/05(土) 11:49:02
2進数表現はビットの羅列とは限らないのでは?無意味ではないかと(補数扱うことが課題の目的でもない限り)

ところで、-を付けたり、ケタ数指定しなくても、正なら頭に0付けるとかでdou?
225デフォルトの名無しさん:2009/09/05(土) 11:52:44
と思ったけど、やっぱり意味無いかも
正負混同って明記してあるってことは、二進数の負値の扱いを重視してそうだし
226デフォルトの名無しさん:2009/09/05(土) 13:25:55
>>218
回答した者だが、特に制限が無い以上、PCの制限に依存するのは仕方ないと思う。
入力に32個も2進入力するのは面倒なので8ビットにしたんだが。
55bitとかそういう物を扱うなら、器はPC側の制限で64bitになるし、longlongはまだ枯れてないしなぁ。
227デフォルトの名無しさん:2009/09/05(土) 13:33:40
>>226
文字列で受け取って・・・問題見てないけど
228デフォルトの名無しさん:2009/09/06(日) 20:04:39
               (``7‐、 _
             __/´    ' ノ
            ン-    、/_
           /゙   ``ヽミ\
          /=、 ィ==、  ,}:::ヽ
          f゙-o-l‐l-o- ト、 }`:::::::i 
         弋__ノ _ヽ_ノ  `!::::::リ 
         {  `__^ー'、  ..:: レ゙^lヽ
         l '´⌒`ヽ`  : : ::{_ノ   <やるき!げんき!いわ キッ!キッ!キッ!
         '、゙、 __ ソ  .: : : イ`
229228:2009/09/06(日) 20:05:22
誤爆
230デフォルトの名無しさん:2009/09/07(月) 14:27:53
アップローダー==ラウンジに書いた9925です。
どなたか宜しくお願いいたします。
231デフォルトの名無しさん:2009/09/07(月) 14:39:47
>>230
テンプレ書いてくれ。
232デフォルトの名無しさん:2009/09/07(月) 15:51:37
>>231
改行が多すぎて書き込めない
233デフォルトの名無しさん:2009/09/07(月) 15:53:04
234デフォルトの名無しさん:2009/09/07(月) 17:26:12
235デフォルトの名無しさん:2009/09/07(月) 18:41:01
>>234
ありがとうございました。
236デフォルトの名無しさん:2009/09/08(火) 00:35:22
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
任意の数xの例で説明すると(x-1)!+1 がもしxで割り切れるならばxは素数であると言え、
割り切れないならばxは、素数ではないと言える。このような素数を判別することができる
定理をウィルソンの定理と呼ぶ。

入力した値の階乗を求めるプログラム(4桁まで対応)を改良して、ウィルソン
の定理による素数判定を実装せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9928.txt

素数ならば素数です。素数でないならば素数ではありません。と表示しなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限:9月11日
[5] その他の制限:基本的に制限はないが、極力ライブラリに頼らずに実装すること。
プログラムは分かりやすく書くようにつとめること。

よろしくお願いします。
237デフォルトの名無しさん:2009/09/08(火) 00:42:19
[1] 授業単元:自主便
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9929.cpp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9930.cpp
上のやつで行列式求めようとするとSegmentation faultがでてしまいます。
gdbで調べたら225行目のbufのところがおかしいみたいですがどうおかしいかわかりません

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限:無期限

お願いします
238デフォルトの名無しさん:2009/09/08(火) 01:19:46
>237
添字を1から始めていることは触れないが
ポインタの意味わかってないだろ

220行付近
//double **a = p_top;
matrix a = *this;
にでもするか
p_topのコピーを作って使うようにすればいいよ
239デフォルトの名無しさん:2009/09/08(火) 01:22:20
>>238
ありがとうございます
まだポインタについて未熟なんでもっと勉強しときます
添え字は1から始めれるように上のほうでちょこっと変えました
240デフォルトの名無しさん:2009/09/08(火) 01:35:38
無理せずに vector<vector<double> > 使っとけよ
241236:2009/09/08(火) 01:47:21
236の補足ですが、素数の判別対象は1から9999です。

サンプルのプログラムは1から9999までの範囲の任意の数字の階乗
を返します。14以上の階乗でもオーバーフローしないために多倍長
演算になっています。

よろしくお願いします。
242デフォルトの名無しさん:2009/09/08(火) 01:50:16
>>236
へぇ、こんな定理があったんだねぇ
けど、4桁の階乗ってだいぶ大きそうだね
243デフォルトの名無しさん:2009/09/08(火) 01:58:46
>>242
Excelでfact関数使って4桁の数字の階乗出してみたけど大きすぎるぞw
244デフォルトの名無しさん:2009/09/08(火) 02:02:05
まあ、だからこそ10000要素の配列に4桁ずつ格納する仕組みにしてるんだろうけどね
245デフォルトの名無しさん:2009/09/08(火) 02:04:18
多倍長計算はCPUによるエミュレートになるので
すっげー計算遅いよな
246デフォルトの名無しさん:2009/09/08(火) 02:33:56
9999! は 35656桁 な気がする
247デフォルトの名無しさん:2009/09/08(火) 02:38:49
それはすでに出せてるし。。。
多倍長の割り算がめんどくね?
248デフォルトの名無しさん:2009/09/08(火) 02:57:13
階乗は関数にした方が見やすいな。
てか、多倍長の割り算とかやったことね・・・。
249デフォルトの名無しさん:2009/09/08(火) 02:59:55
2
3
5
7
11
101
164
685
919
こんだけ表示して終わりにするとかw
250デフォルトの名無しさん:2009/09/08(火) 03:07:43
割り算と考えずに逆数のかけ算として考えればいいんじゃね?
251デフォルトの名無しさん:2009/09/08(火) 03:13:54
多倍長整数の加算,2倍,1/2倍,比較ができれば除算は可能
#include<stdio.h>

void mydiv(int x, int y, int *div, int *mod){
int i, result=0;

for(i=1;x>y;i*=2,y*=2);
for(;i>0;i/=2,y/=2){
if(x>=y){
result+=i;
x-=y;
}
}
if(div) *div=result;
if(mod) *mod=x;
}

int main(void){
int x=101, y=13, div, mod;

mydiv(x, y, &div, &mod);
printf("%d\n", div);
printf("%d\n", mod);

return 0;
}
252デフォルトの名無しさん:2009/09/08(火) 03:15:07
>>251
減算も必要だったw
253デフォルトの名無しさん:2009/09/08(火) 03:15:56
余りが0になる場合のみを抽出か・・・
254デフォルトの名無しさん:2009/09/08(火) 03:22:53
割り算ややこいからひたすら引き算したら15くらいから使い物にならなくなったwww
255>>242=>>254:2009/09/08(火) 04:17:40
>>236
ヤターデキタヨー
あまり検証はしてないけど、たぶんこれで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9932.txt

4桁前提の処理なのであしからず。
256デフォルトの名無しさん:2009/09/08(火) 04:27:01
おもしろい問題だけど何気に数学板の話題かもな
なぜ素数に限りそういうことが言えるのかわかってないと
良いアルゴリズムは見いだしにくい鴨
(それでも篩法と較べてもそんなに効率は良い方法じゃない)
257デフォルトの名無しさん:2009/09/08(火) 04:38:26
実際は!は掛け算を全部してから最後に余りとるんじゃなくて
掛け算一回毎に余りをとるほうが圧倒的に高速かつ多倍長つかわなくて済むんだよねw
258デフォルトの名無しさん:2009/09/08(火) 04:40:39
そのコードもあげればよいのでは?w
259>>242=>>254:2009/09/08(火) 04:45:44
なるほど。こうかな?
もとの努力がだいぶなくなってしまって切ないな。

#include <stdio.h>

main(){
int n,i;
int mod;

/* 値を入力 */
printf("素数判定を行いたい数値を入力して下さい\n");
scanf("%d",&n);

if(n<0){
return -1;
}

/* (n-1)! % n を算出 */
mod = 1;
for(i=2; i<=n-1; i++){
mod = (mod * i) % n;
}

/* (n-1)! + 1 が nで割り切れる == (n-1)! % n + 1 が n */
if (mod+1==n){
printf("素数です。\n");
}else{
printf("素数ではありません。\n");
}

return 0;
}
260デフォルトの名無しさん:2009/09/08(火) 04:54:03
>>259
俺が課題出されたときなら間違いなくその方向で出してたな
あげくに、
//これ普通に余りが0か判定するコードのほうが速くね?
//結局乗算してる分遅いやん?
とかコメントに書いておくw
261デフォルトの名無しさん:2009/09/08(火) 04:57:27
コード書けない俺が言えたことではないけど
>>260
>>258
262>>242=>>254:2009/09/08(火) 04:59:59
>>260
ごめんなさい、ちょっと意図を汲み取れませんでしたorz
寝ますね><
263257=260:2009/09/08(火) 05:11:42
>>262
課題を出す側じゃなくて受ける側として書いてた。
つまり単に問題文を出した教授に嫌味を加えたコメント書いてるだけw
>>261
正直>>259とほとんど同じなんだよね。しかもC++で書いてるしw
まぁ一応出しとくか
#include<iostream>
using namespace std;
int isPrime(unsigned long x){
        unsigned long a = 1;
        for(unsigned long i=1;i<x;++i)
                a = (unsigned long long)a*i%x;
        return a==x-1;
}
int main(){
        unsigned long v;
        cin>>v;
        if (isPrime(v)) cout << "素数です。\n";
        else           cout << "素数ではありません。\n";
}
264デフォルトの名無しさん:2009/09/08(火) 06:09:06
>>255
これ具体的に何を入れたら素数ですと表示されるのかな
265デフォルトの名無しさん:2009/09/08(火) 06:13:05
実行してみれば?
266デフォルトの名無しさん:2009/09/08(火) 06:19:24
知らなかった定理で面白いとは思うけど、効率って点ではかなり悪いな
267236:2009/09/08(火) 07:20:21
>>255
ありがとうございました。助かりました。いくつか実行確認してみましたが
無事に動作しています。

>>ALL
感謝です。

>>264
以下の様な素数表の数字を使えば大丈夫です。
http://www.nikkei-science.com/page/magazine/puzzle/puzzle0309/prime.txt

>>266
効率はかなり悪いと習いました。
268デフォルトの名無しさん:2009/09/08(火) 07:27:24
いや俺が言っているのは>>255の実行結果がおかしいと言っているんだが
>>259なら正しく表示される
269デフォルトの名無しさん:2009/09/08(火) 07:45:03
具体的には?
適当に素数を入力してみたら、素数ですって表示されるんだけど。
270デフォルトの名無しさん:2009/09/08(火) 07:47:24
4桁前提処理ってのを見てないんじゃないの?
271デフォルトの名無しさん:2009/09/08(火) 07:51:15
まさかとは思うが、階乗と桁数だけ見て最後の行を見逃してるとかじゃねーよな?
272デフォルトの名無しさん:2009/09/08(火) 07:55:39
例えば1009は素数ですよね
1009を入れると素数ではありませんと表示される
273デフォルトの名無しさん:2009/09/08(火) 07:58:04
俺のとこだと素数ですって表示されるんだが
274デフォルトの名無しさん:2009/09/08(火) 07:59:05
>>272
素数ですって表示されたよ<1009
275デフォルトの名無しさん:2009/09/08(火) 08:01:05
■必要桁数2595桁
素数ではありません

と表示される
コンパイラによって違うのか?
gcc4.4.1使ってるんだが
276デフォルトの名無しさん:2009/09/08(火) 08:09:08
>275
23 /* [変更] 1からn-1まで順にかけ算 */
24 for(i=1; i<=n-1; i++){
ここだろ、元のソースと変わっているところ

ちなみに2595桁が1010の時の桁数だったので直観した
277デフォルトの名無しさん:2009/09/08(火) 08:09:38
あーわかった悪い悪い
for (i = 1; i <= n - 1; i++) {

for (i = 1; i <= n; i++) {
になってたわ
278デフォルトの名無しさん:2009/09/08(火) 08:27:26
人のソースなんてコピペで実行するもんじゃないの?
279デフォルトの名無しさん:2009/09/08(火) 09:06:45
あまりにも汚いので整形している最中うっかり-1を消したらしい
280デフォルトの名無しさん:2009/09/08(火) 09:09:12
ruby教信者というわけじゃないが、rubyだったら特にライブラリとか
意識しなくとも長桁計算が出来るんで整数絡みの問題をちょっと
やってみるのはCよりかあってるかも
281デフォルトの名無しさん:2009/09/08(火) 11:18:42
ファイル名の拡張子だけ取得したいのですが、何か良い方法はないでしょうか?
strtokは文字列を書き換えてしまうので×
forループでピリオドが出るまで空回しするのがベストでしょうか?
282デフォルトの名無しさん:2009/09/08(火) 11:33:04
>>281
コピーしてstrtok
283デフォルトの名無しさん:2009/09/08(火) 11:49:29
forループを回したのでもういいです。

284デフォルトの名無しさん:2009/09/08(火) 12:20:50
だったら言うな
285デフォルトの名無しさん:2009/09/08(火) 12:24:29
これだからテンプレを書かないやつは!って言われるんだ
286デフォルトの名無しさん:2009/09/08(火) 13:09:51
>>279
え、整形中に-1が消えた?
一緒に仕事したくないでござる!
287デフォルトの名無しさん:2009/09/08(火) 13:18:07
多倍長有理数の四則演算を書いたことがあるけど、除算だけ別次元の地獄だったな
それよりboost::bigintはまだなのか
288デフォルトの名無しさん:2009/09/08(火) 13:26:51
コンピュータ・アルゴリズム事典のPascal版の多倍長整数演算ルーチンを
Cに移植中

なぜかC版の本には多倍長演算は載っていない
GNUで出て来たからだろうな
289デフォルトの名無しさん:2009/09/08(火) 13:29:58
>>287
俺は、ビット配列作ってそこからBigInt作ろうとしたが、
BigIntの足し算が作れなかった。足し算って意外と論理的に作るの難しくない?
290デフォルトの名無しさん:2009/09/08(火) 13:32:15
>>289
すまん、かなりバリバリにアセンブラで書いたから加算は楽勝だったw
291デフォルトの名無しさん:2009/09/08(火) 13:43:35
>>289
論理的にってFullAdder並べるだけじゃダメなの?
性能はお察しになるかも
292デフォルトの名無しさん:2009/09/08(火) 14:27:30
>>290
すごいなぁ。

>>291
いやー、Wikipedia見ながら書いてたんだが、なんかうまくロジックが組めなかった。
俺、あほス。orz
293デフォルトの名無しさん:2009/09/08(火) 16:13:00
>>281
strrchr( str, '.' );
294デフォルトの名無しさん:2009/09/08(火) 17:07:18
げ、まじか。Cにこんな便利な関数があったのか。
そっちで書き直します。
295デフォルトの名無しさん:2009/09/08(火) 17:50:35
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):画像を読み込んで1次・2次微分を行い、エッジ抽出処理を
               行うプログラムを作りなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] (gcc 3.4
 [3.3] 言語: (C/C++/どちらでも可)
[4] 期限:特にありません。
[5] その他の制限: 私自身ハード(回路)を学んでいまして、いざソフトを学ぶとなると、
プログラミングはお手上げでした。大変ご足労をおかけすると思いますが、
はじめからのプログラムを教えていただけますか?#includeから。
よろしくお願いします。
296デフォルトの名無しさん:2009/09/08(火) 17:57:08
>>295
入出力画像のファイル形式は?
使えるライブラリの指定はあるの?
297デフォルトの名無しさん:2009/09/08(火) 18:02:31
>>295
OpenCV
使ったことないけど。
298デフォルトの名無しさん:2009/09/08(火) 21:29:22
>>295
画像処理でググればいくらでもでてきそうな気がするけどな・・・。
とりあえずは、bmpファイルから始めて見るといいよ。
299デフォルトの名無しさん:2009/09/08(火) 21:33:14
>>295
#includeからワロタ
300デフォルトの名無しさん:2009/09/08(火) 21:46:27
コンピュータ・アルゴリズム事典の多倍長演算ルーチンのC++への
移植作業は順調に進んでいます

しかし、元の多倍長数に結果を重ね書きできるものと出来ないものが
混在しているため、演算子の多重定義が出来にくい状況にあります

ここは速度を多少犠牲にしても統一化を図った方がいいかもしれません

取り敢えず9999!の演算速度はかなり速いです

後は割り算ルーチンを移植してデモプログラムとしてネイピア数(e)とπを
10000桁ほど求めるプログラムを入れたらどこかにうpしたいと思います
301デフォルトの名無しさん:2009/09/08(火) 23:07:37
重ね書きできるのって += -= *= /= で、できないのは + - * / ってこと?

302デフォルトの名無しさん:2009/09/08(火) 23:26:58
>>300
e や π程度なら、(多倍長)÷(単倍長) を実装するだけで十分かと。
(多倍長)÷(多倍長)は確かに難しいですね。
303デフォルトの名無しさん:2009/09/08(火) 23:30:34
なんか同じ問題の議論でレスが伸びまくってるなw
304デフォルトの名無しさん:2009/09/08(火) 23:35:29
>>301
そういう事になります
ですから全部重ね書きできるように改造します

>>302
まあそうですね
何か面白いデモプログラムがあればいいなと
多倍長演算の宿題はよく出るから一つリファレンス
となるようなたたき台を作っておけば後々楽かと
305デフォルトの名無しさん:2009/09/08(火) 23:36:50
ね。
>>255の解法は割とぐっときた。
元ソースのスタイルを崩してないところもぐっときた。
306デフォルトの名無しさん:2009/09/08(火) 23:38:01
>>304
それならCで組んだ方が利用頻度高そうな気が。。。
307デフォルトの名無しさん:2009/09/08(火) 23:43:59
>>306
そうですね
演算子の多重定義とメンバ関数と関数の多重定義を取り除けば
そのままCで使えるように書いています
308デフォルトの名無しさん:2009/09/08(火) 23:50:59
>>304
boost::operatorsを使うと += から + を自動的に作ってくれて楽だよ。- * /も同様に作ってくれるよ。
309デフォルトの名無しさん:2009/09/08(火) 23:59:02
>>308
ふーんありがとう
使ってみるわ
やっぱりa.LongMul(b)じゃ読みにくいですからね

a *= b; の方が遙かに読みやすい
310デフォルトの名無しさん:2009/09/09(水) 00:18:52
>>303
この時期は宿題が少ないからね
311デフォルトの名無しさん:2009/09/09(水) 17:02:12
暇だから問題でも出すか。
3の超階乗を出力するプログラムを作れ。

宿題じゃないから別に解かなくていいw
312デフォルトの名無しさん:2009/09/09(水) 17:05:47
超累乗ならともかく超階乗とか作るの面倒過ぎるだろ
3$ならまだしも
313デフォルトの名無しさん:2009/09/09(水) 17:13:59
下n桁で勘弁して欲しいところだ
314デフォルトの名無しさん:2009/09/09(水) 17:26:46
>>312
3の超階乗 = 3$じゃないの?
315デフォルトの名無しさん:2009/09/09(水) 17:31:55
>>314
2$の間違いだw
316デフォルトの名無しさん:2009/09/09(水) 17:33:11
むしろ$100くらいもとめようぜw
317デフォルトの名無しさん:2009/09/09(水) 17:36:25
>>316
プログラム作ってみろカス
あほ程時間をかけたら作れるだろうけどな
318デフォルトの名無しさん:2009/09/09(水) 17:48:00
プログラム自体はそれほど複雑にはならんだろ。
桁や実行時間が無理なだけで。
319デフォルトの名無しさん:2009/09/09(水) 17:50:09
// やっつけ
#include <iostream>
#include <boost/bigint.hpp>
using boost::bigint;

static const int initial_value = 3;

bigint factorial ( bigint x ) {
assert( x > 0 );
return ( x == 1 ) ? 1 : x*factorial(x-1);
}

bigint superfactorial_cp ( bigint x ) { // Clifford Pickover's definition
bigint result;
bigint fx = factorial(x);
bigint j = 1;
bigint c = fx;
for ( bigint i = 1; i <= fx; ++i ) {
for ( ; j <= c; ++j ) {
result *= fx;
}
c = result;
}
}

int main () {
std::cout << superfactorial_cp(initial_value) << std::endl;
}
320デフォルトの名無しさん:2009/09/09(水) 17:51:26
>>315
2$なんて一瞬でできちゃうだろw
321デフォルトの名無しさん:2009/09/09(水) 17:56:35
いかん、
return result;
を書き忘れた
322デフォルトの名無しさん:2009/09/09(水) 17:58:28
暇だからどっかの大学院の入試問題でも適当に引っ張って
解いてようw
323デフォルトの名無しさん:2009/09/10(木) 02:35:56
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):CLIP構造体を操作して任意の秒数分切り出す関数の制作
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "aa-io.h
int main(void)
{
CLIP clip1;
CLIP *clip2;
int i;
MONO_PCM mono;
MONO_PCM *monop;
monop = &mono;
mono_wave_read(monop,"c:/sound/Startup.wav");
clip2 = &clip1;
mtoc(monop,clip2);
for(i=0; i<clip1.length; i++){
printf("%f\n",clip1.data[i]);
}
//monop= &mono;
//mono_wave_read(monop,"c:/sound/Startup.wav");
//mono_wave_write(monop,"c:/sound/sample.asc");
return 0;
}
[3] 環境
 [3.1] OS: Window
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0)
 [3.3] 言語: C
[4] 期限: ([2009年9月10日12:00まで]
[5] その他の制限: 特になし
詰まりました。よろしくお願いします
324デフォルトの名無しさん:2009/09/10(木) 02:42:22
>>323
aa-io.h を晒せ
325デフォルトの名無しさん:2009/09/10(木) 02:59:58
マジで行き詰ってるので教えてくれ
VisualStudio2008,C++.NETでアプリケーションの作成をやってるんだが
リストボックスにString型を入れたいんだがどうやればいい?

string a[10][10] = { …(初期化)… };
this->listBox1->Items->Add(a[0][0]);

とやると「1 番目の引数を 'std::string' から 'System::Object ^' に変換できません。」となる
配列aの初期化はできてるし、Add("あああ")にした場合は普通に動くんだけど…
326デフォルトの名無しさん:2009/09/10(木) 03:13:47
型が違うって事だろ。 それはやったことがないけど、
たとえば、 f( char *) にstring 型は渡せないのと同じ事。
327デフォルトの名無しさん:2009/09/10(木) 03:14:54
もしchar *だったら、渡せるのだったら、
a[0][0].c_str()はchar * 型だ。
328デフォルトの名無しさん:2009/09/10(木) 03:24:51
329デフォルトの名無しさん:2009/09/10(木) 03:28:57
std::string s0 ;
System::String^ s1 = gcnew System::String( s0.c_str() );
this->listBox1->Items->Add(s1);

で無理か? コンパイルしていない。
330デフォルトの名無しさん:2009/09/10(木) 03:30:00
>>325
C++/CLIで作らないとダメな理由はあるのかなぁ
331デフォルトの名無しさん:2009/09/10(木) 03:32:48
>>329
コンパイルしてないけど、流れから行けば
this->listBox1->Items->Add(a[0][0].c_str());
がいいのではないかと
332デフォルトの名無しさん:2009/09/10(木) 14:36:03
>>327
>>331
それだとエラー文のStringがCharになるだけで無理だった

>>329
>>330
Std::String→System::Stringでいけた!
ありがとう

Std::StringとSystem::Stringの使い分けがいまいちわからないわ…
333デフォルトの名無しさん:2009/09/10(木) 15:35:09
>>332
std::stringはC++の仕様にあるSTLの移植で、
System::Stringは.Netのネーティブ文字コンテナ。だと思う。

.Netを構築する際にはSystem::Stringに依存した構造になってるだろうから、
STLのアルゴリズムを使わないなら、後付であるSTLコンテナは使わないほうが良いかもしれない。
334デフォルトの名無しさん:2009/09/10(木) 17:12:25
>>329
std::stringも長さの情報を持っているのだから、System::String^ s1 = gcnew System::String( s0.c_str(), 0, s0.length() );としたい。
そして、2008ならそれはmsclr::interop::marshal_as<System::String^>(s0)で一発。
335デフォルトの名無しさん:2009/09/11(金) 18:54:23
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9935.txt
[3] 環境
 [3.1] OS:Windows/Vista
 [3.2] コンパイラ名とバージョン:ビジュアルベーシック
 [3.3] 言語: C++
[4] 期限: 2009年9月15日
[5] その他の制限:問題文のほうにも書いてありますが、難しい記述は使わないでください。また関数なども使わないそうです。
一応自分が途中までやっていたソースコードを乗せたので、似た感じに作っていただければ。よろしくお願いします。

336デフォルトの名無しさん:2009/09/11(金) 18:59:52
>  [3.2] コンパイラ名とバージョン:ビジュアルベーシック
>  [3.3] 言語: C++

         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|      
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|  
        i|:!ヾ、_ノ/ u {:}//ヘ  
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人      
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ     
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \   
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ   
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ
337デフォルトの名無しさん:2009/09/11(金) 19:06:03
#include <stdio.h>

int main(void)
{
char str[100];
int i, j, c;

printf("文字列を100文字以内で入力してください\n");
scanf("%s", str);

printf("どの文字を削除いたしますか?");
scanf(" %c", &c);

for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
str[j] = '\0';

printf("%s\n", str);

printf("削除した文字は%d文字です\n", i - j);

return 0;
}
338デフォルトの名無しさん:2009/09/11(金) 19:19:54
>>336
Micro Soft Visual C++ 2008でしたwすいません。。

>>337
ありがとうございます!
今動作を確認しましたが、削除した文字が0文字のままで削除もされていないのですが、どこか間違っているのでしょうか・・?
339デフォルトの名無しさん:2009/09/11(金) 19:21:09
>>338
削除した文字が0文字なら削除されるわけないだろ
気違いか?
340デフォルトの名無しさん:2009/09/11(金) 19:25:58
とりあえず337のプログラムを実行した結果
・英数字は課題通り
・日本語(2バイト文字)は削除されなかった

339は、日本語を入力して実行確認したのではないだろうか
341デフォルトの名無しさん:2009/09/11(金) 19:29:17
>>339
すいません。説明が足りなかったです。
文字を「sea」と入力して、削除する文字を
aと入力しても「sea」のままで削除されないということです。
342デフォルトの名無しさん:2009/09/11(金) 19:29:53
Bcc32だと340の通りだけど、VisualStudio2008だと339の通りだな。
343デフォルトの名無しさん:2009/09/11(金) 19:33:41
http://msdn.microsoft.com/ja-jp/library/w40768et%28VS.80%29.aspx

VS2008だとscanf使うの推奨されてないしそれが原因かな?
344デフォルトの名無しさん:2009/09/11(金) 19:41:29
while(getchar()!='\n');
を一回目の scanf の後に追加すればいけたりする?
345デフォルトの名無しさん:2009/09/11(金) 19:44:44
>>344
ダメだな。
Bccだといけるし見た感じ337のソースは間違ってないと思う。
(記述の仕方が気に入らないがw)
346デフォルトの名無しさん:2009/09/11(金) 19:44:47
? char c;
347デフォルトの名無しさん:2009/09/11(金) 19:45:20
>>344
今入れて試してみましたが、削除が行われていませんでした・・

>>343
scanfは非推奨なのですか・・・。今まではこんなことはなかったのですが・・
348デフォルトの名無しさん:2009/09/11(金) 19:46:17
'scanf' の宣言を確認してくださいの警告が気になるところ
349デフォルトの名無しさん:2009/09/11(金) 20:00:51
ほす
350デフォルトの名無しさん:2009/09/11(金) 20:03:19
cがint型(4バイトとして)
scanf("%c", &c)で1バイト書き込み
残り3バイトは…?

>>346にするか初期化しろって話だね
351デフォルトの名無しさん:2009/09/11(金) 20:04:39
>>350
なるほど!
352デフォルトの名無しさん:2009/09/11(金) 20:04:45
#include <stdio.h>

int main(void)
{
char str[100],c;
int i, j;

printf("文字列を100文字以内で入力してください\n");
scanf("%s", str);

printf("どの文字を削除いたしますか?");
scanf(" %c", &c);

for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
str[j] = '\0';

printf("%s\n", str);

printf("削除した文字は%d文字です\n", i - j);

return 0;
}
353デフォルトの名無しさん:2009/09/11(金) 20:06:15
せっかくサンプルに合わせたのに!
354デフォルトの名無しさん:2009/09/11(金) 20:06:43
削除一回しかできないとか汎用性にかけるな
355デフォルトの名無しさん:2009/09/11(金) 20:09:09
>>353
bccでコンパイルしたexeだと問題なく動くんだぜw

↓これは難しい記述に当たる気がしないでもないw
for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
356デフォルトの名無しさん:2009/09/11(金) 20:11:10
>>346
>>350
>>352
今char c を入れて実行入れて実行したところ
上手くいきました。ありがとうございます!

>>353
>>354
>>355
bccを学校で使ってないので仕方ないです・・・
for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
は学校でも使っていたので問題ないです。

ほかにも助けていただいた方々ありがとうございました!
357デフォルトの名無しさん:2009/09/11(金) 20:15:01
>>350
>>352
指摘ありがとうございます。入れてみたら
削除に成功しました。

>>353
>>354
学校でbccを使っていないので仕方がないです・・

>>355
それくらいならば学校でも扱っていたので大丈夫です。

ほかにも助けていただいた方々ありがとうございました!
358デフォルトの名無しさん:2009/09/11(金) 20:16:02
いやサンプルのコードがおかしいってことなんだがw
359デフォルトの名無しさん:2009/09/11(金) 20:16:39
あれ・・・?反映されてないから、もう一回書き直したけど
反映されてた。2度書きすいません。。
360デフォルトの名無しさん:2009/09/11(金) 20:19:09
てか↓みたいな書き方を教える学校ってどうなのよ?
for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];

見づらいし、バグの原因になりかねないし。

短かったら良いってもんじゃねぇよ、と。
361デフォルトの名無しさん:2009/09/11(金) 20:28:53
その程度で?
362デフォルトの名無しさん:2009/09/11(金) 20:29:50
>>361
小さいことをきっちりとやってかないと大きいプログラムを書いた時に
ひどいことになる
363デフォルトの名無しさん:2009/09/11(金) 20:31:01
>>360
何の問題もない
364デフォルトの名無しさん:2009/09/11(金) 20:33:59
>>362
無駄な処理をしないよう努力を重ねないと
いざ完成したプログラムが遅くて使い物にならないんですね。
わかります。
365デフォルトの名無しさん:2009/09/11(金) 20:34:21
仕事用以外なら書き方なんか好きにすればいいよ。
俺は仕事でもスパゲッティーコード量産してるけどなw
366デフォルトの名無しさん:2009/09/11(金) 20:36:27
短縮至上主義 VS 字下げ至上主義の宗教対立は見飽きた
いいぞもっとやれ
367デフォルトの名無しさん:2009/09/11(金) 21:01:19
>>360
for (i=j=0; str[i] != '\0'; i++)
{
 if (str[i] != c)
 {
  str[j] = str[i];
  j++;
 }
}

見やすくなったし、バグの原因になりえなくなったかな?
368デフォルトの名無しさん:2009/09/11(金) 21:06:16
>>367
個人的には
str[j++]=str[i];
の方がバグになりにくい
369デフォルトの名無しさん:2009/09/11(金) 21:17:18
>>367
無駄に行数が増えて見辛い
370367:2009/09/11(金) 21:28:44
>>366がいうところの字下げ至上主義のコードって多分こうだろうと思って
書いただけです><

求) >>360 のレス
371デフォルトの名無しさん:2009/09/11(金) 21:32:48
字下げすればいいってもんでもないよな
もっと分かりやすいコードかけよw
372デフォルトの名無しさん:2009/09/11(金) 21:34:47
>>371の分かりやすいコードを待つスレになりました
373デフォルトの名無しさん:2009/09/11(金) 21:35:03
>>370
俺としては、
↓にするだけでいいと思ってるw
for(i=j=0; str[i]; i++){
if(str[i]!=c){
str[j++] = str[i];
}
}
374デフォルトの名無しさん:2009/09/11(金) 21:37:43
誰か宿題もってきてこの流れを断ち切れよ
375デフォルトの名無しさん:2009/09/11(金) 21:38:50
じゃあカルマン渦を3次元で表わすコード教えて
376デフォルトの名無しさん:2009/09/11(金) 22:02:07
377デフォルトの名無しさん:2009/09/11(金) 23:29:17
久しぶりに来た。未解決案件は?
378デフォルトの名無しさん:2009/09/12(土) 03:06:36
>>377
100の超階乗を表示するプログラムをつくれ。
379デフォルトの名無しさん:2009/09/12(土) 03:09:22
超階乗というとアッカーマン関数に出てくるあれか
380デフォルトの名無しさん:2009/09/12(土) 05:34:36
378みたいなあまり現実的じゃないものよりも、試し割り(素数判定)
を限りなく効率化してみようぜ

試し割りの時点で効率的じゃないんだけどな。
381デフォルトの名無しさん:2009/09/12(土) 06:10:17
[1] 授業単元: 情報工学:数理I
[2] 問題文(含コード&リンク): ガウス行列を既約ガウス行列に変形する関数を定義せよ

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.1
 [3.3] 言語: C
[4] 期限: 9月18日
[5] その他の制限: 特になし
382デフォルトの名無しさん:2009/09/12(土) 06:39:05
>>381
http://nojiriko.asia/prolog/t310.html

こんなん見つけた
つまり過去ログを漁れ

そこに答えはある
383デフォルトの名無しさん:2009/09/12(土) 07:19:37
>>378
>>319,321
効率は果てしなく悪そうだが
384デフォルトの名無しさん:2009/09/12(土) 09:31:05
3$じゃね?
385デフォルトの名無しさん:2009/09/12(土) 09:59:15
定数変えれば普通に動きそうに見えるが
386デフォルトの名無しさん:2009/09/12(土) 10:19:26
boost::bigintがちゃんと動くという前提で、やっつけじゃなくまともに書き直してみるとか
387デフォルトの名無しさん:2009/09/12(土) 17:31:10
最近は宿題がへってさびしーな
388デフォルトの名無しさん:2009/09/12(土) 17:33:23
JXTAを用いて(ry
389デフォルトの名無しさん:2009/09/12(土) 18:29:29
大学は夏休みなげーからな
390デフォルトの名無しさん:2009/09/13(日) 15:00:18
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9936.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 9月15日00:00迄
[5] その他の制限:
テキストに記載してあります。期限がかなり急なのですが助けていただけると非常に有難いです。
よろしくお願いいたします。
391デフォルトの名無しさん:2009/09/13(日) 15:21:09
定義って定義作って正規表現なりで抜き出せってことか?
392デフォルトの名無しさん:2009/09/13(日) 15:34:46
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9937.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
 [3.3] 言語:C言語
[4] 期限:9月13〜15日
[5] その他の制限:問題はテキスト内に書きました。

すみませんが宜しくお願い致します
393デフォルトの名無しさん:2009/09/13(日) 15:35:46
>>392
1以上って1含んじゃうけどいいのかよ・・・
394デフォルトの名無しさん:2009/09/13(日) 15:40:22
#include<stdio.h>

main()
{
    int i,n,wa;
    printf("正の整数を入力してください:");
    scanf("%d",&n);
    wa=0;
    for(i=1;i<n;++i)
    {
        wa=wa+i;
    }
    printf("1から%dまでの和:%d\n",n,wa);
}
395デフォルトの名無しさん:2009/09/13(日) 15:41:53
>>392
scanf("%d", n);
wa=0;
for(i = 0; i<n;i++)
{
wa = wa + i;
}
396デフォルトの名無しさん:2009/09/13(日) 15:43:39
あれn+1じゃねーの
main()
{
    int i,n,wa;
    printf("正の整数を入力してください:");
    scanf("%d",&n);
    wa=0;
    for(i=1;i<n+1;++i)
    {
        wa=wa+i;
    }
    printf("1から%dまでの和:%d\n",n,wa);
}
397デフォルトの名無しさん:2009/09/13(日) 15:52:59
>>390
もしかしたら解釈間違えているかも知れれないが、こんな感じで。
関数化は機能別にした。
あと、動作は保障しない。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9938.zip
398デフォルトの名無しさん:2009/09/13(日) 16:15:13
単語の数ってそういうことだったのかw
単語それぞれについて数えてたよ・・・ひーん
399デフォルトの名無しさん:2009/09/13(日) 16:38:55
>>397
おい
警告 W8004 dai3.c 7: 'p' に代入した値は使われていない (関数 WordCount )
警告 W8081 dai3.c 26: void 関数は値を返してはならない (関数 WordCuttert )
警告 W8067 dai3.c 36: 値を伴わない return と伴う return の両方が使われている (関数 WordCuttert )
警告 W8004 dai3.c 24: 's' に代入した値は使われていない (関数 WordCuttert )
警告 W8004 dai3.c 24: 'p' に代入した値は使われていない (関数 WordCuttert )
400デフォルトの名無しさん:2009/09/13(日) 16:40:30
/*単語とはそれ文字の集合に意味があり、空白や訓読点などで区切られた文字の羅列である。*/
401デフォルトの名無しさん:2009/09/13(日) 16:55:39
>>399
あれ??ちょっと見てくる。
402デフォルトの名無しさん:2009/09/13(日) 16:56:18
>399
>警告 W8081 dai3.c 26: void 関数は値を返してはならない (関数 WordCuttert )
これだけ致命的に間違っているが、他は特に問題ないね
403デフォルトの名無しさん:2009/09/13(日) 16:57:03
>>402
別に、致命的じゃないだろ。
404デフォルトの名無しさん:2009/09/13(日) 17:08:10
>>399
えーっと、VC9で互換性の警告しか出なかったから、見落としてた。
ポインタ*pはこういう使い方しないとstrtokが動作しないんですよ。
初期化で警告が出てるなら、NULLを消しても問題ないと思います。
WordCutterはコピペして作ったからおかしいところがあったんだなぁ。。。
いや、すまん。

int WordCutter(char *Fname){
    FILE *fp;
    char str[10240];
    char *p=NULL,*s=NULL;
    fp=fopen(Fname,"rt");
    if(fp== NULL) return -1;
    while(fgets(str,10240,fp) != NULL){
        p=str;
        while((s=strtok(p," \'\n-,.;"))!=NULL){
            p=NULL;
            printf("%s\n",s);/*表示*/
        }
    }
    fclose(fp);
    return 0;
}

>>400
それ防衛的でてきとーな文章だから信頼性は低いよ。(汗
405デフォルトの名無しさん:2009/09/13(日) 17:16:39
>>398
単語の文字数がほしかったら、WordCutterのstrtokからもらってるポインタsをstrlenすればいいとおもう。
406デフォルトの名無しさん:2009/09/13(日) 17:20:24
>>404
「それ文字」
407デフォルトの名無しさん:2009/09/13(日) 17:25:31
>>405
そういうこっちゃなくて、Hitした単語それぞれが、文章中にいくつあるかを数えるように作ってしまったって事w
問題文読み直してみると >>397 が正しいな、って
408デフォルトの名無しさん:2009/09/13(日) 17:50:15
>>407
あぁ、そういうことか。そういう風にも取れるなぁ。
俺の解釈が間違ってないといいんだけどねぇ。。。
409デフォルトの名無しさん:2009/09/13(日) 18:00:09
>>390です。返信遅れてしまいすみません。
急な依頼を請け負って頂いて非常に助かりました。
ここまでしていただいた>>397->>408のみなさん、どうもありがとうございます。
410デフォルトの名無しさん:2009/09/13(日) 18:44:18
>>407 の解釈もありかなぁーと思ったので余興で作ってみた。

単語のヒットカウント。スタックオーバーフロー注意。あと動作は保障しない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9939.zip
411392:2009/09/14(月) 12:06:13
答えてくれた方々ありがとうございました!
非常に助かりました、本当にありがとうございます。
412デフォルトの名無しさん:2009/09/15(火) 01:36:11
[1] 授業単元:C言語・基礎応用
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9940.txt
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:Windows Visual Studio 2005 Professional
 [3.3] 言語: C++
[4] 期限: 9月15日 21:00まで
[5] その他の制限: 標準ライブラリ使用可能だが、できるだけ分かりやすく記述すること。

データ圧縮・解凍は初めて習いましたので、
よろしく、お願いします。
413デフォルトの名無しさん:2009/09/15(火) 02:14:54
414デフォルトの名無しさん:2009/09/15(火) 02:58:46
>>412
作ってみた。C++でSTL使ってるが配列としてしか使ってないから、知ってれば簡単に読めると思う。
あとファイルポインタの名前は見落としてたから、読み替えてくれ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9942.zip

STLは標準ライブラリの範疇だよね??
最後に、動作は保障しない。
415412 ◆Jz9y3GJYBc :2009/09/15(火) 08:33:47
>>413-414
ありがとうございましたm(__)m
416デフォルトの名無しさん:2009/09/15(火) 22:40:29
【質問テンプレ】
[1] 二次元配列
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9944.txt
[3] windows visual studio2005
 [3.1] OS: (Windows vista
 [3.2] windows visual studio2005
 [3.3] 言語: C
[4] 期限: 9月16日15時
[5] その他:途中まではやってあるのでそれっぽくやっていただければ何も文句などないです!
417デフォルトの名無しさん:2009/09/16(水) 00:28:43
>>416 奇数だけ
#include <stdio.h>

int main(void){
int hairetu[11][11];
int i, n, x, y, next_x, next_y;

printf("数字を入力してください。ただし、10以下の数字を入力にしてください。\n奇数or偶数によって魔方陣を表示します");
scanf("%d",&n);

memset(hairetu, 0, sizeof(hairetu));
if(n%2 && n<12){
x=n/2;y=0;
for(i=1;i<=n*n;i++){
next_x=(x+1)%n;
next_y=(y+n-1)%n;
if(hairetu[next_y][next_x]){
next_x=x;
next_y=(y+1)%n;
}
hairetu[y][x]=i;
x=next_x;
y=next_y;
}
}
for(y=0;y<n;y++){
for(x=0;x<n;x++) printf(" %2d", hairetu[y][x]);
printf("\n");
}

return 0;
}
418デフォルトの名無しさん:2009/09/16(水) 03:17:37
419デフォルトの名無しさん:2009/09/16(水) 18:33:39
>>417
>>418
ありがとうございます!!!!
C言語って書いてたけどC++でした。でも問題ないのでこのまま生かせていただきます。感謝。
420デフォルトの名無しさん:2009/09/18(金) 00:47:24
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
車のナンバーや電車の切符の裏などにある4桁の数字。その数字を四則演算し10にするというクイズを解くプログラムをお願いします。
1 2 3 4 と言う4つの数字であれば、すべて足せば10になりますし
2 3 5 7 は{(3+7)/2+5}で10になります。

数字の順番は変えてもOK(上のように2357を3725と並び替えている)
二つの数字をくっつけて1つにしてもOK(0 0 1 2を20-10)

数字を4つ入力し、全パターンを出力するプログラムをお願いします。

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:GCC)
 [3.3] 言語: C
[4] 期限: 9月21日(月)
[5] その他の制限: 制限無し よろしくお願いします。
421デフォルトの名無しさん:2009/09/18(金) 10:56:56
>>420
>二つの数字をくっつけて1つにしてもOK(0 0 1 2を20-10)
1,0,0,0→10,00→0010 みたいのもアリ?* + / -に加えた演算の一つとして考えていいのかな
422デフォルトの名無しさん:2009/09/18(金) 13:50:03
>>421

1,0,0,0→10,00→0010 はアリだと思います。
423デフォルトの名無しさん:2009/09/18(金) 15:27:04
10,00と10,0,0は別扱い?
424デフォルトの名無しさん:2009/09/18(金) 15:40:20
10,0,0はナシじゃないでしょうか?
425デフォルトの名無しさん:2009/09/18(金) 15:50:09
くっつけを二項演算の一種として取り扱ってやったらパターン増えすぎてワロタ
表示結果は (3+7)/2+5 みたいな形式じゃないとまずい?これが結構面倒なんだな
426デフォルトの名無しさん:2009/09/18(金) 16:02:51
そんな大変か・・・?
427デフォルトの名無しさん:2009/09/18(金) 16:16:30
俺のスキルではな!
428デフォルトの名無しさん:2009/09/18(金) 16:34:12
(1+(2+(3+4))) = 10
(1+((2+3)+4)) = 10
((1+2)+(3+4)) = 10
((1+(2+3))+4) = 10
(((1+2)+3)+4) = 10
(1+(2+(4+3))) = 10
(1+((2+4)+3)) = 10
....
こんなのが5*4!=120通りも重複して表示される俺のプログラムゴミ過ぎる
429デフォルトの名無しさん:2009/09/18(金) 16:38:35
不必要な括弧を取り除くのも面倒そうだな…
')' 直後が * / 以外の場合省略可 ってところになるのかな
430デフォルトの名無しさん:2009/09/18(金) 18:51:52
逆ポーランドでやった方がいいんじゃね
431デフォルトの名無しさん:2009/09/18(金) 19:02:38
n個の要素をそれぞれ2要素の組(順番は無視)でくくり続けて、一つの括弧に纏めるパターンの数て、どうやって出せばいいかな?
4個の場合は15個だと思うけど、n個の場合がわかんね

>>420 をとりあえずやってみたけど、合ってる気がしないわ。まぁ何かの参考になれば
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9947.c
432デフォルトの名無しさん:2009/09/18(金) 22:45:54
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9948.txt
[3] 環境
 [3.1] OS: Windows/vista
 [3.2] コンパイラ名とバージョン:Micro Soft Visual C++ 2008
 [3.3] 言語: C++
[4] 期限: 2009年9月20日まで
[5] その他の制限: あまり難しい表現は使わずに(大学一年からプログラムを始めたレベル)よろしくお願いします

433デフォルトの名無しさん:2009/09/19(土) 02:29:00
>>432
正直、自力でやれよってレベル
434デフォルトの名無しさん:2009/09/19(土) 02:55:16
>>432
#include <stdio.h>

int main(void) {
FILE *fp;
fp = fopen("data.txt", "a");
if (fp == NULL) {
printf("ファイルが開けませんでした\n");
} else {
char name[100];
int y, m, d;
while (scanf("%s %d %d %d", name, &y, &m, &d) != EOF) {
fprintf(fp, "%s %d %02d %02d\n", name, y, m, d);
}
}
return 0;
}
435ぅゅ ◆e6.oHu1j.o :2009/09/19(土) 20:07:27
んん・・・いいソースが思いつかない

else{
fprintf(fp,gets(""));

436デフォルトの名無しさん:2009/09/20(日) 00:22:08
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9949.txt
[3] 環境
 [3.1] OS: Windows/vista
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2008
 [3.3] 言語: C
[4] 期限: 2009年9月22日まで
[5] その他の制限: まだ習い始めて半年ほどです。
#include <stdio.h>のみの使用でお願いします。
437デフォルトの名無しさん:2009/09/20(日) 00:50:06
>>436
これ本当に問題文を出題されたまま全文を書いてるのか?

1
#include <stdio.h>

int main(void)
{
double x[3], y[3], p = 0;
int i;
for (i = 0; i < 3; i++) { printf("input x[%d] >> ", i); scanf("%lf", &x[i]); }
for (i = 0; i < 3; i++) { printf("input y[%d] >> ", i); scanf("%lf", &y[i]); }
for (i = 0; i < 3; i++) p += x[i] * y[i];
printf("%f\n", p);
return 0;
}
438デフォルトの名無しさん:2009/09/20(日) 00:56:19
>>436
2
#include <stdio.h>

int main(void)
{
int s = 1, n = 1, i;
for (i = 1; i < 20; i++) { s += n * 2; n *= 2; }
printf("%d\n", s);
return 0;
}
439デフォルトの名無しさん:2009/09/20(日) 01:01:28
>>436
3
#include <stdio.h>

int main(void)
{
int n, i;
printf("正数を入力してください");
scanf("%d", &n);
for (i = 2; i <= n / 2; i++)
if (n % i == 0) { printf("素数ではない\n"); return 0; }
printf("素数\n");
return 0;
}
440デフォルトの名無しさん:2009/09/20(日) 02:54:15
>>437 1) は入力要らないだろう。
441440 デフォルトの名無しさん:2009/09/20(日) 03:22:37
#include <stdio.h>
int main(void)
{
  int i;
  double x[3], y[3], p;

  for (i = 0; i < 3; i++) scanf("%lf", &x[i]);
  for (i = 0; i < 3; i++) scanf("%lf", &y[i]);

  printf("\nx=");
  for (i = 0; i < 3; i++) printf("%lf ", x[i]);
  printf("\ny=");
  for (i = 0; i < 3; i++) printf("%lf ", y[i]);
  for (p = 0, i = 0; i < 3; i++) p += x[i] * y[i];
  printf("\nx*y=%f", p);
  return 0;
}
442デフォルトの名無しさん:2009/09/20(日) 08:15:10
>>440
えっ?
443デフォルトの名無しさん:2009/09/20(日) 09:53:07
[1] 授業単元:統計プログラミング
[2] 問題文(含コード&リンク):
1.適当な方程式 y = a x + b を定め、n 個の x に対してランダムな誤差を持つ y のサンプルデータを生成するプログラムを作成せよ。
 出力形式は、例えば改行で区切られた1行ごとにスペース区切りで x, y の値を標準出力に書き出す。
 ランダムな誤差に関しては、適当な範囲内の乱数を単純に各々の値に適用すればよい。
 (本来は正規分布に従った乱数を用いる方が望ましい)
2.前問で作成したプログラムの出力から、最小二乗法により、逆に a, b を求めるプログラムを作成し、
 求めた値に関して、前問のプログラムで設定した a, b に対する考察をせよ。
3.以上を二次方程式(y = a x^2 + b x + c)に対して繰り返し、a, b, c に関して考察せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: (C/C++/どちらでも可)
[4] 期限: 2009年09月24日
[5] その他の制限:g++で通常使えるライブラリーは使用しても問題ありません。
444デフォルトの名無しさん:2009/09/20(日) 17:13:34
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):比較:文字列2つ入力後、先頭から5文字を比較した結果を表示しなさい
[3] 環境
 [3.1] OS:vista
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2008
 [3.3] 言語:C
[4] 期限:
[5] その他の制限:strncmpを使った場合とそうでない場合二つお願いします。
445デフォルトの名無しさん:2009/09/20(日) 17:54:48
446デフォルトの名無しさん:2009/09/20(日) 18:11:32
   else if ( result = 0 )
line34=>   else if ( result == 0 )
447446 デフォルトの名無しさん:2009/09/20(日) 18:23:43
#include <stdio.h>
#include <string.h>

int main(void) {
  char s1[100];
  char s3[100];
  int result;

  printf(">"); scanf("%s", s1);
  printf(">"); scanf("%s", s3);

  result = strncmp( s1, s3, (size_t)5 );
  if ( result < 0 )
    printf( "%s < %s\n", s1, s3 );
  else if ( result == 0 )
    printf( "%s = %s\n", s1, s3 );
  else
    printf( "%s > %s\n", s1, s3 );

  return 0;
}
448デフォルトの名無しさん:2009/09/20(日) 18:29:20
入力が5文字未満の時も考慮して、
char s1[100] = {0};
char s3[100] = {0};
したほがいんじゃね?
449デフォルトの名無しさん:2009/09/20(日) 18:30:30
あ、memcmpじゃないから大丈夫か
450デフォルトの名無しさん:2009/09/20(日) 23:44:19
>>443
ttp://codepad.org/So6fWPxB

boost が通常使えるライブラリーかどうかは聞くな

リンク先の Output で数字が全部 nan になってる_| ̄|○
ローカルではちゃんと表示されたんだが
451デフォルトの名無しさん:2009/09/21(月) 00:07:42
>>434

遅くなりましたがありがとうございました!
452デフォルトの名無しさん:2009/09/21(月) 12:36:25
[1] 授業単元:アルゴリズム c++
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9950.zip
STLのベクタークラスを改良したクラスを実装する課題。
zip内のコードは自分でトライしてみた分です。
問題分とヘッダーとCPPが入っています。
[3] 環境
 [3.1] OS: Mac OS X 10.5
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限: 2009年09月22日
[5] その他の制限:問題文にある通りSTLはiostreamとcstdlibが使用可能です。
宜しくお願いします。
453デフォルトの名無しさん:2009/09/21(月) 12:41:25
改良の方向性の指示はないの?
454デフォルトの名無しさん:2009/09/21(月) 13:00:30
>>453
基本的に問題文中にある各種演算子操作(+, +=, [], >>, <<, etc..)が出来れば良いのですが、
テンプレートを使ってデータタイプに関係なくランできることが望ましいです。
455デフォルトの名無しさん:2009/09/21(月) 13:02:38
ああ、見てなかった
OSX向けの環境ねーからやっても仕方ないか・・・
456デフォルトの名無しさん:2009/09/21(月) 13:09:11
>>455
後述になって申し訳ありませんが、
OSはLinux(Ubuntu)とWinでも可能です。
宜しければお願いします。
457デフォルトの名無しさん:2009/09/21(月) 13:24:26
蝠城。・txt
文字化けしてるから無理だ...文字化けする前のファイル名は?(//^^)
458デフォルトの名無しさん:2009/09/21(月) 13:36:16
問題.cppです。
一応ファイル名変えて再うpしておきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9951.zip
お手数お掛けします。
459デフォルトの名無しさん:2009/09/21(月) 14:51:51
>>452
dsexceptions.hってなんぞ?
460デフォルトの名無しさん:2009/09/21(月) 14:59:40
最初からプロジェクトグループに入っていたんですが、
【dsexceptions.h】
#ifndef DS_EXCEPTIONS_H
#define DS_EXCEPTIONS_H
class UnderflowException { };
class IllegalArgumentException { };
class ArrayIndexOutOfBoundsException { };
class IteratorOutOfBoundsException { };
class IteratorMismatchException { };
class IteratorUninitializedException { };
#endif
が別ヘッダーで入ってました。


461デフォルトの名無しさん:2009/09/21(月) 15:03:27
>>演算子のオーバーロードが一癖ある。
462デフォルトの名無しさん:2009/09/21(月) 17:12:51
とりあえず動くようにしたもののかなり謎な機能満載だなぁ。。。
意図が読めないものは放置してある。
あと、テンプレートのコードはヘッダに書かないと機能しない。
またはcppをヘッダにインクルードしないと無理。
というわけでヘッダにべた書きした。

ユニットテスト通すことだけ考えて作ったから後のカスタマイズはご自分で。
あと、動作は保障しない。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9952.zip

あぁ、そうだ。俺の環境の都合でpragma使ってるけど、動かないなら消してくれ。というか書き換えてくれ。
463デフォルトの名無しさん:2009/09/21(月) 17:55:36
バブルソートと選択ソートの違いがよくわからない・・・
464デフォルトの名無しさん:2009/09/21(月) 18:10:16
クルクルって変わるのがバブルソートでグルンって変わるのが選択ソート
465デフォルトの名無しさん:2009/09/21(月) 18:57:19
>>452 >>462
pragmaはともかくVC拡張使ったらまずいだろう
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9953.txt
466443:2009/09/21(月) 20:43:37
>>450
遅くなりましたが、ありがとうございます。ちょっと難しそうですが、頑張って読んで参考にします!
467462:2009/09/21(月) 21:04:30
>>465
普段からVCしか使ってないからどれが拡張かはっきりしないです。orz
468デフォルトの名無しさん:2009/09/21(月) 21:11:22
>>463
隣接要素を比較・交換することで気泡(最小要素)が徐々に上へ浮かんでいく感じのがバブルソート。
全要素を一通り比較して最小要素を1つ選択しておいてからそれを交換するのが選択ソート。
469452:2009/09/21(月) 23:29:29
>>462>>465
遅くなりましたが、お二人とも大感謝です。
なるほどって部分が多く、参考になり助かりました!
ありがとうございます。

470デフォルトの名無しさん:2009/09/21(月) 23:41:37
普段Javaを使っているものですが、C言語も使えといわれました。
そこで線形リストをつくり、そこにEが打たれるまでデータを追加していき、表示する課題がでました。
リストのデータは文字列と数字です。数字のほうは正常に表示されるのですが、文字列がうまくいきません。どなたか原因を教えてくださいませ
471470:2009/09/21(月) 23:42:27
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct list{
char *name;
int packet;
struct list* next;
};
struct list head;
addlist(char name[],int packet){
struct list *p, *q, *newcell;
q = &head;
p = head.next;
while(p!=NULL){
q = p;
p = p->next;
}
newcell=malloc(sizeof(struct list));
newcell->name=name;
newcell->packet=packet;
newcell->next=p;
q->next=newcell;
}
main(){int packet;char name[512];struct list *p;
scanf("%s %d",&name,&packet);
while(strcmp(name,"E")){
addlist(name,packet);
scanf("%s %d",&name,&packet);
}
for( p=head.next;p!=NULL;p=p->next ){printf("%s %d\n", p->name ,p->packet);}
}
472デフォルトの名無しさん:2009/09/21(月) 23:48:09
>>471
nameの領域を別途確保し、strcpyする必要があるよ
473デフォルトの名無しさん:2009/09/21(月) 23:48:16
>>470
テンプレ書いてくれ。

Javaだとメモリのコピーはあんまり意識しないだろうけど、
ポインタはメモリを指してる数字を保持してるだけで、
それをコピーしたからってディープコピーされるわけがない。
474デフォルトの名無しさん:2009/09/22(火) 02:32:02
>newcell->next=p;
NULLが入ってるとはいえ、この書き方は気持ち悪い
475デフォルトの名無しさん:2009/09/22(火) 03:09:08
headにはいつまでもデータが入らなかったり?
476デフォルトの名無しさん:2009/09/22(火) 03:41:34
先頭が空なのは別に珍しくはない
477デフォルトの名無しさん:2009/09/22(火) 03:48:01
それならただのポインタにすればいいのに
478470:2009/09/22(火) 10:16:42
申し訳ございません、テンプレ書くの忘れてました。
[1] 授業単元:??
[2] 問題文(含コード&リンク):>>471
[3] 環境
 [3.1] OS:WindowsVista
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:連休中
[5] その他の制限: 特になし

それとあつかましいかとは思いますが出来れば回答ソースも乗せていただけるとありがたいです。
479デフォルトの名無しさん:2009/09/22(火) 10:39:26
>newcell->name=name;

newcell->name=malloc(strlen(name) + 1);
strcpy(newcell->name, name);
にすりゃいいんじゃね?
480デフォルトの名無しさん:2009/09/22(火) 10:42:18
っても、
listのchar *nameをchar name[512]
newcell->name = name を strcpy(newcell->name, name)
にするだけぢゃないの?
もしくは newcell->name = strdup(name) とか?
481デフォルトの名無しさん:2009/09/22(火) 10:42:59
うわぁ、スレ更新してなかったよ。同じ内容のレスがor2
482470:2009/09/22(火) 10:47:20
>>479-480
ありがとうございます、言われたとおりにやればできました。
これで何とか先輩に怒られなくてすみそうです。
本当にありがとございました。
483デフォルトの名無しさん:2009/09/22(火) 11:09:35
[1] 授業単元:C++ STLの使い方
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9954.txt
[3] 環境
 [3.1] OS: Windows XP, Linux RedHat
 [3.2] コンパイラ名とバージョン:g++, exlipse
 [3.3] 言語: C++
[4] 期限: 遅くとも9月23日まで
[5] その他の制限: 標準ライブラリ使用可能

C++書き始めて数ヶ月です。
どなたかのご助力、宜しくお願いします!
484デフォルトの名無しさん:2009/09/22(火) 19:50:19
>>483
こんな感じで、STL万歳。
アルゴリズムのヘッダ使えばもうちょっと短くなるかも。
一応、説明と自己満足のために色々べた書きした。
あと、動作は保障しない。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9955.zip
485デフォルトの名無しさん:2009/09/22(火) 20:42:59
>>483
手ごたえなさそうだったから凝ってシェルみたいにしてみた
ガイシュツだけど、よかったらどうぞー
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9956.cpp
486485:2009/09/22(火) 21:43:29
ごめん、atoi使ってるのにstdlib.hをincludeしてなかった
もし使うなら追加してね
487デフォルトの名無しさん:2009/09/22(火) 21:52:59
484みたいなのRuby使えば楽々なのになぁとか思っちゃう今日この頃
488484:2009/09/22(火) 22:02:00
>>487
もうちょっと便利機能使えれば、もちょっと短くなるけど、出題者にとっての黒魔術にはしたくなかった。
なってるかも知れんけど。
テンプレートとイテレータが解れば解けると思ったんだけど。
あと、ここはC/C++のスレだしなぁ。
489デフォルトの名無しさん:2009/09/22(火) 22:02:42
半角Ruby板でやれ
490デフォルトの名無しさん:2009/09/22(火) 22:12:56
そーりー。
491デフォルトの名無しさん:2009/09/22(火) 22:20:54
楽々な代わりに色々失ってるんだけど、それを分からない奴ほど意固地になって
「そんなものは今時必要無い」って言い張るんだよな
巣から出てこなければいいのに
492デフォルトの名無しさん:2009/09/22(火) 22:24:41
Ruby信者に喧嘩を売るな、めんどくさいから
493デフォルトの名無しさん:2009/09/22(火) 22:31:57
ちなみに俺は創価信者だ
494デフォルトの名無しさん:2009/09/22(火) 22:35:09
うちは確か真言宗
495デフォルトの名無しさん:2009/09/22(火) 22:49:37
>>462=>>484だとしたら何も成長していないな
496デフォルトの名無しさん:2009/09/22(火) 22:57:52
ちょ、487俺だけどそんなにRubyって嫌われてんのか
497デフォルトの名無しさん:2009/09/22(火) 23:03:58
天然ですか。可愛いですね
(゚ 3゚)チューしちゃうぞ
498デフォルトの名無しさん:2009/09/22(火) 23:09:34
MoE信者と500系信者とRuby信者は似ている
499デフォルトの名無しさん:2009/09/22(火) 23:11:15
マカーにも似てる
500デフォルトの名無しさん:2009/09/22(火) 23:48:00
>>484さんこんばんは.
>>484さんはXXXYYYZZZのなかからYYZZを見つけられますか?
これまで仕事で趣味で書いたプログラム全部書き直しですね.
501デフォルトの名無しさん:2009/09/23(水) 00:20:45
中学生の頃は俺もその間違い犯してたわ
502動作は保障しない人:2009/09/23(水) 00:38:40
>>495
数日でスーパーマンになる人発見。明日はX-Menだな。
>>500
普通のchar文字列なら、strstrつかわないか?
まぁ、普通にバグってたからそこだけ直したよ。ユニットテストしてるけど、条件がなかなか思い浮かばん。
あと、即興で書いたんで被害なんか無いぞ。
bool FindStr(std::list<char>::iterator& it,std::list<char>::iterator& end,char* str){
    std::list<char>::iterator T;
    int i=0;
    while(it != end){
        if(FindChar(it,end,str[0])==true){
            T=it;
            while(*T==str[i]){
                i++;
                T++;
                if(str[i]=='\0') return true;
                if(T == end) return false;
            }
        }else{
            break;
        }
        i=0;
        it++;
    }
    return false;
}
503デフォルトの名無しさん:2009/09/23(水) 00:56:34
とりあえずコンパイラオプションで警告レベルを4にしてみろって
504デフォルトの名無しさん:2009/09/23(水) 01:08:41
VCだとこれでコンパイル通るんかよ。勝手にテンポラリ変数つくってくれんのか
505デフォルトの名無しさん:2009/09/23(水) 01:14:27
>>503
なるほど、一時オブジェクトの参照って標準じゃないのね。知らんかったわ。
返り値にしたら駄目なのは解ってたが、そうだったのか。
便利なんだけどなぁ。。。

勉強になった。ありがとう。
506デフォルトの名無しさん:2009/09/23(水) 01:19:31
あぁ、そうそう。修正点は以下。

bool FindString(std::list<char>& Line,char* string){
    std::list<char>::iterator beg= Line.begin();
    std::list<char>::iterator end= Line.end();
    return FindStr(beg,end,string); 
}

雑食のほうが色々わかっていいんだろうけど、VCのインテリセンスから抜けるにはもう遅い。。。
507デフォルトの名無しさん:2009/09/23(水) 01:34:35
ほとんどVCだけしか使ってないけど普通に分かるから雑食とか関係ない
508デフォルトの名無しさん:2009/09/23(水) 01:39:08
夜遅くにすいません、お願い致します
下はできるところまではやってみましたが、結果がうまくいきません
[1] 授業単元: プログラミング
[2] 問題文:4行4列のA行列と4行2列のB行列の積を求めよ
[3]環境[3.1]OS:vista[3.2]bcc 32[3.3]C言語
[4]期限:23日中
[5]
#include <stdio.h>
int main()
{ int i,j; int A[4][4]; float B[2][4],C[2][4];
//計算を行う行列の値を格納する。
for(i=0;i<4;i++) {
for(j=0;j<4;j++){
printf("A %d,%d\n",i+1,j+1);
scanf("%d",&A[i][j]);
}
}
for(s=0;s<4;s++) {
for(t=0;t<2;t++){
printf("B %.1f,%.1f\n",s+1,t+1);
scanf("%f",&B[s][t]);
}
}
//受け取った2つの行列の掛け算を行う。
for(i=0;i<4;i++){
for(j=0;j<2;j++){
C[i][j]=A[i][j]*B[i][j];
}
}

return 0;
}
509動作は保障しない人:2009/09/23(水) 01:40:54
うーん。気が変わるまでしばらく投稿は控えるよ。
みんながんばれ。

それじゃ、お休み。
510デフォルトの名無しさん:2009/09/23(水) 01:43:02
行列の掛け算のやり方が違うだろw
511デフォルトの名無しさん:2009/09/23(水) 01:45:02
>C[i][j]=A[i][j]*B[i][j];
とりあえず行列の掛け算を紙に書いてみ?
512デフォルトの名無しさん:2009/09/23(水) 01:48:35
言われて気づきました
わけのわからない計算してますね
やり直してみます
513デフォルトの名無しさん:2009/09/23(水) 01:52:41
>>509
おやすみ。まァ、色んな誤解が解けたんだし
こいうトコでソース公開する利点を享受できたと思って、めげずに今後も頑張れよ
514デフォルトの名無しさん:2009/09/23(水) 02:03:35
>>508ですが、式を直したところ、どうも前半4つだけが
値がおかしくなるようです。
もし教えていただけるならヒントだけでもお願いできないでしょうか
515デフォルトの名無しさん:2009/09/23(水) 02:10:42
配列の要素数とi,jが一致してないからとか?
516デフォルトの名無しさん:2009/09/23(水) 02:19:04
>>515
その通りだったみたいです
何度もありがとうございました
517デフォルトの名無しさん:2009/09/23(水) 02:37:57
>>483
ttp://codepad.org/CxUnq93O

遅すぎた感じもするが、面白そうだったのでやってみた

29-31行目について誰か詳しい方いれば教えてください
518デフォルトの名無しさん:2009/09/23(水) 15:56:54
>>517
デストラクタがよきにはからってくれるんじゃないの?
519デフォルトの名無しさん:2009/09/23(水) 16:33:32
閑散として面白くないな

暇なときは、誰か興味深い課題を投げておくれよ
520デフォルトの名無しさん:2009/09/23(水) 16:38:45
>>519
問題出してみる期限は無期限。

1次不定方程式aX+bY=cの具体解を、ユークリッドの互除法で求める
プログラムを作成せよ。

ただし、定数項 c が、d=gcd(a,b) で割り切れないと、解は存在しない。
レポート本文には、ソースコードの主要な部分を掲載し、解説を付ける。
実行結果も掲載する。
521デフォルトの名無しさん:2009/09/23(水) 16:39:41
さらに追加

(1) 16桁までの正整数の加算ができるプログラムを実装せよ。
8桁以下と9桁以上で、下位桁と上位桁に分け、それぞれ加算する。繰上りに注意する。
被加数と加数は、1行ずつ入力する。各行の入力は、 1234 12345678 のように、8桁区切りで空白を入れる。
書式付入力 scanf(“%d”) では、16桁の正整数は入力できないためである。
ここで、1234 1234 は、1234 00001234 を意味する。8桁以下の場合、0 2345 のように入力する。
加算結果の出力は、1234 00005678 のように、8桁区切りとし、必要な0を補う。17桁目に繰上った場合も正しく出力する。

1234 00001234 や 5678 のように、より自然な入力が可能なように改良してもよい。
ただし、先頭に0がある数字列は、8進数と解釈されるので、少し工夫が必要である。
行入力 gets() と sscanf() を使う、文字入力 getchar() で先頭の0を読み捨てる(改行も自分で検出)、
文字配列を走査して0を飛ばす、数値変換 atoi() を使うなど。

(2) 8桁までの正整数の乗算ができるプログラムを実装せよ。入力は、12345678のように、区切りなしのままとする。
内部では、4桁以下と5桁以上で、下位桁と上位桁に分けて格納する。
乗法公式 A×B=(a1×1万+a0)×(b1×1万+b0)=(a1×b1)×1億+(a1b0+a0b1)×1万+(a0×b0) で展開して計算する。
繰上りに注意する。乗算結果は、16桁になる可能性がある。
522デフォルトの名無しさん:2009/09/23(水) 16:40:39
最後

基数rと桁数n、有理分数の分子pと分母qを入力し、p/q をr進法で、小数点以下n桁までを表すプログラムを実装せよ。
ただし、0<p<q とする。0. の部分は省略する。また、n+1桁目は、切り捨てる。
レポート本文には、ソースコードの主要な部分を掲載し、解説を付ける。実行結果も掲載する。

2 1 2 2 ⇒ 10 ; 1/2 = 0.5[10] = 0.1[2]
5 124 1000 5 ⇒ 03022 ; 124/1000 = 0.124[10] = 0.03022‥[5]
523436:2009/09/23(水) 16:43:16
>>437
ありがとうございます。
問題文はこれですべてなんです。

2の問題ですが、答えがあわないです。
524デフォルトの名無しさん:2009/09/23(水) 17:10:59
525431:2009/09/23(水) 17:43:13
じゃあ俺も出題。高卒だから数学はわかんねーし、520みたいな立派な問題はだせないけど・・・
>>431で俺が質問した問題なんだけどね、レス無かったしもう一度

a, b, c, d という4個の要素があるとするよ
ここで、こいつを (a, b), (c, d) => ((a, b), (c, d)), ((a, b), c), d => (((a, b), c), d)
といった感じで、2組のタプルで囲っていくと、最終的に一つのタプルに纏まるよね

で、問題。
このようにして、2組のタプルでn個の要素(n > 1)を一つに纏めるパターンの数を求める関数unko(n)を作ってみそ
注意して欲しいのが、(A, B) = (A, B) であること。
つまり、(a, b) = (b, a) はあたりまえとして、((a, b), (c, d)) = ((c, d), (a, b)) も成り立つ

431を作るに当たって、総当りでパターンを生成するスクリプトを書いたんだけど、これによると、
n = 4, 5, 6 => unko(n) = 15, 945, 10395
ちなみに俺は解けてない。数学分かる人だったら簡単なんだろうな・・・考え方とかあったら教えて欲しいな
526デフォルトの名無しさん:2009/09/23(水) 17:55:31
ごめん嘘、最後ミスった
n = 4, 5, 6, 7 => unko(n) = 15, 105, 945, 10395
不思議なことに、n >= 4だと、一桁目が全部5なんだよね
527デフォルトの名無しさん:2009/09/23(水) 18:31:01
試しにWolframAlpha先生に1,3,15,105,945,10395を尋ねるとa_n = (2n-1)!!だそうだ
528デフォルトの名無しさん:2009/09/23(水) 18:43:16
【質問テンプレ】
[1] 授業単元:C++
[2] ない
 [3.1] XP 自宅のPC
 [3.2] cygwin
 [3.3] C++
[4] 次の月曜日

cygwinの使い方に関する質問です。
1.cygwinの画面に表示されている文章をドラッグしてコピーすることが出来ません。
2.g++が動きません、エラー文は
bash: g++: command not found

大学のPCに元から入っているcygwinでは1,2のような事は起きません。
たしかCなら動きます。
家のPCにcygwinをDLするときに入れていないものがあると思うんですが
ググっても出てこないので何をどこに追加すればいいのか分からないです。
どなたかお願いします。
529デフォルトの名無しさん:2009/09/23(水) 18:45:56
Wolframすげえw 教えてくれてサンクス
530デフォルトの名無しさん:2009/09/23(水) 18:47:43
>>528
g++は選択して入れないとデフォルトでインストールされない。
上に関しては設定の問題
531デフォルトの名無しさん:2009/09/23(水) 18:51:47
2   1             1 <-

3   1,2  3*1       3
                 3 <-

4   1,3  4*3       12
    2,2  6*1/2     3
                15 <-

5   1,4  5*15      75
    2,3  10*3      30
                105 <-

6   1,5  6*105     630
    2,4  15*15     225
    3,3  20*3*3/2  90
                945 <-

7   1,6  7*945     6615
    2,5  21*105    2205
    3,4  35*3*15   1575
                10395 <-

8   1,7  8*10395   83160  8=1C8
    2,6  28*945    26460 28=2C8
    3,5  56*105    5880  56=3C8
    4,4  70*15/2   525   70=4C8 可換なので 1/2
                116025 <-
532デフォルトの名無しさん:2009/09/23(水) 18:54:53
>>530
そこまでは理解できたのですが後で追加することできます?
533デフォルトの名無しさん:2009/09/23(水) 18:56:49
>>532
落としてきて入れるか、一度アンインストールして
再インストールするときに選択しときゃいい
534デフォルトの名無しさん:2009/09/23(水) 18:58:17
>>528
cygwin のインストーラをもう一回立ち上げて追加するパッケージを選ぶだけじゃないか?
535531:2009/09/23(水) 19:01:01
ぼけてた
8   1,7  8*10395   83160
    2,6  28*945    26460
    3,5  56*3*105   17640
    4,4  70*15*15/2  7875
                 135135 <-
536531:2009/09/23(水) 19:58:05
>>531 のコード
#include <stdio.h>
long gcd(long a, long b){
long c;
while((c=a%b)) a=b,b=c;
return b;
}
long comb(int n, int r){
long d=1, u=1, t, i;
for(i=0;i<n;i++){
d*=(n-i);
t=gcd(u, d);
u/=t; d/=t; // 約分
u*=(r-i);
}
return u/d;
}
long unko(int n){
static long data[20]={0, 1, 1}, i, result;
if(n<1 || n>=20) return -1;
if(data[n]==0){
for(i=1,result=0;i<=(n-1)/2;i++) result+=comb(i, n)*unko(i)*unko(n-i);
if(i*2==n) result+=comb(i, n)*unko(i)*unko(n-i)/2;
data[n]=result;
}
return data[n];
}
int main(void){
int i;
for(i=2;i<=20;i++) printf("%10ld\n", unko(i));
return 0;
}
537431:2009/09/23(水) 20:45:20
>>536


クソしながら考え直してたら、すげぇ簡単な問題だったわ・・・orz
よーは、こいうこった。
最後にくくったタプルの右側と左側には、それぞれ i個とj個(n = i + j)の要素がくる
その取り方は nCi (もちろん、i = jの場合は nCi / 2)で、右側と左側についても同じことを再帰的に繰り返して、
最終的に出てきた値を掛け合わせれば終わり。Fラン大の受験問題レベルでした。サーセン(涙)
538531:2009/09/23(水) 22:19:55
nCr の記述が左右逆だった orz
539532:2009/09/23(水) 22:48:29
再インストールで解決させました。ありがとうございました。
540デフォルトの名無しさん:2009/09/23(水) 22:58:43
>>537
Fラン大には解けないよw
541デフォルトの名無しさん:2009/09/23(水) 23:07:52
>>536 はちょっと危険なコードだったw
変数 result は自動変数でないとダメだ
行数減らしのために考えなしに削るからこういう事に…
542デフォルトの名無しさん:2009/09/23(水) 23:27:47
なんか頭のおかしなヤツが復活した予感
543431:2009/09/23(水) 23:37:41
ごめん。KYだったな。以後気を付ける
544デフォルトの名無しさん:2009/09/24(木) 16:36:03
>>520
ttp://codepad.org/MRXlPX7e

一度にたくさんはできないな。。まあ、おもしろかったが
545デフォルトの名無しさん:2009/09/25(金) 13:40:54
【質問テンプレ】
[1] 授業単元: 組み込みプログラミング
[2] 問題文(含コード&リンク):
uint8 flag = 0;
uint8 countDownFlag = 0;
と、状態を制御する2つのフラグがあるが、1つの state という状態を
格納する変数だけで状態を制御するよう書き直してください。

[3] 環境
 [3.1] OS: winxp
 [3.2] コンパイラ名とバージョン: VC2008EE
 [3.3] 言語: C
[4] 期限: 本日16時まで
546デフォルトの名無しさん:2009/09/25(金) 13:44:12
       REdata=PORTE;
if (flag == 0 && (REdata & 0x01) == 0x00) {
    pattern++; // パターンをチェンジ
    pattern = pattern % 6; // パターンを0から5で表現
    jikan = setTime[pattern]; // セットタイムを時間に代入
    flag = 1; // 処理済み
}
else if (flag == 1 && ((REdata & 0x01) == 0x01)) { // 処理済みで、スイッチ0を離した
    flag = 0; // 処理待ち
}
if (countDownFlag == 1) {
if (jikan > 0) {
count++;
if (count > 50) { // かなりアバウトに1秒?
jikan--; // 表示時間を−1
count = 0;
}
}
}
if ((REdata & 0x02) == 0x00) {
countDownFlag = 1; // カウントダウンスタート
}
if ((REdata & 0x04) == 0x00) {
countDownFlag = 0; // カウントダウン停止
}
if ((REdata & 0x08) == 0x00) {
countDownFlag = jikan = pattern = 0; // すべてクリア
}
PORTC = LED_SEG[jikan % 10];
delay(10);
PORTC = LED_SEG[jikan / 10] | 0x80;
delay(10);
547デフォルトの名無しさん:2009/09/26(土) 18:44:40
>>544
ttp://codepad.org/hoJ3lue0

コードが汚かったので、一部書き直してみた
548デフォルトの名無しさん:2009/09/27(日) 01:59:19
[1] 授業単元:C言語応用
[2] 問題文(含コード&リンク):
数独の解を求めるプログラムを作成せよ。
問題はテキストファイルに入力し、引数で指定して読み込む。
答えをプロンプトに出力し、Answer_ファイル名.txtとして出力する。(1.txt→Answer_1.txt)
問題の入力は、数字のあいているところを半角スペースとする。
例)
1 7
6 9
82 94
49 68
4 5
3 7
97 65
7
74 12
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C言語
[4] 期限: 10月4日中
[5] その他の制限: 制限無し
549>>548:2009/09/27(日) 02:00:46
>>548の例題、半角スペースが詰められていますね・・・
アンダーバーに置き換えます。
_1_____7_
_6_____9_
__82_94__
49_____68
___4_5___
__3___7__
__97_65__
________7
74_____12
550デフォルトの名無しさん:2009/09/27(日) 07:47:32
>>548
Visual Studio 使ってるのでコンパイルできなかったらゴメン
(数独) ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9959.c
551デフォルトの名無しさん:2009/09/27(日) 12:09:40
>>550 行の最後に空白が有っても良いように、入り口(入力ファイル仕様)を広げてみた。
void number_place_read(const char *file_name, BOX question[9][9])
{
  char buf[80];  //追加
  :
    }
//    fgetc(fp);  // 改行読み飛ばし
    fgets(buf, 80, fp);  // 改行読み飛ばし
  }
552デフォルトの名無しさん:2009/09/27(日) 14:47:52
>>522
ttp://codepad.org/FxxI8YdL

boost に Bigint があれば、よかったのにな
553デフォルトの名無しさん:2009/09/28(月) 00:09:40
>>522
#include<stdio.h>

char symbol(int x){
static const char symbols[]="0123456789abcdefghijklmnopqrstuvwxyz";

if(x<sizeof(symbols)-1) return symbols[x];
return '?';
}

void hoge(int r, long p, long q, int n){
int i;

for(i=0;i<n;i++){
p*=r;
printf("%c", symbol(p/q));
p%=q;
}
printf("\n");
}


int main(void){
hoge(2, 1, 2, 2);
hoge(5, 124, 1000, 5);

return 0;
}
554デフォルトの名無しさん:2009/09/28(月) 00:13:17
このスレの人って親切だな
パソコン教室とか開いたほうがいいんじゃない?天職だよ
555デフォルトの名無しさん:2009/09/28(月) 01:56:23
親切のつもりで問題解いてる人なんているのかなぁ?
どこのジーザスだよ
556デフォルトの名無しさん:2009/09/28(月) 02:28:53
人は皆自分のために生きています。その結果が人のためになっている人と
人のためになっていない人がいるだけです。
557デフォルトの名無しさん:2009/09/28(月) 06:35:24
情けは人のためならず
ことわざって便利ね。
558デフォルトの名無しさん:2009/09/28(月) 08:35:19
暇つぶしのパズルのつもりでやるものだと思う
559デフォルトの名無しさん:2009/09/28(月) 08:52:51
>>558
先々週だったか、タケシの番組で見たのは。
ランダムに配置された3つの円に内接または外接する円。
8個を求める為の、方程式を求めるまたはグラフを描く。
560デフォルトの名無しさん:2009/09/28(月) 09:42:21
>>559
それって3つの円の中心が直線上に並んだときも8個になるの?
561560:2009/09/28(月) 09:46:43
各円が互いに交点、または接点を持たず、各円の中心が直線上に並ばない場合に限る、かなぁ
562560:2009/09/28(月) 09:57:41
ああ、あといずれかの円がいずれかの円に内包されてもダメか

その上で8個ならどうにかなるんじゃね?
563デフォルトの名無しさん:2009/09/28(月) 20:49:15
[1] 授業単元:離散数学
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9960.zip
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual studio 2003
 [3.3] 言語:どちらでも可
[4] 期限: 無期限
[5] その他の制限:なし

OpenGLの問題です。
もともとのプログラムだと効率が悪いので140〜160を改良しました。
この場合、他にどこをいじれば良いでしょうか?
564デフォルトの名無しさん:2009/09/29(火) 00:47:24
>>563
単純なGL固有の処理問題ならソース見て指摘もできるが
おもいきり、GL関係ないデータ処理の部分じゃねーかw
ディスプレイリストを作るとかVBOを使うとかじゃねーだろ

とにかく何をしていて何をしたいのか説明をしろ
565563:2009/09/29(火) 11:29:53
>>564
はい、説明します。
まずこのプログラムは最小の交差数を求めるプログラムなんです。
だけど交差を一つ一つ調べると処理時間がかなりかかってしまうんです。
そこで調べる交差を乱順列を使って効率的に調べられるようにしようとしてます。
566563:2009/09/29(火) 18:43:13
>>56
すいません、解決しました。
ありがとうございました。
567デフォルトの名無しさん:2009/09/29(火) 23:31:56
すみません。

c言語がまだ初心者すぎてわからないのでどうかお願いします!

■プログラム1:

りんごが30個中、腐っていたりんごが10個あったとき、
腐っていないりんごを3人で分けると、
一人当たりのりんごの個数は何個になるか、計算し、
"一人あたりのりんごの個数"と"残ったりんごの個数"を
出力するプログラム。

■プログラム2:

上記プログラム1 のリンゴの個数などの数を scanfを使ってキーボードから
入力することで、任意の個数に対して計算できるように改良したプログラム。

ただし両プログラムの変数名は、最初のりんごの個数をapple、
腐っていたりんごの個数を bad_apple、人数をpersons、
一人当たりのりんごの個数を apple_for_one、余りをrest とすること。

お願いします!
568デフォルトの名無しさん:2009/09/29(火) 23:32:38
>>567
                      クルッ
.                     ハ,,ハ    ミ  _ ドスッ
     /1べ:;:;:r─‐-!        ( ゚ω゚ )彡―─┴┴─―
.    /iィ.:.:.:.:ヾ|断だ!\       /   つ  お断りし /      ハ,,ハ
   /ヘ レj_.:.:.lるが!  \   〜′ /´ └―─┬/       ( ゚ω゚ ) お断りします
.  /.:`ソ =三_`y‐i:!    \   ∪ ∪      /        /    \
 /.:::i゛:.. `ヾニノ  j!      .\         /       ((⊂  )   ノ\つ))
./;;i::rミ、    ;:'  '!       . \∧∧∧∧/             (_⌒ヽ
丶iゝ``'   ,:'  ,t'!         <     お >            ヽ ヘ }
   ` 丶 、 /rj!        < の し 断 >       ε≡Ξ ノノ `J
────────────< 予 ま  >────────────
         ハ,,ハ  お断り<. 感 す り >         ______
        ( ゚ω゚ )  します<. !!      >        /   ./お だ ,!
       __〃`ヽ 〈_      /∨∨∨∨\        /   ! 断 が,!
   γ´⌒´-−ヾvーヽ⌒ヽ /お断りします \      / ,ハ,,ハ ! り  ,!
  /⌒  ィ    `i´  ); /.      ハ,,ハ     \   /( ゚ω゚ )`ー‐,!
  /    ノ^ 、___¥__ /       ( ゚ω゚ )     \  `ヽ、   \_,!
  !  ,,,ノ爻\_ _人 /        .(| y |)       \    `ヽ、ノ\,!
569デフォルトの名無しさん:2009/09/29(火) 23:44:37
>>567
■プログラム1:
#include <stdio.h>
int main(void)
{
int apple = 30, bad_apple = 10, persons = 3, apple_for_one, rest;
apple_for_one = (apple - bad_apple) / persons;
rest = apple - apple_for_one * persons;
printf("一人あたりのりんごの個数:%d\n", apple_for_one);
printf("残ったりんごの個数:%d\n", rest);
return 0;
}
■プログラム2:
#include <stdio.h>
int main(void)
{
int apple, bad_apple, persons, apple_for_one, rest;
printf("りんごの個数:");
scanf("%d", &apple);
printf("腐ったりんごの個数:");
scanf("%d", &bad_apple);
printf("人数:");
scanf("%d", &persons);
apple_for_one = (apple - bad_apple) / persons;
rest = apple - apple_for_one * persons;
printf("一人あたりのりんごの個数:%d\n", apple_for_one);
printf("残ったりんごの個数:%d\n", rest);
return 0;
}
570デフォルトの名無しさん:2009/09/30(水) 12:37:32
568さん
いきなりですみませんでした。

569さん
どうもありがとうございました!!!!
本当に助かりました!
571デフォルトの名無しさん:2009/09/30(水) 21:37:01
[1] 授業単元:
[2] 問題文(含コード&リンク):
米国への船便小包の郵便料金は以下の様に定められる。小包の重さを読み込み、その郵便料金を計算するプログラムを作成せよ。
但し、重量制限は20kg(20000g)までである。

1000g以下  1800円
10000g以下 1000gごとに550円の割り増し
20000g以下 1000gごとに550円の割り増し
(例・3000g 2900円  3001g 3450円  20000g 10250円)
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C)
[4] 期限: ([2009年9月30日24:00まで] )

どうか、よろしくお願いします。
572デフォルトの名無しさん:2009/09/30(水) 21:49:41
申し訳ありませんが、修正です。
20000g以下の時は350円増です。
573デフォルトの名無しさん:2009/09/30(水) 22:00:46
>>571
#include<stdio.h>

long get_price(long weight){
long price=1800;

if(weight>20000) return -1;
if(weight>10000) price+=(weight-10000+1000-1)/1000*350,weight=10000;
if(weight>1000) price+=(weight-1000+1000-1)/1000*550,weight=1000;
return price;
}

#define HOGE(w) printf("%ldg %ld円\n", w, get_price(w))

int main(void){
HOGE(3000L);
HOGE(3001L);
HOGE(20000L);

return 0;
}
574デフォルトの名無しさん:2009/09/30(水) 22:16:20
宿題じゃないんですがc++で
半径rの3次元の球状にランダムにn個の点を置くにはどうしたらいいですか?
575571:2009/09/30(水) 22:16:42
迅速な回答、ありがとうございました。
もしご迷惑でなければ、もう一問解いていただけないでしょうか?

品物の値段と客の支払った額を読み込み、お釣りがある場合には、その額を貨幣(可能なら紙幣も)の種類と枚数で表示するプログラムを作成せよ。

例・  値段は?→9800   (入力➀)
    お預かりは?→10000 (入力➁)
    お釣りは以下です。  (以下、表示される)
    \100:2枚

例2・ 値段は?→1111
お預かりは?→10000
お釣りは以下です。
\5000:1枚 \1000:3枚 \500:1枚 \100:3枚 \50:1枚 \10:3枚 \5:1枚 \1:4枚
576デフォルトの名無しさん:2009/09/30(水) 22:32:54
>>575
#include<stdio.h>

void turi(long value, long unit, long foo){
if(unit<=0) return;
if(value/unit) printf("\\%ld:%ld枚 ", unit, value/unit);
turi(value%unit, unit/foo, (foo==2)?5:2);
}

int main(void){
long price, payment;

printf("値段は?");
scanf("%ld", &price);
printf("お預かりは?");
scanf("%ld", &payment);

if(payment>price){
printf("\nお釣りは以下です。\n");
turi(payment-price, 10000, 2);
}
if(payment==price) printf("\nお釣りはありません\n");
if(payment<price) printf("\n足りない\n");

return 0;
}
577571:2009/09/30(水) 22:37:00
すいません。課題がもう一問ありました。
これで最後ですので、どうかよろしくお願いします。

正の整数を入力すると、それをローマ字数字で表示するプログラムを作りなさい。

例: 1 I
4 IIII
5 V
9 VIIII
12 XII
46 XXXXVI
73 LXXIII
111 CXI
378 CCCLXXVIII
521 DXXI
1001 MI
578デフォルトの名無しさん:2009/09/30(水) 22:39:09
初コメです、大学からプログラムを始めたんけど全くわかりません
なので誰か解いてもらえないですか?
TY高速鉄道の運賃は、乗車する距離に応じて
値段が異なります。
 1− 3キロ  200円
 4− 5キロ  280円
 6− 7キロ  350円
 8− 9キロ  420円
10−11キロ  490円
12−14キロ  550円
15−17キロ  610円
(1キロ未満のは数は、1キロに切り上げます)
です
「引数」は「無し」
「戻り値」は「運賃」の関数
 keisan3()
により、関数keisan3()内で乗車距離を
キーボード入力させ、main()関数内で、
運賃をprintf表示するプログラムを作成せよ。
なお、17キロより大きい値や、0キロ以下の数値の
キーボード入力をした場合、もう一度、乗車距離の
キーボード入力をやり直しさせるようにプログラム
すること。
[注意事項]
・乗車距離は double でキーボード入力できるものとする。
・運賃は main() 関数 内でprintf表示してください。
・運賃は整数とします。
・乗車距離に対する運賃の計算は if, else if 文により実現すること。
・キーボード入力のやり直しの箇所は、自分の創意工夫により
 考えてみること。(ヒント:do while を使う)
お願いします
579デフォルトの名無しさん:2009/09/30(水) 22:40:11
>>578
失せろゴミ
580デフォルトの名無しさん:2009/09/30(水) 22:41:31
大学生にもなってこの程度の課題ができないとかFランクですなぁ
581デフォルトの名無しさん:2009/09/30(水) 22:47:12
落ちこぼれ野郎なのでお願いします
582デフォルトの名無しさん:2009/09/30(水) 22:47:13
大学生云々に関わらず、難しい物に難しいと言って、何が悪いんですか?
難しいと素直に言って、助けてもらう事の何が悪いんですか?
簡単に人の事を貶めるのは、あまり褒められた事ではないと思いますよ。
583デフォルトの名無しさん:2009/09/30(水) 22:48:27
>>577
#include<stdio.h>

void turi(long value, long unit, long foo, const char *bar){
int i;

if(unit<=0) return;
if(value/unit){
for(i=value/unit;i;i--) printf("%c", *bar);
}
turi(value%unit, unit/foo, (foo==2)?5:2, bar+1);
}

int main(void){
long value;

scanf("%ld", &value);
turi(value, 1000, 2, "MDCLXVI");

return 0;
}
584571:2009/09/30(水) 22:53:53
三問もお願いしてしまって申し訳ありませんでした。
今日教えていただいた事は、しっかりと勉強して今後の役に立てたいと思います。
本当にありがとうございました。
585デフォルトの名無しさん:2009/09/30(水) 22:54:12
>>582
時間は有限です
屑にとっても優秀な人にとってもそれは変わりありません
あなたのような屑がいかに時間を使おうとなんの問題もありません
しかしあなたに質問された人の時間はそうではありません
他人の足を引っ張る前にまず自分で解決するために努力してください
586デフォルトの名無しさん:2009/09/30(水) 22:56:01
>>578
こんな問題の何がわからないのかがわからない

#include <stdio.h>

int keisan3(void) {
double d;
do {
printf("input distance >> "); scanf("%lf", &d);
} while (d <= 0 || d > 17);
if (d < 4) return 200; if (d < 6) return 280; if (d < 8) return 350;
if (d < 10) return 420; if (d < 12) return 490; if (d < 15) return 550;
return 610;
}

int main(void) { printf("UnChin: %d yen.\n", keisan3()); return 0; }
587デフォルトの名無しさん:2009/09/30(水) 22:59:20
まぁ、何が言いたいかってーと、テンプレに従えっちゅーこっちゃ
588デフォルトの名無しさん:2009/09/30(水) 23:02:57
>>578
#include<stdio.h>
#include<math.h>

long keisan3(){
long price_list[]={200, 280, 350, 420, 490, 550, 610};
long distance_list[]={3, 5, 7, 9, 11, 14, 17};
long i_distance;
static double distance=0.0;
int i;

printf("\n乗車距離を入力してください ");
scanf("%lf", &distance);
if(distance<=0.0 || distance>17.0){
printf("\n範囲外です\n");
keisan3();
}

i_distance=ceil(distance);
for(i=0;i<sizeof(price_list)/sizeof(price_list[0]);i++)
{
if(i_distance<=distance_list[i]) return price_list[i];
}
return -1;
}

int main(void){
printf("%ld円", keisan3());
return 0;
}
589デフォルトの名無しさん:2009/09/30(水) 23:09:58
>>578
#include <stdio.h>
#define _
int keisan3(void)
{
for(;_;)
{
char buf[256] = { 0 };
double d = 0;
printf("乗車距離を入力してください: ");
fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, "%lf", &d) == 1)
{
if(d > 0.0 && d <= 3.0) return 200;
else if(d > 3.0 && d <= 5.0) return 280;
else if(d > 5.0 && d <= 7.0) return 350;
else if(d > 7.0 && d <= 9.0) return 420;
else if(d > 9.0 && d <= 11.0) return 490;
else if(d > 11.0 && d <= 14.0) return 550;
else if(d > 14.0 && d <= 17.0) return 610;
}
puts("0より大きく17以下の数値を入力してください。");
}
}
int main(void)
{
printf("運賃=%d\n", keisan3());
return 0;
}
590デフォルトの名無しさん:2009/09/30(水) 23:11:09
>>583
turiの中身を見ないまま、適当にprintf("¥n"); を追加して
見栄えを良くしようとしたら、
リカーシブしてるために変なところで改行しまくって吹いた。
591デフォルトの名無しさん:2009/09/30(水) 23:11:12
[1] 授業単元:
[2] 問題文(含コード&リンク):半径rの3次元の球状にランダムにn個の点を置くにはどうしたらいいですか?
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c++
[4] 期限:なるべく早めにお願いします
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
592デフォルトの名無しさん:2009/09/30(水) 23:16:36
>>591
#include<cstdlib>

double uniformed_rand(void)
{
return (rand()+1.0)/RAND_MAX;
}

int main(void){
long n=100;
double r=1.0;

for(n=0;n<100;)
{
double x=(uniformed_rand()*2-1)*r;
double y=(uniformed_rand()*2-1)*r;
double z=(uniformed_rand()*2-1)*r;
if(x*x+y*y+z*z<r*r) n++;
}
return 0;
}
593デフォルトの名無しさん:2009/09/30(水) 23:29:03
>>588
キレイで気に入りました。
distance_listで17を定義しているのに、
if(distance<=0.0 || distance>17.0)でハードコードしているのは残念です。
594588:2009/09/30(水) 23:30:52
>>593
アレを気に入るとは、なかなかひねくれた感性ですねw
595デフォルトの名無しさん:2009/09/30(水) 23:40:51
とりあえず>>586>>588は数字以外のものが入力されたらコケるだろ
596デフォルトの名無しさん:2009/09/30(水) 23:47:56
[1]C言語中級
[2]
N-Queen問題の解答の列挙をするプログラム
回転/鏡映で一致する複数の解は一個のみ出力すること
Nはコマンドラインで与える。(N>=3)

N-Queen問題:N個のチェスのQueenをNxNのマス目の上に並べる
横、縦、斜め(一般には二方向)のマスにはほかのQueenがあっては
ならない。
[3] Linux /GCC 4.0 /C
[4] 9/30まで
597デフォルトの名無しさん:2009/10/01(木) 00:15:33
>>596
期限切れ12分前に書き込むとはなかなかやるな
598デフォルトの名無しさん:2009/10/01(木) 01:02:02
>>595
コケてはならないなんてのは要求にない
599デフォルトの名無しさん:2009/10/01(木) 02:13:48
皆様毎度お世話になっています。
以下の問題で激しく悩んでいます。

[1] 授業単元:データ解析
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9962.zip
[3] 環境
 [3.1] OS: Windows, (Linux)
 [3.2] コンパイラ名とバージョン: GCC, VCも可
 [3.3] 言語:C++
[4] 期限: 10/4
[5] その他の制限:AVL木についての詳細(お借りします)↓
http://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp2-10/what-is-search-avl.html
600デフォルトの名無しさん:2009/10/01(木) 03:01:52
>>598
お役人じゃないんだから…
601デフォルトの名無しさん:2009/10/01(木) 04:24:18
宿題スレで入力部分の例外処理について突っ込むのは低脳
602デフォルトの名無しさん:2009/10/01(木) 04:52:45
>>592
ファイルに出力したいんですが最後の値しか反映されません
またx,y,zを配列にしたら値がものすごく小さくなります(x、y、zの後ろに[ ]をつけただけ)

for(n=0;n<100;)
{
x=(uniformed_rand()*2-1)*r;
y=(uniformed_rand()*2-1)*r;
z=(uniformed_rand()*2-1)*r;
if(x*x+y*y+z*z<r*r) n++;
std::cout << x << " " << y << " " << z<< std::endl;

std::ofstream randout("rand.dat");
randout << x <<" "<<y<<" "<<z<<std::endl;
}
603デフォルトの名無しさん:2009/10/01(木) 05:38:21
>>602
毎回ファイルを開いちゃダメだろ
604デフォルトの名無しさん:2009/10/01(木) 09:51:46
>>600
数字以外が入力されたときの対応は次の宿題かもしれない
605デフォルトの名無しさん:2009/10/01(木) 10:30:28
>>595
課題に書かれていないことをすると「習ってないから(ry」ってなる
606デフォルトの名無しさん:2009/10/01(木) 11:17:19
課題要件に書かれてるのならやらなきゃならんし、
書いてないならやってもいい程度でいいだろ。
お役所仕事?元々丸投げすること自体悪いんだろ。文句言うな。
607デフォルトの名無しさん:2009/10/01(木) 18:46:48
>>602
if が成立したときだけファイルに書き込まないとダメだよ
608デフォルトの名無しさん:2009/10/01(木) 19:11:44
鬼神カーリーを蔑ろにするからそんなことになる
609デフォルトの名無しさん:2009/10/01(木) 20:17:30
[1] 授業単元:
[2] 問題文(含コード&リンク):イテレーターを使ってルンゲクッタ法を解く
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C++
[4] 期限: 可能ならば今日中
[5] その他の制限: イテレーターの理解がいまいちです。
610デフォルトの名無しさん:2009/10/02(金) 12:07:22
[1] 授業単元:c言語
[2] 問題文
課題文1
1990年比 温室効果ガス排出量を25%削減する事を目標とするとする。
以下は1990年の排出量を入力すると目標値を計算するプログラムであるが
正しく動かない。正しく動くよう修正せよ。
#include <stdio.h>
int main()
{double co2_amount_in_1990;
double co2_amount_target;

puts("1990年時の温室効果ガス排出量は何トン?");
scanf("%lf",&co2_amount_in_1990);
co2_amount_target=((100-25)/100)*co2_amount_in_1990;
printf("目標値は %f トンです",co2_amount_target);
}
課題文2
消費税を5%とする。 2個の物を買うときに一緒に買う場合と,
別々に会計をする場合と 消費税の1円未満の切り捨てにより、値段が
変わることがある。 例: 税抜き価格 30円の物と50円の物を一緒に買うと、84円だが、
別々に会計すると、31円+52円=83円となる。)
2個の物の税抜き価格をそれぞれ入力して、 一緒に買う場合と、別々に会計をする場合の税込み合計価格を
表示するプログラムを作成せよ。
[3] 環境
Windows,
言語:C++
[4] 期限: 10/8
よろしくお願いします!
611デフォルトの名無しさん:2009/10/02(金) 13:07:58
なんかみたことあるな。
612デフォルトの名無しさん:2009/10/02(金) 13:23:50
>>610
(100-25)/100

0.75
にすればいい
613デフォルトの名無しさん:2009/10/02(金) 15:05:09
>>610
課題文2
#include <stdio.h>
int main(void)
{
int a, b;

scanf("%d", &a);
scanf("%d", &b);

printf("一緒に買った場合:%d円\n", (int)((a+b)*1.05));
printf("別々に買った場合:%d円\n", (int)(a*1.05)+(int)(b*1.05));

return 0;
}
614デフォルトの名無しさん:2009/10/02(金) 15:23:12
a * 1.05 じゃなくて (a * 105) / 100 にしたほうが良いと思う。
615デフォルトの名無しさん:2009/10/03(土) 06:57:45
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ソートされた2つの配列A[N], B[N]が与えられる。
AとBのそれぞれの要素を足して得られる、長さN*Nの配列、すなわち
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
C[i * N + j] = A[i] + B[j];
のC[]をソートした配列を、
およそN*Nに比例する時間で得るプログラムを作成せよ。
ただし、Nは4000以下、A[], B[]の要素は絶対値が2の28乗以下の整数であるとしてよい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 無期限
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)


ややこしくてなかなかできません・・・・・・
あと、N*Nに比例する時間っていうのもイマイチわかりません・・・・・・
616デフォルトの名無しさん:2009/10/03(土) 07:20:17
>>615
O(N^2)ってこととでしょ。
むしろ、その辺は授業で聞いてないと…って、授業に出てないからか。
617デフォルトの名無しさん:2009/10/03(土) 07:21:36
バブルソートでもかけとけ
618615:2009/10/03(土) 07:24:42
>>617
なんか友達に聞いたら、
バブルソートなんてしてたらNの4乗の時間かかるぞww
っていわれました・・・・・・
619デフォルトの名無しさん:2009/10/03(土) 07:27:53
クイックソートでいいだろ。N*N以下だから。
620デフォルトの名無しさん:2009/10/03(土) 07:31:02
>>617
いや、バブルソートだとO(N*N*N*N)じゃね?
バケットソートで扱うには、要素の定義域が広すぎるような気がする。
ほかにO(n)のソートってあったっけ?
621デフォルトの名無しさん:2009/10/03(土) 07:32:19
>>619
O(n)じゃなくて良いのかな?
622デフォルトの名無しさん:2009/10/03(土) 07:33:23
およそN*Nに比例する時間で得るプログラムを作成せよ。
623デフォルトの名無しさん:2009/10/03(土) 07:35:20
>>622
言いたいことが分からないが、Cの長さN*N=nで、
O(n)のソートを適用しろと言う課題じゃないの?
624デフォルトの名無しさん:2009/10/03(土) 07:35:46
unsigned char kosu[1<<29];

for(n=0; n<4000; n++) kosu[C[n]]++;

for(n=0; n<(1<<29); n++) if(kosu[n]) print(n, kosu[n]);
625デフォルトの名無しさん:2009/10/03(土) 07:38:08
>>624のkosuをN倍して出力すればいい。
626デフォルトの名無しさん:2009/10/03(土) 07:39:47
>>624
N>=4000って言ってるから、charでは収まらないのでは?最大数はN*Nだhし。
627デフォルトの名無しさん:2009/10/03(土) 07:40:35
C[0] から C[N-1]をソートしたものを、N個重ねて出力すれば良いんだろ。
628デフォルトの名無しさん:2009/10/03(土) 07:41:56
>>626
逆か、N<=4000
それにしても、最大16000000個のデータが同じ値に。
629デフォルトの名無しさん:2009/10/03(土) 07:44:18
unsigned short int kosu[1<<29];

for(n=0; n<N; n++) kosu[C[n]]++;

for(n=0; n<(1<<29); n++) printout( n, N * kosu[n] );
630デフォルトの名無しさん:2009/10/03(土) 07:48:43
今時のマシンなら、メモリ積んでるのかね。
631デフォルトの名無しさん:2009/10/03(土) 08:01:20
基数ソートならいけるんじゃない?眠いから解かないけど
632デフォルトの名無しさん:2009/10/03(土) 08:03:08
>>628
最大4000個だろ。はじめのN個ソートすれば十分。
633デフォルトの名無しさん:2009/10/03(土) 08:04:34
map<unsigned int> mx;
mx[C[n]]++;
にしたらOK
634デフォルトの名無しさん:2009/10/03(土) 08:11:32
int num[N], cnt[N], tourokusu=0;

count_num(int n) {
for(i=0; i<tourokusu; i++) if(num[i]==n)break;
if( i >= tourokusu) { num[i]=n; cnt[i]=0; tourokusu++; }
cnt[i]++; }

for( n=0; n<N; n++) count_num(C[n]);


for(n=0; n<tourokusu; n++) printout( n, N * kosu[n] );

でおけ
635デフォルトの名無しさん:2009/10/03(土) 08:15:39
>>632
たとえば、
a[]={1,2,3};
b[]={1,2,3};
としたら、
c[]={2,3,4,3,4,5,4,5,6,}
で、N=3だけど、最初のNだけソートしてもダメじゃね?
636デフォルトの名無しさん:2009/10/03(土) 08:20:38
そうか
637デフォルトの名無しさん:2009/10/03(土) 08:23:10
A,Bがソートされてるんだから、Cの部分配列をマージしてけばいけそう。
必要なメモリ量がすごいことになりそうだが。
638デフォルトの名無しさん:2009/10/03(土) 08:24:17
隣接交換は。
コストはよくわからないが。
639デフォルトの名無しさん:2009/10/03(土) 09:03:04
C[N^2]をO[N^2]でソートせよとも書かれて無いんだよな。
ソート済みの2配列を足しこんで、なおかつソートしたものをどうやって得るか。
A[i]+B[j]を選択的に出力するいい方法って無いもんかね?
640デフォルトの名無しさん:2009/10/03(土) 11:25:00
>>620
バブルソートは O(N*N)
だから要素数が 2N になっても O(2N*2N)→O(N*N) だよ
641デフォルトの名無しさん:2009/10/03(土) 11:33:07
>>640
>>635
N=3なら、cのサイズは9

cのサイズN*N=nに対して、バブルソートのコストはO(n*n)=O(N*N*N*N)
642デフォルトの名無しさん:2009/10/03(土) 11:35:57
>>641
ごめん、問題をよく読むべきだったな
643デフォルトの名無しさん:2009/10/03(土) 11:37:34
>>639
AとBからCを作るコストも考えるとすると、そのコストがソートに対して無視してよいほど小さいと言えなくてはいけないのだろうか。
644デフォルトの名無しさん:2009/10/03(土) 12:08:44
>>643
A+B→CもO(N*N)だから、気にしなくて良いのか。
64571:2009/10/03(土) 13:46:08
[1] 授業単元:c言語
[2] 問題文:
問題1
整数nを引数とし、n以下の正の奇数の総和を返す関数sum_odd(int n)と、n以下の正の偶数を返す関数sum_even(int n)を定義し、
これらを利用してキーボードから入力した正の整数nに対し、n以下の正の奇数、および偶数の総和をそれぞれ計算して表示するプログラムを作成せよ。
{出力例}
正の整数を入力してください:10
10以下の奇数の和は25です
10以下の偶数の和は30です
問題2
抵抗値がR1、R2、……、Rn(Ω)のn個の抵抗を並列接続した場合の合成抵抗値は、
それぞれの抵抗値の逆数の総和の逆数、すなわち
R = 1 / (1 /R1 + 1 /R2 + … + 1 /Rn)
となる。
実数型配列r[]とその要素数noを引数とし、r[]に格納した抵抗値から並列接続時の合成抵抗を上記の式を用いて計算して結果
を返す関数R_parallel(double r[], int no)を定義し、これを利用して任意の個数(個数は適当に決めてよい)の抵抗の並列接続時の合成抵抗を求めるプログラムを作成せよ。
{出力例}3個の抵抗の場合
抵抗1の抵抗値は:3
抵抗2の抵抗値は:4
抵抗3の抵抗値は:5
並列接続時の合成抵抗値は1.276596オームです

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:10月5日9時まで

お願いします。
646デフォルトの名無しさん:2009/10/03(土) 13:59:33
>>615
ひとんちのコード丸パクリだけど、基数そーと
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9963.c
647デフォルトの名無しさん:2009/10/03(土) 14:32:34
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): キーボードから文字列を読み込んで、読み込んだ文字列が逆から読んでも同じ(回文のようなもの)文字列かどうかを判定するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows Xp (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C++
[4] 期限:なるべく早いほうがいいです。
[5] その他の制限:
648デフォルトの名無しさん:2009/10/03(土) 15:09:46
>>647
当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
http://codepad.org/bTY8JRhu
日本語には対応していません。
649デフォルトの名無しさん:2009/10/03(土) 15:35:45
>615
"要素は絶対値が2の28乗以下の整数"ってことはs=A[x]+B[y]は32ビット整数に収まるってことだよね?
そしたら カウンタ[4294967296] を用意して、++カウンタ[s] で何個あるか調べれば
ソートした配列をおよそN*Nに比例する時間で得られると思われ
650デフォルトの名無しさん:2009/10/03(土) 15:37:53
ありがとうございます。
自分でこんなのを作っていたんですが、どうして動かなかったのか気になってしまって・・・
もしよかったら教えていただけませんか??
#include<stdio.h>
int main(void)
{
char str[50];
scanf("%s",str);
printf("%s",str);
int a,b,c,d;
for(a=0;str[a]!=0;++a);/*aの定義*/
for(b=0;(a-b)!=0;++b)/*bの定義*/
{
printf("%c",str[a-b-1]);
}
{
c=str[a];
d=str[a-b-1];
}
if(c==d) /*逆から読んでも同じ単語になる*/
{
printf("\n->yes\n");
}
else /*そうでない場合*/
{
printf("\n->no\n");
}

}
651デフォルトの名無しさん:2009/10/03(土) 15:44:46
>>645
当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
問題1:http://codepad.org/yXfkMKNA
問題2:http://codepad.org/KWbLjyu7
652デフォルトの名無しさん:2009/10/03(土) 16:26:15
>>650
一回しか判定してない上、文字列の範囲外を比べてるからだろw
653デフォルトの名無しさん:2009/10/04(日) 04:10:21
>>649
メモリが爆発した
654デフォルトの名無しさん:2009/10/04(日) 05:28:43
655デフォルトの名無しさん:2009/10/04(日) 06:00:38
index[N] = {0, N, 2N, 3N, …, N*(N-1)} として
N*N回ループ
 C[index[i]]でいちばん小さい物を取得
 index[i]をカウントアップ
という流れでできるんじゃないかな
656デフォルトの名無しさん:2009/10/04(日) 06:01:28
ってN*N*Nに比例しちゃうか
スマソ
657デフォルトの名無しさん:2009/10/04(日) 06:17:28
条件からして基数ソートをさせようとしている気がする
658デフォルトの名無しさん:2009/10/04(日) 22:37:33
[1] C言語とアルゴリズム
[2] 関数(非回帰)
 キーボードから自然数を入力し1からその自然数までの
二乗和を求めるプログラムを作成しなさい。
ただし二乗和を求める部分は関数(関数名をsqrsumとする)にすること。
[実行例]
自然数を入力して下さい.         ←自然数の入力をうながすメッセージを表示
10                    ←自然数を入力してEnter
1から10までの自然数の二乗和は371です.  ←計算結果を表示する

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] C言語
[4] 期限:できれば明日の10時まで

よろしくお願いします!!
659デフォルトの名無しさん:2009/10/04(日) 23:08:03
>>658
2乗和の定義を教えてください。
入力が 3 ならば
1 * 1 + 2 * 2 + 3 * 3 = 14
と考えていいのでしょうか。
この考え方から行くと 1 から 10 までの二乗和は 385 になるのですが。

こちらの環境は WindowsXP、処理系は cygwin(gcc 3.4.4)です。
http://codepad.org/FBZUlLYR
660デフォルトの名無しさん:2009/10/04(日) 23:08:22
>> 658
1から10までの2乗和は385だよな?


#include <stdio.h>

int sqrsum(int n)
{
int i, sum = 0;

for (i = 1; i <= n; i++)
sum += i * i;

return sum;
}

int main()
{
int n;
printf("自然数を入力して下さい. \n");
scanf("%d", &n);
printf("1から%dまでの自然数の二乗和は%dです. \n", n, sqrsum(n));

return 0;
}
661デフォルトの名無しさん:2009/10/04(日) 23:11:04
>629
は C[] を作ってないから木がつかんかった...

>653
そーゆー時は、カウンタ配列を5000個くらい用意して数えるのを場合分けすればいいんじゃね?
662661:2009/10/04(日) 23:17:59
あれよく見ると >629 の
> for(n=0; n<(1<<29); n++) printout( n, N * kosu[n] );
の意味が和姦ねw

整数n と カウンタをN倍 すると何がどーなるって?
663デフォルトの名無しさん:2009/10/04(日) 23:25:35
二乗和の公式を使うとsqrsum関数は

int sqrsum(int n)
{
return n*(n+1)*(2*n+1)/6;
}

こうなるな
664デフォルトの名無しさん:2009/10/04(日) 23:32:19
>>659
説明不足ですみませんでした。。
(1の二乗+2の二乗+3の二乗…)でお願いします!

あと関数(非回帰)と書いてしまいましたが
関数(非再帰)の間違いです。
すみません。
665デフォルトの名無しさん:2009/10/04(日) 23:37:20
>>660
385でした。。
666デフォルトの名無しさん:2009/10/04(日) 23:46:23
>>664
たまに回帰と言うこともあるが、まあ、再帰か。どのみち訳語だけど。
667デフォルトの名無しさん:2009/10/04(日) 23:59:42
658の続きなんですが…。

[1] C言語とアルゴリズム
[2] 関数(関数の再利用)
 キーボードから2つの自然数を入力し、小さい自然数から大きい自然数までの二乗和を
求めるプログラムを作成。ただし小さい自然数から大きい自然数までの二乗和を求める関数
(関数名をsqrsum2とする)を新たに作成し、前に作成したsqrsum関数をsqrsum2関数から呼び出して
再利用すること。なおmain関数からはsqrsum2関数だけで呼び出すプログラムにしなさい。
また実行例のように2つの自然数の入力順序に依存しないようにすること。
[実行例@]
2つの自然数を入力して下さい.         ←自然数の入力をうながすメッセージを表示
4 10                     ←自然数2つを入力してEnter
4から10までの自然数の二乗和は371です.    ←計算結果を表示する
[実行例A]
2つの自然数を入力して下さい.         ←自然数の入力をうながすメッセージを表示
10 4                     ←自然数2つを入力してEnter
4から10までの自然数の二乗和は371です.    ←計算結果を表示する
[実行例B]
2つの自然数を入力して下さい.         ←自然数の入力をうながすメッセージを表示
1 10                     ←自然数2つを入力してEnter
1から10までの自然数の二乗和は385です.    ←計算結果を表示する

 [3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] C言語
[4] 期限:明日の10時まで

何度もすみません。
よろしくお願いします!!
668デフォルトの名無しさん:2009/10/05(月) 00:19:09
sqrsum2( num1, num2 )
{
if(num1>num2)
return sqrsum(num1)-sqrsum(num2);
return sqrsum(num2)-sqrsum(num1);
}
669デフォルトの名無しさん:2009/10/05(月) 00:26:36
どなたか、Visual BasicをC言語に書き換えることができる方いませんか?
元のプログラムが少し長いので、可能な方はメールにてお知らせいただければ、
問題文を添付させていただきたいと思っています。
よろしくお願い致します。
670デフォルトの名無しさん:2009/10/05(月) 03:05:34
>>668
面白いジョークだw
671デフォルトの名無しさん:2009/10/05(月) 03:11:03
>>669

>>1
なお、一般にVBのコードをgeneric-Cに置き換えるのは難しいし
推奨出来ない。
処理系依存な話になる(Windows特化とか)
672デフォルトの名無しさん:2009/10/05(月) 03:14:16
>>669
希望通り動作してるなら書き換えなくてもいいんじゃない?
どうしても処理速度が気に入らないならPCをハイスペックにするとかw
673デフォルトの名無しさん:2009/10/05(月) 03:19:31
>>667
#include <stdio.h>
int sqrsum(int n)
{
int i, sum = 0;
for(i=1; i<=n; i++) sum += i * i;
return sum;
}
int sqrsum2(int a, int b)
{
return sqrsum(b) - sqrsum(a-1);
}

int main(void)
{
int a, b;
printf("2つの自然数を入力して下さい.\n");
scanf("%d%d", &a, &b);
if(a > b) {
int temp = a;
a = b;
b = temp;
}
printf("%dから%dまでの自然数の二乗和は%dです.\n", a, b, sqrsum2(a,b));

return 0;
}
674デフォルトの名無しさん:2009/10/05(月) 10:17:50
599です。何度も申し訳ない。
問題文中のパート1と(g)で苦戦しています。
前述のパート2・3は自力でなんとか終えました。

[1] 授業単元:データ解析
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9964.zip
[3] 環境
 [3.1] OS: Windows, (Linux)
 [3.2] コンパイラ名とバージョン: GCC, VCも可
 [3.3] 言語:C++
[4] 期限: 10/6
[5] その他の制限:AVL木についての詳細(お借りします)↓
http://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp2-10/what-is-search-avl.html

宜しくお願いします。
675デフォルトの名無しさん:2009/10/05(月) 10:36:11
>>669
そんな宿題があるかよ。仕事または作業を注文する所ではない。金はらって他所でやれ。
676デフォルトの名無しさん:2009/10/05(月) 16:35:56
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9965.txt
[3] 環境
 [3.1] OS: Windows vista
 [3.2] Visual C++ 2008
 [3.3] 言語: C言語
[4] 期限: 2009年10月9日
[5] その他の制限: 問題文に従ってくれれば。


お願いします〜
677デフォルトの名無しさん:2009/10/05(月) 19:58:53
安易に>>669受注したら莫迦をみた。

全然Visual Basicじゃない、Quick BasicのコードにSub〜End Sub付けただけ。
しかも識別子も処理フローもスパゲッティー。
リファクタリングは諦めて、コードーのトランスレートに努めた。

以下、グローバルにせざるを得なかった変数たち。
int n = 5;
int m = 5;
double fpr = 0.0;

int ot[100][20], rt[100][20], ro[100], fo[100];
int js[20][100], fj[20], tt[20], lj[20];
int wjs[20][100];
int wq[20][100], wj[20];
int tot[100], njs[100];
int otn[100][20], nrt[100][20], nro[100], nlj[20];
int joft[100];
int mjs[20][100];
int sgm[100], phi[100], bn[100];

int tet_, mtet_;
int i_, j_, je_, j1_, j_, k_, kk_, kq_;
int ineh_, ii_, jn_, mn_;
int mast_, sgmast_, nbn_, wjn_, wrk_, wtt_, rnd2_;
double Sum_, rnd1_, rndf_;

疲れたよ。
678デフォルトの名無しさん:2009/10/05(月) 20:01:37
>>677
なんでここに書いてんの?
679デフォルトの名無しさん:2009/10/05(月) 20:29:38
680デフォルトの名無しさん:2009/10/05(月) 20:30:54
>>678
酷さをみんなに知ってもらうため。
681デフォルトの名無しさん:2009/10/05(月) 20:33:43
そっか。
おつかれさま
682デフォルトの名無しさん:2009/10/05(月) 20:53:28
言っちゃ悪いけど、つーか後出しみたいだけど、>>669を見た時点でひどさは
分かるよなぁ…
正直、受ける人が出るとは思わなかった
683デフォルトの名無しさん:2009/10/05(月) 21:01:13
>>676
私の環境は Windows XP, 処理系は cygwin(gcc 4.3.2) です。
http://codepad.org/taGTbAUk
出力ファイルのフォーマットは与えられたプログラムに従いました。
684683:2009/10/05(月) 21:02:37
残念、すでに解いた方がおられたんですね。お友達にでも分けてあげてくださいな。
685デフォルトの名無しさん:2009/10/05(月) 22:09:26
max の初期値は 1 がいいと思う
686デフォルトの名無しさん:2009/10/05(月) 22:13:44
>>685
皆0点だったとしたら、‥‥‥、なるほどそうですね。
687デフォルトの名無しさん:2009/10/05(月) 22:53:41
問)ある10進数の数字を入力して、2進数、4進数、8進数に変えるプログラムを作成せよ。
明日から新しい範囲に入るけど先週復習みたいな感じでこれをやったんですが、これ分かる人教えてくれませんか。
whileとかあまり(%)とかを使うらしいんですが。

#include <iostream>
using namespace std;

int main() {
int num;

cout << "数字を入力してください"\n
cin >> num;
688デフォルトの名無しさん:2009/10/05(月) 23:05:11
2で割ったあまりが2進数表記の一桁目です
689デフォルトの名無しさん:2009/10/05(月) 23:25:43
2^n進法ならビット演算でおk
690デフォルトの名無しさん:2009/10/05(月) 23:29:28
>>687
#include <iostream>
using namespace std;
void print(int n, int b) {
if (n/b) print(n/b, b);
cout << (char)('0'+n%b);
}
int main() {
int num;
cout << "数字を入力してください\n";
cin >> num;
print(num, 2); cout << "\n";
print(num, 4); cout << "\n";
print(num, 8); cout << "\n";
return 0;
}
691デフォルトの名無しさん:2009/10/05(月) 23:39:36
>>677
構造体に全部入れてそのポインタを持ち回るか
C++ならクラスにすればいい

グローバル変数は嫌だあ(>_<)
692デフォルトの名無しさん:2009/10/05(月) 23:39:40
>>690
#include <iostream>
using namespace std;

int main() {

return 0;
}
これの中にwhileとかあまりを使っていくみたいなんですが、それが分かりません
693デフォルトの名無しさん:2009/10/05(月) 23:51:10
>>692
2で割った物を2で割ったあまりが二桁目です
694デフォルトの名無しさん:2009/10/06(火) 08:54:26
[1] 授業単元:プログラミング技法
[2] 問題文(含コード&リンク):
  二次関数方程式 ax^2+bx+c=0 の係数a,b,cを入力し、答えを表示する関数 Quadratic を作りなさい。その関数を呼び出すmain 関数も作り、動作を確認しなさい。
関数型はintとする。パラメータの型は、int および double とする。
  機能  2次方程式の解を求める(表示しない)
      グローバル変数X1、X2に求めた答えを代入する
  入力  a,b,c ax^2+bx+c=0 の係数
  関数値 解の数、0なら係数 a が0、−1なら虚数解
 aが0のとき、虚数解、重根のときはmain関数でメッセージを表示する。
sqrt()で平方根を求める(math.hをインクルードすること)

[3] 環境
 [3.1] OS: Windows XP
 [3.2] Micro Soft Visual C++ 2005
 [3.3] 言語: C++言語
[4] 期限: 2009年10月9日
[5] 制限は特にありません。

すみませんが、よろしくお願いします。
695デフォルトの名無しさん:2009/10/06(火) 09:40:13
#include <stdio.h>
#include <math.h>

double X1, X2;

int Quadratic(double a, double b, double c)
{
double d = b * b - 4 * a * c;
if(a == 0) return 0;
if(d < 0) return -1;
if(d == 0) {
X1 = -b / (2 * a);
return 1;
}
X1 = (-b + sqrt(d)) / (2 * a);
X2 = (-b - sqrt(d)) / (2 * a);
return 2;
}

int main(void)
{
int n;
double a, b, c;

scanf("%lf%lf%lf", &a, &b, &c);
n = Quadratic(a, b, c);
if(n==-1) printf("虚数解です\n");
else if(n==0) printf("a=0です\n");
else if(n==1) printf("重解%.2fです\n", X1);
else printf("解は%.2f,%.2fです\n", X1, X2);
return 0;
}
696デフォルトの名無しさん:2009/10/06(火) 19:26:17
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9968.txt
[3] 環境
 [3.1] OS: Windows vista
 [3.2] Microsoft Visual Studio 2008
 [3.3] 言語: C
[4] 期限: 2009年10月7日
[5] 二次元変数とforループを使用
お願いします。
697デフォルトの名無しさん:2009/10/06(火) 19:28:07
baka
698デフォルトの名無しさん:2009/10/06(火) 21:11:24
>>696
私の環境は WindowsXP, 処理系は cygwin(gcc 4.3.2) です。
1:http://codepad.org/0mxu3Tvp
2:http://codepad.org/yJmq3nyq
3はどなたかお願いいたします。
699デフォルトの名無しさん:2009/10/07(水) 08:52:33
>>695
有難うございました。
700デフォルトの名無しさん:2009/10/07(水) 10:28:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
stdio.hだけをincludeした状態で平方根を求める方法をかけ
[3] 環境
 [3.1] OS: Windows vista
 [3.2] Microsoft Visual Studio
 [3.3] 言語: C
[4] 期限: 2009年10月7日
[5] math.hを使わずにやれということみたいです。
お願いします。
701デフォルトの名無しさん:2009/10/07(水) 11:27:26
>>700
桁数の制限はないの
小数1桁ぐらいならすぐできそう
702デフォルトの名無しさん:2009/10/07(水) 13:30:29
>>700
ヤなこったw
703デフォルトの名無しさん:2009/10/07(水) 14:03:36
>>700
動くような気がしてやってみたけど、提出はしない方が良い。
http://codepad.org/E2tw1ZoM
704デフォルトの名無しさん:2009/10/07(水) 16:14:00
>>700
提出しても問題はないと思う。
#include <stdio.h>
#define D 1.0e-8
int main(void)
{
double c = 2.0, x = 0.0;
while ((x * x > c && x * x - c > D) || (x * x < c && c - x * x > D)) x += D;
printf("sqrt(%f) = %f\n", c, x);
return 0;
}
705デフォルトの名無しさん:2009/10/07(水) 17:40:55
>700
つ ニュートン法
706デフォルトの名無しさん:2009/10/07(水) 18:28:09
>>700
私の環境は Windows XP、処理系は cygwin(gcc 4.3.2) です。
http://codepad.org/lqRlCcaP
由緒正しき開平法で処理しています。#define M で小数点以下何桁まで求めるかを定義しています。ただし M はあまり大きくできません。
707デフォルトの名無しさん:2009/10/08(木) 02:11:19
まぁ〜だこんなところで意地悪しているのか、おまいらは?w
どうせ性格も顔も悪いんだろ?ほれ、メガネデヴピッツァってやつぅ?
AAでもあるよね?ぷぅ〜んぷぅ〜んと臭そうな臭いを発して
PCの前でムキになって書き込みをしているあれ。お前らそっくりなんだろ?w
708デフォルトの名無しさん:2009/10/08(木) 02:51:48
懐かしい
709デフォルトの名無しさん:2009/10/08(木) 07:36:21
ループ変数をdoubleに変えちゃう人じゃないですか!
710デフォルトの名無しさん:2009/10/08(木) 08:41:17
fgetc() の返り値を char で受ける人ですよ、あいもかわらず。
711デフォルトの名無しさん:2009/10/08(木) 09:19:13
>>709 >>710
どうした、いきなり?

>>710
ttp://www.bohyoh.com/CandCPP/C/Library/fgetc.html
必要に応じてキャストすりゃええがな
712デフォルトの名無しさん:2009/10/08(木) 09:20:53
>>707が誰か分からない新参さん?
713デフォルトの名無しさん:2009/10/08(木) 13:22:59
誤爆だろう。
714デフォルトの名無しさん:2009/10/08(木) 17:19:04
>>679
>>683

遅くなってしまいましたが
ありがとうございました!
715デフォルトの名無しさん:2009/10/08(木) 17:23:27
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9970.txt
問題の内容はテキスト内に書きました。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:10/16
[5] その他の制限:簡単なコードでお願いします
716710:2009/10/08(木) 18:39:25
>>711
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?

ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、>>707 のように暴れだす、という人が過去に存在していました。
今も健在だと、悲しいのですが。
717デフォルトの名無しさん:2009/10/08(木) 19:17:01
>>716 (・∀・)ニヤニヤ
718デフォルトの名無しさん:2009/10/08(木) 19:19:22
>>712
>>707を知っている古株?自分がそうですって自己紹介しちゃっているようなもんだよ?w
>>716
> streamが指す入力ストリームから次の文字(もし存在すれば)を
> unsigned char型の値として読み取り、int型に変換する。
これが理解できないなら二度とプログラミングなんてしない方が良いよw
719デフォルトの名無しさん:2009/10/08(木) 19:19:53
代入式で暴れたり、rand()で暴れたりした後はあんまりみかけてないな
720デフォルトの名無しさん:2009/10/08(木) 19:24:20
>>710 >>716
では、そいつが書いたそのコードを提示してくれ。
俺はfgetcの戻り値をcharにそのまま代入したコードを書いた覚えはない。
キモメンメガネデヴピッツァ(2ちゃんの他でも見かける言葉、お前ら自身に自覚している心当たりあり?)を
↓を参考にここの連中のことを勝手なイメージで呼んだだけだが?w
ttp://dokoaa.com/ota.html
721デフォルトの名無しさん:2009/10/08(木) 19:26:22
リストから先に進んだ?w
722デフォルトの名無しさん:2009/10/08(木) 19:28:13
あっ、やっぱり自分のことを、直接名指し、アンカーで言われたわけでもないのに
自分が該当するからって悪く言われたと勘違いして、釣られてしまい
相手が自分が勘違いした奴だと思ってまた必死に弁明を始めているんですね?w
みっともない、プログラマーらしからぬ態度だことw
俺はfgetcすら滅多に使わないのだがw
723デフォルトの名無しさん:2009/10/08(木) 19:32:14
この長文はいったい何と戦ってるんだ?
724デフォルトの名無しさん:2009/10/08(木) 19:36:21
fgetcを不適切に使う奴と勘違いしたようだなw
やーいやーい、妄想やろうw
そうやって見えない敵をいつまでも煽ってろよw
こっちは痛くも痒くもありましぇ〜ん、けど
そんな屁たれコードも書きませんよw
725デフォルトの名無しさん:2009/10/08(木) 19:41:00
新参としては、触ってる奴らも荒らし、っていう言葉がものすごく実感できる流れ
716 名前:710 投稿日:2009/10/08(木) 18:39:25
>>711
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?

ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、>>707 のように暴れだす、という人が過去に存在していました。
727デフォルトの名無しさん:2009/10/08(木) 19:49:08
誰がいつfgetcに対して説明したか知らんが、そいつが理解できなくても当然だな。
fgetcでEOFを検出した場合、環境にもよるがEOFが-1の場合0xFFとして受ける。
しかし、変数の型のこともあるが、問題は符号だろ。unsigned charで受けているが
int型に。かといってもともとfgetc自身が1バイトの数値を受けるため内面的に
int型であろうが数値はchar型の範囲内。
さて、signed char a=EOF; unsigned char b=EOFで
どちらがEOFをそれに応じて認識するか、調べてみな、
まともに説明も出来ずに自分の思い込みで揚げ足取りをして
相手を言い負かせたら自分が勝ち、みたいなネトウヨレベルの
キモイ工作をしているヘボプログラマーさんw
728デフォルトの名無しさん:2009/10/08(木) 20:10:46
だめだこりゃw
729デフォルトの名無しさん:2009/10/08(木) 20:12:19
でしょ、こんなふうに暴れるんですよ。いい加減、fgets() は int で受けるべきであることを認識させてくれないでしょうかね。
730デフォルトの名無しさん:2009/10/08(木) 20:13:53
俺は別にfgetcの値をchar型にキャストもせずに代入した覚えはないしぃ〜
それよりも関数の詳細が分かっているなら、それぞれに応じて適切に
コードを書けるしぃ〜。あと、fgetc自身が何も半角英数字のみしか
受けない関数じゃないしねぇ〜。それでも1度に処理する値は
分かっているしぃ〜♪何も人間が見える、読める文字、コードしか存在しないわけでもないしねぇ〜
731デフォルトの名無しさん:2009/10/08(木) 20:15:00
初心者のころゲームのセーブデータ解析しようとして
char ch;
while((ch=fgetc(fp))!=EOF) 〜ってやったら途中で止まったの思い出したw
732デフォルトの名無しさん:2009/10/08(木) 20:16:20
ぎゃははははは、ぶははははははは!自分が知った気になって別の無知に
説明したのに、char型ではEOFで引っかかるとか言っておきながら、
逆に自分の不適切さを指摘し返されるボケプログラマー必死だなw
733デフォルトの名無しさん:2009/10/08(木) 21:27:49
>>730
1行目: キャストするしないの問題じゃねーよ
それ以降: 何言ってるんだかさっぱりわかんねーよ
734デフォルトの名無しさん:2009/10/09(金) 15:28:16
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
アルファベットと数値を持つ複数のデータ(10個程度)をファイルから読み込んで
2分探索木を構築し,アルファベットを入力して数値を出力するプログラムを作成せよ.
(データの例、AB 10  AC 2  BT 13  BC 5・・・)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2009/10/12
[5] 特になし
735デフォルトの名無しさん:2009/10/09(金) 17:02:43
736デフォルトの名無しさん:2009/10/09(金) 21:28:59
>>721
いきなりどうした、こいつ?今で昔話してんの?w
キャストから進んだぁ〜?w
737デフォルトの名無しさん:2009/10/09(金) 21:32:45
    / ̄ ̄ ̄ ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (  人____)<  fgetcをcharに代入しちゃうなんて。リストから進んだぁ〜?
   |./  ー◎-◎-)  \______________
   (6     (_ _) )    カタカタカタ
   | .∴ ノ  3 ノ  ______
    ゝ       ノ  .|  | ̄ ̄\ \
738デフォルトの名無しさん:2009/10/09(金) 21:51:50
>>735
麻ー呂っくのクソースでおじゃるね?w
739デフォルトの名無しさん:2009/10/09(金) 22:16:41
destに値をコピーするにはどうやれば良いのでしょうか。

const char *src = "test";
char *dest;

740デフォルトの名無しさん:2009/10/09(金) 22:18:49
>>739
dest=strdup(src);
741デフォルトの名無しさん:2009/10/09(金) 22:21:31
できた。ありがとー!
742デフォルトの名無しさん:2009/10/09(金) 22:25:14
>>741
いいってことよ
743デフォルトの名無しさん:2009/10/09(金) 23:17:51
fgetc()の返り血をcharに代入しても何の問題もないよ。
ファイルの読み込みのとき、いちいちEOFをチェックしながら
読まないで、一度に読んじゃってあとでfeof()で一度チェックする
でいいんだよ。fgetc()はEOFになったとき一度だけEOFを返してあとは
返さないとか未定義動作するとかでなく、何度よんでもEOF以降は
ずっとEOFを返して正常だから。
744デフォルトの名無しさん:2009/10/09(金) 23:20:44
>>743
テキストファイルならそれでも大丈夫だね。多分
745デフォルトの名無しさん:2009/10/10(土) 04:15:43
>>719
激しく意味不明w しかもまた俺に関係ないrand()とかw
お前ら何か妄想する癖があるんじゃね?
気に入らない意見を見ると妙にクビを突っ込んで噛み付くタイプだろ?
それ世間一般じゃかなり嫌われてる行為だよ。そう、相手からしてみれば
お前は関係ないだろ、ってことだ。自意識過剰過ぎ。少し外に出ろ。
お前を知らない人間ばかりだぞ?もっとも、このスレ、板を介して
レスしあっても、お前がどこの誰か素性は分からんわw

    / ̄ ̄ ̄ ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (  人____)<代入式で暴れたり、rand()で暴れたりした後はあんまりみかけてないな
   |./  ー◎-◎-)  \______________
   (6     (_ _) )    カタカタカタ
   | .∴ ノ  3 ノ  ______
    ゝ       ノ  .|  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
746デフォルトの名無しさん:2009/10/10(土) 04:17:03
あと、誰か知らんが俺はfgetcで説教を受けた覚えはありませんw
まぁ、かなり前にこのスレで宿題に付き合ってやってたが
そのプログラマーを金の出汁に使う方針に切り替えたんで。
お前らとは縁はないだろうけど、世のプログラマーの中には
俺に従事している奴がいるってことだ、それも俺の懐を豊かにするためにw
747デフォルトの名無しさん:2009/10/10(土) 04:27:31
そういうスレでやれ
748デフォルトの名無しさん:2009/10/10(土) 04:37:50
長文で必死にレスすると、図星なんだろうなと思われるだけなのにな。
749デフォルトの名無しさん:2009/10/10(土) 04:49:21
意味わからねぇわぁ。fgetcについて説明を受けた覚えもねーし
rand()で議論した覚えもねーわ。誰と勘違いしてんの?w
自分が説教した相手はどれも同一人物だと思ってるの?w
お前ら相当妄想好きなようだなw
それじゃ、ここで質問する奴も全員同一人物か?
答える自分は自分だと分かるだろうけど、他にも答えている人も
固定メンバーか?w
750デフォルトの名無しさん:2009/10/10(土) 05:40:22
宿題スレの内容で懐が潤う、だと?
宿題代行業でもやってんのかね。
751デフォルトの名無しさん:2009/10/10(土) 05:42:20
   彡川川川三三三ミ〜
   川|川/  \|〜 プゥ〜ン
  ‖|‖ ◎---◎|〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川‖    3  ヽ〜      < リストのクソースでも書けよ?w
  川川    ∴)д(∴)〜       \_______________
  川川      〜 /〜 カタカタカタ
  川川‖    〜 /‖ _____
 川川川川___/‖  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
752デフォルトの名無しさん:2009/10/10(土) 06:25:41
糞麻呂が来たと勘違いしたんだろうねw
753デフォルトの名無しさん:2009/10/10(土) 06:52:47
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): ランダム順列の生成プログラム
各k=0,1・・・m-1に対してa[k]=kとおく。
各l=m-1,m-2,・・・1に対して0からlまでの数からランダムに1つを選び(これをl2とする)、a[l]とa[l2]を交換する。
[3] 環境
 [3.1] OS: windows linux(どちらも)
 [3.2] コンパイラ名とバージョン: windows visual stdio、gcc
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:特になし

ランダム関数、配列、swapを利用して解決するであろうことは分かるのですが、
この問題でソレを使ってどのようにプログラムを書けばいいかが分かりません・・・。
よろしかったら教えてください。
754デフォルトの名無しさん:2009/10/10(土) 07:29:09
#include <stdio.h>
#include <stdlib.h>

#define m 10

int main(void)
{
int k, l, l2, temp, a[m];

srand(time(NULL));

for(k=0; k<m; k++) a[k] = k;

for(l=m-1; l>0; l--) {
l2 = rand() / (RAND_MAX + 1.0) * (l + 1);
temp = a[l2];
a[l2] = a[l];
a[l] = temp;
}

for(k=0; k<m; k++) printf("%d ", a[k]);

return 0;
}
755デフォルトの名無しさん:2009/10/10(土) 07:32:21
仕事早すぎて濡れました。
forをどういう風に書いたらが分からなかったのでとても助かりました。ありがとうございます。
756デフォルトの名無しさん:2009/10/10(土) 07:37:49
これ有名なシャッフル法だからすぐに書ける人がほとんどだよ。

for(l=m-1; l > 0;) {
l2 = rand() / (RAND_MAX + 1.0) * l--;

って書く方が 多いかな。
757デフォルトの名無しさん:2009/10/10(土) 08:05:00
違った
for(l=m; l > 0; ) {
l2 = rand() / (RAND_MAX + 1.0) * l--;
だな
758デフォルトの名無しさん:2009/10/10(土) 11:56:06
[1] 授業単元:基礎プログラミング
[2] 問題文(含コード&リンク):
カエサル暗号(A〜Z)の暗号文を入力して平文を含んだリストを出力しなさい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9972.txt

[3] 環境
 [3.1] OS: Windows vista
 [3.2] Visual Studio 2008
 [3.3] 言語: C++
[4] 期限: 2009年10月15日
[5] 10文字までは力技で出力できるようになったのですが
  何文字でも出力できるようにしたいです
  できれば上のソースと似たような方法でお願いします
759デフォルトの名無しさん:2009/10/10(土) 12:22:16
>>758
#include<iostream>
#include<iomanip>
using namespace std;
int main (void){
const int aChangeCtoI [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,
0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,};
const char aChangeItoC[]=" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int heni;
char str[]=" ";
char chGet[]=" ";
int ch;
cout << "長さ変えたければstr大きさ変えればいいよ" << endl;
cin >> str ;

do{for ( heni = 0 ; heni <= 36 ; heni++){for ( int i = 0; str[i]!='\0' ; i++){
ch = aChangeCtoI[str[i]]+heni;
if ( ch > 36){ch -=36;}
chGet[i] = aChangeItoC[ch];
}
cout << "オリジナル" <<str << endl;
cout << "変位 "<<setw(2)<< heni<<" " <<chGet << endl;
}
}while(heni < 36 );

}
760デフォルトの名無しさん:2009/10/10(土) 12:22:39
うpするのが面倒だから貼り付けるのに開業色々適当だから!
761デフォルトの名無しさん:2009/10/10(土) 12:29:59
後、ソースコードが見にくいのでアルゴリズムも違うよ!
762デフォルトの名無しさん:2009/10/10(土) 13:06:32
>>758
char c;
c = getchar();
while (c != '\n' && c != EOF) {
 ここに文字cをシフトする処理を書く
 putchar(c);
 c = getchar();
}
763デフォルトの名無しさん:2009/10/10(土) 13:07:18
( * )ここ
764デフォルトの名無しさん:2009/10/10(土) 13:08:10
>>763(・ * ・)ニヤニヤ
765デフォルトの名無しさん:2009/10/10(土) 17:59:16
麻呂じゃ麻呂じゃ、麻呂の再来でおじゃる!
766デフォルトの名無しさん:2009/10/10(土) 18:40:12
  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ〜
  |::( 6∪ ー─◎─◎ )〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |ノ  (∵∴ ( o o)∴)〜      < 俺が書いたソースが世界一なんだYO!
  | ∪< ∵∵   3 ∵> ムッキー!    \________________
  \        ⌒ ノ_____
    \_____/ |  | ̄ ̄\ \
767デフォルトの名無しさん:2009/10/10(土) 18:47:42
>>758
#include <stdio.h>

int main(void)
{
char str[256], *p;
int n;

scanf("%s", str);

for(n=0; n<26; n++) {
for(p=str; *p; p++) {
if(*p!=90) (*p)++;
else *p = 65;
}
puts(str);
}

return 0;
}
768デフォルトの名無しさん:2009/10/10(土) 21:43:11
>>740
使用後 dest を free() することをお忘れなく。
769デフォルトの名無しさん:2009/10/10(土) 23:25:18
>>758
カエサル暗号のキー(ずらす量)はどうしましょうか?
770デフォルトの名無しさん:2009/10/11(日) 00:50:40
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):
テキストファイルを読み込み、
文字コード表を利用して種類ごとに文字を分類し、それぞれをカウントするプログラムを作れ
分類は以下の通りとする。
1.半角英数
2.半角カナ
3.半角記号
4.全角かな
5.全角記号
6.漢字
以上のように分類した上で「半角英数:XX字、半角カナ:XX字・・・」というように結果をファイルに出力せよ。


[3] 環境
 [3.1] OS:Windows XP
 [3.2] Visual Studio 2008
 [3.3] どちらでも可
[4] 期限: 2009年10月13日 正午迄
[5] その他の制限:
使用する文字コード表は自由だが一般に使われているものを選択せよとのことでした。
コード内にコメントで使用した文字コードを注釈として記載するようにとの連絡がありました。
それ以外は特にありません。
よろしくお願いします。
771デフォルトの名無しさん:2009/10/11(日) 01:07:12
C++でif文を使って二次方程式の解を求めるプログラム教えてくれませんか?
#include<iostream>
using namespace std;
int main() {
で始まってます。
ax^2+bx+c=0でa,b,cを代入して求めるんですが
772デフォルトの名無しさん:2009/10/11(日) 01:10:31
>>695でも見とけ
773デフォルトの名無しさん:2009/10/11(日) 03:30:31
774デフォルトの名無しさん:2009/10/11(日) 04:29:18
コピーを行おうとするとbus errorが起きてしまい原因が掴めません。
buff2の書き方に問題がある気がするんですが、どこが間違ってるんでしょうか。

char *buff1 = "abcdefghijk";
char *buff2 = "";

memcpy(buff2, buff1, 20);
printf("%s¥n", buff2);
775デフォルトの名無しさん:2009/10/11(日) 04:37:52
char *buff1 = "abcdefghijk";
char buff2[256];

memcpy(buff2, buff1, 20);
printf("%s\n", buff2);
776デフォルトの名無しさん:2009/10/11(日) 04:49:07
この手の勘違いをするヤツはC言語がある限りいなくならないんだろうな。
777775:2009/10/11(日) 04:50:39
>>776
buff2をあらかじめ配列宣言しなくてすむ方法はないでしょうか。
実際やりたいことは、

const void *src = xxx (バイナリデータ)

void *dst
にコピーしたいのです。
778デフォルトの名無しさん:2009/10/11(日) 04:54:23
malloc()使えw
779デフォルトの名無しさん:2009/10/11(日) 04:54:30
コピー元の(バイナリデータ)の長さがわからんとmallocでの確保も出来ないのでは
780775:2009/10/11(日) 04:56:10
なるほど!すみませんありがとうございました
781デフォルトの名無しさん:2009/10/11(日) 05:31:56
>>770
何故か、全角英数は分類にない。
782デフォルトの名無しさん:2009/10/11(日) 07:03:40
>773
横から悪いと思うがlibRawPgm.cを読ませてもらった
67行目で真ならreleaseImage()されるが、img->pが不定、他の所も
81行目だけ何故かリソースの開放が無い
同じようなリソース開放の処理が多いのでgotoか関数化した方がよい
課題依存の部分は突っ込まない
783デフォルトの名無しさん:2009/10/11(日) 11:31:43
[1] 授業単元:
プログラミング1
[2] 問題文(含コード&リンク):
2進数で00000001から11111111まで表示する。
[3] 環境
 [3.1] OS:windows
 [3.2] わからん
 [3.3] C言語
[4] 期限: 10月15日まで
[5] とくになし。この前for文を習ったばっかり。
784デフォルトの名無しさん:2009/10/11(日) 11:42:01
#include <stdio.h>
print_bin(int n){
int i;
if(n==0){ printf("¥n");return;}
for(i=0;i<2;i++){ printf("%d",i); print_bin(n-1); }
}
int main(void){ print_bin(8);reutnr 0}
785デフォルトの名無しさん:2009/10/11(日) 11:50:43
786デフォルトの名無しさん:2009/10/11(日) 11:53:42
ア○○のようなコード遊びなんでそのつもりで
787デフォルトの名無しさん:2009/10/11(日) 11:56:42
>>767-759
丁寧に教えていただきありがとうございます

>>769
キーを求めるためのプログラムでもあるのでそれは分かりません
単語帳を読ませてそこから検索するようなものを作ろうとして
挫折した結果が>>758なので
788デフォルトの名無しさん:2009/10/11(日) 12:12:26
>>783
#include <stdio.h>

#define N 8

int main(void)
{
int i, digit = 1;
char a[N] = {0};

while(1) {
for(i=0; !(a[i] ^= 1); ) if(++i == digit && ++ digit > N) goto out;
for(i=N-1; i>=0; i--) printf("%d", a[i]);
putchar('\n');
}
out:

return 0;
}
789デフォルトの名無しさん:2009/10/11(日) 12:17:51
普通にitoa使えば一発なんじゃ・・・
790デフォルトの名無しさん:2009/10/11(日) 12:27:06
itoaって00000001みたいにできたっけ?
791デフォルトの名無しさん:2009/10/11(日) 12:30:10
>>790
出来ないけどまぁ、strlenとか使って文字列長取得して0入れてやればおkじゃね
792デフォルトの名無しさん:2009/10/11(日) 12:37:09
それは一発とは言わないw
793デフォルトの名無しさん:2009/10/11(日) 12:39:51
>>792
itoa(num,buf,2);
printf("%08s",buf);


で一発じゃねーか
794デフォルトの名無しさん:2009/10/11(日) 12:46:51
君面白いこと言うねw
795773:2009/10/11(日) 12:48:13
>>715
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9974.zip
ヘッダー読み込みと、malloc部分を関数化しました。
>>782さんご指摘ありがとうございます。
796デフォルトの名無しさん:2009/10/11(日) 12:52:12
- 結果としてBASICが根幹にあるんですね。
  どうしてでしょうか。

簡単で手軽、誰にでも学習の機会があることでしょうね。
CやHSPだとこうはいきません。

CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。
797788:2009/10/11(日) 13:12:25
よく考えたらdigitいらなかったw

#include <stdio.h>

#define N 8

int main(void)
{
int i;
char a[N] = {0};

while(1) {
for(i=0; !(a[i++]^=1);) if(i==N) goto end;
for(i=N-1; i>=0; i--) printf("%d", a[i]);
putchar('\n');
}
end:

return 0;
}
798デフォルトの名無しさん:2009/10/11(日) 13:32:41
>796
どこかで見た気がすると思えば、「最も美しいプログラミング言語は? Part3」だった
799デフォルトの名無しさん:2009/10/11(日) 13:40:36
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char buf[9];
int count = 0;
do{
itoa(count++,buf,2);
printf("%08s\n",buf);
}while(strstr(buf,"11111111")==NULL);

}
これだけで済むね、itoaとprintf使うと。
800デフォルトの名無しさん:2009/10/11(日) 13:40:58
ああ、でもwhileは習ってないらしいからだめか
801デフォルトの名無しさん:2009/10/11(日) 13:50:18
処理としては比較にならないほど重くなってるけどなw
802デフォルトの名無しさん:2009/10/11(日) 13:57:43
>>801
うちの環境だと>>799が0.08秒(何度かやると最大で0.16秒)
>>797が0.16秒(何度かやると最大で0.25秒)になる
803デフォルトの名無しさん:2009/10/11(日) 14:04:52
というか00000001になってねーじゃねーかw
804デフォルトの名無しさん:2009/10/11(日) 14:06:03
これでは3Dプログラミングなんて10年たってもムリかもw
805デフォルトの名無しさん:2009/10/11(日) 14:07:25
初期値の問題だけなのにずいぶん必死だな・・・
806デフォルトの名無しさん:2009/10/11(日) 16:19:10
1つの変数に複数の型の配列を入れたいんですが、
void **list = malloc(sizeof(void) * 2);
list[0] = malloc(sizeof(char) * 10);
list[1] = malloc(sizeof(int) * 10);

とした場合、list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。
list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。

807デフォルトの名無しさん:2009/10/11(日) 16:23:21
質問すれじゃねーぞ
808デフォルトの名無しさん:2009/10/11(日) 16:25:25
>sizeof(void)

ちょっとワロタ
809デフォルトの名無しさん:2009/10/11(日) 16:26:24
s/sizeof(void)/sizeof(void *)/
かなぁ、以下で質問してください

C言語なら俺に聞け(入門篇) Part 54
http://pc12.2ch.net/test/read.cgi/tech/1254829314/

C/C++小心者スレッドPart1
http://pc12.2ch.net/test/read.cgi/tech/1186262298/

【初心者お断り】ガチ規格準拠C専用スレ Part134
http://pc12.2ch.net/test/read.cgi/tech/1246115922/
810デフォルトの名無しさん:2009/10/11(日) 16:28:45
すみませんスレまちがえました
811デフォルトの名無しさん:2009/10/11(日) 18:20:18
[1] 授業単元:人工知能
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9975.zip
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C言語
[4] 期限: 2009年10月14日00:00
[5] その他の制限:とくになし
812デフォルトの名無しさん:2009/10/11(日) 18:22:00
>>797は条件分が多すぎておもたくなってるんだとおも
813デフォルトの名無しさん:2009/10/11(日) 18:29:52
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char buf[9];

    for( int i = 1; i < 256; i++ )
    {
        itoa(i,buf,2);
        printf("%08s\n",buf);
    }
    return 0;
}

でいいじゃん。めんどくさ
814デフォルトの名無しさん:2009/10/11(日) 20:12:40
#include <stdio.h>

int main()
{
char a=0;int bit;
while((a++)+1){
for(bit=128;bit;bit>>=1){
a&bit ? printf("1") : printf("0");
}
printf("\n");
}
return 0;
}
815デフォルトの名無しさん:2009/10/11(日) 20:36:38
麻呂が久々に登場でおじゃるぅ〜、クソースを書いても良いでおじゃるか?
816デフォルトの名無しさん:2009/10/11(日) 20:50:46
>>815
今年の春先だったかGWの頃だったか、麻呂結構凄いコード
盛んに投稿してたじゃん
817デフォルトの名無しさん:2009/10/11(日) 21:18:39
>>814
なんでwhile((a++)+1)
while(++a)でいいじゃん
818デフォルトの名無しさん:2009/10/11(日) 21:20:43
>>816
へ?今年はまだここにコードを書いた覚えはないでおじゃるが?
そもそも去年だか一昨年の年末くらいから、ほとんどスレを見ていない。
たまに専用ブラで受信してログを残している程度だったが・・・
毎年似たような課題ばかりで退屈したでおじゃる。
819デフォルトの名無しさん:2009/10/11(日) 21:25:16
麻呂はひとりじゃないってことだ
820デフォルトの名無しさん:2009/10/11(日) 21:31:36
>>707から暴れといてなにが久々だw
821551:2009/10/11(日) 22:17:32
#include <stdio.h>
int main()
{
  int i,j,k;
  char a[9]={1,2,3,4,5,6,7,8,0};

  for(i=1;i<=8;i++) {
    for(k=0;k<8;k++) {
      a[7-k] = (i-k > 0)+'0';
    }
    puts(a);
  }
  puts("というのは、冗談で…");

  for(i=1; i<=0xff; i++) {
    j = i;
    for(k=0; k<8; k++) {
      a[7-k] = (j % 2)+'0'; // (j & 1) でもよい
      j = j / 2; // (j >> 1) でもよい
    }
    puts(a);
  }
  return 0;
}
822デフォルトの名無しさん:2009/10/11(日) 22:18:03
>>770
私の環境は Windows XP, 処理系は gcc 4.3.2(cygwin) です。
http://codepad.org/46ulkJYF
文字コードは JIS X 0208 (のつもり)、指摘のあった全角英数は、「全角その他」に入ります。
823デフォルトの名無しさん:2009/10/12(月) 00:21:31
[1] 授業単元:c言語
[2] 問題文
課題文1
とある架空の携帯電話会社では、基本料金の1,000円に、一ヶ月の 通話の合計時間によって通話料が加算される(1分あたり10円)。
また、1ヶ月の料金は基本料金込みで10,000円以上は通話料が無料になるものとする。
このとき、1ヶ月の合計通話時間を入力すると請求される料金を表示するプログラムを作成せよ。
課題文2
明治元年以降の西暦年を4桁の数で入力すると、和暦で年を表示するプログラムを作成せよ。
ただし、2つの元号を持つ年は両方の年を表示すること。
(例: 1989年 → 昭和64年、平成元年)
(2つの元号を持つ年の扱いについては余裕がある人は、月、日も入れて、その日の正しい
元号を表示することによって元号を一つ表示するプログラムとしてもよい。)
[3] 環境
Windows,
言語:C++
[4] 期限: 11/3
よろしくお願いします!
824デフォルトの名無しさん:2009/10/12(月) 00:35:31
>[1] 授業単元:c言語
>言語:C++

どっちなんだよw
825551:2009/10/12(月) 01:13:22
>>823 問題1
#include <iostream>
using namespace std;

int main(void) {
  int minits;

  cout << "通話時間(分)を入力:";
  cin >> minits;
  if(minits<0) minits = 0;
  if(minits>900) minits = 900;
  cout << minits*10 + 1000 << "円";
}
826デフォルトの名無しさん:2009/10/12(月) 01:14:28
Cの授業でC++で提出しても許されるってことかな
だとしたら良いなあ
827>551:2009/10/12(月) 01:58:21
> if(minits>900) minits = 900;
はしょらないでちゃんと記述汁!
if(minits*10+1000>10000) minits=(10000-1000)/10;
828デフォルトの名無しさん:2009/10/12(月) 02:11:09
>>820
また誰かと勘違いしてやんのw
829770:2009/10/12(月) 02:33:28
>>822
迅速に解答していただき大変ありがとうございました!
大学が開いたら動作確認してご連絡したいと思います。

指摘されていた全角英数の件ですが、
おそらく担当教官のミスで抜け落ちていたのだと思います。

>指摘のあった全角英数は、「全角その他」に入ります。
全角その他=全角英数ということでよろしいのでしょうか?
ご面倒をかけて恐縮ですが、全角英数を分けたものもお手間でなければお願いしても大丈夫でしょうか。
申し訳ございません。
830デフォルトの名無しさん:2009/10/12(月) 02:56:43
久々に本物の、クソースを書いた麻呂が登場したのに
騙ったのか単に麻呂と勘違いされていたのか知らない
誰かと同一視されてるでおじゃる・・・まぁ、引退したし
どうでも良いでおじゃるがw
831デフォルトの名無しさん:2009/10/12(月) 03:30:35
>>823
課題文2
#include <stdio.h>

int main(void)
{
int year;

printf("西暦を入力してください:");
scanf("%d", &year);

if(year < 1868 || 2009 < year) return 0;
if(year == 1868) printf("明治元年\n");
else if(year < 1912) printf("明治%d年\n", year - 1867);
else if(year == 1912) printf("明治45年 大正元年\n");
else if(year < 1926) printf("大正%d年\n", year - 1911);
else if(year == 1926) printf("大正15年 昭和元年\n");
else if(year < 1989) printf("昭和%d年\n", year - 1925);
else if(year == 1989) printf("昭和64年 平成元年\n");
else printf("平成%d年\n", year - 1988);

return 0;
}
832551:2009/10/12(月) 05:35:02
>>827
>> if(minits*10+1000>10000) minits=(10000-1000)/10;
if(minits>(10000-1000)/10) minits=(10000-1000)/10;
833デフォルトの名無しさん:2009/10/12(月) 05:40:23
なんでそこまでminitsに拘るんだ
もう一つ変数用意して料金用にすればいいのに
834デフォルトの名無しさん:2009/10/12(月) 06:18:41
誰もminitsに突っ込まないのは何故
835デフォルトの名無しさん:2009/10/12(月) 06:26:45
#include <iostream>
int main() {
unsigned int min;
std::cin >> min;
unsigned int toll = 1000 + min*10;
if (toll > 10000 )
toll = 10000;
std::cout << toll << "円" << std::endl;
}

素直に書くとこんなだよな
10000円から逆算すると900分だから、とかやるのはバグの元だし、どうしてもそれを
やりたいなら
static const int hoge = (10000-1000)/10;
とか書くべき
836551:2009/10/12(月) 06:36:02
なぜ?はしょる。
if (toll < 1000 )
  toll = 1000;
837デフォルトの名無しさん:2009/10/12(月) 06:36:45
>>836
完全に間違いだろ
838デフォルトの名無しさん:2009/10/12(月) 06:56:38
>>836
よう馬鹿
よくコードを嫁
839551:2009/10/12(月) 07:16:04
>>836 は二の次。
unsigned int min=0;
840デフォルトの名無しさん:2009/10/12(月) 10:36:26
お前もう来なくていいよ
841デフォルトの名無しさん:2009/10/12(月) 12:18:47
>>829
>>770
では訂正します。
http://codepad.org/Mdyl971P
第一引数は入力ファイル名、第二引数は出力ファイル名です。
842デフォルトの名無しさん:2009/10/12(月) 13:12:01
>>839
バカか
843デフォルトの名無しさん:2009/10/12(月) 13:34:04
>>836>>839
よう馬鹿
それ完全に無駄な処理だぞ
844デフォルトの名無しさん:2009/10/12(月) 13:36:21
minだと最小値に見えるし、using namespace stdな人達も困るだろうから、
minutesとかminsとかにした方がいいかもな
俺ならmにするけど
845551:2009/10/12(月) 15:14:52
>>842 解説求む
VC6 / VS2005 だと、-2入力の時980円。
g++ / bcc32 だと、-2入力の時=0必要。
>>840 むっ氏
846デフォルトの名無しさん:2009/10/12(月) 15:31:50
で、お前のコードだと-2を入れると1000円が返る訳だが、それが正しいと思うのか?
半端にエラーを隠すコードを突っ込むくらいならちゃんとエラーを吐くコードに改良しろ。
847デフォルトの名無しさん:2009/10/12(月) 15:36:25
OK りょうかい
848デフォルトの名無しさん:2009/10/12(月) 15:38:20
>>811
私の環境は WindowsXP, 処理系は gcc 4.3.2 (cygwin) です。
http://codepad.org/LOFL4Dfe
縦型検索ですので、最短経路を示すわけではありません。
849デフォルトの名無しさん:2009/10/12(月) 15:56:43
誰か本当にお願いしますC++で二次方程式の解を求めるプログラム教えてください
a=0の時と実数解と虚数解で場合分けするだけじゃダメなんですか?もう1週間経っても終わらないんです。
ヒントの場合分けにそう書いてありました
850デフォルトの名無しさん:2009/10/12(月) 16:02:13
>>849
できたとこまでみせてください。あとテンプレはどれですか?
851デフォルトの名無しさん:2009/10/12(月) 16:11:13
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float a,b,c,d,x0,x1;
cout << "aを入力してください\n";
cin >> a;
cout << "bを入力してください\n";
cin >> b;
cout << "cを入力してください\n";
cin >> c;
d=b*b-4*a*c;
x0 = (-b + sqrt(d)) / (2 * a);
x1 = (-b - sqrt(d)) / (2 * a);
if(a==0) {
cout << "解は1つで" << -c/b << "です\n";
}
else if(d>0) {
cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n";
}
else if(d<0) {
cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n";
}
else {
cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n";
}

return 0;
}
if文で作る問題だったし、場合分けは、虚数解、a=O、実数解に分ければ出来ると言ってたので、これでいいかなと思ったんですが…
852デフォルトの名無しさん:2009/10/12(月) 16:14:01
>>851
あってそうですね。どこがまちがえている、ていわれたのですか?
853デフォルトの名無しさん:2009/10/12(月) 16:15:12
まともに見てないけど一見して気になったのは、float相手に==0をしてるとこ
854デフォルトの名無しさん:2009/10/12(月) 16:16:45
と思ったけどaは加工してないのか
…って、a==0でいいの?
855デフォルトの名無しさん:2009/10/12(月) 16:17:40
ああ、いいのか
ちゃんと見てないで喋ると駄目だな
856851:2009/10/12(月) 16:18:12
じゃあ条件の所は全部0.0にすればいいんですか?
857デフォルトの名無しさん:2009/10/12(月) 16:19:52
x0, x1 の計算は a の判定の後のほうがよろしいんじゃないかと…

演算結果が ±INF になるだけかもしれないし 例外投げるかもしれない
858851:2009/10/12(月) 16:23:37
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float a,b,c,d,x0,x1;
cout << "aを入力してください\n";
cin >> a;
cout << "bを入力してください\n";
cin >> b;
cout << "cを入力してください\n";
cin >> c;
d=b*b-4*a*c;
if(a==0) {
cout << "解は1つで" << -c/b << "です\n";
}
x0 = (-b + sqrt(d)) / (2 * a);
x1 = (-b - sqrt(d)) / (2 * a);
else if(d>0) {
cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n";
}
else if(d<0) {
cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n";
}
else {
cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n";
}

return 0;
}
こうですか
859デフォルトの名無しさん:2009/10/12(月) 16:26:28
sqrt に負数が入る可能性がある
860851:2009/10/12(月) 16:27:59
else文がifと一致しません
って出ました。やっぱり訂正するとダメでした…
861851:2009/10/12(月) 16:29:26
どこをどうすれば合うんでしょうか?
862デフォルトの名無しさん:2009/10/12(月) 16:31:04
質問スレに引っ越せ
863デフォルトの名無しさん:2009/10/12(月) 16:35:45
きちっと処理できないsort関数なんてqsort(クソート)でおじゃる!
864デフォルトの名無しさん:2009/10/12(月) 16:35:47
#include <iostream>
#include <cmath>
using namespace std;
void hoge(float a, float b, float c) {
float x0,x1,d = b*b-4*a*c;
if(a == 0) {
if (b == 0) cout << "解は1つで" << -c << "です\n";
else cout << "解は1つで" << -c / b << "です\n";
}
else if(d > 0) {
x0 = (-b + sqrt(d)) / (2 * a);
x1 = (-b - sqrt(d)) / (2 * a);
cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n";
}
else if(d < 0) {
cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n";
}
else {
cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n";
}
}
int main() {
hoge(0,0,-1);
hoge(1,0,-1);
hoge(1,0,1);
hoge(1,-2,5);
hoge(0,2,1);
hoge(1,2,1);
return 0;
}
これで全パターン通ってるか?
865851:2009/10/12(月) 16:51:31
でも864の様な書き方は習っていないんです…
866デフォルトの名無しさん:2009/10/12(月) 16:53:02
別に習ってなくても独学でやりました。でいいと思うけど
867デフォルトの名無しさん:2009/10/12(月) 16:53:31
どうでもいい事だけど、ここ一年ぐらいずっとCしか見てなかったから、
C++のcoutとか違和感ありまくる・・・・
868デフォルトの名無しさん:2009/10/12(月) 17:03:56
>>865
if のネスト(if / else の中に さらに if が居る) は習っていない?

ネスト無し if 〜 else if 〜 else だけを使って、
とある条件が成立している時だげ演算するのを記述するのは面倒だな…
869551:2009/10/12(月) 17:43:43
870デフォルトの名無しさん:2009/10/12(月) 17:47:46
try{
if(minute < 0) throw 1;
}catch(int a){
cout << "マイナスの値が入力されました!"<<endl;
return a;
}
こんな短い間隔でtryするなよ・・・って思うのは俺だけですねごめんなさい
871デフォルトの名無しさん:2009/10/12(月) 17:51:34
>>870
短いのはかまわないが、例外を投げる価値が無い。
872デフォルトの名無しさん:2009/10/12(月) 19:34:16
>>851
#include <iostream>
#include <cmath>
using namespace std;

int main() {
  float a,b,c,d,x0,x1;

  cout << "aを入力してください\n"; cin >> a;
  cout << "bを入力してください\n"; cin >> b;
  cout << "cを入力してください\n"; cin >> c;
  d = b*b-4*a*c;

  if(a==0 && b==0) {
    cout << "解は1つで" << -c << "です\n";
  }
  else if(a==0) {
    cout << "解は1つで" << -c / b << "です\n";
  }
  else if(d==0) {
    cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n";
  }
  else if(d>0) {
    x0 = (-b + sqrt(d)) / (2 * a);
    x1 = (-b - sqrt(d)) / (2 * a);
    cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n";
  }
  else if(d<0) {
    cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n";
  }
  return 0;
}
873デフォルトの名無しさん:2009/10/12(月) 20:09:36
>>811 最短経路
#define IS_VALID(x, y) (0<=(x) && (x)<sizex && 0<=(y) && (y)<sizey)
void SearchRoute_internal( int work[MAX_X][MAX_Y], int map[MAX_X][MAX_Y], int sizex, int sizey, int x, int y, int goalx, int goaly, int distance, int *resolved ){
static const int vx[]={ 1, 0,-1, 0}, vy[]={ 0, 1, 0,-1};
int i, next_x, next_y;
work[x][y]=distance;
if(x==goalx && y==goaly) *resolved=1;
for(i=0;i<4;i++){
next_x=x+vx[i];
next_y=y+vy[i];
if(!IS_VALID(next_x, next_y)) continue;
if(map[next_x][next_y]==ROAD && work[next_x][next_y]>distance){
SearchRoute_internal(work, map, sizex, sizey, next_x, next_y, goalx, goaly, distance+1, resolved);
}}}
void MarkPath(int work[MAX_X][MAX_Y], int map[MAX_X][MAX_Y], int x, int y, int sizex, int sizey){
static const int vx[]={ 1, 0,-1, 0}, vy[]={ 0, 1, 0,-1};
int i, next_x, next_y;
for(i=0;i<4;i++){
next_x=x+vx[i];
next_y=y+vy[i];
if(!IS_VALID(next_x, next_y)) continue;
if(work[next_x][next_y]==work[x][y]-1){
map[next_x][next_y]=PATH;
MarkPath(work, map, next_x, next_y, sizex, sizey);
break;
}}}
void SearchRoute( int map[MAX_X][MAX_Y], int sizex, int sizey, int startx, int starty, int goalx, int goaly ){
int work[MAX_X][MAX_Y]={{0}}, resolved=0;
SearchRoute_internal(work, map, sizex, sizey, startx, starty, goalx, goaly, -MAX_X*MAX_Y, &resolved);
if(resolved) MarkPath(work, map, goalx, goaly, sizex, sizey);
}
874デフォルトの名無しさん:2009/10/12(月) 20:26:03
>>872
aとbが0のときは解なんてないだろ
875848:2009/10/12(月) 20:47:11
>>873
確認しました。すごいですね。
876デフォルトの名無しさん:2009/10/12(月) 20:52:25
>>848,873
ありがとうございます
877851:2009/10/12(月) 22:51:20
>>868
習ってないですね。
でも、ありがとうございました
878デフォルトの名無しさん:2009/10/13(火) 02:00:30
授業単元:プログラミング
問題文:#include<stdio.h>
    int main(void){
    int x;
    double r;
    double pi=3.141592;
    printf("半径rを入力して下さい:");
    scanf("%lf",&r);
    printf("1または2を入力して下さい。\n");
    printf("[1:球の表面積 2:球の体積]:");
    scanf("%d",&x);

if(x==1){
printf("半径%lfの球の表面積S=%lf",r,4.0*pi*pow(r,2.0));
}else if(x==2){
printf("半径%lfの球の体積V=%lf",r,4.0/3.0*pi*pow(r,3.0));
}else{
printf("1または2を入力して下さい。");
}

return 0;
    }
環境
 [3.1] OS:WindowsXP
 [3.2] Visual Studio
 [3.3] 言語:C
[4] 期限:10月13日 10:40

体積と表面積を求めるプログラミングなのですが上手く動作してくれません。
よろしくお願いします。
879デフォルトの名無しさん:2009/10/13(火) 02:10:18
#include <math.h>
880デフォルトの名無しさん:2009/10/13(火) 02:21:29
>>879
レスありがとうございます。
無事上手く動作しました。
881770:2009/10/13(火) 02:49:33
>>841
>>822
ありがとうございました!動作確認できしだい報告いたします。
取り急ぎお礼まで、修正にまで応じてくださり大変感謝しております。
882デフォルトの名無しさん:2009/10/13(火) 02:53:24
[1] 授業単元:自主勉
[2] 問題文(含コード&リンク):イテレータを使って微分方程式を解きたい
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C++
[4] 期限: 早め
[5] その他の制限: とくにないけどイテレータに関しての説明が詳しくしてもらえるとありがたいです
ルンゲクッタか蛙飛び法でお願いします
883デフォルトの名無しさん:2009/10/13(火) 15:55:04
[1] 授業単元: プログラミング演習
[2] 問題文
問1
画面上の中央に一辺の長さが40の白い正方形を表示せよ.キーボードからの入力があるまでその表示のままプログラムが停止するようにせよ。
そしてキー入力をしたらその画面が消え、画面の中央に一片の長さが50の赤い正方形を表示せよ。(cleardevice()関数で画面を消し、getch()関数でキー入力を取得せよ)

問2
キーボードでどのキーが押されるかによって表示される図形の色と大きさが変わるようなプログラムを作成せよ。
プログラムが起動し、’4’のキーが押された場合には一辺が50の赤い正方形、’6’のキーが押された場合には一辺が20の青い正方形が表示されるようにせよ。(getch関数を使用せよ)。

問3
前問と同様、キーボードでどのキーが押されるかによって表示される図形の色と大きさが変わるようなプログラムを作成せよ。
ただし、キーが押される度に何度でも’4’のキーと’6’のキーで一辺が50の赤い正方形、と一辺が20の青い正方形が切り替わるようにせよ。ただし、’q’のキーが押されたらプログラムが終了するようにせよ。(while文あるいはdo-while文を使用すること)

問4
画面上に一辺が40の白い長方形を描き,キー入力によってその長方形の表示位置が左右に少しずつ変化するようなプログラムを作成せよ.
('4', '2'のキーで左右移動,キー入力にはgetch()関数を使用せよ.)最初は正方形を画面中央に描く。また、正方形が描かれる位置を記憶するための変数を作っておくこと。その変数の値をキー入力に応じて増減させ、その値を使用して表示をするようなプログラムにせよ。

問5
前問のプログラムを改造し、画面上に描かれた正方形がキー入力によって上下左右に動くようなプログラムを作成せよ。
「6」で右、「4」で左、「8」で上、「2」で下に動くようにせよ。「q」でプログラム終了すること。
[3] 環境
 [3.1] OS:XP
 [3.2] Turbo c++ 4.0
 [3.3] C++
[4] 期限 今週木曜日
[5] なし
どうかよろしくおねがいします。
884デフォルトの名無しさん:2009/10/13(火) 17:44:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): ユークリッドの互除法のアルゴリズムを作る。(達成条件は 例 % euclid_1013_2009→ 結果は1となるように)
[3] 環境
 [3.1] OS:Windows/vista
 [3.2] コンパイラ名とバージョン:Visual C++ 2008
 [3.3] 言語: C++
[4] 期限: 2009年10月22日
[5] その他の制限: ちょっと分かりにくいかも・・・?
よろしくお願いします。
885デフォルトの名無しさん:2009/10/13(火) 17:47:13
アルゴリズムを作る

w
886デフォルトの名無しさん:2009/10/13(火) 18:08:37
>>885
コードを書けないくせにw
887デフォルトの名無しさん:2009/10/13(火) 18:09:13
ユークリッド互除法はアルゴリズムじゃないのか
888デフォルトの名無しさん:2009/10/13(火) 18:25:02
>>884
アルゴリズムは俺が作ったんじゃないけどとりあえず

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

int gcd(int x, int y) { return x % y? gcd(y, x % y): y; }
int main(int argc, char **argv)
{
printf("%d\n", gcd(atoi(argv[1]), atoi(argv[2])));
return 0;
}
889デフォルトの名無しさん:2009/10/13(火) 18:25:10
ユークリッドの互除法のアルゴリズム[を使ったプログラム]を作る
だろJK
890デフォルトの名無しさん:2009/10/13(火) 20:55:06
屁理屈過ぎるw
891デフォルトの名無しさん:2009/10/13(火) 22:05:40
屁理屈じゃなさ過ぎる
892デフォルトの名無しさん:2009/10/13(火) 22:15:33
>>883
turbo c? Windows の cmd ってエスケープシーケンスが効きましたっけ?
893デフォルトの名無しさん:2009/10/13(火) 22:20:40
横レス

>>892
turbo cを知らない、の意味で?つけてる?
エスケープシーケンス使えるよ。
894892:2009/10/13(火) 22:32:08
色はつかないようだが、画面クリアとかはできるなあ。詳細求む。
895892:2009/10/13(火) 22:33:31
いや、turbo c といえば dos 時代のコンパイラとばかりおもってまして。
色をつけるエスケープシーケンスが見つからないでいます。
896デフォルトの名無しさん:2009/10/13(火) 22:37:07
コンソールに色を付けるならここら当たりはどうよ?

http://homepage2.nifty.com/c_lang/intro/no_58.htm
897デフォルトの名無しさん:2009/10/13(火) 22:44:32
cygwin 上では無理だし、この教えていただいたWebページって win98 系統という気がして。
Windows NT/cmd で使えるエスケープシーケンスってなんでしょうね。
898デフォルトの名無しさん:2009/10/13(火) 22:47:37
>>897
だからないから
>>896を参照しろ
899デフォルトの名無しさん:2009/10/13(火) 22:49:17
ちなみに>>896をWindowsXP、VC2008で走らせたらちゃんと色が付いたぞ
900デフォルトの名無しさん:2009/10/13(火) 22:58:05
了解。gcc-3 -mno-cygwin で動作しました。多謝。
ただし gcc-4 では -mno-cygwin オプションそのものが打ち切られてしまったようです。どうすればいいんでしょうね。
901デフォルトの名無しさん:2009/10/13(火) 23:01:33
cygwin使わずにMinGW使えよ・・・
902デフォルトの名無しさん:2009/10/13(火) 23:04:24
別にcmdじゃなきゃダメな訳じゃないでしょ
command使えばよくね
903770:2009/10/13(火) 23:54:05
>>841
>>822

動作確認できました。誠にありがとうございました!!
904デフォルトの名無しさん:2009/10/14(水) 00:14:15
>>902
んー、これはビックリ、command.com があったんですね。宿題出題者の実行環境をまって手をつけるか考えます。
905デフォルトの名無しさん:2009/10/14(水) 00:42:05
誰か>>896を参考にしてエスケープシーケンスモドキのclassを
作ってやれよ
906デフォルトの名無しさん:2009/10/14(水) 02:19:23
>>904
turboCだからcommand.comで実行することは問題ないと思うけど
907デフォルトの名無しさん:2009/10/14(水) 10:35:04
908デフォルトの名無しさん:2009/10/14(水) 13:57:31
>>905
cursesを使えば済むことじゃん。
909デフォルトの名無しさん:2009/10/14(水) 14:35:57
>>908
だからLinuxじゃなくてTurbo C++だって
Windows NT コンソールだぞ
910デフォルトの名無しさん:2009/10/14(水) 14:41:17
>>909
Windowsでもcurses使えるよ。

Public Domain Curses
http://pdcurses.sourceforge.net/
911デフォルトの名無しさん:2009/10/14(水) 15:03:34
[1] 卒業研究
[2] ベジュ曲線を描く
[3] 環境
 [3.1] Windows
 [3.2] VC++6.0
 [3.3] C++
[4] 今週末まで
[5] 特になし
よろしくお願いします
912デフォルトの名無しさん:2009/10/14(水) 15:04:17
>>910
宿題スレにそんな物使うな
913デフォルトの名無しさん:2009/10/14(水) 15:43:05
914 ◆/91kCCQXBo :2009/10/14(水) 16:01:50
915883:2009/10/14(水) 17:43:51
何を記載すればいいのかわかないのですが。
色の付け方のことでしょうか?

なら、setcolor()をつかい()の中に4を入れると赤15で白とかいてありました。

引き続きおねがいいたします。
916デフォルトの名無しさん:2009/10/14(水) 18:28:24
917デフォルトの名無しさん:2009/10/14(水) 19:09:21
>>916
>>1
気に入らない質問やその他や発言はスルーの方向で。
918916:2009/10/14(水) 19:20:37
>>917
気に入らない訳じゃなくて、問題を全部書いて欲しいという意味なんだけど、おかしかった?
後付けされるのは面倒じゃん。
っていうかなんで>>917に説明してんだおれorz
919デフォルトの名無しさん:2009/10/14(水) 19:37:42
>>918
問題文は全部書いてあるんじゃね?
ただ>>883だけじゃ同じ授業を受けてる人にしか解けないだろうけど
920デフォルトの名無しさん:2009/10/14(水) 21:57:27
>>914
ありがとうございます!
921892:2009/10/14(水) 22:01:39
>>915
多分 turbo c 独自の関数を使わなければならないんでしょうね。だから皆ひいてしまっているかもしれません。
うーん、困りましたね。
922デフォルトの名無しさん:2009/10/14(水) 22:13:15
923困ったさん:2009/10/14(水) 22:42:09
[1] 授業単元: プログラミング
[2] 問題文:ナップサック問題のプログラムを利用し、グラフ彩色問題に当てはめる (色は4色で)
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: Linux内にある標準のコンパイラ
[3.3] 言語:C++
[4] 期限:2009年10月16日まで
[5] その他の制限:初心者なので、プログラミングするのに最低限必要な知識の範囲で教えて頂ければと
         思います。
※ナップサック問題のプログラムは次に書きます。
924困ったさん:2009/10/14(水) 22:50:58
##include<stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
int i,n,z[60],r,za[60];
double a[60],b,c[60],suma,sumc,f,fz;
FILE *fp;
fp=fopen("knap_prob50_L.txt", "r");
fscanf(fp,"%d %lf",&n,&b);
printf("n= %d b= %lf\n" ,n ,b);

for(i=0; i<n; i++) {
fscanf(fp,"%lf %lf",&a[i], &c[i]);
printf("a[%d]=%lf c[%d]=%lf\n",i,a[i],i,c[i]);
z[i]=rand() %2;
printf("z[%d]=%d\n",i,z[i]);
}
suma=0;
sumc=0;
for(i=0; i<n; i++){
suma=suma+a[i]*z[i];
sumc=sumc+c[i]*z[i];
}
if(suma>b){
f=sumc-0.5*(suma-b);
}else {
f=sumc;
}
printf("%lf\n",f);
925困ったさん:2009/10/14(水) 22:55:14
924の続きです。

for(i=0; i<20; i++){
for(i=0; i<n; i++) {
za[i]=z[i];

r=rand()%n;
za[r]=1-za[r];
suma=0;
sumc=0;
for(i=0; i<n; i++){
suma=suma+a[i]*za[r];
sumc=sumc+c[i]*za[r];
}
if(suma>b){
fz=sumc-0.5*(suma-b);
}else{
fz=sumc;
}
if(fz>f){
for(i=0; i<n; i++){
z[i]=za[i];
}
f=fz;
printf("%lf\n", f);
}
for(i=0; i<n; i++){
printf("%d\n" ,z[i]);
}
printf("%lf %lf\n",f,suma);
}
926770:2009/10/14(水) 23:17:08
以前回答いただいた課題の発展課題です。よろしくお願いします。
以前の回答は>>841にあります。以前の問題文は>>770を参照してください。
ただし>>770の分類には全角英数が抜けています。
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):
前回の課題の分類の結果「半角英数:XX字、半角カナ:XX字・・・」
という結果が得られたとき、その結果のファイルを読み込み
各分類からその結果の比率に合わせてランダムに文字列を出力する
プログラムを作成せよ。出力する文字数は解析に用いた文字の合計である。
(例えば半角英数が全体の60%だった場合、出力される文字列の中にランダムに半角英数文字が60%の割合で含まれることになる)
分類は以下の通りとする。
1.半角英数
2.半角カナ
3.半角記号
4.全角英数
5.全角かな
6.全角記号
7.漢字

[3] 環境
 [3.1] OS:Windows XP
 [3.2] Visual Studio 2008
 [3.3] どちらでも可
[4] 期限: 2009年10月16日 正午迄
[5] その他の制限:
前回回答者の方が文字コード表としてJIS X 0208を
利用されていますので、それに沿っていただけると幸いです。
前回のような文字列のテキストファイルを読み込む入力部を作る必要はなく、
入力は「半角英数:XX字、半角カナ:XX字・・・」というものでよいそうです。
コード内にコメントで使用した文字コードを注釈として記載するようにとの連絡がありました。
それ以外は特にありません。
よろしくお願いいたします。
927デフォルトの名無しさん:2009/10/14(水) 23:34:29
>>926
いや、もはやそれは自分でやれよ
全部を宿題スレで片付けようと酢んな
928デフォルトの名無しさん:2009/10/14(水) 23:37:57
929デフォルトの名無しさん:2009/10/15(木) 00:12:29
>>927
最近思ったんだが、宿題をピンからキリまで解いたら
中途半端ながらプログラミングができるはずだったやつが、
全くプログラミングできないやつになる。となると、
それはそれで少し平和な世界が作れそうな気がするんだ。

漏れは解かないけど。
930デフォルトの名無しさん:2009/10/15(木) 00:22:56
>>929
けど新卒パワーで採用しちゃうんだぜ
931デフォルトの名無しさん:2009/10/15(木) 00:41:07
宿題を丸投げしてコピペするような者のことなどを考えていたらこんなスレは存在できないんじゃないか。
932デフォルトの名無しさん:2009/10/15(木) 01:39:32
ここにも理解力の低い者が
933デフォルトの名無しさん:2009/10/15(木) 02:09:05
>>1
934デフォルトの名無しさん:2009/10/15(木) 03:05:21
未だにC言語で、プログラムの開始をmain関数にしているのに
int main()と書く人がいるんだな。ISO、ANSI準拠の標準スタイルは
int main(void) だぜ?または、引数があるなら
int main(int argc, char *argv[]) だぜ?強要はしないがな。
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00014.html
935デフォルトの名無しさん:2009/10/15(木) 03:24:14
宿題スレに1問貼ろうが2問貼ろうが
他力本願になった時点で終わってるだろ
936デフォルトの名無しさん:2009/10/15(木) 07:32:23
>>934
int main(void) と int main() とは同値である、という結論が以前でていました。
937デフォルトの名無しさん:2009/10/15(木) 07:43:03
その話し出すと長ぇんだよなぁw
938デフォルトの名無しさん:2009/10/15(木) 07:47:33
>>934
引数なしの関数を何か書くときに
int num(){
return 0+1;
}

int num(void){
return 0+1;
}
どっちが正しいの?
939デフォルトの名無しさん:2009/10/15(木) 07:51:45
よそでやれ
940デフォルトの名無しさん:2009/10/15(木) 07:53:23
>>934
ANSI以前との互換性のために、ANSI-Cではプロトタイプ宣言の時だけは引数にvoidを
明示しないとならないことになっている。
定義ではvoidの明示は不要。
C++ではプロトタイプ宣言でも関数定義でもvoidの明示は不要。

つまり、ANSI-Cで引数の無いmain関数のプロトタイプを書く場合だけは、引数の型を
voidとするのが正式。それ以外の場所は省略しても正式。
941デフォルトの名無しさん:2009/10/15(木) 07:54:42
>>938
main関数以外でも>>940が正しい
942デフォルトの名無しさん:2009/10/15(木) 11:56:10
>>932
貼る側の将来を心配してたらこんなスレ存在できないだろと言ってるんだが。
943デフォルトの名無しさん:2009/10/15(木) 11:59:09
よくわからないから全部書いてる
944デフォルトの名無しさん:2009/10/15(木) 13:46:42
>>942
宿題丸投げ→プログラム書けないやつになる→業界に人が入ってこない→仕事が回ってくる→平和
945デフォルトの名無しさん:2009/10/15(木) 13:49:29
もしくは、
未経験新人が入ってこない→教えなくてすむ→平和
できる気になってる新人が入ってこない→スパゲッティが生まれない→直さなくてよい→平和
など。
946デフォルトの名無しさん:2009/10/15(木) 13:51:17
>>944
こっちのレスと少しずれてる気もするが、そっちはそっちで理解した。判断は微妙なので保留だが。
(業界に人が少ないと短期的には自分の仕事は増えるが、将来的にはどうかなどを考えると)
947デフォルトの名無しさん:2009/10/15(木) 14:13:59
宿題丸投げ→このスレの活性化→この言語が活性であると(誤解?)する→学ぶ人が増える

という流れもありそう。それにしてもなぜC/C++の宿題スレだけ活性なのかな?
948デフォルトの名無しさん:2009/10/15(木) 14:20:10
>>947
宿題として出題される率が高いからじゃね?
949デフォルトの名無しさん:2009/10/15(木) 14:37:22
>>947
習ってるヤツ多いんだろう。

習いはじめならjavaとかの方が簡単で、自分でやれるとか、GUI方面のやれるような宿題ばかりなのかも。

javaの宿題スレには今年まともな宿題がさっぱり集まらないが、そもそも、数理とか応用の宿題は見かけないし。
950デフォルトの名無しさん:2009/10/15(木) 14:40:41
オレの通ってた経営情報学部、経営科と情報科に分かれていて、
最初に習う言語が、
経営→FORTRAN
情報→Pascal
だったっけ。

もう、十年以上前の話だけど。
951デフォルトの名無しさん:2009/10/15(木) 16:17:54
プログラミングに限らず、初級/中級/上級と銘打たれた世界では
その順序で「進学」するのは最悪コースだったりすることが往々にして
あるから要注意
952デフォルトの名無しさん:2009/10/15(木) 16:36:01
以下をcygwinでコンパイルして実行すると変な数字の羅列が吐き出されてしまいます。
問題点等ありましたらご指摘ください。

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

#define n 4

int main(void)
{
int k, l, l2, temp, a[n*(n-1)-1];

srand(time(NULL));

for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k;

for(l=n-1; l>0; l--) {
l2 = rand() / (RAND_MAX + 1.0) * (l + 1);
temp = a[l2];
a[l2] = a[l];
a[l] = temp;
}

for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]);

return 0;
}
953デフォルトの名無しさん:2009/10/15(木) 17:10:14
>>952
> for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k;

意図が見えないが… a[] の添え字はこれで良いの?
※ a[k] = k じゃないの?
954デフォルトの名無しさん:2009/10/15(木) 17:16:30
変な数字になるのは>>953の言うとおりだけど、シャッフルのところもおかしいぞ。
lがn-1からだと配列全体をシャッフルできない。
955デフォルトの名無しさん:2009/10/15(木) 17:25:22
あ・・・そうですね。
直してみました。
しかしこれでも一つ変な数字がうまれてしまいます・・・。
というか、何故この変な数字がうまれるかが理解できない・・・。

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

#define n 4

int main(void)
{
int k, l, l2, temp, a[n*(n-1)-1];

srand(time(NULL));

for(k=0; k<(n*(n-1))-1; k++) a[k] = k;

for(l=n*(n-1)-1; l>0; l--) {
l2 = rand() / (RAND_MAX + 1.0) * (l + 1);
temp = a[l2];
a[l2] = a[l];
a[l] = temp;
}

for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]);

return 0;
}
956デフォルトの名無しさん:2009/10/15(木) 17:35:31
int a[n*(n-1)-1] は
a[0] 〜 a[n*(n-1)-2] までしか器がない
のに
シャッフル部でいきなり a[l] → a[n*(n-1)-1] の配列外の他所の数字を操作しようとしてる
957デフォルトの名無しさん:2009/10/15(木) 17:41:10
あー、だからよそから変な数字をひっぱってきてしまっていたんですね。
分かりやすい説明で馬鹿な脳ミソでも理解できました。早速直してみます。ありがとうございました。
958デフォルトの名無しさん:2009/10/15(木) 17:47:53
なんで素直に>754の通りにしとかないんだw
959770:2009/10/15(木) 17:52:50
お気に障ったなら申し訳ございません
どなたか>>926の解答を何卒よろしくお願いいたします。
960デフォルトの名無しさん:2009/10/15(木) 18:08:00
>>959
あ?謝ってさらに要求って馬鹿か?
961デフォルトの名無しさん:2009/10/15(木) 18:08:13
>>942
そうそう、単に楽しんでいるだけで、別に宿題貼る人のことなど考えておりません。
962デフォルトの名無しさん:2009/10/15(木) 18:40:03
それ以前に770の一問目、文字コード表の対応間違ってないか
俺の勘違いかもしれないけど
963デフォルトの名無しさん:2009/10/15(木) 18:59:29
>>962
合ってたよ
964デフォルトの名無しさん:2009/10/15(木) 23:48:05
age
965デフォルトの名無しさん:2009/10/16(金) 01:05:37
>>926
>>770
http://codepad.org/bGHxD3g1
第一引数:分類結果のファイル
このファイルの書式は >>841 にあわせています。
966965:2009/10/16(金) 01:48:05
忘れておりましたがコードは Shift-JIS: JIS X 0208 です。
967965:2009/10/16(金) 06:57:43
ん、>>965 はバグってますね。しばしお待ちを。
968965:2009/10/16(金) 07:15:02
勘違いしておりました。 >>965 は今のところ問題ないようです。
969770:2009/10/16(金) 13:37:36
>>965

ありがとうございます!動作確認後また連絡させていただきます。
970770:2009/10/16(金) 13:45:51
>>965
動作確認できました!本当にありがとうございました!
971770:2009/10/16(金) 14:22:38
お手数おかけして恐縮ですが、よろしければ簡単なプログラムの流れなど、
ご解説願えませんでしょうか?
972デフォルトの名無しさん:2009/10/16(金) 14:31:03
>>971
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J
973770:2009/10/16(金) 14:40:15
>>972
了解しました。作成どうもありがとうございました。
974デフォルトの名無しさん:2009/10/16(金) 17:03:33
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
new と deleteを使ったプログラムの作成
 人数、名前、点数を入力し、横棒グラフを表示するプログラムを作りなさい。
ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。
<実行画面>
人数 > 3
1人目の名前 > A
1人目の点数 > 80
2人目の名前 > B
2人目の点数 > 55
3人目の名前 > C
3人目の点数 > 95

名( 点 )| 50 100
--------+---------+---------+
A ( 80)|****************
B ( 55)|***********
C ( 95)|*******************
平均 77|***************
以下の変数をmain関数内に定義し、new とdelete で動的にメモリを確保、解放する。
char* nameAr; // 名前の配列 名前は1文字(1バイト)とする
int* markAr; // 点数の配列
int* barAr; // 棒グラフの長さの配列
[3] 環境
 [3.1] OS:Windows XP
 [3.2] Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:2009/10/23
[5] その他の制限:特にありません
よろしくお願い致します。
975デフォルトの名無しさん:2009/10/16(金) 19:34:22
>>974
#include<iostream>
#include<iomanip>
using namespace std;
int main(void){
int num=0;
cout << "人数 > ";
cin >> num;
char *nameAr=new char[num];
int *markAr=new int[num], *barAr=new int[num];
for(int i=0;i<num;i++){
cout << i+1 << "人目の名前 > ";
cin >> nameAr[i];
cout << i+1 << "人目の点数 > ";
cin >> markAr[i];
barAr[i]=markAr[i]/5;
}
int sum=0;
cout << "名( 点 )|" << setw(10) << 50 << setw(10) << 100 << endl;
cout << setw(9) << setfill('-') << '+' << setw(10) << '+' << setw(10) << '+' << endl;
for(int i=0;i<num;i++){
cout << " " << nameAr[i] << "(" << setw(3) << setfill(' ') << markAr[i] << " )" << "|";
cout << setw(barAr[i]) << setfill('*') << "" << endl;
sum+=markAr[i];
}
int average=(sum*2+num)/num/2;
cout << "平均" << setw(4) << setfill(' ') << average << "|";
cout << setw(average/5) << setfill('*') << "" << endl;
delete [] nameAr;
delete [] markAr;
delete [] barAr;
}
976デフォルトの名無しさん:2009/10/16(金) 19:37:57
ユーグリッドの互除法のプログラムを作っているんですが(C++)
1 入力をm0、n0(m0>=n0)とする
2 n0が0ならば、m0を出力して終了
3 m0がn0で割り切れればn0を出力して終了
4 m0をn0で割ったあまりをn1として、m1=n0とする。3に戻る


m0 48 n0 36
m1 36 n0 12
n1=12



#include <iostream>
#include <cmath>
using namespace std;
int main() {

までは行きますが…

出力→cout
入力→cinです
977デフォルトの名無しさん:2009/10/16(金) 19:44:36
例の2行目、n0 12で合ってる?
978デフォルトの名無しさん:2009/10/16(金) 19:45:08
>>976
#include<iostream>
using namespace std;
int main(void){
int m=48, n=36, t, i;

for(i=0;;i++)
{
cout << "m" << i << " " << m << " n" << i << " " << n << endl;
if(!(t=m%n)) break;
m=n;
n=t;
}
cout << "n" << i << "=" << n << endl;
}
979976:2009/10/16(金) 20:15:11
ごめんなさい。例の2行目、n0 12ではなくて
n1 12です。
980976:2009/10/16(金) 20:17:24
>>978でコンパイルをかけてみたら、
6行目構文エラー : ';' が ')' の前にありません。と出ました…
981デフォルトの名無しさん:2009/10/16(金) 20:30:14
>>980
コピペもできないのかよw
982976:2009/10/16(金) 21:22:02
とりあえず、コンパイルは通りましたが、
結果には
n1=36
としか出てきません
983デフォルトの名無しさん:2009/10/16(金) 21:31:24
おい・・・まさか、本当にコピペできない人か?
978見ながら1文字ずつ打ち込んでるんじゃないだろうな
984デフォルトの名無しさん:2009/10/16(金) 21:39:51
そのコンパイルすらワーニング無視してるだろw
985デフォルトの名無しさん:2009/10/16(金) 21:48:18
なるほど。セミコロン足りないからって
for(i=0;i++;)にしちゃったのね
986デフォルトの名無しさん:2009/10/16(金) 21:52:28
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9982.txt
[3] 環境
 [3.1] OS: Windows/vista
 [3.2] コンパイラ名とバージョン: Visual C++ 2008
 [3.3] 言語: C++
[4] 期限: 2009年10月22日
[5] その他の制限:txt内に書いてあるとおりに書いてくだされば。
よろしくお願いします
987デフォルトの名無しさん:2009/10/16(金) 21:56:51
>>976はプログラミングの最初歩からやり直せ・・・
988デフォルトの名無しさん:2009/10/16(金) 21:57:25
>>986
widthとheightって画像ファイル自体の幅と高さってことでおk?
989デフォルトの名無しさん:2009/10/16(金) 22:06:41
このスレで推奨してる
ビルド環境セットってなんかないの?
990デフォルトの名無しさん:2009/10/16(金) 22:07:41
ほぉ、コロンをコロッンと忘れてしまったのか
991デフォルトの名無しさん:2009/10/16(金) 22:17:55
>>989
別になくね。
回答者は好きなやつでやるし、出題者は学校で指定されてるだろうし。
992デフォルトの名無しさん:2009/10/16(金) 22:19:49
>>989
標準的なソースがコンパイル出来ればどれでも。
中にはバージョンやらサポートしていないものを
妙に毛嫌いする人もいるしね・・・Visual C++があればそれでも
構わないが。BCCを薦めると妙に噛み付く人がいるしw
あと使用しているOSにもよるし。UNIXなら標準搭載の
コンパイラを使えば良いしぃ〜。
993デフォルトの名無しさん:2009/10/16(金) 22:35:07
[1] 授業単元:c言語
[2] 問題文
課題文1
文字を一文字入力して、文字コードが一個次の文字を表示するプログラムを作成せよ。

課題文2
文字を一文字入力して、入力文字が a-z の範囲のときのみ、次のアルファベットを表示すプログラムを作成せよ。
ただし、zを入力した場合は a を表示し、a-z以外の文字を入力した場合は入力した文字をそのまま表示すること。
例: aを入力 → b を出力 bを入力 → c を出力 zを入力 → a を出力 3を入力 → 3 を出力 $を入力 → $ を出力 Aを入力 → A を出力

課題文3
文字を一文字入力して、入力された文字が、英字の小文字であるか、英字の大文字であるか、数字であるか、それ以外の文字であるか判別して、判別結果を表示するプログラムを作成せよ。

[3] 環境
Windows,
言語:C++
[4] 期限:10/23

宜しくお願い致します。
994デフォルトの名無しさん:2009/10/16(金) 22:51:45
>>988
そうです。答えるのに遅れて申し訳ない。。
995デフォルトの名無しさん:2009/10/16(金) 22:59:40
>>976
#include <iostream>
using namespace std;
int main(){
  int m=48, n=36, t, i;

  while(m!=n)
  {
    cout << "m" << i << " " << m << " n" << i << " " << n << endl;
    if(m>n) m-=n; else n-=m;
    i++;
  }
  cout << "n" << i << "=" << n << endl;
}
996976:2009/10/16(金) 23:51:49
コピペしたら、そういう風に出てしまって
997976:2009/10/16(金) 23:57:51
今コンパイルかけたら出たんですが、様子がおかしかったんですかね。
;;って2つ入れるのってOKなんですか?
998デフォルトの名無しさん:2009/10/17(土) 00:04:50
>>997
べつにいい

>>993
あんまりよく読んでないけど

/// 1
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
c += 1;
std::cout << c << std::endl;
}
return 0;
}
999デフォルトの名無しさん:2009/10/17(土) 00:06:08
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
1000デフォルトの名無しさん:2009/10/17(土) 00:06:30
>>993

/// 2
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
if ('a' <= c && c <= 'y') c += 1;
else if ('z' == c) c = 'a';
std::cout << c << std::endl;
}
return 0;
}
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。