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

このエントリーをはてなブックマークに追加
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++の宿題を片付けます 105代目
http://pc11.2ch.net/test/read.cgi/tech/1208268461/
2デフォルトの名無しさん:2008/05/03(土) 19:36:31
3デフォルトの名無しさん:2008/05/03(土) 19:37:58
4デフォルトの名無しさん:2008/05/03(土) 19:43:39
前スレで出来る出来る言ってるヤツはソースあげてからにしてね。
回数数えて引けばいいって言ってるけど、nが1000なら引く前の数が2^1000で
intの範囲にはとても入りきらない数だって理解してないだろ。
5デフォルトの名無しさん:2008/05/03(土) 19:45:02
ヒント (a - b) % n = a%n - b%n
6デフォルトの名無しさん:2008/05/03(土) 19:54:02
ソースまだ〜?
7デフォルトの名無しさん:2008/05/03(土) 19:54:08
mod 10000000だからintでいいんだよ。
問題はs_mの重複除外で、ヤツの言う方法だとO(2^m)の計算量になる。
そこのところの解決方法を是非教えていただきたい。
8デフォルトの名無しさん:2008/05/03(土) 19:55:50
まだ続けたい人はこちらでどうぞ

形式言語・形式文法
http://science6.2ch.net/test/read.cgi/informatics/1170914378/
9デフォルトの名無しさん:2008/05/03(土) 20:05:36
たとえば、{abb、aab、ab、aaa} ならば、{ab、aaa}を含む文字の総数を求める。
というのも、abbも含む文字は、abを含む文字全体に含まれる為。
A=ab、B=aaaとおき、AとBが少なくとも一回含まれるn桁の文字全体は、
A、Bをn桁に配置できる場合の数は、(n-1)(n-4)くらいとおもう。あとは{a,b}を適当に埋める。
するとたとえばAとAが重複して現れる場合の数が余分数えてしまうので除外する。
これは、たとえばAが2回、Bが1回含まれる場合の数を求めて引く。全ての場合に対して計算する必要あり。
10デフォルトの名無しさん:2008/05/03(土) 20:13:30
だからそのソースを書いてよ
11デフォルトの名無しさん:2008/05/03(土) 20:14:47
> 関心無いので、やりたい人がやればいい やれば出来る程度はおもう。
12デフォルトの名無しさん:2008/05/03(土) 20:15:55
こんだけ長文連投しといて関心ないってのはありえないw
13デフォルトの名無しさん:2008/05/03(土) 20:21:19
ソース書かなくてもいいから

n = 10
S = {aaaa, aaab, baaa, abba}

のときの答えをその手法で出してみてくれる?
14デフォルトの名無しさん:2008/05/03(土) 20:21:47
文字列S含む場合の数と、文字列SとTを両方含む場合の数が求まれば
解決する。聴いてみてくれれば教えるのでやってくれ。
15デフォルトの名無しさん:2008/05/03(土) 20:22:12
>>1
> 気に入らない質問やその他や発言はスルーの方向で。
16デフォルトの名無しさん:2008/05/03(土) 20:24:15
気に入らないんじゃなくて、よりよいソースを見たいんだよ。
17デフォルトの名無しさん:2008/05/03(土) 20:25:22
>>13
aaaaとaaabを含む文字が最低5桁で実現できる事を考慮していなかった
18デフォルトの名無しさん:2008/05/03(土) 20:30:09
>>13 17のようなケースがある為、これはなかなか数え上げるのが困難な気がするな。
17の場合は、aaaaとbaaab、aaaa(とaaaab)の場合を数える事で解決できるとは思うが
コードを書くのも手計算も面倒だ。 
19デフォルトの名無しさん:2008/05/03(土) 20:31:06
>13程度に即答できないようじゃ話にならんだろw
前スレ702でも709でも一瞬だぜ
20デフォルトの名無しさん:2008/05/03(土) 20:36:13
>>18
smに何が入力されるかもわかんないのに手計算ってw
21デフォルトの名無しさん:2008/05/03(土) 20:39:51
SM > にしおかすみこ > アッーーーー! > クソミ(ry
22デフォルトの名無しさん:2008/05/03(土) 20:42:08
プログラムは書いてみたけどあってるかわからん

とりあえずランダム入力を生成する部分だけアップローダにあげてみた
できた人は、この入出力があってるか確認してくれんかね?

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6417.c
23デフォルトの名無しさん:2008/05/03(土) 20:48:26
mとlが同じなら文字列何いれても同じ答えになるの?
24デフォルトの名無しさん:2008/05/03(土) 20:55:45
すまん、乱数シード狂ってた結果を張ってたので直した

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6418.c

>>23
m と l は、m 個の文字列(それぞれ長さl)を
線形合同法で生成してるってこと
25デフォルトの名無しさん:2008/05/03(土) 20:58:50
solveがないものを貼られても意味ないよ
26デフォルトの名無しさん:2008/05/03(土) 21:00:24
間違ってる solve を堂々と張るのが恥ずかしいから
誰かに結果検証してもらうために結果だけ張ってるんじゃねーか わかってくれよ
27デフォルトの名無しさん:2008/05/03(土) 21:01:01
>>23
そんなはずがない。
同じ文字列はいくつ入れても1つとかわらないので。
28デフォルトの名無しさん:2008/05/03(土) 21:01:54
nとmとlの値が同じでも入力する文字列が違えばansは違ってくるんだから
何を入れたかわからないんじゃあってるかどうかなんてわからないだろ
29デフォルトの名無しさん:2008/05/03(土) 21:02:55
お前らソロソロウザイ
30デフォルトの名無しさん:2008/05/03(土) 21:04:09
>>26 前スレのプログラムと比較せよ
31デフォルトの名無しさん:2008/05/03(土) 21:05:12
>>26
13のを手入力で入れて答えが288ならあってるんじゃね?
32生ハム の代理人:2008/05/03(土) 21:09:52
[1] 授業単元:プログラミング演習
[2] 問題:ある英語の文章が規則に従って変換されてファイルに保存されています。
     その文章をファイルとして読み込み、正しい英文に復元し、ファイルに出力する
     プログラムを作成せよ。です。規則を解読したところ、単語の文字数の分だけ
     (ASCIIコード表でいう)引数?が下げられています。つまり本文でaは、
     ファイルではb,ofはqh,TheはWkhで表示されています。また、zはaに戻ります。
      willはamppです。数字やピリオド等はそのままです。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:2008年5月10日まで
[5] その他の制限:プログラムでポインタを用いて文字列を定義し、既存の文字列操作
         関数(strxxx(),例えばstrlen()など)は使わずに、自分で作成すること。
  
よろしくおねがいします。

流れぶった切って、まだ期限があるから俺はやるぞ!
3322:2008/05/03(土) 21:11:49
>>28
乱数で生成する部分も張ったから大丈夫かなと思ったけど
そうでもないのか 入力したものを直接張るからできた人頼む

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

>>30-31
前スレのが終わるくらい(20くらい)までは確かめたけどそれ以上が分からんのよ
34デフォルトの名無しさん:2008/05/03(土) 21:12:46
文書がないことには無理
35デフォルトの名無しさん:2008/05/03(土) 21:14:40
>>33 途中まで間違えが無かったら、大きい数字だけ間違える方が難しい。
36デフォルトの名無しさん:2008/05/03(土) 21:16:15
>>32
それ終わってなかった?
37デフォルトの名無しさん:2008/05/03(土) 21:16:22
>>32
一応前スレで解決してんじゃねーの?
38デフォルトの名無しさん:2008/05/03(土) 21:21:30
>>36 >>37
コンパイルして実行してみた?本人のレス見た?
39デフォルトの名無しさん:2008/05/03(土) 21:21:46
>>32はいちいち引っ張るような内容じゃないだろ
40デフォルトの名無しさん:2008/05/03(土) 21:25:15
GWが終わるまでコンパイルできる環境にないって言ってたな

で、なんで>>32
41デフォルトの名無しさん:2008/05/03(土) 21:28:26
なんだ>>32は既出だったのか
危うく吊られるとこだったZE
42デフォルトの名無しさん:2008/05/03(土) 23:16:02
>>32の解
初心者丸出しのソースならできた
前スレに出したのは単語毎じゃなくて文単位で変換してしまってたorz
43デフォルトの名無しさん:2008/05/03(土) 23:39:16
>>39
> あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
> 気に入らない質問やその他や発言はスルーの方向で。
44C++コンパイラ:2008/05/03(土) 23:57:30

Microsoft Visual C++ Toolkit 2003
ftp://195.252.112.9/programiranje/programski-jezici/VCToolkitSetup.exe

VCToolkitSetup.exe

size 32952488
sha1sum 956c81c3106b97042c4126b23c81885c4b5211f4

edonkey checksum
ed2k://|file|VCToolkitSetup.exe|32952488|c534888fa7605403dcb183d2d15282d1|/
45C++:2008/05/03(土) 23:58:41

Visual Studio 2005 Express Edition CD イメージからのインストール方法
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/

Visual C++ 2005 Express Edition 日本語版 サイズ 611,540 KB CRC 0xB3AD1A2F
http://download.microsoft.com/download/8/E/8/8E85D539-2255-4CFD-AA97-440AE6C6F44A/vc.iso




Visual Studio 2008 Express Edition の DVD イメージからのインストール
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx
http://download.microsoft.com/download/F/A/6/FA693F60-97D1-44EB-AC7F-6A44AC42B10E/VS2008ExpressJPNX1428694.iso

46デフォルトの名無しさん:2008/05/04(日) 00:20:04
>>32
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6421.c
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6422.c
6421.cは変換用。file1.txtを読み込み、file2.txtに変換したものを出力。
6422.cは復元用。file2.txtを読み込み、file3.txtに復元したものを出力。
ファイルが存在しない場合、その場で標準入力に切り替え。終了はEOF。
47デフォルトの名無しさん:2008/05/04(日) 00:33:25
>>5
違う気がするよ
48デフォルトの名無しさん:2008/05/04(日) 01:02:11
>>5はヒントになってないよ。
少なくとも、任意のa,bにおいて成り立つ理論ではないからね。
49デフォルトの名無しさん:2008/05/04(日) 01:09:52
今入っている配列の中身の数(定義したときの大きさではない)を取得するにはどうすれば良いですか?
例、
int ar[5];
ar[0]=15;
ar[1]=20;

このとき定義した大きさ5のうち2つは値を入れたので2となって欲しい。
50デフォルトの名無しさん:2008/05/04(日) 01:15:02
>>49
別の変数で数えておけばいつでも取得できるよ。
51デフォルトの名無しさん:2008/05/04(日) 01:22:57
配列って定義しただけだとar[3]とかには何が入ってるの?
あと大きさを越えたar[7]とかでは何が入ってるの?
52デフォルトの名無しさん:2008/05/04(日) 01:24:00
>>49
ar[0]から順番に入れる事前提で
ar[2]に「プログラム中で使わない数字」入れる

とか>>50とか
53デフォルトの名無しさん:2008/05/04(日) 01:30:37
>>51
配列確保してから何も入れてない状態だと何が入ってるか分からない
0 かも知れないし -8000万 かも知れない
メモリの中の物がそのまま残ってる

確保してない部分に何が入ってるかは分からないけど、
他のアプリケーションが使ってたりするから、ar[7]とかは使っちゃいけない
54デフォルトの名無しさん:2008/05/04(日) 02:23:01
>>49
0番目に個数を入れるとか
55デフォルトの名無しさん:2008/05/04(日) 09:37:05
>>49
C++ で STL の map を使えば数えられる
56デフォルトの名無しさん:2008/05/04(日) 10:26:51
メモリがある程度自由に使えるのなら
>>50の方法が一番賢い方法

他の関数でその値をいじるなら、
使用する関数にカウントしている変数をアドレス渡しにすれば
関数から呼び出し元の変数を書き換えられる。
まあグローバル変数でもいいんだけどね^^;
57デフォルトの名無しさん:2008/05/04(日) 10:44:04
>>49
iostream より printf の方が楽なので cstdio 使ってるけどこんな感じ
#include<cstdio>
#include<map>

typedef std::map< int, int > mymap;

int main(void)
{
mymap::const_iterator n;
mymap ar;
int search_index=5;

ar[0]=15;
ar[1]=20;
printf("ar.size()=%d\n", ar.size());
printf("ar[%d]=%d\n", print_index, ar[print_index]);

n = ar.find(search_index);
if(n != ar.end()) printf("ar[%d]=%d\n", search_index, n->second);
else printf("ar[%d] not exist!\n", search_index);

return 0;
}
58デフォルトの名無しさん:2008/05/04(日) 10:48:52
画像処理で
SetPixel(hdc,x,y,c);
だと普通に表示されるのが
    x1=cos(s)*x-sin(s)*y;
    y1=sin(s)*x+cos(s)*y;
    SetPixel(hdc,x1+350,y1,c);
だと白ドットがたくさん入って表示されます。
なぜでしょうか?
59デフォルトの名無しさん:2008/05/04(日) 10:50:51
>>58
投影される側から計算すればおk
60デフォルトの名無しさん:2008/05/04(日) 11:12:04
そろそろ誰か課題投げてくれ
暇と飢えで死にそうだ
61デフォルトの名無しさん:2008/05/04(日) 11:15:42
62デフォルトの名無しさん:2008/05/04(日) 11:23:01
残ってる問題ってたいてい問題不備か何かだよな
63デフォルトの名無しさん:2008/05/04(日) 11:29:16
>>61ありがと、前スレの>830をやってみようかな
64デフォルトの名無しさん:2008/05/04(日) 11:57:30
これまで張ってくれてた人と別人だけど、前スレで残ってるのを張るぜ
しかし >>62 の言うとおり問題不備だったりするのが多いな

【未回答一覧】
>>398 2008/04/27 ヘッダに記載された内容を把握し、ヘッダを使用したプログラムを作成
>>609 2008/04/27 02:12:23 の明日 コードを説明する
>>557 2008/04/29 00:00 <copying-GCをC言語で作成 >
>>558 2008/04/29 for文を使用して、15パズルを作成せよ。
>>784 2008/05/01 22:00 5日分の気温データを最高気温の高い順に並び替えるプログラム
>>651 2008/05/04 ペイントソフトの作成
>>719 2008/05/09 waveOutGetPositionを使用して、非同期で再生中のwavの再生位置を取得する
>>826 2008/05/10 配線経路を導く配線アルゴリズム
>>629 指定なし パズル http://www2u.biglobe.ne.jp/~shunbook/omocha/tlwin4.htm
>>929 指定なし グレースケールPNGの画像位置(i,j)における値
6558:2008/05/04(日) 12:00:08
度々すみません。。
投影される側から計算とは
具体的にどうすればよいのでしょう??
66デフォルトの名無しさん:2008/05/04(日) 12:05:33
多分画像の回転をしようとしているんだとおもうが、
転送元の x,y が x1,y1 になるという計算をしてる
    x1=cos(s)*x-sin(s)*y;
    y1=sin(s)*x+cos(s)*y;
でもこの場合には整数に直した時に異なる複数の(x,y)に対して同一の(x1,y1)になる可能性がある
67デフォルトの名無しさん:2008/05/04(日) 12:15:49
>>65
転送元座標を(x,y)とし転送先座標を(x1,y1)とするとき (つまり>>58の条件と同じ時)
    x=cos(-s)*x1-sin(-s)*y1;
    y=sin(-s)*x1+cos(-s)*y1;
    SetPixel(x1,y1,GetPixel(x,y));
となる
6863:2008/05/04(日) 12:23:34
よく見たら830って936で解決されてんじゃん。
まあ作ってみたら簡単だったから、解決されてて当たり前か。

ということで、
【未解答問題一覧(期限切れ・問題不備除く)】
>>651 2008/05/04 ペイントソフトの作成
>>719 2008/05/09 waveOutGetPositionを使用して、非同期で再生中のwavの再生位置を取得する
>>826 2008/05/10 配線経路を導く配線アルゴリズム

この中に俺が出来る問題はないと断言できるので、CLIの課題クレ
69デフォルトの名無しさん:2008/05/04(日) 12:58:33
>前スレ826

いまいち要求が分からなかったので、始点終点を与えるたびに
その間に配線するプログラムを作ってみた

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6426.c
70デフォルトの名無しさん:2008/05/04(日) 15:18:58
[1] 授業単元:数値計算II
[2] 問題文(含コード&リンク):
キーボードから実数a,b,c,と式d(x),f(x,y)を入力し、
a≦x≦b,c≦y≦d(x)からなる領域Dにおけるf(x,y)の2重積分を求めるプログラムを作成せよ。
計算結果は小数点以下第12位まで表示すること。
ただし、f(x,y)は必ず2重積分可能で、d(x),f(x,y)には文法的に正しい式が入力される
ことが保証されているものとする。広義積分が必要な場合もあるので注意すること。
式に入力可能な文字は数値とx,y,+[加算],-[減算],*[乗算],/[除算],^[べき乗],([括弧],)[閉じ括弧]とする。
なお、変数はいくらでも使ってよく、関数はいくらでも作ってよい。
[3] 環境
 [3.1] OS: 任意
 [3.2] コンパイラ名とバージョン: gcc3以上
 [3.3] 言語: C言語
[4] 期限: 平成20年5月12日 午後5:00まで
[5] その他の制限:
・scanf関数とfloat型は使用禁止(sscanf関数は可)
・数値積分にはシンプソンの1/3公式を使う事

授業中の補足説明では、
・式の入力は「x^2+2*x*y+y^2」や「(x^2-4*x+3)*(4*y-5)」みたいに入力する
・式の解析はスタックを用いて逆ポーランド記法に直すと簡単になる
とのことです。

ポインタや構造体、動的変数など、C言語の基本は一応習い終わっています。
また、2重積分については昨年やりました。

もう頭が沸きました。どうかよろしくお願いします。
71デフォルトの名無しさん:2008/05/04(日) 17:05:46
>>70
> 広義積分が必要な場合もあるので注意すること。
a,b,c,d(x)やf(x,y)が無限大に発散する場合でも正しく計算せよ、ってこと?
シンプソンの公式でそんなことできる?
それとも俺の理解が間違ってるかもしれないが。
72デフォルトの名無しさん:2008/05/04(日) 17:44:49
>>71
>広義積分が必要な場合もあるので注意すること。

すみません、それは先生の間違いだそうです。
去年出した問題では広義積分が必要だったそうです。
今年は去年から問題を少し変えたので、広義積分は必要なくなったようですが、
その行が残ったままになってしまっていたそうです。
73デフォルトの名無しさん:2008/05/04(日) 19:41:40
>>58
アフィン変換 画素補間
74デフォルトの名無しさん:2008/05/04(日) 19:44:59
>>70
念のため確認。
許される関数の条件に「多項式」とかそういうのは無いんだよね?
たとえば d(x) = 1/x, f(x,y) = x^y みたいなのもアリなんだよね?
75デフォルトの名無しさん:2008/05/04(日) 19:47:19
>>70
とりあえず、逆ポーランドへの変換と、式の評価までは作った。
続きは誰かお願い。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6427.txt
76デフォルトの名無しさん:2008/05/04(日) 20:02:02
>>74
そのとおりです。

>>75
すごすぎます。
77デフォルトの名無しさん:2008/05/04(日) 20:33:10
>>70
75様のコードに数値積分部分を付け足した.

いくつかの関数について,mathematica による数値積分結果と
ほとんど一致しているので、たぶん合っていると思われる.

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6428.c
78デフォルトの名無しさん:2008/05/04(日) 20:53:31
>>77
readExprで式が変換されていない。
a,b,cは実数なのに、atoiでは整数しか読めない。
79デフォルトの名無しさん:2008/05/04(日) 21:00:31
どんな数値を入れても計算結果が0になってしまうんですが……
80デフォルトの名無しさん:2008/05/04(日) 21:25:32
作ってもらって文句言うな。
デバッグくらい自分でやれよ。
81デフォルトの名無しさん:2008/05/04(日) 21:40:29
コメント消すときにまとめて消しちゃったみたい.
atoi は完全にミスでした.直したので許してくだせえ.

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6429.c
82デフォルトの名無しさん:2008/05/04(日) 21:56:32
>>80
軽率でした、すみません。

>>81
ありがとうございます。今デバッグしています。
83デフォルトの名無しさん:2008/05/04(日) 22:15:12
シンプソンのところ、4倍の点を次のループでまた足しちゃダメ。
あと、積分区間がh=0.001程度に小さいときにも誤差を出さないようにした。
#define DIV 1024
double integrateInner(ExprElement *fexpr, double c, ExprElement *dexpr, double x) {
double d = eval( dexpr, x, 0 ); // 第二引数 (y) は使わない
double y, S = 0;
double h = (d-c)/DIV;
int i;
for (i = 0; i < DIV; i ++) {
y = c+h*i;
S += eval( fexpr, x, y )
+ 4*eval( fexpr, x, y+h/2 )
+ eval( fexpr, x, y+h );
}
return S * h / 6;
}
double integrateOuter(ExprElement *fexpr, double a, double b, double c, ExprElement *dexpr) {
double x, S = 0;
double h = (b-a)/DIV;
int i;
for (i = 0; i < DIV; i ++) {
x = a+h*i;
S += integrateInner(fexpr, c, dexpr, x)
+ 4*integrateInner(fexpr, c, dexpr, x+h/2)
+ integrateInner(fexpr, c, dexpr, x+h);
}
return S * h / 6;
}
84デフォルトの名無しさん:2008/05/05(月) 06:43:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):()

アルファベット小文字からなる文字列 s が与えられる.
s から何文字か削除して回文(左から読んでも右から読んでも同じ)にしたい.
最小何文字削除すれば回文となるか計算するプログラムを作れ.
なお,s の文字数は 100000 以下としてよい.

例:
s = ababba → 1 (右から 2 番目の b を消して ababa)
s = abcdef → 5 (1 文字残して残りを削除する)


[3] 環境
 [3.1,2] OS,コンパイラ: 問わず
 [3.3] 言語: どちらでも可
[4] 期限: 2008/06/08
[5] その他の制限: 特に無し
85デフォルトの名無しさん:2008/05/05(月) 08:05:29
>>84
#include <stdio.h>
#include <string.h>
int min(int x,int y) { return ((x < y) ? x : y); }
int kaibun_ntake(char *str,int f,int l) {
if(l - f <= 0) return 0;
else if(str[f] == str[l]) return kaibun_ntake(str,f + 1,l - 1);
else return 1 + min(kaibun_ntake(str,f + 1,l),kaibun_ntake(str,f,l - 1));
}
int main(int argc,char **argv) {
printf("%d\n",kaibun_ntake(argv[1],0,strlen(argv[1]) - 1)); return 0;
}
これでどうよ?まあ長いと相当かかるが。。
86デフォルトの名無しさん:2008/05/05(月) 09:36:38
n = 100000 どころか n = 100 でさえまともな時間で終わらなそう・・・
87826:2008/05/05(月) 15:16:45
>>63
>>69
GoldenWeekで忙しいところ見て頂きどうも有難うございます。
早速、確認してみます。
また、分からないことがあったら聞くかもしれません。
宜しくお願い致しますm(__)m
88デフォルトの名無しさん:2008/05/05(月) 15:52:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6433.cpp
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:visual studio 2006
 [3.3] 言語: C言語
[4] 期限:2008年5月6日まで

前に解いてもらった宿題なのですがわからないところがあったので
教えていただけないでしょうか?どうぞよろしくお願いします
89デフォルトの名無しさん:2008/05/05(月) 16:16:05
>>88
循環リストを用いてスタックとキューを実装している
スタックは深さ優先検索、キューは幅優先検索で使われる
90デフォルトの名無しさん:2008/05/05(月) 16:31:34
>>84
>>85氏のを発展させてみた。
1000文字程度なら余裕。
テストパターンの生成処理もついてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6434.txt
91826:2008/05/05(月) 17:03:39
早速質問します・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6435.txt
C言語ではbool型は使えるのでしょうか??
17行目で宣言の構文エラーになるのですが・・
教えて下さい(´・ω・`)
92デフォルトの名無しさん:2008/05/05(月) 17:05:25
無理ぽなら適当に整数型の変数に変更汁!
93デフォルトの名無しさん:2008/05/05(月) 17:06:18
bool→BOOL?
94デフォルトの名無しさん:2008/05/05(月) 17:13:35
bool→int
95デフォルトの名無しさん:2008/05/05(月) 17:14:11
>>91
そのboolをintにすればおk
あとはmain内のstatus変数の宣言を関数の先頭でおこなえばいける。
96826:2008/05/05(月) 17:15:18
>>92様 
>>93
さっそくのレス有難うございます。
大文字にしてもだめでした。
型を変えてみます(´・ω・`)
97826:2008/05/05(月) 17:32:24
>>94
>>95
レス有難うございます。
bool型からint型に変えてみたところ
構文エラーが消えました!!
また、分からないことがあったら質問するかもしれません(´・д・`)
98デフォルトの名無しさん:2008/05/05(月) 18:08:56
(´・д・`) (´・ω・`)
99826:2008/05/05(月) 19:18:36
また質問しても宜しいでしょうか(´・ω・`)
★36行目の!valid_position(src)のビックリマークは否定を表している
 即ち値が0のことを示しているのでしょうか。
★42行目のdist[i][j] = (grid[i][j] == '.' ? MAX_X*MAX_Y : 0);
 がどういう操作がなされているのかが分かりません。
 ?は何の意味でしょうか??
教えて下さいm(__)m
100デフォルトの名無しさん:2008/05/05(月) 19:25:00
>>84 合ってるかどうか検証して欲しい、文字列長1000に対して1秒かからないはず
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SRC_LEN 1000
int search_match_max(const char *a, const char *b){
int count=0, maximum=0;
for(;*a && *b;a++,b++){
if(*a==*b) count++;
else count=0;
if(count>maximum) maximum=count;
}
return maximum;
}
int main(void){
char src[SRC_LEN+1], tmp[SRC_LEN+1];
int i, srclen, count, maximum=0;
for(i=0;i<SRC_LEN;i++) src[i]=(rand()%3)+'a'; // テスト用文字列生成
src[i]='\0';
srclen=strlen(src);
for(i=0;i<srclen;i++) tmp[i]=src[srclen-1-i]; // 反転文字列生成
tmp[srclen]='\0';
for(i=0;i<srclen;i++){
count=search_match_max(&src[i], &tmp[0]);
if(count>maximum) maximum=count;
count=search_match_max(&src[0], &tmp[i]);
if(count>maximum) maximum=count;
}
puts(src);
printf("%d\n", srclen-maximum); // (削る文字数) = (文字列長) - (最大一致長)
return 0;
}
101デフォルトの名無しさん:2008/05/05(月) 19:29:06
>>99
> 36行目
そのとおり。valid_positionの条件が偽であるとき、continueする。
> 42行目
3項演算子 (条件式 ? 値1 : 値2) は、条件式が真なら値1、偽なら値2に評価される。
すなわち、
if(grid[i][j] == '.') dist[i][j] = MAX_X*MAX_Y;
else dist[i][j] = 0;
と同じ動作をする。
102デフォルトの名無しさん:2008/05/05(月) 19:34:26
>>100
"abcbca"に対して結果が3になる。
正解は1(5文字目の'c'を消す)。
103100:2008/05/05(月) 19:35:32
すまん、誤読してたorz
104826:2008/05/05(月) 19:50:53
>>101
レス有難うございます。
そのような表記の仕方があるんですね。
分かりました。
あともう2つ質問なのですが・・・
★46行目のqueue[front++] = src;はfrontをインクリメントすることで
 queueに1個1個srcの値を入れているのでしょうか??
★47行目のwhile (front != bottom)とありますが
 frontとbottomは何を表しているのかがよく分かりません。
 これは一体何を比較しているのでしょうか。
教えて下さいm(__)m
105デフォルトの名無しさん:2008/05/05(月) 20:02:56
>>104
> 46行目
その行はループしていないので、1個1個という表現はおかしいが。
queue[front] = src; front++;
と同じ。
> 47行目
配列queueは、探索すべき位置がずらっと格納される。
bottomは未探索データの先頭をあらわし、
frontは配列の未使用部分の先頭をあらわす。
すなわち、queue[0]〜[bottom-1]は探索済み、
queue[bottom]〜queue[front-1]は未探索、
queue[front]以降は配列自体が未使用。
したがって、(front!=bottom)は、「未探索データが残っている」という条件になる。
106デフォルトの名無しさん:2008/05/05(月) 20:08:19
>>104
もしかして、「キュー」や「幅優先探索」を知らないのかな?
もしそうだったら、
http://ja.wikipedia.org/wiki/幅優先探索
とかを先に一読すると良いかも。
107826:2008/05/05(月) 21:19:39
>>105
>>106
レス有難うございます。
配列queueは探索済み・未探索・配列未使用の順で
並んでいるのですね。
キューの仕組みがよく分からないので教えて頂いた
URLを見てみます。
今日は、もう家に帰宅するので、
また明日、昼頃に学校に来るので教えて下さいm(__)m
ご多忙中のところすみません。。
108デフォルトの名無しさん:2008/05/05(月) 22:30:41
1授業:音声認識
2問題:自己相関と相互相関について説明と自己相関と相互相関を行うプログラムを作成
3環境OS:Linux、コンパイラ:gcc、言語:C
4期限:5月14日
制限は特にありません。

言葉の意味もまだよく理解できていないのですが、よろしくお願いします。
109デフォルトの名無しさん:2008/05/05(月) 22:42:47
>>108
それだけでは問題として成立していない。
(何の自己相関・相互相関を計算するか、など)

まずは言葉の意味をきちんとあなたが理解して、
何があればプログラムが書けるかを認識してから、もう一度質問をどうぞ。
その際に、何か与えられたデータなどがあるなら、それもアップロードすること。
110108:2008/05/05(月) 23:24:03
申し訳ありませんでした。

問題は
振り幅が1で周波数100Hzの正弦波を自己相関処理し
グラフで表現するというものと

振り幅が1で周波数100Hzの正弦波と振り幅が1で周波数100Hzの余弦波を相互相関処理しグラフで表現する
というもので

どちらも標本間隔0.1[ms]、標本の個数は200個です

また
http://www4.plala.or.jp/tamo/dsp/07cross-corr.pdf
↑にほとんど同じ問題があったのでこれを参考にと思ったのですがあまり理解できませんでした。
11188:2008/05/05(月) 23:57:26
<<89氏 ありがとうございます。 また質問で恐縮なのですが、
nodeinfo_t infoary[NODENUM] = {0};
pushstack(&stack, start);
flags[start-1] = 1;

infoary[start-1].label = 1;
infoary[start-1].parent = start;
label = 2;
ノードのラベルと親ノードを、ノード-1の位置に記憶するということ
だと思うのですが、なんでノード-1の位置なのかが理解できませんでした。
教えていただけないでしょうか?よろしくお願いします。
112デフォルトの名無しさん:2008/05/06(火) 00:08:50
>>110
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6438.zip

自己相関、相互相関についての説明は自分でやってくれ
113デフォルトの名無しさん:2008/05/06(火) 02:41:23
【未解答問題一覧(期限切れ・問題不備除く)】
>>http://pc11.2ch.net/test/read.cgi/tech/1208268461/719
2008/05/09 waveOutGetPositionを使用して、非同期で再生中のwavの再生位置を取得する
114デフォルトの名無しさん:2008/05/06(火) 03:01:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)

ASCIIコード(10進数)を使って、50と入力したら本当は2が表示されるところをAが表示されるように、入力した数字+15の文字が表示したい場合はどうしたらいいでしょうか?

例 55と入力→(本当は7と表示されるが)Fと表示される 55+15=70なので
例 77と入力→(本当はMと表示されるが)\と表示される 77+15=92なので

#include <stdio.h>
int main(void)
{

}

[3] 環境
 [3.1] vista
 [3.2] gcc
 [3.3] C
[4] 期限;今日中

習ったのはprintf int for scanf %d とかですか?初歩的なことしか習ってません。
この問題を簡単に解く基本的なことは習っているようです
115デフォルトの名無しさん:2008/05/06(火) 03:12:10
[1] 授業単元:プログラミング演習
[2] 問題文: 親プロセスと子プロセスをつくり読み込みと書き込みを並行処理する。
      親プロセスはfork()とexecl()を使い子プロセスを作成する。
      その後親プロセスはキーボードから文章1行ずつを読み取り、一時ファイルに書き込む。
      この読み込みと書き込みはユーザーがquitと入力するまで行われる。
      子プロセスは一時ファイルから文章を1行ずつ読み取り、出力ファイルに書き込む。
      親プロセスと子プロセスはシグナルを使いは並行処理を行う。
      親プロセスは文章を1行一時ファイルに書き込むごとに子プロセスにSIGUSR1を送る。
      また、親プロセスは入出力が終了した際にSIGUSR2を子プロセスに送る。
      子プロセスは、出力ファイルを作成後、SIGUSR1を受け取るまで待機し、受け取り次第一時ファイルから出力ファイルに一行書き込む。
      また、書き込みが行われている間はSIGUSR1とSIGUSR2をブロックする。
      子プロセスはSIGUSR2を受け取ると終了する。
      http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6439.txt
[3] 環境 
   [3.1] OS: Linux 
   [3.2] コンパイラ名とバージョン: gcc
   [3.3] 言語:C
[4] 期限: 2008年5月6日まで
[5] その他の制限:sigprockmask()sigsuspend()sigaction()などを使い、
          シグナルを受け取るまで待機やシグナルのブロックをしなければなりません。

どうしても子プロセスのSIGUSR1を受け取るまで待機し、SIGUSR1を受け取るごとに入出力するという所がわかりません。
よろしくお願いします。
116デフォルトの名無しさん:2008/05/06(火) 03:13:34
>>114 我は放つ、光のクソース!

#include <stdio.h>
int main(void) {
char ch;
printf("Input > ");
scanf("%d",&ch);
printf("%c",ch+15);
return 0;
}
117デフォルトの名無しさん:2008/05/06(火) 03:24:41
>>116
ありがとうございます

しかしchar ch Inputというのを始めてみたのですが、これを使わないで表すことはできますか?
118デフォルトの名無しさん:2008/05/06(火) 03:26:43
いや、まぁ char を int 型にしても良いんだが・・・
Input って、ただ文字を表示しただけやで・・・
119デフォルトの名無しさん:2008/05/06(火) 03:29:42
おっと…int型ってのでやってみてもらえませんか?
120デフォルトの名無しさん:2008/05/06(火) 03:30:19
いや、自分でcharをintに書き換えればええやんけ・・・
121デフォルトの名無しさん:2008/05/06(火) 03:32:39
なるほど、理解できました。ありがとうございました。
122デフォルトの名無しさん:2008/05/06(火) 05:10:05
#include <stdio.h>
int main(void)
{
int ch;

printf("Input > ");
printf("%c",scanf("%d",&ch)+15);

return 0;
}

こんな事してみたり
123デフォルトの名無しさん:2008/05/06(火) 05:20:58
scanfが返す値を引用してどうするんだと、小一時間(ry
124デフォルトの名無しさん:2008/05/06(火) 05:48:32
ばれた?w
125デフォルトの名無しさん:2008/05/06(火) 07:16:15
>>84
まだお待ちしています
126デフォルトの名無しさん:2008/05/06(火) 11:26:05
>>125
自分でデバッグもできないのにこんな課題与えられるのかよ
しかもこんな難しい回答提出するつもりでいるの?
127デフォルトの名無しさん:2008/05/06(火) 12:06:47
>>125

>>85>>90
と(模範回答かどうかは知らんが)回答は出ているが、
不満ならどこが不満なのか書いたほうがいいのでは?
12888:2008/05/06(火) 13:10:58
<<111の答え教えていただけないでしょうか? orz
そしてまた質問になるのですが、探索されたかどうかのチェックはどの変数で
やっているのでしょうか?よろしくお願いします。
129デフォルトの名無しさん:2008/05/06(火) 13:31:37
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6441.txt
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:CPad for Borland
 [3.3] 言語: C言語
[4] 期限:2008年5月7日まで
[5] 基本制限:getcharを使用、atoi,scanf,gets関数など使用不可
  その他制限:下記・問題に記載あり
[Ex] 初心者程度の知識なので、その辺ご考慮くれるとありがたいです;

前スレにていろいろ質問させていただいたものですが、前スレが見れなくなってしまったのもあり、
質問させていただきます。

@前回させてもらったのですが、unsigned charに入れたものをシフトさせて表示しろ、
と言われたのでやってみたのですが、どうも左、右、右のものを反転となってしまい、
うまく直せません。どうすればいいでしょうか?

Aこれも前回提出したのですが、fgets→getcharに直せ、とのことで判る範囲で修正してみたら
どうも月の部分で2桁目以降も入力を無視して受け付けてしまうようになって
しまいました。(1111/11なら1111/1111111でもエラーを起こさず登録されている。)

Bこれについてはすごく読みづらいと思いますが、終端に\0を入れろとのことで、
DEL関数のときは全てに\0を入れているので、終端に\0を入れて、クリアしろ、
とのことでした。
130デフォルトの名無しさん:2008/05/06(火) 13:32:33
Cこれも前回の質問で答えていただいたのですが、クイックソートをバブルソートに
直していただき、それをこっちの方にも応用させていただきたいのですが、
注意事項として、前回のものを出させていただいた結果、
const使いすぎ、void*とかいらない、c++ならできるがcはできないなどの指摘を受けました。
ちなみに前回参照させていただいたのがこちらです↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6290.txt

Dこちらは先ほどの派生ですので、先ほどの注意を守りつつ、桁数制限を越えない
ようにとのことでした。前回参照分↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6292.txt

GWラストにこんなに投げさせてもらったのですが、時間があれば付き合ってください・・・。
2つに分けての長文失礼しましたm(_ _)m
131デフォルトの名無しさん:2008/05/06(火) 13:39:55
>>129
>前スレにていろいろ質問させていただいたものですが、前スレが見れなくなってしまったのもあり、
>質問させていただきます。
ttp://www.uploda.org/uporg1407193.png.html
132デフォルトの名無しさん:2008/05/06(火) 13:40:58
画像確認しないでうpってしまった('A`)
133デフォルトの名無しさん:2008/05/06(火) 14:11:28
>>130
C
> void*とかいらない
strptr_cmp関数をこのように変更。
int strptr_cmp( const char** x, const char** y )
{
return strcmp( *x, *y );
}

> const使いすぎ
意味不明。適切で必要な箇所に使用しているだけだが。
使いたくないなら単純にconstを消せばいい。うちの環境では警告が発生するがな。

>c++ならできるがcはできない
どこのことか不明だが、コメントを/* */形式にするってところしか見当たらない。
134デフォルトの名無しさん:2008/05/06(火) 14:21:39
>>130
D
Cと基本的に同じ。
person_name_cmp関数を変更。
int person_name_cmp( const Person** x, const Person** y )
{
return strcmp( (*x)->name, (*y)->name );
}

const不要なら片っ端から消すように。

>桁数制限を越えないように
越えないところで適当に改行すればいい。
135デフォルトの名無しさん:2008/05/06(火) 14:25:06
>>128
>>111
Cの配列のインデックスが0からで、ノードの番号が1からだから

>>探索されたかどうかのチェックはどの変数で(ry
自分が貼ったソースのコメントに書いてあるじゃ〜ん
136デフォルトの名無しさん:2008/05/06(火) 14:37:42
>>115
シグナルあんまり触ってないから自信ないけど、一応できたのでうp
親プロセス
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6444.c
子プロセス
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6445.c
137デフォルトの名無しさん:2008/05/06(火) 14:58:11
138デフォルトの名無しさん:2008/05/06(火) 15:50:00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):char変数を用いてアルファベットのkeisuke yamanaka
  を順番にソートする。
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年5月8日まで]
[5] その他の制限:if文,for文を用いて答える

教師が説明なしでいきなりやれといわれて全くわからない…
139138:2008/05/06(火) 15:51:16
アルファベット順にソートです。すいません…
14088:2008/05/06(火) 15:58:25
>>135 ありがとうございます
>>探索されたかどうかの(ry  自分で書いてますねw
また再度の質問なのですが、infoaryは何の変数なのでしょうか?
そして連結成分分解の説明としては、まず根の数を調べる。ラベル付けされた順に見る。
根でなければ次の木に移行。根でなければ木に付属。頂点をすべて探索したら終了

でいいでしょうか?間違っていたら教えていただけないでしょうか?
よろしくお願いします
141デフォルトの名無しさん:2008/05/06(火) 16:41:52
>>138
スペースが一番前に来てしまうが・・・
デバッグ文も残したままだが・・・
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6450.cpp
142デフォルトの名無しさん:2008/05/06(火) 16:42:57
あははは、レングスのスペルミスってんじゃんwww・・・・・・・orz

まぁデバッグ文だからいいか(´・ω・`)
143デフォルトの名無しさん:2008/05/06(火) 16:51:06
極端な話
他人が提出するやつだしどうでもいいか
余計な処理勝手に削除して

これが一番手っ取り早い
144826:2008/05/06(火) 16:51:25
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6451.txt
77行目〜81行目にかけて
if (dist[next.x][next.y] > dist[curr.x][curr.y] + 1)でなぜ
1を足しているのかが分かりません。
それと、prev[next.x][next.y] = i;でどうして0〜4の値をprevに
入れる必要があるのかが分かりません。
教えて下さい(´・ω・`)
145デフォルトの名無しさん:2008/05/06(火) 17:15:42
>>138
#include <stdio.h>
int main(void)
{
int i, n, c;
char data[] = "keisuke yamanaka";
for (n = 0; data[n]; n++) ;
for (c = n; (c /= 1.3) != 0;) for (i = 0; i + c < n; i++) if (data[i] > data[i + c]) data[i] ^= data[i + c] ^= data[i] ^= data[i + c];
printf("%s\n", data);
return 0;
}

>>143
どこが削除しても大丈夫な部分なのか分からないって可能性も
146デフォルトの名無しさん:2008/05/06(火) 17:16:11
>>141
どうもありがとうございます
147デフォルトの名無しさん:2008/05/06(火) 17:17:17
>>145
書き込んだ後にまた書き込みが…ありがとうございます
148おやじPG:2008/05/06(火) 17:21:44
すいません、VC++初心者なのですが、図々しくも質問させてください。
SYSTEMTIME構造体の加減算を簡単に行う関数や方法を教えてください。
処理時間をミリ秒3桁まで取りたいのですが、現在 

SYSTEMTIME st_s, st_e;

::GetLocalTime(&st_s);

何かの処理・・・

::GetLocalTime(&st_e);

として時間をとっていますが st_s と st_e の差がとれる関数OR方法を知りません。

MSDNなどでみるとFILETIME構造体に変換してなどと書かれていますが、
そのFILETIME構造体の加減算を行う関数を知りません。
どなたか回答おねがいします。

開発環境は MFC VS2008を使用しています。
149デフォルトの名無しさん:2008/05/06(火) 17:24:59
>>144
dist[curr.x][curr.y]は、現在位置への到達距離をあらわし、
1を足したものは、その隣接位置nextへの到達距離をあらわす。
しかしdist[next.x][next.y]に、既にそれ以下の到達距離で到達した痕跡があるなら、
そこは探索する必要がない、ということ。

prevの件は、
最後にゴール地点からスタート地点へ向かって経路をgridへ書き込むとき、
戻っていく方向がわかるように記録している。
150デフォルトの名無しさん:2008/05/06(火) 17:25:05
>>140
>>infoaryは何の変数
何の変数ってどういう意味?

>>連結成分の分解(ry
ちょっと何言ってるかわかんない (サンド風

プログラムは、
@未通過ノードのうち1つをルートにして、そのノードから到達可能なノードを探索し、通過済みにする(これが1つの連結成分)
A未通過のノードがまだあるなら@を繰り返す
という風に動いてる
151デフォルトの名無しさん:2008/05/06(火) 17:41:56
>>148
GetTickCount関数使えばいいかと。
あと、スレ違いですぜ。
152826:2008/05/06(火) 17:48:52
>>149
早速のレス有難うございます。
dist[curr.x][curr.y]が、スタートから現在までの距離を
表しているのは分かりました(´・д・`)
currに1を足したものが、nextになるんですよね??
ということは、77行目のdist[next.x][next.y]もdist[curr.x][curr.y]+1も
どっちも同じ値になって、比べられない気がするのですが。。。

prevについては、なんとなく分かりました(´・ω・`)
153デフォルトの名無しさん:2008/05/06(火) 17:51:16
>>145
削除可不可判断できなかったら宿題提出の時説明求められたら アッー!
154デフォルトの名無しさん:2008/05/06(火) 17:54:57
説明を求める講師って一体なんなの?
生徒が本当に理解してるか判断するため?
馬鹿じゃねーの?きちんと宿題提出してるんだからそれでいいじゃねーかよ。
155デフォルトの名無しさん:2008/05/06(火) 17:58:38
ちなみに>>143>>141-142(おれ)とは違う人だから
まぁ言ってることは同意する
156デフォルトの名無しさん:2008/05/06(火) 18:01:33
>>152
> currに1を足したものが、nextになるんですよね??
「なる」と言うより、
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
によって、そう「する」。

> ということは、77行目のdist[next.x][next.y]もdist[curr.x][curr.y]+1も
> どっちも同じ値になって、比べられない気がするのですが。。。
dist[next.x][next.y] = dist[curr.x][curr.y] + 1;
を実行する前の段階なので、同じ値とは限らない。
nextに未到達ならば、dist[next.x][next.y]には初期化で代入したMAX_X*MAX_Yが入っているし、
到達済みなら到達距離が入っている。
157826:2008/05/06(火) 18:29:03
>>156
レス有難うございます。
77行目のdist[next.x][next.y]が未探索であれば
MAX_X*MAX_Yの値が入っているんですね。
ちょっと気になったのですが、
★どうして未探索の場合は、『MAX_X*MAX_Y』と掛け算した大きな値を
 入れているのでしょうか??
★dist[curr.x][curr.y]に隣接するdist[next.x][next.y]が
 既に配線されたネットとして到達距離が入っている場合
 どんな操作になっているのでしょうか。
★それと87行目のfront == bottomとありますが
 frontとbottomが同じ値のときの状況が
 イメージできないのですが・・・。

教えて下さい(´・д・`)
158デフォルトの名無しさん:2008/05/06(火) 18:44:37
>>157
宿題に関連しているとは言え、あまり立て続けだと反感買いそうだぞ。
自分でよく考えてみれば、解かると思う。

> MAX_X*MAX_Y
未探索の位置nextについて、distが十分大きな値を持っていれば、
if (dist[next.x][next.y] > dist[curr.x][curr.y] + 1)
の条件が成立するから。

> 既に配線された...
(grid[i][j] == '.' ? MAX_X*MAX_Y : 0) でdistは0なので、探索されない。

> front == bottom
上のwhile (front != bottom) のループは、
ゴールに到達したときに、未探索位置をキューに残したままbreakする。
また、ゴールに到達できなかった場合は、
キューの未探索位置が尽きるので、front == bottom が成立して抜ける。
159826:2008/05/06(火) 18:57:10
>>158
レス有難うございます。
自分でよく考えたのですが分かりませんでした。
質問ばかりして申し訳ありませんでしたm(__)m
160デフォルトの名無しさん:2008/05/06(火) 19:07:10
>>159
いや、頭ひねって、逆立ちして考えてもわからなかったら
また質問すればいい。
聞かれれば俺は教えるから。
161デフォルトの名無しさん:2008/05/06(火) 19:32:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):自分が使っているコンピュータで評伝できる最少の正の実数を求めるプログラムを作成せよ
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年5月7日午前9時まで

どなたかお願いします
162161:2008/05/06(火) 19:32:48
評伝→表現です
163デフォルトの名無しさん:2008/05/06(火) 19:38:18
>>154見て今度から結果は正しかってもソースはおかしい解をうpする事にした
164デフォルトの名無しさん:2008/05/06(火) 19:48:11
>>161
#include <stdio.h>
int main()
{
double a, t;
for(t=1; t; a=t, t/=2);
printf("%e\n", a);
return 0;
}
16588:2008/05/06(火) 20:01:54
>>150 ありがとうございます
>>infoaryは何の変数 何の変数ってどういう意味?
infoaryが翻訳してもでてこなかったので何なのかがわりませんでした。
教えていただけないでしょうか?お願いします
166デフォルトの名無しさん:2008/05/06(火) 20:10:35
>>165
翻訳??
変数名になんでinfoaryってつけたかってことかい? それは気分だ
別にaaaでも良い

変数の型のこといってるなら、ソースで構造体宣言してるし、
どういう使い方するかは、前に説明したし、何が聞きたいのかが分からない
167デフォルトの名無しさん:2008/05/06(火) 20:15:06
>>164
ありがとうございます
168108:2008/05/06(火) 20:32:04
>>112さん
亀レスですが、ありがとうございます。
がんばって理解できるようにします.

16988:2008/05/06(火) 20:33:30
>>166
なるほど何でもいいんですね。ありがとうございます
170デフォルトの名無しさん:2008/05/06(火) 20:41:06
勘だけどinfo(rmation)ar(ra)yじゃないか?
171デフォルトの名無しさん:2008/05/06(火) 21:01:10
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
瓶詰めのオレンジジュースを売っている店がある。
今この店では、開店50周年キャンペーンとして、
オレンジジュースの空瓶を5本持って行くと、
新しいオレンジジュース1本と交換してくれるサービスをしている。
キーボードから飲みたいオレンジジュースの本数を入力すると、
最低この店から買わなければならないオレンジジュースの本数と、
最終的に残る空瓶の本数を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月6日 23:59まで
[5] その他の制限: 読み込んでよいヘッダはstdio.hのみ

メール課題が出ているのを忘れて遊んでいた俺はもうダメ人間です。
よろしくお願いします
172デフォルトの名無しさん:2008/05/06(火) 21:05:59
>>171
何度も買いに行く計算?
173おやじPG:2008/05/06(火) 21:15:24
>151さんありがとうございました。
すれ間違えてました。すみませんでした。
174デフォルトの名無しさん:2008/05/06(火) 21:22:15
>>172
買うのは最初だけですが、サービスを貰いに行くのは何度でも。
らしいです。
175デフォルトの名無しさん:2008/05/06(火) 21:43:21
>>171
#include<stdio.h>

int calc(int num, int *p_empty){
int count=0, empty=0;

while(num){
count+=num;
empty+=num;
num=empty/5;
empty%=5;
}
*p_empty=empty;
return count;
}

int main(void){
int i, num, count, empty;

scanf("%d", &num);
for(i=num*4/5;;i++){
count=calc(i, &empty);
if(count>=num) break;
}
if(count>num) count--,empty+=5;
printf("Require:%d Initial:%d Empty:%d\n", num, i, empty);

return 0;
}
176デフォルトの名無しさん:2008/05/06(火) 21:57:46
>>171
int main( void )
{
int wantBuy = 0;
int needBuy = 0;
int serviceTotal = 0;
int serviceEach = 0;

scanf( "%d", &wantBuy );

serviceTotal = wantBuy / 5;
do{
serviceEach = serviceTotal / 5
serviceTotal += serviceEach;
}while( serviceEach != 0 );
needBuy = wantBuy ー serviceTotal;

return 0;
}

ケータイからなので動くか分からん(´・ω・`)
177デフォルトの名無しさん:2008/05/06(火) 21:59:28
あ、表示してないや
printf("%d",needBuy);
↑これ足しといて
178デフォルトの名無しさん:2008/05/06(火) 22:00:22
連投ごめんね
セミコロン忘れもあるね(´;ω;`)
179デフォルトの名無しさん:2008/05/06(火) 22:00:24
>>175
本当にありがとうございました。175さんのお陰でメールが間に合いました。
何故か空瓶が一本余分に出ていましたので、また調べてみます。
180デフォルトの名無しさん:2008/05/06(火) 22:01:32
あーー
空き瓶表示か!!!!
孟子にタイ
181デフォルトの名無しさん:2008/05/06(火) 22:01:44
>>176
ありがとうございます。今後のプログラムの参考にさせていただきます。
182デフォルトの名無しさん:2008/05/06(火) 22:17:29
飲みたい本数を飲み終わって、
空き瓶が5本以上あるとき、交換してもらうかどうか、
またその余分に貰ったジュースを飲むかどうか、それが問題だ。
183デフォルトの名無しさん:2008/05/06(火) 22:48:12
184デフォルトの名無しさん:2008/05/06(火) 23:00:45
>>183
結局、たとえば5本飲みたいので5本買ったとして、
最終的な空き瓶は5本、0本、1本のどれ?
>>174からはどうしても読み取れない。
185デフォルトの名無しさん:2008/05/06(火) 23:10:42
>>184
あーそうだね
186デフォルトの名無しさん:2008/05/06(火) 23:35:30
>>171
これ以上短くはできないぜ

#include<stdio.h>
int main( void )
{
int a;
scanf( "%d", &a );
printf("buy:%d ",(a/5*4+1)+((a%5)?a%5-1:0));
printf("empty:%d\n",(a%5)?a%5:5);
return 0;
}
187デフォルトの名無しさん:2008/05/06(火) 23:49:54
>>186

printf("buy:%d ",a-(a-1)/5);

はどう?
188デフォルトの名無しさん:2008/05/06(火) 23:52:57
21
って入力したら17が出るお
189デフォルトの名無しさん:2008/05/06(火) 23:55:08
17で21本いけるね・・・orz
190デフォルトの名無しさん:2008/05/06(火) 23:55:48
>>186
まだ短縮できる。
a;main(){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?(a-1)%5+1:0);}
0を入力したらbuy:0 empty:0になるように修正しておいた。
191デフォルトの名無しさん:2008/05/07(水) 00:00:33
>>190
余りは

(a-1)%5+1

だけでどう?
192デフォルトの名無しさん:2008/05/07(水) 00:04:47
>>191
VC2008ではそれでいけた。
ただ、C89では負数の剰余は処理系依存らしい。
193デフォルトの名無しさん:2008/05/07(水) 00:47:47
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):24時49分31秒ー16時51分40秒の引き算です
[3] 環境
 [3.1] OS: Linux
3.2]gcc
 [3.3] 言語: (C
[4] 期限: 2008年5月8日
[5] その他の制限: 全く習ってない初歩の初歩の段階です
よろしくおねがいします
194デフォルトの名無しさん:2008/05/07(水) 00:59:52
>>193
#include <stdio.h>
int main() {
int time1 = 24*3600 + 49*60 + 31; /* 24時49分31秒 */
int time2 = 16*3600 + 51*60 + 40; /* 16時51分40秒 */
int td = time1 - time2;
printf("%d:%02d:%02d\n", td/3600, (td/60)%60, td%60);
return 0;
}
195デフォルトの名無しさん:2008/05/07(水) 01:00:29
それだけじゃどうしたらいいのか困る
196デフォルトの名無しさん:2008/05/07(水) 01:18:22
>>194
どうもありがとうございます

>>195
説明が足りなかったみたいで、すいません
197デフォルトの名無しさん:2008/05/07(水) 02:46:21
>>194
198デフォルトの名無しさん:2008/05/07(水) 02:49:01
>>190
ShortCodingという本で知ったがこんなこともできる
main(a){scanf("%d",&a);printf("buy:%d empty:%d\n",a?a*4/5+1:0,a?~-a%5+1:0);}
199デフォルトの名無しさん:2008/05/07(水) 02:59:45
コードが小さきゃイイって発想古杉
ヤメレ
200デフォルトの名無しさん:2008/05/07(水) 03:08:30
>>193
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6455.c
適切に入力しなかった場合の措置はとってないので、あしからず。
201デフォルトの名無しさん:2008/05/07(水) 04:11:36
>>200 △-(大減点)
202デフォルトの名無しさん:2008/05/07(水) 04:15:09
>>201
      ヽ  \ , -┬┬、/.  /
       \   7   ヽ ヽ_∨ 
         ヽ  l   .  二 --`ゝ
          /ゝ' _.. '-'´ ・   ・ ヽヽ
         j−'´ |  =   _人  ~ l 〉
        / ̄ ̄l         ノ´
         / ̄ ̄~|      _.. ィ‐┐
        ゝ──'>ー<二○'´i ̄
           `ー┐      l
            _」      つ
           ゝ───…  ̄
           ヽ(´・ω・)ノ うるせぇ、ひこにゃんぶつけんぞ
             |  /
             UU 
203デフォルトの名無しさん:2008/05/07(水) 10:03:50
>>200
time.h使うなら、mktime()とかlocaltime()を使えよ。strftime()も。
204デフォルトの名無しさん:2008/05/07(水) 10:59:49
>>203
そこまで言うならお前がソースを書けよw
自分は知ってます、みたいな発言をされても誰も納得しねーよ
あと、あれは struct tm の構造体、変数を使うためにやったようなもんだろ。
指定のライブラリを使わなければいけないというルールは存在しないよ。
205デフォルトの名無しさん:2008/05/07(水) 11:11:38
そういうのを無責任な布教と呼ぶ
206デフォルトの名無しさん:2008/05/07(水) 11:30:51
>>193
#include <stdio.h>
void ToHMS(int t1[3], int t2[3], int result[3])
{
int H = 0,M = 0;
result[2] = t1[2]- t2[2];
if(result[2] < 0){
result[2] = t1[2] + 60 - t2[2];
M = 1; }
if(M == 1) result[1] = t1[1] -1 - t2[1];
else result[1] = t1[1] - t2[1];
if(result[1] < 0){
if(M == 1) result[1] = t1[1] + 60 -1 - t2[1];
else result[1] = t1[1] + 60 - t2[1];
H = 1; }
if(H == 1) result[0] = t1[0] -1 - t2[0];
else result[0] = t1[0] - t2[0];
}
int main()
{
int t1[3] = {0},t2[3] = {0},result[3] = {0};

puts("一つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t1[0],&t1[1],&t1[2]);
puts("二つ目の時間を,で区切って入力してください");
scanf("%d,%d,%d",&t2[0],&t2[1],&t2[2]);
ToHMS(t1,t2,result);
puts("一つ目の時間と二つ目の時間の差分は");
printf("%d,%d,%d\n",result[0],result[1],result[2]);
return 0;
}
207203:2008/05/07(水) 11:43:39
/* すまん、確かに流石に冗長だ */
#include <stdio.h>
#include <time.h>
#include <math.h>

static time_t inputTime()
{
char buf[10];
struct tm in = {0, 0, 0, 1, 0, 70};
printf("Input time (hh:mm:ss) > ");
if (fgets(buf, sizeof(buf), stdin) == NULL) return 0;

if (sscanf(buf, "%2d:%2d:%2d", & in.tm_hour, & in.tm_min, & in.tm_sec) < 3)
return 0;

return mktime(& in);
}

int main(int argc, char ** argv)
{
time_t timeA = inputTime();
time_t timeB = inputTime();

time_t diff = (time_t) fabs(difftime(timeA, timeB));
struct tm * result = gmtime(& diff);

char buf[10];
strftime(buf, sizeof(buf), "%H:%M:%S", result);
puts(buf);
return 0;
}
208デフォルトの名無しさん:2008/05/07(水) 12:02:29
>>175 の訂正
if(count>num) count--,empty+=5;

if(count>num) count--,empty+=5-1;
209デフォルトの名無しさん:2008/05/07(水) 12:05:32
>>84は何の課題?これ解けるやつが人類にいるのか?
大きい数を扱える環境で組み合わせの数出して見れ。
ruby -e 'puts 2**100000'
99900209301438450794403276433003359098042913905418169177152927386314583246425734
 (375行中略)
25155304734389883109376

ありえんだろ。
210デフォルトの名無しさん:2008/05/07(水) 12:47:09
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
1000個までの整数あるいは小数を打ち込み、
その平均と標準偏差を表示することのできるプログラムを作成しなさい。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
 [3.3] 言語:C言語
[4] 期限:2008年5月9日5時まで
[5] その他の制限: 特に制限はありません。

大学生です。プログラミングの授業で課題が出されましたが、解けませんでした。
ご解答よろしくお願いします。
211デフォルトの名無しさん:2008/05/07(水) 13:06:10
>>210
#include <stdio.h>
#include <math.h>
#define SET 1000

int main()
{
int i;
double value[SET] = {0},sum = 0,average=0,hyoujunnhensa;
//数値を格納
for(i = 0; i < SET; i++)
scanf("%lf",&value[i]);
//平均値を出す
for(i = 0; i < SET; i++)
sum += value[i];
average = sum/SET;
printf("平均値 : %lf\n",average);
//ばらつきをみるために
//個々のデータから平均値を引く(偏差)
for(i = 0; i < SET; i++) value[i] -= average;
//次に偏差を2乗する
for(i = 0; i < SET; i++) value[i] = pow(value[i], 2.0);
sum = 0;
//データのばらつきを見るため合計し
//データ数で割って平方根を取る
for(i = 0; i < SET; i++)
sum +=value[i];
hyoujunnhensa = sqrt(sum/SET);
printf("標準偏差は%lf \n",hyoujunnhensa);
return 0;
}
212デフォルトの名無しさん:2008/05/07(水) 13:44:32
>>209
そんな全ての方法を試すみたいなアルゴリズム使ったら解けるわけないよ。

n = 100000 だから、だいたい O(n log n) 〜 O(n^{1.5}) くらいの
アルゴリズムなら、それなりにまともな時間で解ける。
実際 >>84 の問題に対しては、そのようなアルゴリズムが存在する。
>>90 の解法でも O(n^2) だから数日待てば終わるはず)
213212:2008/05/07(水) 14:15:17
>>209
参考のために、適当に作った入力と対応する出力をアップロードする。
アップローダの制限のため n = 100000 のデータは1つだけしか入れてない。
ちなみに手元のプログラムでは、10 秒弱で結果が出ている。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6458.zip
214デフォルトの名無しさん:2008/05/07(水) 14:55:57
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
(1)
1 から 10000 までの数字を順番に表示しなさい(1数字ごとに改行)。
ただし、どこかの桁に 3 が現れるか、もしくは 3 の倍数のときは
数字の後に ! (エクスクラメーションマーク)をつけなさい。

(2)
1 から n までの数字の中で、どこかの桁に 3 が現れるか、
もしくは 3 の倍数であるような数字の個数を求めるプログラムを作りなさい。
ただし n は大きな数字(int型の限界程度)でも動くようにしなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: どちらでも可
[4] 期限: 2008年05月09日
[5] その他の制限: とくにありません
215デフォルトの名無しさん:2008/05/07(水) 14:59:09
>>212
その手元のソースが見たい
216デフォルトの名無しさん:2008/05/07(水) 14:59:44
世界のナベアツかYO!
217デフォルトの名無しさん:2008/05/07(水) 15:09:38
>>214 (1)
#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
char buf[12];
int i;
for (i = 1; i <= 10000; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
printf("%d!\n", i);
} else {
printf("%d\n", i);
}
}
}
218デフォルトの名無しさん:2008/05/07(水) 15:12:59
>>214 (2)
#include <stdio.h>
#include <string.h>
int main(int argc, char *args[]) {
int N = 10000;
int count = 0;
char buf[12];
int i;
for (i = 1; i <= N; i++) {
sprintf(buf, "%d", i);
if ((i % 3 == 0) || (strstr(buf, "3") != NULL)) {
count++;
}
}
printf("%d\n", count);
}
219デフォルトの名無しさん:2008/05/07(水) 15:18:32
>215
ググったらこれO(n)でできるらしい。
古典的な問題として有名らしい。
http://www.prefield.com/algorithm/string/manacher.html
にあった。

よくこんな事思い付くよな。
220デフォルトの名無しさん:2008/05/07(水) 15:24:21
>>219
それは違う問題。

最長回文問題は「部分文字列(substring)」を求める問題なので、
>>84 とは違う。84 で求めるのは「部分列(subsequence)」。
substring は連続する部分列で、subsequence は連続しなくてよい。
221デフォルトの名無しさん:2008/05/07(水) 15:24:57
>>214
#include <stdio.h>
#include <string.h>

int main()
{
int i;
char n[4];
for(i = 1; i < 1000; i++){
sprintf(n,"%d",i);
if(i % 3 == 0 || strchr(n,'3'))
printf("%s%c\n",n,'!');
else
printf("%s\n",n);
}
return 0;
}
222デフォルトの名無しさん:2008/05/07(水) 15:25:49
>>220
あ、ほんとだアリガト
223デフォルトの名無しさん:2008/05/07(水) 15:35:46
こういうのじゃだめなのか?

#include <stdio.h>

int main(void)
{
int i;
for(i=0;i<=9999;i++)
{
printf("%d,%c\n",i+1,((i+1)%3 == 0) ? '!': ' ');
}
return 0;
}
224デフォルトの名無しさん:2008/05/07(水) 15:37:35
>>223
13 でも ! をつけないと
225デフォルトの名無しさん:2008/05/07(水) 15:39:26
あああぁぁぁぁぁ、見落としてた。 OTL
226デフォルトの名無しさん:2008/05/07(水) 15:43:09
>>214
(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')) printf("%s%c\n",nstr,'!');
else printf("%s\n",nstr);

}
free(nstr);
return 0;
}
227デフォルトの名無しさん:2008/05/07(水) 15:46:40
(2) 難しくね? 1つずつチェックするんじゃ終わらないよな
228デフォルトの名無しさん:2008/05/07(水) 16:01:12
[1] 授業単元: Cプログラミング実習T
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6459.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語:C++
[4] 期限:5月9日
[5] その他の制限:できる限り簡単なソースで作成

本当に全くわからないので,よろしくお願いします.
229デフォルトの名無しさん:2008/05/07(水) 16:10:28
>>228
・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
230デフォルトの名無しさん:2008/05/07(水) 16:12:20
>  1)西暦紀元1年1月1日から何日目かも表示する
これは厳しい
231デフォルトの名無しさん:2008/05/07(水) 16:19:31
>>229
・西暦紀元1年1月1日からの日数計算は、グレゴリウス暦で行うの? その場合、厳密な意味での日数とは違ってくるけど。
たぶん,下に書かれている
   1年365日
   ただし、4で割り切れる年は一般にうるう年(366日)
   また、100で割り切れ、かつ400で割り切れない年は365日
を利用して作るのだと考えているので,グレゴリウス暦は関係ないと思います.
まぎらわしくてすみません.
・星座の基準は? これまた厳密には星座の境界は毎年変わるのだけど。
・グラフィック表示の手段は? Windowsだから適当な方法で表示するだけならできるだろうけれど、授業中に指示されていない?
この2つは全く指示されていません.個人個人で考えてくるのでしょうか?
□月□日から△月△日生まれの人・・・○○座
と考えていくと思うので,厳密には考えなくていいと思います.
グラフィックも全く指示されていません,というか
まだこういったグラフィックを作るプログラムも習っていないので
>>229さんがいうような適当な方法でいいと思います.
まぎらわしい文章で本当にすみません.
232デフォルトの名無しさん:2008/05/07(水) 16:25:58
>>214 (2)
#include <stdio.h>
#include <limits.h>
int main() {
char buff[32];
int i, j, n = 0;
for (i = 0; i < INT_MAX; i++) {
if (i % 3 == 0) {
n++;
} else {
/*sprintf(buff,"%d", i);
if (strchr(buff, '3')) n++;*/
for (j = i; 0 < j; j /= 10) {
if (j % 10 == 3) {
n++;break;
}
}
}
}
printf("%d\n", n);
return 0;
}
/*
1590383305

real 4m7.016s
user 4m5.186s
sys 0m0.108s
四分w
*/
233デフォルトの名無しさん:2008/05/07(水) 16:33:47
世界のナベアツゲーム人気奮闘中w
234デフォルトの名無しさん:2008/05/07(水) 16:34:47
>>228に追記します
・星座について

3/21 - 4/19 の間に生まれた人・・・おひつじ座
4/20 - 5/20 の間に生まれた人・・・おうし座
5/21 - 6/21 の間に生まれた人・・・ふたご座
6/22 - 7/22 の間に生まれた人・・・かに座
7/23 - 8/22 の間に生まれた人・・・しし座
8/23 - 9/22 の間に生まれた人・・・おとめ座
9/23 - 10/23 の間に生まれた人・・・てんびん座
10/24 - 11/21 の間に生まれた人・・・さそり座
11/22 - 12/21 の間に生まれた人・・・いて座
12/22 - 1/19 の間に生まれた人・・・やぎ座
1/20 - 2/18 の間に生まれた人・・・みずがめ座
2/19 - 3/20 の間に生まれた人・・・うお座

という区別でいいと思います.
235デフォルトの名無しさん:2008/05/07(水) 16:38:17
>>233
いつかのFizzBazブームといっしょw
236232 :2008/05/07(水) 16:40:06
>>214 ナベアツ日をかぞえんの忘れてた
(2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int BuffSize(int n)
{
int num = n;
int size=0;
while(num){
num /= 10;
size++;
};
return ++size;
}
int main()
{
int i,n,nabeatu=0;
char *nstr;
printf("%dまでの数値を入力\n",INT_MAX);
scanf("%d",&n);
nstr = malloc(sizeof(char)*(BuffSize(n)));
for(i = 1; i < n; i++){
sprintf(nstr,"%d",i);
if(i % 3 == 0 || strchr(nstr,'3')){ printf("%s%c\n",nstr,'!'); nabeatu++;}
else printf("%s\n",nstr);
}
free(nstr);
printf("ナベアツ日%d\n",nabeatu);
return 0;
}
237デフォルトの名無しさん:2008/05/07(水) 18:34:30
これをC++に書き直してくれませんか?Cでの膨張処理のプログラムです。

{
int repetition; /* 膨張処理の回数 */
int counter; /* 近傍中の図形画素の数 */
int p_x, p_y; /* 近傍の(x,y)座標 */
int i, x, y, m, n; /* ループ変数 */

x_size2 = x_size1; y_size2 = y_size1;
for ( y = 0; y < y_size2; y ++ )
for ( x = 0; x < x_size2; x ++ )
image2[y][x] = image1[y][x];
printf("2値画像の8近傍膨張処理を行います.\n");
printf("膨張処理を行う回数 = ");
scanf("%d", &repetition);
for ( i = 0; i < repetition; i ++ ){
for ( y = 0; y < y_size1; y ++ ){
for ( x = 0; x < x_size1; x ++ ){
if ( image1[y][x] == 0 ){
counter = 0;
238デフォルトの名無しさん:2008/05/07(水) 18:35:20
237の続きです。
counter = 0;
for ( m = -1; m < 2; m ++ ){
for ( n = -1; n < 2; n ++ ){
p_x = x + n;
p_y = y + m;
if ( p_x > 0 && p_x < x_size1 &&
p_y > 0 && p_y < y_size1 &&
image1[p_y][p_x] == MAX_BRIGHTNESS )
counter ++;
}
}
if ( counter > 0 )
image2[y][x] = MAX_BRIGHTNESS;
}
}
}
for ( y = 0; y < y_size2; y ++ )
for ( x = 0; x < x_size2; x ++ )
image1[y][x] = image2[y][x];
}
}
239デフォルトの名無しさん:2008/05/07(水) 18:38:10
>>237
大丈夫、そのままC++でコンパイルできる。
つーか、>1嫁。
240デフォルトの名無しさん:2008/05/07(水) 19:26:28
[1] 授業単元:プログラミングによる画像処理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6461.zip
[3] 環境
 [3.1] OS:XP Pro
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio .NET 2003
 [3.3] 言語: C++
[4] 期限: 5月7日23時59分まで
[5] その他の制限: 式を導出してプログラムに当て嵌めるだけなので、特に制限はありません。

基礎的な問題で大変申し訳ないです。
どなたか、ご教授願えませんでしょうか。
241デフォルトの名無しさん:2008/05/07(水) 19:41:15
>>84は現実的な時間で終わるアルゴリズムは存在しないと思う
242デフォルトの名無しさん:2008/05/07(水) 19:42:53
>>240
つ数学板
243デフォルトの名無しさん:2008/05/07(水) 19:44:56
10万文字の最大長の回文を見つけるんだろ 一文字ずつ削って判定するしかないと思う。
244デフォルトの名無しさん:2008/05/07(水) 20:06:14
>>240
とりあえずそのグラフを見ただけでは数式は導出できない。
どういう文脈で出題された課題か、とかそういうことが色々無いと
とても解ける課題ではない。
245デフォルトの名無しさん:2008/05/07(水) 20:12:36
>>240
グラフだけから式を導出とかw
246デフォルトの名無しさん:2008/05/07(水) 20:22:58
>>84
問題のとらえ方次第だけど、削除する文字列が連続する1か所のみだったりしないのかな?
長さxの文字列からy~zの部分を削除した文字列が対象(0 <= y <= z <= x)
問題文と例を見る限りでは、任意の文字を削除できるとも考えられちゃうけど、そうじゃないとすれば
>>209よりかはパターンは少なくなるよね?それでもmax100000なら膨大だろうけど・・・

max100000は2進数表記でしたみたいなオチとかにならないかな。
247デフォルトの名無しさん:2008/05/07(水) 20:23:04
248240:2008/05/07(水) 20:28:16
沢山のご指摘ありがとうございます。
理不尽な要求を出して大変申し訳ないですw
グラフについてですが、画像の濃度値を表すグラフなので、
最小値0から最高値は255になるようです。

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

自分自身全然理解出来ていないので、
上手く説明出来なくて大変申し訳ないのですが、
簡単な例を挙げるとこうなるようです。
2番目の図2.5(b)は
z=zm・z'^2/zm^2
z'^2=zm・z
z=√zm・z
と導出出来るようです。

先ほどの問題はこの2つを合わせた式を導出し、
プログラムを作成せよという事になると思うのですが、
導出過程がわからず、混乱してしまったので質問させていただきました。
どうか宜しくお願いします。
249デフォルトの名無しさん:2008/05/07(水) 20:34:34
>>240
数学板の質問系スレで

画像ファイルのようなグラフで
できるだけ簡単なものを探しています
がどんなものでしょうか?

と聞くと多分答えてくれる。
250デフォルトの名無しさん:2008/05/07(水) 20:40:36
ここの質問を見ているとこんな基礎的な課題でもいいのかと思いましたが、
他に聞けるようなスレがなかったため、
申し訳ないですがここで質問させてください。

【質問テンプレ】
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク)
 ポイントを用いた線形リストデータ構造を利用して、
キーボードから順に入力した複数の整数値(int型)を、
空の「スタック」および「キュー」にそれぞれ保存し、
取り出した時、出力される整数値を順に表示するプログラム、
pointlist.cを作成せよ。
また動作確認の結果も報告せよ。
動作確認のために入力する整数値は、作成した日付を入力せよ。
(例、2008年5月11日に作成したならば、
スタックで「1→1→5→0→8→0→0→2」と、出力すること、また、
キューで「2→0→0→8→0→5→1→1」と、出力することを確認し、
動作確認の結果と、ソースファイルを提出せよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C言語
[4] 期限:5/12
[5] その他の制限: 特になし

スタックとキューの理屈は理解しているのですが、
プログラムを書くとなるとどう書いてよいのかわかりません。
251デフォルトの名無しさん:2008/05/07(水) 20:40:41
>>247
252デフォルトの名無しさん:2008/05/07(水) 20:43:03
>>240
imggray.h 内の関数
void non_Linear_Transform(void)
をどうこういう話は無かった?
253デフォルトの名無しさん:2008/05/07(水) 20:47:45
struct STACK
{
 int sp;
 int reg[256];
 STACK() { sp = 0; };
 int push(int val) { reg[sp++] = val; return sp; }
 int pop() { return sp > 0 ? reg[--sp] : 0; }
};

{
 STACK stack;

 stack.push(2);
 stack.push(0);
 stack.push(0);
 stack.push(8);
 stack.push(0);
 stack.push(5);
 stack.push(1);
 int spmax = stack.push(1)l;

 for(int i = 0; i < spmax; i++)
  printf("%d ", stack.pop();
}
254デフォルトの名無しさん:2008/05/07(水) 20:49:38
あっと、C++ じゃなく C で書くのか?
255デフォルトの名無しさん:2008/05/07(水) 20:50:31
>>248
「導出」ってのはできないね.
それっぽい関数を定義してみて,同じような関数形だね,
と言うくらいしかできない.

ちなみに,答えとなっている関数は,
前半が下に凸,後半が上に凸であることと,
(0,0), (zm/2, zm'/2), (zm ,zm) を通ることに注意して
前半を二次関数,後半を平方根で定めてやると出てくる.
256デフォルトの名無しさん:2008/05/07(水) 20:51:46
>>254
> [3.3] 言語: C言語
とはっきり書いてあるじゃないか
257240:2008/05/07(水) 20:52:03
>>249
ありがとうございます。一応聞いてみます。

>>252
void non_Linear_Transform(void)は今回全く使用していないので、
スルーで大丈夫そうです。


最終の式は一応問題文.txtで出ているので、
プログラムだけでもおこせる方いらっしゃいませんでしょうか。
258デフォルトの名無しさん:2008/05/07(水) 20:52:25
>>254
答えていただいて申し訳ないのですが、Cでやっています。
それとプログラムを起動したときに、
キーボードから数字を入力させるように作れとのことなので、
苦労しています。
すみません、お答いただきありがとうございます。
259デフォルトの名無しさん:2008/05/07(水) 20:57:22
ちなみに

struct QUE
{
 int tp, lp;
 int reg[256];

 QUE() { tp = lp = 0; };
 int put(int val) { reg[lp++] = val; return tp; };
 int get() { return tp < lp ? reg[tp++] : 0; };
};

// かなり手抜き。後は自分できちんと仕上げてくだされ
{
 QUE que;
 que.put(2); que.put(0); que.put(0); que.put(8);
 que.get(); que.get(); que.get(); que.get(); // 2.0.0.8
}
260デフォルトの名無しさん:2008/05/07(水) 21:03:13
>>258
struct STACK {
 int tp; int reg[256];
};

STACK stack;
int push(int val) {
 stack.reg[stack.tp++] = val; 
 return stack.tp;
}

int pop() {
 if(stack.tp > 0)
  return reg[--stack.tp];
 return 0;
}

{
 int c, i;
 stack.tp = 0;
 while((c = fgetc(stdin)) != EOF) {
  if(! isdigit(c)) // 数値以外なら終わる?
   break;
  push( c );
 }

 for(i = 0; i < stack.tp; i++)
  printf("%c ", pop());
}
// C はちょっと自信ない
261デフォルトの名無しさん:2008/05/07(水) 21:07:51
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
5組の男女の安定結婚問題
ヒントプログラム http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6465.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: borlandC++
 [3.3] 言語: C言語
[4] 期限: 5/8 1200まで
[5] その他の制限: 特になし
よろしくお願いします。
262デフォルトの名無しさん:2008/05/07(水) 21:10:05
>>257
void Ensyu2_3c(void)
{
  int z,zd;
  for(i=0;i<256;i++){
    for(j=0;j<256;j++){
      z=tmp_Img[i][j];
      if (z <= 128) { // (z<=128)の場合の処理
        zd = (int)(0.5 + z*z/128.);
      } else { // (128<z<=255))の場合の処理
        zd = (int)(0.5 + 128 * (1.+sqrt((2.*z-256)/256.)));
      }
      tmp_Img[i][j]=zd;
    }
  }
}

しかし答えになってる式,グラフにするとあんまりそれっぽく見えないな
263デフォルトの名無しさん:2008/05/07(水) 21:37:44
264240:2008/05/07(水) 21:40:36
>>262
ありがとうございます。
やはりsqrtを使った上で型を指定しなければならないのですね。
非常に参考になりました。
265デフォルトの名無しさん:2008/05/07(水) 21:41:07
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6467.txt

自分で挑戦してみましたがまったく歯が立ちませんでした。

どうぞよろしくお願いします。
266デフォルトの名無しさん:2008/05/07(水) 21:43:57
【未回答一覧】
>>228 2008/05/09 任意の年月日の曜日・星座・月齢(グラフィック表示)
267デフォルトの名無しさん:2008/05/07(水) 21:45:27
>>265
テンプレ >>1 をどうぞ
実行環境、期限などの情報をください
268261:2008/05/07(水) 21:58:41
>>263
無事実行できました。ありがとうございます
269デフォルトの名無しさん:2008/05/07(水) 22:11:00
申し訳ありません。
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6467.txt
[3] 環境
 [3.1] OS: Linux6.2
 [3.2] gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 5/15
[5] その他の制限: 特にありません。
          よろしくお願いします

270デフォルトの名無しさん:2008/05/07(水) 22:21:45
271デフォルトの名無しさん:2008/05/07(水) 22:58:33
>>269
・格納するというのはint型配列なのか?それともchar型配列なのか?
・2の除算については加減算、乗算を使って実現してもいいのか?
272デフォルトの名無しさん:2008/05/07(水) 23:01:28
>>271
格納はint型で
加減算 乗算を使ってもらっても大丈夫です。

273129:2008/05/07(水) 23:08:50
>>133,134
わざわざ1つ1つの質問に答えていただきありがとうございますー。

>>137
そして、こちらもありがとうございましたー。
少し気になったのですがDの方で警告メッセージ
 警告 W8075 57: 問題のあるポインタの変換(関数 input_birthday )
 警告 W8065 99: プロトタイプ宣言のない関数 'input_birthday' の呼び出し(関数 main )
と、出るのですが消すにはどうすればいいでしょうか?

残り >>129 @〜Bなのですが、かなり切実です;何卒よろしくお願いします。
274232 :2008/05/08(木) 01:17:36
275デフォルトの名無しさん:2008/05/08(木) 01:38:04
>>84は宿題としては解けないほうが良いな
276デフォルトの名無しさん:2008/05/08(木) 01:41:06
巡回セールスマンと同じ分類に入るとおもう >>84
277デフォルトの名無しさん:2008/05/08(木) 01:57:52
>>269
とりあえず加算と減算まで作った。
間違ってるかもしれんが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6470.txt
278デフォルトの名無しさん:2008/05/08(木) 01:59:34
頭の洗練が必要
279デフォルトの名無しさん:2008/05/08(木) 02:09:15
洗練とか、頭の良さで解けたり解けなかったりするものではないだろう。
多項式時間では解けないというやつとおもう。
280129:2008/05/08(木) 02:37:07
確認漏れだったのですが、Dの参照分の時に既に日付入力のときに
全てエラーとなってしまい、結果の表示ができませんでしたので、
修正できる方いればよろしくお願いします;
281デフォルトの名無しさん:2008/05/08(木) 03:11:38
282デフォルトの名無しさん:2008/05/08(木) 05:31:56
そりゃ、主題者側はわかっているからなw
283デフォルトの名無しさん:2008/05/08(木) 07:05:02
>>279
多項式時間だけだったら >>90 が達成している。
O(n log n) 程度の解法もある。
284210:2008/05/08(木) 08:07:26
>>211様 ありがとうございました!
285デフォルトの名無しさん:2008/05/08(木) 14:22:11
7*7の囲碁を解いて下さい。


70 名前:名無し名人[sage] 投稿日:2008/05/08(木) 13:41:56 ID:wIxjqk5D
>>68,69
> 7路盤は人間の研究によれば、黒9目勝ちという結果が出ている。

面白そうな話ですね。
よろしければ出典を教えてください。

71 名前:名無し名人[sage] 投稿日:2008/05/08(木) 14:04:42 ID:6HkPsIKA
ttp://olive.zero.ad.jp/qin/7ro/
ほい。日本ルールでも中国ルールでも一緒らしい。
http://game14.2ch.net/test/read.cgi/gamestones/1191324848/
286デフォルトの名無しさん:2008/05/08(木) 17:31:39
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):ttp://www.dotup.org/uploda/www.dotup.org0976.zip
[3] 環境
 [3.1] OS:vista
 [3.2] Visual Studio 2005
 [3.3] 言語: C++
[4] 期限: 5/9 18:00
[5] その他の制限:特にありません。

画像が見にくいかと思いますが。このプリントで全部なのでよろしくお願いします
287デフォルトの名無しさん:2008/05/08(木) 17:55:14
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6478.c
[3] 環境
 [3.1] OS: Linux6.2
 [3.2] gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 5/12
[5] その他の制限: >>277 >>281 さんありがとうございます。
          1番の方の提出期限が迫っていますので、
          できれば一番の方を優先してもらいたいです。
 
          今現在自分は #include<stdio.h> や int main などから始
めており
          #include<string.h> #include<ctype.h> などのものは習
っていないためわからないです。
          基本的に for文 配列 if文 ポインタ などを重点的に
使用してもらえないでしょうか?
          条件等多数ありますがぜひよろしくお願いします。
          
288デフォルトの名無しさん:2008/05/08(木) 17:56:58
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6479.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)

[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5月10日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
できるだけ簡単なものでよろしくお願いします。
289デフォルトの名無しさん:2008/05/08(木) 18:18:23
>>288 (1)
#include <stdio.h>
int main() {
int x = 77;
int y = 115;
int tmp;
int *p = &tmp;
printf("x %p %d\n", &x, x);
printf("x %p %d\n", &y, y);
*p = x;x = y;y = *p;
printf("x %p %d\n", &x, x);
printf("x %p %d\n", &y, y);
return 0;
}
290デフォルトの名無しさん:2008/05/08(木) 18:18:50
>>288 (2)
#include <stdio.h>
void pinc(int *x, int d) {
printf("仮引数 x %p %p\n", &x, x);
*x += d;
}
int main(void){
int x, d;
printf("整数を入力 x = ");
scanf("%d", &x);
printf("整数を入力 d = ");
scanf("%d", &d);
printf(" アドレス 値\n");
printf("実引数 x %p %d\n", &x, x);
pinc(&x, d);
printf("値を %d だけ増やした値は %d です.\n", d, x);
return 0;
}
291デフォルトの名無しさん:2008/05/08(木) 18:23:38
292デフォルトの名無しさん:2008/05/08(木) 18:36:48
>>289-290
ありがとうございました!
293デフォルトの名無しさん:2008/05/08(木) 18:37:59
294デフォルトの名無しさん:2008/05/08(木) 19:02:15
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):()
 256×256の画像ファイルを読み込み、RGB値を2次配列に格納する。
 その値から全く同じファイルを作成する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: わかりません
 [3.3] 言語: C
[4] 期限:5月9日
↓自分で作ってみたんですが、うまく値が格納できません。
 試しに出力をしてみたところred[][]には数字が入っていたんですが
 greenとblueは0しか入ってませんでした。

#define M 256
#define N 256

FILE *fa,*fb;
unsigned char red[N][M],green[N][M],blue[N][M];
fa=fopen("ファイル1","rb");
fb=fopen("ファイル2","wb");
fread((unsigned char*)red,1,M*N,fa);
fread((unsigned char*)green,1,M*N,fa);
fread((unsigned char*)blue,1,M*N,fa);
fwrite((unsigned char*)red,1,M*N,fb);
fwrite((unsigned char*)green,1,M*N,fb);
fwrite((unsigned char*)blue,1,M*N,fb);
fclose(fa);
fclose(fb);

295デフォルトの名無しさん:2008/05/08(木) 19:11:40
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6484.txt
[3] 環境
 [3.1] OS:Windous XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2008年5月9日20:00まで
[5] その他の制限: ただ単に昇順に表示するプログラムは与えられました。

ヒントだけでもいいのでよろしくおねがいします。
296デフォルトの名無しさん:2008/05/08(木) 19:22:51
>>293
すごすぎて( ゚д゚) ポカーン
よくこんなのつくったね。
297デフォルトの名無しさん:2008/05/08(木) 19:35:36
おバカには餌を与えないで下さい。
298デフォルトの名無しさん:2008/05/08(木) 19:42:24
299デフォルトの名無しさん:2008/05/08(木) 20:28:19
>>298
ありがとうございます。
前スレは確認できないのですが、
被っていたようなので申し訳ありませんでした。
300デフォルトの名無しさん:2008/05/08(木) 21:25:10
>>294
画像ファイルの形式は?
それによって、RGBがどう入ってるか決るから提示しないと
それとも、独自形式?
それはそれで提示が必要

ともかく画像形式とやらの詳細を書かないと、
その上手く行かない自分のサンプルから推理ゲームになるよw
301294:2008/05/08(木) 21:36:07
>>300
書き忘れていました。形式はRGBフォーマットです。
302デフォルトの名無しさん:2008/05/08(木) 21:48:47
>>301
いやだから…BMP形式なのかJPEG形式なのか
それとも、ファイルの先頭からRGBが隙間無くファイルの最後までしかない等の
独自形式なのか

ともかく、”画像形式”でググって、君の授業内のローカルルールを
他人に分るように説明してよ…
多分、あっと言う間に出来る問題なのに、そこがボトルネックw
303デフォルトの名無しさん:2008/05/08(木) 22:25:48
>>291
バイトで遅れましたが
ありがとうございました!!

こんなに早くやっていただけるとは思いませんでした・・・
304294:2008/05/08(木) 22:26:36
すいません。JPEGでお願いします。
305デフォルトの名無しさん:2008/05/08(木) 23:31:15
余力がある方はアニメーションGIFもお願いします。
306デフォルトの名無しさん:2008/05/08(木) 23:35:53
このスレで質問しようと思ったらどれとは言わないけど全く同じ問題があったw
やっぱり皆考えることは同じなのかw
307デフォルトの名無しさん:2008/05/08(木) 23:51:49
[1] 授業単元: プログラミング演習
[2] 問題文 a) 3つの整数変数を引数として,その平均値をdoubleで返す関数average(int a, int b, int c)を作成し
利用例が明らかになるようにしてプログラムを作成しなさい.

b) 配列とそのサイズを示す整数変数を引数として,配列要素の平均値を求める関数averageOfarray(int array[], int size)を作成し,
利用例が明らかになるようにしてプログラムを作成しなさい.
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2008年5月9日
308デフォルトの名無しさん:2008/05/09(金) 00:08:48
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6489.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:5月10日まで
[5] その他の制限:特になし
問2でbが大きいため結果がうまくいきません。お願いします
309277:2008/05/09(金) 00:39:56
>>287
「1」「2」共に完成させた。条件は満たしてると思う。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6490.txt
310デフォルトの名無しさん:2008/05/09(金) 00:47:31
>>307
a)
#include <stdio.h>
double average(int a, int b, int c){return (double)(a+b+c)/3;}
int main(){
int a,b,c;
printf("a=");scanf("%d", &a);
printf("b=");scanf("%d", &b);
printf("c=");scanf("%d", &c);
printf("average=%f", average(a, b, c));
}
311デフォルトの名無しさん:2008/05/09(金) 00:48:23
>>304
お前さ、ニセモノか
授業の流れを分ってないだろ…、回答で簡単に推測出来るw

JPEGって事は、JPEGLIBとか使うのか?
使わないなら、ハフマン圧縮が必要だぞ?
全て自前のJPEGファイル操作なら、明らかに294の自身の回答サンプルをオーバースペックw

一瞬マジでJPEGLIB使用した回答を、と思ったが…辞めたw
312デフォルトの名無しさん:2008/05/09(金) 00:55:45
>>307
b)
#include <stdio.h>
double averageOfarray(int array[], int size){
double sum=0;
int i;
for(i=0; i<size; i++)
sum += array[i];
return sum/size;
}
int main(){
int size, i;
int array[100];
printf("size="); scanf("%d", &size);
for(i=0; i<size; i++){
printf("array[%d]=", i);
scanf("%d", &array[i]);
}
printf("average=%f\n", averageOfarray(array, size));
}
313デフォルトの名無しさん:2008/05/09(金) 01:07:32
[1] 授業単元:情報処理
[2] 問題文:キーボードから入力された文字列で、使用されているアルファベットの語数をカウントし表示するプログラム
例)oronamin
o---2
r---1 (以下省略
 [3.1] OS: Windows XP
 [3.2] Ultra-C
 [3.3] 言語: C
[4] 期限: [2008/05/09まで]

一応ここまで作ってみましたがよくわからなくなりました。
#include<stdio.h>
#include <string.h>
main(){
int num,i,j,letnum=0;
char letter[50],tmp;
scanf("%s", letter);
for(i=0;letter[i] !='\0';i++){
for(j=i+1;letter[i] !='\0';j++){
if(letter[i]==letter[j]){
letnum++;
}
}
}
printf("%c---%d",letter[i],letnum);
}
レベル低くてすみませんがよろしくお願いします。
314デフォルトの名無しさん:2008/05/09(金) 01:12:43
>>313
#include <stdio.h>
int main()
{
char str[50];
int num[256] = {0}, i;
scanf("%s", str);
for(i = 0; str[i] != '\0'; i ++)
num[str[i]] ++;
for(i = 'A'; i <='Z'; i ++)
if(num[i] != 0)
printf("%c---%d\n", i, num[i]);
for(i = 'a'; i <='z'; i ++)
if(num[i] != 0)
printf("%c---%d\n", i, num[i]);
}
315デフォルトの名無しさん:2008/05/09(金) 01:13:02
>>313
大文字小文字の区別はあり?
316313:2008/05/09(金) 01:15:03
>>314
ありがとうございます。
助かります。

>>315
ないです。
317294:2008/05/09(金) 01:24:32
>>311
すいません偽物ではありませんが、特に画像形式の指定がなかったのでJPEGで頼んでしまいました。
簡単にRGB値が取り出せる形式がありましたら、その形式でのプログラムを教えてください。
318デフォルトの名無しさん:2008/05/09(金) 01:25:16
トゥルーカラービットマップ
319313:2008/05/09(金) 01:27:13
>>314さんに教わったものですが

>num[str[i]] ++;
str[i]の部分はアルファベットが入るという認識でよろしいでしょうか?
320デフォルトの名無しさん:2008/05/09(金) 01:35:38
>>294のファイル1って196608バイトなの?
あとfreadの戻り値は各RGBそれぞれ65536になってる?
321デフォルトの名無しさん:2008/05/09(金) 02:08:18
[1] 授業単元:応用C言語
[2] 問題文(含コード&リンク):
次の要求仕様(1)~(3)をすべて満たす単一のプログラムを作りなさい。
(1)標準入力から読み込んだ1行にアルファベット(大文字小文字を問わない)が含まれていなければそのまま標準出力に
出力する。
(2)標準出力から読み込んだ1行にアルファベット(大文字小文字を問わない)が一つでも含まれていれば、それをそのまま
標準出力に出力する。ただし、そのような行で含まれているアルファベット(大文字小文字を問わない)の数の多さの順で
上位25%(概数で良い)は、アルファベットを'?'で置き換えたものを出力する。
(3)標準入力が終端に達したら、1行改行し、次いで(2)でそのまま出力しなかった行をランダムな順番に先頭に通し番号(1から始まる
10進数+':')を付けて出力する。(行毎に改行すること)
※行の記憶にはmalloc関数を利用する。mallocで取得したメモリ領域はプログラム終了した時点ですべて解放されていなければ減点
※ソースコードと、ソースコードをシェルから標準入力リダイレクトで与えたプログラムを実行したものをテキストファイル
にリダイレクト出力したものを試験結果サンプルとして提出。
[3] 環境
 [3.1] OS:Linux/Unix
 [3.2] コンパイラ名とバージョン:gcc を想定するもgeneric
 [3.3] 言語:C
[4] 期限:5月16日正午まで
[5] その他の制限:特になし
問題文そのものをデジカメで撮ったものをアップしようと思いましたが、学校名とかわかっちゃうんで、
そのまま書き込みました。何度も確かめましたが、長文なんで部分的に間違っているかも知れません。よろしくお願いします。
322321:2008/05/09(金) 02:10:55
早速間違いが見つかりました。
×(2)標準出力から読み込んだ
======>
○ (2)標準入力から読み込んだ
と読み替えて下さい。すみませんでした。
323デフォルトの名無しさん:2008/05/09(金) 02:38:27
>>294
>>317

つまり、画像形式を調べて操作しなさいって宿題?
それなのに画像フォーマットの指定なし?
今までの回答からして、絶対に課題の内容を自分補間してる気がするが…

画像形式 BMPでRGB形式のみ(パレット、モノクロ不可)
RGB情報は加工なし(BGRの順で入ってるから、必要なら自分で反転する)
324323:2008/05/09(金) 02:43:09
#include <stdio.h>
#include <stdlib.h>

#define IMAGE_WIDTH (256)
#define IMAGE_HEIGHT (256)

typedef struct _BGR {
unsigned char bgr[3];
} BGR;
325323:2008/05/09(金) 02:43:29
int main( int argc, char* argv[] )
{
BGR pixel[ IMAGE_HEIGHT ][ IMAGE_WIDTH ];
unsigned int offset, size;
unsigned char* header;
FILE* fp;

fp = fopen( "file1.bmp", "rb" );
// ヘッダーの10bytes目にピクセル情報までのオフセットがある
fseek( fp, 10, SEEK_SET );
fread( &offset, sizeof(unsigned int), 1, fp );
// ヘッダーの34bytes目にピクセル情報サイズがある
fseek( fp, 34, SEEK_SET );
fread( &size, sizeof(unsigned int), 1, fp );
// ヘッダーを作成
header = (unsigned char*)malloc( offset );
fseek( fp, 0, SEEK_SET );
fread( header, offset, 1, fp );
// BGR値取得
fseek( fp, offset, SEEK_SET );
fread( pixel, size, 1, fp );
fclose( fp );

// 同じファイルを作成
fp = fopen( "file2.bmp", "wb" );
fwrite( header, offset, 1, fp );
fwrite( pixel, size, 1, fp );
fclose( fp );
free( header );

return 1;
}
326デフォルトの名無しさん:2008/05/09(金) 02:45:54
複数回に渡って書き込むくらいなら素直にうpろだ使った方が
327デフォルトの名無しさん:2008/05/09(金) 04:02:17
>>228
取り合えず作ってみた。主な欠陥は以下の通り。
・月齢算出はイマイチ合ってるかわからん。
・年号、及び年月日の範囲チェックが粗雑。
・月齢画像化は未対応(一応視覚化?はしてみた)。
>>229氏が指摘したような事柄に関してなにもしてない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6493.txt
328321@12345:2008/05/09(金) 04:11:27
追加条件が抜けてました(次ページにまたがっていたのを見落としてました)

※標準入力からは与える行の文字数は最大で256文字で、行数は最大で10000行まで対応すること(原文まま)
329デフォルトの名無しさん:2008/05/09(金) 04:39:12
>>308
long doubleで何とかならないか?
330321 ◆3prheF9ilc :2008/05/09(金) 04:47:38
すみません。トリップの使い方が間違ってましたようです
331デフォルトの名無しさん:2008/05/09(金) 05:59:07
>>310 >>312
ありがとう、参考にして提出させてもらいました
332294:2008/05/09(金) 07:37:22
>>323さん、ありがとうございました。
333sage:2008/05/09(金) 11:10:50
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):次の間違えを正しくしなさい
char name1[] = “Jonathon”;
char name2[5] = “Mark”;
name2 = name1;
puts(name2);
[3] 環境
[4] 期限: 明日くらい
[5] その他の制限:

name2をtempに一度入れてからやるのかなーって思ったんですけどエラーがでてさっぱりです。
間違えは1個だけでないかもしれないのでよくわかりません。どなたかお願いします
334デフォルトの名無しさん:2008/05/09(金) 11:38:44
>>333
最初の設問は?
間違えを直すにしても、何をしたいか(条件)位は書こうや
それによってどう直すか違ってくるし

単にエラー取りたいなら

char *name1 = "Jonathon";
char *name2 = "Mark";
name2 = name1;
puts(name2);

変数をポインタにしとけで済む
335デフォルトの名無しさん:2008/05/09(金) 11:39:07
>>333
“ → "
” → "

配列への代入はできないので、name2 = name1; はダメ(配列とポインタは違う)

char name2[5] = "Mark"; を、 char *name2 = "Mark"; にして、name2 = name1; ならできる
336333:2008/05/09(金) 11:52:22
>>334 >>335
ありがとうございます。
理解できました!
337デフォルトの名無しさん:2008/05/09(金) 12:18:48
char (*name1)[] = “Program language C is also”;
char (*name2)[8] = “moving.”;

という方法もあるな
てか将来のCコンパイラでは、上のように解釈されて
エラーにならないようにして欲しいな
338デフォルトの名無しさん:2008/05/09(金) 13:03:49
>>337
お前は何を言っているんだ
339デフォルトの名無しさん:2008/05/09(金) 13:24:52
>>327
ありがとうございました!後は自分で頑張ってみます!
340デフォルトの名無しさん:2008/05/09(金) 13:36:05
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6495.txt

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6496.txt
これでエラーがでます;
どうしたらちゃんと動くのか教えてください。
341デフォルトの名無しさん:2008/05/09(金) 13:50:36
>>340
16進表示が抜けてる
342デフォルトの名無しさん:2008/05/09(金) 13:50:37
【質問テンプレ】
[1] 授業単元:グラフ理論
[2] 問題文:
http://www32.ocn.ne.jp/~graph_puzzle/1no1.htm
ここのサイトにあるハーベル・ハキミの定理を利用して
与えられたグラフ情報(数列情報?)がグラフ的であるかどうかを
しらべるプログラムを作って欲しいです。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名:・・・、ボーランド?bcpad使ってます
 [3.3] 言語:どちらでも可
[4] 期限:無期限ですけど、できるだけ早い方がうれしいです。12日月曜とか
[5] その他の制限:無制限です、自由に作ってください


プログラミングできる皆さんのことですから、
定理とかみたいな数理的内容に関しては
サイトみればすぐに分かると思いますけど、
定理関係とかで何かあれば質問に答えます。

申し訳ありませんが、宜しくお願いします。
343デフォルトの名無しさん:2008/05/09(金) 14:00:12
>>340
argv[1]やargv[3]は文字列。
strlen()は文字列の長さを測る。
そしてaは文字列ではなくてint。だからstrlen(a)は間違い。
(strlen(a) > 1000)ではなくて、(a > 1000)だろう。

switch(argv[2])が間違い。
文字列(charへのポインタ)を渡すのは間違い。
case "mul":などと書くのもコンパイルできない。
strcmp()を使えと書いてあるので素直にそちらを使う。

if (strcmp(argv[2], "add") == 0) {
printf("%d + %d = %d\n", a, b, a + b);
} else if (strcmp(argv[2], "sub") == 0) {
printf("%d - %d = %d\n", a, b, a - b);
} else if (strcmp(argv[2], "mul") == 0) {
printf("%d * %d = %d\n", a, b, a * b);
} else if (strcmp(argv[2], "div") == 0) {
printf("%d / %d = %d\n", a, b, a / b);
}
で充分。
344デフォルトの名無しさん:2008/05/09(金) 14:01:42
おっと16進が抜けてた。
if (strcmp(argv[2], "add") == 0) {
printf("%d + %d = %d %x\n", a, b, a + b, a + b);
} else if (strcmp(argv[2], "sub") == 0) {
printf("%d - %d = %d %x\n", a, b, a - b, a - b);
} else if (strcmp(argv[2], "mul") == 0) {
printf("%d * %d = %d %x\n", a, b, a * b, a * b);
} else if (strcmp(argv[2], "div") == 0) {
printf("%d / %d = %d %x\n", a, b, a / b, a / b);
}
345デフォルトの名無しさん:2008/05/09(金) 14:38:23
>>84>>342
どちらが難しいでしょうか?
346デフォルトの名無しさん:2008/05/09(金) 14:48:41
>>345 両方やってあげて
347340:2008/05/09(金) 15:26:03
無事にできました。
ありがとうございます。ほんとうに助かりました
348デフォルトの名無しさん:2008/05/09(金) 15:55:28
本当?
349デフォルトの名無しさん:2008/05/09(金) 18:16:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):5欠けるマスにランダムに配布される1〜25の数字をまず行で
ソートし、次に列でソートする。左上が小さい数で、右下が大きい数になるようにする。

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: (2008年5月11日まで]
[5] その他の制限:fopenを使用する
350デフォルトの名無しさん:2008/05/09(金) 18:56:49
いまさらだけど、>>84つくってみました
違ってたらすまそ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6497.c
351デフォルトの名無しさん:2008/05/09(金) 19:18:42
>>350

$ ./a.out aabaaba
2
aaaaa
となったが、ちょっと直せばこれでよさそうだな。
352デフォルトの名無しさん:2008/05/09(金) 20:23:59
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
区切り文字で区切られたテキスト形式のファイルを与えると、XML形式のファイルをはき出すプログラムを作りなさい。
[3] 環境:Windows XP、C言語
[4] 期限:なるたけ早く
[5] その他の制限:
最重要項目「決してGPL感染しないこと」「完全に著作権フリーであること」
1) 区切り文字は「,」を標準とする。
2) オプション指定等で区切り文字を空白文字、TAB文字、「;」等に変更できるようにすること。
3) 変換元ファイルの一行目は項目名として扱う。各要素のタグ名として使用すること。
4) 1行を1レコードと扱う。1レコードは<RECORD></RECORD>タグで囲むこと。
5) 変換元のファイル名をルートタグとして使う事。XC200211.CSVならば<XC200211.CSV></XC200211.CSV>で囲む。
6) 各要素の属性値を設定するだけで完成するXMLスキーマファイルを同時に出力すること。
番外) XML形式のファイルをCSV形式に直してはき出すプログラムも作ってよい。

難しすぎて手におえないのでよろしくお願いします><;
353デフォルトの名無しさん:2008/05/09(金) 20:29:24
>>351
修正しました。
結局、再帰関数化することに。。。ウゥゥ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6498.c
354デフォルトの名無しさん:2008/05/09(金) 20:37:15
>>349
テキストファイルを読み込むってことだよね?
5欠けるって5x5ってことだよね?
つまり↓
3 5 12 24 7
19 18 20 9 8
1 21 2 11 15
23 6 13 17 4
22 25 10 14 16

まず行
3 5 7 12 24
8 9 18 19 20
1 2 11 15 21
・・・
で列
1 2 7 12 4
3 5 11・・・
とかになるよ?
355デフォルトの名無しさん:2008/05/09(金) 20:37:20
>>350
zxzxcvcvbnbnで
9
zxz
となる…。
356355:2008/05/09(金) 20:41:16
ごめん取り消しすんまそw俺の意味不明><
357デフォルトの名無しさん:2008/05/09(金) 20:49:07
>>350
スゲエな、勉強になったわ。
358デフォルトの名無しさん:2008/05/09(金) 21:06:51
>>354
1 2 3 4 5
6 7 …

とするにはどうしたらいいんでしょうか?
359657:2008/05/09(金) 21:20:41
[1] 授業単元:プログラミング

[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6500.txt
[3] 環境
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語:C++
[4] 期限: 5月12日
[5] その他の制限:プログラム中の繰り返し処理にはdo〜while 文を使用しなければいけない。

よろしくお願いしますm(__)m 。
360デフォルトの名無しさん:2008/05/09(金) 21:47:16
>>350
恥ずかしながらソースを読んで理解するまで一時間かかったw
あなたの知性に敬意を表したい。この問題、解けないと思ってた。
361デフォルトの名無しさん:2008/05/09(金) 21:56:56
>>358
ソートする際に行だの列だの分けず5x5とも考えず、25個の数字だと考えれば簡単

だけど「まず行、次に列」っていう問題文なんでしょ?
だとするなら俺にはちょっと思い浮かばない
362デフォルトの名無しさん:2008/05/09(金) 22:03:18
出来ないよ。入力= abcdedcba

これは解ける問題ではないだろ。 10万文字は絶対無理。

出力
0
abcdedcba
363デフォルトの名無しさん:2008/05/09(金) 22:06:34
すまん間違えました 検証し直してきます
364350:2008/05/09(金) 22:20:53
やっぱ再帰処理が処理時間のネックになるので、
一部配列を導入し、高速化しました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6501.c
365デフォルトの名無しさん:2008/05/09(金) 22:33:08
文字列 : aybaddab
>>90 の実行結果
result=2

>>364 の実行結果
4
adda
366デフォルトの名無しさん:2008/05/09(金) 22:36:11
>>365
おおおっ!
367デフォルトの名無しさん:2008/05/09(金) 22:36:42
$ ./a.out xbadczzcdab
1
badczzcdab
$ ./a.out azxbadczzcdab
9
azza

これもだな。
368デフォルトの名無しさん:2008/05/09(金) 22:45:54
10万文字の、最大回文の抽出が出来るっていう人は、抽出法の概要書いてくれないですか?
できる方法が全く思いつきませんが。 
369350:2008/05/09(金) 22:58:52
>>365
すんません、一応修正したつもり、です

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6502.c
370デフォルトの名無しさん:2008/05/09(金) 23:08:12
aabcaaは一個のはずなのに2つになります…
371350:2008/05/09(金) 23:29:26
修正はしたんですが、やっぱ>>90氏の方がはやいすね
372デフォルトの名無しさん:2008/05/09(金) 23:32:33
速度は、初めのやつでも10万文字直ぐに返却帰ってきますけど…
間違えが戻ります
373デフォルトの名無しさん:2008/05/10(土) 00:12:49
>>168
何文字でも
回文になるには
 文字数が偶数の時・・各文字は偶数個。
 文字数が奇数の時・・奇数文字数は一種、それ以外は偶個。

なので奇数個の文字が複数有る場合、その数だけ取り除いた組み合わせがある。

奇数個の文字がある場合はそれを中心に置き
偶数個の文字を半分にし並びを発生してミラーするだけ。組み合わせは簡単にできるしそれほど難解ではないと思うけどなぁ。
374デフォルトの名無しさん:2008/05/10(土) 00:16:10
出題は、回文生成方法では無いんですよ
10万文字の文字列が与えられたとき、そこから最小何文字取り除くと回文になるかです。
375C行為の教師 ◆WBRXcNtpf. :2008/05/10(土) 01:21:58
この問題はあんまりハマんないほうがいいと思うよ。
376デフォルトの名無しさん:2008/05/10(土) 01:23:50
C行為とは何か?
377C行為の教師 ◆WBRXcNtpf. :2008/05/10(土) 01:29:36
>>376
深く詮索しないことです。色々な意味で
378デフォルトの名無しさん:2008/05/10(土) 02:00:29
>368
ペア数、残文字列は以下の様になる。
0 azxbadczzcdab
1 zxbadczzcd
2 xbadcz
2 czzc
3 zz --> 4
2 zz
1 xbadcz
1 adczzcda
2 dczzcd
3 czzc
4 zz --> 5 <---これが最大ペア数
3 zz --> 4

上記より、最大ペア数は5(5*2文字分)
よって削除文字の最小数は、len("azxbadczzcdab") - 5*2 = 4
379デフォルトの名無しさん:2008/05/10(土) 02:15:46
>>368
説明するのが面倒だからキーワードだけ.検索すれば大量に引っかかるはず.

与えられた文字列 s と,s を反転した文字列 r を考えると,
最長回文は s と r の最長共通部分列(longest common subsequence)で求まる.
あとは longest common subsequence を高速に解くアルゴリズムを使えばいい.
380デフォルトの名無しさん:2008/05/10(土) 02:17:22
最長回文、これでできたんじゃね?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6503.txt

参考
ttp://www.prefield.com/algorithm/dp/lcs_hs.html

>>90のテストパターン生成を付けてます。
1万文字は余裕。10万文字はメモリ馬鹿食いして危ないです。
381デフォルトの名無しさん:2008/05/10(土) 02:38:39
自分のものになっていない既成理論を利用する場合は特に慎重に
http://www.prefield.com/algorithm/string/manacher.html
382デフォルトの名無しさん:2008/05/10(土) 02:41:07
>>380
Hunt-Szymanski は O((r+n) log n) なので,
たとえば s = "aaaaaa....aab" みたいな場合に非常に遅い.
対応するにはヒューリスティクスを入れるか,
Hirschberg などとカップリングすることになる.
まあランダムインプットを仮定してよいならそれでも十分.

ただし 380 の実装では,求める必要のない LCS そのものを計算しており,
LCS の長さだけが欲しい場合には空間使用量を大幅に減らせる.
あと,入力が有限のアルファベットなので map を使う必要もない.
それくらいを直すと次のようになる.n = 100000 でもそれなりの時間で求まる.

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6504.cpp
383デフォルトの名無しさん:2008/05/10(土) 03:00:11
>>340
手元の処理系では、>>343,>>344の修正だけじゃコンパイル通らなかったけど
他にどういう修正したのかよろしければ教えて下さい。
384デフォルトの名無しさん:2008/05/10(土) 03:07:51
最長の一致部分列求めたって駄目だろ

a*b*c*d*e***e*d*c*b*a

として、*には反転したものが一致する部分列を持たないように入れる。
しかし、*を取り除くことで最低でも、abcdeを含む回文が作れる
385デフォルトの名無しさん:2008/05/10(土) 03:17:16
反転したものと最長一致した部分列を含まないものが最長回文になることもあるだろ。
386デフォルトの名無しさん:2008/05/10(土) 08:58:14
まぁなんだ?あれだ

お前ら仕事しろと
387デフォルトの名無しさん:2008/05/10(土) 09:30:04
話についていけなくて煽るぐらいしかできませんw
388デフォルトの名無しさん:2008/05/10(土) 11:01:43
>>384
最長共通部分列を誤解してるんじゃね?
a*b*c*d*e***e*d*c*b*a を反転して
a*b*c*d*e***e*d*c*b*a としたら、
abcdeedcba は少なくとも共通部分列。

>>385
具体例を
389デフォルトの名無しさん:2008/05/10(土) 12:13:24
>>358
ちなみにだけど、
>左上が小さい数で、右下が大きい数
としか解の制限がないなら行、列の順にソートするだけでも満たせる

1 2 3 4 5
6 7・・・
ってのはむり
1・・・・
・・・・25
にはなる
390デフォルトの名無しさん:2008/05/10(土) 15:37:11
>>389
それはfopenを使用する場合どうかけばいいんでしょうか
391デフォルトの名無しさん:2008/05/10(土) 16:57:49
メイン
{
整数型二次元配列[5][5]宣言;
ファイルポインタ宣言;
読み込みファイルオープン;

ファイルから読み込みループ;

行の昇順ソート;

列の昇順ソート;

出力ループ;

ファイルクローズ;

リターンゼロ;
}
392デフォルトの名無しさん:2008/05/10(土) 17:36:17
[1] 授業単元: デジタル信号処理
[2] 問題文:http://www4.plala.or.jp/tamo/dsp/07cross-corr.pdf
[3] 環境 :OS、Linux、言語、C言語
です。

よろしくお願いします。


393デフォルトの名無しさん:2008/05/10(土) 18:17:04
美しく決めたじゃん
丸投げ
394デフォルトの名無しさん:2008/05/10(土) 18:38:48
>>392
> 各個人のホームページ(目次ページ)から次のような名前でリンクを張ること

ホームページの場所と編集方法(アカウント)を教えてくんろ
395392:2008/05/10(土) 18:49:16
すいません丸投げすぎました。
信号のプログラムとその信号を読み込み相関処理を行うプログラムについて教えてください。
396デフォルトの名無しさん:2008/05/10(土) 19:06:21
>>359
(空白)にこれぶっ込めばおk。
fgets(name, 255, stdin);
i = 0; do{}while(name[spaze_index = i++] != ' ');
397359:2008/05/10(土) 19:27:39
>>396

実行結果確認しました。

助かりましたありがとうございますm(__)m 。
398デフォルトの名無しさん:2008/05/10(土) 19:36:00
>>374
だから奇数個が一つになるようにしたら回文になるっつうことだよ。そんなに面倒?
399デフォルトの名無しさん:2008/05/10(土) 19:42:50
>>398
面倒
400デフォルトの名無しさん:2008/05/10(土) 19:46:39
>>398
面倒でないと思うなら実装してごらん
401デフォルトの名無しさん:2008/05/10(土) 19:54:45
コードで示そうぜ。プログラマならな。
402デフォルトの名無しさん:2008/05/10(土) 21:26:59
[1] 授業単元:
関数や配列とか
[2] 問題文(含コード&リンク):()
入力した5つの整数の最大値を求める関数をつくれ
[3] 環境
 [3.1] OS: (Windows/Linux/等々) win
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
特になし
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
     配列を使用すること


お願いします。
403デフォルトの名無しさん:2008/05/10(土) 21:34:53
>>402
int max_n(const int *a, int n) {
int r = *a;
while(a++, --n)
r = (*a > r) ? *a : r;
return r;
}
404デフォルトの名無しさん:2008/05/10(土) 21:45:57
>>402
// 引数は配列と配列数
int GetMaxInt(int array[], int num)
{
  int max = 0, i = 0;

  for(i = 0; i < num; i++){
    if(i == 0)
      max = array[i];
    else{
      if(array[i] > max)
        max = array[i];
    }
  }
}

アドレスとかわからなかったら値渡し
405404:2008/05/10(土) 21:46:42
return max;
忘れてた
406デフォルトの名無しさん:2008/05/10(土) 23:27:47
[1] 授業単元:分からない。行列の積。
[2] 問題文(含コード&リンク):三行三列の行列の積を求めるプログラムを作れ。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: VisualBasic2005
 [3.3] 言語: C++
[4] 期限: 5/12 13:00まで
[5] その他の制限: for型繰り返し?を用いる。

お願いします。
C言語があまり理解できてないので、授業単元と[5]の欄が曖昧になっています。すいません。
407デフォルトの名無しさん:2008/05/10(土) 23:29:48
[1] 授業単元: プログラミング演習
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6506.txt
[3] 環境
  OS:Windows
 言語:Visual C++ 2005
[4] 期限: 2008/05/11の夜頃まで
[5] その他の制限: 特に無し

よろしくお願いします。
408デフォルトの名無しさん:2008/05/11(日) 00:09:16
>>406
typedef struct _MAT3 {
float m[9];
}MAT3;

MAT3 Matrix3multiply( MAT3 mat0, MAT3 mat1 )
{
MAT3 result;

result.m[0] = mat0.m[0] * mat1.m[0] + mat0.m[1] * mat1.m[3] + mat0.m[2] * mat1.m[6];
result.m[1] = mat0.m[0] * mat1.m[1] + mat0.m[1] * mat1.m[4] + mat0.m[2] * mat1.m[7];
result.m[2] = mat0.m[0] * mat1.m[2] + mat0.m[1] * mat1.m[5] + mat0.m[2] * mat1.m[8];
result.m[3] = mat0.m[3] * mat1.m[0] + mat0.m[4] * mat1.m[3] + mat0.m[5] * mat1.m[6];
result.m[4] = mat0.m[3] * mat1.m[1] + mat0.m[4] * mat1.m[4] + mat0.m[5] * mat1.m[7];
result.m[5] = mat0.m[3] * mat1.m[2] + mat0.m[4] * mat1.m[5] + mat0.m[5] * mat1.m[8];
result.m[6] = mat0.m[6] * mat1.m[0] + mat0.m[7] * mat1.m[3] + mat0.m[8] * mat1.m[6];
result.m[7] = mat0.m[6] * mat1.m[1] + mat0.m[7] * mat1.m[4] + mat0.m[8] * mat1.m[7];
result.m[8] = mat0.m[6] * mat1.m[2] + mat0.m[7] * mat1.m[5] + mat0.m[8] * mat1.m[8];

return result;
}
409デフォルトの名無しさん:2008/05/11(日) 00:10:26
【質問テンプレ】
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6508.txt
この問題文の
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 2008年05月15日00:00まで
[5] その他の制限:実習を0から数時間習ってみただけのド素人レベル

よろしくお願いします。
410デフォルトの名無しさん:2008/05/11(日) 00:14:23
>>406
#include<iostream>
using namespace std;
const int cNum
int main()
{
int NumArray[cNum][cNum]={{0,0,0},{0,0,0}};
int result=1;
for(int i=0;i<cNum;i++){
for(int k=0;k<cNum;k++){
cout << "数字入力" << i+1 << "," << k+1 << ":";
cin >> NumArray[i][k];
}
}
for(int i=0;i<cNum;i++){
for(int k=0;k<cNum;k++){
result*=NumArray[i][k];
}
}
cout << result << endl;
return(0);
}
411410:2008/05/11(日) 00:16:09
4行目セミコロン忘れ
コンパイルしてないのがバレる
412410:2008/05/11(日) 00:17:21
あー
const int cNum=3;
ねorz
413デフォルトの名無しさん:2008/05/11(日) 00:19:08
>>406
#include<stdio.h>

void product(double c[][3], const double a[][3], const double b[][3])
{
int i, j, k;
for(i = 0; i < 3; i ++) {
for(j = 0; j < 3; j ++) {
double t = 0;
for(k = 0; k < 3; k ++)
t += a[i][k] * b[k][j];
c[i][j] = t;
}
}
}

int main()
{
static const double a[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, };
static const double b[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, };
double c[3][3];
int i, j;
product(c, a, b);
for(i = 0; i < 3; i ++ ) {
for(j = 0; j < 3; j ++)
printf("%f ", c[i][j]);
printf("\n");
}
}
414デフォルトの名無しさん:2008/05/11(日) 00:22:36
>>409
[課題1]
#include <stdio.h>
int main(){
int a,b;
puts("数字を入力して下さい。");
scanf("%d", &a);
puts("もうひとつ数字を入力して下さい。");
scanf("%d", &b);
printf("%dから%dまでの合計値は、%dです。\n", a, b, ((a+b)*(b-a+1))/2);
getchar();getchar();
}
415デフォルトの名無しさん:2008/05/11(日) 00:23:30
>>414
getchar();getchar();は消してちょ
416デフォルトの名無しさん:2008/05/11(日) 00:24:39
>>407

void search(const int a[], int n, int key)
{
int i;

for ( i=0; i<n; i++ ) {
if (a[i] == key) {
printf("%d番目に見つかりました。\n", i+1);
}
}
}
417デフォルトの名無しさん:2008/05/11(日) 00:28:41
>>407
下の1行を、
printf("%dは%d番目にあります。\n", ky, idx + 1);

以下に変更。
do {
int next = search(x+idx+1, nx-idx-1, ky);
printf("%dは%d番目にあります。\n", ky, idx + 1);
idx = (next != -1) ? idx+1+next : -1;
} while(idx != -1);
418デフォルトの名無しさん:2008/05/11(日) 00:29:52
>>409
[課題2]
#include <stdio.h>
int main(){
int a,i;
puts("数字を入力して下さい。");
scanf("%d", &a);
printf("入力した数字%dの約数は以下の通りです。\n",a);
for(i=a; i>0; i--)if(a%i == 0) printf("%d\n", i);
}
419デフォルトの名無しさん:2008/05/11(日) 00:45:11
>>409
[課題3]
#include <stdio.h>
int main(){
char buf[1000], s, d;
int a,i;
puts("文字列を入力して下さい。");
fgets(buf, 1000, stdin);
puts("置換したい文字を入力して下さい。");
s = getchar();getchar();
puts("置換後の文字を入力して下さい。");
d = getchar();
puts("置換結果を示します。");
for(i=0; buf[i] != '\0'; i++)
if(buf[i] == s) putchar(d); else putchar(buf[i]);
}
420デフォルトの名無しさん:2008/05/11(日) 00:53:31
>>399
丸投げされたらそりゃ面倒(正直興味ないからというのも手伝ってしまう)

>>400
>>401
うーん、文字種は alpha (128種くらいにしてみたけど)

struct CIRC_NOTI_LETTER
{
 long alpha_count[ 128 ]; // 文字の出現をカウント
 int circ_strings[128];   // 使用文字リスト列(alpha_count)

 CIRC_NOTI_LETTER () {}; // _count など初期化
 int setup(char* src_strings); // 文字読み込んで _count に
 int set_tagle(int top_level); // リスト作成・回帰で手抜きする?
};

みたいな。。long 取ってるから 10万文字数とかじゃなくlong数×文字種みたいな感じで。文字の並びはこちらで作り替えて Ok ということで後はいかようにも加工できるけど・・・マジコード書いて欲しいの?。
421デフォルトの名無しさん:2008/05/11(日) 01:07:48
すいません>>352を11日中にお願いします。><;
受け取りに来たら誰もやってくれてなくて泣きそうです><;
422デフォルトの名無しさん:2008/05/11(日) 01:22:56
>>421
ここって、カンニングよろしく丸投げコーナーなのか?
それにあなた社会人になるまえにおちこぼれじゃん(問題解決能力ゼロじゃないの)
自分で取り組んでどうしてもつまずくところを Help なら0狩るけど。

っていうか中国では入試の代理屋が成り立つ位だから、質問一件解決に5千円〜1万位で請け負う商売成り立つかもしれないな。
423デフォルトの名無しさん:2008/05/11(日) 01:23:14
>完全に著作権フリーであること
これがちょっと難しくて
424デフォルトの名無しさん:2008/05/11(日) 01:24:52
>>421
丸投げしておいて丸一日以上放置して「受け取りに来た」なんて、虫がよすぎる。
425デフォルトの名無しさん:2008/05/11(日) 01:25:37
そうだな、俺が回答したらその時点で著作権が俺に発生してしまうからフリーにはならないな。
426デフォルトの名無しさん:2008/05/11(日) 01:25:59
完全に著作権フリーであることって
実質、標準ライブラリのみってことになんの?
ライセンス関係は全然知らないから、よく分からんが。
427デフォルトの名無しさん:2008/05/11(日) 01:28:38
>>426
まず日本では無理。
著作者人格権を行使しないと契約を交わせば擬似的にフリーになるが、
その契約をどうやって>>352と交わすのかが問題になるな
428デフォルトの名無しさん:2008/05/11(日) 01:30:15
>>421
せめてサンプルくらい提示してくれ。できれば実データがいいな。
429デフォルトの名無しさん:2008/05/11(日) 01:30:17
狼煙で
430デフォルトの名無しさん:2008/05/11(日) 01:33:54
>>421
仕事のにおいがプンプンするがアドバイスだけしとく
5)はXMLの規約違反のハズ
6)込みで11日中は無理
番外)はXSLTで解決しろ
あと「完全に著作権フリーであること」なんだから2chに丸投げした時点でダメ
お前自身でやりなさい
431デフォルトの名無しさん:2008/05/11(日) 01:37:59
>>420
非常に書いて欲しいです。

その方法で本当に解けるか疑っているというのと、
単に良いコードを見たいという理由からです。
432デフォルトの名無しさん:2008/05/11(日) 01:44:50
>>421
顔文字がむかつくのと最重要項目が意味不明
433デフォルトの名無しさん:2008/05/11(日) 01:46:23
みんな、352, 421を叩きすぎ
ヒントくらいあげて助けてあげれば良いじゃんw

おれはXMLに付いては素人だから、全部を作ってあげるには時間がかかるが
ファイル操作やバッファ作成、バッファをファイルにする等は教えてあげれる

そんな問題を丸投げするのに、XML形式についても何も知りませんって訳じゃないだろ?<421
自分で空関数でも言いから設計して、その処理パーツ単位で分らない事や内容を聞けばいいんじゃね?

設計なんて初心者ならスマートじゃなくとも良いだろ
それすら分らないレベルなら…大人しく諦めるしかね…
434321 ◆3prheF9ilc :2008/05/11(日) 01:50:33
321もお願いします。
435デフォルトの名無しさん:2008/05/11(日) 02:06:25
クレクレ厨がひどいな
436デフォルトの名無しさん:2008/05/11(日) 02:11:16
どさくさにまぎれてw
437409:2008/05/11(日) 02:38:51
>>414,415,418,419
ありがとうございました

この流れで催促じみた事を言って恐縮ですが、4,5の方もお分かりの方がおられましたら、
是非よろしくお願いしますm(_ _)m

438デフォルトの名無しさん:2008/05/11(日) 02:46:23
>>352
の問題のテクニカルな難所は、CSVの第一行を読み込んで、項目文字列配列に
分解するところだろな。何項目あるか事前にわからない点が腕の見せ所。
XMLファイル作成は、これが出来たら簡単だと思う。
一行毎にCSVを項目に分解してフォーマットにしたがって出力するだけ。
<?XML version="1.5">
<入力ファイル名>

<record>
........
</record>

<record>

<項目1> CSVのn行目の第一項目</項目1>
<項目2> CSVのn行目の第二項目</項目2>
...................................
</record>

<record>
................................
<;/record>
</入力ファイル名>

てな感じのファイル作ればいいんだと思う(よ).

スキーマXMLファイルも多分、簡単
読み込んだ項目を指定フォーマットで順次書き下すだけ。
番外は、XMLファイルを読み込んで上のフォーマットになっているかチェックする処理が
必須だから、格段に難しくなるよな気がする。
439デフォルトの名無しさん:2008/05/11(日) 02:49:28
>>422
お叱りはごもっともですが、ここは実質的に丸投げスレだと思います><;

>>423-427
法的にはあんまり厳密でなくてもいいです。ただ、著作権表示なしに流用できて、
仮にちょっとだけお小遣い程度のお金もらう事になっても怒られない程度なら十分です。

>>428
それはちょっと難しいです。項目数が1桁〜30程度、サイズが数KBから数MB程度の
ファイルが処理できれば大体おkなんですが。
""で囲まれる文字列やASCII文字Shift-JIS以外の文字やなんかは考慮する必要は無いです。

>>430
>5)はXMLの規約違反のハズ
そうなんですか?でも、そうしないと多分受け取ってもらえません。><;

>番外)はXSLTで解決しろ
ごめんなさい、敷居が高いです。

>>432
ごめんなさい、こっちに変えます。( >ω<)
440デフォルトの名無しさん:2008/05/11(日) 02:57:15
>>433
>そんな問題を丸投げするのに、XML形式についても何も知りませんって訳じゃないだろ?<421
自慢じゃないですがXMLさっぱりです。( >ω<)
<>で囲んだりしてhtmlに似てるなーくらいしかわかりません( >ω<)

>>438
少し簡単そうに見えてきました。
441デフォルトの名無しさん:2008/05/11(日) 03:04:49
>>440
それじゃ
仮にココにソースがアップされても、それが正しいか自分で分らないじゃんw
…まあ、そんなんじゃアップはないと思いなよ
442デフォルトの名無しさん:2008/05/11(日) 03:12:07
>>439
自分が請けた仕事だったら、最後まで自分の責任でやれ
それが誠意というものだ。
なお、CはUnix環境寄りの言語であるのに対しXMLはどち
らかというとWindows寄りだから、WSHなどの処理系でも
ライブラリライセンスに抵触しないで作れると思う。
Windows環境だったらCプログラムよりかWSHのほうが
遥かに使い勝手がいいと思う。
ここよりかWSH関連のスレで、質問したほうが早いかも。
443デフォルトの名無しさん:2008/05/11(日) 03:12:21
>>352
日本だから「完全に著作権フリーであること」は無理。
444デフォルトの名無しさん:2008/05/11(日) 03:23:18
>>441
多分、それらしく動いていれば大丈夫だと思います。( >ω<)

>>442
( >ω<) あい;;
でも、仕事じゃなくて宿題です。
445デフォルトの名無しさん:2008/05/11(日) 03:34:01
宿題ならGPLに感染してても、完全に著作権フリーじゃなくてもいいじゃん
446デフォルトの名無しさん:2008/05/11(日) 03:34:12
>>409 課題4
#include<stdio.h>
#include<string.h>
void mygets(char *buf, int size)
{
char *p;
if(fgets(buf, size, stdin)) {
if((p = strchr(buf, '\n')))
*p = '\0';
} else
*buf = '\0';
}
int main()
{
char str[100], s[100], r[100], *p;

printf("文字列を入力して下さい。\n");
mygets(str, sizeof(str));
printf("置換したい文字列を入力して下さい。\n");
mygets(s, sizeof(s));
printf("置換後の文字列を入力して下さい。\n");
mygets(r, sizeof(r));
printf("置換結果を示します。\n");
if((p = strstr(str, s)))
printf("%.*s%s%s\n", p-str, str, r, p+strlen(s));
else
printf("%s\n", str);
return 0;
}
447デフォルトの名無しさん:2008/05/11(日) 03:36:10
顔文字がむかつくからぜってーやらねー
448デフォルトの名無しさん:2008/05/11(日) 03:41:10
>>439
あまりのことにスルーしそうになったが、
宿題を丸投げするスレであって仕事を丸投げする下請け業者じゃないぞ、ここは



ところで誰かが解答した後に「>>xxxだけどやっぱGPLね」と言われたら終わりの気がする
このスレID出ないし。
449デフォルトの名無しさん:2008/05/11(日) 03:41:23
>>409 課題5
#include <stdio.h>
#include <stdlib.h>
int less_int(const int *x, const int *y)
{
return *x < *y;
}
int grater_int(const int *x, const int *y)
{
return *x > *y;
}
int main()
{
int data[8] = {1,6,10,15,20,15,5,9};
int type, i;
printf("並び替え方法を指定して下さい(1. 昇順2.降順)\n");
if(scanf("%d", &type) != 1 || type < 1 || type > 2)
return 1;
qsort(data, 8, sizeof(int), (type==1 ? grater_int : less_int));
printf("並び替えた数値を一覧で出力します。\n");
for(i = 0; i < 8; i ++)
printf("%d\n", data[i]);
return 0;
}
450449:2008/05/11(日) 03:44:30
×grater_int
○greater_int
動作に変わりないです。
451デフォルトの名無しさん:2008/05/11(日) 03:45:17
>>321
こんなんで合ってるかわからんけど一応うpしてみる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6509.txt
452デフォルトの名無しさん:2008/05/11(日) 03:47:53
>>431
その気になって問題見直した。誤解もありですが書いてみたっす。
リストそれなりに長い。ここは整形崩れるからなんだけど
struct AL_CIRC
{
 int hf_len;    // 見つかった文字数
 int center_c;   // 中心文字があればそれを...
 char circ_res[50002];  // 10万文字の半分
 long str_len;
 char* circ_src;

 // 回文元の文字列
 AL_CIRC(char* s)
 {
  circ_src = s;
  str_len = strlen(s);
 };

 int search(int in); // サーチしては表示
 int res_print();  // それなりに結果を表示やつ
};

// つづく
453デフォルトの名無しさん:2008/05/11(日) 03:48:35
// 回文検索
int AL_CIRC :: search(int in)
{
 hf_len = 0; // 回文の文字数
 center_c = 0; // 中心の文字があれば...

 if(in >= str_len - 1) // 検索が終端にキタ
  return -1; // 終わり

 int i;
 int out = in + 1; // 次の検索開始位置
 int lastp = str_len - 1; // 回文となる終わり側の位置

// 続く
454デフォルトの名無しさん:2008/05/11(日) 03:50:23
 for(i = in; i < lastp - 1; i++) // 両側から一致する文字を...
  {
   int bkp = lastp; // 跳んだ時の為に...

   for(; i < lastp && circ_src[i] != circ_src[lastp]; lastp--)
    ;

   if(i < lastp) // 一致を見つけたら
   {
    circ_res[hf_len++] = circ_src[i]; // 文字を覚えて

    if(hf_len == 0) // 次の位置を覚える
     out = i + 1;
   }
   else
    lastp = bkp; // 跳んだら終わり側をモトイする
 }

//つづく
455デフォルトの名無しさん:2008/05/11(日) 03:52:44
 if(hf_len) // 回文リストができたら表示
 {
  if(i < lastp) // 中心の一文字がある
   center_c = circ_src[i];

  res_print(); // それなりに表示
 }

 return out; // 次の位置を返す
}

// 結果をそれなりに表示
int AL_CIRC :: res_print()
{
 if(hf_len == 0) // 見つからなかった..終わり
  return 0;

 int i;
 for(i = 0; i < hf_len; i++)
  fputc(circ_res[i], stdout);

 if(center_c)
  fputc(center_c, stdout);

 for(i = hf_len - 1; i >= 0; i--)
  fputc(circ_res[i], stdout);

 fputc('¥n', stdout);

 return hf_len * 2 + (center_c ? 1 : 0); // 回文の文字数を返す
}
456409:2008/05/11(日) 03:52:46
>>446,449

ありがとうございましたm(_ _)m
457デフォルトの名無しさん:2008/05/11(日) 03:52:48
「つづく」くらいならうpろだ使え
458デフォルトの名無しさん:2008/05/11(日) 03:53:19
だからそういう場合はうpロダを使ってくれと・・・
459デフォルトの名無しさん:2008/05/11(日) 03:53:39
// ラスト

// 引数の文字を回文できるものすべてリストする
int main(int argc, char* argv[])
{
 for(int k = 1; k < argc; k++)
 {
  AL_CIRC drv(argv[k]);

  int i = 0;
  while((i = drv.search(i)) > 0)
   ;
 }
}
460デフォルトの名無しさん:2008/05/11(日) 03:54:14
すまん。。
461449:2008/05/11(日) 04:08:51
>>452
>test aaba
aabaa ←?
aba
462デフォルトの名無しさん:2008/05/11(日) 04:09:29
名前がそのまま残ってた・・・
463デフォルトの名無しさん:2008/05/11(日) 04:28:13
>>444
嘘言ってもダメ
お前の書き込みからXMLの知識も十分あるのがわかるし
仕様がしっかりしすぎてる
あきらかに業務レベルの要求仕様なんだよ
以降スルーな
464デフォルトの名無しさん:2008/05/11(日) 06:32:34
宿題なら著作権がどーのいわないしね
465デフォルトの名無しさん:2008/05/11(日) 06:37:14
>>463
お金云々は仮の話ですし、この程度のプログラム単体でお金もらえるわけが無いじゃないですか。
学生でよくわかりませんがきっとそうだと思います( >ω<)
466デフォルトの名無しさん:2008/05/11(日) 07:33:30
トーマスの会社で雇ってもらえw
467デフォルトの名無しさん:2008/05/11(日) 08:39:20
>>352
ホレ
5までなら、なんちゃってXML?風(WEBで調べた感じ)で作ってやったぞw
エラー処理とかやっつけ&区切り文字変更はデバッグしてない
ここでの表明が有効かどうか知らんが、著作権は放棄してあげる
(これで良いのかww)

スキーマファイルはちょっとWEB見たけど面倒だからやってない
さすがに後は自分でやれw

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6510.txt
468デフォルトの名無しさん:2008/05/11(日) 12:01:46
>>461
おお、ねむたで作ったからまともに動くかなんだけど...それ lastp-- いれてくれ。簡単なソースだからわかるっしょ。よろしく。
469321 ◆3prheF9ilc :2008/05/11(日) 12:04:19
>>451さん
どうもありがとうございました。
これほどの短いコードにほぼすべての仕様が詰め込まれて
いて感服しました。(講師は1000行位になる言ってました)
学校と同じ処理系ではありませんが、早速コンパイルしてやってみました。
ただ、ちょっと結果がちがった感じです。幾つかの処理例も渡されてたんで
すが、?が出力される(そのままプリントされない)行は、もう少し少なく、
そのまま出力されない行は、アルファベットを全く含まず全部?に置き換わって
ました。明日、学校でもう一度確かめてみます。
>>451さんのコードを参考にして、自分でも少しやってみようと思いますが
行き詰まったらまたここで相談させて頂くかも知れません。
470デフォルトの名無しさん:2008/05/11(日) 12:18:16
[2]問題文:test.txtを読み込み、normal.txtの形式に出力しなおすプログラムを作成せよ。
     ファイル名の指定はソース内に記述すること。
[4]期限:2008-05-14

test.txt→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6511.txt
normal.txt→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6512.txt

よろしくお願いします
471デフォルトの名無しさん:2008/05/11(日) 12:59:02
数列の最大値を計算するアルゴリズム 数列0,3,1,4,7,2,8

お願いします。
472デフォルトの名無しさん:2008/05/11(日) 13:03:31
>>471
スレ内検索くらいしろ>>1のテンプレに従え氏ね
>>403,>>404-405
473デフォルトの名無しさん:2008/05/11(日) 13:05:32
#include <stdio.h>
int main(void){puts("8");return 0;}
474デフォルトの名無しさん:2008/05/11(日) 13:57:04
>>452
aabcaaで誤動作。
475デフォルトの名無しさん:2008/05/11(日) 14:05:43
>>467
手元のファイル使って動作確認しました。概ね大丈夫なようです。
ありがとうございました、これを元に後は自分でやります( >ω<)
476デフォルトの名無しさん:2008/05/11(日) 15:17:56
>>321,469
「全行を一旦取り込んでから、アルファベットを含む行のうち上位25%の行で置換する」
ということのようなんで作り直してみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6516.txt

まだ違ってるようなら出力例を出しとくれ
477476:2008/05/11(日) 15:43:00
少々訂正。置換対象行最下位タイのカウント部分は
for(i--; i >= 0; i--, lep_num++) if(line_info[i].alpha_count < n) break;
に直して。比較対象が自身とも比較しちゃってた。
あと変数名 lep_num は rep_num (replace) の打ち間違い…。
478デフォルトの名無しさん:2008/05/11(日) 16:10:26
479デフォルトの名無しさん:2008/05/11(日) 16:21:52
>>478
ありがとうございます!
480476:2008/05/11(日) 16:37:13
連投で失礼。もう一ケ所修正を。
「置換する行数」と「最下位タイのカウント」のとこ(ソート後から/*** 1,2 ***/の前まで)は
if(alpha_line_total == 0) lep_num = 0;
else{
...
}
としてアルファベット行が0の時は実行しないようにしといて下さい。
481側近中の側近 ◆0351148456 :2008/05/11(日) 17:05:24
>>402
(っ´▽`)っ
int getMaxInt(int *a, int count)
{
  int *b;
  int max;
  b = (int *)malloc(sizeof(a[0]) * count);
  memcpy(b, a, sizeof(a[0]) * count);
  qsort(b, count, sizeof(b[0]), *cmpInt);
  max = b[count - 1];
  free(b);
  return max;
}

int cmpInt(const void *elem1, const void *elem2){
  return *(int *)elem1 - *(int *)elem2;
}
482657:2008/05/11(日) 18:07:29
[1] 授業単元:プログラミングT

[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6518.txt
[3] 環境
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語:C++
[4] 期限:
[5] その他の制限:問題文中に記載してあります。

   よろしくお願いしますm(__)m 。
483デフォルトの名無しさん:2008/05/11(日) 18:11:30
>>482
制限というか、作りかたがそのまま書いてあるな。

484デフォルトの名無しさん:2008/05/11(日) 18:18:38
>>483
あまり良い出題の仕方じゃないな。
ある部分だけがっちり固めて、中では自由にやれというのは。
意外に難しく初心者向けじゃなかったりする。(中上級者向け)

初学者向けの問題は、コードの一部の行を穴埋めさせて、
意味が通り、題意を満たすようにしろというような問題のほうが良い。
後ろに選択枝を提示しておくのは当然。
485482:2008/05/11(日) 18:31:22
すいません期限書き忘れてましたm(__)m

5月14日までにお願いします。
486デフォルトの名無しさん:2008/05/11(日) 18:45:50
>>482
空白部分のみ
if(!fgets(name, sizeof(name), stdin))
return 1;
do sscanf(name, "%s%n", tmp, &space_index); while(0);
name[strcspn(name, "\n")] = '\0';
memmove(name, name + space_index + 1, sizeof(name) - space_index - 1);
strcat(name, " ");
strcat(name, tmp);
487デフォルトの名無しさん:2008/05/11(日) 18:49:04
[1] 授業単元:プログラミング基礎演習
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6519.txt
[3] 環境
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:visualstudio6.0
 [3.3] 言語:C
[4] 期限:5/13
[5] その他の制限:問題文に記載があります

よろしくお願いします。
488デフォルトの名無しさん:2008/05/11(日) 18:53:55
>>342 これ難しいでしょうか?
489デフォルトの名無しさん:2008/05/11(日) 19:15:56
>>488
PCが出来るからと言って、貴方に3Dポリゴンを作って動かすことが出来ますか?
490デフォルトの名無しさん:2008/05/11(日) 19:19:15
>>487
#include<stdio.h>
void lneq(int a, int b, int p, int c, int d, int q) {
int D=a*d-b*c, D1=p*d-q*b, D2=a*q-c*p;
if(D)
printf("%.2f %.2f\n", (double)D1/D, (double)D2/D);
else {
if(!D1 && !D2) {
if(a || b || c || d)
puts("1");
else if(!p && !q)
puts("2");
else
puts("0");
}
else
puts("0");
}
}
int main() {
FILE *fp = fopen("data1.txt", "r");
int n, a, b, p, c, d, q;
if(!fp) return 1;
fscanf(fp, "%d", &n);
while(n--) {
fscanf(fp, "%d%d%d%d%d%d", &a, &b, &p, &c, &d, &q);
lneq(a, b, p, c, d, q);
}
fclose(fp);
return 0;
}
491482:2008/05/11(日) 19:26:50
>>486

実行結果確認しました。

ありがとうございます助かりましたm(__)m 。
492デフォルトの名無しさん:2008/05/11(日) 19:57:09
>>490
ありがとうございました。
493デフォルトの名無しさん:2008/05/11(日) 20:04:50
>>489 じゃあ上手く組めるような説明を考えてきます
494デフォルトの名無しさん:2008/05/11(日) 20:32:09
[1] 授業単元:プログラミング基礎演習
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6520.txt
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5/13

よろしくお願いします。
495デフォルトの名無しさん:2008/05/11(日) 20:47:44
>>342
// Havel-Hakimi
bool is_graphic(int d[], int n) {
  while (n > 0) {
    sort(d, d+n);
    int k = d[--n];
    if (k < 0 || k > n) 
      return false;
    for (int j = 0; j <= k; ++j)
      d[n - j]--;
  }
  return true;
}
496デフォルトの名無しさん:2008/05/11(日) 20:58:43
>>494
#include<stdio.h>
void show(const int a[][10])
{
int i, j;
for(i = 1; i <= 9; i ++) {
for(j = 1; j <= 9; j ++)
printf("%2d ", a[i][j]);
putchar('\n');
}
putchar('\n');
}
int main()
{
int a[10][10], i, j, w;
for(i = 1; i <= 9; i ++)
for(j = 1; j <= 9; j ++)
a[i][j] = i*j;
show(a);
for(i = 1; i < 10-i; i ++)
for(j = 1; j <= 9; j ++) {
w = a[i][j];
a[i][j] = a[10-i][j];
a[10-i][j] = w;
}
show(a);
}
497デフォルトの名無しさん:2008/05/11(日) 21:08:22
>>491
それだしたら怒られるぞw
498デフォルトの名無しさん:2008/05/11(日) 21:13:34
>>496
実行できました。ありがとう
499321 ◆3prheF9ilc :2008/05/11(日) 21:35:50
>>462
ありがとうございます。
サンプルデータにあってそうなほうを
参考にさせて頂きます。(両方とも参考になりそうですが)
500321 ◆3prheF9ilc :2008/05/11(日) 21:37:17
失礼しました。
>>476さんへのレスでした。
501デフォルトの名無しさん:2008/05/11(日) 22:53:03
1〜100まで数えるまでに、3の倍数と3がつく数字のときはアホに
5の倍数と5がつく数字はナルシストになるプログラムを作れ
502デフォルトの名無しさん:2008/05/11(日) 23:31:45
>>501
二番煎じ乙
503デフォルトの名無しさん:2008/05/11(日) 23:51:54
>>502
きっ、きさまっ!?ナニヤツ?
504デフォルトの名無しさん:2008/05/12(月) 00:30:18
世界のナベヤツ
505デフォルトの名無しさん:2008/05/12(月) 02:49:27
>>392
当方で確認した環境は cygwin/WindowsXP, 処理系はgcc3.4.4 です。
正弦波出力:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6521.txt
余弦波出力:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6522.txt
ガウスランダム信号出力1:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6523.txt
ガウスランダム信号出力2:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6524.txt
相互相関関数計算:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6525.txt
簡単なグラフ表示:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6526.txt
詳細はソースを読んでいただくとありがたいです。

>>501-504
せっかく質問スレではいい回答を出しているのに、ここでは自演ですか。
506デフォルトの名無しさん:2008/05/12(月) 10:23:05
2次元配列変数dataの中身を表示し、dataの値の分布を1次元配列histに入れ、実行例の様に、histの各値や、その値に応じて#を表示するプログラム作成せよ。
histの各値は0で初期化すること

実行例
data
3 6 0 4 3 2
5 2 9 8 1 3
1 3 4 1 3 1
6 8 6 4 3 3

hist
0 # 1
1 #### 4
2 ## 2
3 ####### 7
4 ### 3
5 # 1
6 ### 3
7 0
8 ## 2
9 # 1
507506の続き:2008/05/12(月) 10:25:42
int i, j;
int data[4][6]={
{ 3, 6, 0, 4, 3, 2 },
{ 5, 2, 9, 8, 1, 3 },
{ 1, 3, 4, 1, 3, 1 },
{ 6, 8, 6, 4, 3, 3 } };
int hist[10];

for( j = 0; ****** ; j++ ){
****** = 0;
}
printf("data\n");
for( ****** ; ****** ; j++ ){
for( ****** ; ****** ; i++ ){
printf("%2d", data[j][i]);
}
printf("\n");
}
for( j = 0; j < 4; j++ ){
for( i = 0; i < 6; i++ ){
******++;
}
}
printf("\nhist\n");
for( j = 0; j < 10; j++ ){
printf("%d ", j );
for( i = 0; ****** ; i++ ){
printf("#");
}
printf(" %d\n", ****** );

508デフォルトの名無しさん:2008/05/12(月) 10:37:33
「○○の続き」ってするくらいならうpろだ使えって
それ以前に>>1読んで書き直し
509デフォルトの名無しさん:2008/05/12(月) 10:45:50
int i, j;
int data[4][6]={
{ 3, 6, 0, 4, 3, 2 },
{ 5, 2, 9, 8, 1, 3 },
{ 1, 3, 4, 1, 3, 1 },
{ 6, 8, 6, 4, 3, 3 } };
int hist[10];

for( j = 0; j < 10; j++ ){
hist[j] = 0;
}
printf("data\n");
for( j = 0; j < 6; j++ ){
for( i = 0; i < 4; i++ ){
printf("%2d", data[j][i]);
}
printf("\n");
}
for( j = 0; j < 4; j++ ){
for( i = 0; i < 6; i++ ){
hist[data[i][j]]++;
}
}
printf("\nhist\n");
for( j = 0; j < 10; j++ ){
printf("%d ", j );
for( i = 0; i < hist[i]; i++ ){
printf("#");
}
printf(" %d\n", hist[i] );
}
510509ごめんミスった:2008/05/12(月) 10:53:26
int i, j;
int data[4][6]={
{ 3, 6, 0, 4, 3, 2 },
{ 5, 2, 9, 8, 1, 3 },
{ 1, 3, 4, 1, 3, 1 },
{ 6, 8, 6, 4, 3, 3 } };
int hist[10];

for( j = 0; j < 10; j++ ){
hist[j] = 0;
}
printf("data\n");
for( j = 0; j < 4; j++ ){
for( i = 0; i < 6; i++ ){
printf("%2d", data[j][i]);
}
printf("\n");
}
for( j = 0; j < 4; j++ ){
for( i = 0; i < 6; i++ ){
hist[data[j][i]]++;
}
}
printf("\nhist\n");
for( j = 0; j < 10; j++ ){
printf("%d ", j );
for( i = 0; i < hist[i]; i++ ){
printf("#");
}
printf(" %d\n", hist[i] );
}
511デフォルトの名無しさん:2008/05/12(月) 11:16:38
[1] 授業単元:プログラミング演習
[2] 問題文:凸多角形の辺から一番遠い点を見つけ、その距離を求めるプログラムを作れ。距離とは最も近い辺までの距離である。
入力データ
多角形の頂点数と、各頂点の座標が反時計回りの順で与えられる。
[3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5/13


512デフォルトの名無しさん:2008/05/12(月) 11:29:57
>>511
よく判らんな。「一番遠い点」とはなんだろ。
凸多角形内の、全ての辺から一番離れた点を求めると言うことなのかな? それだとかなり厄介そうだ。
多角形の頂点から求めるのでは意味が不明だし。
勿論、凸多角形外で求めようとしたら無限の彼方に発散するし。
点の集合が与えられるのなら何とでもなるのだけれどなぁ。
513デフォルトの名無しさん:2008/05/12(月) 11:37:55
一番近い辺までの距離を距離と定義します。その距離が多角形内で一番大きい点を探すという事です。
例えば正方形なら対角線の交点で、距離は一辺の長さの半分です
514デフォルトの名無しさん:2008/05/12(月) 11:51:23
これ数学寄りの問題だろ
公式か方針教えてくれ
515デフォルトの名無しさん:2008/05/12(月) 11:51:24
三角形なら内心ってことか?
516デフォルトの名無しさん:2008/05/12(月) 11:52:31
なんだ、多角形内か。最初にそれを書いてくれ。
で、そいつはどうやって見つければいい?
517デフォルトの名無しさん:2008/05/12(月) 11:56:45
それを考えるのも含めて問題なんでしょ。
一撃で出るような式は、おそらく存在しない。
518デフォルトの名無しさん:2008/05/12(月) 11:58:06
なるほど多角形に内接する円の半径が答えか
519512:2008/05/12(月) 12:00:33
式とかはないです。
アルゴリズムが思い浮かばなくて…
三角形なら内心ですね
520デフォルトの名無しさん:2008/05/12(月) 12:04:29
角の二等分線の交点から求めてけばできるだろうけど、面倒だな。
521デフォルトの名無しさん:2008/05/12(月) 12:08:18
凸であることをうまくつかえないかな?
反時計回りで与えられるみたいだし
522506:2008/05/12(月) 12:22:28
>>510
ありがとう!
523デフォルトの名無しさん:2008/05/12(月) 15:39:22
ちょっと考えても、長方形だと解が一つにならないし、
設問が間違ってそうだな。
524デフォルトの名無しさん:2008/05/12(月) 15:51:46
#include<stdio.h>
double f(double x)
{
double y;
y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2;
return (y);
}
main()
{
double x,y;
int i;
for(i=-20;i<=20;i++){
x=0.5*i;
y=f(x);
printf("x=%7.3f y=%12.3f\n",x,y);
}
} このプログラムのyの値の総和を計算するプログラムを作れ。
これをだれかお願いします。
525デフォルトの名無しさん:2008/05/12(月) 15:55:25
あ、距離だけでいいなら別に問題無いか。
526デフォルトの名無しさん:2008/05/12(月) 16:03:03
多角形を構成する辺の上にそれぞれ1個ずつ点を
取っり、その点を通り、辺と直交する直線が
多角形の内部で交わるという制約条件のもとで
それらの点と共通交点までの距離が最大なものを
見つけよという完全に応用数学の問題ですね。
数学的定式化を相当詰めないとCでコーディ
ングする段階には全然行かないと思いまつ
大規模連立方程式解いたりするのは、既存ライブラリの
助けも必要でしょうから、学校の宿題で出して良い
ような問題じゃありません。
527デフォルトの名無しさん:2008/05/12(月) 16:05:48
>>526
要するに逆行列を求めよってだけでしょ?
528デフォルトの名無しさん:2008/05/12(月) 16:31:21
多角形内の一番広い内角の二等分線上に解答となる点は存在するって事だけは分かるが
情けないことに数式が解けなくなってる orz
529523:2008/05/12(月) 16:38:32
× 一番広い
○ 一番狭い
530528=529:2008/05/12(月) 16:40:07
名前間違えた >>523 じゃなくて >>528
531デフォルトの名無しさん:2008/05/12(月) 16:44:19
多角形の内部の点pには、各辺までの距離を(垂線を下ろして長さを計る)決められる。
それらの距離の中で最も大きいものをd(p)と書く時d(p)が最大になるようなものはどこ?
という問題と解釈するしかなさそう。

厳密に解くのはメンドイから、適当に点を選んで実際に計算してみればいいと思う。
多角形の場合、相似変換で縮小しても問題の本質は変わらないから、紙に書いて実測する
のが一番早そう。もしかしたら、そういった点は無数にあって、曲線みたいな分布する
かも知れない(あくまでも推測)
コンピュータ向けの問題じゃないのかもしれない
532デフォルトの名無しさん:2008/05/12(月) 16:56:39
>>531
その問題解釈はおかしくない?
非対称な三角形(すんごく尖った
三角形)だと、ある頂点の近くに、
求めるような点があるのだろうけど、
最大値は内部には無い。
(限りなくその頂点と底辺の距離に近
いものが無数にある)

d(p)=各辺までの距離の和(平均)
だろな。やっぱり。な>>513
533デフォルトの名無しさん:2008/05/12(月) 16:56:43
それじゃダメじゃん
534524:2008/05/12(月) 17:00:48
だれか頭のいい人お願いします。
535デフォルトの名無しさん:2008/05/12(月) 17:03:40
>>524
#include<stdio.h>
double f(double x)
{
double y;
y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2;
return (y);
}
main()
{
double x,y,y_sum=0;
int i;
for(i=-20;i<=20;i++){
x=0.5*i;
y_sum+=y=f(x);
printf("x=%7.3f y=%12.3f\n",x,y);
}
printf("y_sum=%12.3f\n",y_sum);
}
536デフォルトの名無しさん:2008/05/12(月) 17:05:47
>>535は頭がいい人
537デフォルトの名無しさん:2008/05/12(月) 17:11:27
なんか問題出す前に日本語勉強しろって言いたくなるな。
538デフォルトの名無しさん:2008/05/12(月) 17:15:25
多角形内部での最大値を求めるんだよ?
539526:2008/05/12(月) 17:42:05
訂正:
辺と直交する→削除
それらの点と共通交点までの距離が最大になるようなものを

それらの点と共通交点までの距離の和が
広義極小になるような各辺の点の取り方の全体の
中で共通交点までの距離の和が最大になる
ような組み合わせを
540デフォルトの名無しさん:2008/05/12(月) 17:46:32
与えられた凸多角形の頂点で相互の距離が最大な2組を求めるプログラム
おねがいします。
多角形の頂点数と、各頂点の座標が反時計回りの順で与えられるとします。
541デフォルトの名無しさん:2008/05/12(月) 18:21:28
なんで問題が変わってるんだよw
542デフォルトの名無しさん:2008/05/12(月) 18:22:21
そっちは比較的簡単だな。
543デフォルトの名無しさん:2008/05/12(月) 18:44:16
ひたすら|x1-x2|+|y1-y2|を求めて最大のものを選べばいいから簡単だな
544デフォルトの名無しさん:2008/05/12(月) 19:00:11
パソコンからこの板みれる?
545デフォルトの名無しさん:2008/05/12(月) 19:00:19
|x1-x2|^2+|y1-y2|^2だろ
546511:2008/05/12(月) 19:06:23
>>541

540は自分じゃないです
547528=529:2008/05/12(月) 20:00:20
>>511
途中までやってみた
calc_cross_point // 2直線の交点を求める関数
calc_distance // 平行な2直線の距離を求める関数
の実装方法が分かれば解けるはず…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6530.c

数式関係ダメぽ
548デフォルトの名無しさん:2008/05/12(月) 20:07:52
【質問テンプレ】
[1] 授業単元:ニュートン法による非線形方程式
[2] 問題文(含コード&リンク):ニュートン法を使用して、次の非線形連立方程式の解の近似値をもとめよ
y+ax^2x-b=0
y^2+cx^2-d=0            a,b,c,dは入力値。
使用教科書のソースプログラム
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/book8.html
ガウス消去法
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap3/program31.c
LU分解
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap3/program33.c
ニュートン法
http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap4/program45.c
あんまり参考にならんです。

[3] 環境
 [3.1] OS: Windows
 [3.2] Visual Stadio 2005
 [3.3] 言語: C
[4] 期限: ([2008年5月16日0:00まで]
[5] C言語なら使用可。デルタxを求めるとき、逆行列を計算させてそのまま使用するのは不可。
きちんと収束させるプログラムを書くこと。
連立方程式はガウス消去法やLU分解を使うこと。初期値はなんでも可。繰り返し回数は何回でも。100回くらいかな?
よろしくお願いします。
549デフォルトの名無しさん:2008/05/12(月) 20:23:52
>>511
つ モンテカルロ法
550デフォルトの名無しさん:2008/05/12(月) 20:55:24
佐賀大学
551生ハム:2008/05/12(月) 21:27:32
前スレで課題をお願いした者です。
作ってくださった方々本当にありがとうございました。
文字列を変換する問題で、正確に実行できたプログラムもありましたが、
題意(ポインタで文字列を定義)を満たしてなかったみたいなので、
もう一度お願いしてもいいでしょうか。前スレが見れないので・・
552デフォルトの名無しさん:2008/05/12(月) 22:02:34
>>551
問題は覚えてるんだろ?
>>1のテンプレにそってもう一度もう一度書くべし
553デフォルトの名無しさん:2008/05/12(月) 22:05:13
[1] 授業単元:プログラミング演習
[2] 問題文:5個の整数型の値をキーボードからvector型の変数に読み込んで保存し、その保存された各データの合計を表示する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C++
[4] 期限:2008年5月14日まで
[5] その他の制限:なし

vectorの使い方がよくわからないのですみませんがよろしくお願いします。
554511:2008/05/12(月) 22:22:02
[1] 授業単元:プログラミング1
[2] 問題文:

int data[m]というm個のデータがある。
このm個のデータから3つ選ぶすべての組合せを求め、
その3つの数字の積を求めるプログラムを作れ。

例えば、m=5で

data[0]=1
data[1]=2
data[2]=3
data[3]=4
data[4]=5
というデータが与えられているとする。3つ選ぶ組合せは5C3=10通りである。
data[0] * data[1] * data[2] =6
data[0] * data[1] * data[3] =8




[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:2008年5月13日まで
[5] その他の制限:なし
555デフォルトの名無しさん:2008/05/12(月) 22:26:33
>>551
自分で書き換えることも出来ないならそんな単位捨てた方がいい
556デフォルトの名無しさん:2008/05/12(月) 22:28:38
>>554
そのmは事前に与えられた定数なの?
それとも標準入力なりからもらうことができる不定数なの?
557デフォルトの名無しさん:2008/05/12(月) 22:32:45
>>553
#include <iostream>
#include <vector>
int main(void)
{
std::vector<int> v;
for( int i = 0; i < 5; ++i )
{
int n;
std::cin >> n;
v.push_back( n );
}

int sum = 0;
for( std::vector<int>::iterator it = v.begin(); it != v.end(); ++it )
{
sum += *it;
}
std::cout << sum << std::endl;
return 0;
}
558デフォルトの名無しさん:2008/05/12(月) 22:36:04
>>557
ありがとうございました。
559デフォルトの名無しさん:2008/05/12(月) 22:47:02
>>554
for(i=0; i<m-2; i++)
for(j=i+1; j<m-1; j++)
for(k=j+1; k<m; k++)
printf("data[%d]*data[%d]*data[%d]=%d\n", i, j, k, data[i]*data[j]*data[k]);
560デフォルトの名無しさん:2008/05/12(月) 22:53:48
>>391って
#include <stdio.h>

#define gyou 5
#define retsu 5


main(){

int sort[gyou][retsu];
int tate[retsu];
int yoko[gyou];

int i,j;
FILE* fp;

for(j=0;j<tate;j++)
tate[j]=0;
fp=open("sort.txt","r");
for(i=0;i<gyou;i++)
{
for(j=0;j<retsu;j++)
fscanf(fp,"%d",&seiseki[i][j]);
}
fclose(fp);

return 0;
}
あとこれにどんなプログラムがたりないですかね?

561511:2008/05/12(月) 23:04:19
>>556
自分で入力して、その数だけ配列に自分でデータいれます
562生ハム:2008/05/12(月) 23:07:20
[1] 授業単元:プログラミング演習
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6531.txt
     この文章をファイルとして読み込み,正しい英文に復号しファイルに出力する
     プログラムを作成せよ(ファイル出力でも標準出力でもどちらでも構わない).
     ただし,プログラムでポインタを用いて文字列を定義し,既存の文字列操作関数
     (strxxx(),例えば,文字列長を返す関数 strlen(文字列))は使わずに,自分で作成すること.
     文字の変換規則:単語の文字数だけJISコード表で表現すると、下にさがっている。
     aはzへ、ofはqhへ、TheはWkhへ、という要領。数字・ピリオド・コンマはそのまま。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限: できるだけ早いと助かります(-o-;)

何度もすみません(><)以前の分は保存してますので、修正を試みましたが
中々うまくいきませんでした。ポインタを用いて文字列を定義に注意をお願いします。






563デフォルトの名無しさん:2008/05/12(月) 23:10:17
564デフォルトの名無しさん:2008/05/12(月) 23:12:21
>>511
解き方が力技だが一応できた
ただしソースはC#なのでCに変換する必要がある
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6532.zip

エレガントな解き方ってないのかな?
565デフォルトの名無しさん:2008/05/12(月) 23:34:09
[1] 授業単元:プログラミング演習
[2] 問題文:32bitのintの中でもっとも大きな,フィボナッチ数を求める関数を
作成しその数列がフィボナッチ数列の何番目にあたるのかを
同時に出力するプログラムを作成しなさい.

[3.1] OS:Windows
 [3.2] コンパイラ名:cygwin
 [3.3] 言語:C
[4] 期限:2008年5月14日まで
[5] その他の制限:再帰関数を習ったので、再帰関数を使用するははず。
        (特に問題文に指定はないが・・・)
よろしくおねがいします。

566デフォルトの名無しさん:2008/05/12(月) 23:38:45
フィボナッチで再帰は時間の無駄
567デフォルトの名無しさん:2008/05/12(月) 23:40:07
効率が悪いと分かっていても、再帰に関する内容なら
使うのが条件になっている課題もあるかと。
まぁ、使う場合と使わない場合の両方を作って結果を出してみりゃ
一目瞭然だが。
568デフォルトの名無しさん:2008/05/12(月) 23:47:27
「数列」がフィボナッチ数列の何番目にあたるのかってのがよく分からない。
569565:2008/05/12(月) 23:53:00
一応
「フィボナッチ数列を求める関数を,再帰関数として実現し,
その動作が確認できるプログラムとして作成しなさい.」
てのが前の課題なんですが、これはできました。
しかし>>565の課題のもっとも大きなフィボナッチ数を求める関数、
それが何番目にあたるのか?の作り方がわかりません・・・
570デフォルトの名無しさん:2008/05/13(火) 00:04:29
571デフォルトの名無しさん:2008/05/13(火) 00:05:59
>>566
×:フィボナッチで
○:末尾再帰最適化をしない実装の言語では
572デフォルトの名無しさん:2008/05/13(火) 00:09:47
フィボナッチ数求めるプログラムぐらいはさらっと書けるけど
32bitのintで表すことのできる数の範囲が分らない ('A`)
573デフォルトの名無しさん:2008/05/13(火) 00:10:54
>>565
再帰関数を使ったら時間がかかりすぎるので、使わない版。
#include<stdio.h>
int main() {
int n, fib = 1, a = 1, t;
for(n = 2; fib > 0; n ++) {
t = fib + a;
a = fib;
fib = t;
}
printf("%d番目の%d\n", n-1, a);
return 0;
}
574デフォルトの名無しさん:2008/05/13(火) 00:10:59
unsigned int と limits の UINT_MAX をうまく使うとか?
575デフォルトの名無しさん:2008/05/13(火) 00:17:01
unsigned long longなら94個求められる。
--
#include <stdio.h>
#include <stdbool.h>

static unsigned long long fib(unsigned n)
{
if (n == 0) return 0;
static unsigned long long a[94] = {0, 1, };
bool inRange = n < sizeof(a) / sizeof(* a);
if (inRange && a[n] != 0) return a[n];
// if (fib(n - 1) > INT64_MAX) return UINT64_MAX;
unsigned long long val = fib(n - 1) + fib(n - 2);
if (inRange) a[n] = val;
return val;
}

int main()
{
for (int n = 0; n <= 93; ++n) { // max fib with ulonglong
printf("%d:%llu\n", n, fib(n));
}
return 0;
}
576デフォルトの名無しさん:2008/05/13(火) 00:30:00
32bit 2^32 のintってのが前提
577デフォルトの名無しさん:2008/05/13(火) 00:40:13
578デフォルトの名無しさん:2008/05/13(火) 00:43:59
>>573
なんかずれてない?
46番じゃなく、45番の値がでるが

>>577
565じゃないが47番になったよ
579デフォルトの名無しさん:2008/05/13(火) 00:53:13
578だがかんちがいしてた>>573スマソ
580デフォルトの名無しさん:2008/05/13(火) 01:30:10
お願いします。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):3角形の3辺の長さ(実数a,b,cとする)をキーボードから入力して、
3辺の長さの和と面積を小数点以下2桁まで表示するプログラムを作成しなさい。面積の算出には、Heronの公式
http://ja.wikipedia.org/wiki/%E3%83%98%E3%83%AD%E3%83%B3%E3%81%AE%E5%85%AC%E5%BC%8F
を用いなさい。また、平方根の計算には標準の数学関数sqrt()を用いなさい。
[3] 環境
 [3.1] OS:大学の環境はLinux
 [3.2] コンパイラ名とバージョン:ちょっとわからないです
 [3.3] 言語:C
[4] 期限: ([2008年5月15日まで]
[5] その他の制限:まだ勉強はじめたばっかりで制限とかわからないです
581デフォルトの名無しさん:2008/05/13(火) 01:30:59
>>565 久々に再帰でフィボってみた。やっぱ最後の方は遅い・・・
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6535.c
582 ◆JfAwh5scpo :2008/05/13(火) 01:40:16
かなりわからないので皆様の力をお貸し下さい。
ちょっと問題が特殊なので要約してます。

[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):ある文章において、アルファベット順に、1文字の単語は1つだけ後ろにずらし、
2文字の単語は2つだけ後ろにずらす…といった法則性で文字を置換したアルファベットのみの文章ファイルがある。
この文章をファイルとして読み込み,正しい英文に復号しファイルに出力するプログラムを作成せよ
(ファイル出力でも標準出力でもどちらでも構わない)。ただし,プログラムでポインタを用いて文字列を定義し,
既存の文字列操作関数(strxxx(),例えば,文字列長を返す関数 strlen(文字列))は使わずに,自分で作成すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gccですが細かいバージョンまではわかりません。すみません。
 [3.3] 言語:C
[4] 期限:2008年5月19日午前9時まで。
[5] その他の制限:特に制限はありません。

何卒、よろしくお願いします。
583デフォルトの名無しさん:2008/05/13(火) 01:41:47
大分大学
584デフォルトの名無しさん:2008/05/13(火) 01:42:24
>>582
このスレの過去ログを読むと分かるよんw
585デフォルトの名無しさん:2008/05/13(火) 01:42:57
>>583
なっ、なんで分かった!?おぉ痛っ なんつって
586 ◆JfAwh5scpo :2008/05/13(火) 01:44:40
>>582
問題文で言われている法則性は、
単語「a」→「b」
単語「to」→「vq」
単語「the」→「Wkh」
という風に置換されているということです。わかりにくかったらすみません。
587 ◆JfAwh5scpo :2008/05/13(火) 01:47:34
>>584
あ、本当だw ありがとうございますw
588デフォルトの名無しさん:2008/05/13(火) 01:50:22
前スレにあったやつのほうがマシだと思うがな
589デフォルトの名無しさん:2008/05/13(火) 01:51:29
何を以てマシと判断したか?お答え下さい
590デフォルトの名無しさん:2008/05/13(火) 02:03:23
mystrlen
591デフォルトの名無しさん:2008/05/13(火) 02:12:57
>>580
#include <stdio.h>
#include <math.h>

int main(void)
{
double a,b,c,p,s;
printf("三辺の長さを入力\n");
scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c);
p = (a+b+c)/2;
printf("三辺の長さの和 %.2f\n",a+b+c);
printf("三角形の面積 %.2f\n",sqrt(p*(p-a)*(p-b)*(p-c)));

return 0;
}

こんなんじゃ、ダメ?
592デフォルトの名無しさん:2008/05/13(火) 02:18:22
>>551
> 題意(ポインタで文字列を定義)
ここがはっきりしない。
char *str="string"; みたいな使い方?って、文字数、変換する文字列が
一定じゃないからそんな使い方じゃないとは思うが・・・
593580:2008/05/13(火) 02:49:42
>>591

ありがとうございました。
594デフォルトの名無しさん:2008/05/13(火) 08:47:47
>>582
>>570のでいいん?
595524:2008/05/13(火) 09:31:03
遅くなりましたが535さんありがとうございました。
596デフォルトの名無しさん:2008/05/13(火) 11:05:18
[1] 授業単元:Graphics

[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6536.txt
このプログラムを参考にして、画像サイズ・中心位置・半径、色を入力して、円(周および内部)を指定色で描く
PPM画像作成プログラムをつくれ。
また以下の要件を満たすようにする事

画像サイズや円半径によって描画漏れのないようにする
中心位置が画像の範囲外にあるときは描画しない
ファイル名を指定可能にする

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5月14日
[5] その他の制限:特に制限はありません。

おねがいします
597デフォルトの名無しさん:2008/05/13(火) 14:11:20
>>596
関数形式は
円を角(中心座標x,中心座標y,半径,色);

(1)中心座標x,中心座標yが画像範囲に入ってるか
チェック。
(2)
すべての画像ピクセル(u,v)について(u,v)と(x,y)
のキョリが半径以下であれば色を(u,v)に対応する
ピクセルに付ける

これでいいと思う
598デフォルトの名無しさん:2008/05/13(火) 14:48:29 BE:771675438-2BP(0)
とても初歩的な問題ですが教えてください><

1.プログラムを書く
円の面積を計算するプログラムを作ってください。。
データとしては円の直径を入れることにします。
それをもとに円の面積を計算して表示します。
型宣言は倍精度実数型(double)にしてください。
入力促進メッセージを付けてください。

2.実行
データ(直径)として
 20000を入れた場合
 0.1を入れた場合
 −1を入れた場合
の結果を報告してください。
599デフォルトの名無しさん:2008/05/13(火) 14:50:30 BE:450144427-2BP(0)
もう1問だけあります><

【1】二つの整数m、nを読みこみ、
  和 m+n
  差 m−n
  積 m×n
を求めて表示するプログラムを作ってください。
その際、入力促進メッセージを付けてください。

【2】二つの整数m、nを読みこみ、
  整商 m÷n(注)
  剰余 mをnで割った余り
を求めて表示するプログラムを作ってください。

【3】上記1、2のプログラムで、n=0の場合、
どのような結果になるかを調べてください。

600デフォルトの名無しさん:2008/05/13(火) 15:04:03
>>598
#include <iostream>

int main(void)
{
double r;
cout << "円の直径を入力: " ; cin >> r;
if(r <=0) { cout << "Error !" << endl; return 0; }
cout << "円の面積: "; cout << (r*r)/4 ; cout << "π" << endl;
return 0;
}
601デフォルトの名無しさん:2008/05/13(火) 16:05:33
[1] C++
[2] キーボードから整数を1つ入力し,
100の位以下を切り捨てて,
画面に出力するプログラムを作成しなさい。
[3] 環境
 [3.1] Windows
 [3.2] gcc
 [3.3] C++
[4] 期限: 2008年5月20日
[5] その他の制限: 無し。
最近C++習い始めたばかりでよくわかりません・・・。
お願いします!
602デフォルトの名無しさん:2008/05/13(火) 16:24:18
#include <iostream>
int main()
{
int n;

std::cin >> n;
n -= n % 1000;
std::cout << n;
}
603デフォルトの名無しさん:2008/05/13(火) 17:41:04
障害物と広い空間がある経路探索のプログラム知りたい
C言語で
604デフォルトの名無しさん:2008/05/13(火) 21:38:34
>>601
#include<iostream>
using namespace std;

int main()
{
int number;
cout << "整数入力:" << ends;
cin >> number;

//エラー処理を入れるならここへ
//マイナスチェックが必要だとか
//お好きなようにどうぞ

cout << "100以下切り捨て:" << number / 1000 * 1000 << endl;

return( 0 );
}
605デフォルトの名無しさん:2008/05/13(火) 21:44:44
>>603
エースターでググれ
606528=529:2008/05/13(火) 21:51:20
>>528>>529>>547
間違ってます
607511:2008/05/13(火) 21:54:05
自分でもいろいろやってみましたが・・・
できませんね。諦めるかもしれませんoTL
608デフォルトの名無しさん:2008/05/13(火) 22:05:42
>>607
紙とペンが必要そうだからあんまり実装する気はおきないけど、
多角形を内側に潰してけば解けるはず。

与えられた多角形 P のすべての辺を内側に一定量 d だけ
スライドすることを考える。このとき、ある程度スライドすると
どこかの辺が一点に潰れる、ということが起こる。

そのような量だけスライドさせて辺を潰す、という操作を繰り返すと
最終的には一点になるので、それが目的の点。
609デフォルトの名無しさん:2008/05/13(火) 22:13:26
2辺の最も近い距離のうちで最大のものを見つけるって事?
610デフォルトの名無しさん:2008/05/13(火) 22:17:30
>>600
数字を入れて実行するとエラーになってしまいました



611デフォルトの名無しさん:2008/05/13(火) 22:28:59
重心から一番遠い点を基点にして
そこから各点の距離を求めるってのは駄目?
612611:2008/05/13(火) 22:31:08
あ、問題文の解釈間違ってた…ゴメン
613デフォルトの名無しさん:2008/05/13(火) 22:33:18
>>610
名前空間ないけどコンパイル通ったの?
614デフォルトの名無しさん:2008/05/13(火) 22:40:42
>>609
多角形の内部の点で最も近い辺までの距離の最大をもとめるんだろ?
615デフォルトの名無しさん:2008/05/13(火) 22:46:05
>>614
そのようです。多角形の内接円の半径を求める問題みたいです。
616デフォルトの名無しさん:2008/05/13(火) 22:46:42
>>614
凸体で、その条件なら、各辺の垂線と点が交わるのが最小だろう。
617デフォルトの名無しさん:2008/05/13(火) 22:49:19
>>616
問題勘違いしてね?
618デフォルトの名無しさん:2008/05/13(火) 23:00:34
>>615
各頂点の2辺のなす角の半分の位置に中心があるのでは
619デフォルトの名無しさん:2008/05/13(火) 23:05:38
>>618
大前相当な馬鹿だろ。
620デフォルトの名無しさん:2008/05/13(火) 23:08:14
>>619
おまえがアホだろ 角の2等分線以外に円の中心は来ない
円の中心が決まれば、そこから一つの辺に接するために半径が決定される。
2等分線上に無ければ、別の辺に接することが出来なくなる。
621デフォルトの名無しさん:2008/05/13(火) 23:09:17
正多角形なら楽なのに
622デフォルトの名無しさん:2008/05/13(火) 23:10:07
>>618
四角形の四隅をほんのちょっとだけ落とした八角形は大丈夫?
623デフォルトの名無しさん:2008/05/13(火) 23:11:12
>>620
そうなるのは、三角形と正多角形だけだ。アホ
624デフォルトの名無しさん:2008/05/13(火) 23:12:18
これって内接円を求める事が出来ない凸体もあるよなあ。
多角形に埋め込める最大の円と拡張して良いか?
625デフォルトの名無しさん:2008/05/13(火) 23:13:56
>>623
そうとは限らない。 
最低でも角の2等分線上に無ければ、内接円が描けない為。
必要条件として必須。 
626デフォルトの名無しさん:2008/05/13(火) 23:14:01
>>624
拡張というか、そういう意味だろ。
627デフォルトの名無しさん:2008/05/13(火) 23:14:36
>>625
勝手に問題に制限もうけちゃまずいだろ。
628デフォルトの名無しさん:2008/05/13(火) 23:15:29
>>624
凸体内部の点で一番辺から遠い点をさがして、その距離を求める問題だよ?

629デフォルトの名無しさん:2008/05/13(火) 23:17:24
>>628
その結果として、多角形に入る最大の円の半径となるけど。
630デフォルトの名無しさん:2008/05/13(火) 23:19:45
今こそ数学板の力を扇ぐ時か
631デフォルトの名無しさん:2008/05/13(火) 23:20:48
>>608みたいに
数値解析的に解く方法しか考え付かないな。
632デフォルトの名無しさん:2008/05/13(火) 23:23:40
隣り合う2辺に接する場合は、位置と半径は直ぐに求まるので、そうでないとする、
633632:2008/05/13(火) 23:25:21
例えば、横長の長方形などが、隣り合う2辺に接しない場合。
634デフォルトの名無しさん:2008/05/13(火) 23:28:46
いっそのこと解無しにして逃げちゃうとか
635デフォルトの名無しさん:2008/05/13(火) 23:30:20
実は、「図形は正多角形とする」というのが抜けてたりして。
636デフォルトの名無しさん:2008/05/13(火) 23:31:27
図形描画のソフトを作っていて、「デバイスコンテキストの取得」

って言うのを勉強しているのですが、

hdc=CreateGraphics()->GetHdc();

これの意味ってどういうことなんでしょうか?

これ一文では答えようがないのでしょうか・・・・

よろしくお願いします。
637デフォルトの名無しさん:2008/05/13(火) 23:32:22
それじゃ単に「中心点」を計算しろだな・・・
638デフォルトの名無しさん:2008/05/13(火) 23:33:17
方針としては、隣り合う2辺に接するものとして中心と半径を求め、それが凸体の内部におさまるか
チェックして最大値を求める。次に向かい合う2辺でその最大値を超える場合のものを抽出して
最大値まで徐々に半径を小さくしていき、円が描けるかチェックすればよい。
639デフォルトの名無しさん:2008/05/13(火) 23:34:04
凸多角形の内角の二等分線の交点によって新たに凸多角形を作る操作をFとし、n回操作をF(n)とする
任意の凸多角形に対してある自然数nが存在してF(n)後にできる点が全ての辺から
最も遠い距離にある点となるか否か
640デフォルトの名無しさん:2008/05/13(火) 23:35:33
>>564
きれいにスルーされてて悲しいんだが・・・
解き方はこれでいいんでないの?
641デフォルトの名無しさん:2008/05/13(火) 23:36:05
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):3目並べ(○×ゲーム)
 2人のプレイヤーで操作する3目ならべを作る。
 3行3列の配列内の座標を入力して○、×をどこに置くか指定する
 既に打たれた場所なら再度入力する。
 ○と×を置くたびに3個並んだかを調べる。
 縦、横、斜めのいずれかに先に3個並んだほうが勝ちとして結果を出力する。
[3] 環境
 [3.1] OS: Windows 
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語:C
[4] 期限: 2008年5月16日17:00
[5] その他の制限:特にありません

よろしくお願いします。
642デフォルトの名無しさん:2008/05/13(火) 23:39:15
>>639
643デフォルトの名無しさん:2008/05/13(火) 23:40:23
>>636
エスパーして答えると、

グラフィックスオブジェクトを作り、そのオブジェクトに結び付けられた、
デバイスコンテキストのハンドルを取得して、変数hdcに入れる。
644デフォルトの名無しさん:2008/05/13(火) 23:41:54
>>639
内接円に影響して来ないような辺もあるから、全ての2等分線を考えても駄目だろう。
645デフォルトの名無しさん:2008/05/13(火) 23:52:13
>>640
そりゃまあ十分細かくメッシュを切れば正しいが、
元の図形の大きさも、出力精度も何も言われてないよね。

出力精度が書かれてないのは問題不備なので、
これで満足しててもいいけど。
646デフォルトの名無しさん:2008/05/14(水) 00:08:36
>>640
欲をいえば、点ごとに中か外か判断するんじゃなくて、
ソリッド・スキャン・コンバージョン使って多角形の形で走査して欲しいなw
647デフォルトの名無しさん:2008/05/14(水) 00:10:14
>>641
9マス全部○か×で埋まったらどうすんの?
それとも○も×も3つずつしか置けないの?
その場合4つ目を置いたらどうなるの?
648デフォルトの名無しさん:2008/05/14(水) 00:17:50
3目並べのルールしらないの?
649デフォルトの名無しさん:2008/05/14(水) 00:19:22
>>511
多角形の各辺を内側に平行移動して相似の小多角形を作る。
そのとき、時計回りになる辺は除去する。
これを2本か3本になるまで繰り返していけば、いいんじゃね?

自信ないけど...
650デフォルトの名無しさん:2008/05/14(水) 00:20:16
五目〜という料理が好きです
651デフォルトの名無しさん:2008/05/14(水) 00:36:02
オマンコなめたいときはどうすりゃいいのか
652デフォルトの名無しさん:2008/05/14(水) 00:40:07
>>647
641です。
○と×交互においていきます。
3つ並んだ時点で終わり、
並んでない場合9マス埋まるまで
○と×を交互に置き続けます。

説明不足ですいません。
653デフォルトの名無しさん:2008/05/14(水) 00:44:19
あ、判ったかも。

辺を内部へ平行に動かして、消失するまでの距離は頂点の内角から計算可能。
一番短い距離の辺を除いて、その距離で次の図形を作る。

で、再帰的に小さくしていって、一本の線か点になった時が、
辺から一番遠い位置。
654デフォルトの名無しさん:2008/05/14(水) 00:56:27
655デフォルトの名無しさん:2008/05/14(水) 01:23:39
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):Hit and Blowゲームで遊べるプログラムを作ること。ルールは以下の通り。
Hit and Blowは、相手が考えた4桁の数字をヒントを元に推測するゲームである。まず、相手は0-9の数字からなる4桁の数字を考える。但し、
・0で始まってもよい。
・同じ数字を2度以上使ってはいけない。
という条件。これに対して、こちらはなるべく少ない回数の質問で相手の考えた数字を当てることが目的。
一回の質問は、好きな4桁の数字を言い、それに対して、
・考えた数字と位置も値も一致している桁の数(Hit)
・位置は違うがその数字は含まれているような桁の数(Blow)
を答えてもらうことにより行われる。例えば、4257を考えている時に0274を言われたら、
・0は4257に含まれていない
・2は値も桁も一致している(Hit)
・7は4257に含まれているが、位置が違う(Blow)
・4は4257に含まれているが、位置が違う(Blow)
なので、1Hit2Blowと言う。
最終的に4Hit0Blowと言わせたらゲームは終了。

実際にはコンピュータが乱数で数字を考え、人間が質問してその数字を当てるようなプログラムを作成して欲しいのです。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gccバージョン不明
 [3.3] 言語:C
[4] 期限: ([2008年5月23日まで] または [無期限]
[5] その他の制限:まだC言語の勉強始めたばっかりです
656デフォルトの名無しさん:2008/05/14(水) 01:40:14
最も遠い点が「唯一ある」としている前提を疑うべき
657デフォルトの名無しさん:2008/05/14(水) 01:54:03
>>656
>525
距離のみを求めるんなら良いんじゃね?
658デフォルトの名無しさん:2008/05/14(水) 01:54:48
与えられた点が(0,0)(3,0)(3,2)(0,2)のとき答えはy=1(1<=x<=2)上になるよな
659デフォルトの名無しさん:2008/05/14(水) 02:01:31
660デフォルトの名無しさん:2008/05/14(水) 02:12:26
正解作成がひどいw
661デフォルトの名無しさん:2008/05/14(水) 02:17:10
重複チェックなんてしてないで、0 - 9 までの数列をランダムに並び替えて
先頭の4つをとるとか他に手段は選べるでしょうに
662デフォルトの名無しさん:2008/05/14(水) 02:17:37
すいません、場違いかもしれませんが、
グラフィックスオブジェクト
とは何でしょうか^^;
663デフォルトの名無しさん:2008/05/14(水) 02:25:33
グラフィックスのオブジェクトです
664デフォルトの名無しさん:2008/05/14(水) 02:55:33
665664:2008/05/14(水) 03:21:03
>>511
>>664だと計算途中で 0 除算する問題があったので一部修正
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6542.c
666デフォルトの名無しさん:2008/05/14(水) 04:13:12
感心しないな
667デフォルトの名無しさん:2008/05/14(水) 05:39:53
>>548
確認願います。
> y+ax^2x-b=0
> y^2+cx^2-d=0
第1式 第2項 を正確に教えてください。
a * x^(2*x)
でしょうか。
668デフォルトの名無しさん:2008/05/14(水) 06:55:46
初心者なんですが、お願いします

[1] 授業単元:プログラミング
[2] 問題文
演算子(+,−,*)と3,5,7の3個の数字とを組合わせた式をつくり、その式と計算結果のパターンを
出力するプログラムを作成しなさい。
出力例
3+5+7=15
5*7-3=32
7+5*3=22
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C言語
[4] 期限:5/16
[5] その他の制限: 特になし
669デフォルトの名無しさん:2008/05/14(水) 07:31:01
口だけの>>660-661の代わりにコードにした。
/* 正解を作成 */
void make_answer(char ans[])
{
char a[10];
int i, j;
for(i = 0; i < 10; i ++)
a[i] = '0' + i;
for(i = 0; i < DIGIT_NUM; i ++) {
j = i + rand() % (10 - i);
ans[i] = a[j];
a[j] = a[i];
}
}
まあ、どうせ入力の重複チェックしてるんだから、
そいつを流用してる元のコードで十分と思うが。
670デフォルトの名無しさん:2008/05/14(水) 07:32:52
>>669
> 口だけの
いちいちうぜぇ。連番を並び替えるソースなんてとっくの昔に
このスレの過去ログでも出てんだよ。最近新入りの餓鬼がでけぇ面して
クソースを書きやがるから笑えるw
671デフォルトの名無しさん:2008/05/14(水) 07:37:38
おじいちゃん、布団はあっちですよ
672655:2008/05/14(水) 07:40:21
>>659
ありがとうございました。
673デフォルトの名無しさん:2008/05/14(水) 08:10:14
>>669
一文字ずつチェックするならまだしも、4つ入れてからチェックする元のコードで十分とか
ありえねーよw
674デフォルトの名無しさん:2008/05/14(水) 08:22:55
>>673
はいはい口だけ。
675デフォルトの名無しさん:2008/05/14(水) 08:33:26
変種問題、つまり数字の重複を許した場合とかのHit And Blowの拡張とか
に対応していないという側面からみると珠玉のコードとは言えないな
Hit,Blowの解釈が変わったらどうするんだ?
676664:2008/05/14(水) 10:42:39
>>665
if(edge[i].length>0.0) edge[i]=edge[j++];

if(edge[i].length>0.0) edge[j++]=edge[i];
677デフォルトの名無しさん:2008/05/14(水) 11:15:19
まともにテストしたとは思えないような修正だな
678664:2008/05/14(水) 12:14:49
アルゴリズムは>>608>>653の内容

>>677
察しの通りまともなテストはしていない
679641:2008/05/14(水) 14:44:02
>>654
ありがとうございました。
680デフォルトの名無しさん:2008/05/14(水) 14:58:08
[1] 授業単元:ネットワークプログラミング
[2] 問題文(含コード&リンク):『It works』と返すWeb Sserverを作成せよ
1.『It works』をクライアントに返す
2.システムが不調でも大丈夫
3.無茶な通信データがきても大丈夫
4.『行儀よく』と停止する
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 5月16日
[5] その他の制限: 特になし

お願いします。
681デフォルトの名無しさん:2008/05/14(水) 15:36:50
[1] 授業単元: 情報処理演習
[2] 問題文(含コード&リンク):n人分(実行は4名程度でよい)の
学生番号、氏名、国語、数学、英語の成績をキーボートから入力して、
@科目ごとの平均点、最高得点者の学生番号、氏名
A全教科合計の平均点、最高得点者の学生番号、氏名
を出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS Windows 
 [3.2] コンパイラ名とバージョン:わかりません。
 [3.3] 言語:C言語
[4] 期限:5月15日午後5時まで
[5] その他の制限:構造体を使用して作成してください。

よろしくお願いします。
682デフォルトの名無しさん:2008/05/14(水) 15:44:36
[1] 授業単元:プログラミング基礎U
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6543.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C++
[4] 期限:2008年5月16日
[5] その他の制限:文字列処理関数の使用

よろしくお願いします.
683デフォルトの名無しさん:2008/05/14(水) 15:44:38
こんな所でしか優越感に浸れない奴ってなんなの?
シヌの?

口だけなら誰でも言えるから消えろ
後他人のソースにちゃちゃ入れる奴も消えろ
684デフォルトの名無しさん:2008/05/14(水) 16:10:09
口だけ乙
685デフォルトの名無しさん:2008/05/14(水) 16:31:58
全くのC言語初心者なんですが
プログラムファイルはどこに書いていけば良いのですか?
686デフォルトの名無しさん:2008/05/14(水) 16:54:34
>>685
どこでも良いよ、専用のフォルダ作って入れとけ。
687デフォルトの名無しさん:2008/05/14(水) 17:27:52
>>683
お前のとこにはコードレビューする文化はないのか?
688デフォルトの名無しさん:2008/05/14(水) 17:32:32
自分の利害と無関係なのになんでわざわざコードレビューしないといけないんだw
689デフォルトの名無しさん:2008/05/14(水) 17:59:13
したいヤツがするのは勝手だろw
690提案:2008/05/14(水) 17:59:16
回答者へ
アップまたはレスするコードのクォリティも同時に書いてね
【クォリティ】 推測|指針|コンパイル済|テスト済|検証済|清書済
推測:こうやったら出来るんじゃないかという無責任な方針の推測
指針:こうやって出来なかったら責任取れるよというレベルの説明
コンパイル済:コンパイル可能なコードを保有
テスト済:動作も確認した。
検証済:本質的に異なる別のやり方での結果と事前に分かっている回答と一致を確認
清書済:模範解答の自信あり(普通こういう回答をしないとは思うが)
※清書済でないコードの書式やフロー構成にケチを付けるのは慎みましょう
691デフォルトの名無しさん:2008/05/14(水) 18:02:25
どうでもいい
692690:2008/05/14(水) 18:05:29
訂正
>検証済:本質的に異なる別のやり方での結果と事前に分かっている回答と一致を確認
本質的に異なる別のやり方での結果や事前に分かっている回答と一致を確認
693デフォルトの名無しさん:2008/05/14(水) 18:06:05
>>690
無意味な提案だな。
解答側がそこまでする義理もない上、ケチつけるヤツはどうあってもつけるし。
ケチつけられたくなかったら人目につくところにコード晒すなよ。
694デフォルトの名無しさん:2008/05/14(水) 18:10:33
>>683
出来について(汚いなど)はまあどうでもいいが、
誤動作するのを放っておくのは誰のためにもならないかと。
695デフォルトの名無しさん:2008/05/14(水) 18:18:04
>>693
回答者の独り言?
696デフォルトの名無しさん:2008/05/14(水) 18:29:34
自分がケチつけられるのはどうでもいいが

スレ内にケチつけるレスがあったら無駄だし消えてくれってのは皆が思ってる
697デフォルトの名無しさん:2008/05/14(水) 18:43:22
>>685
メモ帳


ってことじゃないかと思う>>686
698デフォルトの名無しさん:2008/05/14(水) 18:51:24
宿題丸投げなのに、協力者の責任だけは追及するのな
出来ないのは怠けてた自分の責任だろうに
699デフォルトの名無しさん:2008/05/14(水) 19:02:31
コード出さずにダメ出しじゃ、構って君と区別がつかない。
看過できないならコード貼れって事でOK。
700デフォルトの名無しさん:2008/05/14(水) 19:04:16
>>1
> あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
> 気に入らない質問やその他や発言はスルーの方向で。
701デフォルトの名無しさん:2008/05/14(水) 19:10:48
>>698 
センスもあるよ
自分のプログラムセンスの皆無さには本当に困ってる
でも責任追及はしないな

てか、このスレって悪化させるとまさにIT業界みたいだよな
IT無知な依頼主と必死に頑張って評価されない下請けの関係・・・
702デフォルトの名無しさん:2008/05/14(水) 20:19:28
ネタコード投げる俺としては、茶々入れがないと寂しいんだが。
703デフォルトの名無しさん:2008/05/14(水) 20:56:13
にしても、乱数発生でそれ以前に重複があるかを調べるやり方は
効率が悪いのは分かりきっていること。数が少ないと分かり辛いけど
増やせばその効率の悪さに気づく。だから口先とか煽る前に
理解する頭を持っていれば、あんなソースをこのスレに残る
形式で書き込まずに済んだだろうに。言われてそれが実装できないなら
回答者として出すぎた真似はせぬ方が良いよ。無知だと恥さらしするだけだろ。
704デフォルトの名無しさん:2008/05/14(水) 20:59:31
>>703
実用範囲で問題が無いんだから気にするなよ
705デフォルトの名無しさん:2008/05/14(水) 21:04:46
>>690
クオリティに「ネタ」も入れて

ネタ:提出物や不特定多数に使わせる予定のコードには入れるべきじゃないコード
706デフォルトの名無しさん:2008/05/14(水) 21:24:43
>>703
Cだからといって、清書レベルのコードでも無い限り、目に付くコードはすべて
効率面で最適化しなければならないって発想はもうしなくていいよ。
すべきときはして、しないときはしないのが吉。
他の視点からの最適化要素もどんどん取り入れてるのが今日のCプログラミ
ング世界です。
707デフォルトの名無しさん:2008/05/14(水) 21:25:05
string型のkが全角空白" "と等しいことを表すには?
708デフォルトの名無しさん:2008/05/14(水) 21:27:05
>>669 以来、必死に口だけとほざく、自分も口だけになっていることに気づかない
粘着になったとさ。
709デフォルトの名無しさん:2008/05/14(水) 21:27:52
エスパーが現れた!
710デフォルトの名無しさん:2008/05/14(水) 21:43:34
>>707
wstring使う。stringならwstringに変換して比較する。
711デフォルトの名無しさん:2008/05/14(水) 21:46:07
麻呂のクソースはうpロダにうpするでおじゃるよ
712デフォルトの名無しさん:2008/05/14(水) 21:53:10
コンパイルするとき

ドライブCのボリュームラベルがありません
ボリュームシリアル番号 〜〜〜 です

と出てきますがどうすればいいのでしょうか?
713デフォルトの名無しさん:2008/05/14(水) 22:03:53
[1] 授業単元: よくわかりません
[2] 問題文(含コード&リンク):(正整数nを入力させ、0度から90度までn度まで刻みでsin,cosの数表を書くプログラムで、30度おきに横線を出力するものを作れ。
ただし、30がnで割り切れない場合は、適当なメッセージだけを出力して終わるようにせよ。
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1
 [3.3] 言語: C
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, n; /* i = 角度 n = 角度 */
double s; /* 角度をラジアンに直したものを入れる */
printf("n = ?");
scanf("%d" , n);
i = 0;
while(i <= 90){
s = i * M_PI / 180;
printf("sin%d° %f cos%d° %f\n" , i, sin(s), i, cos(s));
if(i == 30 || i == 60){
printf("---------------------------------\n");
}
else{
printf("30°で割り切れない。\n");
}
i = i + n;
}
return 0;
}
ループせず、0°のときの数表しか出てきません。
アドバイスをいただけないでしょうか?
714デフォルトの名無しさん:2008/05/14(水) 22:15:56
環境 Linux C言語

etherealでパケット解析しプロトコルヘッダの情報を表示するプログラムどうしたらよいですか?

715デフォルトの名無しさん:2008/05/14(水) 22:18:06
[1] 授業単元:C言語による数値入門
[2] 問題文:https://cid-39cc2dc444c6edfe.skydrive.live.com/self.aspx/%e6%96%87%e6%9b%b8/prog_lang_20080508.pdf
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限:5/16 0:00
[5] その他の制限:連立方程式はガウス消去法を用いること
716デフォルトの名無しさん:2008/05/14(水) 22:18:51
>>667
>>715
に問題文再掲載しました お願いします
717デフォルトの名無しさん:2008/05/14(水) 22:21:49
>>713
nに入力値が入っていない。
scanfにはnのアドレスを渡すこと。
718デフォルトの名無しさん:2008/05/14(水) 22:35:06
[1] 授業単元:プログラミング演習
[2] 問題文: 4つの文字列"ABCDEFG","HIJKLMN","OPQRST","UVWXYZ"
を別々に宣言しこれらをstrcat関数を用いてスペース区切りで連結し、
その文字列の長さをstrlen関数で求めるプログラムを作成しなさい。
実行結果には文字列と文字列長を出力すること
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:5/19

よろしくお願いします。
719デフォルトの名無しさん:2008/05/14(水) 22:43:54
>>682
当方で確認した環境は cygwin/WindowsXP, 処理系は gcc 3.4.4 + mingw です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6546.txt
漢字コードは古いShift-JIS を仮定しています。もし、日本語が化けるようでしたらあらためてお知らせ下さい。

>>690
>※清書済でないコードの書式やフロー構成にケチを付けるのは慎みましょう

個人的には、容赦なく批判していただければとてもうれしいです。
早書きなので、まずいところがある可能性が高いのは重々承知しています。

>>711
なんか書きましょうよ。
720667:2008/05/14(水) 22:54:36
>>715
>>716
すみません。>>1 の http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm にアップロードしていただけないでしょうか。
721デフォルトの名無しさん:2008/05/14(水) 22:55:27
>>719
なぬっ?麻呂のクソースを見たいとな?ならば見せて進ぜよう、今すぐに

>>718
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6547.c

strcatなんて邪道なことはせずにstrncatにしちゃったにゃん
722デフォルトの名無しさん:2008/05/14(水) 23:36:45
麻呂のクソースにもっと 突っ込んで突っ込んで by姫(ry
723デフォルトの名無しさん:2008/05/14(水) 23:45:51
>>720
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6548.zip
問題文がPDFなのでZIPにしてあります、めんどくさいですが・・
おねがいします。
724デフォルトの名無しさん:2008/05/14(水) 23:46:25
strcatって指定があったら素直にそれ使えよ
725デフォルトの名無しさん:2008/05/14(水) 23:51:10
>>724
そんな欠陥を残すのは嫌でおじゃる
726デフォルトの名無しさん:2008/05/15(木) 00:02:45
>>713
それだとiが30で割り切れないときにメッセージを出力してる
30がnで割り切れないときメッセージを出力して終了が問題の指示

#include <stdio.h>
#include <math.h>
int main(void)
{
int i, n; /* i = 角度 n = 角度 */
double s; /* 角度をラジアンに直したものを入れる */
printf("n = ?");
scanf("%d" , &n);
if(n < 1 || 30 % n) {
printf("nの値は30の約数であるべき\n");
return 0;
}
for(i=0; i<=90; i+=n) {
s = i * M_PI / 180;
printf("sin%2d° %f cos%2d° %f\n" , i, sin(s), i, cos(s));
if(i == 30 || i == 60) printf("---------------------------------\n");
}
return 0;
}
727デフォルトの名無しさん:2008/05/15(木) 00:11:05
>>725
仕様を満たしていないことの方が欠陥じゃないのか?
ってかstrcatを嫌うの理由は脆弱性だろ?ライブラリに欠陥があるのか?

スレチだが突っ込まずにはいられなかった・・・orz
728デフォルトの名無しさん:2008/05/15(木) 00:12:08
>>727
嫌なら不要な部分を消すでおじゃるよ
729デフォルトの名無しさん:2008/05/15(木) 00:16:24
730デフォルトの名無しさん:2008/05/15(木) 00:16:27
731デフォルトの名無しさん:2008/05/15(木) 00:19:04
それで別々に宣言したといえるのか?
732デフォルトの名無しさん:2008/05/15(木) 00:19:07
なんだかよく分からないけど、差し入れ置いていきますね。
     _
     /〜ヽ プリンデチ
    (。・-・)
     ゚し-J゚
733デフォルトの名無しさん:2008/05/15(木) 00:19:14
http://ja.wikipedia.org/wiki/Strcat
> バッファオーバーラン
> strcatは、先程示した実装例を見ても分かる通り、
> s1の容量に就いては一切関知しない。よって、s1の指す配列の範囲を越えて、
> s2が書き込まれてしまう恐れがある。これによって、メモリ破壊を引き起こしたり、
> プログラムがクラッシュしてしまうことがある。
734デフォルトの名無しさん:2008/05/15(木) 00:27:58
718の場合追加する文字列は固定なんだから十分な容量を持たせておけばstrcatでも問題ないだろ
735デフォルトの名無しさん:2008/05/15(木) 00:38:59
なんか、また口先だけの香具師らが・・・おまいらまとめて
口先マーケットって命名しちゃうぞ?ラララライって
736デフォルトの名無しさん:2008/05/15(木) 00:44:58
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
2以上の1つの整数を読込み、フィボナッチ数列の各項で、入力された値未満のものを
1項目から順に出力するプログラムを作成しなさい。(整数が入力されない場合は想定する必要はない)
各整数の後に1文字スペースを開けて出力し,最後の数とスペースを出力したら改行すること。
読み込む数は,"Choose an integer: "の文字列のあとに入力するようにすること。2より小さい整数が入力された場合、再度入力を促すようにする。
プログラム実行例
Choose an integer: 1
Choose an integer: 20
1 1 2 3 5 8 13
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:Borland C++ 5.5.1 for Win32
 [3.3] 言語:C
[4] 期限:2008年05月15日18:00まで
[5] その他の制限:do while文を用いて作成せよ。
737デフォルトの名無しさん:2008/05/15(木) 00:50:40
>>734
おまい・・・それ本気で言っているのか?だとしたらプログラマーとして相応しくない。
今すぐに適性の無いプログラムなんてやめた方が良いよ。
あれはポインタが示す文字列が分かっているにしろ、自分が知っている範囲内で
思い込みで話をしても無駄さ。ハックなんてのはあのポインタが示す場所を
適当に変える操作をすることだって出来るぞ?要するに、そういう欠陥を持った
仕組みそのものが問題であって、問題の無い範囲内でというのは
自分の思い込みだと考えを改めた方が良いよ。
738デフォルトの名無しさん:2008/05/15(木) 00:52:50
>>736
#include <stdio.h>

int main(void)
{
int a = 1, b = 0, n;

do {
printf("Choose an integer:");
scanf("%d", &n);
}while(n<2);

do {
printf("%d ", a);
a = a + b;
b = a - b;
}while(a < n);

return 0;
}
739デフォルトの名無しさん:2008/05/15(木) 00:54:02
ハックw
740デフォルトの名無しさん:2008/05/15(木) 00:55:06
catch me catch you しとけば良いだろ
741デフォルトの名無しさん:2008/05/15(木) 00:55:20
>>730
char *str1="ABCDEFG";
.....
のような気もするが、修正版は以下。

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

#define SEP " "
#define MAX 32

int main(void)
{
char *str[4]={ "ABCDEFG","HIJKLMN","OPQRST","UVWXYZ" };
char STR[MAX]="";
size_t i,str_sz=sizeof(str)/sizeof(str[0]);
strcat( STR , str[0]);
printf("%s %s\n", STR , str[0]);
for(i=1; i<str_sz; i ++) {
strcat( STR , SEP );
strcat( STR , str[i] );
}
printf("%s\n",STR);
printf("%d",strlen(STR));
return 0;
}



742デフォルトの名無しさん:2008/05/15(木) 01:01:07
っつーことで、取り込む文字数に制限をかけることが重要なのさ。
それを否定するなら、いくら大きなデータになろうが問題を起こさないか
一定以上の文字数だったら処理をしない仕組みを作るのさ。
743デフォルトの名無しさん:2008/05/15(木) 01:13:50
>>738
> 各整数の後に1文字スペースを開けて出力し,最後の数とスペースを出力したら改行すること。
@@ -14,6 +14,7 @@ int main(void)
a = a + b;
b = a - b;
}while(a < n);
+ printf("\n"); // 追加

return 0;
}
744デフォルトの名無しさん:2008/05/15(木) 01:15:58
>>737
ハックなんて言い出したら、
strncatに渡す文字数を改変するとか何でもありw
745デフォルトの名無しさん:2008/05/15(木) 01:48:30
>>737
何そのどうでもいい警戒
しかも対象はただの宿題だし・・・・・
746デフォルトの名無しさん:2008/05/15(木) 01:59:59
>>737
ハッカーとか静電気とかそういう目に見えない敵と戦うのは仕事だけにしろよ
メモリのベリファイとか勘弁してくれよ
747デフォルトの名無しさん:2008/05/15(木) 02:08:06
e^xの第n項まで求めるプログラムを書け。独立変数x、項数nはキーボードより、またwhile文を用いよ
748デフォルトの名無しさん:2008/05/15(木) 02:20:34
>>747
意味が分からない
e^xのどこにnが関わる要素がある?
>>1 をよく読んで書き直し
749デフォルトの名無しさん:2008/05/15(木) 02:33:20
#include <stdio.h>

int main(void)
{
int i=1, n, x;
double d = 0, a = 1;
scanf("%d%d", &n, &x);
while(i < n) {
d += a;
a *= (double)x / i;
i++;
}
printf("%f", d);
return 0;
}
750デフォルトの名無しさん:2008/05/15(木) 03:10:45
しばらく来ないうちに荒んだな
未解決一覧.
>>308 2008/05/10 数値解析
>>349 2008/05/11 ソート
>>511 2008/05/13 凸多角形の辺から一番遠い点を見つけ、その距離を求める
>>596 2008/05/14 PPM画像にdrawing

>>681 2008/05/15 構造体
>>548,723 2008/05/16 数値解析
>>668 2008/05/16 数式処理
>>680 2008/05/16 WebServer の作成

>>84 2008/06/08 回文の生成 >>90,350,380 で終わったっぽいけどまだ先なので
>>342 指定なし グラフ理論
>>714
751デフォルトの名無しさん:2008/05/15(木) 03:19:25
>>681 は今日までか。ちとやってみる。
752デフォルトの名無しさん:2008/05/15(木) 03:20:31
>>548は一旦非斉次型に直して行列に持ち込むのだろうか
それにしても連立二元二次方程式でニュートン法って…難しいな
753デフォルトの名無しさん:2008/05/15(木) 03:23:10
下記の場合volatileがあるためValueを外部から書き換えるまでループを続けると思うのですが、

volatile ULONG Value; // レジスタ(外部から書き換えられる)

void main(void)
{
  Value = 0;
  while(Value == 0){ ←これ
    ;
  }
}

これを下記のようにポインタを経由すると最適化対象になってしまうのでしょうか?
(このポインタもvolatileをつける必要がある?)

volatile ULONG Value; // レジスタ(外部から書き換えられる)

void main(void)
{
  Value = 0;
  ULONG* pV = &Value;

  while(*pV == 0){ ←これ
    ;
  }
}
754デフォルトの名無しさん:2008/05/15(木) 03:24:18
>>753
C言語なら俺に聞け(入門篇) Part 27
http://pc11.2ch.net/test/read.cgi/tech/1209429897/
755デフォルトの名無しさん:2008/05/15(木) 03:24:29
>>749
e のマクローリン展開ですか‥‥‥。
756デフォルトの名無しさん:2008/05/15(木) 03:27:01
>>754
すいません><
宿題じゃないんで激しくスレ違いでした。

向こうで尋ねてみます。
ありがとうございました。
757723:2008/05/15(木) 03:53:10
ツリーなど、煩雑になってしまったのでまとめます。
学校のサイト見たら講義資料もアップされてたんで追記しときます。

[1] 授業単元:C言語による数値入門
[2] 問題文:[1] 授業単元:C言語による数値入門
[2] 問題文:ttp://ranobe.com/up/src/up272685.zip
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限:5/16 0:00
[5] その他の制限:連立方程式(凾を求めるときのやつ)はガウス消去法を用いて解くこと。

よろしくお願いします。
758デフォルトの名無しさん:2008/05/15(木) 04:28:15
>>681
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6552.c
学生番号に0を入力したら、STD_MAXに満たなくても入力終了。
入力に関しては数字なら数字を、文字なら文字を入力しなかった場合の
対処はしてないので、入力は正確に。
75988:2008/05/15(木) 05:20:37
>>88
大分前の宿題のやつですが、1,使用した関数と2,探索に使用した変数、配列と
3,データ入力のための変数、配列を書き出したいのですが、教えていただけないでしょうか?
初歩的な質問になってしまい申しわけありません。
760デフォルトの名無しさん:2008/05/15(木) 07:06:07
大分(おおいた)って読んでしまったぜ
761デフォルトの名無しさん:2008/05/15(木) 08:03:15
>>738,>>743
ありがとうございました。
762デフォルトの名無しさん:2008/05/15(木) 09:04:18
>>750
やるならもう少しちゃんと回答が出てるかどうか調べようぜ
763デフォルトの名無しさん:2008/05/15(木) 09:07:12
おいおいおいおい、また口だけの野郎が来たぜw
764デフォルトの名無しさん:2008/05/15(木) 10:11:27
>>762
そういうならどこに抜けがあるかも書けよ
765デフォルトの名無しさん:2008/05/15(木) 12:10:18
>>665
cos_theta[i]=vector_inner_product(&edge[i-1].vector, &edge[i].vector);

cos_theta[i]=-vector_inner_product(&edge[i-1].vector, &edge[i].vector);
766デフォルトの名無しさん:2008/05/15(木) 14:21:11
・宿題投下
・回答者
・未解決リスト作成

これ以外はレスするなよ、>>737とかそれ以降の口だけの奴邪魔
何か文句あるならソース書け
767デフォルトの名無しさん:2008/05/15(木) 14:23:59
           
.        .   
    ,-ー──‐‐-、.
   ,! ||      |
   !‐|--------┤
  |::::i /´ ̄ ̄`ヽi  気楽になれよ
  |::::i |(´・ω・`)||.
  |::::i |       || 楽になるぜイロイロと
  |::::i |.カワイソース||
  |::::i L__________」|
  |::::i : : : : : : : : :|
  `'''゙‐ー-----ー゙
768デフォルトの名無しさん:2008/05/15(木) 15:04:42
キーボードから0が入力されるまで繰り返し整数値を読み込んで,それらの値の合計を計算するプログラムを,do ... while 文を使って作成せよ。
769デフォルトの名無しさん:2008/05/15(木) 15:21:55
>>768
>1
770デフォルトの名無しさん:2008/05/15(木) 15:24:47
>>768
#include<stdio.h>

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

do {
printf("整数値入力(0で終了):");
scanf("%d", &n);
sum += n;
} while(n != 0);

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

return 0;
}
771デフォルトの名無しさん:2008/05/15(木) 15:37:39
>>719
回答して頂きありがとうございました.ちゃんとVC 6.0 / Windows Vistaで実行確認できました.
ただ,実行した際に日本語を入力する方法がわかりませんでした,でもたぶん平気だと思います.
あともし良かったらでいいんですが・・・このプログラムを簡略化できたりしませんか?
図々しくてすみません,ちょっと僕には複雑すぎるような気がするんです・・・
よかったらお願いします.
772デフォルトの名無しさん:2008/05/15(木) 15:59:31
>>768

#include<stdio.h>
#include<stdlib.h>
#define N 16

int main(void)
{
int input,sum=0;
char input_c[N];

printf("整数値を入力してください(0を入力で計算終了)\n");
do{
printf(">>");
fgets(input_c,N,stdin);
input=(short)strtol(input_c,NULL,10);
sum+=input;
}while(input!=0);

printf("合計:%d\n",sum);
return 0;
}

なんかこういうのってエラーをどこまで書くべきか分からない。
何桁までの数字が有効とか、整数以外はとか。
773デフォルトの名無しさん:2008/05/15(木) 16:02:40
do while文の勉強の所だしそこまで考えなくてもいいかも
774≠719:2008/05/15(木) 16:05:09
// 入力(+メモリ確保)関数を簡略化してみた
#define LINE_LENGTH (100)
int main(int argc, char *argv[])
{
unsigned char *p, *p1, *q;
int len_input;
unsigned char inputLine[LINE_LENGTH];
unsigned char kaibunStr[LINE_LENGTH * 2];

printf("任意の文字列を入力してください: ");
scanf("%99[^\n]", inputLine);
len_input = strlen(inputLine);
if (len_input == 0) return 0;
strcpy(kaibunStr, inputLine);
p = inputLine + len_input - 1;
q = kaibunStr + len_input;
p -= kanji1byte(*(p - 1)) ? 2 : 1;
while (p >= inputLine) {
p1 = p - 1;
if (p1 >= inputLine && kanji1byte(*p1)) {
*q++ = *p1;
*q++ = *p;
p--;
p--;
} else {
*q++ = *p--;
}
}
*q = '\0';
printf("入力した文字列を回文で表\示すると「%s」になります。\n", kaibunStr);
return 0;
}
775デフォルトの名無しさん:2008/05/15(木) 16:55:41
>>774
わざわざありがとうございました.
しかし以下のエラーがでてしまい原因がわかりません・・・

warning C4013: 関数 'kanji1byte' は定義されていません。int 型の値を返す外部関数と見なします。

どうしたらいいんでしょうか?無知で本当にすみません・・・
776デフォルトの名無しさん:2008/05/15(木) 16:58:10
C言語で1+2+3+4+・・・と数字を加算していき、加算結果が300を越えたら処理を終えるプログラム
を作りなさいという宿題が出たのですが、教えてください。
777≠719:2008/05/15(木) 16:58:34
>>775
そいつは行数制限に引っ掛かりそうだったから省略した。元の>719から引っ張ってきて。
778デフォルトの名無しさん:2008/05/15(木) 16:59:20
>>775
>>719の.txt見てみ
779デフォルトの名無しさん:2008/05/15(木) 17:00:43
>>776
>1
780デフォルトの名無しさん:2008/05/15(木) 17:01:31
>>776

for(i=1;sum<=300;i++)
処理
781デフォルトの名無しさん:2008/05/15(木) 17:25:03
>>777
>>778
アドバイスありがとうございました,ぬけていた部分を補完したら
ちゃんと実行できました!
782デフォルトの名無しさん:2008/05/15(木) 17:36:39
>>776
#include <stdio.h>

int main(){
return 0;
}
コンパイラの代わりに最適化しておいた
783デフォルトの名無しさん:2008/05/15(木) 18:02:24
>>782
これ最小 ヘッダいらない

main()
{
return 0;
}
784デフォルトの名無しさん:2008/05/15(木) 18:03:20
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):GCD(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6555.txt) を求める効率の良くない方法をプログラム化し、実行時間をユークリッドの互除法のプログラムと比較しなさい。
 特に、大きな2数(2数4573624943と1690511063あるいは、999999999と999999998)の場合を比較すること)効率の良くないプログラム、ユークリッドの互除法のプログラムともに実行時間計測を組み込むこと。

[3] 環境
 [3.1] OS: XP [3.2] 不明 [3.3] 言語: C++
[4] 期限: 5月17日 [5] その他の制限: 特になしかと


よろしくお願いします
785番外です:2008/05/15(木) 18:10:33
>>682
VBScriptで作りました。これを色々弄って
仕様を定めてからCに翻訳する方法も
***この問題に関しては***
悪くなさそうです。さすがにMadam,I <=>I'm Adamはを見つけるのは辛いですが

function reverse( ByVal s)
dim t
t=""
do while(len(s)<>0)
t=t+mid(s,len(s),1):s=mid(s,1,len(s)-1)
loop
reverse=t
end function
dim s
s=inputbox("文字を入れて","C/C++宿題片付けます","テツダウヨナンドモ")
if(s<>"")then WScript.Echo(mid(s,1,len(s)-1)+reverse(s)) end if
786デフォルトの名無しさん:2008/05/15(木) 18:47:32
>>784
int gcd2(int x, int y){
int i, tmp;
if(x > y){
tmp=x;
x=y;
y=tmp;
}
for(i = x; i > 1; i --){
if((x % i == 0) && (y % i == 0)){
return i;
}
}
}

ロジック:(2数x,yのうち小さい方-1)~2までカウントダウンして、x,y両方を割り切れた最初の数が最大公約数。
所用時間:手元のPCで30秒位。
787デフォルトの名無しさん:2008/05/15(木) 18:48:36
[1] 授業単元:プログラミング
[2] 問題文C言語で1+2+3+4+・・・と数字を加算していき、加算結果が300を越えたら処理を終えるプログラム
を作りなさい

[3] 環境
 [3.1] OS: XP [3.2] 不明 [3.3] 言語: C
[4] 期限: 5月16日 [5] その他の制限: 特になし
788デフォルトの名無しさん:2008/05/15(木) 18:49:28
789デフォルトの名無しさん:2008/05/15(木) 18:50:45
>>788
すいません、while文でしろとの事でした。
申し訳ありません
790デフォルトの名無しさん:2008/05/15(木) 18:50:51
>>787

int i, sum=0;

for(i=1;i<=300;i++){
sum+=i;
}
791デフォルトの名無しさん:2008/05/15(木) 18:52:01
>>789

int i,=1sum=0
while(1){

sum+=i;

if(sum>=300) break;

i++;
}
792デフォルトの名無しさん:2008/05/15(木) 18:52:31
コンマがヘンなところについたけど、なおしといて 
793デフォルトの名無しさん:2008/05/15(木) 18:57:12
>>789
int i=1, sum=0;

while(sum<=300){
sum+=i;
i++;
}
794デフォルトの名無しさん:2008/05/15(木) 19:01:13
>>757
何度も追記があったおかげでどれを信じていいかわからんが、とりあえず。
なんか条件満たしてなかったら言ってくれ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6557.c
795デフォルトの名無しさん:2008/05/15(木) 19:17:12
[1] 授業単元:プログラミングT

[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6558.txt
[3] 環境
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語:C++
[4] 期限:5月18日
[5] その他の制限:問題文中に記載してあります。
[5-1] 講義では関数まで習いました。

   よろしくお願いしますm(__)m 。
796デフォルトの名無しさん:2008/05/15(木) 19:19:30
>>308 期限は過ぎてるが
void method1(double a, double b, double c, double *x1, double *x2) {
  *x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
  *x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
}
void method2(double a, double b, double c, double *x1, double *x2) {
  *x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
  *x1 = c/(a*(*x2));
}
main() {
  double a = 1, b = 18000000, c = 1, x1, x2;
  method1(a, b, c, &x1, &x2);
  printf("method 1: x1 = %.12le, x2 = %.12le\n", x1, x2);
  method2(a, b, c, &x1, &x2);
  printf("method 2: x1 = %.12le, x2 = %.12le\n", x1, x2);
  return 0; 
}
/* 真の解は 
x1 = -5.5555555555555727023319615913266947789124×10^-8
x2 = -1.799999999999994444444444444427297668038408673×10^7
なので,method2 のほうが精度がよい.
*/
797デフォルトの名無しさん:2008/05/15(木) 19:26:19
>>795
#include <stdio.h>
int main(void)
{
int A[5];
int i, v, n, w,imax;
int j, t;

printf("5桁の正の整数値を入力してください ");
scanf("%d",&v); n = 5;
for (w=1;w<=n;w++) {
A[n - w] = v % 10;
v = v / 10;
} for (i=0;i<n;i++) {
v = A[i];
imax = i;
for (j=i+1;j<n;j++) {
if (A[j] > v) {
v = A[j];
imax = j;
}
}
t = A[i];
A[i] = A[imax];
A[imax] = t;
} printf("大きい順では: ");
for(i=0;i<n;i++) {
printf("%d", A[i]);
} printf("\n");
return 0;
}
798デフォルトの名無しさん:2008/05/15(木) 19:27:17
行節約するために何箇所か改行消した
799デフォルトの名無しさん:2008/05/15(木) 19:37:58
>>668
問題不備.「組合わせた式」の定義がわからない.具体的には
(1) 同じ演算子は使ってよいのか
(2) 同じ数字は使ってよいのか
(3) もし (2) が yes ならば式の長さはどこまでか
800795:2008/05/15(木) 19:38:43
>>797

実行確認できました!

ありがとうございますm(__)m。

801デフォルトの名無しさん:2008/05/15(木) 19:39:19
>>799
出力例見なよ
802デフォルトの名無しさん:2008/05/15(木) 19:42:53
>>801
例はあくまで例でしょ。
(1) は例から yes っぽいけど、(2), (3) は分からないよ。
803デフォルトの名無しさん:2008/05/15(木) 19:46:27
もし使ってもいいなら例にだすでしょ
804デフォルトの名無しさん:2008/05/15(木) 19:47:31
>>803
明記がない以上は確認するのが筋だと俺は思うけど、
これ以上は水掛け論だろうから、やめるね。
805デフォルトの名無しさん:2008/05/15(木) 19:49:51
そうだな、お互いの想像でしかないしな
806デフォルトの名無しさん:2008/05/15(木) 19:54:38
timeGetTime関数を使って擬似的に60fpsでループするプログラムでゲームループさせようとしているのですが、
1フレームごとに毎回移動させる場合(たとえばパチスロのリールのようなもの)
カウンタ加算値が+=1であれば1秒では60しか移動しませんよね?

それだと遅すぎるのでfor文を使って
for(i=0; i<=10; i++){
 //移動カウンタ
}
として挟んでみたんですが、これってあくまで移動量は1ずつを高速ループさせて
同時に描画させることになるのでしょうか?

単に移動量を+10にしたときとでは
forで挟んだ方が滑らかに綺麗に表示されてる気がするんですけど違いってあるんでしょうか?
807デフォルトの名無しさん:2008/05/15(木) 19:56:46
>>806
ここは質問スレじゃない。適切なスレに池。
808デフォルトの名無しさん:2008/05/15(木) 20:03:53
【未解答問題一覧(期限切れ・問題不備除く)】
>>668 2008/05/16 数式処理
>>680 2008/05/16 WebServer の作成
809デフォルトの名無しさん:2008/05/15(木) 20:05:25
>>806
Win32API質問箱 Build65
http://pc11.2ch.net/test/read.cgi/tech/1208847084/
でもその質問のままじゃ意味不明すぎワロタ
810デフォルトの名無しさん:2008/05/15(木) 20:40:56
[1] 授業単元: プログラム講義-基礎
[2] 問題文二つの自然数の最大公約数を求める関数を再帰関数として定義し,その利用例が明らかになるようにプログラムを作成しなさい.
[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ gcc
 [3.3] 言語: C
[4] 期限: 5/17 24:00
[5] 数値は適当にに決めて、動作例としてプログラムを書いてok
811デフォルトの名無しさん:2008/05/15(木) 20:46:13
>>810
#include<stdio.h>

int gcd(int a, int b)
{
printf("a=%d b=%d\n", a, b);
if(a%b==0) return b;
return gcd(b, a%b);
}

int main(void)
{
int a=123, b=456;
// scanf("%d %d", &a, &b);
printf(" %d\n", gcd(a, b));

return 0;
}
812デフォルトの名無しさん:2008/05/15(木) 21:29:50
亀だが
>>707
string space=" ";
if(k==space){
system("format C:");
}
813デフォルトの名無しさん:2008/05/15(木) 21:30:14
[1] 授業単元:
Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6559.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)

[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5月17日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
構造体を習っているところです。よろしくお願いします。
814デフォルトの名無しさん:2008/05/15(木) 22:02:59
>>813
課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6560.c

課題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6561.c


課題2がよくわからなかったが、一応書かれてたものは全部使ってみた
815デフォルトの名無しさん:2008/05/15(木) 22:03:09
今日の回答者の皆様、清書レベルでおKですか?
816デフォルトの名無しさん:2008/05/15(木) 22:07:54
>>815
意味が分からんが宿題ならどうぞ
817デフォルトの名無しさん:2008/05/15(木) 22:12:46
口だけ、仕切りや自治厨が現れますた!
818デフォルトの名無しさん:2008/05/15(木) 22:52:29
>>814
すいません、特にエラーは出ないのですが、課題1が実行例どおりに作動しないのですが・・
819デフォルトの名無しさん:2008/05/15(木) 22:54:35
勝手にレベルとか持ち出してきた815のことですね、わかります
820デフォルトの名無しさん:2008/05/15(木) 22:58:58
>>818
コンパイルエラーが出るはずだが。
int sx[] = {0,+1,-1,-1,+1},
の最後をセミコロンにすれば実行例どおりに動作したよ。
821デフォルトの名無しさん:2008/05/15(木) 23:03:56
>>813
課題1
#include <stdio.h>

struct point{
int x; /* x 座標 */
int y; /* y 座標 */
};

int main(void){
struct point table[5][100], p1;
int i, j, index, num[5]={0};

for(i=0;i<100;i++){
if(scanf("%d %d", &p1.x, &p1.y)!=2) break;
index=0;
if(p1.x>0 && p1.y>0) index=1;
if(p1.x<0 && p1.y>0) index=2;
if(p1.x<0 && p1.y<0) index=3;
if(p1.x>0 && p1.y<0) index=4;
table[index][num[index]++]=p1;
}
for(i=1;i<=4;i++){
printf("第%d象限の個数 %d\n", i, num[i]);
for(j=0;j<num[i];j++){
printf("(%2d, %2d)\n", table[i][j].x, table[i][j].y);
}
}
return 0;
}
822デフォルトの名無しさん:2008/05/15(木) 23:04:56
>>820
すいません、作動しました!ありがとうございました。
ところで、課題2の
POINT pt1 = {2, 4};
d = distance(pt1);
これはどういう意味があるんでしょう?
823デフォルトの名無しさん:2008/05/15(木) 23:07:28
>>821
条件判断何回やらせんだよw
824デフォルトの名無しさん:2008/05/15(木) 23:07:34
>>822
意味ないよ。課題2の問題文中にかかれてたからとりあえず入れただけ。
825デフォルトの名無しさん:2008/05/15(木) 23:09:29
>>821
ありがとうございました!

>>824
了解ですw
ありがとうございました
826デフォルトの名無しさん:2008/05/15(木) 23:31:29
if(p1.x>0){
if(p1.y>0)
index=1;
else if(p1.y<0)
index=4;
}
if(p1.x<0){
if(p1.y>0)
index=2;
else if(p1.y<0)
index=3;
}

これでいいだろw
827653:2008/05/15(木) 23:33:10
>>511
もう、必要無いかもしれんけど、
興味あったんで、検証とC#の勉強かねてグラフィカルに実装してみた。

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

チェックしてないんで凹ポリゴンでも実行しちゃうけど、結果は意味無し。
左回りでも右回りでも可。

C#って色々不便なとこあるなー。
スレ違いだな・・・スマソ
828デフォルトの名無しさん:2008/05/15(木) 23:38:14
麻呂のクソースにも飽きたでじゃる。しばらく、Java、JavaScriptに
転進するでおじゃ〜る、さらばじゃっ
829デフォルトの名無しさん:2008/05/15(木) 23:49:09

キチガイの集まり創価学会

キチガイ・マルチが政治活動

池田大作キチガイ集団公明党

キチガイの集まり公明党

池田キチガイ公明党

キチガイの集まりが政治活動公明党
830デフォルトの名無しさん:2008/05/15(木) 23:55:36
>>758
ありがとうございました。
無事に期限に提出できました。
831827:2008/05/16(金) 00:04:36
>>827
肝心の中心点表示してなかった・・・orz

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6563.zip
832デフォルトの名無しさん:2008/05/16(金) 01:14:59
[1] 授業単元:オペレーティングシステム論
[2] 問題文
?簡単なシェルを作れ
?fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作る
?最低限、以下の機能を実現する
1.プロンプトを出力する
2.ユーザに端末からコマンドを入力させる
3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する
4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ
5.1に戻る

[3] 環境
OS:Windows/Linux
コンパイラ:gcc
言語: C
[4] 期限: 2008年5/17 16時
実行結果もお願いします
833デフォルトの名無しさん:2008/05/16(金) 01:30:30
834827:2008/05/16(金) 01:39:43
今、気付いたけど、
水平な頂点があるとゼロ除算で落ちるな・・・
180度に近づくと制度落ちるし、
ちょっと計算方法がまずいようだ。
835デフォルトの名無しさん:2008/05/16(金) 01:53:52
ここはコンパイル済みと言った程度のコードをグラフィカルに表し清書済みとするスレです。
836デフォルトの名無しさん:2008/05/16(金) 02:12:46
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6565.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月19日
[5] その他の制限:
フローチャートも書かなきゃならないので、なるべく見やすいものをお願いします。
サブ関数は使わないようお願いします。
なるべく怪しまれない程度の技術でお願いします。
注文ばっかでごめんなさい;職人様お願いします!
837デフォルトの名無しさん:2008/05/16(金) 02:44:46
>>680
課題の条件全てが曖昧なので適当に
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6566.c
838デフォルトの名無しさん:2008/05/16(金) 03:51:29
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
次のプログラムの致命的な問題を一つあげなさい
/*標準入力から行の先頭10000文字以内を読み込んで
読み込んだものを標準出力に出力する*/
int main(int argc,char **argv){
#define N 10000
char ss[N+1],*s=(char*)&ss;
int len;
while(!feof(stdin)){
if(fgets(s,N,stdin)){
if(!ferror(stdin)){
printf(s);
if((len=strlen(s))==10000)
if(s[len-1]=='¥n')
printf("¥n");
continue;
}
}
break;
}
return 0;
#undef N
}
[3] 環境
 [3.1] OS: 2008年直近のANSI-CもしくはISO-C準拠のC処理系があるOS環境
 [3.2] コンパイラ名とバージョン: ANSI-C,ISO-Cに準拠したC処理系
 [3.3] 言語: C
[4] 期限: 1時間以内
[5] その他の制限:問題見て10秒以内に問題が発見できれば、正しいCプログラマです。
839838:2008/05/16(金) 03:53:04
#include <stdio.h>
が抜けているというのは、回答にはなりませんので念の為
840838:2008/05/16(金) 03:56:06
lenがいらないというクレームはガス抜き用に用意しました。
841デフォルトの名無しさん:2008/05/16(金) 03:59:10
人に問題出せるレベルじゃねーぞw
842%:2008/05/16(金) 04:24:44
先頭10000文字という指定なのに9999文字までしか表示できない
843デフォルトの名無しさん:2008/05/16(金) 04:33:54
>>680
当方で確認した環境は Vine Linux 4.2(kernel 2.6.16), 処理系は gcc3 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img

> システムが不調でも‥‥
特になにも考えていません。
> .無茶な通信データがきても‥‥
対応できませんでした。たくさんのデータが来ると狂うでしょう。
> 行儀よく停止する。
シグナルで余さず wait したつもりです。

わたしの環境では、 read() でも recv() でもデータがそろうまでブロックするため、
クライアントのリクエスト文字列が終わったことを検出する方法がわからないのですが、
どうすればいいんでしょうか。

>>774
感謝です。
844デフォルトの名無しさん:2008/05/16(金) 05:00:21
>>838
#define N 10000 ってしたらNに統一すべき。
Nと10000を混在させるのはよろしくない。

fgets(s,N,stdin)だと配列のサイズをN+1にした意味がない。

if(s[len-1]=='\n')じゃなくてif(s[len-1]!='\n')じゃないの?
845デフォルトの名無しさん:2008/05/16(金) 05:12:00
>>786
すばやい回答ありがとうございました
846デフォルトの名無しさん:2008/05/16(金) 05:32:44
センスを試す良問だな
847デフォルトの名無しさん:2008/05/16(金) 06:35:10
>>838
単純なことだ。10000文字以上入力してみそ。普通にそれ以上読み込んでいるから。
それ以外の部分に問題があるって話しも出るが、10000文字以内に限定するなら
EOF検出とか要らんことせんで、指定した文字数まで読み込むコードで終わらせい。
848デフォルトの名無しさん:2008/05/16(金) 07:00:37
>>847だが、プロンプトの仕様上1行10000文字までという制限がある
環境も存在するかもしれんが、そういうのは考慮せず、プログラムとして
Nを10にでもして入力して、if((len=strlen(s))==10000) の10000の部分を
Nにしても分かるが、指定の文字だけ読み込んで1行ずつ出力するわけでもなし。
849デフォルトの名無しさん:2008/05/16(金) 07:16:11
printf("%s",s);にしないといけないんだろ
850デフォルトの名無しさん:2008/05/16(金) 07:32:24
>>838
問題点がない
851デフォルトの名無しさん:2008/05/16(金) 07:34:12
>>849

正解
他にも問題はあるが、軽微
コンパイルして、コンソールから
printf("1時間考えても答え出せない奴が回答者やろうというのは%d年早いですか?\n",100);
と入力してみそ。
プログラムが落ちなければ運がいいと思う。
852デフォルトの名無しさん:2008/05/16(金) 07:42:53
仕様を満たせば良い
バグが出なければ尚良い
可読性が有れば言うこと無し
853デフォルトの名無しさん:2008/05/16(金) 08:18:51
>>838
> char ss[N+1],*s=(char*)&ss;
妙なことしとりまんなぁ。普通にss使いやぁ
854デフォルトの名無しさん:2008/05/16(金) 08:37:13
>>851
842の名前欄に答書いてあるからわざとスルーしてたんだけどね

っていうか、自分のミスを軽微ですますなw
855デフォルトの名無しさん:2008/05/16(金) 14:41:41

キチガイの集まり創価学会

キチガイ・マルチが政治活動

池田大作キチガイ集団公明党

キチガイの集まり公明党

池田キチガイ公明党

キチガイの集まりが政治活動公明党
856%:2008/05/16(金) 15:55:15
>>851
やってみた
俺のマシン(Windows)では
printf("1時間考えても答え出せない奴が回答者やろうというのは-23年早いですか?¥n",100);
と出た。
隣の奴のマシン(OS-X)では
printf("1時間考えても答え出せない奴が回答者やろうというのは384998年早いですか?¥n",100);
とでた
共有鯖のLinuxでやらせたら
printf("1時間考えても答え出せない奴が回答者やろうというのは100年早いですか?¥n",100);
どのマシンでも
printf("1時間考えても答え出せない奴が回答者やろうというのは%s年早いですか?¥n","-10");
と入れたら落ちた。
857デフォルトの名無しさん :2008/05/16(金) 16:32:21
2次元配列変数sampleの中身を表示し、sampleの4つの値の平均値をresultの1つの値とするプログラム
を作成せよ。

実行例
sample
13 36 18 54 83 12
25 62 19 78 21 5
41 93 87 21 87 11
61 81 68 46 35 98

result
34 42 30
69 56 58

これをfor文を使ってお願いします。(windows c言語)
858デフォルトの名無しさん:2008/05/16(金) 16:36:29
859デフォルトの名無しさん:2008/05/16(金) 16:46:11
「1」…ゲームアルゴリズム
「2」…ブロック崩しゲームで、ボールが下についたらゲームオーバーになるようにプログラミングせよ
「3」…windows vista、C
↓のように打ったのですが、ゲームオーバーと認識してくれません

if(bally==0)
{
gamemode = 2;

color = GetColor(255,255,255);
DrawFormatString(220,220,color,"Game Over...");

movex=0;
movey=0;

if( CheckHitKey(KEY_INPUT_RETURN))
{
gamemode = 0;
movex=0;
movey=0;
}
}
860デフォルトの名無しさん:2008/05/16(金) 16:47:34
>>859
bally==0 を bally<=0 でおk
861デフォルトの名無しさん:2008/05/16(金) 16:59:20
>>860
試してみましたが、できませんでした
別のところに問題があるのでしょうか
862デフォルトの名無しさん:2008/05/16(金) 17:01:11
>>857
後は自分で

#include<stdio.h>
int main(void)
{ int sample[4][6]={{13, 36, 18, 54, 83, 12},
{25, 62, 19, 78, 21, 5},
{41, 93, 87, 21, 87, 11},
{61, 81, 68, 46, 35, 98} };
int result[2][3]={0}, i, j;
puts("sample");
for(i=0;i<4;i++) {
for(j=0;j<6;j++) {
printf("%d ", sample[i][j]);
}
puts("");
}
result[0][0]=(sample[0][0]+sample[1][0]+sample[2][0]+sample[3][0]) / 4;
result[0][1]=(sample[0][1]+sample[1][1]+sample[2][1]+sample[3][1]) / 4;
result[0][2]=(sample[0][2]+sample[1][2]+sample[2][2]+sample[3][2]) / 4;
result[1][0]=(sample[0][3]+sample[1][3]+sample[2][3]+sample[3][3]) / 4;
result[1][1]=(sample[0][4]+sample[1][4]+sample[2][4]+sample[3][4]) / 4;
result[1][2]=(sample[0][5]+sample[1][5]+sample[2][5]+sample[3][5]) / 4;
puts("\nresult");
for(i=0;i<2;i++) {
for(j=0;j<3;j++) {
printf("%d ", result[i][j]);
}
puts("");
}
return 0;
}
863デフォルトの名無しさん:2008/05/16(金) 17:22:50
[1] 授業単元:プログラミング演習
[2] 問題文
キーボードから入力された任意の文字列を分析し
その文字列に含まれている数字文字"0","1",..."9"の合計個数を表示するプログラムを作成せよ。
注)NULL文字は '\0' で表すことができる

@文字列の読み込みは、1次元文字配列 string[MAX](MAX=256) を定義して行うこと。
A文字配列に含まれる数字の係数処理は、関数 dgt_num_total()を定義・呼び出しをして行うこと。
また関数 dgt_num_total()は、@入力された文字列が格納された文字配列の先頭アドレスを
引数(アドレス参照)とし、A関数の戻り値としてその中に含まれる数字の個数を返す関数とすること

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4]期限:2008年5月16日午後7時程度

よろしくお願いします
時間がないのは実家に帰る仕様です
864デフォルトの名無しさん:2008/05/16(金) 17:28:46
>>863
#include <stdio.h>
#include <ctype.h>

#define MAX 256

int dgt_num_total(const char *s){
int dgt_num=0;

for(;*s;s++) if(isdigit(*s)) dgt_num++;

return dgt_num;
}

int main(void){
char string[MAX];

fgets(string, sizeof(string), stdin);
printf("\n%d\n", dgt_num_total(string));

return 0;
}
865デフォルトの名無しさん:2008/05/16(金) 17:32:17
>>864 っは、しまった…、穴埋め問題でした…
とりあえずこちらを見て参考にさせていただきますー

もう一つあるんですが、連続投稿はよろしいのでしょうか
866デフォルトの名無しさん:2008/05/16(金) 17:36:18
いいんじゃない
連続投稿かどうか、ID無いから判断出来ないし
867デフォルトの名無しさん:2008/05/16(金) 17:39:29
>>866 どもです
とりあえずは釈然としないので、両方いきます。

[1] 授業単元:プログラミング演習
[2] 問題内容
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6571.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6572.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4]期限:2008年5月16日午後7時程度

再び、よろしくお願いします…
868デフォルトの名無しさん:2008/05/16(金) 17:47:44
{
 int c;
 int dgt_num = 0;

 while((c = fgetd(stdin) != EOF)
  if(isdigit(c))
   dgt_num++;

 printf("%d¥n", dgt_num;
}
869デフォルトの名無しさん:2008/05/16(金) 17:52:04
[1] 授業単元:C言語による数値計算演習
[2] 問題文:4×4の対称行列の固有値と固有ベクトルを求める
      ヤコビ法のプログラムを作成せよ。但し,行列の要素を
      保持する配列変数として2次元の配列変数を使用すること。
      計算結果を画面に出力すること。(行列[n][n]の各成分は
      printfによるキーボード入力させる。)
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] Windows Visual Studio
 [3.3] 言語:C++
[4] 期限:08年5月22日23:30まで

すみません、よろしくお願いします
870デフォルトの名無しさん:2008/05/16(金) 17:55:06
>>869
すみません問題文の5行目間違えました
printfじゃなくてscanfです。

すみませんでした
871デフォルトの名無しさん:2008/05/16(金) 18:02:32
>>861
y座標は1番上が0で下に行くほど増えるのでは
872デフォルトの名無しさん:2008/05/16(金) 18:24:16
873デフォルトの名無しさん:2008/05/16(金) 18:30:04
switchの方
void dgt_num_deatil(char *str, int *bnp)
{
int i = 0; /* 配列参照用添え字 */

while (str[i] != '\0') {
switch(str[i]) {
case '0': bnp[0]++; break;
case '1': bnp[1]++; break;
case '2': bnp[2]++; break;
case '3': bnp[3]++; break;
case '4': bnp[4]++; break;
case '5': bnp[5]++; break;
case '6': bnp[6]++; break;
case '7': bnp[7]++; break;
case '8': bnp[8]++; break;
case '9': bnp[9]++; break;
}
i++;
}
}
874デフォルトの名無しさん:2008/05/16(金) 18:39:35
>>872 ありがとうございます!参考にさせて頂きます〜
875843:2008/05/16(金) 18:41:25
>>680
すみません、リンクを書き漏らしていました。
>>843 の改良版をおきました。
確認は cygwin/WindowsXP, コンパイラは gcc3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6570.txt

> システムが不調でも‥‥
特になにも考えていません。システムコールの返り値はみるようにしています。
> .無茶な通信データがきても‥‥
対応しました。内部のバッファのサイズよりも大きいデータが来てもOKです。
select() をノンブロックにして、ポーリングさせています。
> 行儀よく停止する。
シグナルで余さず wait しました。

>>843 の時点でのソースは次のとおりです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6568.c

>>838
普通の宿題の回答をみればわかることですが。
876デフォルトの名無しさん:2008/05/16(金) 19:20:49
[1] 授業単元:プログラミング言語論
[2] 問題文(含コード&リンク):
アルファベット、数字、空白からなる文字列を渡したとき、小文字を大文字にする関数
void to_low(char s[]);を作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2008年05月18日13:10まで
[5] その他の制限:文字列まで習っている
877デフォルトの名無しさん:2008/05/16(金) 19:36:53
>>876
#include<stdio.h>
#include<ctype.h>

#define SIZE 256

void to_low(char s[])
{
int i=0;
while(s[i++]!='\0')
{
if(islower(s[i]))
s[i]=toupper(s[i]);
}
}

int main(void)
{
char str[SIZE];
printf(">>");
fgets(str,SIZE,stdin);
to_low(str);
printf("%s\n",str);
return 0;
}
878デフォルトの名無しさん:2008/05/16(金) 19:39:12
>>877
ワロタw
879デフォルトの名無しさん:2008/05/16(金) 19:40:11
fgets w
880デフォルトの名無しさん:2008/05/16(金) 20:11:40
>>876,877
このままだと、先頭の1文字が変換されないので、修正。

diff -r 84cfa8044290 -r e5b7a28be89f 876.c
--- a/876.c Fri May 16 20:06:16 2008 +0900
+++ b/876.c Fri May 16 20:08:09 2008 +0900
@@ -6,10 +6,11 @@ void to_low(char s[])
void to_low(char s[])
{
int i=0;
- while(s[i++]!='\0')
+ while(s[i]!='\0')
{
if(islower(s[i]))
s[i]=toupper(s[i]);
+ i++;
}
}
881デフォルトの名無しさん:2008/05/16(金) 20:16:35
>>880
すいません、関数上の文字列や-whileとかの文法がよく分からないのですが、
どういう意味でしょうか?
882デフォルトの名無しさん:2008/05/16(金) 20:27:14
>>881
変更点が判るようにと思って、バージョン管理ツールの出力を
載っけたが、ツール使ってる人ばっかりじゃなかったな、すまん。
ただ、バージョン管理ツールはグループ・個人を問わず非常に便利
なので管理用に使う事をお勧めする。
以下、表記の説明。

・修正の場合
> int i=0;
> - while(s[i++]!='\0') // <---この行を削除という表記
> + while(s[i]!='\0') // <---この行を追加という表記
> {

・追加の場合
> s[i]=toupper(s[i]);
> + i++;   // <---この行を追加という表記
> }
883デフォルトの名無しさん:2008/05/16(金) 20:32:23
小文字を大文字に直す関数を作成するのにtoupper()を使うのはどうなんだ? という気がしないでもない。
アルファベットからなる文字しか渡されないと約束されているなら
s[i] = s[i] - 0x20; でも十分なような気がしないでもない。
884デフォルトの名無しさん:2008/05/16(金) 20:33:42
-0x20はどこから出てきたんだ

と聞かれるような気がしないでもない
885デフォルトの名無しさん:2008/05/16(金) 20:48:41
'a' - 'A' です
と答える

出題者の意図としてはislowerやtoupperとか使ったらだめだろうから
886デフォルトの名無しさん:2008/05/16(金) 21:00:48
887デフォルトの名無しさん:2008/05/16(金) 21:06:12
888デフォルトの名無しさん:2008/05/16(金) 21:41:16
                  l;l  ,_-‐ 、    __,,.. - 、       彡彡彳、.//  この感じ・・・麻呂のクソースか・・・
_______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、   彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1     ̄フ/l l::. ヽこ~ ̄     彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
889680:2008/05/16(金) 22:21:54
>>875
ありがとうございました
じっくりソースみて自分で理解してみます。
890デフォルトの名無しさん:2008/05/16(金) 22:57:31
>>885
-'A'のほうがわかりやすいだろ
-0x20じゃパット見イミフ
891デフォルトの名無しさん:2008/05/16(金) 22:58:37
すいません>>813なのですが、あまり他力ではいけないと思って皆さんの教えてくださったプログラムを参考に自分でやってみたのですが、
コンパイルはできたのですが、実際に実行してみると何も反応しません。。どこが間違っているのでしょうか?

#include <stdio.h>

struct point{
int x;
int y;
};

int main(void){
struct point table[5][100];
int i, j, x, y, s, num[5];

while (scanf("%d %d", &x, &y) != EOF) {
for(i=0;i<100;i++){
if(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;
table[s][num[s]++].x = x;
table[s][num[s]++].y = y;
}
for(i=1;i<=4;i++){
printf("第%d象限の個数 %d\n", i, num[i]);
for(j=0;j<num[i];j++){
printf("(%d, %d)\n", table[i][j].x, table[i][j].y);
}
}
return 0;
}
892デフォルトの名無しさん:2008/05/16(金) 23:00:18
>>891
コピペしてコンパイルしたら通らないよ
893デフォルトの名無しさん:2008/05/16(金) 23:02:52
>>892
すいません一番最後に
}
をつけると一応コンパイルは通ります。。でも実行しても何も反応しないのです。
894デフォルトの名無しさん:2008/05/16(金) 23:05:12
>>893
scanf関数が最初に呼ばれるからだろ?
入力待ち状態だよ
895デフォルトの名無しさん:2008/05/16(金) 23:08:27
>>894
すいません今やってみると、何も反応しないことはなかったのですが、
./a.exe < point-data.txt
と入力してみると
第1象限の個数 0
第2象限の個数 0
第3象限の個数 0
第4象限の個数 0

という風にでて、全くプログラムとして機能しませんでした。。
どこがおかしいでしょうか?
896デフォルトの名無しさん:2008/05/16(金) 23:10:58
問題見てないからあれだけど、
./a.exe < point-data.txt
このコマンドは何だ?
897デフォルトの名無しさん:2008/05/16(金) 23:11:50
1つだけ読み込みに成功したらxとyのどっちかの値が不定になるんじゃね?
898デフォルトの名無しさん:2008/05/16(金) 23:12:25
>>896
point-data.txtというファイルの中に
5 1
0 91
-6 2
-92 0
-7 -3
0 -93
94 0
1 -4
9 -4
-8 -3
8 -4

というものが入ってまして、つまり、上記の数字を入力したときの結果ということです。。
899デフォルトの名無しさん:2008/05/16(金) 23:15:07
俺がやると無限ループになるからお手上げで
900デフォルトの名無しさん:2008/05/16(金) 23:17:55
whileの条件判断の部分にscanf入れること自体あんまりよろしくなくね?
901デフォルトの名無しさん:2008/05/16(金) 23:19:47
>>897
どうしたらいいんでしょう?

>>900
なんか学校で習ったときに
while (scanf("%d %d", &x, &y) != EOF) {
こういったような文章が出てきたので、無理矢理組み込んでみました・・
902デフォルトの名無しさん:2008/05/16(金) 23:24:43
>>901
それってファイル操作じゃない?
while(fgets(ss, 256, fr) != NULL)
903デフォルトの名無しさん:2008/05/16(金) 23:30:06
>>902
すいません、その文章はよくわからないです・・

ファイルやキーボードから複数のデータを入力する方法
struct point p1;
while(scanf("%d %d", &p1.x, &p1.y) != EOF){
構造体p1 の処理
}
?? 入力リダイレクト機能
% ./a.out < data.txt
?? ファイルdata.txt の先頭から1 行ずつデータを入力し,scanf 関数の実引数に格納される.
?? ファイルの最後に到達すると,scanf 関数はEOF (End of File)を返すので,while 文の
繰り返しが終了する.
?? キーボードからのデータ入力
?? データの入力を終了する時にCtrl-D を入力すると, scanf 関数はEOF を返すので,
while 文の繰り返しが終了する

こんな感じで習いました
904デフォルトの名無しさん:2008/05/16(金) 23:41:28
>>892
scanf の返り値はなんなのかについて学習すべし。
プログラマを目指すなら・問題の切り分けがいかにスマートにできるかです。そのセンスを磨くことです。
man scanf で直ぐ気づく超初級クラスのミス(ミスそのものを犯してしまうのは致し方ないとして)
905デフォルトの名無しさん:2008/05/16(金) 23:42:08
すまん、アンカーちごた。
906デフォルトの名無しさん:2008/05/17(土) 00:12:36
>>891

{
 int i, x, y, s;
 struct point table[5][100];
 int num[5];
 for(x = 0; x < 5; x++) // きちんと0で初期化して
 {
  num[x] = 0;
  for(y = 0; y < 100; y++)
   table[x][y].x = table[x][y].y = 0;
 }

 for(i = 0; i < 100; i++)
 {
  scanf("%d %d¥n", &x, &y);
  if(x && y)
  {
   if(x > 0)  s = y > 0 ? 1 : 4;
   else    s = y > 0 ? 2 : 3;
  }
  else s = 0;
  table[s][num[s]].x = x; // これって意味有るの?
  table[s][num[s]].y = y; // 上に同じく
  num[s]++;  // 元のソースだと常に +2 されてるけど・・
 }

 for(i = 0; i < 4; i+)
  printf("第%d象の個数 %d¥n", i, num[i]);
...
}
907デフォルトの名無しさん:2008/05/17(土) 00:18:20
手抜きしてた

 if(scanf("%d %d¥n", &x, &y) == EOF)
  break;

あと、
 if(num[0])
  printf("一方が0のもの %d¥n", num[0]);
 for(i = 1; i < 5; i++)
  printf("第%d象の数 %d¥n", i, num[i]);

訂正だす。
908 ◆bT6c9WIwLg :2008/05/17(土) 01:11:26
[1] 授業単元:プログラム言語
[2] 問題文: n段の段数を持つピラミッドより構成される、
n段の段数を持つピラミッドを表示するプログラムを作成せよ。
<実行例>
段数を入力してください: 4
===============*
==============***
=============*****
============*******
===========*=======*
==========***=====***
=========*****===*****
========*******=*******
=======*=======*=======*
======***=====***=====***
=====*****===*****===*****
====*******=*******=*******
===*=======*=======*=======*
==***=====***=====***=====***
=*****===*****===*****===*****
*******=*******=*******=*******
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 5月22日
[5] その他の制限:forとprintfを使ってやること

問題文の”=”は本来はスペース” ”です。位置を合わせるために使いました。
誰かお願いしますm(_ _)m

909デフォルトの名無しさん:2008/05/17(土) 01:27:57
>>908
#include<stdio.h>
int main()
{
int n, i, j, k, l;
printf("段数を入力してください:");
scanf("%d", &n);
for(i = 0; i < n; i ++) {
for(j = 0; j < n; j ++) {
for(k = 0; k < n*n-i*n-j-1; k ++)
printf(" ");
for(k = 0; k < i; k ++) {
for(l = 0; l < j*2+1; l ++)
printf("*");
for(; l < n*2; l ++)
printf(" ");
}
for(k = 0; k < j*2+1; k ++)
printf("*");
printf("\n");
}
}
return 0;
}
910デフォルトの名無しさん:2008/05/17(土) 02:56:31
お前が時の勇者リンクか!
911デフォルトの名無しさん:2008/05/17(土) 03:01:14
今、とてつもなくオッサーンな香具師を見た気がしてならない
912デフォルトの名無しさん:2008/05/17(土) 03:06:30
今年の誕生日で22になるおっさんが通りますよっと。
913デフォルトの名無しさん:2008/05/17(土) 03:11:59
>>891
まずは>>821を改変せずに実行してみては?
914デフォルトの名無しさん:2008/05/17(土) 04:20:12
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
横120文字のコンソールがあります。
これを利用して次の関数のグラフを同時に書かせなさい
x^2+(y-3)^2=2
x^2+y^2=1
x^2+(y+4)^2=3
(x-5)^2+y^2=9^2
(x+5)^2+y^2=9^2
但し|x|<=4,|y|<=8でこれを満たす点を*で表示し
それ以外の点を空白文字で埋める。
横120文字分を一杯に使って表示させたものをプリントアウトして提出。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2008年05月17日23:59まで
[5] その他の制限:なるべく大きく表示すること

お願いしまつ)m_m(
915デフォルトの名無しさん:2008/05/17(土) 05:17:07
>>908
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6578.c
麻呂も、麻呂のクソースも見て給う
916デフォルトの名無しさん:2008/05/17(土) 05:47:46
>>914って難しい?
917デフォルトの名無しさん:2008/05/17(土) 05:54:08
>>916
君が楽に解けると言うなら、君にとっては難しくないであろう。
もし君が解けないくせにそういうなら、なんで自分でやらないのか?っと
質問者に対する愚問とみなそう。さぁ、四の五の言わず、君が解いてみ給え?
麻呂は疲れたので、寝るでおじゃ〜る
918デフォルトの名無しさん:2008/05/17(土) 05:54:25
難しくないだろ。
919デフォルトの名無しさん:2008/05/17(土) 05:55:15
だからそう言うならそちが解いてみて給う?
920デフォルトの名無しさん:2008/05/17(土) 06:03:07
120ドットで幅8、縦16のサイズにすると、サイズ1/15ずつの正方形の中にグラフの一部があれば出力すればよい。
任意の関数を与えた時にグラフを描かせるのは誤差を考慮しなければならないが、一方の変数で解求めてしまえば楽ではある。
921デフォルトの名無しさん:2008/05/17(土) 06:06:22
解くじゃなく書くじゃないか?
どこが難しいのか見当もつかないが、本当は難しかったりするのか?
922デフォルトの名無しさん:2008/05/17(土) 06:08:30
120*240のどこら辺に*を描くのかがちょっと難しいかもしれない。
923デフォルトの名無しさん:2008/05/17(土) 06:08:38
>>920
正方形の中にグラフの一部ってどういう意味?
924デフォルトの名無しさん:2008/05/17(土) 06:11:33
f(x,y)という関数が与えられたとして、正方形の中心座標を入力したとき f(x,y)<εと判定すると
ちょっとずれる場合があるかもしれないって事。
925デフォルトの名無しさん:2008/05/17(土) 06:11:47
正の整数って前提があるのか??
926デフォルトの名無しさん:2008/05/17(土) 06:12:20
あげてるバカは同一人物?
927デフォルトの名無しさん:2008/05/17(土) 06:13:28
>>923
グラフは、曲線で描ける。それから原稿用紙みたいにマス目を入れて
線が描かれている所を*で埋めれば出来上がるって事。
928デフォルトの名無しさん:2008/05/17(土) 06:16:35
>>927
*で出来た箱状のものが横に8個縦に16個ならぶってこと?はあり得ないよな。
意味がよくわからん。
929デフォルトの名無しさん:2008/05/17(土) 06:20:38
正方形のマスを描いてから、そこに曲線を描く。
そして曲線が描いてあるマスを塗りつぶすって事。
930デフォルトの名無しさん:2008/05/17(土) 06:23:39
>>929
塗りつぶすっていうのはどこから導かれるの?
曲線が複数ある状態だとダメってこと?
マスって何個あるの?
931929:2008/05/17(土) 06:24:51
プログラムの話ではなく、正方形の中に、グラフの一部が存在するということの説明をしてるんです。
932デフォルトの名無しさん:2008/05/17(土) 06:33:28
>>914の場合は円だから、cosθ、sinθを使うが、一方を解いてしまえばいいけど
3次とか4次関数とかが与えられたとすると、誤差の評価が難しくなるとは思う。
933デフォルトの名無しさん:2008/05/17(土) 06:33:49
正方形がよくわからん。
|x|<=4で120文字ってことは、ひとメモリが0.075になるよね?
xを0.075ずつ増やすループ内でyを求めてっていうような計算じゃ駄目なの?
実際にはこの逆にするだろうけど、考え方として。
934デフォルトの名無しさん:2008/05/17(土) 06:39:37
>>933
それでいいけど。解の公式が使えない場合とか、もう一方の解が求めにくい場合に
実際に値を入れてみて評価するっていう手もあるって事。
2次元のグラフは全てf(x,y)という関数で書ける。
たとえば、f(x,y)=x^2+y^2-1は、課題の2番目のグラフ。
(x,y)に値を入れてみて0に近ければそこら辺をグラフが通る。
935デフォルトの名無しさん:2008/05/17(土) 06:47:26
数学が絡むと難しいみたいだな


良問の予感
936デフォルトの名無しさん:2008/05/17(土) 06:50:25
麻呂の肛問も見てたもう
937デフォルトの名無しさん:2008/05/17(土) 06:50:34
>>934
てことは、マス関係なく-60<x<61,-120<y<121の範囲の点総てを当てはめて
計算して0に近いときは*を打って0から遠いときは空白を打てばいいんだよね?
どのくらい近い時に点を打つかはどう決めるの?
938デフォルトの名無しさん:2008/05/17(土) 06:53:44
ループの最深部で3万回弱しか回らないから十分早いはずだけど、
コマンドプロンプトでは遅いだろな。
なんであんな遅いんだろな。
939デフォルトの名無しさん:2008/05/17(土) 06:56:11
>>937
一般の2変数のグラフが与えられたときには、その誤差の評価が難しいと思っている。
940デフォルトの名無しさん:2008/05/17(土) 06:57:21
>>939
ヒントだけでいいから教えてよ。
けちけちすんなよ、友達だろ?
941デフォルトの名無しさん:2008/05/17(土) 06:59:58
描くマスの幅よりも、測定する幅を十分に細かくとり、どの位小さい時か? も小さめにしておけば
間違いは少なくなるとはおもう。
942デフォルトの名無しさん:2008/05/17(土) 07:06:12
難しく考えなくても四角に分割して円の中心から最も近い角と最も遠い角の円の中心からの距離を調べて
半径がその距離の間に入るかチェックすればいいだけじゃね?
943デフォルトの名無しさん:2008/05/17(土) 07:14:08
ここになんかかいてあるぞ

陰関数を描く
ここでは,微分方程式の解法の応用として,一般的な陰関数f(x,y)=0の描き方について考えてみます.
http://www.geocities.jp/ikuro_kotaro/koramu/hisenkei.htm
944デフォルトの名無しさん:2008/05/17(土) 07:14:23
要は等式が等式じゃなくなってるってことが誤差だと考えれば、誤差を1まで
許容した時にあるxに対してyがどれだけの幅でずれるかを求めればいいだけなんだろ?
なんでお前らって簡単なことを難しく言いたがるんだろな。
あと、15のマスっていうのがいまだにさっぱりわからん。
なんで納豆にソースかけるんだよって聞いたらマヨネーズはうまいって答えが
返ってきたような感じだ。
945デフォルトの名無しさん:2008/05/17(土) 07:17:45
>>943
何か難しくて解読不可能だから、易しく説明希望。
946デフォルトの名無しさん:2008/05/17(土) 07:23:45
>>895
f(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;

if(x>0 && y<0) s=4;
else s=0;
と同じ
sは0か4にしかならない

947デフォルトの名無しさん:2008/05/17(土) 07:27:02
[1] 授業単元:ゲーム製作でバビンチョ!
[2] 問題文(含コード&リンク): 4x4の盤でコンピュータ相手に3目並べ
ただし、2x2(1手で同時に2つ2個並びができる手)は禁じ手。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:vc++
 [3.3] 言語:C/C++どちらでも
[4] 期限:日が暮れるまで
[5] その他の制限:
表示と入力は標準関数で出来る範囲でおk。
948デフォルトの名無しさん:2008/05/17(土) 07:29:50
コンソールウィンドウの一行の最大文字数ってかえられんの?
やったことないし、マウスで引っ張ってもかわらないし
949デフォルトの名無しさん:2008/05/17(土) 07:37:49
950デフォルトの名無しさん:2008/05/17(土) 07:49:43
題意が陰関数のプロットなんだが...円であることをあぷりおりに使ってるけど

珠玉のコードだ!
951デフォルトの名無しさん:2008/05/17(土) 08:17:25
勝手に題意を妄想するなw
952914:2008/05/17(土) 08:34:14
>>949

早速のご回答ありがとうございました。
まだコンパイル実行はさせてませんが、
あってそうな雰囲気ですね。
参考にさせて頂きます。
953デフォルトの名無しさん:2008/05/17(土) 08:43:21
任意の陰関数が与えられたときに正常に動作した方が一般的だし
高得点になるとおもうよ。あともし、先生が3乗を2乗と書き間違えている所が
あったとしたら通じなくなると作り直さなければならない。
954デフォルトの名無しさん:2008/05/17(土) 08:47:25
>>953
ああそうだね。その通りだね
天が崩れ落ちてこないか心配だよね
955デフォルトの名無しさん:2008/05/17(土) 08:50:44
結局、簡単な問題をさも難しいかのように書いてたやつがいたってだけか。
956デフォルトの名無しさん:2008/05/17(土) 08:56:32
上手くデフォルメ出来た949が良い発想だったということ
957デフォルトの名無しさん:2008/05/17(土) 09:12:04
いやこれは簡単 全て円だからな
958デフォルトの名無しさん:2008/05/17(土) 09:16:26
だから、計算は楽なんだよ 計算は
959デフォルトの名無しさん:2008/05/17(土) 10:53:26
金になる宿題をプレゼントするぜ!

6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催。
5月22日より登録受付開始、6月2日よりグランプリ開始の予定。

○高島社長特別賞(シストレソフト買取価格) 1000万円
○シストレソフト部門賞 1位300万円 2位100万円 3位50万円
○トレード部門賞 1位300万円 2位100万円 3位50万円
http://system-trading.jp/news/index.php?ID=39
960デフォルトの名無しさん:2008/05/17(土) 11:08:31
>>959
種持ってない人にはいいな

手に入るかどうかも分からない賞金の為に費やす労力を考えると
期間が一年もあるから全自動にしておかないと飽きるけど
961デフォルトの名無しさん:2008/05/17(土) 13:45:40
[1] 授業単元:プログラミング実習

[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6580.txt
[3] 環境
 [3.1] OS:(WindowsXP)
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語:C++
[4] 期限:5月19日
[5] その他の制限:問題文中に記載してあります。


   よろしくお願いしますm(__)m 。
962デフォルトの名無しさん:2008/05/17(土) 14:29:35
>>961
#include<stdio.h>
int main()
{
int n, A[5], i, b, maxA, maxindex;

/* 手順(2) 入力と各桁への分解 */
scanf("%d", &n);
i = 5;
b = 10000;
while(i--) {
A[i] = (n / b) % 10;
b /= 10;
}

/* 手順(3) 最大桁の探索 */
/* 同じ数の桁は、より上位を最大桁とする */
i = maxindex = 4;
maxA = A[maxindex];
while(i--) {
if(A[i] > maxA) {
maxindex = i;
maxA = A[i];
}
}

/* 手順(4) 表示 */
printf("%d桁目が%dで最大でした。\n", maxindex+1, maxA);
return 0;
}
963デフォルトの名無しさん:2008/05/17(土) 14:34:38
i=0;
while(i<5) {
A[i++] = n % 10;
n /= 10;
}
の方がいいと思うけど
964デフォルトの名無しさん:2008/05/17(土) 14:38:47
>>959
FX版カブロボかと思ったら違うのね
ところでいろんなスレに貼ってるみたいだけど宣伝?
965デフォルトの名無しさん:2008/05/17(土) 14:41:25
[1] 授業単元:オペレーティングシステム論
[2] 問題文
?簡単なシェルを作れ
?fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作る
?最低限、以下の機能を実現する
1.プロンプトを出力する
2.ユーザに端末からコマンドを入力させる
3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する
4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ
5.1に戻る

[3] 環境
OS:Windows/Linux
コンパイラ:gcc
言語: C
[4] 期限: 2008年5/17 16時
実行結果もお願いします
966デフォルトの名無しさん:2008/05/17(土) 14:41:55
>>961
int x[5],max,ind;
char ca[6];
printf("入力?\n");
scanf("%s",ca);
int c = 4;
while(c>=0)
{
x[c] = ca[4-c]-'0';
c--;
}
c = 1;
max = x[0];
while(c<5)
{
if(max < x[c])
{
max = x[c];
ind = c+1;
}
c++;
}
printf("max:%d\nind:%d\n",max,ind);
967デフォルトの名無しさん:2008/05/17(土) 14:52:08
また口だけの奴沸きまくりだな
質問者、回答者以外邪魔
968デフォルトの名無しさん:2008/05/17(土) 14:54:14
>>964
いろんなスレに貼り付けているやつは違うやつ。
969デフォルトの名無しさん:2008/05/17(土) 14:56:05
4,5,6進数の九九の表を作ってください。
970デフォルトの名無しさん:2008/05/17(土) 14:58:44
情報処理の課題です。
C言語を使います。
if文の実習課題です。

【問題】
3つの数字a,b,cを入力し、大きい順に入れ替えて出力するプログラムを作りなさい。


よろしくお願いします。
971デフォルトの名無しさん:2008/05/17(土) 15:03:24
Linux以外の質問は禁止にしたほうがよさそうだな。
口だけのやつが多すぎる。
972デフォルトの名無しさん:2008/05/17(土) 15:07:47
>>963
問題文に、5桁目から順番にと書いてある。
973デフォルトの名無しさん:2008/05/17(土) 15:17:41
>>969
#include<stdio.h>
void print_value(int value, int base)
{
putchar(' ');
putchar((value / base) ? ('0' + value / base) : ' ');
putchar('0' + value % base);
}

void show_matrix(int base)
{
int x, y;
printf("%d進数の九九\n ", base);
for(x = 1; x < base; x ++)
printf(" %2d", x);
printf("\n");
for(y = 1; y < base; y ++) {
printf("%d", y );
for(x = 1; x < base; x ++)
print_value(x*y, base);
printf("\n");
}
printf("\n");
}

int main()
{
show_matrix(4);
show_matrix(5);
show_matrix(6);
}
974デフォルトの名無しさん:2008/05/17(土) 15:19:37
>>970
>>1読んで書き直し
制限事項に「if文で大きさの判定をすること」って書くようにね
975デフォルトの名無しさん:2008/05/17(土) 15:28:33
[1] 授業単元:C言語による数値計算演習
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6581.txt
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] Windows Visual Studio
 [3.3] 言語:C++
[4] 期限:08年5月20日まで


自分でも一応作ってみたのですがエラーがでてきて困ってます。
どうかよろしくお願いします。
976デフォルトの名無しさん:2008/05/17(土) 15:28:50
>>970
#include<stdio.h>
void swap(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int a, b, c;
fputs("a = ", stdout);
scanf("%d", &a);
fputs("b = ", stdout);
scanf("%d", &b);
fputs("c = ", stdout);
scanf("%d", &c);
printf("before: a = %d, b = %d, c = %d\n", a, b, c);
if (a < b) swap(&a, &b);
if (b < c) swap(&b, &c);
if (a < b) swap(&a, &b);
printf("after : a = %d, b = %d, c = %d", a, b, c);
return 0;
}
977デフォルトの名無しさん:2008/05/17(土) 15:31:41
>>664
亀レスなんですが、アルゴリズムの解説をしてもらえませんか?
978 ◆Tl0XBL9DS2 :2008/05/17(土) 15:34:43
1 情報処理
2 3つの数字a,b,cを入力し、大きい順に入れ替えて出力するプログラムを作りなさい。
3 Windows
C言語
4 2008年5月18日00:00まで
5 if文で大きさの判定をする

よろしくお願いします。
979デフォルトの名無しさん:2008/05/17(土) 15:38:10 BE:113605834-2BP(417)
次スレ立てました
C/C++の宿題を片付けます 107代目
http://pc11.2ch.net/test/read.cgi/tech/1211006255/
980デフォルトの名無しさん:2008/05/17(土) 15:39:01
>>975
ind = Jacobi(n, ct, eps, A, A1, A2, X1, X2); //←こうすべし
981961:2008/05/17(土) 15:40:58
>>962
>>966

実行結果確認しました。
ありがとうございます.m(__)m 。
982デフォルトの名無しさん:2008/05/17(土) 15:52:20
>>978
#include<stdio.h>
int main( void ){
int a,b,c,d;
printf("a:"); scanf("%d",&a);
printf("b:"); scanf("%d",&b);
printf("c:"); scanf("%d",&c);
if( a < b ){
d = a; a = b; b = d;
}
if( b < c ){
d = c; c = b; b = d;
}
if( a < b ){
d = a; a = b; b = d;
}
printf(" a = %d, b = %d, c = %d\n", a, b, c );
return 0;
}
983デフォルトの名無しさん:2008/05/17(土) 16:22:10
>>980
動作確認、正常に動いてくれました。
本当にありがとうございます。m(__)m
984デフォルトの名無しさん:2008/05/17(土) 16:46:32
985 ◆Tl0XBL9DS2 :2008/05/17(土) 16:50:45
>>976
>>982
ありがとうございました!!
986 ◆8x8z91r9YM :2008/05/17(土) 18:11:50
[1] 授業単元:C言語
[2] 問題文
・半角文字を入力したときに文字を判別するプログラムを作成せよ
・「e」と入力されたとき、プログラムを終了するか問いかけられるようにせよ([y/n])
[3] 環境
 [3.1] OS:Windows XP
 [3.2] Visual Studio
 [3.3] 言語:C
[4] 期限:08年5月18日まで
[5]
・while文かdo while文を使って下さい
・判別する文字はアスキーコードの21(!)〜7D(~)までです
987デフォルトの名無しさん:2008/05/17(土) 18:17:35
>>986
文字の判別って何をやればいいの?
988 ◆8x8z91r9YM :2008/05/17(土) 18:35:47
>>987
'1'が入力されたら数字、'\'が入力されたら記号といった具合に
scanfで入力した文字をprintfで出力・判別する感じです
言葉足らずですいません
989デフォルトの名無しさん:2008/05/17(土) 18:42:15
>>988
「といった具合」では問題不備だよ。
・数字
・アルファベット
・記号
この三種類でよい?
アルファベットの大文字小文字は区別する?
990 ◆8x8z91r9YM :2008/05/17(土) 18:43:20
>>989
大文字と小文字を区別して下さい
度々申し訳ないです
991デフォルトの名無しさん:2008/05/17(土) 18:47:48
992 ◆WXMLAl/8hY :2008/05/17(土) 19:03:05
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
トポロジカルソートを行うプログラムを作成せよ。
ただし、ソーティングを行うグラフは下記の通り。
#define N 8
int edge[N][N] = {
/* 0 1 2 3 4 5 6 7 */
  {0,1,0,0,1,0,0,0}, /* 0 */
  {0,0,0,0,0,0,1,0}, /* 1 */
  {0,0,0,1,0,0,1,0}, /* 2 */
  {0,0,0,0,0,0,0,1}, /* 3 */
  {0,0,0,0,0,1,0,0}, /* 4 */
  {0,0,0,0,0,0,1,0}, /* 5 */
  {0,0,0,0,0,0,0,1}, /* 6 */
  {0,0,0,0,0,0,0,0} /* 7 */
};
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 2008/05/20(Tue)
[5] その他の制限: 特にないです

よろしくお願いします。
993デフォルトの名無しさん:2008/05/17(土) 19:27:14
>>986
char c[2];

while(1)
{
 printf("入力してください\n");
 scanf("%s",c);

 if(c[0]=='e')
 {
  printf("終了?[y/n]\n");
  scanf("%s",c);
  if(c[0]=='y')
  {
   printf("終了\n");
   return 0;
  }
  if(c[0]=='n') continue;
 }

 if(c[0]>=0x21 && c[0]<=0x7D)
 {
  printf("入力された文字:%c\n",c[0]);
 }else{
 printf("入力された文字は範囲外\n");
 }
}
994デフォルトの名無しさん:2008/05/17(土) 19:30:57
>>992
トポロジカルオーダーの逆順で表示する

#define N 8 
int edge[N][N] = { 
/* 0 1 2 3 4 5 6 7 */ 
  {0,1,0,0,1,0,0,0}, /* 0 */ 
  {0,0,0,0,0,0,1,0}, /* 1 */ 
  {0,0,0,1,0,0,1,0}, /* 2 */ 
  {0,0,0,0,0,0,0,1}, /* 3 */ 
  {0,0,0,0,0,1,0,0}, /* 4 */ 
  {0,0,0,0,0,0,1,0}, /* 5 */ 
  {0,0,0,0,0,0,0,1}, /* 6 */ 
  {0,0,0,0,0,0,0,0} /* 7 */ 
}; 
int mark[N];
void visit(int v) {
  int i;
  for (i = 0; i < N; ++i)
    if (edge[v][i] && !mark[i]) visit(i);
  printf("%d ", v);
  mark[v] = 1;
}
main() {
  int i;
  for (i = 0; i < N; ++i) 
    if (!mark[i]) visit(i);
}
995 ◆8x8z91r9YM :2008/05/17(土) 19:55:33
>>993
後出しで申し訳ないのですが、>>990に書いてあるとおり数字・記号・アルファベット(大小)の区別もしたいのです…
996デフォルトの名無しさん:2008/05/17(土) 20:09:43
>>995
 if(c[0]>=0x21 && c[0]<=0x7D)
 {
  printf("入力された文字:%c\n",c[0]);
 }else{
 printf("入力された文字は範囲外\n");
 }

 if((c[0]>=0x21 && c[0]<=0x2f) || (c[0]>=0x3a && c[0]<=0x40) || (c[0]>=0x5b && c[0]<=0x60) || (c[0]>=0x7b && c[0]<=0x7d))
 {
  printf("入力された文字は記号の %c\n",c[0]);
  continue;
 }
 if(c[0]>=0x30 && c[0]<=0x39)
 {
  printf("入力された文字は数字の %c\n",c[0]);
  continue;
 }
 if(c[0]>=0x41 && c[0]<=0x5a)
 {
  printf("入力された文字は大文字英字の %c\n",c[0]);
  continue;
 }
 if(c[0]>=0x61 && c[0]<=0x7a)
 {
  printf("入力された文字は小文字英字の %c\n",c[0]);
  continue;
 }
 printf("入力された文字は範囲外\n");
に置き換え
997デフォルトの名無しさん:2008/05/17(土) 20:31:37
2次元配列変数sampleの中身を表示し、sampleの4つの値の平均値をresultの1つの値とする
プログラムを作成せよ。

実行例
sample
13 36 18 54 83 12
25 62 19 78 21 5
41 93 87 21 87 11
61 81 68 46 35 98

result
34 42 30
69 56 58

この問題みなさんはできるかな?
998デフォルトの名無しさん:2008/05/17(土) 20:33:18
999 ◆WXMLAl/8hY :2008/05/17(土) 20:46:31
>>994

お早い回答ありがとうございます。
とても参考になりましたm(__)m
1000 ◆8x8z91r9YM :2008/05/17(土) 20:47:41
>>987,>>989,>>993,>>996
ありがとうございました
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。