10/06/18 06:27:59
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】 URLリンク(chomework.sakura.ne.jp)
【wiki】 URLリンク(www23.atwiki.jp)
前スレ
C/C++の宿題片付けます 136代目
スレリンク(tech板)
2:デフォルトの名無しさん
10/06/18 06:28:44
前スレ最後で騒いでしまい、埋まってしまったので立てました。
3:デフォルトの名無しさん
10/06/18 06:45:53
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/percpu.h>
#include <linux/slab.h>
#include <linux/capability.h>
#include <linux/blkdev.h>
#include <linux/file.h>
#include <linux/quotaops.h>
#include <linux/highmem.h>
#include <linux/module.h>
4:デフォルトの名無しさん
10/06/18 06:52:42
> (解読可能であるかどうかの厳格な判定は知られていない)
まれに複数の復号結果が生まれるかもしれないけど、一意になる可能性は結構高いのかもしれない。
復号化は昼休みにでも挑戦。
5:デフォルトの名無しさん
10/06/18 07:08:03
次の問題を解くプログラムを再帰を使って実装せよ。
問題 コインの種類として、1,5,8,10,15の5種類を与える。与えられた金額m
に対して、最小枚数のコインでmを支払うときの枚数を求めよ。
6:デフォルトの名無しさん
10/06/18 07:36:59
>>5
#include <stdio.h>
int coins[5] = {15,10,8,5,1};
int mod(int m, int coin)
{
int a, b;
if(coins[coin]==1)
{
return m;
}
a = m / coins[coin];
b = m % coins[coin];
return (mod(b, ++coin) + a);
}
int main(int argc, char ** argv)
{
int m;
printf("m=?\n");
scanf("%d", &m);
printf("%d mai.\n", mod(m, 0));
return 0;
}
7:デフォルトの名無しさん
10/06/18 07:44:43
解答ありがとうございます。
プログラムは、「再帰を使って」、
出力は、「最小枚数」でお願いします。
(例えば、m=33のときは、5枚ではなく3枚を出力)
8:デフォルトの名無しさん
10/06/18 07:58:09
何年か前にそんな感じの問題見たなあ
9:6
10/06/18 08:09:01
33円の時は15円が2枚、1円が3枚で、5枚が最小だと思うんだが、そう言う問題じゃなくて?
再帰はしてるよ
10:デフォルトの名無しさん
10/06/18 08:16:13
33円のときは、15円、10円、8円それぞれ1枚ずつで3枚。
こっちのほうが最小ですよね?
11:デフォルトの名無しさん
10/06/18 08:20:17
#include <stdio.h>
int mincoin(int num, int n, int idx, int *coins, int maxidx);
int main(){
int coins[] = {1,5,8,10,15};
int num=33;
int n = mincoin(num, 0, 0, coins, sizeof(coins)/sizeof(coins[0]));
printf("%d", n);
return 0;
}
int mincoin(int num, int n, int idx, int *coins, int maxidx){
int i, min, res, rest;
if(num == 0){
return n;
}
min = 10000000;
for(i = idx;i < maxidx;i++){
rest = num-coins[i];
if(rest < 0) break;
res = mincoin(rest, n+1, i, coins, maxidx);
if(res < min){
min = res;
}
}
return min;
}
12:デフォルトの名無しさん
10/06/18 08:27:19
>>11
エラーがでます
13:デフォルトの名無しさん
10/06/18 08:30:15
そりゃよかったね
14:6
10/06/18 08:42:01
>11
なるほど。。賢いやり方だ。
15:デフォルトの名無しさん
10/06/18 10:52:18
>>11,14
Dynamic Programming だね。
16:デフォルトの名無しさん
10/06/18 11:06:27
数が大きくなるととんでもなく処理時間かかるし、賢いやり方とはいえないと思うが
17:デフォルトの名無しさん
10/06/18 11:25:37
>>5
#include <stdio.h>
int min;
void count(int n, int idx, int cnt, int *coin)
{
int i, temp = coin[idx];
if(n % temp == 0) {
cnt += n / temp;
if(cnt < min) min = cnt;
return;
}
for(i = 0; i * temp < n; i++) count(n - i * temp, idx-1, cnt + i, coin);
}
int main(void)
{
int coin[] = {1, 5, 8, 10, 15}, n;
scanf("%d", &n);
min = n;
count(n, sizeof coin / sizeof *coin - 1, 0, coin);
printf("%d\n", min);
return 0;
}
18:デフォルトの名無しさん
10/06/18 11:27:18
>>16
もっといい方法が在るなら、コードか参考urlをどうぞ。
19:17
10/06/18 11:50:26
ちょっと改良
#include <stdio.h>
int min;
void count(int n, int idx, int cnt, int *coin)
{
int i, temp = coin[idx];
if(min <= cnt) return;
if(n % temp == 0) {
cnt += n / temp;
if(cnt < min) min = cnt;
return;
}
for(i = n / temp; i >= 0; i--) count(n - i * temp, idx - 1, cnt + i, coin);
}
int main(void)
{
int n, coin[] = {1, 5, 8, 10, 15};
scanf("%d", &n);
min = n;
count(n, sizeof coin / sizeof *coin - 1, 0, coin);
printf("%d\n", min);
return 0;
}
20:>>3-4
10/06/18 12:03:12
961 :デフォルトの名無しさん :2010/06/18(金) 01:29:00
[1]授業単元:暗号理論(大学専門コース)
[2]問題文(含コード&リンク)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]環境
[3-1] OS:C/C++処理系があれば何でも可
[3-2] コンパイラ:gccに近い処理系が理想
[3-3] 言語:C/C++どちらでも可
[4] 9/15迄(夏休み終了まで)
[5] 難しいそうです。無理しないほうがいいそうです。ただ出来たら
テストの点に無関係に単位をくれるそうです
21:デフォルトの名無しさん
10/06/18 14:03:32
解いた奴には天地の怒りの鉄槌と災厄が降り掛かるだろう系の
問題ぢゃね?
22:デフォルトの名無しさん
10/06/18 14:14:25
/がアルファベットに変換されるのってコメントとの関係なのかな
23:デフォルトの名無しさん
10/06/18 14:43:47
> (解読可能であるかどうかの厳格な判定は知られていない)
デクリプトには答えが有るとは言ってない、に読める。
エンクリプトは何とか完成できたが、iii と iik, ijk, ijj の区別をつけるデクリプトは無理。
1番目の文字が、仮に、デクリプトするれば i と分かっても、
2通目の文字に j があれば ii と ij の2通り以上、46通り以下に可能性が分かれる。
なら、次文字から推測できる全候補をプログラムで表示するようにすればいいんではないだろうか。
24:デフォルトの名無しさん
10/06/18 15:22:00
解読したら正解のコードになるんだったら面白かったのにそうでもないっぽいよね
25:デフォルトの名無しさん
10/06/18 15:43:05
>>24
まあ一週間くらい待ってて
26:デフォルトの名無しさん
10/06/18 15:49:55
>>25
作ってるなら途中のコードキボンヌ
27:デフォルトの名無しさん
10/06/18 16:43:46
>>26
動くのはエンコードだけだからいらんだろ
28:デフォルトの名無しさん
10/06/18 18:06:31
とりあえずここまで
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/percpu.h>
#include <linux/slab.h>
#include <linux/capability.h>
#include <linux/blkdev.h>
#include <linux/file.h>
#include <linux/quotaops.h>
#include <linux/highmem.h>
#include <linux/module.h>
#include <linux/writeback.h>
#include <linux/hash.h>
#include <linux/suspend.h>
#include <linux/buffer_head.h>
#include <linux/task_io_accounting_ops.h>
#include <linux/bio.h>
#include <linux/notifier.h>
#include <linux/cpu.h>
#include <linux/bitops.h>
#include <linux/mpage.h>
#include <linux/bit_spinlock.h>
static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
#define BH_ENTRY(list) list_entry((list), struct buffer_head
29:デフォルトの名無しさん
10/06/18 18:14:16
>>23
解読できた単語を配列に保存していって、iiとijとかのように区別しにくいい単語に出あったら、保存した中にある単語を優先する、とかはどうだろう。
30:デフォルトの名無しさん
10/06/18 18:28:33
#include <stejo.h>
kou malp(vpmf){
nqv qnborc_krrsd_lvgesftgp_mswt_iqghui;
rvx sdjtwuekv_jywx_zjyzfAg;
wxB xyCu_vowDEh_ztyyxnk;
fyu(zplAvm_oAzAn_pzhowpBqB_qBFC_lChrCs=0;
DqtDxu_rEDEv_sAiwyxFyE_tFGG_mFizGA<=11234;
HrBGzC_uIHID_vBjEAFJGH_wJHK_nIjHKI++)
gLB(JfoKLLgpM_kACD_BJIJiKj=5;
NhqOMPirQ_lCEF_DKLMkNl<=223456; RjsSNTktU_mEGH_FLOPmQn++)
hMC( VWRN_OsPSTo_XDIOQxM=6;
YZUR_StTVWp_aEJPUyN<345677;
bcXV_WuXYZq_dFKQYzO++)
pGeRai("%d %d %d %d",
fgbZ_avbcdr_hHLScAP,
ijed_ewffgs_kIMTgBQ,
llumUnmvo_nGNO_HRhitju,hxSpJT_CiVWU_DPkVKWXXq_Ejkk_wrkYYZ);
LvlQMZ 7;
}
31:デフォルトの名無しさん
10/06/18 18:31:32
>>29
全検索すると候補の数が一万を超えることも多いので
辞書使わないと厳しいです
32:デフォルトの名無しさん
10/06/18 18:49:55
これ見てよ↓
URLリンク(livedoor.blogimg.jp)
ばらまこうぜ!
33:デフォルトの名無しさん
10/06/18 18:56:54
>>30
#include <stdio.h>
int main(void){
int omaira_konna_kudaranai_koto_higana;
int ichinichi_jyuu_yattete;
int iito_omotte_irunoka;
for(omaira_konna_kudaranai_koto_higana=0;
omaira_konna_kudaranai_koto_higana<=10000;
omaira_konna_kudaranai_koto_higana++)
for(ichinichi_jyuu_yattete=0;
ichinichi_jyuu_yattete<=123456; ichinichi_jyuu_yattete++)
for( iito_omotte_irunoka=0;
iito_omotte_irunoka<234567;
iito_omotte_irunoka++)
printf("%d %d %d %d",
iito_omotte_irunoka,
iito_omotte_irunoka,
ichinichi_jyuu_yattete,omaira_konna_kudaranai_koto_higana);
return 0;
}
34:デフォルトの名無しさん
10/06/18 19:02:03
>>33
すげぇ。じゃデコーダーほぼ出来てるんだ
ん?
35:デフォルトの名無しさん
10/06/18 19:13:22
C言語の構文からマクロを乱用してないとして
void
for
return
を手がかりに逆算したい
36:デフォルトの名無しさん
10/06/18 19:18:47
>>35
do と goto と continue も追加で
37:デフォルトの名無しさん
10/06/18 19:21:52
if もだ
38:33
10/06/18 20:06:02
>>34
全然できてないよ
>>33 はかなりの部分人力で解いたものw
39:デフォルトの名無しさん
10/06/18 20:28:21
URLリンク(kansai2channeler.hp.infoseek.co.jp)
とりあえず1行目だけのデコード結果をうpしたからエンコーダのデバッグにでも使ってくれ
2行目までもデコードしてみたがファイルが1G越えたから途中でやめた
効率的にデコードするには構文解析するといいかもしれない
たとえば#w7 -> #include, w3( -> if(, w5( -> while( (w:文字、その後の数字は文字の個数)
などのヒントをあらかじめ与えておき正しく変換できないときは枝狩する
また、シンボルテーブルを作り、シンボルテーブルにない変数を使用しようとしたら枝狩するなど
構文解析によりかなりの枝狩ができると思われる(#define HOGE forとかされると死ぬが)
40:デフォルトの名無しさん
10/06/18 20:31:24
>>20 のlinuxのディストリビューション分かる人いませんか?
手元にある VineLinux3.2 kernel2.4 を見てみたけど違うみたいでした
41:デフォルトの名無しさん
10/06/18 20:57:47
前にエラー文字列で検索したら、どうもこれに近い。
URLリンク(www.google.com)
あと、prob.txtの引数の間のtabはなんなんだろう。
ソースコードを整形したのかな。
42:デフォルトの名無しさん
10/06/18 21:03:50
>>40
別にそれは関係ないと思うよ。
復号したコードをコンパイルするとかいう話でもないしね。
43:デフォルトの名無しさん
10/06/18 21:04:24
>>41
static void buffer_io_error(struct buffer_head *bh)
までは手動で頑張ったのにw
44:40
10/06/18 21:07:55
>>42
識別子を辞書登録するのが大変なので
include しているファイルの中身も読ませようと思っていたのです
が、>>41 のおかげで対応が分かるので必要なくなりました
45:デフォルトの名無しさん
10/06/18 21:08:59
復号したらそのままコンパイル出来るものを、添付書類無し
で再頒布するのはGPLに抵触しかねないから、
コメントとか外したりいろいろ細工してる可能性もあるだろ
46:デフォルトの名無しさん
10/06/18 21:15:28
>>44
ああー、なるほど。そういう理由だったのか。スマソ。
47:デフォルトの名無しさん
10/06/18 21:57:17
この行より前は >>41 と一致する
YCvXRg("クォートされた部分も暗号化対象外\n",wYkyL);
48:デフォルトの名無しさん
10/06/18 21:58:17
>>45
この場合頒布してるのは質問者?回答者?
49:デフォルトの名無しさん
10/06/18 22:12:23
該当箇所に printf("", inode); を挿入したら完全に一致した
50:デフォルトの名無しさん
10/06/18 22:38:46
[1] 授業単元:オブジェクトプログラミング
[2] 問題文(含コード&リンク):図1のプログラムを参考に、文字配列とアドレスの関係、すなわち、
char str[ ] = “abc”とアドレスの関係を調べよ。特にアドレスが幾つずつ変化するかを理解すること。
尚、char型変数へのポインタ変数は、char *ptr;になることを注意すること。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月19日[5] その他の制限:int main(void){から始まる
図1
#include<stdio.h>
int main(void){
int a[4];
int *p;
p = &a[0];
for(i=0;i<4;i++){
a[i] = i;
}
for(i=0;i<4;i++){
printf(“a[%d]=%d\n”i,a[i]);
printf(“p = %p\n”,p);
printf(“*p = $d\n\n”, *p);
}
}
51:デフォルトの名無しさん
10/06/18 22:40:07
>>50
図1の実行例
a[0]=0
p = 0x22ccd0
*p = 0
a[1]=1
p = 0x22ccd4
*p = 2
a[2]=2
p = 0x22ccd8
*p = 2
a[3]=3
p = 0x22ccdc
*p = 3
つまり、int型では4byteずつ変化する。これをchar型は1byteずつ変化するということを示しなさいということです。
52:デフォルトの名無しさん
10/06/18 22:43:49
>>51
charに変えるのが出来ないっていってますか?
53:デフォルトの名無しさん
10/06/18 22:50:29
>>52
そうです。
それから、もうひとつ
図1をdouble型に変えるのもお願いします。
54:デフォルトの名無しさん
10/06/19 01:54:57
こういうこと?
#include <stdio.h>
int main(void) {
char str[] = "abc", *ptr;
int i;
ptr = &str[0];
for(i = 0; str[i]; i++, ptr++) {
printf("str[%d] = %c\n", i, str[i]);
printf("ptr = %p\n", ptr);
printf("*ptr = %c\n\n", *ptr);
}
return 0;
}
55:デフォルトの名無しさん
10/06/19 02:49:18
[1] 授業単元:
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: ([2010年06月20日23:59まで]
[5] その他の制限:
56:デフォルトの名無しさん
10/06/19 03:00:29
>>55
#include <stdlib.h>
#include <time.h>
void random_format(int num_data, int array[])
{
int i;
srand(time(NULL));
for(i = 0; i < num_data; i++)
array[i] = (int)( (double)rand() / RAND_MAX * 100.0 );
}
57:デフォルトの名無しさん
10/06/19 05:15:59
>>55
0~99の数値が全て1回ずつ必要なら、以下でok。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NMAX 100
int main(void)
{
int i, a[NMAX], tmp, w;
srand(time(NULL));
for (i = 0; i < NMAX; i++)
a[i] = i;
for (i = 0; i < NMAX; i++) {
w = rand() % (NMAX - i) + i;
tmp = a[w];
a[w] = a[i];
a[i] = tmp;
}
return 0;
}
58:デフォルトの名無しさん
10/06/19 05:33:12
>11
>min = 10000000;
10000000って数字はどっから出てきたの?
59:デフォルトの名無しさん
10/06/19 06:19:17
>>58
有り得ないほどの大きい数字なら何でも良かったんじゃないかな?
min = num/coins[0];
でいいと思う。
60:デフォルトの名無しさん
10/06/19 12:42:30
>>28
バージョンは分からんが、Linuxカーネルのfs/buffer.cをエンコードしてるのか?
61:デフォルトの名無しさん
10/06/19 12:43:06
for(i = 0; i < NMAX; i++) {
w = rand() % (i + 1);
a[i] = a[w];
a[w] = i;
}
62:デフォルトの名無しさん
10/06/19 12:48:14
>>20
一応MFCでデコードしながら、分からなくなったらユーザに聞いてくるアプリにしてみた。
コメントとかリテラルとか、まだ一回も動いてないコードとか有るし、
デコードした文字列をエディットに出力して、ユーザが判断する材料にさせてるんだが、
うまくエディットコントロールスクロールさせられなくて面倒くさくなって放置してる。
(メインスレッドでループしながらエディットに出力して、且つスクロールさせようってのがダメなんだろうが。。)
需要があればうpします。
一旦入力した候補はhistファイルに取っておくので、これを使って地道にやってけばいずれデコード出来ると思う。
63:デフォルトの名無しさん
10/06/19 16:02:35
>>20 のエンコード部分
typedef unsigned char uchar;
void encode_output(int moji)
{
static int is_first=1;
static uchar next_table[256], table[256];
if(is_first)
{
int i;
for(i=0;i<256;i++) next_table[i]=table[i]=i;
for(i='A';i<'Z';i++) next_table[i]=i+1;
next_table[i]='a';
for(i='a';i<'z';i++) next_table[i]=i+1;
next_table[i]='A';
for(i='0';i<'9';i++) next_table[i]=i+1;
next_table[i]='0';
is_first=0;
}
putchar(table[moji]);
table[moji]=next_table[table[moji]];
}
64:デフォルトの名無しさん
10/06/19 16:26:50
>>54
ありがとうございました。
65:デフォルトの名無しさん
10/06/19 16:49:54
[1] 授業単元:オブジェクトプログラミング
[2] 問題文(含コード&リンク):以下のプログラムをdouble型にせよ。
尚、double型変数へのポインタ変数は、double *ptr;になることに注意すること。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月19日[5] その他の制限:int main(void){から始まる
#include<stdio.h>
int main(void){
int a[4];
int *p;
p = &a[0];
for(i=0;i<4;i++){
a[i] = i;
}
for(i=0;i<4;i++){
printf(“a[%d]=%d\n”i,a[i]);
printf(“p = %p\n”,p);
printf(“*p = $d\n\n”, *p);
}
}
実行例は>>51と同じです
66:023
10/06/19 17:08:52
#include <stdio.h>
void encode_output(int moji);
int main(void){ int c, slash = 0;
while((c = getchar()) != EOF) {
if(c>='a' && c<='z' || c>='A' && c<='Z' || c>='0' && c<='9'){
if(slash){ /* /X は、同じ文字で2回出力 */
encode_output(c); slash = 0; }
encode_output(c);
} else if(c == '*') {
if(slash){ /* /*のコメントは読み飛ばす */
do { while(getchar() != '*'); } while(getchar() != '/');
slash = 0;
} else putchar(c);
} else if(c == '/') {
if(slash) { /* // comment は、そのまま出力 */
putchar(c);
do putchar(c); while((c = getchar()) != '\n');
putchar(c);
slash = 0;
} else slash = 1;
} else if(c == '"') { /* "string" は、そのまま出力 */
if(slash) {slash = 0; putchar(c);} /* /X は、同じ文字で2回出力 */
do {
if(c == '/') {slash = 1; continue;}
if(slash) {slash = 0; putchar(c);}
putchar(c);
} while((c = getchar()) != '"');
putchar(c);
} else {
if(slash) {slash = 0; putchar(c);} /* /X は、同じ文字で2回出力 */
putchar(c); }
}}
67:デフォルトの名無しさん
10/06/19 18:05:22
>>5
亀ですがこういうのはどうなんでしょう?
#include <stdio.h>
int coin(int m,int i,int sum)
{ int a[]={1,5,8,10,15};
sum=sum+m/a[i];m=m%a[i];
if (m==0)return sum;
if (!i){sum+=m;return sum;}
if ((m%a[i]==3||m%a[i]==4)&&(sum)){sum--;m=m+a[i];}
return coin(m,i-1,sum);}
int main(void){
int x;
printf("金額を入力してください:");
scanf("%d",&x);
printf("最小枚数は%d枚です。\n",coin(x,4,0));
return 0;}
68:デフォルトの名無しさん
10/06/19 21:15:54
>>62
見せて見せて
69:62
10/06/19 21:54:03
>>68
URLリンク(kansai2channeler.hp.infoseek.co.jp)
うpしました。
input.txtに暗号化された内容をおいておきます。
hist.txtは履歴の入力。実行するとhistout.txtができるので、それをhist.txtに書き換えればおk。
deb.txtにデバッグログ
dec.txtに復号化したもの
enc.txtは今のところ何も出ない。
です。
一応7行目くらいまでやって放置してます。
バグもいっぱいあると思うんで、実行しながら候補を入れていき、バグ取りしてけば・・というレベルです。
70:デフォルトの名無しさん
10/06/19 21:55:47
>>67
興味深いな。
> if ((m%a[i]==3||m%a[i]==4)&&(sum)){sum--;m=m+a[i];}
3,4になるプロセスが判らない。
71:デフォルトの名無しさん
10/06/19 22:22:38
特定の組み合わせ限定だからだろ
72:デフォルトの名無しさん
10/06/19 22:56:00
>>65です
誰かよろしくお願いします。
73:デフォルトの名無しさん
10/06/19 23:02:49
>>70
最初の3,4以外の、8以上のm%5で3,4になる数字は最小枚数を求める時必ず8が入るので
15と10で割り過ぎないように先に8で割るようにしました。
74:73
10/06/19 23:07:36
×先に8で割るように ○後で8で割れるように
75:デフォルトの名無しさん
10/06/19 23:12:30
>>65
#include<stdio.h>
int main(void){
int i;
double a[4];
double *p;
p = a;
for(i = 0; i < 4; i++){
a[i] = i;
}
for(i = 0; i < 4; i++, p++){
printf("a[%d]=%f\n", i, a[i]);
printf("p = %p\n", p);
printf("*p = %f\n\n", *p);
}
return 0;
}
76:デフォルトの名無しさん
10/06/20 01:10:03
>>73
なるほど。
オーソドックスな解法は、>>17のようなDPだろうけど、>>67でも出来る、
という事は、条件付きで数学的に等価なのかもな。
77:デフォルトの名無しさん
10/06/20 02:55:07
>>75
ありがとうございました
78:デフォルトの名無しさん
10/06/20 02:57:10
[1] 授業単元:オブジェクトプログラミング
[2] 問題文(含コード&リンク):以下のプログラムをdouble型について調べるプログラムを作成せよ。
尚、単純ポインタが指す値をprintf(“%p) =0x%x\n”, ptr_d, *ptr_d);
を用いて表示すると図1のような実行結果を得るが、図2のように表示をするようにしなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月20日[5] その他の制限:int main(void){から始まる
79:デフォルトの名無しさん
10/06/20 02:58:58
#include <stdio.h>
int main(void){
char src[32], dst[32];
char *ptr_c;
int *ptr_i, *ptr;
double *ptr_d;
int i;
// src[i]配列にデータを格納
for(i=0; i<32; i++){
src[i] = i;
}
// dst[i]配列へのコピー
for(i=0; i<32; i++){
dst[i] = src[i];
}
//配列の出力
for(i=0; i<32; i++){
printf("dst[%d]=0x%x\n", i, dst[i]);
}
// ptr_cにsrcの先頭アドレスをコピー
ptr_c = src;
// ptrを使用してsrc[i]のデータを内容を出力する。
for(i=0; i<32; i++){
printf("%p) = 0x%x\n", ptr_c, *ptr_c);
ptr_c++;
}
}
80:デフォルトの名無しさん
10/06/20 03:00:45
図1
0x22ccc0) = 0.3020100
0x22ccc8) = 0.b0a0306
0x22ccd0) = 0.13121110
0x22ccd8) = 0.1b1a1918
図2
ptc_d:0x22ccc0) = 0.3020100
0x22ccc4) = 0.7060504
ptr_d:0x22ccc8) = 0.b0a0306
0x22cccc) = 0.f0e0d0e
ptr_d:0x22ccd0) = 0.13121110
0x22ccd4) = 0.17161514
ptr_d:0x22ccd8) = 0.1b1a1918
0x22ccdc) = 0.1f1e1d1c
81:023
10/06/20 13:34:27
>>069
VS2005で動かしてみました。
ゲームとしては7行くらいでゲームオーバーでもかまいません。
ただ、/を入れた後の文字選択が2回必要なのはなぜでしょうか。
82:デフォルトの名無しさん
10/06/20 14:57:39
>>78です
どなたか、よろしくお願いします。
83:デフォルトの名無しさん
10/06/20 15:06:53
以前のヤツからそうなんだけど、書いてあるコード実行しても図の例と同じにはならないんだよな
84:デフォルトの名無しさん
10/06/20 15:49:25
すみません。説明不足でした。
ソースコードは、int型で書かれています。これを、double型に書き換えていただきたいんです。
そして、double型に書き換えたものを実行すると、図2のように表示せよという問題です。
よろしくお願いします。
85:デフォルトの名無しさん
10/06/20 16:16:30
>>78
#include<stdio.h>
#define SIZE 4
int main(void){
int i;
double src[SIZE], dst[SIZE];
double *ptr_d;
// データ格納?
for (i = 0; i < SIZE; i++) {
src[i] = i;
dst[i] = src[i];
}
// 配列の内容を出力
for (i = 0; i < SIZE; i++) {
printf("%p) = %f\n", &dst[i], dst[i]);
}
// ポインタと配列を使って内容を出力
for (ptr_d = src, i = 0; i < SIZE; ptr_d++, i++) {
printf("ptr_d :%p) = %f\n", ptr_d, *ptr_d);
printf("src[%d]:%p) = %f\n", i, &src[i], src[i]);
}
return 0;
}
すいません。
問題のゴールが明確には分からなかったので適当に書いてます。
大枠はこれでいいと思うので書き換えて使ってください。
86:62
10/06/20 16:49:11
>>81
入力しても時々無視されちゃってます。
バグですが、もう一度入れれば入るみたいなんで、無視しちゃってください。
(直して^^;)
87:023
10/06/20 17:16:35
int ch, ch2, ch3;
bool slash = false;
/****/
try{
/****/
while(1){
ch = skip();
if(ch == EOF) break;
plane_put(ch);
kouhosu = 0;
bslash = 0;
ch2 = fgetc(fp1);
if(!kigou(ch2) && (ch2 == ch + 1)){
bslash=1;}
ungetc(ch2, fp1);
if(slash) { // add 2010.6.20
ch = ch3;
slash = false;
}else{
ch = fukugou(ch);}
dec_put(ch);
fputc(ch, fp3);
if(ch=='/'){
ch3 = fukugou(ch2 - 1);
angou(ch3);
slash = true; // add 2010.6.20
}else{
deb("angou=%c\n",ch);
angou(ch);
}
}}
88:62
10/06/20 18:08:56
>>87
ありがとうございます!!
URLリンク(kansai2channeler.hp.infoseek.co.jp)
に更新しました。
スクロール出来なくて今何をデコードしてるのか分からなくなってた問題は
別スレッドのポップアップウインドにしたので解消しました。
なんか'/'の扱いが難しいすね。よく考えると、'/'と見なしたら、その次の文字を-1して復号化するんだけど、
その復号化において、さらに、'/'と見なすべき場合は再帰でやらないと出来ないんじゃないだろうか。。という気がしてきた。
89:62
10/06/20 18:31:48
っていうか、ほぼ毎回、候補が複数出てくる。
これほとんど無理だよねw
90:デフォルトの名無しさん
10/06/20 20:24:13
?1から10までの積を計算するプログラムを書け。このとき,whileループを用いて、
画面に 1*2*3*・・・・*10 = という風に表示されるようにすること。
期限は6/22までです。お願いします。
91:デフォルトの名無しさん
10/06/20 20:24:33
与えられた零以上の実数(a,b,c,d)と正の実数(e,f)に対して
つぎのロンバーグ表と積分値を求めるプログラムを作成せよ
(分割数:n=2^k≧16,推定回数:m≧3)
I=∫ 1/(a*x^3+b*x^2+c*x+d)dx (e≦x≦f)
ただし、キーボードから(a,b,c,d,e,f)を入力すれば
上記の定積分のロンバーグ表の値と積分値が画面表示
されるようなプログラムを作ること。
この問題を解ける方教えていただけませんか?
92:デフォルトの名無しさん
10/06/20 20:35:12
>>90
#include <stdio.h>
int main(void)
{
int i=10,sum=1;
while(i--)printf(i?"%d*":"%d=%d\n",i+1,sum*=(i+1));
return 0;
}
93:デフォルトの名無しさん
10/06/20 20:41:29
>>1
>>1
大事なことなので2回言いました。最近守らないやつが多すぎる。
94:デフォルトの名無しさん
10/06/20 20:44:42
>>78
char src[32], dst[32];
int *ptr_i,*ptr;
double *ptr_d;
int i;
// src[i]配列にデータを格納
for(i=0; i<32; i++){
src[i] = i;
}
// dst[i]配列へのコピー
for(i=0; i<32; i++){
dst[i] = src[i];
}
// ptr_cにsrcの先頭アドレスをコピー
ptr_d = (double *)src;
// ptrを使用してsrc[i]のデータを内容を出力する。
for(i=0; i<4; i++){
printf("ptc_d:%#6x) = 0.%x\n", ptr_d, *ptr_d);
ptr_i = (int *)ptr_d;
printf(" :%#6x) = 0.%x\n", (ptr_i+1), *(ptr_i+1));
ptr_d++;
}
図2 ptr_d:0x22ccc8) = 0.b0a0306 は>>79のソース内容から外れるので考慮していない
95:91
10/06/20 20:58:11
[1] 授業単元:数値計算法
[2] 問題文(含コード&リンク):
与えられた零以上の実数(a,b,c,d)と正の実数(e,f)に対して
つぎのロンバーグ表と積分値を求めるプログラムを作成せよ
(分割数:n=2^k≧16,推定回数:m≧3)
I=∫ 1/(a*x^3+b*x^2+c*x+d)dx (e≦x≦f)
ただし、キーボードから(a,b,c,d,e,f)を入力すれば
上記の定積分のロンバーグ表の値と積分値が画面表示
されるようなプログラムを作ること。
[3] 環境
[3.1] OS:vista
[4] 期限: 無期限
96:デフォルトの名無しさん
10/06/21 05:37:05
>>89
適当に選ぶと正解じゃない場合は常に行き詰まる模様
97:デフォルトの名無しさん
10/06/21 07:33:49
エロゲの選択肢よりシビアだな
98:023
10/06/21 09:02:14
decrypt 窓が、文字の無いところを表示するから、常に横スクロールが必要。
99:デフォルトの名無しさん
10/06/21 13:31:35
>>95
URLリンク(kansai2channeler.hp.infoseek.co.jp)
100:87 の修正を修正
10/06/21 16:05:27
int ch, ch2, ch3;
bool slash = false;
/****/
try{
while(1){
ch = skip();
if(ch == EOF) break;
plane_put(ch);
scroll(IDC_EDIT3); // add 2010.6.21 他のscroll()呼び出しは削除
kouhosu = 0;
bslash = 0;
ch2 = fgetc(fp1);
if(!kigou(ch2) && (ch2 == ch + 1)){
bslash=1;}
ungetc(ch2, fp1);
if(slash) { // add 2010.6.20
ch = ch3;
slash = false;
}else{
ch = fukugou(ch);}
dec_put(ch);
fputc(ch, fp3);
if(ch=='/'){
kouhosu = 0; // add 2010.6.10 候補を消す
ch3 = fukugou(ch2 - 1);
angou(ch3);
slash = true; // add 2010.6.20
}else{
deb("angou=%c\n",ch);
angou(ch);
}
}}
101:デフォルトの名無しさん
10/06/21 16:08:25
そろそろ別にスレでも作ってそっち行ってくんないかな
102:デフォルトの名無しさん
10/06/21 16:17:56
>>99
間違ってるぞw
103:デフォルトの名無しさん
10/06/21 16:33:42
>>102
本からの丸写しなんだが。間違ってる点があるなら指摘よろしく
104:デフォルトの名無しさん
10/06/21 16:37:28
本当に丸写しなら、出版社に言って謝礼をもらうべきw
どうせ問題にあわせていじったところでミスってるだけだろうけど。
105:デフォルトの名無しさん
10/06/21 16:38:51
>>104
嫌味なら誰にでも言える
どこがどう間違っているのか具体的に指摘よろしく
それかお前が正しいプログラムを書いて示せ
106:デフォルトの名無しさん
10/06/21 16:40:47
間違いの存在教えてもらっただけでも感謝して、自分で探せよw
107:デフォルトの名無しさん
10/06/21 16:41:28
まあどこが間違っているか示せないだろうけどな
>>99は何度も検証したし結果も合ってる
ただケチを付けてみたいだけだろう>>102は
108:デフォルトの名無しさん
10/06/21 16:45:23
そんな検証の仕方じゃ話になんないなw
109:デフォルトの名無しさん
10/06/21 16:45:57
以降放置勝手に言ってろ
110:デフォルトの名無しさん
10/06/21 16:46:36
>h = b - a;
これはなんですか?w
111:デフォルトの名無しさん
10/06/21 16:49:57
>>110
それで合ってんだよ
112:デフォルトの名無しさん
10/06/21 16:52:32
え?w
113:デフォルトの名無しさん
10/06/21 16:53:29
>>20 の問題だけでスレ立てるのもアレなのでこちらでどうぞ
スレ立てるまでもない質問はここで 106匹目
スレリンク(tech板)
114:デフォルトの名無しさん
10/06/21 16:53:29
wてなに
115:デフォルトの名無しさん
10/06/21 16:53:30
どうせ台形公式とかルンゲ・クッタ法のhと混同してるんだろうこの馬鹿は
ロンバーグ積分も知らない馬鹿は口出しすんな
116:デフォルトの名無しさん
10/06/21 16:58:01
ロンバーグ積分は台形公式利用するものだし、hの意味は同じなんだがw
aとbは係数として関数に渡すもので、始点・終点じゃない
h = f - e;
が正しい。
117:デフォルトの名無しさん
10/06/21 17:05:21
>>99のやり方はミス抜かしてもロンバーグ積分としては微妙だけどな。
毎回台形公式で求めなおしてるから計算回数無駄に多いし。
118:デフォルトの名無しさん
10/06/21 17:06:54
>>116
確かにその通りだスマン
>>117
だから文句タラタラ言うなら自分でプログラムを書いて示せっつーの
119:デフォルトの名無しさん
10/06/21 17:09:36
スマンですますなよ、この低脳がw
教えてくださいって土下座しろよこのマヌケ
120:デフォルトの名無しさん
10/06/21 17:11:47
>>110で指摘されてもなお>>111と言える心の強さは素晴らしい
121:デフォルトの名無しさん
10/06/21 17:14:36
>>113
まともに機能してるスレに関係ないもの誘導すんなよ。
過疎ってるスレがいくらでもあまってるんだから、そっちにしようぜ。
例えば
C言語を勉強しあおう
スレリンク(tech板)
とかさ
122:デフォルトの名無しさん
10/06/21 17:15:12
そこまで言わなくてもいいと思うが、丸写しした本を教えてほしい。
それから、
> 何度も検証したし結果も合ってる
というところも詳しく。
123:デフォルトの名無しさん
10/06/21 17:30:15
台形公式で刻み数を倍にするときは前回の計算結果を利用して、
関数の計算回数を減らすのが普通。
減らすって言っても、前回の計算がなかったとして直接計算したときと同じなんだけど。
少なくとも、前回の計算分丸々計算しなおすよりはマシになる。
124:デフォルトの名無しさん
10/06/21 18:01:03
>>123
だから言葉で言わずにプログラムで書けっつーの
ここはプログラム板だ
125:デフォルトの名無しさん
10/06/21 18:03:59
ググれカス
126:デフォルトの名無しさん
10/06/21 18:05:22
>>124
先に>>122の質問に答えたら?
127:デフォルトの名無しさん
10/06/21 18:25:50
>>90
#include <stdio.h>
int main(void)
{
int i = 1, sum = 1;
while (i < 10) {
sum *= i;
printf("%d*", i);
i++;
}
printf("%d = %d\n", i, sum *= i);
return 0;
}
128:113
10/06/21 20:05:45
>>121
了解した
>>20 の問題に関しては是非こちらへ
C言語を勉強しあおう
スレリンク(tech板:168-番)
129:デフォルトの名無しさん
10/06/22 00:46:57
wってなに?
130:デフォルトの名無しさん
10/06/22 01:03:40
waraiのw
131:デフォルトの名無しさん
10/06/22 04:04:39
sumって変数名に乗算の結果を入れるのは気持ち悪い
132:デフォルトの名無しさん
10/06/22 10:09:40
product
133:デフォルトの名無しさん
10/06/22 11:05:37
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):
[1] 授業単元:
char buf[80];
int main(int ac, char ** av)
{
int i;
buf[0] = '\0';
for(i = 1; i < ac; i++){
printf("%3d \"%s\"\n", strlen(av[i]), av[i]);
strcat(buf, av[i]);
}
printf("%3d \"%s\"\n", strlen(buf), buf);
これを入力した文字列を逆順に表示できるように書き換えよ
[3] 環境
[3.1] Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日三時
[5] その他の制限:なし
おねがいします
134:デフォルトの名無しさん
10/06/22 11:39:40
for(i = strlen(buf) - 1; i >= 0; i--) printf("%c", buf[i]);
135:デフォルトの名無しさん
10/06/22 11:49:15
配列a[n],配列b[n] と配列の大きさn を渡すと配列の
要素を入れ換えるプログラムをポインタを用いて作成せよ.
例えば,a[3]={1,2,3},b[3]={101,102,103}とすると
き,結果として,a[3]={101,102,103},b[3]={1,2,3}と
なるようにせよ.
よろしくお願いします!
136:デフォルトの名無しさん
10/06/22 11:50:29
void f(int *a, int *b, int size)
{
while(size--) {
int temp = *a;
*a++ = *b;
*b ++ = temp;
}
}
137:デフォルトの名無しさん
10/06/22 12:06:39
>>136
早速の回答感謝します
ありがとうございました!
138:デフォルトの名無しさん
10/06/22 14:55:24
1] 授業単元:システムコール
[2] 問題文(含コード&リンク):
コマンドライン引数で指定された文字列のいずれかと一致する名前の環境変数についてのみ、
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
main()
{
char **p;
for (p = environ; *p != NULL; p ++) {
printf("%s\n", *p);}
return 0;}
や
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[], char *envp[])
{
char **p;
for (p = envp; *p != NULL; p ++) {
printf("%s\n", *p);}
return 0;}
のように変数名と値を表示するプログラムを書け。
ただし、コマンドライン引数に重複があっても、対応する環境変数について複数回表示してはならない
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2010年5月24日12:59まで
[5] その他の制限:特になし
よろしくお願いします
139:デフォルトの名無しさん
10/06/22 15:05:45
期限が過ぎているのでスキップされました
140:デフォルトの名無しさん
10/06/22 15:17:58
>>138
すいません!期限6/24です
141:デフォルトの名無しさん
10/06/22 17:56:42
ワイルドカードのマッチを、正規表現使って行うにはどう変換すればいいですか。
. や * や ? で機能が違うのですが。
142:デフォルトの名無しさん
10/06/22 18:01:55
ワイルドカード → 正規表現
? → .
* → .*
143:デフォルトの名無しさん
10/06/22 18:05:12
サンクス。あと正規表現の特殊文字に\つけとけばいいですかね。
144:デフォルトの名無しさん
10/06/22 18:47:03
[1] 授業単元:C・プログラミング
[2] 問題文(含コード&リンク):
深さ優先探索をリスト表現で表すプログラムを作成せよ。
制限は特にないです。
[3] 環境
[3.1] Windows 7
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2010年6月25日迄
よろしくお願いします。
145:デフォルトの名無しさん
10/06/22 19:41:07
>.144
めっちゃ抽象的だな…
146:デフォルトの名無しさん
10/06/22 19:44:08
まずは要件定義から始めること。
という実践的な問題なんだろ。
147:デフォルトの名無しさん
10/06/22 20:09:28
>>138
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main(int argc, char *argv[], char *envp[])
{
char **p, **v;
int lth;
for (p = envp; *p != NULL; p++) {
lth = strchr(*p, '=') - *p;
for (v = argv; *v != NULL; v++) {
if (!strncmp(*p, *v, lth)) {
printf("%s\n", *p);
*p = '\0';
break;
}
}
}
return 0;
}
148:デフォルトの名無しさん
10/06/22 20:30:24
[1] 応用プログラミング
[2] 問題文(含コード&リンク):構造体の基礎
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visualstadio 2008
[3.3] 言語:C
[4] 期限:24日まで
[5] その他の制限:プログラミングやってまだ半年しか経ってません。
構造体の授業の宿題です。
どうか宜しくお願いします。
149: ◆QZaw55cn4c
10/06/22 20:43:07
>>148
URLリンク(codepad.org)
150:デフォルトの名無しさん
10/06/22 22:25:31
[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):三目並べを作成せよ。ポインタとクラスを使用。
[3] 環境
[3.1] OS:WinodwsVista
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C++
[4] 期限:6/23(水)8時半まで
[5] その他の制限:C++触り始めた所です。どうかお願いします。
151:デフォルトの名無しさん
10/06/22 22:27:42
>>150
GUIでいいのか
152:デフォルトの名無しさん
10/06/22 22:30:13
>>151
言い忘れてた。CUIでお願いします。
こんな感じにしてほしいです。
1 2 3
1
2
3
○の横座標を入力してください:
○の縦座標を入力してください:
153:デフォルトの名無しさん
10/06/22 23:04:32
>>152
URLリンク(kansai2channeler.hp.infoseek.co.jp)
154:デフォルトの名無しさん
10/06/22 23:16:46
>>153
出来ればクラスとメソッドをしっかりと分けてほしいです。
クラスの中にメソッドが入ってる感じなのでこう分けてくれると助かります。
class game{
public:
void init();
bool Player(int x, int y);
};
void Game::init()
{
・・・
}
他のメソッドもこんな感じに処理毎に分けてくれると助かります。あと○に座標だけでなく
×の座標も入力できるようにしてほしいです。
155:デフォルトの名無しさん
10/06/22 23:18:02
www
156:デフォルトの名無しさん
10/06/22 23:18:30
>>154
ミス。「○に座標」じゃなくて「○の座標」でした。
入力した座標をポインタで受け取る感じにしてほしいです。
申し訳ありません。
157:デフォルトの名無しさん
10/06/22 23:31:38
座標をポインタで受け取りたいってのがよくわからんが。。
ってかドローゲーム忘れてたw
158:デフォルトの名無しさん
10/06/22 23:39:19
>>157
自分の中のイメージとしてg.player(&width, &height)って感じでメソッド呼び出して
座標データを取得したいのですが。。。。。
すいません。なかなか上手く説明できないです。初心者なので。。。。。。
159:デフォルトの名無しさん
10/06/22 23:42:24
クラスとメソッドを分けてほしいって表現がすごいけど、その例を書けるんならそんぐらい直せw
160:デフォルトの名無しさん
10/06/22 23:45:28
>>159
クラスとメソッド分けるのちょっとやってみます。
挫折したらすみません。あと途中で解説欲しくなるかもしれないです。
161:デフォルトの名無しさん
10/06/22 23:48:40
>>158
こんなんでどう?
get_posってヤツで座標を取るんで、これなら意味分かるわ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
162:デフォルトの名無しさん
10/06/22 23:52:37
>>161
おおおおおおおおおおお。けっこうスマートになってるwwww
助かります。ちょっとソースコード読んでみます。解説欲しくなったら言うので。
163:デフォルトの名無しさん
10/06/22 23:54:19
どんだけ上から言ってんだよw
ってかもうねる。
164:デフォルトの名無しさん
10/06/23 00:01:03
>>163
乙。
釣りなのかと思っちゃうよね。
165:デフォルトの名無しさん
10/06/23 00:15:45
インライン関数は使わない流儀
166:デフォルトの名無しさん
10/06/23 03:27:12
[1] 授業単元:プログラミング応用 ;構造体
[2] 問題文(含コード&リンク):
以下コピペ
表示例のように,名前,性別,身長,体重,腹囲(ウエスト)を3人分入力した後, 3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を 表示するプログラムを作成しなさい.
プログラムでは,名前,性別,身長,体重,腹囲をまとめて 個人データとして表すための構造体を定義して利用すること.
注意
" 体重はkg, 身長,腹囲はcmで入力する.
" 性別は 1 で男性,2で女性を表す.
" BMI値 = 体重(kg) / 身長(m)2
" 男性は腹囲85cm以上,女性は腹囲90cm以上でメタボリック症候群の疑い がある
表示例
データ1を入力してください
名前: Hanako
性別: 2
身長: 156.4
体重: 65.3
腹囲: 93.4
名前: Hanako, 性別: 女, 身長: 156.4, 体重: 65.3, 腹囲: 93.4, BMI: 26.7, メタボリック症候群の疑いがあります
コピペ終わり
本当はデータ3つです。改行制限で割愛
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (cc 3.4)
[3.3] 言語: (どちらでも可)
[4] 期限: (6月23日15時まで)
[5] その他の制限: (構造体でデータを個々で格納してお願いします。)
よろしくお願いします。
167:デフォルトの名無しさん
10/06/23 10:51:24
>>>166
URLリンク(codepad.org)
168:デフォルトの名無しさん
10/06/23 11:20:14
>>166
URLリンク(kansai2channeler.hp.infoseek.co.jp)
169:デフォルトの名無しさん
10/06/23 12:33:36
>>167
>>168
ありがとうございました。参考にさせていただきます。
170:デフォルトの名無しさん
10/06/23 15:18:36
【質問テンプレ】
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
1.関数sqrtを使って1~10までの二乗根の和を求めなさい。
2.16進数ABC.DEを10進数にしなさい。
[3] 環境
[3.1] OS: Windows XP
[ [3.3] 言語: C言語
[4] 期限: 6月24日15時まで
よろしくお願いします。
171:デフォルトの名無しさん
10/06/23 15:33:07
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月28日まで
[5] その他の制限:なし
よろしくお願いします
172:デフォルトの名無しさん
10/06/23 15:55:30
【質問テンプレ】
[1] 授業単元: プログラミングB
[2] 問題文(含コード&リンク):実行したい処理を選ぶことが可能なプログラムを作りなさい。このとき、実
行できる処理は以下の三つとする。
処理1:複数の2択問題への回答に応じた結果を表示する。(例:職種選択、旅行先選び
処理2:文字コード一覧表を出力する。(文字コード32~126を一行に8文字ずつ)
処理3:本のページ数を入力し、その本を読み切るために必要な日数を表示
する。このとき、初日は10ページ、2日目は20ページ,,,と読むページ
数は増加するものとする。
以下の仕様で作成すること
キーボードから入力された数に応じて、switch文で各処理に移動する。
処理1:if文を使って
処理2:for文を使って
処理3:while文またはdo・while文を使って。
[3] 環境
[3.1] OS: WindowsXP
[3.3] 言語: C言語
[4] 期限: 6月25日まで
よろしくお願いします。
173:デフォルトの名無しさん
10/06/23 16:03:04
>>171
(1)j-1
(2)printf(" ");
174:デフォルトの名無しさん
10/06/23 16:07:11
>>170
1.
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
double sum = 0;
for(i = 1; i <= 10; i++) sum += sqrt(i);
printf("%f\n", sum);
return 0;
}
175:デフォルトの名無しさん
10/06/23 16:45:32
>>170
2.
URLリンク(kansai2channeler.hp.infoseek.co.jp)
176:デフォルトの名無しさん
10/06/23 17:34:30
>>172
自己解決しました。
177:デフォルトの名無しさん
10/06/23 21:05:54
>>149
ありがとうございました、参考にさせていただきました。
それにしてもわずか10分でするとは…
178:デフォルトの名無しさん
10/06/23 21:17:16
質問させてください
当方、エントロピー値の計算するプログラムをperlで作成したのですが
わけあってC++に書き直すことになりました
しかし、C++にはハッシュ(連想配列)などは自分で作らなければならなく
どうしてもうまく行きませんでした・・・
perlで作ったプログラムをここに張るのは良くない思うのですが
どうかC++動くようにご教授お願いします
179:デフォルトの名無しさん
10/06/23 21:20:11
こちらがperlのプログラムです
#! c:/perl/bin/perl
open(FILE,"IPsource.txt"); #ファイル読み込み
use strict;
use warnings;
use utf8;
print "Content-type: text/html\n\n";
my $count;
my $t;
my $key;
my $ref_freq;
my %ref_freq;
my @x;
my $v;
$count = 0; #全体IPカウント
while ($t = <FILE>){ #IPファイル展開
#IP集計
if($t) {
$count += 1; #全体IPカウント
++$ref_freq{$t};
}
}
180:デフォルトの名無しさん
10/06/23 21:21:17
@x = values %ref_freq;
print"@x \n";
close(IN);
#my @x= map $_ ,$key;
#エントロピー計算
my $y=$count;
my $num;
my @pi = map $_ / $y, @x;
my $i;
print"@pi \n"; #テスト用プリント
#print"@x \n";
for($i=0;$i<=$#pi;$i++){
$num += -($pi[$i]*log($pi[$i]) / log(2));
}
#print"@pi\n\n";
print "-Σpi*log2(pi) = $num \n";
181:デフォルトの名無しさん
10/06/23 21:27:16
std::hash_map, std::mapはC++にもある
182:178
10/06/23 21:32:30
プログラムの動きですが
>>179でtxtに入れられたIPアドレスの種類と数をカウントします
ここでハッシュ(連想配列)を用いています
ここを出力するとこのようになります
IP 数
202.・・・ 20
そして>>180でエントロピー計算を行います
エントロピーの計算方法はlog(対数)とΣ(for文)で
my $y=$count;
my $num;
my @pi = map $_ / $y, @x;
この部分に先ほどカウントしたIPが入り
for($i=0;$i<=$#pi;$i++){ ←カウントしたIP分だけループさせ
$num += -($pi[$i]*log($pi[$i]) / log(2)); ←エントロピーの計算をします
}
183:デフォルトの名無しさん
10/06/23 21:36:16
文字列をキーとした連想配列はmapで代用できる。
もちろん、>>181の言うようにhash_mapでもいい。(あれば)
184:デフォルトの名無しさん
10/06/23 21:39:16
std::tr1::unordered_map も忘れないでください。
185:デフォルトの名無しさん
10/06/23 21:55:08
>>178
元のコードにできるだけ合わせたつもり
URLリンク(kansai2channeler.hp.infoseek.co.jp)
186:デフォルトの名無しさん
10/06/23 22:17:25
CでなくC++でよかったな
187:デフォルトの名無しさん
10/06/23 22:18:45
余計な言い訳せずにC++のコードくださいって言えばいいのにね。
188:185
10/06/23 22:54:11
>>185 の訂正
途中で @x 相当の変数使うの忘れてたw
URLリンク(kansai2channeler.hp.infoseek.co.jp)
189:178
10/06/23 23:11:42
>>181、183、184
ご指摘ありがとうございます
その範囲を調べてみます。
>>185
わざわざコードを作っていただき
本当にありがとうございます
このコードを参考に勉強させていただきます。
190:デフォルトの名無しさん
10/06/24 00:22:32
モンテカルロ法で√2の近似値を求めたいのですが、
ネット調べてみるとモンテカルロ法と言えばπの近似に関するばかりで・・・
どなたか教えてくださいませ
191:デフォルトの名無しさん
10/06/24 00:33:17
[sin θ]0~PI に近い
192:デフォルトの名無しさん
10/06/24 00:37:45
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
問題1:char name[20], int english, int mathematicsをメンバとする構造体 score を定義せよ
問題2:以下の5人の情報をもつ配列 seito[5] を、問題1で作成した構造体 score 型を使って宣言せよ。なお、5人の情報は初期値として宣言することにする。
name english mathematics
"yamada" 50 70
"tanaka" 70 60
"suzuki" 80 70
"yamamoto" 40 60
"sakata" 90 80
問題3:問題2で初期値を代入した構造体 score 型の構造体配列 seito[5] を宣言し、各メンバ変数をソートする関数を作成せよ。
[3] 環境
[3.1] OS:Win Vista
[3.2] コンパイラ名とバージョン:VB 2008
[3.3] 言語:C
[4] 期限:2010年6月25日まで
[5] その他の制限:無し
よろしくお願いします
193:デフォルトの名無しさん
10/06/24 01:36:43
>>173ありがとうございます。助かりました!
194:デフォルトの名無しさん
10/06/24 01:42:16
>>190
#include <stdio.h>
#include <stdlib.h>
#define NN 10000
int
main(void)
{
int i, w, cnt = 0, n;
printf("input sample no(cf.1000)=");
scanf("%d", &n);
for (i = 0; i < n; i++) {
w = rand() % NN;
w *= w;
if (w < NN * NN / 2)
cnt++;
}
printf("PI neary equal = %f", (double) cnt * 2 / n);
return 0;
}
195:デフォルトの名無しさん
10/06/24 11:48:13
[1] 授業単元:情報処理
[2] 問題文:ガウスの消去法のプログラムをピボット対応と
ピボット非対応の2つ作成し、連立方程式の解を求めよ。
(ただし解くべき連立方程式は5元1次方程式で、ピボットの
発生するものと発生しないものの2種類とする)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C++
お願いします。
196:デフォルトの名無しさん
10/06/24 13:44:31
演習6-1
複数の文字列を読み込み,それらの文字列を空白を入れて繋ぎ合わせるプログラムを作成せよ.
【実行例】
何個の文字列を入力しますか?:3
入力文字列[1]:A
入力文字列[2]:B
入力文字列[3]:C
結果:A B C
演習6-3
入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
【実行例】
% ./a.out
tataatccg ← 入力し,リターンを押して ^D
Thymine (t) : 3
Cytosine (c) : 2
Adenine (a) : 3
Guanine (g) : 1
%
よろしくお願いします!
197:デフォルトの名無しさん
10/06/24 15:07:11
>>196
演習6-1
#include <stdio.h>
int main(void)
{
char buff[32], str[1024], *p, *q;
int i, n;
printf("何個の文字列を入力しますか?:");
scanf("%d", &n);
for(i = 1, p = str; i <= n; i++) {
printf("入力文字列[%d]:", i);
scanf("%s", buff);
for(q = buff; *q; q++, *p++) *p = *q;
*p++ = ' ';
}
*(p - 1) = '\0';
printf("\n結果:%s\n", str);
return 0;
}
198:デフォルトの名無しさん
10/06/24 17:15:46
ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、整数に変更して数値として表示
するプログラムを作成せよ。関数としてstrtol()を使用すれば問題ないが、同じ機能の関数を作成すること。
基数の設定に関する引数は必要なくデフォルト(先頭が0 なら8 進、それ以外は10 進、16 進は使用しな
い)とする
お願いします!
199:デフォルトの名無しさん
10/06/24 19:22:26
>>197
助かりました!本当にありがとうございます!
>>196の演習6-3は無事、自己解決致しました。
ありがとうございました~
200:デフォルトの名無しさん
10/06/24 20:10:46
>>198
URLリンク(kansai2channeler.hp.infoseek.co.jp)
201:デフォルトの名無しさん
10/06/24 21:08:03
バブルソートでは, 配列のデータがすでに適正な順序, あるいはそれに近い順序で並んでいても
n-1回の走査をしなければならない. すなわち, n(n-1)/2回の比較が行われなければならない. そこで, 各回の走査の終わりに,
交換が行われたか否かをチェックするようにし, 交換が行われていなければそれ以上走査の必要はないのでソートを完了するようなプログラムを作成しなさい.
sizeofは使わない。
↓のような出力結果になるようにする。
初期状態: 10, 3, 1, 15, 2, 7
[1回目の走査]
1回目の交換: 3, 10, 1, 15, 2, 72回目の交換: 3, 1, 10, 15, 2, 73回目の交換: 3, 1, 10, 2, 15, 74回目の交換: 3, 1, 10, 2, 7, 15
[2回目の走査]
1回目の交換: 1, 3, 10, 2, 7, 15 2回目の交換: 1, 3, 2, 10, 7, 15 3回目の交換: 1, 3, 2, 7, 10, 15
[3回目の走査]
1回目の交換: 1, 2, 3, 7, 10, 15
[4回目の走査]
最終状態: 1, 2, 3, 7, 10, 15
202:デフォルトの名無しさん
10/06/24 21:09:51
#include <stdio.h>
int main(void) {
int str[100]={0};
int i,j, temp,x;
x=0;
printf("値の上限を設定してください:");
scanf("%d",&x);
for(i=0;i<x;i++){
printf("%d番目の値を入力してください:",i+1);
scanf("%d", &str[i]);
}
printf("初期状態:");
for(i=0;i<x;i++){
if(i==x-1){
printf("%d\n ",str[i]);
}else{
printf("%d, ",str[i]);
}
}
203:デフォルトの名無しさん
10/06/24 21:11:02
for (i = 1; i<x; i++) {
for(j=x-1; j>=i; j--){
if (str[i-1] > str[i]){
temp = str[i-1];
str[i-1] = str[i];
str[i] = temp;
}
}
}
for (i = 0; i < x; i++){
if(i==x-1){
printf("%d\n", str[i]);
}else{
printf("%d, ", str[i]);
}
}
return 0;
}
ここまで作りましたが出力結果が上のようになりません。
誰か助けてください!お願いします。
204:デフォルトの名無しさん
10/06/24 21:50:07
#include <stdio.h>
int main(void) {
int i, j, temp, x=0, f;
printf("初期状態: %d", str[0]);
for(i=1;i<x;i++)
printf(", %d", str[i]);
printf("\n");
for (i = 1; i<x; i++) {
f = 1;
for(j=x-1; j>=i; j--){
if (str[j-1] > str[j]){
temp = str[j-1];
str[j-1] = str[j];
str[j] = temp;
f = 0;
}
}
if(f != 0) break;
printf("%d回目の走査: %d", i, str[0]);
for(j=1;j<x;j++)
printf(", %d", str[j]);
printf("\n");
}
printf("最終状態: %d", str[0]);
for(i=1;i<x;i++)
printf(", %d", str[i]);
printf("\n");
return 0;
}
205: ◆QZaw55cn4c
10/06/24 22:05:02
>>201
URLリンク(codepad.org)
206:デフォルトの名無しさん
10/06/24 22:05:49
使うとインデント表現できるんだね
207:デフォルトの名無しさん
10/06/24 22:08:25
>>206
s/\&/\&/g
s/ /\ /g
s/"/\"/g
s/</\</g
s/>/\>/g
208:270
10/06/24 22:09:47
すみません、間違えました。
s/\&/\&/g
s/ /\ /g
s/"/\"/g
s/</\</g
s/>/\>/g
209:208
10/06/24 22:11:50
んー、うまくいかない。
s/\&/\&/g
s/ /\ /g
s/"/\"/g
s/</\</g
s/>/\>/g
こうか?
210:sage
10/06/24 22:51:25
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
再帰呼び出しを使い、入力した値の階乗を求めるプログラムを書きなさい。
なお、出来る限り大きな値の計算を出来るように工夫しなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Borland C++ 5.5.1
[3.3] 言語: C言語
[4] 期限: 6月中
[5] その他の制限:指定なし
211: ◆QZaw55cn4c
10/06/24 23:12:33
>>210
なんの工夫もしていません。
URLリンク(codepad.org)
212:デフォルトの名無しさん
10/06/25 00:18:02
[1] 授業単元: 数値解析
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
ニュートン・ラフソン法についての問題です。教科書に例題として載っていたプログラミングに今回問題となっている方程式の当てはめ方がわかりません(おそらく初歩的な事だと思われます)
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限:2010年6月25日16:00まで
[5] その他の制限: 半年前に教養の授業として数時間C言語の授業があった程度の知識しかありません
周囲もそのような人ばかりなので深いC言語の知識が必要な問題ではないと思われます
どうかよろしくお願い致します
213:デフォルトの名無しさん
10/06/25 02:14:39
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
以下に示す2階の定係数線形同次微分方程式につ
いて,初期値y(0)=a, y’(0)=bをキーボードから入力し,
t=4における値を出力するプログラムを作成する.
y''(t)+2y'(t)+2y(t)=0
条件 y(0)=2 , y'(0)=-2
答え y(4)=-0.02394
[3] 環境
[3.1] OS: (Windows/Linux/等々) vista
[4] 期限:6月30日まで
214:デフォルトの名無しさん
10/06/25 10:25:17
>>213
精度を考慮してルンゲ・クッタ法で解いた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
215:デフォルトの名無しさん
10/06/25 11:43:42
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):
入力した2値白黒画像をハフ変換して直線および円を検出し、結果を表示するプログラムを作成せよ。
直線の式はρ= xcosθ + ysinθを、円の式はr2= (x-a)2 + (y-b)2をそれぞれ使用する。
なお、直線について処理後のρθ平面を濃淡画像として出力せよ。
円については処理後のabrパラメータ空間をGnuplotを用いて、
1点のエッジに対する軌跡(円錐)と2点以上のエッジに対する軌跡(円錐)を出力せよ。
また、円と直線両方について、3種類以上に閾値を変化させた実験結果を逆変換し、
その結果を原画像に投影した画像も出力せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2010年06月25日23:50まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
画像として出力というくだりについては、RGBそれぞれの値を
変数名[画像サイズ].r/.g/.bという要素を持つ構造体を使って格納してください。
216:デフォルトの名無しさん
10/06/25 14:26:22
>>147
亀ですがありがとうございました!
217:デフォルトの名無しさん
10/06/25 14:32:43
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
午前四時から正午までは Good Morning! と、
正午から午後八時までは Good Afternoon! と、
午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。ただし、境界の時刻は前の時間帯に含まれるものとする
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2010年6月30日23:55
[5] その他の制限: 特になし
お願いします
218:デフォルトの名無しさん
10/06/25 16:58:06
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク): 番号 国語 数学 英語のメンバを持っている構造体を作って各教科の平均値と、全平均値を求めてください。(人数は4人とか5人で行ってください。あと番号っていうのは、番号は、4人なら1~4までで5人なら1~5までです)
[3] 環境
[3.1] OS: linux
[3.3] 言語: C++
[4] 期限: ([2010年6月26日まで]
[5] その他の制限:
#include <iostream>
using namespace std;
struct score {
で始めて、
return文で終わってください
219:デフォルトの名無しさん
10/06/25 17:13:52
>>214
ありがとうございました^^
220:デフォルトの名無しさん
10/06/25 17:59:13
>>218
URLリンク(kansai2channeler.hp.infoseek.co.jp)
221:218
10/06/25 21:51:05
>>218ですが忘れてました。なるべく簡単にしてください。
あと配列を使います。
222:デフォルトの名無しさん
10/06/26 01:08:39
>>217
#include <stdio.h>
#include <time.h>
int main()
{
time_t now = time(NULL);
struct tm* local_now = localtime( &now );
const int hour = local_now->tm_hour;
if ( hour>4 && hour<=12 )
printf( "Good Morning!" );
else if ( hour>12 && hour<=20 )
printf( "Good Afternoon!" );
else // ( hour>20 && hour<=4 )
printf( "Good Evening!" );
return 0;
}
223:デフォルトの名無しさん
10/06/26 02:27:00
【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (指定なし)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2010年06月28日14:50まで] )
[5] その他の制限:ヘッダファイル"bmp.h"はこちらです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
よろしくお願いします。
224: ◆C/HmxiIl0o
10/06/26 02:42:14
[1] 授業単元: 解析
[2] 問題文(含コード&リンク):
x=1.0, 1.1,...,3.9, 4.0が与えられた時のlogxの値をラグランジュ補間で求め、
その近似値とlogxの真値をそれぞれ出力せよ。
また、求めた値と真値との誤差(絶対値)も求め、一次多項式の誤差と2次多項式の誤差を
それぞれ出力せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日(26日)中にお願いします
宜しくお願いいたします。
225:デフォルトの名無しさん
10/06/26 02:59:03
>>223
URLリンク(codepad.org)
簡単に試したけど多分こんなん。
226:デフォルトの名無しさん
10/06/26 03:40:45
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
構造体Triangleを下のように定義する。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
この構造体により一つの三角形を表現する。
Triangle構造体の構成要素は、三つの頂点のx座標、y座標をメンバとして持つ構造体Pointである。
このTriangle構造体を用いて、以下の使用に従う関数を作成し、任意の三角形の面積、その三角形を適切な2×2行列で線形変換した結果の三角形の座標とその面積、および任意の二つの三角形が合同であるかどうかを表示するプログラムを実装しなさい。
・一つのTriangle構造体の変数を引数とし、その構造体が表す三角形の面積を返す関数。
・一つのTriangle構造体の変数と、double型の二次元配列(2×2行列Aとする)を引数とし、引数で与えた三角形を行列Aによって線形変換した後の三角形を返す関数。
・二つのTriangle構造体の変数を引数とし、その構造体が合同であれば1を、合同でなければ0を返す関数。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月28日まで
[5] その他の制限:特にありません。よろしくお願いします。
227:デフォルトの名無しさん
10/06/26 07:07:19
double area(Triangle t) {
return fabs((t.p2.x - t.p1.x) * (t.p3.y - t.p1.x) - (t.p2.y - t.p1.x) * (t.p3.x - t.p1.x));
}
Triangle linear(Triangle t, double a[2][2]) {
Triangle ret;
ret.p1.x = a[0][0] * t.p1.x + a[0][1] * t.p1.y;
ret.p1.y = a[1][0] * t.p1.x + a[1][1] * t.p1.y;
ret.p2.x = a[0][0] * t.p2.x + a[0][1] * t.p2.y;
ret.p2.y = a[1][0] * t.p2.x + a[1][1] * t.p2.y;
ret.p3.x = a[0][0] * t.p3.x + a[0][1] * t.p3.y;
ret.p3.y = a[1][0] * t.p3.x + a[1][1] * t.p3.y;
return ret;
}
int isCongruence(Triangle t1, Triangle t2) {
double l1[3], l2[3];
int i, j;
l1[0] = (t1.p1.x - t1.p2.x) * (t1.p1.x - t1.p2.x) - (t1.p1.y - t1.p2.y) * (t1.p1.y - t1.p2.y);
l1[1] = (t1.p2.x - t1.p3.x) * (t1.p2.x - t1.p3.x) - (t1.p2.y - t1.p3.y) * (t1.p2.y - t1.p3.y);
l1[2] = (t1.p3.x - t1.p1.x) * (t1.p3.x - t1.p1.x) - (t1.p3.y - t1.p1.y) * (t1.p3.y - t1.p1.y);
l2[0] = (t2.p1.x - t2.p2.x) * (t2.p1.x - t2.p2.x) - (t2.p1.y - t2.p2.y) * (t2.p1.y - t2.p2.y);
l2[1] = (t2.p2.x - t2.p3.x) * (t2.p2.x - t2.p3.x) - (t2.p2.y - t2.p3.y) * (t2.p2.y - t2.p3.y);
l2[2] = (t2.p3.x - t2.p1.x) * (t2.p3.x - t2.p1.x) - (t2.p3.y - t2.p1.y) * (t2.p3.y - t2.p1.y);
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) if(l1[i] == l2[j]) { l2[j] = 0; break;}
if(j == 3) return 0;}
return 1;
}
228:デフォルトの名無しさん
10/06/26 11:36:43
ラグランジュ補間で log(x) を求める。?
229: ◆C/HmxiIl0o
10/06/26 12:07:55
>>228
問題にはそう書いてありました。
log2=0.6931,log3=1.0986 1次多項式で近似
log2=0.6931,log3=1.0986,log4=1.3863 2次多項式で近似
2点(2,0.6931)(3,1.0986)を用いてlog2.5を推定する
logxの1次多項式による補間では、x0=2,x1=3より、
L-zero(x)=(x-3)/(2-3)
L-one(x)=(x-2)/(3-2)
であるから、p1(x)=1.0986(x-2)-0.6931(x-3)
p1(2.5)=1.0986(2.5-2)-0.6931(2.5-3)=0.89585
3点(2,0.6931)(3,1.0986)(4,1.3863)を用いてlog2.5を推定する
logxの1次多項式による補間では、x0=2,x1=3より、
L-zero(x)=(x-3)(x-4) / (2-3)(2-4)
L-one(x)=(x-2)(x-4) / (3-2)(3-4)
L-two(x)=(x-2)(x-3) / (4-2)(4-3)
であるから、p2(x)=0.34655(x-3)(x-4)-1.0986(x-2)(x-4)-0.6931(x-2)(x-3)
p1(2.5)=0.919575
真値=0.91629
誤差を求める式は
e-k(x)=f(x) - p-k(x) = (f^(k+1)(クサイ) / (k+1)!)*(x-x0)・・・(x-xk)
だそうです。
宜しくお願いします。
230:デフォルトの名無しさん
10/06/26 12:17:47
[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):三目並べのプログラムにCPとの対戦をつけろ。
URLリンク(codepad.org)
[3] 環境
[3.1] OS:WinodwsVista
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C++
[4] 期限:6/27(水)8時半まで
[5] その他の制限:C++初心者です。インライン関数は使わない方向でお願いします。
実行結果としてはこんな感じにしてほしいです。
1Pと2Pとの交互に対戦しますか?
1Pとコンピュータとの対戦にしますか?
プレイヤ同士の対戦なら1を、コンピュータとの対戦なら2を入力してください:
こんな感じで選らばせて対戦できるようにしてほしいです。
※1Pのマスは○でコンピュータのマスは×でお願いします。
231:デフォルトの名無しさん
10/06/26 12:19:15
>>230
ミス。
6/27(月)でした
232:デフォルトの名無しさん
10/06/26 12:20:03
>>231
日曜でした。すいませんでした。
233:デフォルトの名無しさん
10/06/26 14:54:26
> であるから、p2(x)=0.34655(x-3)(x-4) - 1.0986(x-2)(x-4) - 0.6931(x-2)(x-3)
> p1(2.5)=0.919575
であるから、p2(x)=0.34655(x-3)(x-4) - 1.0986(x-2)(x-4) + 0.6931(x-2)(x-3)
p1(2.5)=0.9105875
物理のかぎしっぽ:計算物理学:補間法:ラグランジュ補完
URLリンク(moondial0.net)
234:デフォルトの名無しさん
10/06/26 15:11:16
[1]授業単元:システムプログラミング
[2]課題:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] OS:Windows Vista コンパイラ:CygWin上のgcc 言語 C
[4] 7/1迄
[5] 授業は殆ど出ておらず単位を落としそうですんでよろしくお願いしまつ
235:デフォルトの名無しさん
10/06/26 21:49:42
>>229
ラグランジュ補間は手持ちの本「科学技術計算ハンドブック」に
掲載されているので、一次補間も二次補間も意味はわかるけど、
logxの近似をしたかったら、x=1.0から4.0まで近似したいなら、
もっと数表x[], y[]の標本が必要だよ
というのは、ラグランジュ補間は極めて振動しやすいという欠点を
持っていて、その欠点を埋め合わせるには数表の取り方を工夫
しなければならない
少なくとも、[x,y]の組み合わせが多数欲しい
今1.0~4.0の範囲で近似しようとしているのだから、xが0.0から5.0
の範囲で5点ほどは欲しい
236:デフォルトの名無しさん
10/06/26 21:58:22
> 今1.0~4.0の範囲で近似しようとしているのだから、
x=2.5 のだけで。
237:デフォルトの名無しさん
10/06/26 22:13:54
>>218を誰か簡単にお願いします
238:デフォルトの名無しさん
10/06/26 22:31:31
>>224
URLリンク(ideone.com)
239:デフォルトの名無しさん
10/06/26 22:39:35
>>229
URLリンク(kansai2channeler.hp.infoseek.co.jp)
数表が与えられていないので勝手に作ったよ。
logxはx=1.0未満になるとぐっとマイナスの方へ振れてしまい
標本としてはあまり好ましくないので、x=1.0以下の部分は
標本間隔を詰めた。
240:デフォルトの名無しさん
10/06/26 22:40:49
あ、ごめん>>236が見えてなかった。
>>239の取り扱いは好きなようにしてください。
241:デフォルトの名無しさん
10/06/26 22:48:41
>>237
>>218
URLリンク(codepad.org)
簡単というのがSTLを使いまくることだったらすまない。
242: ◆C/HmxiIl0o
10/06/26 23:51:34
>>239
ありがとうございます。>>236は偽者です。
問題文には数表は全く書かれていなかったのですが、授業で使うスライドを見ていったところ、
1枚だけ、端っこの方に小さくy=f(x)= 1/(1+25*x^2)と書かれていました。
宜しくお願いします。
243:デフォルトの名無しさん
10/06/26 23:55:23
よろしく
244:デフォルトの名無しさん
10/06/27 00:37:41
>>242
URLリンク(kansai2channeler.hp.infoseek.co.jp)
うーん標本の取り方がいまいちかな・・・
一次補間が振動しちゃってます
適当に数表をいじって誤差が少なくなるようにトライしてみてください
245:デフォルトの名無しさん
10/06/27 00:47:15
数値計算理論の問題でC/C++のコーディング技術の問題じゃなさそう
246:デフォルトの名無しさん
10/06/27 03:08:48
[1] 授業単元:計算機とアルゴリズム
[2] 問題文(含コード&リンク):数列と漸化式を表示できるように9行目からお願いします。URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: 2010年6月28日
[5] その他の制限:whileを使うと思います。
お願いします。
247:デフォルトの名無しさん
10/06/27 08:46:12
>>246
#include <stdio.h>
main()
{
int n, m, an, sum;
m = 5;
printf("数列 an = n*n とその和を %d 項目まで表示します\n", m);
n = 1;
sum = 0;
while (n <= m)
{
an = n * n;
sum += an;
printf("a[%d] = %d, sum = %d\n", n, an, sum);
n++;
}
}
248:デフォルトの名無しさん
10/06/27 08:50:58
>>246
#include <stdio.h>
main()
{
int n, m, an;
m = 5;
printf("漸化式 a(n) = 2*a(n-1), a1 = 2 で生成される数列を %d 項目まで表示します\n", m);
n = 1;
an = 2;
while (n <= m)
{
if (n == 1)
{
printf("a[%d] = %d\n", n, an);
n++;
continue;
}
an = 2 * an;
printf("a[%d] = %d\n", n, an);
n++;
}
}
249:デフォルトの名無しさん
10/06/27 10:35:20
>>224
URLリンク(ideone.com)
期限すぎてるけど、いいどらえもんがかけた。
250: ◆QZaw55cn4c
10/06/27 16:20:11
>>210
URLリンク(codepad.org)
100! まで確認しています。#define で指定している定数を増加させれば、もっと大きな数値にも対応できるかもしれません。
251:デフォルトの名無しさん
10/06/27 16:39:40
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 入力した2つの整数の間 (入力した数も範囲に含める) にある
「2の倍数でない」かつ「3の倍数でない」かつ「5の倍数でない」
の条件を満たす整数を順に表示し,最後にその個数を表示するプログラムを作成せよ
[3] 環境
[3.1] OS:VineLinux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2010年7月4日
[5] その他の制限:なお,整数の入力には get_int() を用いること。
# define BUFFER_SIZE (256)//get_int()です
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
よろしくおねがいします
252: ◆QZaw55cn4c
10/06/27 16:46:14
>>251
URLリンク(codepad.org)
253:251
10/06/27 17:12:01
>>252
迅速な回答本当にありがとうございます
254:デフォルトの名無しさん
10/06/27 20:04:24
[1] 授業単元:情報処理学
[2] 問題文(含コード&リンク):
do-while文を用いて、キーボードから入力された値が素数であるかどうかを
判別するプログラムを作成せよ。入力された値が素数の場合は"素数"と出力し、
素数でない場合は最小の因数を出力せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:すいませんがわからないです。
[3.3] 言語:C
[4] 期限:2010年6月30日まで
255:デフォルトの名無しさん
10/06/27 20:17:03
1] 授業単元:情報処理学
[2] 問題文(含コード&リンク):
1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。さらにint eval[3]という1次元配列を用意して
eval[0]には0~60の数の個数
eval[1]には61~80の数の個数
eval[2]には81~100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。(配列、for文、if文を使って)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月30日まで
256:デフォルトの名無しさん
10/06/27 20:30:25
>>254
#include <stdio.h>
int main(){
int i,n,f;
printf("> ");
scanf("%d",&n);
f=1; i=1;
do{
++i;
if(n%i==0){
f=0;
break;
}
}while(i*i<=n);
if(f)printf("素数\n");
if(!f)printf("%d\n",i);
}
257:デフォルトの名無しさん
10/06/27 20:33:36
>>255
#include <stdio.h>
int main(void)
{
int array[] = {34, 57, 45, 21, 89, 63, 39, 48, 78, 68, 76, 84, 92, 53, 62}, eval[3] = {0}, i;
double ave;
for(i = 0, ave = 0.0; i <sizeof array / sizeof *array; i++) {
ave += array[i];
if(array[i] < 0) continue;
else if(array[i] <= 60) eval[0]++;
else if(array[i] <= 80) eval[1]++;
else if(array[i] <= 100) eval[2]++;
}
printf("平均値:%f\n", ave / (sizeof array/ sizeof *array));
printf("0~60の数の個数:%d\n", eval[0]);
printf("61~80の数の個数:%d\n", eval[1]);
printf("81~100の数の個数:%d\n", eval[2]);
return 0;
}
258:デフォルトの名無しさん
10/06/27 21:44:01
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
次のように表示するプログラムを作りなさい。
私の学籍番号は0000000Aです。
氏名は aaaaa aaaaaaaaです。
↑半角スペース
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:C++
[3.3] 言語: C言語
[4] 期限: 6月28日午前0時
[5] その他の制限:
char型の配列no name を使う。
noに学籍番号、nameに氏名を格納し表示に使う。
自分の学籍番号、氏名はchar型の配列、no nameを初期化して配列に格納する。
259:デフォルトの名無しさん
10/06/27 21:52:25
#include <stdio.h>
int main(void)
{
char no[] = "0000000A", name[] = "aaaaa aaaaaaaa";
printf("私の学籍番号は%sです。\n", no);
printf("氏名は %sです。\n", name);
return 0;
}
260:デフォルトの名無しさん
10/06/27 22:23:44
>>256
ありがとうございます。
261:デフォルトの名無しさん
10/06/27 22:35:45
>>257
ありがとうございます。
262:デフォルトの名無しさん
10/06/27 22:45:00
>>241
>>241で書いてもらったみたいな感じです。ありがとうございました
263:デフォルトの名無しさん
10/06/27 23:22:42
a
264:デフォルトの名無しさん
10/06/27 23:25:25
>>259
本当に助かります(涙)ありがとうございます!!!!
265:デフォルトの名無しさん
10/06/27 23:45:11
>>264
いえいえ
266:デフォルトの名無しさん
10/06/28 00:33:27
お礼を言われると返って心苦しくなるなw
267:デフォルトの名無しさん
10/06/28 00:41:58
>>241
忘れてました
全部の平均ってどういう意味なんですかね?これがいまいちわからないです
268:デフォルトの名無しさん
10/06/28 00:47:00
>>267
例えば、
英数国合計の平均=(Aさんの英数国合計点+Bさんの英数国合計点+Cさんの英数国合計点)/3
269:268
10/06/28 00:56:58
これのほうがまだわかるかな
(Eavg)
+(Mavg)
+(Javg)
=(Aさんの英語の点+Bさんの英語の点+Cさんの英語の点+Dさんの英語の点)
+(Aさんの数学の点+Bさんの数学の点+Cさんの数学の+Dさんの数学の点点)
+(Aさんの国語の点+Bさんの国語の点+Cさんの国語の点+Dさんの国語の点)
=(Aさんの英数国合計点+Bさんの英数国合計点+Cさんの英数国合計点+Dさんの英数国合計点)/4
=英数国合計の平均
270:みすった
10/06/28 00:58:13
(Eavg)
+(Mavg)
+(Javg)
=(Aさんの英語の点+Bさんの英語の点+Cさんの英語の点+Dさんの英語の点)
+(Aさんの数学の点+Bさんの数学の点+Cさんの数学の+Dさんの数学の点点)
+(Aさんの国語の点+Bさんの国語の点+Cさんの国語の点+Dさんの国語の点)
=(Aさんの英数国合計点+Bさんの英数国合計点+Cさんの英数国合計点+Dさんの英数国合計点)
これを人数分で割ると
(Aさんの英数国合計点+Bさんの英数国合計点+Cさんの英数国合計点+Dさんの英数国合計点)/4
=英数国合計の平均
271:デフォルトの名無しさん
10/06/28 01:15:43
すみっこつつきで申し訳ないけど、変数名がavgなのがちょっと変かもね。
質問者がそれで理解できてるようだからいいけれど。
272:デフォルトの名無しさん
10/06/28 06:33:29
>>271
うざいです(>_<)
273:デフォルトの名無しさん
10/06/28 07:26:32
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
社員の情報を管理するプログラムを作りたい。
そこで、以下の例のような構造体Employeeを考える。
以下の構造体Employeeの例は、社員の名前を保存するchar型の配列変数name、年齢を保存するint型の変数age、年譜を保存するint型の変数salaryを有している。
名前は、アルファベットで記述することとし、この構造体では名字だけを管理することとする。(ただし、この構造体のメンバは変更してもかまわない。)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
このような構造体を用いて、下の実行例のような社員データベースを処理するプログラムを実装しなさい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月29日まで
[5] その他の制限:特にありません。よろしくお願いいたします。
274:デフォルトの名無しさん
10/06/28 10:31:05
1] 授業単元: プログラム入門
[2] 問題文(含コード&リンク): 2つの自然数 n と m を入力し、その積 n×m を
たし算のみで計算するプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] borland c++ compiler 5.5
[3.3] 言語: C
[4] 期限: 2010年06月28日14:30まで
[5] その他の制限: 特になし
よろしくお願いします
275:デフォルトの名無しさん
10/06/28 10:36:05
#include <stdio.h>
int main(void)
{
int n, m, ans;
scanf("%d%d", &n, &m);
printf("%d * %d = ", n, m);
for(ans = 0; m; m--) ans += n;
printf("%d\n", ans);
return 0;
}
276:246
10/06/28 11:02:07
>>247
>>248
ありがとうございます。
助かりました。
277:274
10/06/28 12:02:00
>>275
ループ変数使用して、printf 文をまとめた方がよくないですか?
278:デフォルトの名無しさん
10/06/28 14:05:40
[1] 授業単元: C言語プログラミング入門
[2] 問題文:関数の再帰的呼び出しによりAckermann(アッカーマン)関数を計算するプログラムを作れ。同じプログラムを繰り返し処理(ループ計算)により実現できるか考えよ。Ackermann関数は次式で定義される。
[3] 環境
[3.1] OS: Mac OS
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2010年6月30日
[5] その他の制限: 特にはないです。
よろしくお願いします。
279:278
10/06/28 14:07:58
Ackermann関数は次式で定義される。の次式を書き忘れてましたすいません。
n+1 m=0 and n>_0
ack(m,n)= ack(m-1,1) m>0 and n=0
ack(m-1,ack(m,n-1)) m>0 and n>0
280:デフォルトの名無しさん
10/06/28 14:19:21
>>277 足し算で
#include <stdio.h>
int main(void)
{
int a,b,c;
scanf("%d %d",&a,&b);
if (a<b){c=a;a=b;b=c;}c=0;b=-(b);
while (b++)printf(b?"%d + ":"%d = %d\n",a,c+=a);
return 0;
}
281:デフォルトの名無しさん
10/06/28 14:20:10
>>274
#include <stdio.h>
int main(void) {
int i, n, m, ans;
printf("input:"); scanf("%d", &n);
printf("input:"); scanf("%d", &m);
if(n<0 || m<0) { printf("error"); return 1; }
ans = 0;
if(n < m){
for(i=n; i > 0; --i)
ans += m;
}else{
for(i=m; i > 0; --i)
ans += n;
}
printf("\nans:%d * %d = %d", n, m, ans);
return 0;
}
282:224 ◆C/HmxiIl0o
10/06/28 16:02:40
>>224について、教えていただいたプログラムで提出したのですが、
logxの真値と補間で求めた値の誤差を比較していないとのことで受理されませんでした。
>>249さんのような結果を出さないといけないようなのですが、c++だったので、
Cに作り直そうとしたのですが、うまくできませんでした。
大変申し訳ないのですが、Cで作り直していただけないでしょうか?
宜しくお願い致します。
283: ◆/91kCCQXBo
10/06/28 16:05:01
いいよCで作り直して。
>>280 文章よめ
284:デフォルトの名無しさん
10/06/28 16:16:58
>>282
URLリンク(ideone.com)
285:224 ◆C/HmxiIl0o
10/06/28 16:26:08
>>284
ありがとうございました。
286:デフォルトの名無しさん
10/06/28 17:36:30
[1] プログラミング1
[2] 現在のインターネットを実現しているTCP/IP通信プロトコルでは主にIPv4
を用いており、コンピュータを一意に識別するために32ビットのIPアドレスを
用いている。これを踏まえ、IPアドレスの4つの数字を入力させ、これらを32ビットの
データ型であるunsigned int型の変数にIPアドレスを示す2進数の数値として保存せよ。
保存したIPアドレスがunsigned intの整数値として解釈するといくつとなるか表示する
プログラムを作成せよ。
[3] 環境
[3.1] OS Linux
[3.2] gcc
[3.3] 言語 C言語
[4] 期限:2010年6月30日19:00まで
[5] 特に制限はありませんが、while文は習っていません。
if文、for文、配列など基本的なものを習いました。
どうぞよろしくお願いします。
287:デフォルトの名無しさん
10/06/28 18:07:05
>>286
int main(int argc, char* argv[])
{
int i;
unsigned int val;
unsigned int addr = 0;
for (i = 0; i < 4; i++)
{
printf("%d:", i + 1);
addr <<= 8;
scanf("%d", &val);
addr |= val;
}
printf("addr=%u\n", addr);
return 0;
}
288:デフォルトの名無しさん
10/06/28 18:24:56
[1] 応用プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visualstadio 2008
[3.3] 言語:C
[4] 期限:30日まで
[5] その他の制限:プログラミング経験はほとんどないです。
構造体の授業での宿題です。
構造体はまだわかるのですがそれに苦手なポインタが加わるとどうにもわかりません。
宜しくお願いします。