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

このエントリーをはてなブックマークに追加
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++の宿題片付けます 132代目
http://pc12.2ch.net/test/read.cgi/tech/1258158172/
2デフォルトの名無しさん:2009/12/11(金) 22:22:42
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10259.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2009年12月14日12:00まで]
[5] 特になし
3デフォルトの名無しさん:2009/12/11(金) 23:00:07
4デフォルトの名無しさん:2009/12/11(金) 23:04:26
5デフォルトの名無しさん:2009/12/12(土) 03:32:23
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): 5教科のテストの点数を入力し、それらの合計点を算出するようなプログラムを作成せよ。実行結果の例を以下に示す。
-----------------------------------------------
国語:?
算数:?
理科:?
社会:?
英語:?
合計点は?点です。
[3] 環
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限:佛教大学通信 数学科 でまだ5回目の授業の問題
6デフォルトの名無しさん:2009/12/12(土) 03:42:26
>5です。
これも追加でお願いします。
問題2
長さX(cm:センチメートル)を入力すると、Y(inch:インチ)に変換するプログラムを作成せよ。1(inch)は2.54(cm)とする。実行結果の例を以下に示す。
------------------------------------------------
長さ(センチメートルで入力して下さい):2.54
2.54(cm)は 1.000(inch)です。
------------------------------------------------
問題3
ある整数Xを入力した時に、それを3で割った商と余りを算出するプログラムを作成せよ。余りを算出する演算子は%であるが、%を使わないこと。実行結果の例を以下に示す。
------------------------------------------------
X:35
商:11
余り:2
------------------------------------------------
問題4
平面上の2点(x1,y1)、(x2,y2)を入力し、それら2点間の距離を算出するプログラムを作成せよ。Aの平方根はsqrt(A)という数学関数で算出される(Aは引数でdouble型)。
数学関数を使用する場合、<math.h>というファイルから情報を得なければならないので、#include<stdio.h>の
下の行に#include<math.h>という命令文を付け加えなければならない(2つのinclude文)。実行結果の例を以下に示す。
------------------------------------------------
x1:0
y1:0
x2:1
y2:1
この2点間の距離は1.414214です。
------------------------------------------------
問題5
英字アルファベット大文字を入力すると、その文字の小文字が表示されるようなプログラムを作成せよ。実行結果の例を以下に示す。
------------------------------------------------
アルファベットの大文字を入力して下さい:A
小文字はaです。
------------------------------------------------
7デフォルトの名無しさん:2009/12/12(土) 04:25:45
>5はここまでわかったのですがところどころ分からないので補足お願いします。

#include<stdio.h>
main()
{
int kokugo;
int sansuu;
int rika;
int syakai;
int eigo;
int goukei = 0;

printf("国語;");
scanf("%d",&kokugo);
printf("算数;");
scanf("%d",&sansuu);
printf("理科;");
scanf("%d",&rika);
printf("社会;");
scanf("%d",&syakai);
printf("英語;");
scanf("%d",&eigo);

goukei = ;
goukei =
goukei =
goukei =
goukei =

printf("合計点は%d点です。"goukei);

}
8デフォルトの名無しさん:2009/12/12(土) 05:23:23
>>7
#include<stdio.h>

int main(void)
{
int kokugo;
int sansuu;
int rika;
int syakai;
int eigo;
int goukei = 0;

printf("国語 : ");
scanf("%d", &kokugo);
printf("算数 : ");
scanf("%d", &sansuu);
printf("理科 : ");
scanf("%d", &rika);
printf("社会 : ");
scanf("%d", &syakai);
printf("英語 : ");
scanf("%d", &eigo);

goukei = kokugo + sansuu + rika + syakai + eigo;

printf("合計点は%d点です。\n", goukei);

return 0;
}
9デフォルトの名無しさん:2009/12/12(土) 05:29:01
問題1
http://codepad.org/o0gp1oW3

例の書き方なら
http://codepad.org/ZQpjDWLX

問題2
http://codepad.org/ZU5Bebsk

問題3
http://codepad.org/fDtavLm7

問題4
http://codepad.org/ebAqvGsx

問題5
http://codepad.org/glJeBWhN

出来るだけ実行結果と同じ表示するようにした。
気にくわないところがあったら摘便書き換えてくだちい。

10デフォルトの名無しさん:2009/12/12(土) 10:58:17
[1]単元 初等C言語
[2]問題 コンソールから、年月日時分秒に対応する整数をそれぞれ個別に不正入力時には
再入力を促しながら読み込み、それをyyyymmddhhmmss(準グレゴリオ暦)形式の時刻表
現と解釈する。この処理を2回行い2つの時刻表現を取得する。それぞれが正しいフォー
マットかどうかを調べ、共に正しい場合は、日付が新しいものの順に
yyyy年mm月dd日hh時mm分ss秒の書式で出力)しその時刻差を秒単位、分単位、時間単
位、日単位で出力するプログラム(小数点一位以下四捨五入)
但し1900年1月1日0時0分0秒以前の時刻は与えられないとして良い。
また9999年12月31日23時59分59秒以後の時刻も与えられないとする。
うるう年は400の倍数か100の倍数でない4の倍数な年であるとし、2月の末日
にうるう日が付与されるものとする。実際の暦体系では不定期に付与されるうるう秒
は考慮しなくて良いものとする正しい日付でない場合はその旨出力し処理を中止する
[3] OS:Wndows 2000 VMWare上で動作。ホストOSはWindows Vista
 処理系:LSI-C試食版 (16ビットコンパイラ)
言語:C
[4] 期限 再来週月曜日迄
[5] 制約 32ビット以上の整数型が存在しない処理系を前提。float doubleを利用しては
ならない。scanf関数gets関数getc fgetcを使用してはならない。多倍長整数計算ライブラリを
使用する場合はそのソースコードを取り込むこと。コンパイル済みのものとリンクする方法では
使用出来ない
11デフォルトの名無しさん:2009/12/12(土) 12:20:28
>>http://pc12.2ch.net/test/read.cgi/tech/1258158172/992
初心者かどうかにかかわりなく、バッファーオーバーランの可能性を秘めている gets() は薦められない。
仕様から危険性をよみとるのも、センスの一つ。
1211:2009/12/12(土) 12:21:40
失礼、http://pc12.2ch.net/test/read.cgi/tech/1258158172/995 へのコメントでした。
13デフォルトの名無しさん:2009/12/12(土) 12:24:39
>>11-12
しつこい
そんな危険な関数ならさっさと標準から削除されてるはずだろ
C99になっても残ってるのはこれで十分な場合もあるからだ
14デフォルトの名無しさん:2009/12/12(土) 12:50:55
>>13
残っているからといって使っていいことにはならないでしょうに。
http://pc12.2ch.net/test/read.cgi/tech/1258158172/710
やっとこさ、できました。いい勉強になりました。
http://codepad.org/sm5M5wCP
50MB ごとに内部ソート、あとはマージソート1段です。1GB のデータもソートできます。
16デフォルトの名無しさん:2009/12/12(土) 12:58:22
>>13
過去のソースを使いたいときのために残ってるだけでしょ。
17デフォルトの名無しさん:2009/12/12(土) 13:08:29
>>14>>16
だからしつこい
お前らがいくら詭弁を弄したところで俺の意見は1ミリたりとも動かない
以上
文句有るなら俺より先にソース書け
18デフォルトの名無しさん:2009/12/12(土) 13:12:10
>>17
えー、たとえば >>15 で fgets(), realloc() で十分に処理できる例を示したつもりなんですけれどもね。
19デフォルトの名無しさん:2009/12/12(土) 13:12:50
>>17
gets はC言語の標準Cライブラリにおける、標準入出力ヘッダー(<stdio.h>)で宣言されている標準入力から1行分の文字列を取り出す入力関数である。
この関数はバッファオーバーランを防ぐことが出来ないという致命的な脆弱性を持っており、Linux Programmer's Manual では「絶対に使用してはならない」とされている関数である[1]。
byWiki:http://ja.wikipedia.org/wiki/Gets
20デフォルトの名無しさん:2009/12/12(土) 13:14:02
いちいち噛み付くから伸びてるだけだろ。
もう無視っとけよ。
21デフォルトの名無しさん:2009/12/12(土) 13:24:00
cstring string string.h string.hpp cstring.h の違いを述べよ
22デフォルトの名無しさん:2009/12/12(土) 13:24:23
>>21
ファイル名が異なります!
23デフォルトの名無しさん:2009/12/12(土) 13:25:05
>>21
ファイルサイズが違う
24デフォルトの名無しさん:2009/12/12(土) 13:26:11
>>21
それ宿題?ならちゃんとテンプレどおりに
25デフォルトの名無しさん:2009/12/12(土) 13:26:22
>>20
だっておもしろいじゃないですか。
26デフォルトの名無しさん:2009/12/12(土) 13:27:12
ただのC言語だと
int*********** a;
a=(int*)12345678;

みたいなのが可能だったがC++じゃできないんだな。不便だな。
27デフォルトの名無しさん:2009/12/12(土) 13:31:34
>26
お前が悪い
28デフォルトの名無しさん:2009/12/12(土) 13:36:30
>>26
初めて見た
何それ
どう処理されてんの?
29デフォルトの名無しさん:2009/12/12(土) 13:44:40
>>28
またまたご冗談を(AA
30デフォルトの名無しさん:2009/12/12(土) 14:43:52
http://pc12.2ch.net/test/read.cgi/tech/1258158172/975
表1、表2のリンク先がたどれません。
31 ◆FKHan0pzBo :2009/12/12(土) 16:32:59
E-mail feeld に宛先書いてみろ >>30
32デフォルトの名無しさん:2009/12/12(土) 17:59:36
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク):

次のA・Bの行列をA×Bの計算をして、その結果を表示するプログラムを作成しなさい。

A=[5 3] B=[7 1 5 4]
  [3 8]     [1 9 2 8]
  [1 6]
  [9 1]

解の表示) [38 32 31 44]
      [29 75 31 76]
      [13 55 17 52]
      [64 18 47 44]

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語:C
[4] 期限: 12月15日

どなたかよろしくお願いします。
33 ◆FKHan0pzBo :2009/12/12(土) 18:01:30
34デフォルトの名無しさん:2009/12/12(土) 18:01:59
数学わかんないお・・・・
35デフォルトの名無しさん:2009/12/12(土) 18:04:05
行列計算のプログラミングはテンプレ化してもいい気がしてきた。
何度この手の問題を見てきたことやら。
36デフォルトの名無しさん:2009/12/12(土) 18:07:53
>>32

#include <stdio.h>

int main(void)
{
int a[4][2] = {{5,3},{3,8},{1,6},{9,1}}, b[2][4] = {{7,1,5,4},{1,9,2,8}}, c[4][4];
int i, j, k;

for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
c[i][j] = 0;
for(k=0; k<2; k++) c[i][j] += a[i][k] * b[k][j];
}}

for(i=0; i<4; i++) {
for(j=0; j<4; j++) printf("%d ", c[i][j]);
putchar('\n');
}

return 0;
}

37デフォルトの名無しさん:2009/12/12(土) 19:01:04
>>36さん
ありがとうございます。
38デフォルトの名無しさん:2009/12/12(土) 19:47:56
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10261.txt
[3] 環境
 [3.1] OS:Windows/vista
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語: C++
[4] 期限:2009年12月17日
[5] その他の制限: 特にありません。

よろしくお願いします
39デフォルトの名無しさん:2009/12/12(土) 20:12:37
>>18
あーはいはい
gets()でも十分でしたねその例では
>>19
Linuxなんか知った事か
40デフォルトの名無しさん:2009/12/12(土) 20:15:12
Cの規格票にgets()は使ってはいけないと書いてあったら守ってやるよ
書いてないだろうがアホどもめ
41デフォルトの名無しさん:2009/12/12(土) 20:18:35
まぁたかだか宿題レベルのプログラムなら、エラーチェックとかバッファオーバーとかきにする必要ないと思うけどね
42デフォルトの名無しさん:2009/12/12(土) 20:19:38
>>41
君もそう思うだろ?宿題ごときに最適化だのループに分岐を入れるなだの
うるさい馬鹿がいるんだよ

本当に困っている
43デフォルトの名無しさん:2009/12/12(土) 20:20:58
最適化やgets()の話はこっちに行ってやれ

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

このスレは宿題を解くスレで動けばそれでいいんだ
44デフォルトの名無しさん:2009/12/12(土) 20:24:15
いちいち顔真っ赤にして反応するから、面白がって突っ込まれるんじゃねーの?
スルーしとけばいいんだよ。
45デフォルトの名無しさん:2009/12/12(土) 20:30:12
世の中には宿題どころか初心者日曜プログラマが作ったプログラマにさえ
ちゃんとした仕事でやるような厳密なテクニックを押し付けるバカグラマがいるもんだ。
46デフォルトの名無しさん:2009/12/12(土) 20:31:25
>>40
へえ?C の規格ひょーにライブラリ関数の仕様のことがかいてあるんだ?
47デフォルトの名無しさん:2009/12/12(土) 20:31:39
プログラマを作れる初心者日曜プログラマすげーw
48デフォルトの名無しさん:2009/12/12(土) 20:36:04
>>44
そうだな
いちいち馬鹿どもを相手にしていたら相手と同じレベルに堕ちる
ここからは一切スルーする事にしよう
49デフォルトの名無しさん:2009/12/12(土) 20:37:32
>>41
それはまあそうですね。でもね、gets() はね。教育的にも避けたほうがいいと昔から言われているんですよ。
それに単に事実を指摘されただけで、顔を真っ赤にして反論するのは、見てて面白い。
50デフォルトの名無しさん:2009/12/12(土) 20:37:39
ttp://pc12.2ch.net/test/read.cgi/tech/1258158172/821,827,829

こいつらみたいな問題理解できてないくせに他人の答えに口出してくるやつは、
ほんとうぜーよなw
51デフォルトの名無しさん:2009/12/12(土) 20:41:05
>顔を真っ赤にして反論

ネットの向こうの人の顔色まで見えるエスパーがいるのか?
52デフォルトの名無しさん:2009/12/12(土) 20:43:29
ネットでの常套句に一々突っ込んで揚げ足取れたと思うあたりが、
顔真っ赤なんだなと思わせるw
53デフォルトの名無しさん:2009/12/12(土) 20:48:07
宿題だからって理由でgets()使ったり糞効率悪いコード書くのは自由だけど、
それをここで批判するのも自由なんだよ。

それがスルーできないなら、最初からチラシの裏にでも書いたほうがいいかもな。
54デフォルトの名無しさん:2009/12/12(土) 20:49:23
>>42
pow(-1.0, n) はちょっとひどいな、と思いましたが。
(n % 2) ? -1.0 : 1.0 で十分かと
55デフォルトの名無しさん:2009/12/12(土) 20:54:25
>>2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10262.c

ちょいとずるをしたけど。
テストデータとかは適当に修正して下さい。
56デフォルトの名無しさん:2009/12/12(土) 21:01:26
>>53
じゃあその批判を批判するのも自由ですね。
57デフォルトの名無しさん:2009/12/12(土) 21:03:15
プログラム的に理由があるならね。
58デフォルトの名無しさん:2009/12/12(土) 21:38:46
概してここの回答者の回答コードのモジュール結合度が弱過ぎです。
自分の理解の記憶を確認する為に記述したコードをそのままコンパイラに
テストさせただけのを回答として貼付けてるケースが見受けられます。
あまり美しい行為とは言えないと思います。
59デフォルトの名無しさん:2009/12/12(土) 22:02:51
>>53
そんなに自由ではない
ここは質問と回答者が書くスレ
批判するスレではない
特に自分ではソースコードもあげずに批判ばかり
してる奴ははっきり言って必要ない
迷惑
60デフォルトの名無しさん:2009/12/12(土) 22:13:30
ファイルからの読み込みとかを練習してます


fgets(str,20,fp)

ネット上から引用しただけなので、この引数の意味がよく解りません
この場合の
strは、ここに一時的に格納
20は、読み込む文字数or20ビット
fpはわからん

これで合ってますか?
よく解らないので正しい知識を、どうか教えてください
61デフォルトの名無しさん:2009/12/12(土) 22:16:40
>>58
モジュール結合度は弱いほうがいいのでは?
それはそうと、ここのコードはソースファイルは単数、それも100行以内の書き捨てだからなあ。
62C言語:2009/12/12(土) 22:23:07
Visual Studio 2008 のコマンドプロンプトを使っています。

単純に、数字abだけを入力して計算結果を表示する場合は、

scanf("%d %d",&a,&b);
c=a+b;
printf("答えは%dです。\n",c);

と書けますが、式を読み込むにはどうすればいいのでしょうか?
例えば、「1+2」のような計算式を読み込んで計算結果を表示したいのです。
結果は答えだけでなく、「1+2=3」のように計算式も含めて表示したいです。
63デフォルトの名無しさん:2009/12/12(土) 22:23:36
>>60
残念ながら、ここは宿題スレなので。
こちらにどうぞ。
http://pc12.2ch.net/test/read.cgi/tech/1260020924/

http://codepad.org/mEo2Akfm
64デフォルトの名無しさん:2009/12/12(土) 22:26:54
>>62
かなりの難問です。過去問ですがこれぐらいの記述量になります。
http://codepad.org/KYXq1lkg
65C言語:2009/12/12(土) 22:30:16
ありがとうございます。
なんだか、ずいぶん面倒くさそうですね・・・
6663:2009/12/12(土) 22:47:31
間違えておりました。以下に訂正いたします。
http://codepad.org/vatmcleX
67デフォルトの名無しさん:2009/12/12(土) 23:19:50
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10263.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 来週の月曜の午後5時までに
[5]関数の作り方というところまで習いました。
どなたかお願いします
685です:2009/12/13(日) 02:07:59
>9さん 回答ありがとうございます。
printfやscanfの基礎的関数のやり方しか習っていないので制御構造や標準的な関数
を使わず解いて頂いてもよろしいでしょうか。
69デフォルトの名無しさん:2009/12/13(日) 02:50:25
>>68
具体的に何番が厳しい?
705です:2009/12/13(日) 03:23:11
>>69
3番の問題です。
71デフォルトの名無しさん:2009/12/13(日) 03:42:36
>>70
9ではないけど、while{...} を
s = x / 3;
x = x - s * 3;
とするのはOK?
72デフォルトの名無しさん:2009/12/13(日) 03:49:38
for(s=0; x>=3; s++) x = x - 3; ならどうだ?
73デフォルトの名無しさん:2009/12/13(日) 03:57:58
>>62
libtcc.h のようなライブラリを使った例ならありますね。
http://alohakun.blog7.fc2.com/blog-entry-467.html
74デフォルトの名無しさん:2009/12/13(日) 04:39:38
>>67
main関数は適当につくってくれ
http://codepad.org/K2ZiH1RT
75 ◆FKHan0pzBo :2009/12/13(日) 12:09:59
>>038 そんな宿題が有るか。学校名を言ってみろ。Cで書いた。
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語: C++
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10264.c
76 ◆FKHan0pzBo :2009/12/13(日) 19:58:14
775です:2009/12/13(日) 22:26:43
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): 必修課題1
2つの整数XおよびYを入力し、大きい数から小さい数をひいた差を算出するプログラムを作成せよ。実行結果の例を以下に示す。
X:32
Y:48
差は16です。
必修課題2
ある整数Xを入力した時に、ゼロあるいは、プラス、マイナスを判別して表示させるプログラムを作成せよ。プラスの場合の実行結果の例を以下に示す。
X:5
プラスです。
発展課題1
2つの整数XおよびYを入力し、大きい数を小さい数で除算するプログラムを作成せよ。実行結果の例を以下に示す。
X:45
Y:7
答えは6.428571です。
ヒント:簡単に考えて安易に作成すると大変なことになります。割り算である
ことを忘れないで下さい。例えば、「〜と等しくない」を意味する演算子は「!=」です。
発展課題2
2次方程式ax^2+bx+c=0の3つの係数を入力すると実数解が算出されるようなプログラムを作成せよ。実行結果の例を以下に示す。
2次方程式の係数を入力して下さい。
a:1
b:5
c:6
解は-2.00と-3.00です。
ヒント:判別式はD=b^2-4acであり、解の公式は(-b±√D)/2aである。
条件式を細かく考えてみよう。係数a、bが0の時はどうか?の分岐を考えてから、→判別式が0以上、0以下、0の時という分岐処理をする。
[3] 環境
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限: 選択構造(分岐処理)を使って解いてみてください
7867:2009/12/13(日) 22:57:35
>>74>>76
ありがとうございます。
助かりました。
79デフォルトの名無しさん:2009/12/13(日) 23:27:25
ヒマを持て余してる自称プログラマがプログラミングするスレ?
80デフォルトの名無しさん:2009/12/13(日) 23:32:11
>>10 の日数計算を暇だったらどぞ。
81デフォルトの名無しさん:2009/12/13(日) 23:36:25
LSI-C試食版 って2000とかVista上で動くの白なった
82デフォルトの名無しさん:2009/12/13(日) 23:39:56
>>10
日本語が難しすぎる
83デフォルトの名無しさん:2009/12/14(月) 00:54:08
[1] 授業単元: Cプログラム応用A
[2] 問題文(含コード&リンク):
文字列操作の標準ライブラリ関数を使用し、指定したファイルの中で、辞書列で最初に出てくる単語と最後に出てくる単語、さらに最も長い単語をを見つけ表示せよ。
ただし、同じ長さの単語がある場合最初に見つけた一つでいい。

ここでの単語とは、スペースや改行、タブで区切られた文字列のことである。
ただし、単語の長さは100文字以内と考えていい。


[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:12月14日17時
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
8483:2009/12/14(月) 00:55:57
その他の制限は特にありません。

よろしくお願いしますm(__)m
85デフォルトの名無しさん:2009/12/14(月) 05:02:10
文字はアルファベットに限定していいの?
86デフォルトの名無しさん:2009/12/14(月) 08:55:15
>>85

アルファベットに限定してお願いしますm(__)m
87デフォルトの名無しさん:2009/12/14(月) 09:19:39
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
txtファイルからデータを読み込み、人口順に並べ替えて、都道府県名、人口、面積を1行に表示せよ。
表示は全部で5行になる。

txtファイルの内容
Gunma
2016027
6363.16
Saitama
7104222
3797.25
Chiba
6108809
5156.60
Tokyo
12790202
2187.58
Kanagawa
8899545
2415.84

[3] 環境
 [3.1] OS: Linux or Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 今週の水曜日までに
[5]どなたかご存じの方お願いします。
8887:2009/12/14(月) 10:00:02
OSはwindowsでもOKです。
言語はC/C++どちらでもOKです。
89デフォルトの名無しさん:2009/12/14(月) 10:14:01
9087:2009/12/14(月) 11:04:59
>>89さん
すみません、説明不足でした。
まだ授業でC++言語の詳しい事はやってないので、
以下のソースを参考にして作成していただきたいのですが…orz


#include 省略

main() {
char n[5][100]; // 都道府県名(長さは最大で99文字+'\0')
int p[5]; // 人口
double a[5]; // 面積
ifstream pref; // ファイルから読み込むためのストリーム

pref.open("pref.txt"); // 指定したファイルを開く
pref.width(100); // 次に読む文字列の最大の長さを設定する
for(int z=0;z<5;z++){
pref >> n[z]; // 空白・改行が出てくるまで文字を連続して配列に読み込む
pref >> p[z]; // 次の行から整数を読む
pref >> a[z]; // その次の行から浮動小数点数を読む


//以下に人口順に並べ替えて、都道府県名、人口、面積を1行に表示するプログラムを書く。

申し訳ありませんがよろしくお願いしますorz
91デフォルトの名無しさん:2009/12/14(月) 11:29:32
92デフォルトの名無しさん:2009/12/14(月) 11:33:33
fixed << setprecision(0)

これは不要か
93デフォルトの名無しさん:2009/12/14(月) 11:34:48
最後から5行を次のように書き換えて下さい

// 都道府県名等の表示
for (int i = 0; i < N; i++)
cout << "都道府県名 = " << n[i]
<< ", 人口(人) = " << p[i]
<< ", 面積(km^2) = " << fixed << setprecision(2) << a[i] << endl;
94デフォルトの名無しさん:2009/12/14(月) 12:18:48
[1] 授業単元: 通信プロトコル
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10268.txt

[3] 環境
 [3.1] OS: Linux(Ubuntu 9.04)
 [3.2] コンパイラ名とバージョン: gcc 4.4
 [3.3] 言語: C
[4] 期限: [2009年12月17日11:00まで]
[5] 特になし
95デフォルトの名無しさん:2009/12/14(月) 12:43:36
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。
途中経過も表示してください。
例:1^2 + 2^2 =
1^2 + 2^2 + 3^2 =
....
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年12月15日06:00まで]
[5] その他の制限: 特になし、最近Switch 文をやりました。
96デフォルトの名無しさん:2009/12/14(月) 13:06:50
#include <stdio.h>

int main(void)
{
int i, j, sum;

for(i=1,sum=0; i<=10; i++) {
sum += i * i;
printf("1^2");
for(j=2; j<=i; j++) printf("+%d^2", j);
printf("=%d\n", sum);
}

return 0;
}
9787:2009/12/14(月) 13:27:07
>>89さん
>>91さん
>>92さん
>>93さん

どうもありがとうございました!
助かりました♪
98デフォルトの名無しさん:2009/12/14(月) 13:36:01
>>95
C++で、1^2=2は抜かすなら。
#include <iostream>
using namespace std;

int main()
{
for(int i=2,sum=1; i<=10; i++) {
sum += i * i;
cout << "1^2";
for(int j=2; j<=i; j++) cout << "+" << j << "^2";
cout << "=" << sum << endl;
}
}
99デフォルトの名無しさん:2009/12/14(月) 13:39:42
>>98
せんせ 1^2 は 1 でっせ (コードは sum=1 で正しい)
100デフォルトの名無しさん:2009/12/14(月) 13:41:54
タイプミスだが、かなり恥ずかしいなw
101デフォルトの名無しさん:2009/12/14(月) 13:57:06
http://codepad.org/EfwkdvdU
C/C++では「^」は排他的論理和になるので、 1 ^ 2 = 3 になります。
102デフォルトの名無しさん:2009/12/14(月) 14:01:00
つまんね
103デフォルトの名無しさん:2009/12/14(月) 14:01:04
C初心者の起こしがちなミスだが、こっちもかなり恥ずかしいなw
(直前までゴムの使い方知らなかったとか)
104デフォルトの名無しさん:2009/12/14(月) 14:40:10
[1] 授業単元:Cプログラミング演習
[2] 問題文:多項式f(x)=Cn×Iのn乗+Cn-1×Iの(n-1)乗+...+C1×I
+C0×Iの0乗 の次数nと多項式の係数Cn,Cn-1,..,C1,C0を順に読み込み、
変数I=0.0、0.1、0.2,・・、0.9、1.0に対する多項式f(x)の値を計算して見やすい形に
出力するCプログラム
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:Cです
[4] 期限: [2009年12月15日12:00まで]
[5] その他の制限:配列の問題です。 for構文を必ず使い、
f(x)=((...((CnI+Cn-1)I+Cn-2)...)I+C1)I+C0
と単純な効率の良いプログラム計算するようなもの。つまり
 fx←Cn
 fx←fx*I+Cn-1  というような代入を参考にして考えてみる

過去ログ検索で以下がひっかかったのですが、回答の707-708はレベルが高すぎて何がなにやら…
http://chomework.sakura.ne.jp/log1/1164079451_08.html
105デフォルトの名無しさん:2009/12/14(月) 14:49:03
ホーナー法か
106デフォルトの名無しさん:2009/12/14(月) 14:57:26
>>104
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i, j, n;
double *c;

scanf("%d", &n);

c = malloc((n + 1) * sizeof(double));

for(i=0; i<=n; i++) scanf("%lf", c + i);

for(i=0; i<=10; i++) {
double x = i / 10.0, ans = 0;
for(j=n; j>=0; j--) ans = ans * x + c[j];
printf("x = %f f(x) = %f\n", x, ans);
}

free(c);

return 0;
}
107デフォルトの名無しさん:2009/12/14(月) 15:00:17
読み込む順序から考えれば for(j=0; j<=n; j++) かな
108104:2009/12/14(月) 16:07:24
>>106-107
素早い回答ありがとうございます!
大変助かりました
10983:2009/12/14(月) 17:15:32
明日朝8時まで期限を延長させてください。


どなたかご回答頂けませんでしょうかm(__)m
110デフォルトの名無しさん:2009/12/14(月) 17:30:27
ソースコードハイライトするアップローダーって、このスレ的に需要ある・・・?
111デフォルトの名無しさん:2009/12/14(月) 18:28:36
>>110
http://codepad.org/
ただし、回答側では、

コンパイルミスをなくす
結果を表示する

質問側では

コンパイルできないときのエラーメッセージをあわせて表示する

のに使っています。
112デフォルトの名無しさん:2009/12/14(月) 18:37:05
授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):
 ポーカーゲーム(の一部)をC言語にて作成する。

 ポーカーゲーム(の一部)は以下の条件を満足させてください。

   カードのシャッフルを行い、プレイヤ、ディーラにそれぞれ5枚ずつカードを配る。
   プレイヤは配られたカードの中から交換するものを選択できるようにする。
   ディーラ側の選択ルーチンはダミーの関数(たとえば全部交換、交換しない等)を用意すれば十分です。
   プレイヤ、ディーラそれぞれの役を判定して勝敗を表示する。

 表示、カードの選択は標準入出力を利用してください。
[3] 環境
 [3.1] OS: windows7
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: c
[4] 期限: 今週の水曜まで
[5] その他の制限: トランプはジョーカー抜きの52枚です。randを使います。お願いします。
113デフォルトの名無しさん:2009/12/14(月) 18:42:58
>>109
ほいきた。24時まで待ってください。
114 ◆FKHan0pzBo :2009/12/14(月) 18:48:45
>>077
必修課題1 必修課題2 発展課題1 発展課題2
http://codepad.org/KG6A3xlQ
115デフォルトの名無しさん:2009/12/14(月) 20:08:54
>>94
こんな感じでどうでしょうか?
http://codepad.org/aXLhrl2o

自分で各ファイルに分割して下さい。

サーバのポート番号は決め打ちです。
サーバ指定は,IPアドレスで行います。
問題あれば,修正して下さい,もしくは文句を言って下さい。
116デフォルトの名無しさん:2009/12/14(月) 20:13:09
>>111
こんなサイトがあったのか
ありがとおおお
117デフォルトの名無しさん:2009/12/14(月) 20:18:38
>>115おつ!
ソケットなんざ、もう10年は触ってねえ。
118113:2009/12/14(月) 20:30:05
119デフォルトの名無しさん:2009/12/14(月) 20:33:27
プログラム一覧みたいなのあるサイト無いですか?
120デフォルトの名無しさん:2009/12/14(月) 21:06:15
いちいちmallocしなおすってなんの冗談だよw
121デフォルトの名無しさん:2009/12/14(月) 21:09:24
>>120
どんな長さの行/単語に対してもちゃんと動くようにするには、いちいち malloc()/realloc() しなおすしかないでしょう?
122デフォルトの名無しさん:2009/12/14(月) 21:17:28
未定義動作w
123デフォルトの名無しさん:2009/12/14(月) 21:18:33
>>122
え?なにが?
124デフォルトの名無しさん:2009/12/14(月) 21:20:14
>>83
#include<stdio.h>
#include<string.h>

#define WORD_LEN_MAX 100
#define BUF_SIZE (WORD_LEN_MAX+1)
#define FMTDUM(LEN) "%" # LEN "s"
#define FMT(LEN) FMTDUM(LEN)

int main(void){
char first[BUF_SIZE]="", last[BUF_SIZE]="", longest[BUF_SIZE]="";
char buf[BUF_SIZE];
FILE *fp;

fp=fopen("hogehoge.txt", "r");
if(fp==NULL) return 1;
while(fscanf(fp, FMT(WORD_LEN_MAX), buf)==1){
if(first[0]=='\0'){
strcpy(first, buf);
strcpy(last, buf);
strcpy(longest, buf);
}
if(strcmp(first, buf)>0) strcpy(first, buf);
if(strcmp(last, buf)<0) strcpy(last, buf);
if(strlen(longest)<strlen(buf)) strcpy(longest, buf);
}
puts(first);
puts(last);
puts(longest);
fclose(fp);
return 0;
}
125デフォルトの名無しさん:2009/12/14(月) 21:21:50
[1] 計算物理
[2]
@原点に静止していた電子を考える。ここに直線偏光した電磁波が入射してきたとき、電
子の運動の様子を計算せよ。円偏光のときはどうか。磁場の力は無視してよい。

A地球をめぐる衛星は、大気の摩擦を受けて少しづつ落下する。この様子を計算せよ。値
は実際の値を入れなくともよいが、摩擦を受けつつ地球の重力を受けてまわる様子を正し
く微分方程式であらわし、それを解け。

B有限の広さの薄い電極をもつ平行平板コンデンサーの周りの電場(電位)を計算し、可
視化する。平行平板コンデンサーの内部では一様な電場ができることはよく知られている。
しかし端の電場はどのようにずれているのであろうか。
(コンデンサーよりも十分大きい設置した箱型の境界を考える。その中にコンデンサーの極
板をおき、片方に電圧をかけて境界条件のように取り扱えばよい。)

[3] 環境
 [3.1]Linux
 [3.2] gcc
 [3.3] C
[4] 期限:できれば木曜の12:00まで、因みに自主課題だからできなくてもいい
[5] その他の制限:特になし
126 ◆oMEmA/.4ko :2009/12/14(月) 21:22:05
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10269.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語: C
[4] 期限: 2009/12/15, 21:00まで
[5] その他の制限:出来るだけ簡単にお願いします。
127デフォルトの名無しさん:2009/12/14(月) 21:25:54
>125
物理屋ではないから立式できない
128デフォルトの名無しさん:2009/12/14(月) 21:26:56
>>121
多めにmallocしてなるべくmalloc回数は減らすべきだってばっちゃんがいってた
129デフォルトの名無しさん:2009/12/14(月) 21:28:40
>>128
ネタにマジレス?
130デフォルトの名無しさん:2009/12/14(月) 21:29:12
>>126
>printf("[%d]を%d軸から%d軸へ移動\n",no,x,y);

printf("[%d]を%s軸から%s軸へ移動\n",no,pole[x-1],pole[y-1]);
131デフォルトの名無しさん:2009/12/14(月) 21:36:25
>>128
んー、メモリーリークに注意さえすれば、malloc() をバンバン使ったほうが見通しがいいのですが。
いや、未使用となった領域を再利用する際に長さをしらべて必要なら realloc() するっていうのは、わからないでもないですが。
132デフォルトの名無しさん:2009/12/14(月) 21:48:32
>>131
malloc使いすぎるとメモリが断片化していき、しまいにはメモリ確保に失敗して強制終了になる場合もある
133デフォルトの名無しさん:2009/12/14(月) 21:48:37
単語の最大文字数決まってるのに、mallocしてstrcpyって無駄じゃね?
134 ◆oMEmA/.4ko :2009/12/14(月) 21:50:02
>>130
素早い対応ありがとうございます。
助かりました。
135デフォルトの名無しさん:2009/12/14(月) 21:51:41
>>133
ん、それもそうですね。ただ 100 文字にとらわれたくなかっただけで、まあ、かってに問題の拡大解釈をしただけです。他意はありません。
136デフォルトの名無しさん:2009/12/14(月) 21:53:16
>>132
DOS ならいざしらず、OS レベルでページングが有効な環境でも、やはり考慮しなければならない条件でしょうか?
137デフォルトの名無しさん:2009/12/14(月) 22:26:54
>>10
想定する入力が19700101〜20380119を逸脱しているから, time.hのmktimeが使えない。
そこで、GCCでunsigned long long を使って書いた後で、
LSI-C(16bit)という条件を見つけた。
もう、しめきり過ぎてるね。
138デフォルトの名無しさん:2009/12/14(月) 22:54:08
>>137
再来週はまださ
139デフォルトの名無しさん:2009/12/14(月) 23:20:05
>>136
究極的には自分でアロケータやガーベジコレクタ書く羽目になるから、課題レベルならどうでもいい
140デフォルトの名無しさん:2009/12/14(月) 23:25:43
>>139
幸せなことに、私はそこまでやる段階には到達しなかったのですが、メモリ管理も自前でやるしかないのですね、シビアな環境では。orz
141140:2009/12/14(月) 23:28:08
いや、EMS があったか‥‥‥。
142デフォルトの名無しさん:2009/12/14(月) 23:36:29
フラグメンテーションを完全に防ぐには再配置GCを使う以外の方法はない
143デフォルトの名無しさん:2009/12/15(火) 00:24:07
[1] 授業単元: プログラミング応用
[2] 問題文(含コード&リンク):
#include<stdio.h>
int main(void){
char str[]="AbcdeFghijkLmnopqrstuv";
char *p
p=str;
while(条件){
ポインタを使って一文字ずつ表示させる。
    }
printf("\n");
    return 0;
}
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語:C
[4] 期限:2009年12月15日 10:00
[5] その他の制限: while文の中でstrは使用できません

宜しくお願いします。
144デフォルトの名無しさん:2009/12/15(火) 00:25:15
145デフォルトの名無しさん:2009/12/15(火) 00:29:48
[1] 授業単元: プログラミング応用
[2] 問題文(含コード&リンク):
#include<stdio.h>
void heikin(int x, int y, int z, double *a);
int main(void){
int kokugo,sugaku,eigo;
double av;
点数の入力
     関数の実行
printf("3科目の平均は%.1lf点です\n",av);
    return 0;
}
関数の定義
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語:C
[4] 期限:2009年12月15日 10:00

立て続けにすみません。
こちらもどうか宜しくお願いします。
146デフォルトの名無しさん:2009/12/15(火) 00:31:53
>>143
while(*p != '\0'){
printf("%c",*p++);
}
147デフォルトの名無しさん:2009/12/15(火) 00:32:27
>>143
while (*p != '\0') {
printf("%c", *(p++));
}
148デフォルトの名無しさん:2009/12/15(火) 00:43:25
どっちが正しい?
149デフォルトの名無しさん:2009/12/15(火) 00:51:53
どっちも正しい
150デフォルトの名無しさん:2009/12/15(火) 00:53:11
void heikin(int x, int y, int z, double *a);
int main(void)
{
int kokugo, sugaku, eigo;
double av;
scanf("%d %d %d", &kokugo, &sugaku, &eigo);
heikin(kokugo, sugaku, eigo, &av);
printf("3科目の平均は%.1lf点です\n", av);
return 0;
}
void heikin(int x, int y, int z, double *a)
{
*a = (x + y + z)/(double)3.0;
}
151デフォルトの名無しさん:2009/12/15(火) 00:56:26
152デフォルトの名無しさん:2009/12/15(火) 00:59:24
キャストの位置どっちが正しい?
153デフォルトの名無しさん:2009/12/15(火) 01:18:27
>150のキャストは明示的な意味しかない、むしろ無い方が好みかな
>151のキャストは必要、演算子の優先順位からして正しい
154デフォルトの名無しさん:2009/12/15(火) 01:18:29
これはキャストしているのではない
155 ◆FKHan0pzBo :2009/12/15(火) 01:21:56
156デフォルトの名無しさん:2009/12/15(火) 02:27:40
>>10
Enter>2994/11/05 18:58:98
format-error
Enter>2994/12/05 18:23:41
Enter>1900/11/15 22:13:19
2994年12月05日 18時23分41秒
1900年11月15日 22時13分19秒
秒単位:34522488622秒
分単位:575374810分
時間単位:9589580時間
日単位:399566日

こんな感じの出力結果が必要なの?(上の時間差の数字は適当)16ビット処理系だったら
ちと面倒だな
157デフォルトの名無しさん:2009/12/15(火) 02:56:27
>年月日時分秒に対応する整数をそれぞれ個別に不正入力時には再入力を促しながら読み込み
個別入力じゃねーの?

Year>2009
Month>12
Day>31
Hour>55
Error
Hour>12
Minute>35
Second>33
みたいな
158デフォルトの名無しさん:2009/12/15(火) 11:08:57
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1から500までの整数から、3の倍数を1行に10個ずつ表示するプログラムを作れ。ただし、一個の整数を表示する桁数を5桁に指定すること。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年12月17日まで]
[5] その他の制限: 特になし。
159デフォルトの名無しさん:2009/12/15(火) 11:36:52
[1] 授業単元: ものつくりの実習中に必要になりました
[2] 問題文(含コード&リンク):
全角の日本語をJISコードに変換したいです。
”あいうえお終”と入力したときに
2422
2424
2426
2428
242A
3D2A
のように返してくれるとうれしいです。
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:visual c++ 2008 Express Edition
 [3.3] 言語: C
[4] 期限: 2009/12/18
[5] その他の制限: 特になし
160デフォルトの名無しさん:2009/12/15(火) 11:41:57
>>124氏のパクリ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void free_and_dup(char **current, const char *newword) {
free(*current);
*current = strdup(newword);
}
int main() {
char buff[100 + 1], *first = 0, *last = 0, *longest = 0;
FILE *fp = fopen("hogehoge.txt", "r");
if (!fp) exit(EXIT_FAILURE);

for (; fscanf(fp, "%100s", buff) != EOF; ) {
if (!first || strcmp(buff, first) < 0) free_and_dup(&first, buff);
if (!last || strcmp(buff, last) > 0) free_and_dup(&last, buff);
if (!longest || strlen(longest) < strlen(buff)) free_and_dup(&longest, buff);
}
fclose(fp);
puts(first);puts(last);puts(longest);
return 0;
}
161デフォルトの名無しさん:2009/12/15(火) 12:30:33
>>158
#include <stdio.h>
int main() {
int i;
for (i = 1; i * 3 < 500; i++) printf("%5d%s", i * 3, i % 10 == 0 ? "\n" : "");
return 0;
}
16294:2009/12/15(火) 12:49:57
94です。
>>115さんありがとうございました。

ただ、石の数が残り1桁になると
突然増えるんですがどうしたらいいですか?
163115:2009/12/15(火) 14:05:48
>>162

ごめんなさい。buf のクリアをしてなかったから1桁になったとき
おかしくなってました。
というか石の数の初期値を5でテストしてたのが,
ばれてもうたw

修正しました。
確認してみて,まだ問題があったら,教えて下さい。

http://codepad.org/uHTKYINr
164 ◆FKHan0pzBo :2009/12/15(火) 17:33:44
165デフォルトの名無しさん:2009/12/15(火) 18:50:20
>>155
16ビット int の中におさまりますか?
166 ◆FKHan0pzBo :2009/12/15(火) 19:52:20
何も保障しません。
167デフォルトの名無しさん:2009/12/16(水) 01:05:37
>>161
あら素敵
168デフォルトの名無しさん:2009/12/16(水) 01:08:28
どうせなら int iもforの中につっこんじゃえばよかったのにインライン
169デフォルトの名無しさん:2009/12/16(水) 11:13:30
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10273.txt
[3] 環境
 [3.1] OS:Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日

よろしくお願いします。
170デフォルトの名無しさん:2009/12/16(水) 11:17:16
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10274.txt
[3] 環境
 [3.1] OS:Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日

すみませんこれもよろしくお願いします・・・
171デフォルトの名無しさん:2009/12/16(水) 11:21:56
>>169
#include <stdio.h>

int main(void)
{
char str1[256], str2[256], *p, *q;

printf("str1?");
scanf("%s", str1);
printf("str2?");
scanf("%s", str2);

for(p=str1; *p; p++);
*p++ = ' ';
for(q=str2; *p=*q; p++, q++);

printf("%s", str1);

return 0;
}
172デフォルトの名無しさん:2009/12/16(水) 11:25:52
int str_chnum(const char str[], int c)
{
int i, ret = 0;

for(i=0; str[i]; i++) if(str[i]==c) ret++;

return ret;
}
173デフォルトの名無しさん:2009/12/16(水) 11:57:06
>>169
char *scan_and_dup(const char *label) {
static char buff[256 + 1];
printf("%s", label);
scanf("%256s", buff);
return strdup(buff);
}
char *create_sepcat(const char *s1, const char *s2, const char *s3) {
int totallen = strlen(s1) + strlen(s2) + strlen(s3);
char *cs = (char *)malloc(totallen * sizeof(char));
strcpy(cs, s1);
strcat(cs, s2);
strcat(cs, s3);
return cs;
}
int main() {
char *str1 = scan_and_dup("str1?"), *str2 = scan_and_dup("str2?"), *sep = " ";
char *tmp = create_sepcat(str1, sep, str2);
free(str1);
str1 = tmp; // str1←str1&' '&str2の操作
puts(str1);
return 0;
}
174デフォルトの名無しさん:2009/12/16(水) 12:08:32
きもちわりい
175デフォルトの名無しさん:2009/12/16(水) 12:44:23
>>170
int str_chnum(const char str[], int c)
{
int i,count = 0;

for(i=0; str[i];i++){
if(str[i] == c)
count++;
}
return count;
}
17694:2009/12/16(水) 14:03:49
>>163さん、ありがとうございました!ちゃんと21から0まで行けました
177デフォルトの名無しさん:2009/12/16(水) 15:21:15
[1] 授業単元: コンピュータプログラミング
[2] 問題文(含コード&リンク)
1)f(x,y)=dy/dx=-4(x-1)y,y(0)=e^-2の一階微分方程式についてオイラーの方法で数値解を求めるプログラムを作成せよ。
2)dy/dx=f(x,y)=1-y,y(0)=0
  dy/dx=f(x,y)=y(1-y),y(0)=0.01
  dy/dx=f(x,y)=2yx,y(0)=1
の数値解をオイラー法によって求めよ。
[3] 環境
 [3.1] OS: windowsVista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2009/12/18
[5] その他の制限: 特にありません。

すいませんが、よろしくお願いします。
178デフォルトの名無しさん:2009/12/16(水) 16:25:40
>>171-173
>>175
ありがとうございました!
179デフォルトの名無しさん:2009/12/16(水) 19:59:21
[1] 授業単元:アルゴリズムの基礎
[2] 問題文:・ハッシュ関数によるデータ格納を配列を用いて実現するプログラムの作成
・入力データは自然数
・配列の要素数とハッシュ関数は任意
・重複処理はオープンアドレス法を用いる
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:17日15時まで
[5] その他の制限: 特になし

急なお願いですがよろしくお願いします。
180デフォルトの名無しさん:2009/12/16(水) 21:34:51
>>125ですが
物理屋さんはここには、おられないですか?
181デフォルトの名無しさん:2009/12/16(水) 22:07:51
>>180
必要な式とか用意してほしい
182デフォルトの名無しさん:2009/12/16(水) 22:08:08
>>180
方程式を立てるまでの議論も大事だが
このスレでは多分とてもじゃないがそ
の辺りまでは手が回らない
183デフォルトの名無しさん:2009/12/17(木) 00:21:48
>>180
物理
http://science6.2ch.net/sci/

宿題スレでも立ててろ
184デフォルトの名無しさん:2009/12/17(木) 00:25:16
>>180
各問題の物理の問題としての答えの導き出し方を書かないとダメだよ
その手順を元にプログラム化するから
物理の問題の答えまで期待するな
185デフォルトの名無しさん:2009/12/17(木) 00:45:15
>>125ですが

>>181-184
それが完璧に書けるなら自力でできそうです
場違いでした

自力で頑張ります
186デフォルトの名無しさん:2009/12/17(木) 00:58:36
>>177
xの範囲と刻み値を教えて下さい
187デフォルトの名無しさん:2009/12/17(木) 01:05:10
>177
一階微分方程式?
オイラーの方法?
オイラー法?
188デフォルトの名無しさん:2009/12/17(木) 02:23:33
>>186
一個目は0<x<2で二個目も同じです。

>>187
dy/dxが一階微分方程式。ってことです。
オイラーの方法とかオイラー法とかで問題文ごちゃごちゃに書かれてますが、
オイラー法で間違いないです。

よろしくお願いします。
189デフォルトの名無しさん:2009/12/17(木) 02:34:44
>それが完璧に書けるなら自力でできそうです
>場違いでした
C言語舐め過ぎ
方程式立てるのも難しいし、その方程式を解くアルゴリズム
を発見するのも難しい。しかしそれ使ってコンピュータに
最善の方法でそれを近似的に行わせる技術やそれを言語化
する技術も同じように難しい。それぞれ次元が違う難しさ
があるんで。
190デフォルトの名無しさん:2009/12/17(木) 02:51:05
>>188
あと刻み値
H=0.05程度でいい?
191デフォルトの名無しさん:2009/12/17(木) 03:13:23
[1] 授業単元:ゼミ演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10275.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:Cpad for Borland 2.31
 [3.3] 言語: C
[4] 期限: 明日午後12まで
[5] その他の制限:特になし

疑似プログラミングで作られてるプログラムを自分でCに戻す問題です
一応自分で考えてこうなりましたがエラーが出ます
#include <stdio.h>
int main(void){
int n,sum,i,x;
FILE *fp; /* ファイルのデータを読み込む作業 */
fp = fopen("sales.dat","r");
fscanf(fp,"%d",&n); /*教科書のread()のかわり */
sum=0;
for(i=1;i<=n;i++){
scanf("%d",sum);
sum=sum+x;
}
printf("%d",sum);
fclose(fp);
}
ファイルの読み込み方がおかしいのか構文がおかしいのかよくわかりません・・・よろしくお願いします。
192デフォルトの名無しさん:2009/12/17(木) 03:59:43
fscanf(fp, "%d%", &n);

scanf("%d", sum);
の最後の引数をよく見比べてみる。
さらに,x を使う目的は?
を考えると・・・。
193デフォルトの名無しさん:2009/12/17(木) 05:06:41
>>192
xは1日ごとの売り上げを足すために使ってるんだと思うんですが・・・これが宣言とかなしで出てきてるのが駄目なのかな
具体的にどの行が間違ってるのか指摘してもらえるとありがたいのですが
194デフォルトの名無しさん:2009/12/17(木) 07:04:04
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10277.txt
[3] 環境
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限:反復構造を使って解いてください
195デフォルトの名無しさん:2009/12/17(木) 07:46:25
>>194
必修課題1
#include <stdio.h>

int main(void)
{
int i, j;

for(i=1; i<=9; i++) {
for(j=1; j<=5; j++) printf("%d ", i * j);
puts("");
}

return 0;
}
196デフォルトの名無しさん:2009/12/17(木) 07:49:13
>>194
必修課題2
#include <stdio.h>

int main(void)
{
int i, x, y, sum = 0;

printf("第X項から:");
scanf("%d", &x);
printf("第Y項まで:");
scanf("%d", &y);

for(i=x; i<=y; i++) sum += i;

printf("初項1公差1の等差数列において、\n");
printf("第%d項から第%d項までの数列の和は%dです。\n", x, y, sum);

return 0;
}
197デフォルトの名無しさん:2009/12/17(木) 07:50:52
>>194
発展課題1
#include <stdio.h>

int main(void)
{
int i, num;

for(i=num=1; num < 10000; i++) num *= 2;

printf("%d日目に%d個の細胞数になります。\n", i, num);

return 0;
}
198デフォルトの名無しさん:2009/12/17(木) 09:29:49
[1] 授業単元:統計
[2] 問題文
正規分布表をC言語でつくってみよう。
先生が最初のちょっとを教えてくれた。
#include<stdio.h>
#include<math.h>
#include<stdilb.h>

float normal_gauss_fn(float z)
{
return(exp(z*z/(-2.0))/sqrt(2.0*3.14));
}

[3] 環境
 [3.1] OS:windowa vista
 [3.2] コンパイラ名とバージョン:bcc 32
 [3.3] 言語:C
[4] 期限:12月18日まで
[5] その他の制限:制限がよくわからないくらいの
レベルなので出来るだけ単純に

分かりにくいかもしれないですが、よろしくお願いします。
199デフォルトの名無しさん:2009/12/17(木) 11:16:45
>>177
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10279.txt

ごめん昨日寝ちまった
それと刻み値は勝手にH=0.05にしたよ
順番に4つの方程式の解を表示するけど、都合が悪かったら
4つのプログラムに分割して下さい
200デフォルトの名無しさん:2009/12/17(木) 13:30:16
>>193
最初は,fscanf() を使っているのに,2回目はなぜにscanf() なのか?
-> ファイルから読み込みたいので,fscanf(fp, ...) を使う。
1回目の fscanf() では,&n を渡しているのに,
scanf() では sum をそのまま渡している。
-> &sum を使いたい。が,
その scanf() に &sum を渡したら,今までの合計が上書きされてしまう。
-> &x を使う。

#include <stdio.h>
int main(void){
int n,sum,i,x;
FILE *fp; /* ファイルのデータを読み込む作業 */
fp = fopen("sales.dat","r");
fscanf(fp,"%d",&n); /*教科書のread()のかわり */
sum=0;
for(i=1;i<=n;i++){
fscanf(fp, "%d",&x);
sum=sum+x;
}
printf("%d",sum);
fclose(fp);

return 0;
}
201デフォルトの名無しさん:2009/12/17(木) 14:00:01
[1] 授業単元:画像処理とC言語
[2] 問題文(含コード&リンク):
メモリ上に64バイトのデータがあります。これは4x16の行列です。
char buf[16][4] = { a0, b0, c0, d0, ... , a15, b15, c15, d15 };

組込関数を用いてxmmレジスタに4分割して読込みました。中のイメージはこうです。
__m128i t0 = { a0 , b0 , c0 , d0 , ... , a3 , b3 , c3 , d3 };
__m128i t1 = { a4 , b4 , c4 , d4 , ... , a7 , b7 , c7 , d7 };
__m128i t2 = { a8 , b8 , c8 , d8 , ... , a11, b11, c11, d11 };
__m128i t3 = { a12, b12, c12, d12, ... , a15, b15, c15, d15 };

ここから16x4の転置行列を得ましょう。内容のイメージはこうです。
__m128i r0 = { a0, ... , a15 };
__m128i r1 = { b0, ... , b15 };
__m128i r2 = { c0, ... , c15 };
__m128i r3 = { d0, ... , d15 };

禁じ手
r0 = _mm_set_epi8(buf[15][0], buf[14][0], ... , buf[0][0]);
こういう遅いプログラムはダメです。xmmレジスタの操作でカタを付けましょう。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:GCC 4.4.1
 [3.3] 言語:C言語
[4] 期限:2009年12月18日 12:00:00まで
[5] その他の制限:SSE〜SSE3の組込命令を使って良い。
202デフォルトの名無しさん:2009/12/17(木) 15:38:10
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10282.zip
[3] 環境
 [3.1] OS: winXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 明日の昼まで

お願いします
203 ◆QZaw55cn4c :2009/12/17(木) 18:05:53
>>10
>>155 を下敷きに多バイト長演算を組み込んで、LSI-C でもコンパイル・実行できるようにしました。
http://codepad.org/hfx8vGX9
204デフォルトの名無しさん:2009/12/17(木) 18:41:03
>>200
ファイル読み込みたいのにscanfにしてちゃ駄目だね、なるほど
期限には間に合わなかったけど詳しい説明ありがとう、ようやくわかったよ
205177:2009/12/17(木) 19:05:04
>>199
本当にありがとうございます。助かりました。
206デフォルトの名無しさん:2009/12/17(木) 20:32:30
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10285.txt
[3] 環境
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限:
207デフォルトの名無しさん:2009/12/17(木) 21:54:42
208デフォルトの名無しさん:2009/12/17(木) 21:58:31
どっから0が出てくるんだ?
209デフォルトの名無しさん:2009/12/17(木) 22:20:26
[1] 授業単元:Cプログラミング入門
[2] 問題文(含コード&リンク):
五目並べの作成
主に終了判定関数、コンピューターによる着手の生成関数の作成
サンプルプログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10289.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年1月5日まで
[5] サンプルプログラムを書き換えていく形でお願いします
210デフォルトの名無しさん:2009/12/17(木) 23:06:03
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10290.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C言語
[4] 期限:2009/12/18(金) 23:59(減点されるが延長で12/19(日)12:00まで)
[5] その他の制限:特になし(だと思います)

期限が迫ってしまいましたが自己責任なので延長が許される土曜日の12日まで待ちます!
どうか、よろしくお願いします。
本当についさっきまで2ch規制されてましたが解除されました!
しかしまた規制されてしまったら申し訳ありません・・・。
211デフォルトの名無しさん:2009/12/17(木) 23:11:05
問題は口頭で言われたのかい
212210:2009/12/17(木) 23:13:32
授業中の演習の延長のようなもので、
黒板で課題の内容を説明されただけです。
問題の意図が伝わっていないのならすみません・・・
213デフォルトの名無しさん:2009/12/18(金) 00:39:51
>>210
リスト構造ってのは、配列じゃなくて連結リストだと解釈していいのか?
214210:2009/12/18(金) 00:44:04
はい、そうです。
215デフォルトの名無しさん:2009/12/18(金) 00:48:07
>>210
データとしては"名前","フリガナ",点数 ってのがいいかな

そうしないと例えば、今田ではイマダとコンタどっちもいるからね
216デフォルトの名無しさん:2009/12/18(金) 01:18:16
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
 1. 引数にファイル名を指定すると,そのファイルのサイズとファイルの種類(一般ファイル,デ
   ィレクトリ,パイプ等),そして最終変更時刻を表示するコマンド(fview という名称とする)を作
   成せよ.ただし,引数には,複数のファイルを指定できるようにすること.また,fstat システム
   コールを用いること.

   実行
   $ fview aaa.txt bbb.txt ccc.txt …
   ヒント
   ファイルの種類は,fstat 構造体メンバのst_mode の上位4 ビットで表わされる.

 2. 引数に指定した複数のテキストファイルの内容を結合して,一つのファイルにまとめるコマ
   ンド(catfiles という名称とする)を作成せよ.ただし,まとめた内容を格納するファイル名は,
   “concat.txt”とすること.ただし,cat コマンドをsystem 関数の内部で呼ぶような構成は認め
   ない.システムコールとしては,open,close,read,write を用いること.また,結合してまとめ
   た結果を格納するファイルが存在しない場合には,creat システムコールを用いて生成するこ
   と.

   実行
   $ catfiles aaa.txt bbb.txt ccc.txt …

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2009年12月20日09:00まで
217デフォルトの名無しさん:2009/12/18(金) 02:21:24
[1] 授業単元:自主勉
[2] 問題文(含コード&リンク):問題ではないですがif文のところがうまく反映されてないので困っています
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10291.cpp
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語:C++
[4] 期限: とくになし
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
218デフォルトの名無しさん:2009/12/18(金) 02:35:29
-0.5 <= x < 0.0

-0.5 <= x && x < 0.0

0.0 <= x <= 0.5

0.0 <= x && x <= 0.5
219デフォルトの名無しさん:2009/12/18(金) 02:38:19
>>218
ありがとうございます。できました
まとめて書くことってできないんですね。今初めて知りました
220デフォルトの名無しさん:2009/12/18(金) 02:40:09
>>210
http://codepad.org/zjmMDKzF

聞いてくれ
小粋にシェーカーソートしようとしたら上手くいかず
しかたないからバブルソートで我慢しようと思ったらそれも上手く行かず
しかたないからブルーとフォースでやったんだ
221デフォルトの名無しさん:2009/12/18(金) 02:44:01
rootがrootじゃなくなる場合があった・・・orz
修正版
http://codepad.org/Hm0lzK9F
222デフォルトの名無しさん:2009/12/18(金) 03:36:38
風呂に入ってたら気づいた
そう・・・freeの存在を
というわけで更に修正版 or2
http://codepad.org/sqApPNGz
223デフォルトの名無しさん:2009/12/18(金) 04:07:49
シビれるねぇ
224デフォルトの名無しさん:2009/12/18(金) 04:12:01
[1] 授業単元:構造体とメモリの動的確保
[2] 問題文(含コード&リンク):

#include 〈stdio.h〉

#define NAME_MAX 20 /* 文字列の最大数 */

/* 構造体の宣言 */
struct student_data{
 /* 各メンバーの宣言 */
int number; /* 学籍番号 */
char name[NAME_MAX+1]/* 氏名   */
double height; /* 身長   */
};

int main (void) /* 引数無しのmain関数 */
{
#define STUDENT_DATA_MAX 5 /* 入力する学生数 */

struct student_data input_data[STUDENT_DATA_MAX]; /* 構造体による変数宣言 */
struct student_data * data_p; /* 構造体によるポインタ変数宣言 */
int input_count+ /* カウンタ変数         */

225デフォルトの名無しさん:2009/12/18(金) 04:13:56
/* データの入力 */
for (input_count=0; input_count < STUDENT_DATA_MAX; input_count +=1)
{
/* 構造体のメンバ指定 (変数の場合)  */
printf("Student number->");
scanf("%d",&input_data[input_count].number);
printf("Name->");
scanf("%s",input_data[input_count].name);
/*またはscanf("%s",input_data[input_count].name[0]);*/
printf("Height->");
scanf("%lf",&inout_data[input_count].height);
}
/* データの出力 */
for (input_count=0,data_p = input_data;
input_count < STUDENT_DATA_MAX;
input_count +=1 , data_p ++)
{
/*構造体のメンバ指定(ポインタ変数の場合)  */
printf("%d ",data_p->number);
printf("%s ",data_p->name);
printf("%lf\n",data_p->height);
}

return 0; /* 正常終了 */
226デフォルトの名無しさん:2009/12/18(金) 04:14:43
上記を参考に、malloc関数を用いて、氏名、学籍番号、身長の入力を行い、さらに、ユーザからの入力終了指示を受けたら、全ての入力データを画面に出力する、任意の人数の処理が可能な、プログラムを、malloc.cという名前で作成せよ。
malloc.cをVisual Studioで実行して(5名以上入力)、実行結果をmalloc.c内の文末に「コメント行」として記載せよ。(コメント行を追加後も、ビルド可能か再確認)
[3] 環境
 [3.1] OS: Vista
 [3.2] コンパイラ名とバージョン: Visual studio 2005
 [3.3] 言語:C++
[4] 期限: 2009年12月18日13時00分
[5] その他の制限:特になし。
助けてください…

>>225,>>226>>224の続きです
227デフォルトの名無しさん:2009/12/18(金) 05:03:17
>>225
講義でどのあたりまでやっているかで書き方が変わると思うんだが
使用してもいいのは、malloc関数のみ?それともmalloc関数絡み(具体的にはrealloc)もいいのか?
228227:2009/12/18(金) 05:42:35
>>225
「malloc関数」を用いて と 上記を参考に との記述があるので
仕様として、最初に任意の人数を入力し、その後氏名、学籍番号、身長の入力を行うという形にした。
malloc関数しか使ってないし、コードもほとんど変更ない。

実行確認はしたけど、久しぶりにC使ったんで知識ある人いたら確認よろ
自分もfreeの存在を忘れてた組
http://codepad.org/VaVZSBqd
229デフォルトの名無しさん:2009/12/18(金) 07:14:28
>228
l41にあーっなコードが含まれている
あと変数名が長すぎる気がする、また、記述に一貫性がないfor()の書き方と複合演算子
230デフォルトの名無しさん:2009/12/18(金) 07:25:26
プログラムの終了と共に自動的に解放されるからfree()要らないような。
231デフォルトの名無しさん:2009/12/18(金) 08:25:21
>>216
1. fview
http://codepad.org/avi7DvtE
2. catfiles
http://codepad.org/dD03AUgN

言語は C++ とあり,コンパイラは gcc とあるので,
とりあえず,C で書いてみた。
一応,g++ でのコンパイルも確認してあります。
C++ 的に書くとどうなるのだろうか。。。

creat() 使わずに,O_CREAT を使ったのでだめかも?
ファイルの種類は,「など」とあったので適当に。
問題あったら教えて下さい。
232デフォルトの名無しさん:2009/12/18(金) 13:14:12
>>231
すばやい回答ありがとうございました。

Cで大丈夫だったみたいです。後で学校に行って実行してみたいと思います。
233デフォルトの名無しさん:2009/12/18(金) 13:24:39
>>228ありがとう 結局よくわからないけど提出したw

もう少しわからんところがあるから助けてほしいです

[1] 授業単元:if文とfor文
[2] 問題文(含コード&リンク):キーボードから6つの数値を入力し、
最大値を表示するプログラムを作成
• キーボードから入力する数値例:25 , 6 , 45, 18 , 57, 5
[3] 環境
 [3.1] OS: vista
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C++
[4] 期限:無期限
[5] その他の制限:
• for文を用いてキーボードから値を読み込みながら,
それまでに読み込んだ値の最大値maxと比較し,
もし大きければmaxの値を更新する
for(i=?;i<=?;?){
scanf(?????);
if( ? > max) ???????;
}

頼んでばかりで申し訳ないが…
234デフォルトの名無しさん:2009/12/18(金) 14:22:29
#include <stdio.h>

int main(void)
{
int i, n, max;

scanf("%d", &max);

for(i=0; i<5; i++) {
scanf("%d", &n);
if(n > max) max = n;
}

printf("%d", max);

return 0;
}
235デフォルトの名無しさん:2009/12/18(金) 14:27:28
[1]単元: 初等プログラミング
[2]課題:次のコードの空欄を埋めて完成させなさい。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int a[5],i;
srand(time(NULL));
for(i=0;i<5;i++) a[i]= rand() % 100;
for(i=0;i<5;i++)printf("%d: %d (昇順順位=%d)¥n",i,a[i],[空欄]);
return 0;
}

[3] OS:Windows XP IDE:Visual studio 2008 言語:C
[4] 12/25迄
[5]空欄を埋める以外、コードに手を加えてはいけない。実行させて意味が通るようにしなさい とのことです。
236デフォルトの名無しさん:2009/12/18(金) 15:24:01
>>235
(a[i]>a[0])+(a[i]>a[1])+(a[i]>a[2])+(a[i]>a[3])+(a[i]>a[4])+1
237デフォルトの名無しさん:2009/12/18(金) 16:42:01
>>235
Windowsのコンパイラには変態なものが
ある可能性があるんで(他言語移植を考慮して)修正
http://codepad.org/odnHlse1
238デフォルトの名無しさん:2009/12/18(金) 17:06:09
>>235
そこまで構文制限が強い問題には答えない(答えてはいけない)
というのが正解
239デフォルトの名無しさん:2009/12/18(金) 17:10:57
>>235
の問題は、C初心者に誤解を招きそうな類だな
これが当たり前の構文だと思い込ませかねない

240デフォルトの名無しさん:2009/12/18(金) 17:13:13
>>237
乙。すばらしい。
おれには思いつけなかったよっと。
241デフォルトの名無しさん:2009/12/18(金) 17:14:09
>>237
突っ込むところはここではないとは思うが、
\n を 10 にするのは蛇足ではないかい。
242235:2009/12/18(金) 18:06:08
>>236,237
ありがとうございました。
>>238
テスト問題(筆記式!)の正解が知りたかっただけです
243デフォルトの名無しさん:2009/12/18(金) 20:49:15
>>242
貴様は俺を怒らせた
244デフォルトの名無しさん:2009/12/18(金) 21:55:34
まあまあ
試験問題でも
宿題の一種みたいなのでるから大目にみたげよや
245デフォルトの名無しさん:2009/12/18(金) 23:27:27
絶対に許さない
246デフォルトの名無しさん:2009/12/18(金) 23:46:07
[1]単元: プログラミング
[2]課題: gets()などでなにかプログラムを書き、バッファオーバーランによる問題点がわかるようなプログラムを書け。

[3] OS:Windows XP 言語:C
[4] 来年
247デフォルトの名無しさん:2009/12/19(土) 00:10:47
>>209
そもそもサンプルプログラムの他の部分から書き換える必要があるだろ・・・
248デフォルトの名無しさん:2009/12/19(土) 00:14:37
>>246

#include <stdio.h>

int main(){
char buffer[2][10];

getc(buffer[1]);
getc(buffer[0]);

printf("buffer[0]=\"%s\"\nbuffer[1]=\"%s\"", buffer[0], buffer[1]);

return 0;
}


hogehoge.
fugafugafuga.
buffer[0]="fugafugafuga."
buffer[1]="ga."



今携帯だからテストはしてないが多分こうなるはず。
249248:2009/12/19(土) 00:16:17

printfの第一引数の最後に改行入れ忘れた
250デフォルトの名無しさん:2009/12/19(土) 00:57:43
[1] 授業単元:C言語初級 可変長引数
[2] 問題文(含コード&リンク):
下記のような関数を作れ。
 scanfをfgetsとsscanfを組み合わせた関数

 int mscanf(int num , const char*str , const char*format, ...)
 num:最大文字数 str:scanfでいうところの第一引数 format:scanfでいうところの第二引数以降
 戻り値はscanfと同じにする。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: [無期限]
[5] その他の制限: vsscanf使用可 mscanfないで一時的に使うかもしれない文字列の最大長は#defineで各自決めていい。
251p2005-ipbf210niho.hiroshima.ocn.ne.jp:2009/12/19(土) 05:47:37
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10285.txt
[3] 環境
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限: とくになし
252デフォルトの名無しさん:2009/12/19(土) 06:59:18
>>251
http://codepad.org/UX137LLy
こんなかんじかな
てきとーにやったんで、動かなくても知らない
253デフォルトの名無しさん:2009/12/19(土) 09:10:15
>>252
早速回答ありがとうございます。
ただ必修とかの題名はつけなくていいですよ。
---のなかに囲ってあるとこが表示されればおっけーです。
254デフォルトの名無しさん:2009/12/19(土) 09:13:17
>>253
煽りの才能に溢れてるなw
255デフォルトの名無しさん:2009/12/19(土) 09:16:49
任意の整数Xを入力すると、整数Xの階乗を算出されるプログラムを作成せよ。
ただし、0および負の整数を入力すると、「値が不適当です。」とメッセージが出るようにする。
階乗はn!=1×2×3・・・×nで表される。実行結果の例を以下に示す。
------------------------------------------------
整数を入力して下さい:5
5の階乗は120です。
------------------------------------------------
ヒント:if文の中にfor文やwhile文を入れ込むこともできます。
↑この問題だけうまいこといきません。
「整数を入力して下さい:?」で入力ができず、「0の階乗は5」ですが表示されます

256 ◆FKHan0pzBo :2009/12/19(土) 09:49:04
>>「整数を入力して下さい:?」で入力ができず、「0の階乗は5」ですが表示されます
#include <iostream>
int main() {
  int n, i, total=1;

  std::cout << "整数を入力して下さい:"; std::cin >> n;
  for(i=1; i<=n; i++) total *= i;
  std::cout << n << "の階乗は" << total << "です。 " << std::endl;
  return 0;
}
257デフォルトの名無しさん:2009/12/19(土) 10:02:49
>>256
回答ありがとうございます
やってみたけどやっぱりだめです。
なにがいけないんでしょう?

258 ◆FKHan0pzBo :2009/12/19(土) 10:05:11
>>1
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
259デフォルトの名無しさん:2009/12/19(土) 10:06:54
Cって明記されてるのにC++で書いといて逆ギレ?
260デフォルトの名無しさん:2009/12/19(土) 10:44:54
>>252はテストのためにコメントアウトした部分直してないんじゃね?
261デフォルトの名無しさん:2009/12/19(土) 12:14:09
>>256
文字はいれないでね(笑)
http://codepad.org/LttCf4ty
262 ◆FKHan0pzBo :2009/12/19(土) 12:43:03
>256
>文字はいれないでね(笑)
Zero clear わすれてた(笑)

int main() {
  int n=0, i, total=1;

  printf( "整数を入力して下さい:" ); scanf("%d%*c", &n);
  for(i=1; i<=n; i++) total *= i;
  printf( "%dの階乗は%dです。", n, total);
  return 0;
}
263デフォルトの名無しさん:2009/12/19(土) 14:35:31
>>247
舌足らずで申し訳ありません・・・
サンプルプログラム中の問いに答えるために、他の箇所も書き換えてもいいとのことでした
264デフォルトの名無しさん:2009/12/19(土) 15:36:26
>>209
とりあえずサンプルプログラムのエラーチェックとcheck関数は作ってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10292.txt

うまく動かなかったらすいません。。。
レポート問題2は思考ルーチンとかになってくるので
詳しくないので、すぐには作れません><
265デフォルトの名無しさん:2009/12/19(土) 16:35:47
テンプレ追加案

★質問者へ:問題の内容によっても異なりますが、最低24時間は回答は得られないと
思って締め切り期限ぎりぎりに投げるのではなく、余裕を持って投げて下さい。
質問後、回答が不要になった場合などは24時間以内に取り消して下さい。宿題データ、
問題文の24時間以内の訂正は可能ですが出来る限りしないでください。十分にチェッ
クしてから投稿して下さい。回答が得られない場合で再度請求する場合は最初に投稿
してから24時間経過してからにして下さい。

★回答者へ:出来るだけ早くとか翌日に期限が設定されているような問題には回答する必要
はありませんし、しないで下さい。質問者が取り消した場合、また質問されてから24時間
以内には回答しないようにして下さい。24時間以内に問題文の転記修正や取り消しが入る
かも知れません。24時間経過していてもスレが進んでいない場合は回答は控えて下さい。
24時間経過後回答者が再度請求した場合に初めて回答するのが理想です。
少なくとも問題と回答の公開を目的としたスレではありません。
266デフォルトの名無しさん:2009/12/19(土) 16:37:10
チラシの裏にでも書いてろw
267デフォルトの名無しさん:2009/12/19(土) 17:27:14
>>201はまだですか?
268デフォルトの名無しさん:2009/12/19(土) 18:00:10
テンプレ追加事項(その2)
★質問者の方々へ:
期限までに回答が無かった場合はあきらめて下さい。すべての質問に期限内に答えられるとは限りません
期限を再延長するのは控えて下さい。再延長する場合はテンプレに従って
再度投稿することが出来ますが、回答してもらえる確率は減ることは否めません。
★回答者の方々へ:
期限の過ぎた問題の回答は避けて下さい。
269デフォルトの名無しさん:2009/12/19(土) 19:06:34
>>264
回答ありがとうございます!

問2に関しては了解しました
270 ◆QZaw55cn4c :2009/12/19(土) 20:30:32
>>250
問題の目指すところが今ひとつわからなかったのですが、こんなものでいいですか?
http://codepad.org/RkZsKLrv

>>265
> 出来るだけ早くとか翌日に期限が設定されているような問題には回答する必要
> はありませんし、しないで下さい。
いやです。興味のある問題ならば期限や、その他テンプレの書きようにかかわらず、問題を解かせていただきます。

>質問者が取り消した場合、また質問されてから24時間以内には回答しないようにして下さい。
>24時間以内に問題文の転記修正や取り消しが入るかも知れません。
なぜ 24 時間も待たなくてはならないのですか?意味不明です。訂正が入れば、余裕があればそれにあわせてやればいいだけのこと。

>24時間経過していてもスレが進んでいない場合は回答は控えて下さい。
意味不明。

>24時間経過後回答者が再度請求した場合に初めて回答するのが理想です。
別に回答者から督促があろうが無かろうが、興味のある問題ならば喜んでとかせていただきますし、どうでもいいと思ったらスルーしますが。

>>少なくとも問題と回答の公開を目的としたスレではありません。
かってにスレの目的を決めないでください。

>>268
>期限の過ぎた問題の回答は避けて下さい。
興味のもてる問題ならば期限が過ぎても解かせていただきます。

意味不明の回答規制なのですが、最近の学校ではこういうのがはやっているのですか?中学校の生徒さんですか?
271デフォルトの名無しさん:2009/12/19(土) 20:34:10
>>270
テンプレに沿って質問して下さい
272デフォルトの名無しさん:2009/12/19(土) 20:34:16
バカの相手をするな
273デフォルトの名無しさん:2009/12/19(土) 20:42:48
>>265,268
>>270
のような「解いて下さる」方は珍重したほうがいいです。
274デフォルトの名無しさん:2009/12/19(土) 21:50:35
>>265, >>268 のような回答側規制を提案するような者が問題を解く側人だとは、到底思えないのですけれども。
275デフォルトの名無しさん:2009/12/19(土) 22:11:45
宿題を出す側人とは思わないのか?
276 ◆QZaw55cn4c :2009/12/19(土) 22:32:56
>>275
>>265,268 が宿題を出す側とは思えませんね。24時間ルールとやらは宿題を出す側にとっては不利ですから。
宿題を出す側でもなければ解く側でもない、とすれば、単なる自治中毒者でしょうね、意味もなく影響力を示したがるやっかいな連中ですね。
そんなに影響力を示したいのであれば、まず出された宿題を解くことからはじめればいいのでしょうに。
277デフォルトの名無しさん:2009/12/19(土) 22:38:25
スルーしろよコテも外せうざい
278デフォルトの名無しさん:2009/12/19(土) 22:42:40
>>275
宿題を投げる人と解く人のコラボだろ。
出す人がここにくるわきゃないw
279デフォルトの名無しさん:2009/12/19(土) 22:47:05
>>278
そうでしたか。出す人と投げる人とを混同しておりました。
宿題を出す人が妨害工作にでる可能性は、たしかにありますね。
280デフォルトの名無しさん:2009/12/19(土) 22:50:27
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10294.txt
[3] 環境
 [3.1] OS:vista (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:2009年1月6日
[5] その他の制限: とくになし
281デフォルトの名無しさん:2009/12/19(土) 22:58:29
>>280
必修1
#include <stdio.h>

int main()
{
double r;

double pi = 3.141592654;
printf("直径は?");
scanf("%lf",&r);
printf("直径5cmの円の円周は%lfcmです。\n",r*pi);
return 0;
}
282デフォルトの名無しさん:2009/12/19(土) 23:28:35
>>279
宿題を出す側は、実操作以外は本質的に小中学生向けの課題
の丸投げに迅速に回答出して人助けをしたんだと悦に行って
るよな人を苦々しく思ってるんだろけどね。
まあ幸いなことに大半は自演なんだろけど。
283デフォルトの名無しさん:2009/12/19(土) 23:37:36
>>280
必修2
#include <stdio.h>

void point(int r);

int main()
{
int r;

printf("何点ですか?:");
scanf("%d",&r);

point(r);
return 0;
}

void point(int r)
{
if(0 <= r && r < 60)
printf("不可です。\n");
else if(60 <= r && r < 70 )
printf("可です。\n");
else if(70 <= r && r <80)
printf("良です。\n");
else if(80 <= r && r <= 100)
printf("優です。\n");
else
printf("換算できません\n");

}
284デフォルトの名無しさん:2009/12/19(土) 23:49:38
>>280
必修3
#include <stdio.h>

int main()
{
double r=0, i;

for(i = 0;i < 10.0 ;i+=0.2)
r+=i;
printf("答えは%.1lfです\n",r);
}
285デフォルトの名無しさん:2009/12/19(土) 23:59:17
>>280
発展課題1
#include <stdio.h>

int hantei(int, int, int);

int main(){
int a, b, c;
printf("一つめの整数を入力して下さい:");
scanf("%d", &a);
printf("二つめの整数を入力して下さい:");
scanf("%d", &b);
printf("三つめの整数を入力して下さい:");
scanf("%d", &c);
printf("最大値は%dです\n",hantei(a,b,c));
}

int hantei(int a,int b,int c)
{
if(a - b > 0){
if(a - c > 0)
return a;
else
return c;
}
else{
if(b - c > 0)
return b;
else
return c;
}
}
286デフォルトの名無しさん:2009/12/20(日) 00:03:36
>>280
発展課題2
#include <stdio.h>

int main()
{
int i, j;
for(i = 1; i <= 9; i++){
for(j = 1; j <= 9; j++){
printf("%d ",i*j);
}
printf("\n");
}
}
287デフォルトの名無しさん:2009/12/20(日) 00:45:09
>>280
発展課題3
http://codepad.org/NZbIKUcv

すごく汚いです。ごめんなさい。
288デフォルトの名無しさん:2009/12/20(日) 01:11:49
そんなことありません。#defineとかが
ピンクサーモン色できれいに着色されてます。
289デフォルトの名無しさん:2009/12/20(日) 01:24:12
0から10を入力させといて答えが0から9ってのが笑いどころ?
290デフォルトの名無しさん:2009/12/20(日) 08:30:12
12    hit = rand() % 10;
の所、% 11 ; でしょうか。
291デフォルトの名無しさん:2009/12/20(日) 11:00:06
>>270 ありがとうございました
292 ◆FKHan0pzBo :2009/12/20(日) 11:35:29
>>280 while();にするの?汚いわ先生(涙)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void)
{
  int a, hit, miss = 0, x=0;
  srand((unsigned)time(NULL));
  hit = rand() % 11; printf("%d%c", hit, 012);

  printf("0〜10までの数を入力して下さい。"); scanf("%d", &a);
  do {
    if(hit > a)
      printf("もっと大きい数です。\n", ++miss);
    else if(hit < a)
      printf("もっと小さい数です。\n", ++miss);
    else if(hit == a)
      miss = 4;

    if(miss == 4)
      printf("大正解です。\n");
    else if(miss == 1){
      printf("あと2回挑戦することができます。\n"); scanf("%d", &a); }
    else if(miss == 2){
      printf("あと1回挑戦することができます。\n"); scanf("%d", &a); }
    else if(miss == 3)
      printf("あと0回挑戦することができます。\n残念!!不正解でした。\n");
  } while(miss < 3);
  return 0;
}
293デフォルトの名無しさん:2009/12/20(日) 11:52:04
>>280
発展課題3

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

int main(void)
{
int i, n, ans;

srand(time(NULL));

ans = rand() / (RAND_MAX + 1.0) * 11;

printf("0〜10までの数を入力して下さい。");
for(i=3; i>0; ) {
scanf("%d", &n);
if(n > ans) printf("もっと小さい数です。\n");
else if(n < ans) printf("もっと大きい数です。\n");
else return printf("大正解です。\n");
printf("あと%d回挑戦することができます。\n", --i);
}
printf("残念!!不正解でした。\n");

return 0;
}
294デフォルトの名無しさん:2009/12/20(日) 13:08:55
>>280
発展課題2

#include <stdio.h>

int main(){
int i,j;
for(i=1;i<=9;i++) {
for(j=1;j<=9;j++) {
printf("%d%c",i*j,j==9?'\n':' ');
}
}
return 0;
}
295 ◆FKHan0pzBo :2009/12/20(日) 14:02:45
>>206 3+6+9+・+99の計算を行うプログラムを作成せよ。
http://jbbs.livedoor.jp/bbs/read.cgi/computer/32221/1246384344/34

codepadは、scanf()などの入力関数をスキップするみたい。
296 ◆0NAuS7zCEc :2009/12/20(日) 16:55:49
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10295.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: visual studio 2008
 [3.3] 言語: C
[4] 期限: [2009年12月23日21:59まで]
[5] その他の制限:特にありません。

お願いします。
297デフォルトの名無しさん:2009/12/20(日) 18:21:18
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10296.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 火曜日まで
[5] その他の制限:ポインタまで習っています
お願いします。
298デフォルトの名無しさん:2009/12/20(日) 18:33:45
>>296
int i;
for(i=0; i<n; i++) printf("%d ", a[i]);
putchar('\n');
299 ◆0NAuS7zCEc :2009/12/20(日) 18:40:53
>>298
すみません、printfだけで出来ると先生が言っていたので・・・

どなたかもう一度お願いします。
300デフォルトの名無しさん:2009/12/20(日) 18:53:52
>>299
そんなほんの少しのことくらい自分で考えないのかw
301デフォルトの名無しさん:2009/12/20(日) 18:59:18
putchar('\n') → printf("%c", '\n');
302 ◆0NAuS7zCEc :2009/12/20(日) 19:00:13
>>300
もちろん自分で考えた上でここに書いてます。
一人で考えても答えが全然出ないなら誰かに頼るしかないです・・・
303デフォルトの名無しさん:2009/12/20(日) 19:03:22
>>302
キリッ
304デフォルトの名無しさん:2009/12/20(日) 19:07:03
>>301
こういうのって
printf("\n");
じゃいけないの?
305デフォルトの名無しさん:2009/12/20(日) 19:17:44
別にいいだろ
306 ◆0NAuS7zCEc :2009/12/20(日) 19:48:14
>>298さんの答えを使わせて頂くことにしました。
ありがとうございました。


他に協力して下さった皆さんもありがとうございました。キリッ
307デフォルトの名無しさん:2009/12/20(日) 21:26:08
秋山徒労ってひどい名前だな
308デフォルトの名無しさん:2009/12/20(日) 22:13:40
>>231
>>216で質問した者です。
fview、catfilesそれぞれのプログラムのポイントも教えていただけないでしょうか。
2度手間になってしまい申し訳ないのですが、よろしくお願いします。
309デフォルトの名無しさん:2009/12/20(日) 22:39:01
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10297.txt
[3] 環境
 [3.1] OS:linux (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2009年12月21日 16:00
[5] その他の制限: 特になし
310デフォルトの名無しさん:2009/12/20(日) 22:47:25
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
課題 関数(再帰)最大公約数
 キーボードから自然数を2つ入力し、それらの最大公約数と最小公倍数を表示するプログラムを作成しなさい。
ただし、最大公約数の計算は関数(再帰)を用いること。最大公約数を計算する関数の名前はgcdとすること。

実行結果
自然数を2つ入力して下さい.
3243 6578
3243と6578の最大公約数は23,最小公倍数は 927498 です。

[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限:明日7:30までに
[5] その他の制限:

よろしくお願いします!
311デフォルトの名無しさん:2009/12/20(日) 23:33:14
>>295
スキップしてないよ 実行してる。ungetc()で文字押し入れてテストしてみた。
http://codepad.org/BHPUeJPH
312デフォルトの名無しさん:2009/12/20(日) 23:34:07
>>310
がんばれ
313デフォルトの名無しさん:2009/12/20(日) 23:38:41
>>310
明日の今頃の時間にここにくればコード貼ってやってもいい
314デフォルトの名無しさん:2009/12/20(日) 23:51:34
  ┏┓  ┏━━┓┏━┓┏┓┏━━┓┏━━┓     //.i:.:.:i:.:.:.:.:i,|:.i/iハ:.:./ リ\|、;イ:.:.:.:.i、:.:i....      ┏┓┏┓┏┓
┏┛┗┓┗━┓┃┗━┛┃┃┃┏┓┃┃┏┓┃    .| i.|:.:.;イ:.:.i:.:| |i  ィ ∨ ゝ リ|/`イ:.:.:ト:.Y、.      ┃┃┃┃┃┃
┗┓┏┛    ┃┃┏━┓┃┃┃┗┛┃┗┛┃┃┏━| i,|:.:.| i:.:.|i:.:|ィェェク    イミェュャ.レ:.:.i;,:.:) ヽ..━━┓┃┃┃┃┃┃
┏┛┗┓┏┓┃┃┗━┛┃┃┃┏┓┃    ┃┃┃  .i|.´i:.| i:.:.iヽi /// ヽ   /// /:.:./、)   \  ┃┃┃┃┃┃┃
┗┓┏┛┃┗┛┃    ┏┛┃┗┛┃┃    ┃┃┗ /リ i:.i .ト:.:i:.ゝ  マ⌒ 、   /イ:.:.ifj´\ i.  ヘ....┛┗┛┗┛┗┛
  ┃┃  ┗┓┏┛┏━┛┏┛    ┃┃  ┏┛┃  `ー <i\|\ヽ    ヽ_ノ    /:.:.:/Y ヽ. \ ,/..  ┏┓┏┓┏┓
  ┗┛    ┗┛  ┗━━┛      ┗┛  ┗━┛      ∨.|:.:.:`|`ゝ、     ,./i:.:.:/ .i| \  /....    ┗┛┗┛┗┛
315デフォルトの名無しさん:2009/12/20(日) 23:52:22
激しく誤爆した
316デフォルトの名無しさん:2009/12/20(日) 23:55:07
>>310
ここに何かヒントが書いてあったぞ
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/EuclidRec.html
317 ◆QZaw55cn4c :2009/12/20(日) 23:57:55
318デフォルトの名無しさん:2009/12/21(月) 00:01:39
別に入れ替えなくても再帰の呼び出し一回増えるだけじゃん。
319デフォルトの名無しさん:2009/12/21(月) 00:09:32
ここの人は過保護じゃないか?宿題は自分で頑張らないと・・・
320デフォルトの名無しさん:2009/12/21(月) 00:18:39
>>318
んー、なるほど、それには気がつかなかったなあ。
321デフォルトの名無しさん:2009/12/21(月) 00:19:58
>>319
教育的な配慮は一切しない、自分が楽しみさえすればいいだけの、悪意に満ちたスレですから。
322デフォルトの名無しさん:2009/12/21(月) 00:27:17
善意のコード収集サイトがあるという考え方も何だかな〜という感じ
323デフォルトの名無しさん:2009/12/21(月) 00:31:31
自称玄人のヒマ潰しスレだと思ってたが違ったのか・・
324デフォルトの名無しさん:2009/12/21(月) 00:39:11
宿題貼り付けるだけじゃなくて、
自分でどこまで考えたか、調べたかも書くのが礼儀じゃないかな・・
325デフォルトの名無しさん:2009/12/21(月) 00:43:28
暇つぶしに解いてるだけだから仕様守っとけばそれでいいだろ。
ダメぽコード書こうが環境依存していようが頼る奴が悪い。
326デフォルトの名無しさん:2009/12/21(月) 00:44:41
ここは指導スレじゃないからな。代理で宿題片付けるだけだからな
327デフォルトの名無しさん:2009/12/21(月) 00:48:28
それじゃ「森羅万象すべて教えます」スレだろ。誰も信用しないってw
第一あんまし見てて気持ちいいもんじゃないな。「わかる?」「わかんな〜いw」的な
「やりとり」
コード貼るだけで、依拠理論に関しては一切ノーコメント。コードと結果で
判断してもらうというのがこのスレ的な筋だろ?
それじゃ教育の妨害になるってことも一つの考え。(てゆーかこのスレ
の依存構造に抵触)てことは、早漏防止メカニズム設計が正しい方向って
ことだろな
328デフォルトの名無しさん:2009/12/21(月) 00:51:33
>>1より

気に入らない質問やその他の発言はスルーの方向で。
329デフォルトの名無しさん:2009/12/21(月) 01:20:25
中級者が練習として問題解いて、上級者に突っ込まれるスレだと思ってた。
330デフォルトの名無しさん:2009/12/21(月) 05:20:02
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから数を入力として受け取り、その個数分のint型データをキーボードから受け取り、それらの最大値を画面に出力するプログラムをcallocを用いて書け。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:c
[4] 期限: 無期限
331デフォルトの名無しさん:2009/12/21(月) 06:54:07
>>330
出題者に申し訳ないけど calloc() 要らねー
332デフォルトの名無しさん:2009/12/21(月) 08:17:47
突っ込む箇所が違う
333 ◆FKHan0pzBo :2009/12/21(月) 09:12:19
>>332 [4] 期限: 無期限
#include <stdlib.h> // 追加1行目
#include <malloc.h> // 追加2行目
http://jbbs.livedoor.jp/bbs/read.cgi/computer/32221/1246384344/35
334デフォルトの名無しさん:2009/12/21(月) 09:24:50
>330
これは大変興味深い課題と思います
なぜなら、まず、ユーザは数値以外を入力する可能性があるため、その処理をうまくできるかが試されるから
次にint型データ(?)で表現可能な値を超えた場合でも正常に動くかが試されるから
次に最大値を如何にクールに求めるアルゴリズムを見つけるかが試されるから
最後にcalloc()とその周辺知識について試されるから
335デフォルトの名無しさん:2009/12/21(月) 09:48:45
>>334
そんな事を言うと誰もしなくなっちゃうだろw
336デフォルトの名無しさん:2009/12/21(月) 10:11:01
>>330
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *p, i, n, max;

scanf("%d", &n);

p = calloc(n, sizeof(int));

for(i=0; i<n; i++) scanf("%d", p + i);

max = p[0];
for(i=1; i<n; i++) if(p[i] > max) max = p[i];

printf("%d\n", max);

free(p);

return 0;
}
337デフォルトの名無しさん:2009/12/21(月) 10:44:02
338デフォルトの名無しさん:2009/12/21(月) 11:29:06
言いたいことがあるならコードで示せ
339デフォルトの名無しさん:2009/12/21(月) 12:10:55
入力した数値を出力する必要がない(最大値だけでよい)んだからcallocはもっと雑に使っていいと思う
340デフォルトの名無しさん:2009/12/21(月) 12:50:24
>>334
私もこの再三繰り返される課題をhttp://pc12.2ch.net/test/read.cgi/tech/1257150194/
で取り上げようか、それとも見送ろうか、と迷ったのですが、
「キーボードから数を入力として受け取り」という部分が面白いと考えて、
使わせていただきました。数といった場合、整数とは限らないと思うので。
341デフォルトの名無しさん:2009/12/21(月) 13:38:28
「させていただきました」って聞くとイラッとするw
342デフォルトの名無しさん:2009/12/21(月) 13:40:13
つ カルシウム
343デフォルトの名無しさん:2009/12/21(月) 15:42:50
[1] 授業単元:自主勉
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10298.cpp
これでv[0]を0.0に固定したいのですが115行目においてみたのですが違うみたいなのでやり方教えてください
お願いします
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
344デフォルトの名無しさん:2009/12/21(月) 18:11:40
チカラ
能力を示せ
345デフォルトの名無しさん:2009/12/21(月) 18:38:16
>>343 ちょっと整えてみた。
struct vec3 {
  double x, y, z;
  vec3() : x(0), y(0), z(0) {}
  vec3(double x, double y, double z) : x(x), y(y), z(z) {}
  vec3 &operator+=(const vec3 &v) {
    x += v.x;y += v.y;z += v.z;return *this;
  }
  vec3 &operator-=(const vec3 &v) {
    x -= v.x;y -= v.y;z -= v.z;return *this;
  }
  vec3 &operator*=(const vec3 &v) {
    x *= v.x;y *= v.y;z *= v.z;return *this;
  }
  vec3 operator-() {
    return vec3(-x, -y, -z);
  }
  vec3 operator+(const vec3 &v) {
    return vec3(x + v.x, y + v.y, z + v.z);
  }
  vec3 operator-(const vec3 &v) {
    return vec3(x - v.x, y - v.y, z - v.z);
  }
  vec3 operator*(const vec3 &v) {
    return vec3(x * v.x, y * v.y, z * v.z);
  }
  vec3 operator*(const double &d) {
    return vec3(x * d, y * d, z * d);
  }
};
346デフォルトの名無しさん:2009/12/21(月) 18:39:13
vec3 operator*(const double &d, const vec3 &v) {
  return vec3(d * v.x, d * v.y, d * v.z);
}
struct Particle {
  vec3 position, velocity;
};
void position(std::vector<Particle> *ps) { // ?
  vec3 vp05, vm05, A(3.0,3.0,3.0);
  for (std::vector<Particle>::iterator p = ps->begin(); p != ps->end(); p++) {
    p[0].velocity.x = 0.0;
    double dt = 0.01;
    vp05 = vm05 + A;
    p->position += dt * vp05;
    p->velocity += vm05 + p->position + A * 0.5 * dt;
    vp05 = vm05;
    std::cout << std::fixed << std::setprecision(5)
      << "r " << p->position.x
      << " v " << p->velocity.x
      << " v[0]" << p[0].velocity.x<<std::endl;
  }
}
347デフォルトの名無しさん:2009/12/21(月) 18:41:47
int main() {
  std::vector<Particle> *particles = new std::vector<Particle>();
  {
    double k = 1.0 / 20; // ?
    for (double i = 0.5; i >= -0.5-k;i -= k) { // ?
      Particle p;
      p.position.x = i;
      particles->push_back(p);
    }
  }
  for(int i = 0; i < 5; i++) {
    position(particles);
    std::cout << " " << std::endl;
  }
  delete particles;
  return 0;
}

>>343
> これでv[0]を0.0に固定したいのですが115行目においてみたのですが
> 違うみたいなのでやり方教えてくださいお願いします

うーん。
348デフォルトの名無しさん:2009/12/21(月) 18:55:26
>>347
ありがとうございます
参考にしてやってみます
349デフォルトの名無しさん:2009/12/21(月) 19:06:34
>>347
すいません。見やすくしてもらっただけのようでした。
350デフォルトの名無しさん:2009/12/21(月) 19:15:20
>>349
もしも、
> これでv[0]を0.0に固定したいのですが
のv[0]が、std::vector<Particle> *particlesの一番目の要素のvelocityのつもりだったら。

p[0].velocity.x = 0.0;
じゃなくて、
ps->at(0).velocity.x = 0.0;
と書くことになる。
351デフォルトの名無しさん:2009/12/21(月) 19:31:44
>>350
そういうことです
ありがとうございます
35210:2009/12/21(月) 21:58:31
>>203
>>145
>>144
ありがとうございました。>>203さんのを
参考にさせて頂いた上で多少手直し(英語→日本語)
したのをだしました。助かりました。
353 ◆PcWwLjlc5M :2009/12/22(火) 01:01:28
[1] 授業単元:基礎プログラミング講義
[2] 問題文(含コード&リンク):以下の処理はサブ関数で作成する。数値(n)を反転した値を表示せよ。123→321
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:borand bcc55
 [3.3] 言語:C
[4] 期限:12月22日 10:00 a.m.
[5]サブ関数まで学習済み
以下のプログラムは私が先生にはじかれたものです。
サブ関数内でprintfを使うなとのことでした。
#include<stdio.h>
int sub1 (int a) { int x;
for(x=0;a!=0;x++) { a=a/10; }
return(x); }
int sub2 (int a,int b) { int v,w,x,y,z;
x=10; y=1;
for(w=0;w!=b;w++) { z=a%x; v=z/y;
printf("%d",v); x=x*10; y=y*10; }
return; }
int main(void) { int m,n;
while(scanf("%d",&n)==1) { m=sub1(n);
printf("反転した結果は"); sub2(n,m);
printf("\n\n"); } return(0); }

何卒、お願いいたします…
354デフォルトの名無しさん:2009/12/22(火) 01:51:10
>>353
#include<stdio.h>

int sub1(int a, int b)
{
if(a<=0) return b;
return sub1(a/10, b*10+a%10);
}

int main(void)
{
int m,n;

while(scanf("%d",&n)==1)
{
m=sub1(n, 0);
printf("反転した結果は");
printf("%d\n\n", m);
}
return(0);
}
355デフォルトの名無しさん:2009/12/22(火) 02:07:36
再帰をサブ関数まで習ったというような段階で習うもんかね
ポインタやらシステムコールやら構造体やら
共用体とかやった後のかなーり後に習ったけどな
356デフォルトの名無しさん:2009/12/22(火) 02:33:13
問題に即したコードになっているように思えない件と
どーみてもこのばあいの再帰呼び出しは
非効率な割に(初学者以外にも)わかりにくい件に
ついて
357デフォルトの名無しさん:2009/12/22(火) 02:44:51
>>353
#include<stdio.h>
int sub1 (int a) {
int x;
for (x=0;a!=0;x++) {
a=a/10;
}
return(x);
}
int sub2 (int a,int b) {
int v,w,x,y,z;
int u; /* 反転した値を入れる */
x=10; y=1; u = 0;
for (w=0;w!=b;w++) {
z=a%x; v=z/y;
u=u*10+v;
x=x*10; y=y*10;
}
return (u);
}
int main(void) {
int m,n,o;
while (scanf("%d",&n)==1) {
m=sub1(n);
printf("反転した結果は");
o=sub2(n,m);
printf("%d\n\n",o);
}
return(0);
}
358デフォルトの名無しさん:2009/12/22(火) 02:50:31
>>354
スマートなやり方で良く読めば理にかなってるじゃん
359デフォルトの名無しさん:2009/12/22(火) 02:59:10
>>358
>>355 再帰をサブ関数まで習ったというような段階で習うもんかね
あとLispやRubyとかならいいけど、Cの再帰はスタックを消費するから、お薦めはしない。
360デフォルトの名無しさん:2009/12/22(火) 03:05:26
>>357
そんなやたらと複雑にする必要性があるか?


#include<stdio.h>

int sub (int a) {
int x=0;
while (a) x=x*10 + a%10, a/=10;
return(x);
}

int main(void) {
int m,n;
while (scanf("%d",&n)==1) {
m=sub(n);
printf("反転した結果は");
printf("%d\n\n",m);
}
return(0);
}


でいいだろ。

>>348
再帰は場合によっては有用だが、関数呼び出しにはどうしてもオーバーヘッドが生まれる。
この場合は桁数が10桁程度しかないから再帰もその程度の回数で済むため速度的な問題は気にならないとは思うけど、ループ構文で済む所をわざわざ再帰にする必要性はないし、そういうことはしないように心掛けた方がいい。
上のsub()関数でも、数百万個の数値データとかに連続して呼び出したら違いが明確になるだろ。
361デフォルトの名無しさん:2009/12/22(火) 03:08:47
LISPやRubyのスタックって無尽蔵にあるそんなすてきなものだったっけ?
いずれにせよ再帰は僅かな変更でも動かなくなるデリケートなものが多いん
で使用は極力控え目に。パブリックな場所では使わないほうが無難
362デフォルトの名無しさん:2009/12/22(火) 03:18:05
>>360
問題に即した回答をしているんだから
そういうちゃちゃ入れはかわいそうだし、おかしい
363デフォルトの名無しさん:2009/12/22(火) 03:22:18
どうも宿題スレには自分のポリシーを無理矢理押しつけたがるクズがいるな
364デフォルトの名無しさん:2009/12/22(火) 03:28:23
ポリシーじゃなくてリテラシーだろ
365デフォルトの名無しさん:2009/12/22(火) 03:29:17
[1] 授業単元:初級プログラミング
[2] 問題文(含コード&リンク):マインスイーパーを作ってください。
・縦の列はABC...で、横の列は123...で表示し、座標を繰り返し入力する
・枡の大きさは自由である(難易度ごとに大きさを選べる等要工夫)
・地雷の位置は毎回ランダムであること
・指定(入力)した座標には周囲の地雷の数を表示させる
・地雷のある座標を入力するか、全ての安置を入力することでクリアとする
・その他、工夫等が見られると加点
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C言語
[4] 期限:1月12日 24:00
[5] その他の制限:よく分かりませんが、学習して1年目の範囲でできる事でお願いします。
私があまりプログラミングが上手くないので、加点要素はあまり必要ありません。
もし作っていただけるのであれば、加点要素の無いものと2つ、ソースをもらえるとうれしいです。
366デフォルトの名無しさん:2009/12/22(火) 03:55:52
>>361
スレちだとうは思うけど「末尾再帰最適化」
367デフォルトの名無しさん:2009/12/22(火) 04:07:22
>>364
この場合はポリシーでもリテラシーでもどっちでもいいだろ
要するに一言多い馬鹿がいるって言いたいわけ
368353:2009/12/22(火) 06:42:16
>>354
>>357
>>360

お力添えありがとうございました。
こんなにパターンがあるなんて…僕の費やした2週間はどこへ。

369デフォルトの名無しさん:2009/12/22(火) 12:30:35
つーか、>>353は微妙にスレ違い 質問系スレで
質問すればよかったんじゃないかと。

先生が出した問題をそのまま書くだけで
期限さえ余裕があれば、期限迄に回答が出てくるかもよ
というのがこのスレの主旨(つまりC語翻訳サイト)

途中迄やったけど、どこが間違ってるでしょうか?
というのならそのように書くべき(=先生の出した問題
のようにフェイクする)
そしてそのように書かれている場合は、回答者はそれに
即して間違っている箇所だけを回答として指摘する。
それなりの日本語のスキルが無いとこのスレの活用は
難しいんだ。

曖昧な質問に答える回答者は実は微妙にスレの主旨に違
反してたりする。
370デフォルトの名無しさん:2009/12/22(火) 12:43:31
>>369
結局お前は質問スレに逝けって言いたいの? それとも何処が間違っているか教えてください>< ってこのスレで聞けって言いたいの?
371デフォルトの名無しさん:2009/12/22(火) 12:53:09
>>369
自分がやってみたプログラムが載ってるだけで、特殊な例だとは思えないが。
丸投げではないということでしょ。
372デフォルトの名無しさん:2009/12/22(火) 12:55:09
質問系スレにいくか
質問の仕方を変えるか
回答者は、余計なコメントを書かず期限前にスマートな
コードをさくっと出力。
回答者が回答予約を兼ねたプログレスバーを出力すると尚良いかも
例:
375 デフォルトの名無しさん
>>353 お待ち下さい
*--------------
402 375
>>353 お待ち下さい
******---------
409 375
>>353 お待ち下さい
**********-----
412 375
>>353 コード生成に失敗しました。

ってな感じ
373デフォルトの名無しさん:2009/12/22(火) 13:01:30
>>372
www
374デフォルトの名無しさん:2009/12/22(火) 13:38:28
415 デフォルトの名無しさん
>>353 コード生成に成功しています。
再請求すれば貼付けるかうpします。

↑こんな感じのレスが入れば問題解決なんじゃ?
375デフォルトの名無しさん:2009/12/22(火) 14:00:17
char[n]
nの最大値はなんですか?(VC++2008EEです)
376デフォルトの名無しさん:2009/12/22(火) 14:01:56
すいません
char m[n] //mはなんでもいいです
nの最大値はなんですか?(VC++2008EE)
377デフォルトの名無しさん:2009/12/22(火) 14:02:31
max(n)=12345678901234567890
378デフォルトの名無しさん:2009/12/22(火) 14:03:35
vc++2008eeのマニュアルには何て書いてあったんだ?
379デフォルトの名無しさん:2009/12/22(火) 14:08:01
会社の先輩や上司に頭下げて訊く
380デフォルトの名無しさん:2009/12/22(火) 14:19:17
>>365 生成中です 暫くお待ち下さい(フリーズするかもです)
***ーーーーーーー
381デフォルトの名無しさん:2009/12/22(火) 14:32:45
俺用メモ
ttp://msdn.microsoft.com/en-us/library/5eay31s2.aspx
0x7CFFFFFF(x64でもかよ)
382デフォルトの名無しさん:2009/12/22(火) 15:25:35
>>365
つくってみようかなと思いきや、Cかよ…。
頭の中でもうクラス設計し始めてたのに。
383デフォルトの名無しさん:2009/12/22(火) 15:38:20
>>365
マインスイーパーはオセロ同様に得られるものが多いから
1度でも自分で作って欲しいところなんだが、スレ的には違うかw

配列だけでゴリゴリやるよりも構造体でハッシュテーブル作って
ランダム数から評価配置していった方が楽。
で、構造体はもう習った?
384デフォルトの名無しさん:2009/12/22(火) 17:04:54
ハッシュテーブル?
385デフォルトの名無しさん:2009/12/22(火) 17:06:38
[1] 授業単元: 授業ではありません。「C++で学ぶオブジェクト指向プログラミング」6章理解度テスト3(この本は作者の意向で答えがありません。)
[2] 問題文

次のクラスを作成しなさい。
クラス名:Value
メンバ変数:なし
メンバ関数:
純粋仮想関数 setValue() (intやfloatなど)なんらかの値をセットする
純粋仮想関数 getValue() 値を取得する
純粋仮想関数 show() 値を表示する

この問題は派生クラス(Intval、Floatval)があり、そちらのコンストラクタで値を設定し、
show()やgetValue()を用いて値を表示するのですが、そこは自分で考えるつもりです。
まずこの基本クラスの宣言が分かりません。
※この時点ではまだテンプレートは習っていません。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] VS2008
 [3.3] 言語: C++
[4] 期限:なし
[5] その他の制限: 特にありません。
386デフォルトの名無しさん:2009/12/22(火) 17:42:11
>>385
C++編(言語解説) 第10章 インタフェースクラス
http://www.geocities.jp/ky_webid/cpp/language/010.html
抽象クラス
http://wisdom.sakura.ne.jp/programming/cpp/cpp32.html

class Value
{
public:
virtual void setValue(int) = 0;
virtual int getValue() = 0;
virtual void setValue(float) = 0;
virtual float getValue() = 0;
virtual void show() = 0;
};

class Intval : public Value
{
};
class Floatval : public Value
{
};

あとは埋めてな。
関数を「一つずつ作れ」とは書かれてない。同一関数名で型等が違う関数を作れることを忘れないよーに。
387デフォルトの名無しさん:2009/12/22(火) 18:45:11
>>365
ttp://codepad.org/PNzrV6Ha

テラ素朴なので加点要素はないと思われます。
せっかく作ったから、おまいら遊んでやってください。
388デフォルトの名無しさん:2009/12/22(火) 19:11:49
[1] 授業単元:計算機入門及び演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10300.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月07日
[5] その他の制限: 特になし

お願いします
389デフォルトの名無しさん:2009/12/22(火) 19:17:26
>>387
とりあえずコンパイルは通ったがセグメンテーション違反でおちた
Debian@gcc 4.3.4
390デフォルトの名無しさん:2009/12/22(火) 19:42:29
>>389
報告サンクス。

>>387の実行環境はgcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
今回デバッグした環境はgcc (Debian 4.3.2-1.1) 4.3.2

#include <stdlib.h>
の追加と以下の変更で落ちなくなりました。
srand(time());

srand(time(NULL));
391デフォルトの名無しさん:2009/12/22(火) 21:37:08
回答をお寄せ下さる方へ

Code貼る前に、質問者がまだ居るか、欲しいのかどう
か確かめてから貼って下さい。

質問者は質問したら、最低一日一回は来て
回答してくれてる方が居るか確かめて。

CodePadはこのスレとは無関係だし
外国のサイトなんで使用には注意が必要
392デフォルトの名無しさん:2009/12/22(火) 21:40:06
あっそう
393デフォルトの名無しさん:2009/12/22(火) 21:47:27
>>388
*----------
問題文読むのも面倒なのでキャンセルされました
394デフォルトの名無しさん:2009/12/22(火) 22:08:03
回答者の方へ
もし回答を下さる予定でしたら、お忙しい中更にお手数をおかする
ことになりますが途中一度でも着手済完成予定情報を簡単な図でで
もかまいませんのでお知らせ下さると無視されていないことがわか
って他所の同様なサイトに聞き回らなくても済みますので
助かると思います。
395デフォルトの名無しさん:2009/12/22(火) 22:35:28
やだ
396デフォルトの名無しさん:2009/12/22(火) 23:04:25
たびたびすいません。再びお願いします

[1] 授業単元:自主勉
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10301.cpp
110行目付近でvp、vmがでてきますが、このままでは vm=vp としたときに
1つ前のコンテナのvpがvmに入ってしまいますが、1つ前のコンテナのvpではなく、
同じコンテナのループの一つ前のvpを入れるにはどうしたらいいですか?
たぶん大幅に改変しなくてはいけないような気がしますがよろしくお願いします。
できればイテレータは使ったままでお願いします。


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語:C++
[4] 期限: できれば12・23の朝まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
397デフォルトの名無しさん:2009/12/22(火) 23:22:24
>>388
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
while(1) {
int *s, i, j, n, m, dif=0, flg=0, a, b;
scanf("%d%d", &n, &m);
if(!(n|m)) break;
s = malloc((n+m) * sizeof(int));
for(i=0; i<n; i++) { scanf("%d", s + i); dif += s[i];}
for(; i<n+m; i++) { scanf("%d", s + i); dif -= s[i]; }
dif = abs(dif);
if(!(dif&1))
for(i=0,dif>>=1; i<n; i++)
for(j=n; j<n+m; j++)
if(abs(s[i]-s[j])==dif && (!flg || s[i]+s[j]<a+b))
a = s[i], b = s[j], flg = 1;
printf("Aさんのカード:");
for(i=0; i<n; i++) printf(" %d", s[i]);
printf("\nBさんのカード:");
for(; i<n+m; i++) printf(" %d", s[i]);
if(flg) printf("\nAさんの%dとBさんの%dを交換\n\n", a, b);
else printf("\n合計を等しくする交換はありません\n\n");
free(s);
}

return 0;
}
398デフォルトの名無しさん:2009/12/22(火) 23:23:34
>>391
法律の違う外国のサイトを利用する場合、国内でトラブルに
なって絡んできたりとか、大げさに騒がれたりとかいろい
ろとやっかいなことになる場合があるから絶対にトラブルを
起こさないという覚悟の上で利用するというのは言えてると
思いまつ
399デフォルトの名無しさん:2009/12/23(水) 00:27:59
>>397
ありがとうございます
400デフォルトの名無しさん:2009/12/23(水) 06:44:43
[1]授業単元:プログラミング
[2] 課題:いわゆる15パズル。
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15
のように配置された4x4のパネルを乱数を用いてシャフルする。シャフル時のパネルの動かし方は
ゲーム進行中のパネルを動かすやり方と同じルールが適用される。
パネル座標値(R,C) を入力させ (Rは行 Cは列 それぞれ1から4の値を取る)
対応するパネルが空白でないパネルで空白と隣接する場合はそこに移動させる方法で
ゲームを進行させ、最初の状態に戻った場合(完成)は「暇人さんご苦労様」と出力して終了。
完成するまで入力と移動を繰り返す。無効なマスの指定は「そんなパネル動かせへん」と警告を表示すること。
盤面状況はコンソール出力とし、動かした回数と共に入力の直前に随時、及びゲーム終了前に表示すること。
[3] Linux/gcc 4.0/C
[4] 2010年1月第一週の授業までに提出
[5]stdio.h,stdlib.hのみ使用可能 fgets,sscanf,rand,fprintfの使用を許可 4x4、16マスを仮定するが
一辺の長さを4については#defineで文字列レベルでの変更が出来るようにすること
401400 ◆3prheF9ilc :2009/12/23(水) 06:47:39
朝早くから済みませんがよろしくお願いします。
402デフォルトの名無しさん:2009/12/23(水) 12:29:26
>>400
ttp://codepad.org/WfYn8xv2

確認した環境は
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
403396:2009/12/23(水) 12:41:02
vp,vmを構造体に入れることにより解決しました
404デフォルトの名無しさん:2009/12/23(水) 12:49:38
>>402
速い‥‥‥。
405デフォルトの名無しさん:2009/12/23(水) 17:21:17
[1]授業単元:プログラミング
[2] 課題:覆面算 
ttp://www.iba.k.u-tokyo.ac.jp/~iba/C/lesson1.html

osaka + kyoto = tokyo 

覆面算を解く。
同じ文字は同じ数字を、違う文字は異なる数字を表す。
先頭の文字が0にならないことに注意する。

[3] 環境
 [3.1] OS windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
よろしくお願いします<(_ _)>
406デフォルトの名無しさん:2009/12/23(水) 17:24:23
>>405
おーい、リンク先がらみの学生なら、これくらいがんばれ!
407デフォルトの名無しさん:2009/12/23(水) 17:49:00
>405
どこかで聞いた名前だなと思ったら、この人の本持っていた
408デフォルトの名無しさん:2009/12/23(水) 17:52:00
>>405
**−−−−−−−− ←プログレスバー
知っています。コード生成に着手しました。
暫く(数日から一両日〜1週間程)お待ち下さい
フリーズしていると思う場合は、CTRL+ALT+DEL
を押してタスクマネージャーを起動し133-405.exeの
CPU使用量が0%の場合はフリーズしていますので
あきらめてください。アプリケーションを強制停止
させるとシステムに不具合が起こる場合もありますんで
ご注意下さい。
409デフォルトの名無しさん:2009/12/23(水) 17:55:29
>>405
自習問題は面白いですね。
積と和から2数を知る問題は、かなり昔の「初歩のラジオ」のパズルにありましたね。
410デフォルトの名無しさん:2009/12/23(水) 18:20:03
>>405
元の問題は大文字だったから一応そうしといた
先頭の文字のチェックは入れてない、覆面算って答えが一つしかないらしいので

http://codepad.org/6w2OJi1t
411デフォルトの名無しさん:2009/12/23(水) 18:31:34
答えが2つ以上ある覆面算めいたものは覆面算と
呼んではならない
と定義されました
ならばC言語の宿題(=問題)は殆どが覆面算めいた
もので、それが重要な本質です。
回答競争みたいな行為はC言語を汚す行為とも
取れます。
412405:2009/12/23(水) 18:32:53
>>410さん
>>405です。とてもお早い回答有難う。
悩んで手がつかない状態だったのでうれしいです!
では勉強のほうに戻ります。失礼しました〜
413デフォルトの名無しさん:2009/12/23(水) 18:32:55
お前はゴールできないから競争になってないだろw
414デフォルトの名無しさん:2009/12/23(水) 18:35:12
新しいループに入るたびに前の変数と比較するのと、
>>410みたいに最後にまとめて比較するのってどっちがいいんだろ。
415デフォルトの名無しさん:2009/12/23(水) 18:42:22
>>411
C言語はもともとそんなにきれいな言語じゃないんで
心配しなくていいって
416410:2009/12/23(水) 19:39:39
勘違いしてたけど
覆面算の答えは一つとは限らないみたいね

でも>>405の答えは結局一つしかなかったので
あのままで大丈夫だと思う。
417400 ◆3prheF9ilc :2009/12/23(水) 21:34:33
>>402
大変早い回答ありがとうございます。
418デフォルトの名無しさん:2009/12/23(水) 21:56:54
汎用の覆面算作ってみた
#include <stdio.h>
void store(char *str, char *p, int *cnt){
int i, j;
for(i=0; str[i]; i++) {
for(j=0; j<*cnt; j++) if(str[i]==p[j]) break;
if(j==*cnt) p[(*cnt)++] = str[i];}}
int conv(char *str, char *p, int *n, int *ret){
int i;
for(i=0; *str!=p[i]; i++);
if(!n[i]) return 0;
*ret = n[i];
while(*++str) {
for(i=0; *str!=p[i]; i++);
*ret = *ret * 10 + n[i];}
return 1;}
void mask(char *a, char *b, char *c, char *p, int *n, int pos, int cnt){
int i, j, an, bn, cn;
if(pos == cnt) {
if(!conv(a,p,n,&an)||!conv(b,p,n,&bn)||!conv(c,p,n,&cn)) return;
if(an + bn == cn) printf("%d + %d = %d\n", an, bn, cn);
return;}
for(i=0; i<10; i++) {
for(j=0; j<pos; j++) if(n[j]==i) break;
if(j==pos) { n[pos] = i; mask(a, b, c, p, n, pos+1, cnt);}}}
int main(void){
int n[10], cnt = 0;
char a[16], b[16], c[16], p[10];
scanf("%s%s%s", a, b, c);
store(a, p, &cnt);store(b, p, &cnt);store(c, p, &cnt);
mask(a, b, c, p, n, 0, cnt);
return 0;}
419デフォルトの名無しさん:2009/12/23(水) 22:08:11
100円やったけど律儀に10円の釣りとは...
420デフォルトの名無しさん:2009/12/23(水) 22:42:39
>>418
素晴らしい!!
421デフォルトの名無しさん:2009/12/24(木) 02:01:23
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
問1 辺の和が3以上1000以下の直角三角形の個数を求めよ。
各辺の長さは自然数で、ある直角三角形の各辺を定数倍したものもカウントすることとする。
問2 問1 で検索した直角三角形のうち、最も面積の大きい直角三角形の3辺の長さ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:2009年12月25日
[5] その他の制限:forとifを使って作る

よろしくお願いします。
422デフォルトの名無しさん:2009/12/24(木) 02:52:29
>>421
最初のprint文は実行経過の確認用なので、不要ならコメントにされたし。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10303.txt
423デフォルトの名無しさん:2009/12/24(木) 03:21:44
乙候
424デフォルトの名無しさん:2009/12/24(木) 03:54:53
回答する場合は、出来れば2通り以上の回答を用意してから
あげるべきじゃないかと..
exactな値を求める問題とかだと間違ってたりすると匿名とは
言えども結構恥ずかしいからな
425デフォルトの名無しさん:2009/12/24(木) 06:27:38
なにいっ天皇
426デフォルトの名無しさん:2009/12/24(木) 07:36:09
>>422がアホだって言いたいんじゃね?
427デフォルトの名無しさん:2009/12/24(木) 08:08:49
>>421

#include <stdio.h>

int main(void)
{
int i, j, k, cnt = 0, max_area = 0;

for(i=1; i<1000; i++) {
for(j=1; j<i; j++) {
for(k=i-j+1; k<=j && i+j+k<=1000; k++) {
if(i*i==j*j+k*k) {
cnt++;
if(max_area<j*k) max_area = j*k;
}
}
}
}
printf("個数:%d\n最大面積:%.1f\n", cnt, max_area / 2.0);

return 0;
}
428デフォルトの名無しさん:2009/12/24(木) 09:02:41
問題よく読みなよ
429デフォルトの名無しさん:2009/12/24(木) 09:06:31
コード貼らずに文句だけ言う、俺みたいなのが一挙に増えたな。
学校が休みに入ったんだと感じる一瞬だ。
430デフォルトの名無しさん:2009/12/24(木) 10:43:25
問題よく読んでなかった。
面積じゃなくて3辺の長さか。
#include <stdio.h>

int main(void)
{
int i, j, k, cnt = 0, a, b, c, max_area = 0;

for(i=1; i<1000; i++) {
for(j=1; j<i; j++) {
for(k=i-j+1; k<=j && i+j+k<=1000; k++) {
if(i*i==j*j+k*k) {
cnt++;
if(max_area<j*k) {
max_area = j*k;
a=i,b=j,c=k;
}}}}}

printf("個数:%d\n最大面積の三辺:%.d %d %d\n", cnt, a, b, c);

return 0;
}
431デフォルトの名無しさん:2009/12/24(木) 21:38:02
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
20000〜40000までの自然数のうち、数字の9を2個含む素数の個数を調べよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:2009年12月25日

お願いします
432デフォルトの名無しさん:2009/12/24(木) 22:15:18
197
433デフォルトの名無しさん:2009/12/24(木) 22:19:34
141
434 ◆QZaw55cn4c :2009/12/24(木) 22:24:57
435デフォルトの名無しさん:2009/12/24(木) 22:25:22
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10304.txt

授業単元:プログラミングT
言語:C
期限:無し
簡単なものですが自分にはやり方が分りません。
お願いします
436デフォルトの名無しさん:2009/12/24(木) 22:28:10
>>431
#include <stdio.h>

int main(void)
{
int i, j, k, cnt = 0;

for(i=20000; i<=40000; i++) {
if(i%2==0) continue;
for(j=3; j*j<=i; j+=2) if(i%j==0) goto label;
for(j=i,k=0; j; j/=10) if(j%10==9) k++;
if(k==2) cnt++;
label:
}

printf("%d\n", cnt);

return 0;
}
437434:2009/12/24(木) 22:30:56
>>431
個数でしたね。訂正します。
http://codepad.org/kQ0yzVlB
438431:2009/12/24(木) 22:35:49
たくさんの回答ありがとうございました
助かりました
439デフォルトの名無しさん:2009/12/25(金) 00:06:22
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

三角形の「底辺」「高さ」「面積」を表現するために,整数型の2つの変数teihenとtakasaと浮動小数点型(double型)の1つの変数mensekiの,計3つの変数をメンバとしてもつ構造体型sankakuを宣言しよう.

main関数の中で,構造体変数triangle1とtriangle2が次のように定義されているとする.



struct sankaku triangle1 = {2, 8, 0.0};

struct sankaku triangle2 = {3, 6, 0.0};


このとき,以下の式で三角形の面積を計算し,それぞれのメンバ変数mensekiに求めた値を格納しよう.(整数同士の計算結果は必ず整数型の値になってしまうため,「2.0」という小数点付の数で割る計算をすること.そうすると,小数点以下の値まで求められる)

(面積) = (底辺) × (高さ) / 2.0

さらに,格納されたそれぞれの面積の値(triangle1のmensekiとtriangle2のmenseki)を表示するプログラムを作成せよ.(表示の際にはdouble型の値を表示することになるので,printfの" "の中の書き方に注意すること)



[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年12月30日
440 ◆FKHan0pzBo :2009/12/25(金) 01:06:37
>>435
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:VS2005
 [3.3] 言語:C
//
#if defined(_MBCS) // _UNICODE
#undef _MBCS
#define _UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <string.h>
#include <tchar.h>
#include <locale.h>

int main(void){
  TCHAR m1[80]=_T("日本"), m2[80]=_T("東京都"), m3[80], m4[80];
  int mojisu;

  setlocale(LC_ALL, "");
  _tcscat_s(m1, 80, m2);
  mojisu = (int)_tcslen(m1);
  _fgetts(m3, sizeof(m3), stdin);
  m3[_tcslen(m3)-1] = '\0';
  _tcscpy_s(m4, 80, m3);
  _tprintf(_T("m1=%s\nmojisu=%d\nm3=%s\nm4=%s\n"), m1, mojisu, m3, m4);
  return 0;
}
441デフォルトの名無しさん:2009/12/25(金) 02:46:06
>>439
#include <stdio.h>

/* 構造体 */
struct sankaku
{
int teihen;
int takasa;
double menseki;
};

int main(void) {
/* 定義 */
struct sankaku triangle1 = {2, 8, 0.0};
struct sankaku triangle2 = {3, 6, 0.0};
/* 三角形の面積を計算 */
triangle1.menseki = triangle1.teihen * triangle1.takasa / 2.0;
triangle2.menseki = triangle2.teihen * triangle2.takasa / 2.0;
/* 格納された面積の値を表示 */
printf("triangle1のmenseki=%f\n", triangle1.menseki);
printf("triangle2のmenseki=%f\n", triangle2.menseki);

return 0;
}
442デフォルトの名無しさん:2009/12/25(金) 10:21:09
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: emacsで書いて、k-termでコンパイル。
 [3.3] 言語: C++
[4] 期限: 今日までです!

すみません。今日締切なので、プログラミング得意な方、よろしくお願いいたします。

急いでいます。どうぞよろしくお願いいたします。
443デフォルトの名無しさん:2009/12/25(金) 10:29:31
↑すみませんこれも追加です
問題。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10306.txt
444デフォルトの名無しさん:2009/12/25(金) 10:42:16
OCRなのか、問題文がおかしいところがやたらとあるんだが。
445デフォルトの名無しさん:2009/12/25(金) 12:55:01
すみません
446デフォルトの名無しさん:2009/12/25(金) 12:56:18
元の画像UPしろってことだろ。
447デフォルトの名無しさん:2009/12/25(金) 13:23:44
>>446 
今学校にいて、下の画像データが手元にないので、少し手直ししたデータをUPします。
わかりにくいと思いますが、大体でいいんでどうかよろしくお願いいたします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10307.txt
448デフォルトの名無しさん:2009/12/25(金) 14:31:51
>>447 演習1と3
#include <iostream>
int main() {
int size;
std::cout << "データの数は?"; std::cin >> size;
int *a = new int[size];
for (int i = 0; i < size; i++) {
std::cout << i + 1 << "番目のデータを人力してください:";
std::cin >> a[i];
}
int sum = 0;
for (int i = 0; i < size; i++) {
sum += a[i];
}
std::cout << "和=" << sum << std::endl;
delete [] a;
return 0;
}
#include <iostream>
void print(char *name) {
std::cout << std::string(name).length() << " : " << name << std::endl;
}
void print_all(char **names, int size) { // ポインタのボインタを用いる
for (int i = 0; i < size; i++) print(names[i]);
}
int main() {
char *names[] = {"izumi", "Kanto", "Kudo", "Sato", "Sugawala", "Matuda", "Wada"};
print_all(names, sizeof(names) / sizeof(names[0]));
return 0;
}
449デフォルトの名無しさん:2009/12/25(金) 14:33:03
>>447 演習4と5
#include <iostream>
int main() {
char *str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *str2 = new char[sizeof(char) * (strlen(str1) + 1)];
char *p = str1 + strlen(str1) - 1, *q = str2; // ポインタを2個用いて
for (; str1 <= p; p--, q++) *q = *p;
*q = '\0';
std::cout << str2 << std::endl;
delete [] str2;
return 0;
}
#include <iostream>int main() {
int nhito, nkamoku;
std::cout << "クラスの人数は?"; std::cin >> nhito;
std::cout << "科目の数は?"; std::cin >> nkamoku;
int **table = new int*[nhito];
for (int i = 0; i < nhito; i++) {
table[i] = new int[nkamoku];
std::cout << i + 1 << "番目のの学生" << std::endl;
for (int j = 0; j < nkamoku; j++) std::cin >> table[i][j];
}
std::cout << "各科目の和は以下の通りです" << std::endl;
for (int j = 0; j < nkamoku; j++) {
int sum = 0;
for (int i = 0; i < nhito; i++) {
sum += table[i][j];
}
std::cout << sum << std::endl;
}
return 0;
}
450デフォルトの名無しさん:2009/12/25(金) 14:35:53
>>441
ありがとうございます。
大変助かりました。
451デフォルトの名無しさん:2009/12/25(金) 14:45:31
typedef で ? の型が未定義ならを
#if を使ってどう書けばいいでしょう?
452デフォルトの名無しさん:2009/12/25(金) 14:47:05
>>451
?の型ってなに?
453デフォルトの名無しさん:2009/12/25(金) 14:49:11
>>452
任意の型です、例えば
typedef unsigned char BYTE

#if ? BYTE
BYTEの型が未定義なら〜

このような感じで
#ifdef だと #define のしか対象にならなくて
454デフォルトの名無しさん:2009/12/25(金) 14:55:59
#ifndef 使えば?
455デフォルトの名無しさん:2009/12/25(金) 15:03:49
>>454
#if 〜 だと typedef の型定義は検出出来ないと思うけど
456デフォルトの名無しさん:2009/12/25(金) 15:07:38
>>455
typedefを宣言しているヘッダファイルをインクルードしているか否かで判断したらいいかと思います
457デフォルトの名無しさん:2009/12/25(金) 20:12:14
>>448449 エラーが出て、確かめたのですが、C++じゃありませんでした。

ktermを開いて、gcc -o 実行形式ファイル名
を打って、./a.out<return>と入力するとコンパイルされて作成された実行可能形式プログラムが実行されるやつでした。

どうかもう一度上記の方法でできるプログラミング組める方よろしくお願いします。


あらためて、
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: emacsで書いて、k-termでコンパイル。
[4] 期限: 今日までです!


458デフォルトの名無しさん:2009/12/25(金) 20:35:12
ただのCか
459デフォルトの名無しさん:2009/12/25(金) 20:43:29
課題1
#include <stdio.h>
#include <stdlib.h>

int main(void){
int *num,sum,n,i;

sum=0;

printf("データの数は\?");
scanf("%d",&n);
num=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d番目のデータを人力してください:",i+1);
scanf("%d",num);
sum+=(*num);
num++;
}

printf("和=%d",sum);

free(num);
return 0;
}
460デフォルトの名無しさん:2009/12/25(金) 22:39:02
これはひどい
461デフォルトの名無しさん:2009/12/25(金) 22:47:02
>>457
459 じゃないが,なるべく変えないように修正してみた。

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

int main(void){
int *num,sum,n,i;

sum=0;

printf("データの数は\?");
scanf("%d",&n);
num=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d番目のデータを人力してください:",i+1);
scanf("%d",&num[i]);
sum+=num[i];
}

printf("和=%d\n",sum);
free(num);

return 0;
}
462デフォルトの名無しさん:2009/12/25(金) 22:48:30
これはひどくない
463459:2009/12/25(金) 22:50:38
>>461
おー、そういう書き方もありましたな>ポインタ
完全に忘却しておりました(;・∀・)

ポインタを使う場合、どっちの方が良いんでしょうか?
464デフォルトの名無しさん:2009/12/25(金) 23:03:12
1:単元名 C言語
2:問題文
元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。

30年後の残高。
30年以内に複利の残高は単利の残高を上回るか。
上回るならば何年後か。

3:環境
よくわからないのですが、マックのXcodeで行ってます。

4:期限
できれば12月31日までにお願いします。
465デフォルトの名無しさん:2009/12/25(金) 23:07:06
>>463
どっちがいいとかじゃなくて、>>459は明らかな間違い
466デフォルトの名無しさん:2009/12/25(金) 23:12:09
>>457
448さんがやったのをCにしてみました。

演習3
#include <stdio.h>
#include <string.h>

void print(char *name) {
printf("%d : %s\n", strlen(name), name);
}

void print_all(char **names, int size) { // ポインタのボインタを用いる
int i;
for (i = 0; i < size; i++) print(names[i]);
}

int main(void) {
char *names[] = {"izumi", "Kanto", "Kudo", "Sato", "Sugawala", "Matuda", "Wada"};
print_all(names, sizeof(names) / sizeof(names[0]));
return 0;
}
467デフォルトの名無しさん:2009/12/25(金) 23:14:51
>>457
続いて演習4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
char *str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *str2 = NULL;

str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1));
char *p = str1 + strlen(str1) - 1, *q = str2; // ポインタを2個用いて
for (; str1 <= p; p--, q++) *q = *p;
*q = '\0';
printf("%s\n", str2);
free(str2);

return 0;
}
468デフォルトの名無しさん:2009/12/25(金) 23:16:00
>>457
演習5。連投すまんでした。
#include <stdio.h>
#include <stdlib.h>

int main(void) {
int nhito, nkamoku;
printf("クラスの人数は? "); scanf("%d", &nhito);
printf("科目の数は? "); scanf("%d", &nkamoku);
int **table = malloc(sizeof(int *) * nhito);
int i, j, sum = 0;
for (i = 0; i < nhito; i++) {
table[i] = malloc(sizeof(int) * nkamoku);
printf("%d番目の学生\n", i + 1);
for (j = 0; j < nkamoku; j++) {
scanf("%d", &table[i][j]);
}
}
printf("各科目の和は以下の通りです\n");
for (j = 0; j < nkamoku; j++) {
sum = 0;
for (i = 0; i < nhito; i++) {
sum += table[i][j];
}
printf("%d\n", sum);
}
for (i = 0; i < nhito; i++) { free(table[i]); }
free(table);
return 0;
}
469デフォルトの名無しさん:2009/12/25(金) 23:20:37
>>465
(´・ω・`)
大学4年間、それで通してきて誰にも指摘されなかった・・・
470デフォルトの名無しさん:2009/12/25(金) 23:25:52
>>469
#include <stdio.h>
#include <stdlib.h>

int main(void){
  int *num, sum=0, n, i;

  printf("データの数は?"); scanf("%d", &n);
  num = (int *)malloc(sizeof(int)*n);
  for(i=0; i<n; i++){
    printf("%d番目のデータを人力してください:", i+1);
    scanf("%d", num+i);
    sum += *(num+i);
  }
  printf("和=%d", sum);
  free(num);
  return 0;
}
471デフォルトの名無しさん:2009/12/25(金) 23:27:09
ポインタを直接弄るのがアウト?
472デフォルトの名無しさん:2009/12/25(金) 23:32:17
>>471
#include <stdio.h>
#include <stdlib.h>

int main(void){
  int *num,sum,n,i,*tmp;

  sum=0;

  printf("データの数は\?");
  scanf("%d",&n);
  tmp=num=(int *)malloc(sizeof(int)*n);
  for(i=0;i<n;i++){
    printf("%d番目のデータを人力してください:",i+1);
    scanf("%d",num);
    sum+=(*num);
    num++;
  }

  printf("和=%d",sum);

  free(tmp);
  return 0;
}
473デフォルトの名無しさん:2009/12/25(金) 23:32:55
>>469
free するアドレスが間違ってるからセグメンテーションフォルトで落ちるだけの話
malloc で貰ったアドレスは free するまで大事にとっておいて、コピーを弄れば問題なし
474デフォルトの名無しさん:2009/12/25(金) 23:34:39
>>473
ありがとうございます。
そういうことだったんですね。
475デフォルトの名無しさん:2009/12/26(土) 03:14:15
勉強になるなあ
476デフォルトの名無しさん:2009/12/26(土) 05:25:57
Cやったことないのバレバレw
477デフォルトの名無しさん:2009/12/26(土) 07:16:21
478448:2009/12/26(土) 09:34:55
>>466-468超おつです!

>>457
(#^ω^)ピキピキ
>>442で [3.3] 言語: C++ と明記してあるやんか…。
479デフォルトの名無しさん:2009/12/26(土) 18:07:02
初学者はc と c++ の区別もつかないことがよくわかりました。というか kterm でコンパイルとしか書いてないのでね。
480デフォルトの名無しさん:2009/12/26(土) 21:49:19
いや、初心者とか言うレベルじゃねえだろ流石に
まさかつられたのか
481デフォルトの名無しさん:2009/12/26(土) 22:19:26
釣りにしては問題はちゃんとしていた気がするが。
「C/C++」っていっしょくたに扱うことがあるから、このスレに宿題投げるような「単位必要だから仕方なく講義取ってます」って人は区別ついてなくても不思議はない気がするな。
教員がまともに説明してないのか授業をまともに聞いていないのか知らんがコンパイラをK-termとか言うぐらいだし
482デフォルトの名無しさん:2009/12/26(土) 23:14:33
Makefileの書き方が分からない…
emacsでコンパイルできない…
483デフォルトの名無しさん:2009/12/27(日) 07:59:25
>>482
だれ?
484デフォルトの名無しさん:2009/12/27(日) 13:16:52
>>482
本でてるから買って読め。
485デフォルトの名無しさん:2009/12/27(日) 14:07:10
>>481
C++ で C 風に書くことも出来ますし。
486 ◆Wt4SdDMxQ6 :2009/12/28(月) 00:39:46
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10312.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年12月28日23:30まで
[5] その他の制限:特になし
487デフォルトの名無しさん:2009/12/28(月) 01:14:50
[1] 授業単元:計算機入門及び演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10311.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月07日
[5] その他の制限: 特にありませんが、アルゴリズムを記述しなければならないので、できるだけ簡単にお願いします。
            主に授業で扱った内容は、関数、条件分岐、繰り返し文、配列などです。
488デフォルトの名無しさん:2009/12/28(月) 01:55:20
489デフォルトの名無しさん:2009/12/28(月) 13:17:26
[1] 授業単元:
画像解析
[2] 問題文(含コード&リンク):
画像を、好きな倍率で大きくしたり小さくしたりするプログラムを作成してください
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
1月7日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
490デフォルトの名無しさん:2009/12/28(月) 14:08:51
typedef struct
{
 int type;
 char [20];
} data_main;

typedef struct
{
 int x,y,z;
} vec;

として、
mallloc で 構造体 data_main + vec のサイズ分メモリを確保したとき
void *data = malloc( sizeof(data_main) + sizeof(vec) );

その確保したメモリをそれぞれの構造体サイズ分でポインターへ割り当てしたいのですが

data_main *main_p = // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て
vec *vec_p =  // 確保したメモリ(data)から構造体 vecのサイズ分を割り当て

ここの処理方法が分かりません
どうすれば良いでしょうか?

491デフォルトの名無しさん:2009/12/28(月) 14:21:01
>490
data_main *main_p = data; // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て
vec *vec_p = (vec *)((char *)data + sizeof(data_main));?// 確保したメモリ(data)から構造体 vecのサイズ分を割り当て

data_main *main_p = (data_main *)((char *)data + sizeof(vec)); // 確保したメモリ(data)から 構造体 data_main のサイズ分を割り当て
vec *vec_p = data;?// 確保したメモリ(data)から構造体 vecのサイズ分を割り当て
492デフォルトの名無しさん:2009/12/28(月) 14:23:27
最初から別々に確保すりゃいいのに。

どうしてもまとめて扱う必要があるなら、一つの構造体にするとか。
493デフォルトの名無しさん:2009/12/28(月) 14:27:48
>>491
助かりました

>>492
ある事情で確保するメモリに+αの情報を
付けておかないといけなくて
494デフォルトの名無しさん:2009/12/28(月) 14:38:09
その data_main の中身から察すると、シリアライズか動的な型かね?
動的な型なら >>492 の1つの構造体の中に union が居る ってな感じにしそうだが
495デフォルトの名無しさん:2009/12/28(月) 14:44:35
>>494
そんな感じです

冷静に考えてみれば実に簡単な処理でしたね
こんな初歩的な質問に返答してもらえて感謝です
496デフォルトの名無しさん:2009/12/29(火) 02:46:25
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10313.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2008
 [3.3] 言語:C++
[4] 期限:1月1日
[5] その他の制限:
497デフォルトの名無しさん:2009/12/30(水) 01:05:18
[1] C言語演習
[2]次のコードをif ,while ,do while文を用いずに同一の動作をするように書き換えなさい
char * strstr (char *buf, char *sub){
char *bp,*sp;
if (!*sub)return buf;
while (*buf){
bp = buf;sp = sub;
do {
if (!*sp)return buf;
} while (*bp++ == *sp++);
buf += 1;
}
return 0;
}
[3] Windows vista/Visual C++ 2008/C言語
[4] 2010/1/10迄
[5] 同一の動作をすることがわかるように、幾つかの場合について元コードと書き換えコード
に同じパラメータを与えて実行させ結果を比較するmain関数を付けること

よろしくお願いします。
498デフォルトの名無しさん:2009/12/30(水) 03:32:20
499デフォルトの名無しさん:2009/12/30(水) 08:09:31
char * strstr2(char *buf, char *sub)
{
char *bp, *sp;

for(bp=buf, sp=sub; *sp && *bp==*sp; bp++, sp++);

return *buf ? *sp ? strstr2(buf+1, sp) : buf : 0;
}
500デフォルトの名無しさん:2009/12/30(水) 08:17:18
char * strstr2(char *buf, char *sub)
{
char *bp, *sp;

for(bp=buf, sp=sub; *sp && *bp==*sp; bp++, sp++);

return *buf ? *sp ? strstr2(buf+1, sub) : buf : 0;
}
だった
501デフォルトの名無しさん:2009/12/30(水) 09:53:40
>>496
課題2
main作ってない&動作確認していない&こんなんでいいなら

class Account
{
private: /* 以下追加 */
  int number; // 通し番号
  static int _number;
};


int Account::_number = 0;
Account(string n, string num, long z, Date op)
  name(n), no(num), balance(z), open(op)
{
  number = _number;
  _number++;
}
502デフォルトのつっこみさん:2009/12/30(水) 10:46:00
>>501
識別番号がプライベートなのでmain()で確認できません。
それともGetNumber();を作りますか?
503デフォルトの名無しさん:2009/12/30(水) 11:03:54
>>502
public属性にしてもいいし、GetNumber()をつくってもいいんじゃない
504デフォルトの名無しさん:2009/12/30(水) 11:13:35
505504:2009/12/30(水) 11:39:47
>>496
一応動作確認してみたら、
コピーコンストラクタにバグあった。

String::String(const String& rhs)
{
  s = new char[rhs.len+1];
  strcpy(s, rhs.s);
  len = rhs.len;
}

#include <iostream>
int main()
{
  String s1("hoge"), s2(s1);
  String s3(s1+"foo");
  std::cout << s1 << std::endl;
  std::cout << s2 << std::endl;
  std::cout << s3 << std::endl;
  return 0;
}

# 「+=」と比較演算子のオーバーロードが欲しいなぁ
506デフォルトの名無しさん:2009/12/30(水) 12:04:46
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
勇者が10×10の盤面をキー入力によって移動し、
ある座標(x、x)に勇者が移動したらモンスターと戦闘になり、
勝ち負けを判定するプログラムを作成せよ。
(戦闘や勝ち負け判定は以下リンクのソースを参考に…)
http://web.keio.jp/~young-blood/rpgsource.txt
[3] 環境
 [3.1] OS: Linux or Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限:1月4日まで
[5] その他の制限:
勇者が10×10の盤面をキー入力によって移動するプログラムは作成済みなので、
後は勇者が座標(x、x)に移動した場合に戦闘が起こり、
戦闘の勝ち負けを判定する(勝った場合はそのままキー入力を続け、負けた場合はゲームオーバー)
プログラムを作るだけなのですが、
プログラム初心者の私には複雑すぎて何がなんだか…orz
ご存じの方いましたらよろしくお願いいたします
リンクのソースを参考にしていただければ幸いです。
507デフォルトの名無しさん:2009/12/30(水) 12:34:51
>>506
コピペミスってないかい?
同じ関数で中身が違うのがあったり、重複が酷い。
508506:2009/12/30(水) 12:51:21
>>507
すみません…コピペミスあったかもですorz
再度コピペした参考ソース貼っときます…。
http://web.keio.jp/~young-blood/rpg2.txt
509デフォルトの名無しさん:2009/12/30(水) 13:13:07
>>497
※mainの中身はネット上の情報を(ttp://www9.plala.or.jp/sgwr-t/lib/strstr.html)参考にしました。
char *strstr2(char *buf, char *sub) {
int i = 0;
for (; *buf != '\0' && *sub != '\0' && *buf != *sub; buf++) {}
for (i = 0; i < strlen(buf) && buf[i] == sub[i]; i++) {}
return 0 == strlen(sub) || 0 < i && strlen(sub) < strlen(buf) ? buf : 0;
}
int main() {
char s1[] = "abcdefghijklmn"; /* 検索対象文字列 */
char s2[] = "defgh"; /* 一致する場合 */
char s3[] = "xyz"; /* 一致しない場合 */
char s4[] = "abcdefghijklmnopqr"; /* 検索対象文字列より長い場合 */
char s5[] = ""; /* \0 */

printf("一致する場合 : %s\n", strstr(s1, s2));
printf("一致しない場合 : %s\n", strstr(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr(s1, s4));
printf("\\0 : %s\n", strstr(s1, s5));

printf("一致する場合 : %s\n", strstr2(s1, s2));
printf("一致しない場合 : %s\n", strstr2(s1, s3));
printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
printf("\\0 : %s\n", strstr2(s1, s5));
return 0;
}
510504:2009/12/30(水) 13:32:55
>>505
よく見たら、加算演算子で左辺も変更されてるぅぅ。。

//String& operator+(const char* rhs); // 下記に修正
String operator+(const char* rhs) const;

String String::operator+(const char* rhs) const
{
  std::string tmp(s); tmp += rhs;
  return String(tmp.c_str());
}
511デフォルトの名無しさん:2009/12/30(水) 14:08:04
>>508
シンプルだけど、これで八割以上魔王に勝てる。
int power_of_2(int n);
int user_routin(
int level, int life, int maxlife, int attack, int rest_exp, int monster, int exp, int position
) {
int x;
double liferate = (double)life / maxlife;
double risk = 0;
int battle_level = position / 5 + 1;
int battle_life = battle_level * battle_level * 2;
int battle_attack = (power_of_2(battle_level + 1) - 1) / 4;
if (battle_attack > 100) battle_attack /= 2;

if (position == 50) {
x = 1; // 逃げられないので戦う
} else if (liferate < .8) {
x = 3; // ちょっと食らったらすぐ、回復するまで後戻り
} else if (0 < monster) {
battle_life *= monster;
battle_attack *= battle_attack;
risk = (double)battle_attack / life;
x = 0.3 < risk ? 3 : 1; // 危険になったら後戻り
} else {
x = 2; // 勇者だから前進
}
return x;
}
512デフォルトの名無しさん:2009/12/30(水) 14:31:59
>>497
for文を使うなんて軟弱な事はせずに解いた
int isprefixof(char*x,char*y){
    return *y ? *x == *y ? isprefixof(x+1,y+1) : 0 : 1;
}
char *strstr2 (char *buf, char *sub){
    return isprefixof(buf,sub) ? buf : *buf ? strstr2(buf+1,sub) : 0;
}
#include<stdio.h>
int main() {
    char s1[] = "abcdefghijklmn"; /* 検索対象文字列 */
    char s2[] = "defgh"; /* 一致する場合 */
    char s3[] = "xyz"; /* 一致しない場合 */
    char s4[] = "abcdefghijklmnopqr"; /* 検索対象文字列より長い場合 */
    char s5[] = ""; /* \0 */

    printf("一致する場合 : %s\n", strstr2(s1, s2));
    printf("一致しない場合 : %s\n", strstr2(s1, s3));
    printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
    printf("\\0 : %s\n", strstr2(s1, s5));

    printf("一致する場合 : %s\n", strstr2(s1, s2));
    printf("一致しない場合 : %s\n", strstr2(s1, s3));
    printf("検索対象文字列より長い場合 : %s\n", strstr2(s1, s4));
    printf("\\0 : %s\n", strstr2(s1, s5));
    return 0;
}
513512:2009/12/30(水) 14:35:47
あーmain関数がなんか適当に勘違いして書き変えてた。
使うときは>>509さんのmain関数に戻しておいて(あと、#include<string.h>をたしといて)。
514508:2009/12/30(水) 14:39:37
すいません…説明不足でしたorz


□□□□□
□□□□□
□□☆■□
□□□□□
□□□□□

☆=勇者
■=モンスター

この5×5の盤上を勇者が動き、
モンスターと遭遇するプログラムは作成済みなので、
後は508のソースを参考にしてモンスターと隣合わせになった時に起こる
戦闘と勝ち負け判断のプログラムを作成するだけです。
515デフォルトの名無しさん:2009/12/30(水) 15:46:17
>>512さんスゲー。
俺も俺も!と思って必死でforなくしてみたけど、
似たようなの、かつ改悪みたいになってしまった。
lispの人で末尾再帰がどうのに拘る人は、
スカッとした書き方を出来たりできるのだろうか。

int enough(char *a, char *b) {
return *a == *b ? enough(a + 1, b + 1) : *b == '\0' ? 1 : 0;
}
char *strstr4(char *buf, char *sub) {
return strlen(buf) < strlen(sub) ? 0 : *sub == '\0' || enough(buf, sub) ? buf : strstr4(buf + 1, sub);
}
516デフォルトの名無しさん:2009/12/30(水) 15:49:01
ちょい改善。
int enough(char *a, char *b) {
return *a == *b ? enough(a + 1, b + 1) : *b == '\0' ? 1 : 0;
}
char *strstr4(char *buf, char *sub) {
return strlen(buf) < strlen(sub) ? 0 : enough(buf, sub) ? buf : strstr4(buf + 1, sub);
}
517デフォルトの名無しさん:2009/12/30(水) 16:00:45
別関数使うほうがよっぽど軟弱だと思うが
518デフォルトの名無しさん:2009/12/30(水) 16:48:41
じゃあこれで
char *strstr2(char *buf, char *sub) {
char *t;
return *sub ? *buf ? *buf==*sub && (t=strstr2(buf+1,sub+1)) ? t-1 : strstr2(buf+1,sub) : 0 : buf;
}
519512:2009/12/30(水) 16:49:35
>>515
enoughにバグがあるよ。
たとえばa==bのときに無限の彼方に旅立ってしまう。
char* p= "Hoge";
strstr4(hoge,hoge);
あとstrstr4の中でstrlenを呼び出すと計算量がO(N^2)に跳ね上がるから注意
他にも細かい問題があるけど割愛

>>517
うーんwhile文使うなって問題で
for文使うって発想のほうが正直俺としてはひどいと思う。
while(expr)がfor(;expr;)と互換なんだから。

ただ、別関数にしてるのは指摘どおり、正直妥協の産物。
どうしても別関数作らないと奇麗に書けなかったから逃げてしまった。
520デフォルトの名無しさん:2009/12/30(水) 16:58:13
その理屈で言うなら、if使うなで?使うのもアウトだろw
521デフォルトの名無しさん:2009/12/30(水) 17:06:56
>>497が大人気だな
522デフォルトの名無しさん:2009/12/30(水) 17:08:38
>>520
おれも最初にそれ思ったw しかし…forも三項演算子も使わないでできるだろうか…。
523デフォルトの名無しさん:2009/12/30(水) 17:13:36
条件演算子はオーバーロードできるの?
524512:2009/12/30(水) 17:14:36
>>522
もちろん出来る。
char *strstr2 (char *buf, char *sub){
LABEL1:
char*x = buf,*y = sub;
LABEL2:
switch(*y)case '\0':return buf;
switch(*x++ == *y++)case 1:goto LABEL2;
switch(*buf++)case'\0':return 0;
goto LABEL1;
}
まぁ半分ギャグだけど
525デフォルトの名無しさん:2009/12/30(水) 17:16:20
>>524
ばかもん!w
526デフォルトの名無しさん:2009/12/30(水) 17:18:05
>>522
switch とか 関数ポインタの配列を使う手があるよ
527デフォルトの名無しさん:2009/12/30(水) 17:21:02
>>524
とても美しい解決方法だな。
gotoは使うべきだ。
528デフォルトの名無しさん:2009/12/30(水) 17:22:09
たいした奴だ…。
529デフォルトの名無しさん:2009/12/30(水) 18:05:33
[1] 授業単元:構文を利用したプログラム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10309.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 12月31日まで
[5] その他の制限:今習ってるプラグラム参考例↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10310.txt

よろしくお願いします。
530デフォルトの名無しさん:2009/12/30(水) 18:09:07
531デフォルトの名無しさん:2009/12/30(水) 19:08:50
同じ問題を複数の人が依頼しているのを見ると
その大学(専門学校?)の将来が不安になってしまうよね。

まぁ別にそいつらが考える力をなくしてくれても全然どうでもいいけど
532デフォルトの名無しさん:2009/12/30(水) 19:18:52
検索する程度の頭もないから、こんな簡単な問題すら解けないんだろうな。
533デフォルトの名無しさん:2009/12/30(水) 21:59:29
面倒な作業は俺頭良いって勘違いしてるオタクちゃんに任せて、浮いた時間で女遊びするんだよ。
534 ◆vCL77Embvw :2009/12/30(水) 22:05:54
[1] 授業単元:C言語応用
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10317.txt
[3] 環境
 [3.1] OS:wiindows vista
 [3.2] コンパイラ名とバージョン:vs2008
 [3.3] 言語:C
[4] 期限: 2010/01/06 14:59まで
[5] その他の制限:変更するのはif(□ != □) の□の部分のみ

お願いします。
535デフォルトの名無しさん:2009/12/30(水) 22:21:04
for(m=0; m<n; m++) printf("%d%c", a[m], m==i ? '*' : ' ');
536デフォルトの名無しさん:2009/12/30(水) 23:11:39
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
  課題1資料 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt
  課題1    http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10319.txt
  課題1応用 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10320.txt
  課題2    http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10321.txt
  課題2応用 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10322.txt
  課題3    http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10323.txt 
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VS2008
 [3.3] 言語: C++
[4] 期限: 2010年1月17日まで

冬休みということで課題が多いです。お解りになられる方がいましたらよろしくお願いいたします。
537デフォルトの名無しさん:2009/12/30(水) 23:21:28
どっかで見たような問題ばっかりだな
538 ◆vCL77Embvw :2009/12/30(水) 23:58:37
>>535
ありがとうございます。しかし、先生にif(□ != □) の□の部分のみを弄るよう課されているのです。
どうかそれをifの文にして頂けないでしょうか。
539デフォルトの名無しさん:2009/12/31(木) 00:10:22
if(i!=m)だけど、そこだけ弄ったんじゃ元のコードでは期待通りには動かない。
540 ◆vCL77Embvw :2009/12/31(木) 00:17:45
>>539
コンパイルし実行してみましたが、確かに期待する結果は出ませんでした。
>>535の答が最も最適なのでしょうか。
541 ◆vCL77Embvw :2009/12/31(木) 00:22:48
>最も最適
日本語が少しおかしかったですね、「最も適している」に訂正します。
542デフォルトの名無しさん:2009/12/31(木) 00:38:52
for(m=0;m<n;m++) {
printf("%d",a[m]);
if(i != m) printf(" ");
else printf("*");
}

{}で囲めばいい。
543デフォルトの名無しさん:2009/12/31(木) 00:43:59
>>536
適当に全部やった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10324.cpp
544 ◆vCL77Embvw :2009/12/31(木) 01:34:53
>>542
ありがとうございます。私の課題に時間を割いていただき感謝します。
545デフォルトの名無しさん:2009/12/31(木) 14:07:48
[1] 授業単元:基礎プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt
               二問目のstep2の「課題11-2」という文は「一問目」の間違いです。すいませんでした。
[4] 期限:一月八日まで
[5] その他の制限:まだ習い始めたばかりですので基礎的なこともわかるかわからないかです。
           関数定義やreturn文などを習ったばかりです。
           できる限りは頑張ったのですがどうやら自分の力では出来る見通しがありません。
           わずらわしいかもしれませんが、宜しくお願いします。
546デフォルトの名無しさん:2009/12/31(木) 14:26:27
[1] 授業単元: プログラミング応用
[2] 問題文(含コード&リンク):
任意の奇数n(nは15以下)を入力しn×nの魔方陣を出力する。
そして、作成した魔方陣の縦、横、斜めの合計値も同時に出力せよ。
ただし、1は必ず一番左の列の真ん中に置くこと。
(例)
n=3の時
          15
  6  7  2 15
  1  5  9 15
  8  3  4 15
 15 15 15 15

[3] 環境
 [3.1] OS:vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C / C++
[4] 期限:2009年1月6日
  冬休みの課題なのですが、考えて色々調べたのですがわかりません。どなたかわかる方がいればご教授お願いします。
547デフォルトの名無しさん:2009/12/31(木) 15:48:38
[1] 授業単元: 情報数学
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: 出来ればC
[4] 期限: [無期限]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

ヒントだけでも与えていただければと思い投稿させて頂きました。
参考になるhpなどありましたらお願いしますm(_ _)m

問)同時整数関係を見つけるプログラムを考えなさい。
 整数の解を求めるプログラムと、複素数の解を求めるプログラムを考え、
 それを組み合わせることで両方の解を同時に求め示すプログラムについて考えなさい。

548デフォルトの名無しさん:2009/12/31(木) 16:38:15
>>546
#include <stdio.h>

int main(void)
{
int i, j, k, n, ti, tj, sum, a[15][15] = {0};

scanf("%d", &n);

for(i=n/2,j=0, k=1; k<=n*n; k++) {
a[i][j] = k;
ti = i ? i - 1 : n - 1;
tj = j ? j - 1 : n - 1;
if(a[ti][tj]) j = (j + 1) % n;
else i = ti, j = tj;}

for(i=0, sum=0; i<n; i++) printf("    ", sum += a[n-1-i][i]);
printf("%4d\n", sum);

for(i=0; i<n; i++) {
for(j=0, sum=0; j<n; j++) printf("%4d", a[i][j], sum += a[i][j]);
printf("%4d\n", sum);}

for(i=0; i<n; i++) {
for(j=0,sum=0; j<n; j++) sum += a[j][i];
printf("%4d", sum);}

for(i=0, sum = 0; i<n; i++) sum += a[i][i];
printf("%4d\n", sum);

return 0;
}
549デフォルトの名無しさん:2009/12/31(木) 17:01:58
>>548
本当にありがとうございます。
あと、期限の年数を間違えていてすいませんでした。
550デフォルトの名無しさん:2009/12/31(木) 22:20:54
551デフォルトの名無しさん:2009/12/31(木) 22:22:29
すまん、間違えた>>550>>545の宿題
552デフォルトの名無しさん:2009/12/31(木) 22:45:06
#include <stdio.h>
int main(void) {
char dat[]={
-29, -126, -120, -29, -127, -124, -29,
-127, -118, -27, -71, -76, -29, -126, -110
};
fwrite(dat, sizeof(char), sizeof(dat), stdout);
return 0;
}
553デフォルトの名無しさん:2010/01/01(金) 00:27:30
>>545
すみません、忘れてました。
[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C++
554デフォルトの名無しさん:2010/01/01(金) 07:57:45
さいきんじゃあ、C++だってことらしい。ゆるす
555デフォルトの名無しさん:2010/01/01(金) 09:56:01
>>554
??
556デフォルトの名無しさん:2010/01/01(金) 19:05:34
>>547
同時整数関係について情報をください。web でもいいです。
それとも同次整数関係ですか?
557デフォルトの名無しさん:2010/01/02(土) 21:44:48
[1] 授業単元: 情報数学
[2] 問題文(含コード&リンク):
オイラー級数を用いて、πの近似値を求めよ。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語:C
[4] 期限:2010年1月15日
558デフォルトの名無しさん:2010/01/03(日) 17:10:16
>>556
ごめんなさい、そうです。
同次整数関係です。
<Simultaneous Integer Relation>と書いてあったのでてっきり。
すみません。
559デフォルトの名無しさん:2010/01/03(日) 17:36:34
<Simultaneous Integer Relation>と書いてあったのでてっきり。
すみません。
訳すと同時になってしまうんですが、
なかなかヒットせず・・・。
訳がちがう気もするのですが、思いついたものではほとんど情報を得られず。
560デフォルトの名無しさん:2010/01/03(日) 19:55:25
>>557
#include<stdio.h>
#include<math.h>
double eular(int n){
    double r = 0;
    for(int i=n;i;--i)
        r += 1.0 / i / i;
    return r;
}
int main(){
    printf("%f\n",sqrt(eular(1000000)*6));
}
561560:2010/01/03(日) 19:56:50
修正 C言語だったの忘れてた
× for(int i=n;i;--i)
○ int i=n;for(;i;--i)

562デフォルトの名無しさん:2010/01/04(月) 03:10:44
数学素人の自分は
ttp://www14.ocn.ne.jp/~kk62526/pi/index.html
こっちのアルゴリズムを想像してた

でもこの宿題は
速度は遅くても構わないから
固定小数点多倍長のライブラリを自作してみましょうね
ってな趣旨だと思た
563デフォルトの名無しさん:2010/01/04(月) 18:03:31
>>560
ありがとうございます

>>562
そうゆうことですよね…初心者すぎる自分はなにをすればいいかわかりませんでした
564デフォルトの名無しさん:2010/01/06(水) 12:42:22
以前に質問したのですが、時間に余裕がなくなかったのでもう一度書き込みます。
どうか宜しくお願いします。

[1] 授業単元:基礎プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt
               二問目のstep2の「課題11-2」という文は「一問目」の間違いです。すいませんでした。
[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C++
[4] 期限:一月七日 午後七時まで
[5] その他の制限:まだ習い始めたばかりですので基礎的なこともわかるかわからないかです。
           関数定義やreturn文などを習ったばかりです。
           できる限りは頑張ったのですがどうやら自分の力では出来る見通しがありません。
           わずらわしいかもしれませんが、宜しくお願いします。
565デフォルトの名無しさん:2010/01/06(水) 13:39:28
>>564
一つ確認。
scanf()を使う時点で、C++じゃなくてCなんだが、言語にはC++と書いてある。
ほんとはどっち?
566デフォルトの名無しさん:2010/01/06(水) 13:56:50
>>565
cstdio じゃなくて stdio.h を include してるから C じゃね
567デフォルトの名無しさん:2010/01/06(水) 14:01:12
これポインタ使わないと無理なような・・・
568デフォルトの名無しさん:2010/01/06(水) 14:06:12
>>564はCじゃないとコンパイルが通らないな
mainがintなのにreturnが無いわ
569デフォルトの名無しさん:2010/01/06(水) 14:06:16
570デフォルトの名無しさん:2010/01/06(水) 14:06:26
問題1

#include <stdio.h>
#include <math.h>

int input(float data[], int max){
int i;
for(i=0;i<max;i++){
printf("データを一つ入力してください:");
scanf("%f",&data[i]);
if(data[i]<=0){break;}
}
return i;
}

float average(float data[], int n){
int i,sum=0;
for(i=0;i<n;i++){sum+=data[i];}
return sum/n;
}

float variance(float data[], int n){
float v=0.0,s;
int i;
s=average(data, n);
for (i=0;i<n;i++){v+=(data[i]-s)*(data[i]-s);}
return v/=n-1;
}
571デフォルトの名無しさん:2010/01/06(水) 14:11:42
問題2
#include <stdio.h>
#include <math.h>

int input(float data[], int max){
int i;
for(i=0;i<max;i++){
printf("データを一つ入力してください:");
scanf("%f",&data[i]);
if(data[i]<=0){break;}
}
return i;
}

float max(float data[], int n){
int m=data[0],i;
for(i=1;i<n;i++){
if(m<data[i]){m=data[i];}
}
return m;
}

int main(void){
float d[100];
int n;
double s;

n = input(d, 100);
printf("最大値は%fである\n", max(d,n));
}
572デフォルトの名無しさん:2010/01/06(水) 15:43:32
[1] 授業単元: 5元:プログラミング演習III
[2] 問題文 下記参照
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C++
[4] 期限: [2010年1月20日16:40まで]
[5] 特になし

問題(5)
実行するとカラーダイヤログを表示し、選択したカラーをクリップボードに送る処理を記述せよ
573デフォルトの名無しさん:2010/01/06(水) 20:13:31
以前>>209で投稿しましたが、問題が詳細になり期限が延びたので再度投稿させて頂きます

[1] 授業単元:Cプログラミング入門
[2] 問題文(含コード&リンク):
五目並べの作成
コンピューターによる着手の生成関数の作成

詳細
サンプル中の問題2の部分に
・自分の石を五つ連続で並べるように置く
・相手が石を三つ連続で並べたら、その両端のどちらかに石を置く
というプログラムを加える
サンプルプログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10289.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年1月8日18:00まで
[5] 問題1は264さんのおかげで解決しましたので大丈夫です

すいませんが、よろしくお願いします
574デフォルトの名無しさん:2010/01/07(木) 02:36:50
>>572
> 選択したカラーをクリップボードに送る処理
kwsk
575デフォルトの名無しさん:2010/01/07(木) 03:46:52
[1]C言語入門
[2]2つの複素数の和と積を計算して表示するプログラムを作成せよ。
構造体complexを定義し、和の複素数を返すadd関数、積の複素数を返すmul関数、複素数を表示するprint関数をそれぞれ作成し
mainでは2つの複素数をキーボードから読み込み、関数を呼ぶ。
虚数部にはiを付加せよ。
[3.1] Linux
[3.2] gcc 3.4
[3.3] C
[4] 2010/1/7/16:00
[5] まったくのゼロからおそらく一般的な順番通りに習ってきました。
構造体までに既に習ってるだろう範囲でなんとかお願いしますm(__)m
576デフォルトの名無しさん:2010/01/07(木) 04:15:55
>>560
1000000 ぷっ
94883104
577デフォルトの名無しさん:2010/01/07(木) 05:09:10
578デフォルトの名無しさん:2010/01/07(木) 12:03:12
>>574
ペイント(mspaint)の色の選択で、色を選択したら(例えば赤を選択したら)、その選択した色(ここでは赤なのでFF0000)をクリップボードに送る(クリップボードにFF0000が入る)処理です
579デフォルトの名無しさん:2010/01/07(木) 13:34:25
>>576
なにかおかしい?
94883104 ってなに?
580デフォルトの名無しさん:2010/01/07(木) 14:56:02
581デフォルトの名無しさん:2010/01/07(木) 15:06:59
>>580
ありがとうございます
582デフォルトの名無しさん:2010/01/07(木) 16:37:17
【質問テンプレ】
[1] 授業単元:セミナー
[2] 問題文(含コード&リンク):∫(x=0,4)∫(y=0,3)∫(x=0,2) 4*x^3 + x*y^2 + 5*y + y*z + 6*z dz dy dx
               を解くプログラムを書け
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] Microsoft Visual Studio
 [3.3] 言語:C/C++/どちらでも可
[4] 期限: 2010年01月09日 00:00 要は明日
[5] その他の制限:特になし
やり方のアドバイスだけでも教えていただけたら幸いです
答えは2040です。printf("2040");
だけでは無理です
583デフォルトの名無しさん:2010/01/07(木) 17:08:02
puts("2040");
584582:2010/01/07(木) 17:19:30
>>583
あ〜
ありがとうございます
585デフォルトの名無しさん:2010/01/07(木) 18:01:40
>>576
ちゃんと実行できましたよ。C99 ですけど。
586デフォルトの名無しさん:2010/01/07(木) 18:41:26
>>582
∫(x=0,4)∫(y=0,3)∫(z=0,2) 4*x^3 + x*y^2 + 5*y + y*z + 6*z dz dy dx
≒ Σi∈[0:Nx-1] (Σj∈[0:Ny-1] (Σk∈[0:Nz-1]
   4*(iΔx)^3 + (iΔx)*(jΔy)^2 + 5*(jΔy) + (jΔy)*(kΔz) + 6*(kΔz) )))
   (但、Δx=4/Nx、Δy=3/Ny、Δz=2/Nz)
587デフォルトの名無しさん:2010/01/07(木) 18:47:55
閉じ括弧の数間違えた>>586
精度上げたいなら単に分割数増やすか
シンプソンの3/8公式でも使え
588デフォルトの名無しさん:2010/01/07(木) 19:14:04
[1] 授業単元: 情報プログラム

[2] 問題文(含コード&リンク):
  次の関数の積分を、台形公式を使って求めたい。
  ただし、積分区間は(0,2)きざみ幅はh=0.01とする。
  f(x)=(4-x2)1/2 

 ※台形公式は積分区間を(a,b)とすると n=(b-a)/h
S=h*{1/2(f(a))+f(b))+f(a+h)+f(a+2h)+…+f(a+(n-1)h}となる。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: 出来ればC
[4] 期限: [1/9]
[5] その他の制限: 特になし

よろしくお願いします。
589デフォルトの名無しさん:2010/01/07(木) 19:31:37
>>588
#include <stdio.h>
double f(double x){ return (4 - x*x) / 2; }
double integral(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = (f(a) + f(b)) / 2;
for(int i = 1; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", integral(0, 2, 0.01));
}

VCで確認
590デフォルトの名無しさん:2010/01/07(木) 20:39:09
>>586
最後に微小量 凅凾刧凾嘯かけ忘れてやいませんか?
591582:2010/01/07(木) 21:16:06
>>587
ありがとうございます!
やってみます
592デフォルトの名無しさん:2010/01/07(木) 23:12:46
期限が延びたので再度投稿させて頂きます
[1] 授業単元:構文
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10309.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 1月11日まで
[5] その他の制限:今習ってるプラグラム参考例↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10310.txt

恐れ入りますが、再度よろしくお願いします。
593デフォルトの名無しさん:2010/01/07(木) 23:28:22
#include <stdio.h>

struct sankaku{
int teihen;
int takasa;
double menseki;
};

int main(){
struct sankaku triangle1 = {2, 8, 0.0};
struct sankaku triangle2 = {3, 6, 0.0};
triangle1.menseki = triangle1.teihen * triangle1.takasa / 2.0;
triangle2.menseki = triangle2.teihen * triangle2.takasa / 2.0;
printf("triangle1 の面積: %f\n", triangle1.menseki);
printf("triangle2 の面積: %f\n", triangle2.menseki);
return 0;
}
594デフォルトの名無しさん:2010/01/07(木) 23:37:34
>>570
>>571
回答ありがとうございます。田舎行ってて返事が書けませんでした。
ただ問題一の平均値がどうしても上手く出ません。
あと、問題二で最大値が8.1になるように入力すると8.0と表示されます。
どうしてですか?
すみませんがお願いします。
595デフォルトの名無しさん:2010/01/07(木) 23:47:52
>>594
どう入力して何が出力されたのか書かないと分からんだろう

8.1と入力して8.0になるのは小数点以下が読まれてない可能性があるな
scanfの後にprintfで読んだ値を表示するようにして正しく読まれてるか確認して
596デフォルトの名無しさん:2010/01/07(木) 23:48:38
>>595
途中で int に代入してるからだよ
597デフォルトの名無しさん:2010/01/07(木) 23:54:40
問題一は
1.0
2.0
3.0
4.0
-1
と入力すると平均値が2.000000となる、正解は2.500000

問題二はどういうことですか?intに代入?…
598デフォルトの名無しさん:2010/01/07(木) 23:55:35
>>596
本当だw
>>570-571は自分の環境で確認しなかったのか
599デフォルトの名無しさん:2010/01/08(金) 00:02:10
>>597
問題1はaverage()のreturn分のsum/nが両方int型なので切り捨てられて2になる
問題2はmax()の中のmがint型なので切り捨てられる
600デフォルトの名無しさん:2010/01/08(金) 00:05:06
>>599
とりあえず問題の部分をintからfloatに変えたらどんどんエラーが…
601デフォルトの名無しさん:2010/01/08(金) 00:05:43
ついでに問題1 は sum が int なので加算するたびに切り捨てが起こる
602デフォルトの名無しさん:2010/01/08(金) 00:07:32
問題一が何とかなりました。
603デフォルトの名無しさん:2010/01/08(金) 00:09:28
全てなんとかなりました!!!
みなさんありがとうございます!!!
604デフォルトの名無しさん:2010/01/08(金) 04:53:47
[1] 授業単元: 演習チャレンジ問題
[2] 問題文(含コード&リンク):
あるint型配列array[256]の中身をランダムシャッフルしたい。
0〜127の範囲の値を被らずに出す乱数関数randEx(Seed, i)を作成せよ。(iは0〜127)
※Seedを変えることにより、異なるパターンのランダム列が出るようにする。
※array[i]とarray[128+randEx(Seed, i)]をスワップすることで並列計算において一気にシャッフルするのが目的です。
※「スワップするかしないか」の部分は別なので考えなくて良いです。

[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: Cのみ
[4] 期限: 2010年1月18日まで

並列プログラミング関係なので、本来のランダムシャッフルよりややこしい事になってます…
全く分かりません…どなたか御教授下さい(´・ω・`)
605デフォルトの名無しさん:2010/01/08(金) 06:32:45
>>604
重複無しの数値を返すぐらいだから
ややこしいと思わなかったけど外してるかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10336.txt
606デフォルトの名無しさん:2010/01/08(金) 10:22:55
プログラミングの問題なんですが、if文と繰り返し(for,whileのいずれか)を利用して次の問題を作成します。

米ドル紙幣としては次のような紙幣とコインがある。
100ドル、50ドル、20ドル、10ドル、5ドル、2ドル、1ドル
50セント、25セント、10セント、5セント、1セント

問題は、キーボードから日本円を入力し、まずドルに変換した後ドルを最適な紙幣とコインに振り分けるプログラムを作成しなさい。但し1ドルを92.69円として換算しなさい。そして、日本円が0円の時にプログラムを終了する。


¥195,865
2,112,89$

100$…21枚
50$
20$
10$…1枚
5$
2$…1枚
1$
50¢…1枚
25¢…1枚
10¢…1枚

1¢…4枚

このような問題なんですがプログラムとして最適なものが分かる方は是非教えてください。
607デフォルトの名無しさん:2010/01/08(金) 10:56:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
構造体と関数(複素数の加算)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10337.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010年1月13日まで
[5] その他の制限: 特になし

わかる方いましたらよろしくお願いします
608 ◆er4rYOIb5c :2010/01/08(金) 11:19:19
>606
#include <stdio.h>
#include <math.h>
#define RATE (92.69)
int main() {
char buf[256];
unsigned long yen;
unsigned long cent;
unsigned int const coin[] = {10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1, 0};
for(;;) {
printf("\n¥ ");
fflush(stdout);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, " %lu", ¥);
if(yen == 0)
return 0;
cent = round(yen * 100 / RATE);
printf("%lu.%lu$\n", cent/100, cent%100);
for(int i=0; coin[i] > 0; i++) {
unsigned long ncoins = cent / coin[i];
cent %= coin[i];
if(coin[i] >= 100)
printf("%u$", coin[i]/100);
else
printf("%u¢", coin[i]);
if(ncoins > 0)
printf("…%lu枚\n", ncoins);
else
printf("\n");
}
}
}
609デフォルトの名無しさん:2010/01/08(金) 11:22:10
610 ◆er4rYOIb5c :2010/01/08(金) 11:50:05
>607
1: double re
2: double im
3: z->re = x.re + y.re
4: z->im = x.im + y.im
5: struct complex
6: & x.re, & x.im
7: & y.re, & y.im
8: z.re, z.im
611デフォルトの名無しさん:2010/01/08(金) 12:02:02
>>610
ありがとうございます
612デフォルトの名無しさん:2010/01/08(金) 12:02:31
>609
検索したらトップにこれが来てワロタ
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235036252
613デフォルトの名無しさん:2010/01/08(金) 14:10:31
test
614604:2010/01/08(金) 14:24:41
>>605
ありがとう。やろうとしてる事はなんとなく分かるんですが、ちょっと違うんです。
ソースとコメント書いたので、これで伝わるでしょうか…。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10340.txt

自分でもよく分かってないのですが、要は数値変換みたいなことをしたいのです。
例えば、1→67、2→36、3→4、4→98..... 
seedを変えることで、1→8、2→77、3→56、4→2... のように異なったパターンも生み出すようにしたいです。
615デフォルトの名無しさん:2010/01/08(金) 14:29:38
>>614
規則的でいいなら

if(seed%2!=0) return (seed*(i+seed))%128;
else return ((seed*2+1)*(i+seed))%128;
616デフォルトの名無しさん:2010/01/08(金) 14:31:57
>>604
※array[i]とarray[128+randEx(Seed, i)]をスワップすることで並列計算において一気にシャッフルするのが目的です。
array[i] array[j]  j-i < 128 のスワップが発生しない(≒array[0] と array[2] の交換はありえない)
シャッフルだけど良いのかな?
617デフォルトの名無しさん:2010/01/08(金) 14:48:34
[1] 授業単元:プログラミング言語論
[2] 問題文(含コード&リンク):

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

[3] 環境
 [3.1] OS:WindowsXP
 [3.3] 言語:C++
[4] 期限: 2010年01月12日
[5] その他の制限:特になし

よろしくお願いします
618デフォルトの名無しさん:2010/01/08(金) 14:50:51
>>615
これだけでよさげ
return ((seed*2+1)*(i+seed))%128;
619デフォルトの名無しさん:2010/01/08(金) 14:57:45
メルセンヌツイスタを使ったら優もらえるんとちゃうか?
620デフォルトの名無しさん:2010/01/08(金) 15:03:58
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):掃き出し法。
  0,1のみを成分にもつn次正方行列Aが2重リストとしてある。Aにmod2の行基本変形を施して、階段行列に変形するプログラム
[3] 環境
 [3.1] OS:linux
 [3.3] 言語: C
[4] 期限:2010年1月14日
[5] その他の制限: 特にありません。
621デフォルトの名無しさん:2010/01/08(金) 18:23:50
>>617
コンパイラは何?

- void func(int *x){
void* func(void* args){
int* x = (int*)args;
- return;
return NULL;
- pthread_create(&t[i],NULL,(void *)func,(void *)&i);
pthread_create(&t[i],NULL,func,(void *)&i);
622 ◆er4rYOIb5c :2010/01/08(金) 18:40:20
>>614 生成部(randEx)のみ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* #include <omp.h> */
#define randint(nmax) ((int)(rand()/(double)RAND_MAX * (nmax)))
#define NMAPS 9
unsigned int map[NMAPS][128];
void initmap(void) {
for(int y=0; y<NMAPS; y++) {
for(int x=0; x<128; x++) map[y][x] = x;
for(int x=0; x<128; x++) {
int tmp = map[y][x];
int i = x+randint(128-x);
map[y][x] = map[y][i];
map[y][i] = tmp;
}}}
int randEx(unsigned int sd, int i) {
for(int m=0; m<NMAPS; m++) {
i = map[m][(i+sd) % 128];
sd = (sd >> 7) ^ (((sd >> 1) & 0x3f) | ((~(sd & 1)) << 6));
}return i;}
/* チェック用main */
int main(int argc, char *argv[]) {
unsigned int seed = (argc >= 2) ? atoi(argv[1]) : time(0);
initmap();
/* #pragma omp parallel for */
for(int i=0; i<128; i++)
printf("%d\n", randEx(seed,i));
return 0;}
表の生成(initmap)が重いけど、生成は一回でいいので、多数回シャッフルする
なら気にしなくていいかと。何なら事前に計算して定数表として持ってしまってもいい。
623デフォルトの名無しさん:2010/01/08(金) 18:48:07
>>621
VC++2005です
624デフォルトの名無しさん:2010/01/08(金) 19:06:13
>>614
randExの中で頑張るより、配列を用意したほうが素直に思える。
お望みのものとは違うけれど、なにかの参考用として。

void init_indices(int *indices, int size, unsigned int sd) {
int i;
srand(sd);
for (i = 0; i < size; i++) indices[i] = i;
for (i = 0; i < size * 2; i++) swap(indices + rand() % 128, indices + rand() % 128);
}

mainの中は、int i, indices[128];こうして、先にinit_indices(indices, 128, seed);としておいて、
swap(&array[i], &array[max/2 + randEx(seed,i)]);ここんとこは単に、
swap(&array[i], &array[max/2 + indices[i]]);として使う。

重複無しは、用意しておいた数列を、swapで混ぜるほうがラク。
int randEx(unsigned int sd, int i)がスムーズに動くような実装は、
ちょっと俺には思いつかない。>>615 >>618さんの方法でうまくいくんだろうか。
625デフォルトの名無しさん:2010/01/09(土) 03:07:54
>>604
とりあえず要求としては全単射な写像になればいいので
極端な話、k個ずらして剰余をとるだけ (k + i)%128 でいい。
更に、奇数倍して剰余を取った ((2*k+1)*i)%128 も全単射になる(ヒント:最小公倍数)
あるいは高々128個なのでテーブルで用意してしまってもいい。
という感じで適当に全単射な写像を用意して合成すれば乱数っぽくなる。
あとは適当にseedに応じて違う写像になるようにすればOK。

>>618さんのは k=seed にして合成した形になってるね。
626デフォルトの名無しさん:2010/01/09(土) 03:17:07
>>624
並列プログラムの演習なのでそれをやると
init_indices()のあとに同期が必要になって効率が悪くなる、
という趣旨じゃないかな
627デフォルトの名無しさん:2010/01/09(土) 03:26:06
>>614
目的がよく分からないけどオーソドックスに

/* ここでsdとiを使って0〜127の重複なしIDを求める */
// ...
static int ar[max/2];
static bool b = false;
if(!b){
srand(sd);
int j;
for(j=0;j<max/2;j++)
ar[j]=j;
for(j=0;j<max/2;j++)
swap(&ar[j],&ar[rand()%(max/2)]);
b=true;
}
id=ar[i];
// ...

628デフォルトの名無しさん:2010/01/09(土) 09:19:49
>>626なるほど〜。
>>625そういう数学的知識にあこがれるw
629デフォルトの名無しさん:2010/01/09(土) 14:57:18
jごいく98982371985
630デフォルトの名無しさん:2010/01/09(土) 15:36:12
じょいがjjlgじょあいgじゃgは
631デフォルトの名無しさん:2010/01/09(土) 16:03:44
uうこpGゆzXけmFm0んPChけにたぬZajふoKるしp0mHえBCQnかうpIvの7JvTみもiNけ6lへきr7OるHaxGcZuxかRめんZq2いqMFやくんちX95pfTh2nbxwll9ま
632604:2010/01/09(土) 20:55:08
みんなありがとう。
>>615 >>618 これは!と思って、seedがある程度大きかったり素数だったりしたら上手くばらけそうだと思って試した所、
どうやらi=0の時の初期値が128通り、あとは127通りの傾きで線形的に増減していく感じでした。
しかし、これでも約1万6千のパターンが表せるんですね(あってるのかな…)

>>616 大丈夫です。>>622でも指摘あるように複数回シャッフルするので最低2回でarray[0]とarray[2]の交換ができるはずです。
>>622 ( ゚д゚)ポカーン これは不思議。1度作った表でも十分そうだけど、表を更新すればもっと…
>>624 >>625 …たしかに何かしらの専用テーブル作るのがいいかもしれません。
テーブル作ると、値の分布やテーブルの個数によって性質が固定されそうだと思ってたのですが、>>622のやり方はそれをうまく解決している気がします。

まだ〆切にも時間あるし、戴いたアイディアをまだ十分吟味しきれてないのでもう少し試行錯誤してみます。
ソースをまた貼るかもしれないのでその時はまたよろしくお願いしまつ|ω・`)
633デフォルトの名無しさん:2010/01/09(土) 21:04:26
[1]授業単元:プログラミング2
[2]問題文:2つの最大50桁の実数を入力し、その和・差・積を求めるプログラム
[3]
[3.1]Windous Vista
[3.2]bcpad
[3.3]c++
[4]期限:2010年1月11日17:00
[5]基礎的なことしか習っていないため、できるだけ簡単なものをお願いします
634デフォルトの名無しさん:2010/01/09(土) 21:27:19
>>633
なんの捻りも無いけど。
#include <gmp.h>
#include <ctype.h>
int main()
{
char a[128],b[128];
scanf("%s",a);
scanf("%s",b);
gmp_printf("------\n");
mpz_t za,zb,ztmp;
mpz_init(za);
mpz_init(zb);
mpz_init(ztmp);
mpz_set_str(za,a,10);
mpz_set_str(zb,b,10);
mpz_add(ztmp,za,zb);
gmp_printf("%Zd\n",ztmp);
mpz_sub(ztmp,za,zb);
mpz_abs(ztmp,ztmp);
gmp_printf("%Zd\n",ztmp);
mpz_mul(ztmp,za,zb);
gmp_printf("%Zd\n",ztmp);
return 0;
}
635デフォルトの名無しさん:2010/01/09(土) 22:59:11
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10342.txt[3] 環境
 [3.1] OS:Windows XP
 [3.3] 言語: C++
[4] 期限:2010年1月11日 12:00
[5] その他の制限: 特にありません。

よろしくおねがいします。
636デフォルトの名無しさん:2010/01/09(土) 23:00:55
連投すいません
>>635の訂正です。
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10342.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.3] 言語: C++
[4] 期限:2010年1月11日 12:00
[5] その他の制限: 特にありません。
よろしくお願いします。
637デフォルトの名無しさん:2010/01/09(土) 23:45:50
[1] 授業単元:コンピュターグラフィック
[2] 問題文(含コード&リンク):
1次元配列を2次元配列に・2次元配列を1次元配列に変換する二つのモジュール
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10343.txt
[3] 環境
 [3.1]Windows XP
 [3.2]VC2005
 [3.3]C
[4] 期限:2010年1月11日 23:00
[5] その他の制限:出来るだけ単純な物だと自分で理解できるので助かります
どうぞよろしくお願いします
638622 ◆er4rYOIb5c :2010/01/10(日) 00:10:47
>632
> 1度作った表でも十分そうだけど、表を更新すればもっと…

表の生成自体はマルチスレッドにして高速化できない一方、
表の合成はマルチスレッドにして高速化できると言う性質があるので、
表の生成は一回限りにして、seed毎に組合せ方を変えて表を合成する事で、
複数のスレッドが並列でrandExを計算できるようにしてあります。

そのため、毎度表を更新すると並列計算による高速化が望めないので、
何の得もないです。念のため。
639デフォルトの名無しさん:2010/01/10(日) 00:13:46
[1] アルゴリズム

[2] 自然数の数列を入力し
数列内にあるnよりも大きい数と小さい数が
nの前後にそれぞれ一つ以上ある場合、そのnを出力する。

フローチャートは以下です。

    順数列の入力
    ↓      ↓
数列数が5以上 4以下→終了(4以下のときどれも除外できないので)
    ↓
数列の中で最大最小の値と
最初と最後に入力した値は除外できる。
    ↓
残りの数値に前後に大小の値が一つ以上あれば除外
    ↓
残った値を表示して終了

[3] 環境
 [3.1] OS: Linux
 [3.3] 言語: C

前スレでも質問させてもらったのですが、うまくいかなかったのでお手数ですが再びレスさせてもらいます。
640デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 00:26:19
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10344.txt
  2つの名前を入力してステータス(ランダム)を決定し 途中経過を表示し 
              攻撃が当たった時は文字色を変える
              

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:2009年01月12日00:00まで
[5] その他の制限:アップした原文を元に できるだけ簡単にお願いします。
         原文の方をコンパイルするとエラーが出てしまい 自分では解決する事が出来ませんでした。
         どうかよろしくお願いします。<m(__)m>
1>c:\documents and settingsデスクトップ\battle\battle.cpp(28) : error C2059: 構文エラー : ';'
1>battle - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
641デフォルトの名無しさん:2010/01/10(日) 00:28:52
>>640
teban = rand()%;
642デフォルトの名無しさん:2010/01/10(日) 00:29:54
[1] 初級C言語実習
[2] 次の関数copyStringを同じ動作をするように書き換えよ。ただし変数の追加、削除(未使用を含む)
if文(三項演算子を含む)while,do while,for文 goto文を使用してはならない。
char *copyString(char *s){
char *p=s,*t=s,tmp;
if(s==NULL)return NULL;
while(*p++); p--;while(!*p)p--;
while(p>s){tmp=*p;*p--=*s;*s++=tmp;}
return t;
}
[3] OS:Windows Vista
環境:Visual Studio 2008
言語: C
[4] 2010/01/15
[5]冬休みの宿題が未だに出来ずちょっと焦ってます。
643デフォルトの名無しさん:2010/01/10(日) 01:06:08
644デフォルトの名無しさん:2010/01/10(日) 01:09:23
[1]授業単元:プログラミング2
[2]問題文:次のような10×10の半角文字+を碁盤の目として、一対コンピュータで五目並べ
     をするプログラムを作成せよ。碁石を表す文字は、半角の@,0を用いよ。

   abcdefghij
a++++++++++
b++++++++++
c+++++@++++
d++++++0+++
e++++++++++
f++++++++++
g++++++++++
h++++++++++
i++++++++++
j++++++++++
@の場所は、cf , 0の場所は、dg とあらわす

・人とコンピュータのどちらかが先手になるか選択できる
・先手の33を禁止する
・勝敗の判定ができる。(置く場所がなくなったら引き分けとする)
・コンピュータは人が3と4を作った場合、それを止める場所におく
・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す。
[3]
[3.1]Windous Vista
[3.2]bcpad
[3.3]c++
[4]期限:2010年1月11日17:00
[5]/* で説明も書いてくださると助かります
645デフォルトの名無しさん:2010/01/10(日) 02:04:52
[1] 授業単元:プログラミング実習a
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10346.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Visual stdio 2008
 [3.3] 言語:C
[4] 期限:1月11日 19:00まで
[5] その他の制限:プログラミングの授業を受け始めてまだ2,3ヶ月程度の超初心者です。
          難しいプログラミングの方法などを使わないでいただければ嬉しいです。
          前の授業ではプロトタイプ宣言、ライブラリ関数、関数の戻り値などをやりました。
646デフォルトの名無しさん:2010/01/10(日) 02:28:06
647デフォルトの名無しさん:2010/01/10(日) 02:30:13
あ、間違えた
>>646の38〜43行目、length <= 4 のときは何もせずに終了だった
648デフォルトの名無しさん:2010/01/10(日) 02:34:49
>>645 ちょーてきとー
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
    char s[6][21],i,count=0;
    printf("20文学までの問題文を五⊃入れてください");
    for(i=0;i<5;++i){
        printf("%d⊃目の問題文:");
        gets(s[i]);
    }
    for(i=0;i<10;++i){
        const char*p=s[rand()%5];
        printf("問題:%s\n錬習:",p);
        if(strcmp(p,gets(s[5])))
            puts("不正解");
        else{
            puts("正解!!");
            count = 1 + count;
        }
    }
    puts("********************");
    printf("正解数:%d\n",count);
    puts("続行するには伺かキ−を押してください . . .");
}
649648:2010/01/10(日) 02:36:53
>>645 すまんさっきのはバグだらけだった
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
    char s[6][21],i,count=0;
    puts("20文学までの問題文を五⊃入れてください");
    for(i=1;i<=5;++i){
        printf("%d⊃目の問題文:",i);
        gets(s[i]);
    }
    for(i=0;i<10;++i){
        const char*p=s[rand()%5+1];
        printf("問題:%s\n錬習:",p);
        if(strcmp(p,gets(s[0])))
            puts("不正解");
        else{
            puts("正解!!");
            count = 1 + count;
        }
    }
    puts("*******************");
    printf("正解数:%d\n",count);
    puts("続行するには伺かキ−を押してください . ..");
}
650デフォルトの名無しさん:2010/01/10(日) 02:45:12
何回も申し訳ないが>>646の補足

アルゴリズムの授業なので計算量について考えておく必要がある。
数列のn[i]について毎回「n[i]の前後にn[i]よりも大きい数と小さい数があるか」を調べる場合、
計算量は数列の長さをLとして O(L^2)かかる。
一方、>>646のように、n[i]までの最大値と最小値を先に計算してしまうと計算量はO(L)で済む。
この差は数列の長さが100万とかになると歴然とした速度差になる。

その代わり、追加の配列を4つ使っているのでメモリの使用量は5倍になっているが、
オーダーが変わっているわけではないので通常問題にはならない、はず。
651デフォルトの名無しさん:2010/01/10(日) 03:01:04
大小の比較 と forward_max[i] != nums[i]... ってどっちが効率いい?
かわんない?
652デフォルトの名無しさん:2010/01/10(日) 03:19:47
よく考えたらforward用の配列はいらなかったので修正
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10348.txt

>>651
コピーのコストが高いクラスだとifの方が速いのは確実だけど、
組み込み型だと変わらないかも?と思って組み込み型なら三項演算子で書いてる。
if文使うとスタック操作が入る気がするけど最適化で消えるだろうなあ
653デフォルトの名無しさん:2010/01/10(日) 03:21:52
>>648
>>649
ご回答有難うございます。
ただ見ても全く意味がわからない…
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
const char*p=s[rand()%5+1];
if(strcmp(p,gets(s[0])))
とかって一体何なんだ…?
これもう少し長くてもぜんぜんいいんで、ものすごく簡単にできませんか?
超初心者の私でもわかるぐらいに…
654デフォルトの名無しさん:2010/01/10(日) 03:29:16
>>652
そこじゃなくって、最後のifの forward_max[i-1] > nums[i]...を
forward_min[i] != nums[i]...ってしても条件は満たせるじゃない?
>と!=ってどっちがはやいのかなって思っただけ。
655648:2010/01/10(日) 03:29:43
#includeがまったく意味が分からんとか言われるとどうすりゃいいんだろう...
656デフォルトの名無しさん:2010/01/10(日) 03:37:24
>>654
ああ、そこかw
整数型の比較演算子はどれ使っても速度は変わらない。
(物凄く命令の少ないマイコンだと違うかも知れないが…)
そこを気にするならむしろ
for(i = 1; i < length-1; i++){...} でlength-1の計算が毎回発生する方を気にすべき
657デフォルトの名無しさん:2010/01/10(日) 03:49:34
i+1(修正前ならi-1も)の計算回数の方が多いですよw
658デフォルトの名無しさん:2010/01/10(日) 04:00:10
>>657
言われると思ったw
そこまで言うならbackward_max, backward_minに関しても具体的な値は不要で、
単に最大・最小が変化したかのフラグの配列を1本記録するだけでいいわけです

どのみちオーダー的にはO(L)のアルゴリズムなのでこの辺で勘弁願いたいw
659デフォルトの名無しさん:2010/01/10(日) 08:40:39
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
fork,exec*システムコールを用いて簡単なコマンドインタープリタ
(mysh)を作成せよ。但し、作成するコマンドインタープリタは以下の
機能をサポートすること。
・設定ファイル(.path)にコマンドサーチパスを指定することが出来る。
なお、ファイル内のパスの指定方法は、各自が考え定義すること。
(パスにないコマンドを入力した場合には、見つからない旨のエラー
メッセージを出力すること。)
・パイプを利用して複数(可変個)のコマンドの入出力を結合する
ことができる。
・リダイレクションを使用してコマンドへの入力をファイルから得たり、
ファイルへ出力したりすることができる
・コマンド実行中にCtrl-Cを入力すると、現在のコマンドの実行を
中断する
・exitを入力すると、myshを終了する。
[3] 環境
 [3.1] OS: windowsXP,cygwin
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C言語
[4] 期限: ([2010年01月20日23:59まで]
[5] その他の制限: ファイル入出力、プロセス制御、パイプ生成に
関してはシステムコールを用いること。
execveを使ってやりたいんですがよくわかりません。
よろしくお願いします
660 ◆/91kCCQXBo :2010/01/10(日) 10:34:32
661デフォルトの名無しさん:2010/01/10(日) 10:54:42
>>634
それはなにか多バイト長演算ライブラリを使用するのでは?
662 ◆/91kCCQXBo :2010/01/10(日) 11:14:40
多バイト長演算
>>203
663639:2010/01/10(日) 12:28:23
>>646
ご回答ありがとうございます。
しかし、コンパイルしようとしたら見たことないエラーが出てきて困ってしまいました。
peeling.c:48: error: redefinition of 'i'
peeling.c:45: error: previous definition of 'i' was here
peeling.c:48: error: 'for' loop initial declaration used outside C99 mode
peeling.c:54: error: redefinition of 'i'
peeling.c:48: error: previous definition of 'i' was here
peeling.c:54: error: 'for' loop initial declaration used outside C99 mode
どう手直ししたら良いのかも教えてください。
664デフォルトの名無しさん:2010/01/10(日) 12:33:16
ヒント:あちこちにint iが宣言されている
665デフォルトの名無しさん:2010/01/10(日) 12:34:25
>663
6c6
< bool get_int(int* i){
---
> int get_int(int* i){
48c48
< for(int i = 1; i < length; i++){
---
> for(i = 1; i < length; i++){
54c54
< for(int i = length-2; i >= 0; i--){
---
> for(i = length-2; i >= 0; i--){
666639:2010/01/10(日) 12:43:33
>>664-665
ありがとうございました!
おかげさまで実行させることができました。
646氏にも、もちろんすごく感謝しています!!
667デフォルトの名無しさん:2010/01/10(日) 14:17:20
http://pc12.2ch.net/test/read.cgi/tech/1258158172/819
>>639 人のだけど、入力のところだけ修正したもの。
#include <stdio.h>
int f(int *p, int n, int size)
{
  int i, s, l;

  if(n <=1 || size-2<=n) return 0;
  for(i=s=l=0; i<n; i++) {
    if(p[i] > p[n]) l++;
    else if(p[i] < p[n]) s++;
  }
  if(s==0 || l==0) return 0;
  for(i=n+1, s=l=0; i<size; i++) {
    if(p[i] > p[n]) l++;
    else if(p[i] < p[n]) s++;
  }
  return s && l;
}

int main(void)
{
  int i, length = 0, a[256] = {4,8,2,1,7,9,3,5,6};
  printf("start input. end = E<ENTER>\n");
  while( length < 256 && scanf("%d%*c", &a[length])) length++;
  printf("end input.\n");

  for(i=0; i<length; i++)
    if(f(a, i, length))
      printf("%d ", a[i]);
  return 0;
}
668デフォルトの名無しさん:2010/01/10(日) 14:24:30
652に比べると相当効率悪いな
669デフォルトの名無しさん:2010/01/10(日) 15:03:33
>>658
こんな感じ?
#include <stdio.h>

int main(void)
{
int i, j, min, max, a[256], check[256];

for(i=0; scanf("%d", a+i)==1 && i < 256; i++);

if(i<=4) return 0;

if(a[i-1] > a[i-2]) max = a[i-1], min = a[i-2];
else max = a[i-2], min = a[i-1];

for(j=i-3; j>=2; j--) {
if(a[j] > max) max = a[j];
else if(a[j] < min) min = a[j];
else check[j] = 1;
}

if(a[0] > a[1]) max = a[0], min = a[1];
else max = a[1], min = a[0];

for(j=2; j<=i-3; j++) {
if(a[j] > max) max = a[j];
else if(a[j] < min) min = a[j];
else if(check[j]) printf("%d ", a[j]);
}

return 0;
}
670デフォルトの名無しさん:2010/01/10(日) 15:10:51
初期化忘れた、check[256] = {0}だな
671デフォルトの名無しさん:2010/01/10(日) 16:01:14
>>663
>>652ではそれも修正してあったんだけどね。
>>667のは計算量O(L^2)のアルゴリズムだから比較してみるといいんじゃないかな

>>658はこういうこと
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10349.txt

>>669
条件の書き換え間違ってない?
数列{1,1,1,...,1,1}を入力してみるとどうなるか?
あと最初にmax=min=a[0] (またはa[i-i])で初期化すればj=1とj=i-1を特別視する必要はない
先頭と末尾に代入が1回増えることになるが、数列の長さが大きければ無視できるレベル。
それよりもコードの可読性と保守性が悪くなることの方が問題
672今年の未解決問題:2010/01/10(日) 17:51:35
>>644[-]2010年1月11日17:00 一対コンピュータで五目並べ
>>642[-]2010/01/15 次の関数copyStringを同じ動作をするように書き換えよ。
>>640(10344)[-]2010年1月12日00:00まで  2つの名前を入力してステータス(ランダム)を決定し 途中経過を表示し攻撃が当たった時は文字色を変える
>>637(10343)[-]2010年1月11日 23:00 1次元配列を2次元配列に・2次元配列を1次元配列に変換する二つのモジュール
>>620[-]2010年1月14日 掃き出し法。 0,1のみを成分にもつn次正方行列Aが2重リストとしてある。Aにmod2の行基本変形を施して、階段行列に変形するプログラム
673デフォルトの名無しさん:2010/01/10(日) 19:24:48
>>620
mod2の行基本変形ってこういうことかね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10350.txt
674デフォルトの名無しさん:2010/01/10(日) 19:42:55
>>637
その問題文だけだとサイズが決まらないんだが、
こんなもんだろうか

int Conv_1Dto2D(unsigned char *src, unsigned char dest[][X_SIZE]){
int i;
unsigned char* p = &dest[0][0];
for(i=0; i < X_SIZE*Y_SIZE; i++) *(p++) = *(src++);
return i;
}

int Conv_2Dto1D(unsigned char src[][X_SIZE], unsigned char *dest){
int i;
unsigned char* p = &src[0][0];
for(i=0; i < X_SIZE*Y_SIZE; i++) *(dest++) = *(p++);
return i;
}
675デフォルトの名無しさん:2010/01/10(日) 19:49:27
>>640
>>641で解決してると思うけど一応
そんな分かりやすいコンパイルエラーで困られても困る
コンパイラに言われたとおり
 28行目: teban = rand()%;
%は二項演算子なので%の後に数字が来ないのはおかしい。
周りから判断して
 28行目: teban = rand()%2;
じゃないかね
676デフォルトの名無しさん:2010/01/10(日) 19:52:56
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10351.zip
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月20日まで
[5] その他の制限: とくにありませんが、わかりやすく説明を付けてもらえると助かります。
677デフォルトの名無しさん:2010/01/10(日) 19:53:22
>>642 問題の意図がよく分からんが、whileが1つ余計なので削除できる
char *copyString(char *s){
char *p=s,*t=s,tmp;
if(s==NULL) return NULL;
while(*++p);
p--;
while(p>s){tmp=*p;*p--=*s;*s++=tmp;}
return t;
}
678デフォルトの名無しさん:2010/01/10(日) 20:50:57
[1] 授業単元: 基礎プログラミングおよび演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10352.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2010年1月14日まで]
[5] 特にありませんが、ポインタはまだ習ってないので使わないでいただきたいです
679デフォルトの名無しさん:2010/01/10(日) 20:52:21
内容と名称が一致してない関数って最悪
680デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 20:59:31
>>641
>>675のお二方ありがとうございます。
teban = rand()%2;
としたところ最初だけ勝敗が表示された後、何も表示されなくなりました;

681デフォルトの名無しさん:2010/01/10(日) 21:03:57
決着ついたらループ抜けてるんだから当たり前だろ
682デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 21:09:29
>>681
解答ありがとうございます。
もう一度実行しなおしたり ビルドしなおしても何も表示されず デバッグのエラーが出るのです。
683デフォルトの名無しさん:2010/01/10(日) 21:11:26
そのエラーを具体的に書かないと。
684デフォルトの名無しさん:2010/01/10(日) 21:17:39
[1] 授業単元:プログラミング言語論
[2] 問題文(含コード&リンク):

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

[3] 環境
 [3.1] OS:WindowsXP
 [3.3] 言語:C++
[4] 期限: 2010年01月12日
[5] その他の制限:特になし

よろしくお願いします
685デフォルトの名無しさん ◆TJ9qoWuqvA :2010/01/10(日) 21:26:23
>>683
一部コメントのままビルドしていました。
お騒がせして申し訳ありませんでした。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:2009年01月12日05:00まで
[5] その他の制限:C言語を習っているもののほとんど理解できていないので 簡単にお願いします。
         ポインタや構造体は一応習いました。
         2度目になりますがよろしくお願いします。
686デフォルトの名無しさん:2010/01/10(日) 21:39:09
>>675
rand() の剰余をとる乱数発生法はあまりよくないものとされている。
687デフォルトの名無しさん:2010/01/10(日) 21:43:25
他の方法というと?
688デフォルトの名無しさん:2010/01/10(日) 22:12:26
>>686
よくないって言ったって、標準で付いてるんだから使わない手はない。
689 ◆/91kCCQXBo :2010/01/10(日) 22:23:01
>>684(10341)>>617
並列に実行される複数のスレッドで、パラメータを同一アドレスで渡している為,
アドレスで示されるパラメータ内容を実行中に変更してしまっている。
690デフォルトの名無しさん:2010/01/10(日) 22:27:54
>>678
http://codepad.org/z9iKimu1
CだとめんどくさいのでC++ with STL
691デフォルトの名無しさん:2010/01/10(日) 22:49:57
692 ◆QZaw55cn4c :2010/01/10(日) 22:56:57
>>662
残念ながら整数かつ桁数固定の多バイト長演算。
693デフォルトの名無しさん:2010/01/10(日) 23:20:25
>>690
ありがとうございます
ですがCじゃないとだめなんです・・・
694690:2010/01/10(日) 23:45:46
>>693
甘えんなカス
答えてもらっただけでもありがたいと思え
695デフォルトの名無しさん:2010/01/10(日) 23:52:20
>>694
質問のテンプレにもちゃんとCと書いてあるのにそれはどうかと
そもそも甘えるななんて言ったらこのスレいらなくね?
696 ◆QZaw55cn4c :2010/01/10(日) 23:52:30
制約条件を守らずにコーディングしたところで、それはゴミ。
697デフォルトの名無しさん:2010/01/10(日) 23:54:57
なりすましじゃねーの?
698639:2010/01/11(月) 00:03:04
>>671
どうもです。
>>652のレスを見逃していました。すいません・・・
いろいろと勉強になりました。ありがとうございます!
699デフォルトの名無しさん:2010/01/11(月) 00:24:57
>>693
気が向いたからCでも書いてみた。
http://codepad.org/12iI3EpM
700699:2010/01/11(月) 00:31:26
なんか>>694にドッペルゲンガーが居るwww
それはそうと57行目の
> strcpy(dst->name, buf);
これやばいな。bufが長いと落ちる。
この行の前に
if(strlen(buf) > 6){
return 2;
}
を入れといてくれや。
701デフォルトの名無しさん:2010/01/11(月) 02:56:50
>>700
2度もわざわざありがとうございます
動作確認もちゃんとできました
C++で書いてくださったものは、自分が今後C++を勉強する際に参考にさせていただきます
702デフォルトの名無しさん:2010/01/11(月) 05:52:34
>>676
http://codepad.org/On58lEw2
command1.txtとかもつけて欲しかったな
授業のページまで探しに行ってしまったよ
703デフォルトの名無しさん:2010/01/11(月) 15:02:28
[1] 授業単元: C
[2] 問題文(含コード&リンク):
  100以下の素数をすべて出力するプログラムを作りたい。
自然数xに対して2以上で√x以下の素数で割り切れない数が素数である。ただし1は素数でも合成数でもない。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月13日まで

よろしくお願いします
704デフォルトの名無しさん:2010/01/11(月) 15:05:43
#include <stdio.h>
int main(){
int i , chk , f , ii;
for( i = 2 ; i <= 100 ; i++ ){
chk = 0;
f = i / 2;
ii = 2;
while( f >= ii ){
if( ( i % ii ) == 0 ){
chk = 1;
break;
}
ii++;
}
if( chk == 0 ){ printf("%i ", i ); }
}
}
705デフォルトの名無しさん:2010/01/11(月) 15:08:25
あ、一番最後に}を付け足しといて
706デフォルトの名無しさん:2010/01/11(月) 15:09:06
すまん、やっぱりいらなかった
707デフォルトの名無しさん:2010/01/11(月) 16:54:38
>>703
#include <stdio.h>
int main(void){
int primes_less_than_100[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,
47,53,59,61,67,71,73,79,83,89,97,0},*p=(int*)&primes_less_than_100[0];
while(*p) printf("%d ",*p++);
printf("¥n");
return 0;
}
708デフォルトの名無しさん:2010/01/11(月) 17:27:56
それ素数か証明して
709デフォルトの名無しさん:2010/01/11(月) 18:24:16
>>702
こんなに早く、ありがとうございます。
command1.txtはすみません。
以後気をつけます。
710デフォルトの名無しさん:2010/01/11(月) 18:29:34
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 数値には初期値が与えられている。
               この配列を昇順に並べ替えるプログラムを作成しなさい。

表示結果: 数値[00]=80
数値[01]=40
数値[02]=23
数値[03]=69
数値[04]=10

 ソート後
数値[01]=10
数値[02]=23
数値[03]=40
数値[04]=69
数値[03]=80
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 1月18日0:00まで

どなたかよろしくお願いします。
711デフォルトの名無しさん:2010/01/11(月) 18:46:53
>>703
#include <stdio.h>

int main(void)
{
int prime[100] = {2}, i, j, cnt = 1;

for(i=3; i<=100; i+=2) {
for(j=0; prime[j]*prime[j]<=i; j++) {
if(i % prime[j] == 0) goto L;
}
prime[cnt++] = i;
L:
}

for(i=0; i<cnt; i++) printf("%d ", prime[i]);

return 0;
}
712デフォルトの名無しさん:2010/01/11(月) 19:08:43
>>710
#include <stdio.h>

int main(void)
{
int arr[] = { 80, 40, 23, 69, 10}, i, j;

for(i=0; i<sizeof arr / sizeof *arr; i++) printf("数値[%02d]=%d\n", i, arr[i]);

for(i=1; i<sizeof arr / sizeof *arr; i++) {
int tmp = arr[i];
for(j=i; j > 0 && tmp < arr[j-1]; j--) arr[j] = arr[j-1];
arr[j] = tmp;
}

printf(" ソート後\n");
for(i=0; i<sizeof arr / sizeof *arr; i++) printf("数値[%02d]=%d\n", i, arr[i]);

return 0;
}
713デフォルトの名無しさん:2010/01/11(月) 20:10:50
>>709
ごめん、メモリリークしてた。
次の患者の呼び出しで患者の情報を表示した後に
release_patient(pat);
入れてメモリ解放するようにしといて
714デフォルトの名無しさん:2010/01/11(月) 20:11:22



1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10353.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 1月15日まで

よろしくお願いします。
715デフォルトの名無しさん:2010/01/11(月) 20:32:26
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
文字列text[]と文字列pat[]が与えられたとき、文字列text中に文字列patが含まれるときは最初に現れるその文字列の先頭の位置(0〜)を返し、含まれないときは-1を返す関数searchを作成せよ。
また、その関数を用いて、2つの文字列text[]とpat[](空白は含まない)を入力すると関数searchの値を返すプログラムを作成せよ。ここでtextとpatには長さ1以上の文字列が入っているものとする。
(例:text[]="thisisatesttextdata"の中に、pat[]="this"は0の位置に、pat[]="test"は7の位置に現れる。)
[3] 環境
 [3.1] OS: ubuntu
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月12日12:00まで
[5] その他の制限: #include<stdio.h>のみで。ポインタ、構造体などは習っていません。基本的な変数の型とよく使う関数,配列,if,for,while,文字列char,関数の定義と引数については習いました。
よろしくお願いします。
716デフォルトの名無しさん:2010/01/11(月) 20:50:09
int search(char text[], char pat[])
{
int i, j;

for(i=0; text[i]; i++) {
for(j=0; pat[j] && text[i+j]==pat[j]; j++);
if(!pat[j]) return i;
}

return -1;
}

int main(void)
{
char text[256], pat[256];

scanf("%s%s", text, pat);

return search(text, pat);
}
717デフォルトの名無しさん:2010/01/11(月) 21:10:47
>>714
http://codepad.org/h5hSR8XA
>>673を書き換えて作ったので行列が二重配列
718デフォルトの名無しさん:2010/01/11(月) 21:15:14
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): 再帰を使って自然対数の底eを求めるプログラムを作成しなさい
下記のようにnを0から30まで増加させながら
n=0のときe=1/0! n=30のときe=1/0!+1/1!+1/2!+1/3!+……1/30! の計算を行い下記のように表示しなさい

n=0:e=1.000000000000000
n=1:e=2.000000000000000


n=30:e=2.718281828459046
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:1月18日24時まで

よろしくお願いします
719デフォルトの名無しさん:2010/01/11(月) 21:24:07
720デフォルトの名無しさん:2010/01/11(月) 21:27:04
>>718
#include <stdio.h>

int main(void)
{
int n = 0;
double e = 0.0, d = 1.0;

while(n <= 30) {
e += d;
printf("n=%2d:e=%.15f\n", n, e);
d /= ++n;
}

return 0;
}
721デフォルトの名無しさん:2010/01/11(月) 21:47:59
>>716
助かります。
本当にありがとうございました。
722 ◆15kd2wtP2Y :2010/01/11(月) 22:56:09
[1]授業単元:プログラミング2
[2]問題文:以下の機能を備えた対コンピュータの五目並べを作成せよ
 ・置く場所を縦と横の数字で指定する
・人とコンピュータのどちらかが先手になるか選択できる
・先手の33を禁じる
・勝敗の判定ができる(置く場所がなくなったら引き分け)
・コンピュータは人が3と4を作った場合、それを止める場所に石を置く
・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す
[3]環境
[3.1]Windous
[3.2]bcpad
[3.3]c++
[4]期限1月15日
[5]かなり焦っています。簡単な説明も書いて下さったら助かります
723デフォルトの名無しさん:2010/01/11(月) 23:12:19
>>674
#definで指定してあったため記入し忘れてました
有難うございました
724デフォルトの名無しさん:2010/01/12(火) 01:34:27
>>643
遅くなってしまいましたが、ありがとうございました
とても助かりました。
725708:2010/01/12(火) 08:34:11
>>707 どうせ、いつもの早押し勝ち抜け選手だろう。
>>711 Borlandならいいけど、L: の後に;付けないとgccではコンパイルエラー。
#include <stdio.h>
int main(void) {
  int prime[100] = {2}, i, j, cnt = 1;

  for(i=3; i<=100; i+=2) {
    for(j=0; prime[j]*prime[j]<=i; j++) {
      if(i % prime[j] == 0) break;
    }
    if(i % prime[j] == 0) ; else
      prime[cnt++] = i;
    L: ;
  }
  for(i=0; i<cnt; i++) printf("%d ", prime[i]);
  return 0;
}
726デフォルトの名無しさん:2010/01/12(火) 10:42:51
[2] 問題文(含コード&リンク):29個ある変数(それぞれに最大値と最小値あり)の正規化
をする(0〜1に)
[3] 環境
 [3.1] OS:windowsXP
 [3.3] 言語:C++
[4] 期限: 本日中
[5] その他の制限:ライブラリは使用禁止

よろしくお願いします
727デフォルトの名無しさん:2010/01/12(火) 11:24:58
>>726
29個 ?
728デフォルトの名無しさん:2010/01/12(火) 11:40:48
>>726
1つの変数に最大値と最小値が混在してるの?
729デフォルトの名無しさん:2010/01/12(火) 11:54:23
変数の型も書いてないしさぁ。荒らしか?
730デフォルトの名無しさん:2010/01/12(火) 12:26:42
仮数部が29桁かな
731726:2010/01/12(火) 12:28:18
>>728
混在というか変数の範囲が最小値から最大値ということです

変数はdouble型でお願いします
>>729
荒らしではありません
732デフォルトの名無しさん:2010/01/12(火) 12:41:32
>>731
変数は配列で、double n[29]でいいのでしょうか?
変数にはどうやって値を与えるのでしょうか?
最小値と最大値は教えてもらえないのでしょうか?
733726:2010/01/12(火) 12:48:40
>>732
よくわかりませんがそれで良いと思います。
値の与え方は当方もいまだ模索中です。
変数の最大値、最小値はバラバラなので全て書くことは出来ませんが
一つ目の変数は、最大値14.000、最小値13.000です。

変数を正規化するプログラムがわからないのが最大の問題です
734デフォルトの名無しさん:2010/01/12(火) 13:38:00
>726
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10354.cpp
普段C言語ばかり使っているからどこかおかしいかも
正規化部分も適当に図を描いて式を求めたから合っているか分からない
735デフォルトの名無しさん:2010/01/12(火) 13:45:32
・問題文は、出題されたまま全文を書いてください。
736708:2010/01/12(火) 15:41:38
>>733 これでいイカ?
正規化1=(変数1−最小値)/(最大値−最小値)
正規化2=(変数29−最小値)/(最大値−最小値)
 :
正規化29=(変数29−最小値)/(最大値−最小値)
変数の値が、最大値と最小値の間にあれば、線形に正規化した値は0〜1になる。
737デフォルトの名無しさん:2010/01/12(火) 16:16:51
じゃあ、こうでいいんじゃないかな?
あとはデータをずらずらと書いていくと。

#include <stdio.h>

typedef struct {
double value;
double min;
double max;
} Number;

int main() {
int i;
Number n[] = {
{14.0, 13.0, 14.0}, {14.0, 13.0, 15.0}, {14.0, 13.0, 16.0}, {14.0, 13.0, 17.0}
};

for(i=0; i < sizeof n / sizeof *n; i++)
printf("%f => %f\n", n[i].value, (n[i].value - n[i].min) / (n[i].max - n[i].min));
}
738デフォルトの名無しさん:2010/01/12(火) 16:32:27
>>737
そういうことだろうな
>>726
本当にそんな問題文だったのかい?
口頭で出されたなら同じ授業を受けたできそうな奴に聞いた方がいい
739デフォルトの名無しさん:2010/01/12(火) 17:41:13
[1] 授業単元: プログラミング
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10355.txt
分かりにくいかもしれないので、PDFファイルもつけますhttp://kissho1.xii.jp/7/src/7jyou29190.pdf
[3] 環境
 [3.1] Linux
 [3.2] k-term emacsで作成するやつ
 [3.3] 言語: c
[4] 期限: 1月13日


分かる方よろしくお願いします。
740デフォルトの名無しさん:2010/01/12(火) 17:43:15
またお前か。帰れ。
741デフォルトの名無しさん:2010/01/12(火) 21:16:08
[1] 授業単元: プログラミング2
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10356.txt
[3] 環境
 [3.1] Windows XP
 [3.2] Visual Studio 2003
 [3.3] 言語: c
[4] 期限: 1月28日

よろしくお願いします
742デフォルトの名無しさん:2010/01/12(火) 23:29:59
743デフォルトの名無しさん:2010/01/12(火) 23:31:59
>>741
出力に単位つけるの忘れてた
>>742の73,74行目にg足しといて

毎回貼ってから気づくorz
744デフォルトの名無しさん:2010/01/13(水) 01:02:34
[1] プログラミング
[2] 0から10の中からランダムに整数の2組を決める。それを平面上の座標として、座標を10個つくる。
ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。
最も近い点がユーザが入力した点と重なったら◎を出力する。
結果は下記のように出力。

                △
     △
                      × ○





×:ユーザが入力した点
○:最も近い点
●:最も遠い点
△:それ以外の点

[3] 環境
 [3.1] Windows
 [3.2] bcpad
 [3.3] C++
[4] 1月末まで
745デフォルトの名無しさん:2010/01/13(水) 03:16:16
>>744
http://codepad.org/eDi0gUWm

C++は楽でいい
746デフォルトの名無しさん:2010/01/13(水) 04:35:35
それ楽なのか?

あとfarestはねーよw
747デフォルトの名無しさん:2010/01/13(水) 06:51:28
>>742
ありがとうございます。助かりました。
748デフォルトの名無しさん:2010/01/13(水) 11:29:37
>>746
名前の衝突気にせずにがんがん定数を定義できるあたりがとても
そいやfarthestだったな、前にも言われたわw
749デフォルトの名無しさん:2010/01/13(水) 11:50:49
sqrt()いらね
750デフォルトの名無しさん:2010/01/13(水) 11:56:12
[1] 授業単元: 情報科学(C言語)
[2]問題文:http://www.f.csce.kyushu-u.ac.jp/~ogi/kougi/10.pdf
[3] 環境
 [3.1] Windows 7
 [3.2] Visual Studio 2008
 [3.3] 言語: c
[4] 期限: 1月13日

ギリギリになってしまったんですがよろしくお願いします
751デフォルトの名無しさん:2010/01/13(水) 13:44:51
test
752デフォルトの名無しさん:2010/01/13(水) 14:56:43
1] 授業単元: プログラミング
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10358.txt
[3] 環境
 [3.1] Linux
 [3.2] k-term emacsで作成するやつ
 [3.3] 言語: c


自力で解いて、この四問だけわかりませんでした。どうかよろしくお願いします。


753デフォルトの名無しさん:2010/01/13(水) 15:17:18
[1] 授業単元: プログラミング
[2]問題文:
モンテカルロ法による円周率の近似値の計算を行うプログラムを書け。
生成する点の個数はキーボードから受け取るようにせよ。
乱数の生成にはMersenne twisterを用いよ。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語: c
754デフォルトの名無しさん:2010/01/13(水) 15:17:44
またお前か。帰れ。
755デフォルトの名無しさん:2010/01/13(水) 15:49:09
>>754
また私です。
お願いします。

自力でやったんですけど、あれだけわからなくて・・
あーどうしましょう
756デフォルトの名無しさん:2010/01/13(水) 17:19:28
>>744
ttp://codepad.org/BkGfe7wz

なんか、どう書いても最後までスカッとしなかった。
こういう場合はCで書いたほうがマシかもしれない。
757デフォルトの名無しさん:2010/01/13(水) 18:08:23
>>750
#include "stdio.h"
int sasho(double a, double b, double *sa, double *sho) {
*sa = a - b;
if (b == 0) return 0;
*sho = a / b;
return 1;
}
void printsasho(double sa, double sho, int validsho) {
if (validsho) {
printf("sa = %f, sho = %f\n", sa, sho);
} else {
printf("sa = %f\n", sa);
}
}
void testsasho(double a, double b) {
double sa, sho;
int validsho;
validsho = sasho(a, b, &sa, &sho);
printsasho(sa, sho, validsho);
}
int main() {
testsasho(0.5963, 0.193);
testsasho(0.78364, 0);
return 0;
}
758デフォルトの名無しさん:2010/01/13(水) 20:23:59
>>752をよろしくおねがいします
759デフォルトの名無しさん:2010/01/13(水) 21:00:23
760デフォルトの名無しさん:2010/01/13(水) 21:02:46
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方式がある。
この方法ではf(x)=0の解の近似値を次の漸化式から求める。
x_(i+1) =x_i - f(x_i)/f'(x_i)

x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で順次計算して示せ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010/01/15
[5] その他の制限:特に無し

計算結果も書いていただけると助かります。
お願いします。
761759:2010/01/13(水) 21:03:57
>>752
間違えました、ごめんなさい。問題4:http://codepad.org/5vWpGoRx
762デフォルトの名無しさん:2010/01/13(水) 21:07:35
>>761
ありがとうございます。
できれば他の問題もよろしくお願いいします!
763デフォルトの名無しさん:2010/01/13(水) 21:16:10
>>762
問題1
#include <stdio.h>
typedef struct Complex{
double r;
double i;
};
void add(struct Complex* R,struct Complex X,struct Complex Y){
R->r=X.r+Y.r;
R->i=X.i+Y.i;
}
void mul(struct Complex* R,struct Complex X,struct Complex Y){
R->r=X.r*Y.r - X.i*Y.i;
R->i=X.r*Y.i + X.i*Y.r;
}
int main(){
struct Complex X,Y,a,m;
X.r=2.0;X.i=1.0;
Y.r=1.0;Y.i=2.0;
add(&a,X,Y);
mul(&m,X,Y);
printf("X=%.1f+%.1fi\n",X.r,X.i);
printf("Y=%.1f+%.1fi\n",Y.r,Y.i);
printf("X+Y=%.1f + %.1fi\n",a.r,a.i);
printf("X*Y=%.1f + %.1fi\n",m.r,m.i);
return 0;
}
764デフォルトの名無しさん:2010/01/13(水) 21:25:15
>>763
ほんと、ありがとうございます。
できればでいいので、他のもよろしくお願いします。
765デフォルトの名無しさん:2010/01/13(水) 21:30:23
>>764
問題2
#include <stdio.h>
int main(){
FILE *fin,*fout;
int c;
if((fin=fopen("in.txt","r"))==NULL)
return -1;
if((fout=fopen("out.txt","w"))==NULL)
return -1;
printf("\n/*********************************\n");
printf("* src *\n");
printf("*********************************/\n");
while((c=fgetc(fin)) != EOF){
fputc(c,fout);
putc(c,stdout);
}
fclose(fin);
fclose(fout);

if((fin=fopen("out.txt","r"))==NULL)
return -1;
printf("\n/*********************************\n");
printf("* dest *\n");
printf("*********************************/\n");
while((c=fgetc(fin)) != EOF){
putc(c,stdout);
}
fclose(fin);
return 0;
}
766デフォルトの名無しさん:2010/01/13(水) 21:39:26
>>760
f(x)としてなにを与えますか?
767デフォルトの名無しさん:2010/01/13(水) 21:52:43
>>765ありがとうございます。

あと問題3だけなんですが、わかる方よろしくお願いします。
768デフォルトの名無しさん:2010/01/13(水) 21:57:44
横から失礼するが
double型変数bをifの条件分岐に用いているが、これって良いの?
769768:2010/01/13(水) 21:58:40
レス番忘れてた
>>757
770デフォルトの名無しさん:2010/01/13(水) 22:13:58

[1] 授業単元:C言語
[2]問題文:
下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。
新しい科目を登録する機能
すでに登録されている科目を修正(更新)する機能
登録科目のソート(並び替え)を行う機能
登録科目の一部分のみを検索して取り出し、表示する機能
登録科目から、卒業までに必要な単位を計算し、表示する機能
卒業要件を簡略化しても良い.
[3] 環境
 [3.1] windowsXP
 [3.2] Visual Studio 2003
 [3.3] 言語: c
[4] 期限: 1月22日
771デフォルトの名無しさん:2010/01/13(水) 22:14:04
問題分が足りてなかったので再投稿させてもらいます。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方式がある。
この方法ではf(x)=0の解の近似値を次の漸化式から求める。
ただしf'(x)はxによる微分を表す。
x_(i+1) =x_i - f(x_i)/f'(x_i)

f(x)=2^2-e^x-2=0

x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で順次計算して示せ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2010/01/15
[5] その他の制限:特に無し

計算結果も書いていただけると助かります。
お願いします。
772デフォルトの名無しさん:2010/01/13(水) 22:23:55
1] 授業単元: プログラミング
[2]問題文:氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み
込んで、両面に表示するプログラムを作成せよ.このとき,構造体を利用
せよ.
 (入力ファイル:test.txtの中身)

Tanaka 31 Man
Kawai 24 Man
Suzuki 22 Woman
ltoh 40 Woman
Sugita 37 Man
 

[3] 環境
 [3.1] Linux
 [3.2] k-term emacsで作成するやつ
 [3.3] 言語: c
773デフォルトの名無しさん:2010/01/14(木) 00:06:26
[1] 授業単元:
画像処理
[2] 問題文(含コード&リンク):
http://ux.getuploader.com/pyonpyon2009/download/6/%E8%AA%B2%E9%A1%8C.zip
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
1/24
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
難しいかもしれませんがよろしくお願いしますm(_ _)m
774デフォルトの名無しさん:2010/01/14(木) 02:50:37
775デフォルトの名無しさん:2010/01/14(木) 05:56:26
[1] 授業単元:C言語
[2]問題文:
二次関数 f(x) = x2 について、x=0から3までの定積分を求めたい。
区分求積法により、この積分の近似値を求めよ。
x軸方向の刻み幅Δxを0.1とする。
[3] 環境
 [3.1] windowsXP
 [3.2] Visual Studio 2003
 [3.3] 言語: c
[4] 期限:10時くらいまで
776デフォルトの名無しさん:2010/01/14(木) 11:14:56
[1]オペレーティングシステム
[2]問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10361.txt
[3]環境
[3.1]OS:Linux
[3.2]コンパイラ名とバージョン:gcc
[3.3]C

[4]2010年1月17日23時59分まで
よろしくお願い致します。http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
777デフォルトの名無しさん:2010/01/14(木) 14:30:51
コンパイル時にプリプロセッサを駆使して
ソース中の文字列を暗号化して埋め込もうとしたけど無理だね
778620:2010/01/14(木) 14:34:13
>>673
ありがとうございます。自分が作ったのだと、下半分んみならず上半分も掃き出してしまって意味がわからなくなっていました。
779デフォルトの名無しさん:2010/01/14(木) 15:09:38
>>757
お礼遅れてごめんなさい。助かりました。ありがとうございました。
780620:2010/01/14(木) 20:23:39
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 0,1のみを成分にもつn次正方行列Aは各行を2進数とみなして整数のリストとして表現できる。
たとえば 3次正方行列は 1,0,0/0,1,0/0,0,1は{4,2,1}

これに掃き出し法を適用し、{5,6,3}と入力したとき{5,3,0}と出力されるプログラムを作れ。
ヒントとして、行の入れ替えは数字の入れ替えになる。
n桁2進数xの下位から、上位からの数字はそれぞれどう書けるか考える。
[3] 環境
 [3.1] OS: XP
 [3.3] 言語: C 
[4] 期限: 2010年1月21日
>>673さんに作っていただいたプログラムを基に作るようになります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10350.txt
まず正方行列の次数をきめ、入力できる10進数の最大値を表示、その後その範囲で数値をn回キーボードから入力した後、掃き出し法を行い、その正方行列の行の値を10進数に変換するプログラムです。

前回は本当に助かりました。一応自力でできましたが、>>637さんので自分の組み方の汚さにへこみました。
今回もよろしくお願いします。

781デフォルトの名無しさん:2010/01/14(木) 21:38:47
>>768
割り算の割る数をチェックしているだけだから、fabs(b) < epsilon とする必要はあまりないかと。
782デフォルトの名無しさん:2010/01/14(木) 22:20:20
>>774さんありがとうございました。
783デフォルトの名無しさん:2010/01/14(木) 22:40:44
>>768
何故疑問を持ったのかその理由を詳しく
784デフォルトの名無しさん:2010/01/14(木) 22:45:29
>>783
>>768じゃないけど
科学技術計算とかだと丸め誤差とかで、実数に「==」は使うな
って教えられる場合があるからじゃね?
785デフォルトの名無しさん:2010/01/14(木) 23:03:41
>>784
それが理由なら
条件分岐に〜という前振りの必要なく
多倍長浮動小数でなくdouble型を使っていいの?という質問になると思う
786デフォルトの名無しさん:2010/01/14(木) 23:10:18
>>780
http://codepad.org/4hprL3ci
問題の意図的には↓かもしれない
http://codepad.org/gLksb9FS
787デフォルトの名無しさん:2010/01/14(木) 23:26:12
割る数のチェックの場合、エラーの回避が目的ならば
0.0と厳密に一致するかをチェックするだけで十分。
(更に、必要ならば割り算のあとで結果がINFになってないか確認)

2つのdoubleで表現された値が同じかを判定するときは許容誤差eplisonを使って
if( fabs(a-b) < eplison ){...}
で判定する。

>>785
固定ビット長の表現を使う限り丸め誤差の問題は逃れられないよ
788デフォルトの名無しさん:2010/01/14(木) 23:35:30
[1] 授業単元:プログラム基礎演習1
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10359.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:windows visual stdio 2008
 [3.3] 言語: C
[4] 期限: 2010/1/16
[5] その他の制限:プログラムはあまり詳しくないので、ややこしい手法は避けていただければありがたいです。
          難しいかもしれませんが、宜しくお願いします。
789785:2010/01/14(木) 23:52:03
>>787
だからそう言ってるのですが・・・
アンカー間違い?
790デフォルトの名無しさん:2010/01/15(金) 00:31:18
>>789
多倍長でも、ビット数は有限だkら丸め誤差はあるでしょう?
791デフォルトの名無しさん:2010/01/15(金) 00:32:34
>>789
すまん、表現を間違えた。
浮動小数表現を使う限り丸め誤差の問題は逃れられないよ

0.1を2進数表現する場合、無限桁が必要になるので
どんなに桁数を増やしたところで丸め誤差は必ず生じる
792デフォルトの名無しさん:2010/01/15(金) 00:58:22
>>775
#include <stdio.h>
double f(double x){
return x*x;
}
double integral(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = (f(a) + f(b)) / 2;
for(int i = 1; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", integral(0, 3, 0.1));
}
793デフォルトの名無しさん:2010/01/15(金) 01:29:23
>>771
http://codepad.org/VqsHCXGc

f(x)= 2^2 - e^x -2 = 0 って変な式だけど括弧忘れてない?
794デフォルトの名無しさん:2010/01/15(金) 04:25:21
>>792
それ区分求積法じゃなくて、台形公式じゃね?
795デフォルトの名無しさん:2010/01/15(金) 04:46:48
>>794
勘違いしてた
区分求積法の一部に台形公式とかシンプソン則があると思ってたぜ

#include <stdio.h>
double f(double x){
return x*x;
}
double quadrature_by_parts(double a, double b, double h){
int n = (int)((b - a) / h);
double sum = 0;
for(int i = 0; i < n; i++){ sum += f(a + i*h); }
return sum * h;
}
int main(){
printf("%f", quadrature_by_parts(0, 2, 0.01));
}
796デフォルトの名無しさん:2010/01/15(金) 05:26:20
[1] プログラミング演習
[2] 標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する。
辞書順:文字列比較の順番はASCIIコード文字順をベースとした辞書順であるが、文字順が一部
が変更される A<a<B<c<C<c.....
[3] OS: Turbo-Linux-Fuji コンパイラGCC4.0 言語:C
[4] 2/1迄
[5] 作業用ファイルwork.dat(内容は自由、サイズ無制限とする。プログラム終了時点で削除する必要は無い
ものとする。)
を使用出来る。stdio.hで定義されている標準ライブラリ関数、定数を利用出来る。
整列アルゴリズムは自由とする。

私にはとても難しいので助けて下さい。
797デフォルトの名無しさん:2010/01/15(金) 05:29:13
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):問題1 戻値を持たず、一つの double 型の引数を持ち、過去に関数が
呼ばれた時、全ての引数の値の総和を表示する関数、d_total
を定義し、動作の確認ができるプログラムとして作成せよ。例えば、
d_total(0.1);
d_total(0.2);
d_total(0.3);
と呼べば、d_total の内部の処理にて
0.1
0.3
0.6

と表示するということである。
ただし, プログラム中の変数として、外部変数は使ってはな
らない。「内部変数か」自動変数のみを使って実現せよ。
問題2  戻値を持たず、二つの float 型のポインタの引数を持ち、二つ
の引数の値を交換する関数、f_swap を定義し、動作の確認がで
きるプログラムとして作成せよ。
問題3 4行4列のint型の行列を、転置するプログラムを作成せよ。動作の確認のため、転置前と転置後
の行列の内容を表示するようにせよ
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月17日 20時まで
[5] その他の制限:特になし
798デフォルトの名無しさん:2010/01/15(金) 05:52:34
[1] やさしいC
[2] 次の関数workをコンパイル出来るように,正しく動作するように修正し、
正しく実行出来るかどうかを確かめられるプログラムを作りなさい。
double *work(double[] a,int N){
double result[N];
result[0] = a[N-2] ,a[N-1],a[0],a[1] a[2]を1:3:4:3:1の重みで平均した値
result[1] = a[N-1],a[0],a[1],a[2] を1:3:4:3:1の重みで平均した値
result[2] = a[0],a[1],a[2],a[3]を1:3:4::3:1の重みで平均した値
result[3] = a[1],a[2],a[3],a[4] を1:3:4:3:1の重みで平均した値
....
result[N-2] = a[N-4],a[N-3],a[N-2],a[N-1],a[0] を1:3:4:3:1の重みで平均した値
result[N-1] = a[N-3],a[N-2],a[N-1],a[0],a[1] を1:3:4:3:1の重みで平均した値
return (double)&result[0];
}
[3] OS:Mac-OSX (Leopard) コンパイラ:gcc 3.0 (XCode) 使用言語:C
[4] 2/1迄
[5] レポート課題です。よろしくお願いします。
799デフォルトの名無しさん:2010/01/15(金) 06:54:05
問題1と2(動作確認無し)
void d_total(double d){
static double sum=0;
char buff[32];
int i;
sprintf(buff,"%f",sum+=d);
printf("%d\n",strlen(buff));
for(i=strlen(buff)-1;i>=0;i--){
if(buff[i]=='0')
buff[i]=0;
else break;
}
printf("%s\n",buff);
}

void f_swap(float* f1,float* f2){
float tmp;
tmp = *f1;
*f1 = *f2;
*f2 = tmp;
}

>>798
問題文そのまま張ってみ
800デフォルトの名無しさん:2010/01/15(金) 07:21:43
[1]Cプログラミング演習
[2]
関数 op(int a,int b,int c)は次の結果を返す。
結果: a op1 b op2 c op3 a op4 b op5 c (op1,op2,op3,op4,op5は 
+ - * %(剰余) xor and orの何れか一つ)
+:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6
op1=(3*a+5*b)の7による剰余がkの場合、演算kを選択
op2=(5*b+4*c)の7による剰余がkの場合、演算kを選択
op3=(a+3*c)の7による剰余がkの場合、演算kを選択
op4=(a+2*b)の7による剰余がkの場合、演算kを選択
op5=(3*c+2*b)の7による剰余がkの場合、演算kを選択
ここで演算子の優先順位は高い順に + > - > * > % >xor > and > orとする
例えば1 + 3 xor 5 * 7 - 5は(1+3) xor (5*(7-5))を意味する
関数opをコードせよ。どのような演算が行われたか具体的に出力するprintf文も同時に出力すること。
[3] Windows Vista/Visual-C++ 2008/C言語
[4] 1/26迄
801800:2010/01/15(金) 07:35:17
一部転記ミスがありました。修正します。すみませんでした。
修正前 → +:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6
修正後 → +:演算0 -:演算1 *:演算2 %(剰余):演算3 xor:演算4 and:演算5 or:演算6

よろしくお願い致します。
802デフォルトの名無しさん:2010/01/15(金) 07:49:22
>横から失礼するが
>double型変数bをifの条件分岐に用いているが、これって良いの?
アンカー付けろよ
803800:2010/01/15(金) 07:51:53
重ね重ねすみません。[5]を書き忘れてました。
追加:[5] opから呼び出せる関数はprintfのみとする。

多分もう無いと思います。2度も修正して申し訳ございません。
804デフォルトの名無しさん:2010/01/15(金) 07:54:42
>>798

こういうことなんだろうか。
ttp://codepad.org/TAzi6z6B
805デフォルトの名無しさん:2010/01/15(金) 08:32:47
質問者の皆様へ

問題文はなるべく一度にミスなく転記して下さるようお願いします。回答が遅れます。
回答期限が短過ぎる場合、回答してもらえない場合があります。
どんな問題でも最低3日はかかると思って下さい。
問題の種類や書き方によっては、回答が無かったり、定まらない場合もありますので、その場合は
回答してもらえないかもしれません。
806デフォルトの名無しさん:2010/01/15(金) 08:39:21
実際には一時間以内の回答が一番多いのですか、過度な期待はしないでくださいの意です。
807デフォルトの名無しさん:2010/01/15(金) 09:10:49
できれば、質問者は、授業単元の箇所に、教育機関の種類(大学院/大学/専門学校/高等学校/工業
高等専門学校)や講座名、レポート課題、自由課題、とかの情報を匿名性を十分に保った
状態で記述して欲しいです。(例:M大学理工学部 教養課程授業「プログラミング実習」)
授業形式をとっていても、企業研究所の研究作業に準ずるものや研究室のゼミ課題とか、専門性
業務性が高過ぎるものに関してはここで質問することは不適です。(回答することも良いことでは
ありません)
808798:2010/01/15(金) 09:54:08
>>804
ありがとうございます。大いに参考にさせて頂きます。
809804:2010/01/15(金) 14:27:31
>>798

間違ってはいないけど、問題に合うように訂正。
double* a → double a[ ]
810デフォルトの名無しさん:2010/01/15(金) 16:08:20
[1] 授業単元:プログラミング論(大学)
[2] 問題文:softbankのiPhoneの使用料金を計算するプログラムを作りなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 01/15
[5] その他の制限: 基礎しか習っていませんif,for,while,switch,scanf,getsあたりまで終了済み

ぎりぎりで申し訳ありませんがよろしくお願いします。
811デフォルトの名無しさん:2010/01/15(金) 16:12:29
特定の企業の営利活動に関係する業務性が高いプログラムである件
期限が1/15(本日)という件

釣りもいいけど..ほどほどに
812デフォルトの名無しさん:2010/01/15(金) 17:01:42
[1] 授業単元: 授業ではないですがお願いします
[2] 問題文(含コード&リンク): 100個の0〜10までの数字があるとするとき0じゃない数字の個数を数えて表示させたいんですが
どうすればいいのかよくわかりませんのでお願いします
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語:C++
[4] 期限:とくになし
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

813デフォルトの名無しさん:2010/01/15(金) 17:18:19
>>812
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int main(){
int a[N],i,count=0;
srand(time(NULL));
for(i=0;i<N;i++)a[i]=rand()%11;
for(i=0;i<N;i++)if(a[i]!=0)count++;
printf("%d\n",count);
return 0;
}
814デフォルトの名無しさん:2010/01/15(金) 18:06:38
>>813
ありがとうございます
815 ◆QZaw55cn4c :2010/01/15(金) 18:15:04
>>796
http://codepad.org/vCLLPsVC

>>797
http://codepad.org/RKjOgsTY

>>807
> 質問者は、授業単元の箇所に、教育機関の種類(大学院/大学/専門学校/高等学校/工業
> 高等専門学校)や講座名、レポート課題、自由課題、とかの情報を匿名性を十分に保った
> 状態で記述して欲しいです。
別にいりません。

> 企業研究所の研究作業に準ずるものや研究室のゼミ課題とか、専門性
> 業務性が高過ぎるものに関してはここで質問することは不適です。
どうしてですか?

> (回答することも良いことではありません)
なぜですか?解けるんだったら解いたらいいじゃないですか。

生徒さんですか?最近、学校ではこんなのがはやっているんですか?
816デフォルトの名無しさん:2010/01/15(金) 18:29:45
>>796
> 文字順が一部が変更される A<a<B<c<C<c.....

の意味が分からない。A,a,B,b,C,c,D,d,...の順で並ぶってこと?
例えば、aA, aa, aaAの順で並ぶってこと?
817デフォルトの名無しさん:2010/01/15(金) 18:52:23
>>816
おそらくそう言う事だろうけど問題文が悪いよね
Z〜aの間にも文字は存在するので
aをA<a<Bとして扱うのか、それともAをa<A<bとして扱うのかで結果は変わるし。
818デフォルトの名無しさん:2010/01/15(金) 18:55:23
「c<C<c」の部分を先に見て、次に「文字順が一部が変更」とくると、
なんか特殊なありえない展開が待っているのかと身構えてしまった。
819353:2010/01/15(金) 20:01:23
[1] 授業単元:情報処理基礎
[2] 問題文:以下はmain関数、サブ関数で作成します。
      1.数値nを一つ入力し、各桁の和を求めよ。(123→6)
      2.数値nを反転した値を表示せよ。(123→321)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:borland bcc32(?)
 [3.3] 言語:C
[4] 期限:2010年1月16日6:00まで
[5] その他の制限:サブ関数まで学習済み
         2問とも、1つのプログラム内に含めてください。
         よろしくお願いします!

820353:2010/01/15(金) 20:19:42
[1] 授業単元:情報処理基礎
[2] 問題文:二次方程式ax^2+bx+c=0の解を求めるプログラムを作成せよ。
       a,b,cの値を入力する。計算結果は必ず5種類表示すること。
       a=b=c=0の場合、処理を終了する。a=b=0、Cが0以外の場合は「不能」と表示する。
       a=0、bが0以外の場合は「一次方程式」と解を表示する。
       判別式がD<0の場合、「虚解」と表示する。
       判別式がD<0の場合以外も、必要な表示、結果を表示します。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:borland bcc32(?)
 [3.3] 言語:C
[4] 期限:2010年1月16日6:00まで
[5] その他の制限:サブ関数まで学習済み
          よろしくお願いします!

821デフォルトの名無しさん:2010/01/15(金) 21:24:40
[1] 授業単元: コンパイラ
[2] 問題文(含コード&リンク):
PAdaで記述されたソースプログラムをC言語のソースプログラムに
変換するコンパイラを作成しなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10363.zip
[3] 環境
 [3.1] OS: Ubuntu
 [3.2] コンパイラ名とバージョン: gcc 4.4.2
 [3.3] 言語: C
[4] 期限: 2010年1月31日13:00
[5] その他の制限:
yacc と lexを使わなければいけないのでC言語の宿題と言っていいのか分かりませんが、よろしくお願いします。
822デフォルトの名無しさん:2010/01/15(金) 21:26:07
>815
質問は自由だろ
要は回答者がそれが不正な質問かどうかを見極めて
不正だと思ったらスルーすればいいわけで
823815:2010/01/15(金) 22:13:35
>>822
ええ、だからおっしゃるとおりのことを主張しているわけです。
>>807 はなんで変な規則をつくるのだろうと疑問に思ったんです。
824デフォルトの名無しさん:2010/01/15(金) 22:33:12
825353:2010/01/15(金) 22:47:38
>>824さん
こんなにはやくありがとうございます。
しかし文字化けで、コンパイルはできましたが実行ではエラーが出てしまいました
よくわからなくて、すみません…
826デフォルトの名無しさん:2010/01/15(金) 23:09:03
827デフォルトの名無しさん:2010/01/15(金) 23:21:18
770で一度投稿しましたが問題文に不足が多かったため再度投稿します。
[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10362.txt[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2010年1月22日5:00まで
お手数かけます。よろしくお願いします。
828デフォルトの名無しさん:2010/01/15(金) 23:39:51
>>819
#include <stdio.h>
#include <string.h>
int total(int n){
int i,r=0;
char buff[256];
char *p=buff;
sprintf(buff,"%d",n);
for(i=0;buff[i];i++){
r+=buff[i]-'0';
}
return r;
}
int reverse(int n){
int i,r=0;
char buff[256];
sprintf(buff,"%d",n);
for(i=strlen(buff)-1;i>=0;i--){
r = r*10 + buff[i]-'0';
}
return r;
}
int main(){
int n,sum,ro;
scanf("%d",&n);
printf("org=%d\n",n);
printf("total=%d\n",total(n));
printf("reverse=%d\n",reverse(n));
return 0;
}
829デフォルトの名無しさん:2010/01/15(金) 23:43:47
>>820,825
自分の環境がEUC-JP(LF)なのを忘れてた。
SJIS(CRLF)にしたのをここに置きましたよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10365.c
830デフォルトの名無しさん:2010/01/16(土) 00:16:19
>>816
>別にいりません。
全員がいらないとは思っていない。あったほうがいいと俺も思う.

>>796の問題文は曖昧で仕様が曖昧と撥ね付けるべき。制約条件も
かなり厳しいんじゃね?
stdio.hしかインクルードしちゃいけないみたいだし。要するに
テンポラリファイルの上に取り込むと同時にソートしろという
意味じゃないかと...(問題文見る限り一行の長さも決まって無いみ
たいだし)特殊な組み込み用途とかライセンス関係が複雑なコンパイラ
でコーディングする場合、標準関数すら自由に使うことがままならない
し再帰呼び出しもNGとかあるしこういうこともあってもおかしくは無いんで
問題(この場合は作業指示?)の出所を知るのは後々のトラブル防止の為にも
必要だね。
>どうしてですか?
>なぜですか?解けるんだったら...
俺様仕様でも誰様仕様でもプログラムを書くことを解くとは言うのは変
831デフォルトの名無しさん:2010/01/16(土) 00:21:06
>>798,>>804
重みをつけて平均化する際は要素数5ではなく、重みの和12で割るのが普通じゃないかな。
先に重み係数を重みの和で割っておいても良いから、その場合の関数部分だけ書くとこんな感じ
(全角スペースは全て半角スペース2つに置き換えてコンパイルしてね)。

#define countof(array) (sizeof(array)/sizeof((array)[0]))
double *work(double a[],int N)
{
  double wsum = 0, weight[] = { 1, 3, 4, 3, 1 };
  double *p, *result = NULL;
  int i, j, k, n = countof(weight);
  for (i=0; i<n; i++) wsum += weight[i];
  for (i=0; i<n; i++) weight[i] /= wsum;
  if (N < n || NULL == (result = (double *)calloc(N,sizeof(double))))
    return NULL;
  for (i=0,p=result; i<N; i++,p++)
    for (j=0,k=i+N-2; j<n; j++,k++)
      *p += weight[j] * a[k%N];
  return result;
}
832830:2010/01/16(土) 00:44:19
アンカー間違えてた>>816さんすみませぬ
>>815さん宛ですた
833353:2010/01/16(土) 01:40:38
>>892
ありがとうございます!
ありがたく使わせていただきます!m(_ _)m
834デフォルトの名無しさん:2010/01/16(土) 02:11:38
[2010/01/15 19:27:07] リュック: 【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://www.dotup.org/uploda/www.dotup.org563734.zip.html
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: c++ / c
[4] 期限: ([2010年01月22日23:59まで]
[5] その他の制限: どなたか、よろしくお願いします。
アップローダーのパスワードは0000です。
自力で出来る限りやってみたのですが限界を感じました
835デフォルトの名無しさん:2010/01/16(土) 02:31:13
>>815
>>796の問題は(>>830が指摘しているように)malloc禁止だから
メモリ上に確保してどうこうというのはまずい。

やってできないことはなさそうだけど難しいなあw
836デフォルトの名無しさん:2010/01/16(土) 03:55:46
>>800

>>803 見落としたっ!
関数呼びまくりバージョンを参考までにorz
ttp://codepad.org/JhbztdNT
837デフォルトの名無しさん:2010/01/16(土) 05:09:26
>>800
http://codepad.org/U0CZpxOb

>>836
俺も同じことやったわw
関数を全部マクロに置き換えたバージョンも作ったけど
関数ポインタの呼び出しがあることに気づいて結局書き直したよ
838デフォルトの名無しさん:2010/01/16(土) 05:11:56
>>837の7-8行目消し忘れたorz
不要なので削除してください。
839デフォルトの名無しさん:2010/01/16(土) 06:15:01
速度面での最適化が不足じゃね?
840デフォルトの名無しさん:2010/01/16(土) 07:31:45
計算量のオーダーが変わるならともかく、見通しの良さ重視でいいと思うんだ。
宿題レベルのプログラムであんまり突き詰める必要なくね?
841デフォルトの名無しさん:2010/01/16(土) 07:52:27
[1] 授業単元: コンピュータシミュレーション
[2] 問題文(含コード&リンク):円盤状に分布させた質点に回転の初期条件をあたえたいのですが、
中心からの距離、位置により速度の大きさと向きが変わるのでどのようにおけばいいのかお願いします。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: c++ 
[4] 期限: 2010/1/17
[5] その他の制限:
円盤状に分布まではできてます。よろしくお願いします。
842デフォルトの名無しさん:2010/01/16(土) 09:54:17
>>834
なるべく元のやつを活かそうと思ったけど、気がついたら別モノにorz
せっかくなんでコメントいっぱいつけといた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10366.c
843デフォルトの名無しさん:2010/01/16(土) 11:22:54
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。
途中経過も表示してください。
例:1^2 + 2^2 =
1^2 + 2^2 + 3^2 =
....
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年1月15日まで]
[5] その他の制限: While 文を使うこと:

While (条件式){
繰り返し実行すべきプログラム

っていうやつです。
844843:2010/01/16(土) 11:25:23
すみません。期限の日にちを間違えました。18にちです。 m(_ _)m
845デフォルトの名無しさん:2010/01/16(土) 13:07:02
#include <iostream>
#include <vector>
using namespace std;
int main( int argc, void **argv )
{
    int i=0;
    vector<int> vi;

    while(++i<=10){
        vector<int>::iterator it;
        int s=0;
        vi.push_back(i);
        it=vi.begin();
        while(it!=vi.end()){
            cout<<*it<<"^2 ";
            s+=(*it)*(*it);
            advance(it,1);
            cout<<(it==vi.end()?"= ":"+ ");
        }
        cout<<s<<endl;
    }
    return 0;
}
846デフォルトの名無しさん:2010/01/16(土) 13:30:30
>>843

#include <string>
#include <iostream>
#include <sstream>

int main(void)
{
std::ostringstream head;
long sum = 0;
int i = 1;

while (i <= 10) {
sum += i * i;
if (i != 1)
head << "+ ";
head << i << "^2 ";
std::cout << head.str() << " = " << sum << std::endl;
++i;
}
return 0;
}
847デフォルトの名無しさん:2010/01/16(土) 15:38:51
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10368.txt
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月18日12:00まで

よろしくお願いします。
848デフォルトの名無しさん:2010/01/16(土) 16:56:54
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10371.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:1月18日 23:00まで
[5] その他の制限: N-2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10370.txt

よろしくお願いします。
849デフォルトの名無しさん:2010/01/16(土) 17:06:15
>>848
scanf("%c", &moji);

if(moji == '1')
{

}
else
{
moji=0;
}

//bitmap[y][x] = sepia(bitmap[y][x]);
bitmap[y][x] = moji?sepia(bitmap[y][x]):bright(bitmap[y][x]);
850デフォルトの名無しさん:2010/01/16(土) 19:02:22
[1] 授業単元:基礎プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10369.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:1月17日まで
[5] その他の制限:
 

よろしくお願いします。
851デフォルトの名無しさん:2010/01/16(土) 19:50:35
852デフォルトの名無しさん:2010/01/16(土) 20:13:32
[1] 授業単元:動画像処理演習
[2] 問題文(含コード&リンク):http://www.dotup.org/uploda/www.dotup.org567007.zip.html
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualC++2008
[3.3] 言語:C言語(ライブラリとしてARToolkit、OpenCVを使用しています)
[4] 期限:2010年01月17日23:59まで
[5] その他の制限:どうか、よろしくお願いします。
アップローダーのパスワードは8756です。
自力で出来る限りのところまでやってみたのですが限界を感じました。
853デフォルトの名無しさん:2010/01/16(土) 20:18:53
[1] 授業単元: プログラミング演習 (木構造と数式処理)
[2] 問題文(含コード&リンク):

算術式の値を計算して表示するプログラムを作ってください。
ただし,変数の値は全て1であるとして,式の値を求めること.

例えば,入力が (2*3) と (x+(y+z)) の場合,次のような出力をすればよい.
show: に続いて入力された算術式を,eval: に続いて算術式の値を表示している.

(2*3) ←入力
show: (2*3)
eval: 6

(x+(y+z)) ←入力
show: (x+(y+z))
eval: 3


[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月18日12:00まで

よろしくお願いします。
854デフォルトの名無しさん:2010/01/16(土) 20:20:59
なんか最近依頼が多くなった?
どっかにURL晒されてるのかな?
855デフォルトの名無しさん:2010/01/16(土) 21:06:48
>>841
v_i = ω×(x_i - x_{center})
Cじゃなくて物理の問題だ
856デフォルトの名無しさん:2010/01/16(土) 22:27:40
>>854
多分、期末だから。
レポート課題があるんでしょ。
857デフォルトの名無しさん:2010/01/16(土) 23:14:29
プログラムの課題なのですが、わからない部分があるので、ぜひご指摘をお願いします。

課題:黒いケーブルを動画像で除去せよ

使用するライブラリ:ARToolKit、OpenCV

ヒント:1.ケーブルを閾値処理で認識せよ
2.黒い物体から伸びる黒いケーブルを除去するため、処理領域の指定を行う必要がある
3.ケーブルの除去はif文を用いて工夫せよ

・1はできています
・2の処理領域の指定がよくわかりません。たぶん、ARToolkitのマーカを用いて領域を指定するのだと思います。今回、この部分の解決をぜひよろしくお願いいたします。
・3の除去処理ですが、ソースの真ん中部分に記述されています。この部分の解決もできればよろしく

お願いいたします。今の段階では、ずらしてもケーブルが映ったりして、色々と問題があります…

http://codepad.org/cQPfo9Sr
858デフォルトの名無しさん:2010/01/16(土) 23:54:27
>>857
自分で考えて工夫するところだからなんとも言えんが。
ケーブルみたいな細いものなら「N回収縮→N回膨張」で消えるから、

1: 作業用画像 <- 元画像 // 物体とケーブルが写っている
2: 作業用画像をN回収縮
3: 作業用画像をN回膨張 // 物体だけ残る
4: 元画像から作業用画像を引く // ケーブルだけ残る

とやればいいんじゃない?
最適なNはケーブルの太さで変わるから、そこはいろいろやって工夫してくれ
859デフォルトの名無しさん:2010/01/17(日) 00:04:02
860デフォルトの名無しさん:2010/01/17(日) 00:11:42
質問ですが、
error c2059
このエラーはどうやって回避すればいいんでしょうか?
わかる方お願いします><
861デフォルトの名無しさん:2010/01/17(日) 00:17:56
デバッグが済んでいれば、エラーは出ないよ。
862デフォルトの名無しさん:2010/01/17(日) 00:39:05
>>860
ここは質問スレでも、初心者スレでもなくて宿題を片付けるスレだ。
863デフォルトの名無しさん:2010/01/17(日) 01:50:21
>>859
ありがとうございます!!助かりました!!
864デフォルトの名無しさん:2010/01/17(日) 01:59:02
[1] 授業単元: プログラミング演習 (木構造と数式処理)
[2] 問題文(含コード&リンク):

算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式

(1+(2+3))
(a*(b*c))
((i*x)+((j*y)+(k*z)))

の括弧を左にくくり直すと,それぞれ,次の式になる.

((1+2)+3)
((a*b)*c)
(((i*x)+(j*y))+(k*z))

括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を
「左に転回」する変形と捉えられる

この操作を実行する関数 rotate_left_exp()を完成させてください。
括弧をくくり直すと値の変わる (8+(8*8)) のような式や,括弧をくくり直せる部分が内側にある (a+(b*(c*d))) のような式は,
変形しないこと.


[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年01月18日12:00まで

よろしくお願いします。
865連動スレ:2010/01/17(日) 05:32:41
大学のプログラミング演習の課題を添削するスレ
http://pc12.2ch.net/test/read.cgi/tech/1188501699/
866デフォルトの名無しさん:2010/01/17(日) 07:30:06

【質問テンプレ】
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク): コマンド引数を使用して
以下のように指定した文字列中の指定番号の文字を表示するプログラムを作成せよ。

例:./prg1 abcde 1
char 1 is "a"
./peg1 abcdef123456 10
char 10 is "4"

エラー処理もしっかり行うこと。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2010/1/18/15:00
[5] その他の制限:とくにありません。
867デフォルトの名無しさん:2010/01/17(日) 07:50:56
>>866

#include<stdio.h>

int main( int argc, char* argv[] )
{
const int pos = atoi( argv[2] );

printf( "char %d is \"%c\"\n", pos, argv[1][pos-1] );


return 0;
}



# この課題の人は違うと思うけど
# 情報学科の人は自力で課題やった方が良いと思うけどなぁ
# と、宿題片付けますスレでつぶやいてみる
868デフォルトの名無しさん:2010/01/17(日) 08:33:08
#エラー処理どころか、エラー入力が無いことを前提としたコード
#書いている人に言われると逆効果なんじゃね
#とつぶやいてみる  てかgcc3.4でstdio.hでatoiが定義されて
#ないから、実行しても動かない。つまり脊髄反射で
#カキコしたことが見え見えw
869868:2010/01/17(日) 08:59:08
>>866

>>868
エラー処理については問題文読み飛ばしてしまったので貼直すとこだった。
(読み飛ばしてしまったから)問題のメインの所だけ書いた。
エラー処理は>>866が考えるかなぁ、と。

atoi( )はstdlib.h必要ないんだ、と思いながらコンパイルしてた。

偉そうなこと言っておいて、どちらのミスも俺がバカであることが招いた結果で
解答者として思慮が足りなかったということですね。
>エラー処理は>>866が考えるかなぁ、と。
も、このスレ相応しくない考え方だった。

直したコード。
ttp://codepad.org/PLtHMRto
870867:2010/01/17(日) 09:00:18
>>869
名前間違えた。。。
871デフォルトの名無しさん:2010/01/17(日) 09:09:33
「俺はバカ」とか自己診断してる時点で十分偉そうです
というのはさておき、やはりあせったことが
原因ぢゃね?
このスレ的な正常な流れ

依頼者:宿題やってぇ
回答者A:できたよ、送るよ
回答者B :俺も出来たよ、送るよ
依頼者:Aさん送ってぇ
回答者:ほれ
依頼者:ありがと、Bさんもありがと
回答者C:おれっちも出来た
依頼者:おせーんだよ
教師:ごらぁ〜
872デフォルトの名無しさん:2010/01/17(日) 09:27:15
int atoi(const char*)
>>868 動くよ
873デフォルトの名無しさん:2010/01/17(日) 09:41:16
ヘッダーはプロトタイプ宣言があるだけだから、warningが出るだけでしょ?
874デフォルトの名無しさん:2010/01/17(日) 09:59:00
gccだと
int main(void){
printf("Hello world¥n");
return 0;
}
でもwaringだけで実行できちゃうみたいだけど
Cの予約語にatoiやprintfは含まれてはないです。
875デフォルトの名無しさん:2010/01/17(日) 10:40:20
依頼者に出来たことを通知し、依頼者が
応答し送ってと言う迄コードを貼らない
これが最大のエラー対策かもな
876872:2010/01/17(日) 10:56:55
>>875
C はプロトタイプ省略できるの。
877デフォルトの名無しさん:2010/01/17(日) 10:59:50
やりたい問題だけやればいいんだよ
878デフォルトの名無しさん:2010/01/17(日) 11:07:16
プロトコル周りはCが一番得意とするところだろ
879859:2010/01/17(日) 12:24:48
>>863
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10374.c
メモリの開放ができていなかったのとEOFの対応追加しといた。
880デフォルトの名無しさん:2010/01/17(日) 13:53:47
長くて書き込めなかったのでうpロダお借りしました。

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

よろしくお願いします。
881デフォルトの名無しさん:2010/01/17(日) 13:54:32
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10376.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:1月18日まで
[5] その他の制限:
 
よろしくお願いします。
882デフォルトの名無しさん:2010/01/17(日) 14:31:42
>>864
木の深さが違うから回転とは捉えられないだろう
どんな木構造を想定してるか書かないと問題に
合った回答は期待できないぞ

(1+(2+3))→
> +
> 1 +
>  23
883デフォルトの名無しさん:2010/01/17(日) 15:08:40
>>880
Circle::getCPがグダグダ実装だけどw

Circle::Circle(string nm, double x, double y, double d)
: name(nm), cx(x), cy(y), rd(d) {}
int Circle::getCP(const Circle &x) const {
double d = sqrt((cx - x.cx) * (cx - x.cx) + (cy - x.cy) * (cy - x.cy));
int cp;
double penetration = rd + x.rd - d;
double padding = fabs(rd - x.rd) - d;
if (0 < padding) {
cp = 0;
} else if (padding == 0 || penetration == 0) {
cp = 1;
} else if (0 < penetration) {
cp = 2;
} else {
cp = 0;
}
return cp;
}
string Circle::getName(void) const {return name;}
double Circle::getRD(void) const {return rd;}
double Circle::getCX(void) const {return cx;}
double Circle::getCY(void) const {return cy;}

あと、リンク先のは誤字がある。以下のようにしないとコンパイルできない。
cout<<"円"<<p[i].getName()<<"と";
cout<<"円"<<p[j].getName()<<"の共有点の数は";
check_CP(c,sz);
884デフォルトの名無しさん:2010/01/17(日) 16:14:29
885デフォルトの名無しさん:2010/01/17(日) 16:49:07
[1] 授業単元:プログラミング(大学講義)
[2] 問題文
ハングマンを作成せよ。
http://ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c9.html#doc1_id2542
http://ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c10.html#doc1_id2748
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++(?)
 [3.3] 言語:C++
[4] 期限: 2010年01月17日23:59まで
[5] その他の制限

本当に分からなくて困っています。どなたか解答お願い致します。
886デフォルトの名無しさん:2010/01/17(日) 17:31:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ポインタ渡し、値渡し、グローバル変数渡しのswap関数をそれぞれ使ったプログラムを作って実行し、値渡しではうまく変数a,bが交換できないことを示せ。

(ポインタ渡しの場合)

交換前:a=3 b=4
交換後:a=4 b=3

実行例(値渡しの場合)

交換前:a=3 b=4
交換後:a=3 b=4

(グローバル変数渡しの場合)

交換前:a=3 b=4
交換後:a=4 b=3

[3] 環境
 [3.1] OS:Windows VISTA
 [3.2] コンパイラ名とバージョン:Visual C++2008
 [3.3] 言語:C++
[4] 期限:2010/01/17 23:59まで
[5] その他の制限:その他制限
887デフォルトの名無しさん:2010/01/17(日) 18:00:12
888デフォルトの名無しさん:2010/01/17(日) 18:06:23
>>884
(a*(b*c))
((i*x)+((j*y)+(k*z)))

これが動かないよ
889デフォルトの名無しさん:2010/01/17(日) 18:48:04
[1] 授業単元:プログラミング序論演習(大学講義)
[2] 問題文
charやdouble型にも1個の関数で対応するswap関数を作れ
http://www.ics.kagoshima-u.ac.jp/edu/proen1c/page8.html
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++2008EE
 [3.3] 言語:C
[4] 期限: 2010年01月18日17:00まで
[5] その他の制限

どうかお願いします。
890デフォルトの名無しさん:2010/01/17(日) 19:01:12
>>885 9章
#include <iostream>
#include <string>
using namespace std;
char x[100], y[100];
char w[] = "abcdefghijklmnopqrstuvwxyz";
int tryAndSee() {
  int s = 0;
  char c;
  cout << "文字は? "; cin >> c;
  if(c == '?') {cout<<"ヒント:"<<"animal"<<endl; return s;}
  if(c>='a' && c<='z') w[c-'a'] = '_';
  for(int i=0; y[i] != '\0'; i++)
    if(y[i] == c) return s;
  for(int i=0; x[i] != '\0'; i++)
    if(x[i] == c) {y[i] = c; s++;}
  cout << y <<endl; cout << "残りは " << w <<endl;
  return s;
}
main() {
  int hit, total = 0, count = 0, len;
  strcpy(x, "hippopotamus"); strcpy(y, "____________");
  len = strlen(x);
  while(true){
    hit = tryAndSee();
    if(hit == 0) count++;
    if(count == 7) {cout << "残念でした"<<endl; break;}
    total += hit;
    if(total == len) {cout << "おめでとう"<<endl; break;}
  }
  return 0;
}
891デフォルトの名無しさん:2010/01/17(日) 19:17:01
void swap(void *a,void *b,int length){
char *p,*q;
int i;
char t;
p=(char*)a;
q=(char*)b;
/*
↓このやり方は問題がありますのでしないで下さい。
*/
for(i=0;i<length;i++,p++,q++){
t=*p;
*p=*q;
*q=t;
}
return;
}
892デフォルトの名無しさん:2010/01/17(日) 19:18:28
>>886
#include<cstdio>
int a=3, b=4;
void swap_by_pointer(int *pa, int *pb){int c; c=*pa; *pa=*pb; *pb=c;}
void swap_by_value(int a, int b){int c; c=a; a=b; b=c;}
void swap_by_global(void){int c; c=a; a=b; b=c;}
void swap_by_reference(int &a, int &b){int c; c=a; a=b; b=c;}
int main(void){
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_pointer(&a, &b);
printf("a=%d b=%d\n\n", a, b);
}
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_value(a, b);
printf("a=%d b=%d\n\n", a, b);
}
printf("a=%d b=%d\n", a, b);
swap_by_global();
printf("a=%d b=%d\n\n", a, b);
{
int a=3, b=4;
printf("a=%d b=%d\n", a, b);
swap_by_reference(a, b);
printf("a=%d b=%d\n\n", a, b);
}
return 0;
}
893デフォルトの名無しさん:2010/01/17(日) 19:30:16
>>890
本当に本当にありがとうございます!!出来ました!!
図々しいですが、10章もお願いできませんでしょうか
894デフォルトの名無しさん:2010/01/17(日) 19:33:05
お願いします
[1] 授業単元: プログラミング演習V
[2] 問題文(含コード&リンク):
Printfを作る。
%d, %c, %sのみサポートする。
既存の関数・マクロは呼んではいけない。
使えるものはputchar()のみ。

[3] 環境
 [3.1] OS: WindouwsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月21日(木)まで
[5] その他の制限: 特にありません




895859:2010/01/17(日) 19:45:18
>>864
>>884のコードを少し変えてみた。できたよ。これでいいなら。
void rotate_left_exp_(struct node *n)
{
if(n == NULL)
return;
rotate_left_exp_(n->left);
rotate_left_exp_(n->right);
if(n->right == NULL)
return;
if(n->op != n->right->op)
return;
if(n->right->op == number || n->right->op == variable)
return;

swap_node(n->left, n->right);
swap_node(n->left->left, n->left->right);
swap_node(n->left->left, n->right);
rotate_left_exp_(n);
}
896デフォルトの名無しさん:2010/01/17(日) 19:55:23
>>887>>892
ありがとうございます
897デフォルトの名無しさん:2010/01/17(日) 20:10:26
>>881
#include <stdio.h>
enum { N = 3 };
double *solve(double *a, double *b, int N)
{
int i, j, k;
double m;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
m = a[j * N + i] / a[i * N + i];
a[j * N + i] = 0.0;
for (k = i + 1; k < N; k++)a[j * N + k] -= a[i * N + k] * m;
b[j] -= b[i] * m;
}
}
for (i = N - 1; i >= 0; i--) {
for (j = i - 1; j >= 0; j--) {
b[j] -= b[i] * a[j * N + i] / a[i * N + i];
a[j * N + i] = 0.0;
}
b[i] /= a[i * N + i];
a[i * N + i] = 1.0;
}
return b;
}
898897:2010/01/17(日) 20:11:30
>>881
>>897の続き
int main(void)
{
double a[N * N] = { 1, 5, 1, 3, 4, 0, 9, 10, 4 };
double b[N] = { 2, 2, 8 };
int i;
solve(a, b, N);
for (i = 0; i < N; i++)printf("%f%c", b[i], (i == N - 1)? '\n' : ',');
return 0;
}
899デフォルトの名無しさん:2010/01/17(日) 20:49:51
>>881
int main(void){
/*
x1,x2,x3をそれぞれx,y,zとかく
x+5y+z=2
3x+4y=2
9x+10y+4z=8

z=2-5y-x
より
9x+10y+8-20y-4x=5x-10y+8=8
x=2y
3x+4y=2に代入して
10y=2
∴y=1/5,x=2/5
z=2-x-5y=2-2/5-1=3/5
x=2/5 y=1/5 z=3/5
*/
return 0;
}
900デフォルトの名無しさん:2010/01/17(日) 20:56:12
>>889
void swap(void *a, void *b, size_t size)
{
void* tmp;
tmp = (void *) malloc(size);
if (NULL == tmp) return;
memcpy(tmp, a, size);
memcpy(a, b, size);
memcpy(b, tmp, size);
}
901デフォルトの名無しさん:2010/01/17(日) 21:18:05
>>891
>>900
ありがとうございます。
902デフォルトの名無しさん:2010/01/17(日) 21:35:51
>>883
ありがとうございます。
本当に助かります。
903815 ◆QZaw55cn4c :2010/01/17(日) 21:53:38
>>796
バグがありましたので、俺様仕様ですが訂正いたします。
http://codepad.org/RNB6vMYe

>>830 >>835
確かに仕様にあいまいなところはありますが、宿題レベルでそこまで厳しくみるのはどうか。

stdio.h しかインクルードできないのはつらいところです。
stdlib.h (malloc()/realloc()/free())はデフォで可と考えたいところですが、やはりこの問題ではだめですかね。つらいですね。
string.h はご存知のように自前でつくれます。

一行の文字数に制限のないところは malloc() / realloc() が使えるのなら、なんとでもなります。
再帰呼び出しは、メモリ関係の厳しい環境ではアウトですが、これも宿題レベルで要求されることかどうか。
ただ今回の場合は非再帰でかきなおすことができます。
>>796 では「作業用テンポラリファイルを使用できる」とだけ書いており、別に必要なければ使わなくてもよいと判断しました。

ということで、おっしゃるように俺様仕様で書いてしまったわけです。

>俺様仕様でも誰様仕様でもプログラムを書くことを解くとは言うのは変
それは個人の語感の問題。私は書くでも解くでもどっちでも構いません。
904859:2010/01/17(日) 22:01:19
>>864
>>895をさらに改良。速くなった。
void rotate_left_exp_(struct node *n)
{
  struct node *t1, *t2, *t3;

  if(n == NULL)
    return;
  while (1) {
    if(n->right == NULL)
      break;
    if(n->op != n->right->op)
      break;
    if(n->right->op == number || n->right->op == variable)
      break;
    t1 = n->left;
    t2 = n->right->left;
    t3 = n->right->right;
    n->left = n->right;
    n->left->left = t1;
    n->left->right = t2;
    n->right = t3;
  }
  rotate_left_exp_(n->left);
  rotate_left_exp_(n->right);
}
905デフォルトの名無しさん:2010/01/17(日) 22:04:08
>>894
stdarg.h はつかえますでしょうか。
va_list, va_start, va_arg, va_end をつかわないと、可変長引数の printf() は実装できないと思うのですが。
906デフォルトの名無しさん:2010/01/17(日) 22:13:48
> va_list, va_start, va_arg, va_end
その辺はマクロだからどうにかなりそうじゃない?
907デフォルトの名無しさん:2010/01/17(日) 22:23:12
>>906
stdarg.h (va_listマクロ etc.) なしに可変長引数の処理は無理ではないでしょうか。
これはマクロといってもsetjump() logjump() 同様、処理系にべったり依存したマクロですし。
908デフォルトの名無しさん:2010/01/17(日) 22:37:55
>>894,905-907
OSもコンパイラも指定でできないわけない。
http://codepad.org/Ep9uoXLa
909デフォルトの名無しさん:2010/01/17(日) 23:03:57
OpenCVのIplImageを用いて画素の配列を格納して表示しているのですが、
imgをx方向に-30ずらした画像をimg2に入れると、画像全体がずれてしまいます。
imgは元画像、img2は処理画像です。

for(y=0; y < img->height; y++){
  for(x=0; x < img->width; x++){
    tmp[0] = imgNIN->imageData[img->widthStep * y + x*3]; // B
    tmp[1] = imgNIN->imageData[img->widthStep * y + x*3 + 1]; // G
    tmp[2] = imgNIN->imageData[img->widthStep * y + x*3 + 2]; // R

 if(tmp[2]==255 && tmp[1]==255 && tmp[0]==255){
  img2->imageData[img->widthStep * y + x*3] = img->imageData[img->widthStep * y + (x-30)*3];
  img2->imageData[img->widthStep * y + x*3 + 1] = img->imageData[img->widthStep * y + (x-30)*3 + 1];
  img2->imageData[img->widthStep * y + x*3 + 2] = img->imageData[img->widthStep * y + (x-30)*3 + 2];
 }
  }
}

閾値処理で認識した部分(imgNIN)だけをずらすには、どうすれば良いのでしょうか?
910デフォルトの名無しさん:2010/01/17(日) 23:42:43
OpenCVなんて知らない俺が逆質問。
引き算をする箇所は、転送先のX座標じゃないの?
img2->imageData[img->widthStep * y + (x-30)*3] = img->imageData[img->widthStep * y + x*3];
(x-30)がレンジ(0〜img->width)を外れた場合に行がずれてないか?
911デフォルトの名無しさん:2010/01/17(日) 23:47:49
お願いします
[1] 授業単元:電子演算機演習
[2] 問題文(含コード&リンク):
 2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。
例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。


 (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数
 NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main
 関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、
 main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白
 又は改行まで)
[3] 環境
 [3.1] OS: WindouwsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月19日まで
[5] その他の制限:なし

912デフォルトの名無しさん:2010/01/17(日) 23:48:33
これが詩です。


Imagine there's no heaven
It's easy if you try
No hell below us
Above us only sky
Imagine all the people
Living for today

Imagine there's no countries
It isn't hard to do
Nothing to kill or die for
And no religion too
Imagine all the people
Living life in peace

You may say I'm a dreamar
But I'm not the only one
I hope someday you'll join us
And the world will be as one
913デフォルトの名無しさん:2010/01/17(日) 23:49:41
これが詩です。

Imagine there's no heaven
It's easy if you try
No hell below us
Above us only sky
Imagine all the people
Living for today

Imagine there's no countries
It isn't hard to do
Nothing to kill or die for
And no religion too
Imagine all the people
Living life in peace

You may say I'm a dreamar
But I'm not the only one
I hope someday you'll join us
And the world will be as one
914デフォルトの名無しさん:2010/01/17(日) 23:52:20
>>894
授業でどんなのやったんだ
それによって実装方法変わる
てか実装方法わかる
915デフォルトの名無しさん:2010/01/17(日) 23:59:52
>>885 締め切り後なので返答は要らない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10381.cpp
916885:2010/01/18(月) 00:43:22
>>915
ありがとうございます。すごく助かりました。本当にありがとうございました。
917デフォルトの名無しさん:2010/01/18(月) 01:08:50
[1] 授業単元:情報処理概論
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10360.txt
  このプログラムは5 個の整数の合計,平均,分散,最大値,最小値を求めるC 言語プログラムである.
  空欄(ア)(イ)(ウ)(エ)(オ)を埋めてプログラムを完成させなさい.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月18日まで

よろしくお願い致します。
918917:2010/01/18(月) 01:10:49
期限を書き間違えました。
2010年1月28日までです。

よろしくお願いします。
919デフォルトの名無しさん:2010/01/18(月) 01:33:53
どなたか
>>776の問題を解くことができませんか?
もしいましたらよろしくお願いします。
920デフォルトの名無しさん:2010/01/18(月) 04:15:09
>>905,907
可変長引数を使った場合呼出規約が_cdeclになるので
渡された引数がスタック上に順番に配置される。
引数の個数と長さはPrintf()に渡されるformatに書いてある通り(と信じるしかない)

手元のVCだと>>908さんので上手く動いてるんだけどcodepadだとダメだな
921デフォルトの名無しさん:2010/01/18(月) 04:31:16
>>917
http://codepad.org/d9vRzuxo
ただ分散の求め方がこれで良かったのか危ういんで間違ってたら言って。
一応
(要素 − 平均値)^2 / 5
でやってみたけどなにぶん習ったのがかなり前の話だから相当怪しい。
922neko:2010/01/18(月) 06:05:08
visual studioのwindowsフォームアプリケーション visual C++のプログラミングについて質問です!!
かなり急いでます。
チェックボックスを5個とボタン1個を使いアンケートみたいなプログラムを作りたいのですができません。

内容としてはチェックの数で表示される答えを違うようにしたいのです。
0〜1個つけたら良い
2〜3個つけたら普通
4〜5個つけたら悪い
みたいな感じで最後にボタンを押したら評価がでてくるというものです。
すべてのプログラムを教えてください!!
923デフォルトの名無しさん:2010/01/18(月) 06:38:08
>>903
宿題レベルだから、「リソースは許可無く使えない」だろ? これを解くと表現できる。
業務の場合は、「外部団体が管理すOS/言語環境の事実上の標準なリソースを使えるが、
それを使用した、させた場合の責任も著者に託される」だろ? これは書くと表現できる。
924デフォルトの名無しさん:2010/01/18(月) 06:45:08
>>891
どこに問題があるの?
925デフォルトの名無しさん:2010/01/18(月) 07:38:49
>>921
平均が ave = sum / 5; で切り捨てられてるよ
あと分散は (2乗の平均) - (平均の2乗) でも計算できるよ
926デフォルトの名無しさん:2010/01/18(月) 08:33:53
>>921
double sum = 0; /* 合計を格納する変数*/
927デフォルトの名無しさん:2010/01/18(月) 08:42:23
>>889
void swap(void *a,void *b,int length)
{
char *p,*q;
int i;
char t;

p=(char*)a;
q=(char*)b;
/*
無理やりワンライナーw
*/
while(length--) t = *p, *p++ = *q, *q++ = t;

return;
}
928デフォルトの名無しさん:2010/01/18(月) 08:46:11
>>927
どこに問題があるの?
929デフォルトの名無しさん:2010/01/18(月) 08:50:52
>>922 C++/CLI Form Application
main(){
  int para1, para2, para3, para4, para5 ;
  srand(time(0));
  para1 = rand()%2;
  para2 = rand()%2;
  para3 = rand()%2;
  para4 = rand()%2;
  para5 = rand()%2;
  /**START***/
  int count = 0;
  if(para1 != 0) count++;
  if(para2 != 0) count++;
  if(para3 != 0) count++;
  if(para4 != 0) count++;
  if(para5 != 0) count++;
  switch(count){
  case 0:
  case 1:
    puts("良い");
    break;
  case 2:
  case 3:
    puts("普通");
    break;
  case 4:
  case 5:
    puts("悪い");
    break;
  }
  return 0;
}
930デフォルトの名無しさん:2010/01/18(月) 08:59:10
点プレに沿っていようがいまいが、いつのまにか質問と解答(めいたもの)スレに
なっちまったな
宿題の依頼を無償で業務的に片付けるスレ
だろ、ここ?
931デフォルトの名無しさん:2010/01/18(月) 09:25:25
>>930
業務的に→道楽的に
932デフォルトの名無しさん:2010/01/18(月) 09:38:56
なんで品質は決して期待してはいけない
933929:2010/01/18(月) 09:39:26
>>922
http://www.dotup.org/uploda/www.dotup.org572311.lzh.html
0000

Form1.h ファイルの
private: System::Void button1_Click() {
} を書き換えるんだよ、この子は。
業務的に⇒親として
934デフォルトの名無しさん:2010/01/18(月) 10:46:56
[1]授業単元:C言語実習(専門学校:選択授業)
[2]課題:
コマンドライン引数に与えられた英数字からなる文字列を、長さが長いものが先、同じ長さのものどう
しでは辞書に記載される場合に先頭のほうに書かれるものが先に出力されるように出力するCを作る。
引数が与えられてない場合は、何も出力しない。
[3]環境:Windows vistaにBorland C++ 5.5をインストールし,テキストエディターとコマンドプロンプトで
実習作業をする。(IDEはまだ使えない)
[4] 結果報告期限:2/1迄
[5] 制限:
★main関数から呼び出すことが出来る関数はstdio.hに定義のprintf関数だけに制限されています。
★main関数の再帰呼び出しは出来ないものとします。
UNIXシステムの初歩と、ループ文やポインタ、再帰呼び出しは習っています。

よろしくお願いします。(m___m)
935デフォルトの名無しさん:2010/01/18(月) 11:16:41
936デフォルトの名無しさん:2010/01/18(月) 11:27:16
>>934
制限よく読んでなかった。
http://codepad.org/Ljq8XRdE
937デフォルトの名無しさん:2010/01/18(月) 11:39:41
自作関数も呼び出しちゃダメなように読めるけど
938デフォルトの名無しさん:2010/01/18(月) 11:40:02
[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10362.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2010年1月22日5:00まで
お手数かけます。よろしくお願いします。
939デフォルトの名無しさん:2010/01/18(月) 12:03:03
940デフォルトの名無しさん:2010/01/18(月) 12:37:55
>>937
他作関数も自作関数もその使用は簡単なようで
実は意外にムズい。安直な使用はどツボに嵌る
原因と習ったことがあるね
941デフォルトの名無しさん:2010/01/18(月) 12:41:46
>>934
#include<stdio.h>

int main(int argc, char *argv[]){
int l1, l2, i, j, k, swap_flag;
char *p;

for(i=1;i<argc;i++){
for(j=1;j+1<argc;j++){
swap_flag=0;
for(l1=0;argv[j][l1];l1++);
for(l2=0;argv[j+1][l2];l2++);

if(l1<l2) swap_flag=1;
if(l1==l2){
for(k=0;k<l1 && argv[j][k]==argv[j+1][k];k++);
if(argv[j][k]>argv[j+1][k]) swap_flag=1;
}

if(swap_flag){
p=argv[j];
argv[j]=argv[j+1];
argv[j+1]=p;
}
}
}
for(i=1;i<argc;i++) printf("%s\n", argv[i]);

return 0;
}
942デフォルトの名無しさん:2010/01/18(月) 13:14:05
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月19日 9:00まで
[5] その他の制限:

宜しくお願い致します。
943デフォルトの名無しさん:2010/01/18(月) 13:15:02
出来るのか出来ないのかという観点の域を出ずに志向するのが問題、
出来ることを前提にその方法を厳選するのが宿題だろ?C的には
944デフォルトの名無しさん:2010/01/18(月) 13:15:37
>>934
printfしか呼び出しちゃだめ、ってなんかオモロイなw
がんばってみたくなる。
945デフォルトの名無しさん:2010/01/18(月) 13:21:24
Vistaだとprintfでスタックにコードを書き込んでも実行困難だな
946934:2010/01/18(月) 13:29:25
>>935,936
>>939
>>941
こんなにすぐにやって頂いてありがとうございます。
今授業中なので帰宅してから、DLしてみます。
というか全部OKだったらどれを選べば
いいのかわかりません。その辺りも教えて下されば
恐縮です。
947デフォルトの名無しさん:2010/01/18(月) 13:50:54
>>942
chomp()が危ないよ。出題者に教えて上げようね。
948デフォルトの名無しさん:2010/01/18(月) 15:02:03
chopでもchompでもない実装。
949デフォルトの名無しさん:2010/01/18(月) 15:39:22
Perlコードに移植出来ないものはCコードじゃないってか?
950デフォルトの名無しさん:2010/01/18(月) 16:44:05
[1] 授業単元:プログラミング演習V
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10382.c
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[5] その他の制限: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10383.txt (TSPfile これは48都市)
上のプログラムはランダム法でTSPの解を求めるプログラム。ファイル名をrandom.cとする。
./random TSPfile で実行して、ランダム法での距離を出力する。ってのをやってるんだけども
・ランダムに都市情報を格納していく時に同じ都市番号が格納されてしまう
・距離lenを表示する時に0.00になっちゃうのは、double distance()がおかしいから?もしくは102、103行目の部分
この2点をお願いします。関係無い関数とか引数が定義されてたりして汚いソースだけどお願いします
951デフォルトの名無しさん:2010/01/18(月) 17:08:12
OS: linux
コンパイラ名とバージョン: gcc
言語: C

実行する度に、「computer」「internet」「windows」のいずれかをランダムに表示させたいです。

条件は、二次元配列を使うことなので次のようにしてみました。
char moji[3][10]={"computer","internet","windows"};

乱数を発生させるために、rand又はsrandを用いれば良いと言うことは検索して分かったのですが、その先が・・・

よろしくお願いします。
952デフォルトの名無しさん:2010/01/18(月) 17:23:54
>>951

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

int main(void){
char moji[3][10]={"computer","internet","windows"};
int num;
srand((unsigned int)time(NULL));
num=rand()%3;
printf("%s\n",moji[num]);

return 0;
}
953デフォルトの名無しさん:2010/01/18(月) 17:47:23
>>950
中括弧の省略はミスの元

for(i=0;i<num_city;i++) {
if(i!=num_city-1) {
printf(" ランダム法での距離lenは %f\n",len);
len += distance(i,i+1);
}
}
954デフォルトの名無しさん:2010/01/18(月) 18:01:04
>>950
int len;
printf(" ランダム法での距離lenは %f\n",len);

int型を%fで表示しようとしてるのが根本原因のようだ。
955デフォルトの名無しさん:2010/01/18(月) 18:07:32
>>952
短くしてみる

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

void main(void){
char moji[3][10]={"computer","internet","windows"};
srand((unsigned int)time(NULL));
printf("%s\n",moji[rand()%3;]);
}
956955:2010/01/18(月) 18:08:30
すまんm
moji[rand()%3;]の;は無視してくれ
957デフォルトの名無しさん:2010/01/18(月) 18:39:16
958デフォルトの名無しさん:2010/01/18(月) 18:54:56
画像処理に詳しい方、>>773お願いします。
959デフォルトの名無しさん:2010/01/18(月) 19:38:09
>>895
ありがとうございました!!
960デフォルトの名無しさん:2010/01/18(月) 19:50:05
>>959
>>904を見てみて
961デフォルトの名無しさん:2010/01/18(月) 19:58:54
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 4行4列のint型の行列を、転置するプログラムを作成し、動作の確認のため、転置前と転置後
の行列の内容を表示するようにせよ。
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 1月19日 17時
[5] その他の制限: 特になし
962デフォルトの名無しさん:2010/01/18(月) 20:06:49
>>960
本当にありがとうございます!!!
963デフォルトの名無しさん:2010/01/18(月) 20:09:21
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10384.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2010年1月22日 12:00まで
[5] その他の制限:

よろしくお願いします。
964デフォルトの名無しさん:2010/01/18(月) 20:20:59
>>953>>954
あざっす。こっから色々いじってきます
965デフォルトの名無しさん:2010/01/18(月) 20:24:42
966デフォルトの名無しさん:2010/01/18(月) 20:42:09
>>924
a,bが重なり合った同サイズの領域のことが考慮されてない
int a[10];
swap((double*)&a[1],(double*)&a[3],sizeof(double));
967デフォルトの名無しさん:2010/01/18(月) 22:25:19
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。
途中経過も表示してください。
例:1^2 + 2^2 =
1^2 + 2^2 + 3^2 =
....
プログラムは↓をできるだけ編集しないでWhile文を使ってお願いします。
#include <stdio.h>
int main(void) {
int i,n,nn;
n=1;
for (i=1;i<=30;i=i+1) {
nn=2*n;
printf("%9d の 2倍は %10d です。\n",n,nn);
n=nn;
}
return 0;
}
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年1月15日まで]
[5] その他の制限: While 文を使うこと:

While (条件式){
繰り返し実行すべきプログラム

っていうやつです。
前回書いた問題と少し違うのでよろしくお願いします。
968951:2010/01/18(月) 22:34:51
>>952
ありがとうございます。
動作確認しました。
969967:2010/01/18(月) 22:50:55
967には問題文を間違えました。すみませんm(_ _)m
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1の2倍は2です
2の2倍は4です
4の2倍は16です...
を30回繰り返すプログラム
プログラムは↓をできるだけ編集しないでWhile文を使ってお願いします。
#include <stdio.h>
int main(void) {
int i,n,nn;
n=1;
for (i=1;i<=30;i=i+1) {
nn=2*n;
printf("%9d の 2倍は %10d です。\n",n,nn);
n=nn;
}
return 0;
}
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年1月19日8時まで]
[5] その他の制限: While 文を使うこと:

While (条件式){
繰り返し実行すべきプログラム

っていうやつです。
970デフォルトの名無しさん:2010/01/18(月) 22:59:08
>>969
#include <stdio.h>
int main(void) {
  int i,n,nn;
  n=1;
  i=1;
  while (i<=30) {
    nn=2*n;
    printf("%9d の 2倍は %10d です。\n",n,nn);
    n=nn;
    i=i+1;
  }
  return 0;
}
971デフォルトの名無しさん:2010/01/18(月) 23:12:35
[1] 授業単元:計算機基本
[2] 問題文(含コード&リンク):
1^2+2^2+3^2+...+8^2+9^2+10^2
プログラムは↓から始めて、While文を使ってお願いします。
#include <stdio.h>
int main(void) {

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC Developer
 [3.3] 言語: C++
[4] 期限: [2009年1月19日8時まで]
[5] その他の制限: While 文を使うこと:

While (条件式){
繰り返し実行すべきプログラム

っていうやつです。
972971:2010/01/18(月) 23:17:34
すみません・・・
問題文をまた間違えてしまいました・・・
↓が正しいです。
1^2+2^2+3^2+...+8^2+9^2+10^2
を求めるプログラムを作ってみましょう
1^2=
1^2+2^2=
1^2+2^2+3^2=
などと途中経過の表示もしなさい
プログラムは↓から始めて、While文を使う。
#include <stdio.h>
int main(void) {

です。何度も間違えてすみません
973デフォルトの名無しさん:2010/01/18(月) 23:26:11 BE:142006853-S★(508111)
次スレ立てました
C/C++の宿題片付けます 134代目
http://pc12.2ch.net/test/read.cgi/tech/1263824755/
974デフォルトの名無しさん:2010/01/18(月) 23:35:15
>>972
#include <stdio.h>
#include <string.h>
int main(void) {
int i,sum;
char buff[128]={0},tmp[16];
i=1;
sum=0;
while(i<=10){
sum+=i*i;
if(i==1)sprintf(tmp,"%d^2",i);
else sprintf(tmp,"+%d^2",i);
strcat(buff,tmp);
printf("%s=%d\n",buff,sum);
i++;
}
return 0;
}
975917:2010/01/18(月) 23:52:08
>>921
大変助かりました。
ありがとうございました。
976デフォルトの名無しさん:2010/01/19(火) 00:18:48
あ、まちがい。
>>921
ave = (double)sum / 5;
977デフォルトの名無しさん:2010/01/19(火) 02:08:31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):異なる自然数p,qと、もう一つの自然数dを入力する。
d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、
最後にその個数を表示するプログラムを作成せよ。入力する数字はp、q、dの順とする

実行例
3 5 10
3 5 6 8 9 10
合計で6個あります。
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:VS 2008
 [3.3] 言語:C
[4] 期限:2010年01月19日10:00まで
[5] その他の制限:特になし
978977:2010/01/19(火) 02:09:25
よろしくお願いします。
979デフォルトの名無しさん:2010/01/19(火) 03:14:00
kには0を含めないのに、mとnには0を含めるってのは矛盾じゃね?
どっちも自然数としか書いてないのに
980デフォルトの名無しさん:2010/01/19(火) 03:17:51
>>977
その実行例も含めて、出題された問題文?
981デフォルトの名無しさん:2010/01/19(火) 07:20:58
>>977
#include <stdio.h>

int f(int p, int q, int n)
{
while(n>=0) {
if(n % q == 0) return 1;
n -= p;
}
return 0;
}

int main(void)
{
int p, q, d, i, c = 0;

scanf("%d%d%d", &p, &q, &d);

for(i=1; i<=d; i++) if(f(p,q,i)) printf("%d ", i, c++);
printf("\n合計で%d個あります。", c);

return 0;
}
982デフォルトの名無しさん:2010/01/19(火) 08:18:42
>>973 乙
983977:2010/01/19(火) 09:08:53
ありがとうございました。
984デフォルトの名無しさん:2010/01/19(火) 09:32:37
構造体を使用して、アドレス帳を作るプログラムなんですが、検索する関数がうまく働きません。
言語はCです。いくら悩んでも分からないんで、どなたか指摘をお願いします。

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

#define DATA_MAX 5 /* データの最大件数 */ #define NAME_LEN_MAX 16 /* 名前の長さ */
#define TEL_NUMBER_LEN_MAX 16 /* 電話番号の長さ */  #define YUUBINN_LEN_MAX 8 /* 郵便番号の長さ */
#define ADDRESS_DATA_MAX 64 /* 住所の長さ */

typedef struct Address_Note{
char name[NAME_LEN_MAX]; /* 名前 */
char tel_number[TEL_NUMBER_LEN_MAX]; /* 電話番号 */
char zip_code[YUUBINN_LEN_MAX]; /* 郵便番号 */
char address[ADDRESS_DATA_MAX]; /* 住所 */
}NOTE;
void input_data(NOTE *p); /* データの入力 */
void print_data(NOTE *p); /* データの出力 */
void data_serch(NOTE *p, NOTE data[]); /* データの検索 */
int g_address_data_count;

int main(void){
char judge;
NOTE data[DATA_MAX];
NOTE *p;
g_address_data_count = 0;
985984(2):2010/01/19(火) 09:33:20
for(p=&data[0]; p!=&data[DATA_MAX]; p++){      input_data(p);
g_address_data_count++;
printf("続けて入力しますか?(Yes:Y、No:N)");
scanf("%s", &judge);
while(judge!='y' && judge!='Y' && judge!='n' && judge!='N'){
      printf("YかNを入力してください:");
scanf("%s", &judge);  }
if(judge=='n' || judge=='N') break;
else if(judge=='y' || judge=='Y') continue; }

if(g_address_data_count == DATA_MAX){      printf("これ以上登録できません。\n");
exit(EXIT_FAILURE);  }

for(p=&data[0]; p!=&data[g_address_data_count]; p++){ print_data(p);  printf("\n"); }
data_serch(p, &data[DATA_MAX]);
return EXIT_SUCCESS;}

void input_data(NOTE *p){
printf("名前を入力してください:");
scanf("%s", p->name);
printf("電話番号を入力してください:");
scanf("%s", p->tel_number);
printf("郵便番号を入力してください:");
scanf("%s", p->zip_code);
printf("住所を入力してください:");
scanf("%s", p->address);
printf("\n");
}
986984(3):2010/01/19(火) 09:34:20

void print_data(NOTE *p){
  printf("名前:%.8s\n電話番号:%.15s\n郵便番号:%.8s\n住所:%s\n", p->name, p->tel_number, p->zip_code, p->address);
}

void data_serch(NOTE *p, NOTE data[]){
int i;
char serch[NAME_LEN_MAX];
char *str;
printf("誰を検索しますか?:");
scanf("%s", serch);
for(p=&data[0]; p!=&data[g_address_data_count]; p++){
str = strstr(p->name, serch);
if(str != NULL)
print_data(p);
}
}

これで最後です。
かなり長く見づらくて申し訳ないですがよろしくお願いします。
987デフォルトの名無しさん:2010/01/19(火) 09:38:17
C言語なら俺に聞け(入門編)Part 59
http://pc12.2ch.net/test/read.cgi/tech/1263014439/
988デフォルトの名無しさん:2010/01/19(火) 09:44:36
>data_serch(p, &data[DATA_MAX]);
data_serch(p, data);
989984:2010/01/19(火) 10:00:15
>>987
全然気付かなかったw
ありがとうございました。
990984:2010/01/19(火) 10:52:59
何度もすみません。
.txtファイルを読み込みたいんですが、記述はおかしくないはずなのにポインタfpに
読み込めず、エラーーメッセージすら出ません。
原因はどんな事が考えられるでしょうか?

int main(void)
{ int i,val;
char judge;
NOTE data[DATA_MAX];
NOTE *p;
FILE *fp;

if((fp = fopen("address_note.txt", "r"))==NULL)
{
printf("ファイルが見つかりませんでした---address_note.txt\n");
exit(EXIT_FAILURE);;
}

i=0;
while(fscanf(fp,"%d",&val)!=EOF)
{
fscanf(fp,"名前:%.8s\n電話番号:%.15s\n郵便番号:%.8s\n住所:%s\n", p->name, p->tel_number, p->zip_code, p->address); /*データの読み込み*/
i++; /*次に移るために「i」を1つ増やす*/
}
991デフォルトの名無しさん:2010/01/19(火) 10:55:35
>>990
p が指す先の領域を指定していない
992デフォルトの名無しさん:2010/01/19(火) 11:00:45
>>991
よく分からないんですが、どんな記述をすればいいんでしょうか?
993:2010/01/19(火) 11:02:56
while(fscanf(....
{
p=(NOTE*)data[...
994デフォルトの名無しさん:2010/01/19(火) 11:03:52
>>992
p=&data[i];
995デフォルトの名無しさん:2010/01/19(火) 11:03:52
>>992
よく分からないんじゃなくて、お前、何一つわかっちゃいないだろ?
fscanfの直前でp = data[i];してみれ。
996955:2010/01/19(火) 11:05:54
何一つ分かってないのは俺の方でしたスミマセン。樹海行ってきます。
997:2010/01/19(火) 11:08:36
ここは質問刷れじゃないんで自己責任で
998デフォルトの名無しさん:2010/01/19(火) 11:16:53


C/C++の宿題片付けます 134代目
http://pc12.2ch.net/test/read.cgi/tech/1263824755/
999デフォルトの名無しさん:2010/01/19(火) 11:21:42
>>997
すみません。

>>995
いえいえ。

>>993-995
おっしゃるとおりにやったんですが、コンパイルしてもfpに代入された値は使用されていないと出ます。
もうさっぱり分からないです…。
1000デフォルトの名無しさん:2010/01/19(火) 11:27:32
>>999
ソースコード全部貼れ馬鹿
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。