C/C++の宿題を片付けます 59代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/01/27(金) 09:08:40【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 58代目
http://pc8.2ch.net/test/read.cgi/tech/1137522945/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん
2006/01/27(金) 09:19:11(`・ω・´) >>1乙
.ノ^ yヽ、
ヽ,,ノ==l ノ
/ l |
~""""""~"""~"""~"
0003デフォルトの名無しさん
2006/01/27(金) 09:23:00:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
>>1乙
0004りんご
2006/01/27(金) 12:59:02[1] プログラミング入門
[2] タイピングソフトを考えて作成しなさい。
というだけです。そこで、英語を5文字1文を表示して、その下に
タイプした文字を表示していく。1行打ち終わった時に、3文字
以上間違っていたら、もう一度同じ文が表示され、繰り返す…
というものを作りたいと考えました。
[3] 環境
[3.1] OS:Unix
[3.2] よく分かりません。
[3.3] 言語:C
[4] 期限:2006年1月28日12:00まで
[5] 先ほど、「Cでタイピングソフトを作りたい」というスレを
立ててしまったのですが、そこにも書いた通り、Cを初めて
2週間です。
0005デフォルトの名無しさん
2006/01/27(金) 13:02:19前スレ使い終わってからこっちを使えボケ
スレ削除依頼出してきたのか?
0006デフォルトの名無しさん
2006/01/27(金) 13:06:130007デフォルトの名無しさん
2006/01/27(金) 13:42:07SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる
のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。
どなたかこの問題を解いて下さいませんか?宜しくお願いします。
0008デフォルトの名無しさん
2006/01/27(金) 13:42:56#include <time.h>
static struct { const char* kana; const char* alpha; }
problems[] = {
{"水俣", "minamata"},
{"イタイイタイ", "itaiitai"},
{"四日市", "yokkaichi"},
{"新潟", "nigata"}
};
int main(void) {
int i;
time_t t = time(NULL);
for(i=0; i < sizeof(problems) / sizeof(*problems); i++) {
printf("問題 %d:\n", i+1);
while(1) {
int c = 0;
printf("\t%s (%s)\n", problems[i].kana, problems[i].alpha);
while(problems[i].alpha[c] == getchar()) c++;
fseek(stdin, 0, SEEK_END);
if(problems[i].alpha[c] == '\0') break;
puts("やり直せ。");
}
}
t = time(NULL) - t;
printf("評価: あなたは%s。", (t < 1)? "神レベル": (t < 10)? "凡人": "なめくじ");
return 0;
}
0009デフォルトの名無しさん
2006/01/27(金) 14:18:120010デフォルトの名無しさん
2006/01/27(金) 14:37:46#include <stdio.h>
void swap(int *a, int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int main()
{
int num[]={6,4,3,8,1};
int i, j, num_size;
num_size=sizeof(num)/sizeof(int);
for (i=0 ; i<num_size ; i++)
for (j=num_size-1 ; j>i ; j--)
if (num[j-1] > num[j])
swap(&num[j-1], &num[j]);
for (i=0 ; i<num_size ; i++)
printf("%d\n", num[i]);
return 0;
}
0011デフォルトの名無しさん
2006/01/27(金) 14:46:22厨房板やVIPじゃあるまいし
0012以下、名無しにかわりましてVIPがお送りします
2006/01/27(金) 14:50:220013デフォルトの名無しさん
2006/01/27(金) 14:52:00ttp://yy11.kakiko.com/test/read.cgi/news4vip/1122044336/
ワンクリ業者殲滅!
0014デフォルトの名無しさん
2006/01/27(金) 14:56:23残念ながらプログラム板にもVIPのカス共はいるってことさ
0015デフォルトの名無しさん
2006/01/27(金) 15:01:560016デフォルトの名無しさん
2006/01/27(金) 15:02:280017デフォルトの名無しさん
2006/01/27(金) 15:03:130018デフォルトの名無しさん
2006/01/27(金) 15:03:14〒 ! + 。 + 。 * 。
+ 。 | |
* + / / イヤッッホォォォオオォオウ!
∧_∧ / /
(´∀` / / + 。 + 。 * 。
,- f
/ ュヘ | * + 。 + 。 +
〈_} ) | それがVIPクオリティ
/ ! + 。 + + * http://ex7.2ch.net/news4vip/
./ ,ヘ |
ガタン ||| j / | | |||
――――――――――――
0019デフォルトの名無しさん
2006/01/27(金) 15:03:380020デフォルトの名無しさん
2006/01/27(金) 15:04:430021デフォルトの名無しさん
2006/01/27(金) 15:04:59''';;';';;'';;;,., ザッ
''';;';'';';''';;'';;;,., ザッ
ザッ ;;''';;';'';';';;;'';;'';;;
;;'';';';;'';;';'';';';;;'';;'';;;
vymyvwymyvymyvy ザッ
ザッ MVvvMvyvMVvvMvyvMVvv、
Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
__,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ
/'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\
. |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:|
| ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::|
. | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/
/`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
0022デフォルトの名無しさん
2006/01/27(金) 15:05:010023デフォルトの名無しさん
2006/01/27(金) 15:05:590024デフォルトの名無しさん
2006/01/27(金) 15:08:22''';;';'';';''';;'';;;,., ザッ
ザッ ;;''';;';'';';';;;'';;'';;;
;;'';';';;'';;';'';';';;;'';;'';;;
vymyvwymyvymyvy ザッ
ザッ MVvvMvyvMVvvMvyvMVvv、
Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
__,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ
/'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\
. |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:|
| ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::|
. | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/
/`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
0025デフォルトの名無しさん
2006/01/27(金) 15:08:44NGキーワードに指定しろ
0026デフォルトの名無しさん
2006/01/27(金) 15:10:070027デフォルトの名無しさん
2006/01/27(金) 15:10:41ザッ ;;''';;';'';';';;;'';;'';;;
;;'';';';;'';;';'';';';;;'';;'';;;
vymyvwymyvymyvy ザッ
ザッ MVvvMvyvMVvvMvyvMVvv、
Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
__,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ
/'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\
. |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:|
| ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::|
. | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/
/`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
0028デフォルトの名無しさん
2006/01/27(金) 15:14:23VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
0029デフォルトの名無しさん
2006/01/27(金) 15:15:30ザッ ;;''';;';'';';';;;'';;'';;;
;;'';';';;'';;';'';';';;;'';;'';;;
vymyvwymyvymyvy ザッ
ザッ MVvvMvyvMVvvMvyvMVvv、
Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
__,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ
/'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\
. |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:|
| ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::|
. | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/
/`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
0030デフォルトの名無しさん
2006/01/27(金) 15:16:41なんかすげぇ面倒だな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1555.c
0031デフォルトの名無しさん
2006/01/27(金) 15:17:407はCなら俺に聞けすれでも聞いてたマルチ野郎だぞ
テンプレぐらい守れってんだ
0032vipper
2006/01/27(金) 15:19:230033デフォルトの名無しさん
2006/01/27(金) 15:19:31何を教えても無駄な気がするのだが。
0034デフォルトの名無しさん
2006/01/27(金) 15:20:57003530
2006/01/27(金) 15:28:01というわけでless_wchar_tとmainを修正
int less_wchar_t(wchar_t lhs, wchar_t rhs)
{
int i, len;
static int is_first = 1;
static char temp[] = "0123456789";
static wchar_t table[100];
if (is_first) {
is_first = 0;
len = mbstowcs(table, temp, sizeof(temp)) + 1;
}
for (i = 0; i < len; i++) {
if (table[i] == lhs)
return table[i] != rhs;
if (table[i] == rhs)
return 0;
}
return 0;
}
003630
2006/01/27(金) 15:28:38{
char table[] = "64381";
wchar_t work[100];
int len;
setlocale(LC_ALL, "");
mbstowcs(work, table, sizeof(work)/sizeof(work[0]) - 1);
printf("before :%ls\n", work);
bubble_sort(work, wcslen(work));
printf("after :%ls\n", work);
return 0;
}
0037デフォルトの名無しさん
2006/01/27(金) 15:29:510038デフォルトの名無しさん
2006/01/27(金) 15:32:44>>10じゃ駄目なのか?
0039デフォルトの名無しさん
2006/01/27(金) 15:34:080040デフォルトの名無しさん
2006/01/27(金) 15:43:17駄目だろ。バブルソートの関数を使ってないんだから。
0041デフォルトの名無しさん
2006/01/27(金) 15:48:160042デフォルトの名無しさん
2006/01/27(金) 15:52:47VIPはおかしなことをする奴は多いけど礼節知らずが多いとは違うんだぞ。
0043デフォルトの名無しさん
2006/01/27(金) 15:58:23#include <stdio.h>
#include <stdlib.h>
void swap(int* lhs, int* rhs)
{
int old = *lhs;
*lhs = *rhs;
*rhs = old;
}
int bubble_sort(const void* lhs, const void* rhs)
{ return *(int*)lhs - *(int*)rhs; }
int main(void)
{
int i;
int n[] = { 6, 4, 3, 8, 1 };
for (i = 0; i < sizeof(n) / sizeof(n[0]); ++i) {
swap(&n[i], n + rand() % (sizeof(n) / sizeof(n[0])));
}
qsort(n, sizeof(n) / sizeof(n[0]), sizeof(int), &bubble_sort);
for (i = 0; i < sizeof(n) / sizeof(n[0]); ++i) {
printf("%d ", n[i]);
}
return 0;
}
0044デフォルトの名無しさん
2006/01/27(金) 15:58:39あんたにとっては葬式中に屁をブッブこきながら笑うのも礼儀知らずのうちに入らないんだろうね。
0045デフォルトの名無しさん
2006/01/27(金) 16:01:370046デフォルトの名無しさん
2006/01/27(金) 16:22:33「俺たちVIPPERは凄いことやってる」とか息巻いてるカス共ww
0047デフォルトの名無しさん
2006/01/27(金) 16:24:050048デフォルトの名無しさん
2006/01/27(金) 16:25:47や め れ
0049デフォルトの名無しさん
2006/01/27(金) 16:28:080050デフォルトの名無しさん
2006/01/27(金) 16:28:200051デフォルトの名無しさん
2006/01/27(金) 16:30:40>>44
や
>>11
みたいなのをヤメレってことだ
0052デフォルトの名無しさん
2006/01/27(金) 16:32:08× VIPの悪口書くとVIPPERの内お調子者の連中がくるから
○ VIPの悪口書くと屑VIPPER共の最底辺の連中がくるから
0053デフォルトの名無しさん
2006/01/27(金) 16:32:55お前が一番煽ってるという事を自覚してないようだな
0054デフォルトの名無しさん
2006/01/27(金) 16:39:24熱くなるな バグ作り込むぞ
0055デフォルトの名無しさん
2006/01/27(金) 16:57:22私は27歳のOLしてるのぉ〜〜〜っ♪(#^ω^#)ブーン
うーんとー、私メル友がすっごくすっごく欲しくってー、\( ^ω^ )/ブーン
探してたら( ^ω^ )なんσ( ^ω^ )とっ!☆彡(ノ^ω^)ノ☆彡ヘ(^ω^ヘ)☆彡(ノ^ω^)ノ☆彡
素敵(^ω^;ブーン!な掲示板♪を発見!!!!( ^ω^)//""" パチパチパチブーン
あやしい所(^ω^;ブーン!とか…{{ (^ω^;) }} ブルブルブーンすごい数の掲示板がありますけど、
これ全部1人の方が管理して ∩
てなわけで、ついついσ( ^ω^ ) | | /⌒',ノ ̄ ̄`ヽ、―ニ メキメキメキメキッ!!!!
メル友に、なってσ( ^ω^ )くれる ヽ(^ω/ ´`ヽ _ 三,:三ー三,:
え?くれないのぉ〜?(;^ω^ )そんノ .ノヽ--/ ̄ , ` ` ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
なってくれなかったら、( ^ω^)乂(^( }. ...| /!
☆○(^ω^)o ぱ〜んちブーン、☆(\ }、ー‐し'ゝL _
( ^ω^ ) いてっ!ダメ!! ゛o(^ω^*)o\_jr--‐‐'´} ;ーー------------------------------
素敵(^ω^;ブーン!な掲示板♪ブ━`ヾ---‐'ーr‐'"==!!!( ^ω^)//""" パチパチパチブーン
( ^ω^ )きゃ〜〜(^ω^;)やられた〜〜(o^ω^)o ドテッブーン ブ━━(^ω^;)━━ン!
( ^ω^ )←気絶中。。。。・゜゜・o( ^ω^ )o・゜゜・。うぇぇん <( ^ω^;)>ノォオオオオオ!!ブーン
なあんて(#^ω^#)こんな♪(#^ω^#)キャハブーン 私っ!σ( ^ω^ )だけど、(///^ω^///)
お友達σ( ^ω^ )になってm( ^ω^ )mくださいませませブーン♪(^ω^'*)フフブーン
ということで。(^ω^)vじゃあね〜〜〜ブーン♪( ^ω^ )/~~ ほんじゃo(^ω^ヽ)(/^ω^)o レッツブーン♪
それでは、今から他の掲示(^ω^;ブーン!板も色々見てきまーすC= C= C= C=┌(^ω^)┘ブーン
(*^ω^*)ノ~~マタネー☆'.・*.・:★'.・*.・:☆'.・*.・:★
0056デフォルトの名無しさん
2006/01/27(金) 16:58:40#include <stdio.h>
void swap(int *a, int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void bubble_sort(int *num, int num_size)
{
int i,j;
for (i=0 ; i<num_size ; i++)
for (j=num_size-1 ; j>i ; j--)
if (num[j-1] > num[j])
swap(&num[j-1], &num[j]);
}
int main()
{
int num[]={6,4,3,8,1};
int i, num_size;
num_size=sizeof(num)/sizeof(int);
bubble_sort(num, num_size);
for (i=0 ; i<num_size ; i++)
printf("%d\n", num[i]);
return 0;
}
0057デフォルトの名無しさん
2006/01/27(金) 17:57:20及び最大値、最小値を求めて表示するプログラムを作れ。
ヒント: for(i=0;i<10;i++){ printf("a[%d]=??";i); scanf("%lf",&a[i]);}
でa[0],a[1],...,a[9] を入力!!
(次に) saidai=a[0];
そのあと、計算の為にforループを作るが、
(ループの中で) if (a[i]>saidai) saidai=a[i];
は何を表わすか?きっと最大値を求めるプログラム関連だろう。
しくみがわかれば最小値も同様にわかる。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows Me
[3.2] すいません、わかりません
[3.3] 言語: C
[4] 期限: [2006年01月30日まで]
[5] その他の制限:特にありません。
これがわかりません、教えてください
0058デフォルトの名無しさん
2006/01/27(金) 18:07:37#include<stdio.h>
int main(void){
double a[10],sum=0.0,saidai,saisyo,c;
int i;
for(i=0;i<10;i++){
scanf("%lf",&a[i]);
sum += a[i];
}
saidai = a[0];
for(i=1;i<10;i++)
if(a[i]>saidai)
saidai = a[i];
saisyo = a[0];
for(i=1;i<10;i++)
if(a[i]<saisyo)
saisyo = a[i];
printf("合計:%f\n平均:%f\n最大:%f\n最小:%f\n",sum,sum/10.0,saidai,saisyo);
return 0;
}
0059デフォルトの名無しさん
2006/01/27(金) 18:10:10void main(void)
{
int i;
double a[10];
double saidai, saishou, goukei=0, heikin;
for(i=0;i<10;i++) {
printf("a[%d]=??";i);
scanf("%lf",&a[i]);
}
saidai= saishou = a[0];
for(i=0;i<10;i++) {
goukei += a[i];
if(a[i]>saidai) saidai=a[i];
if(a[i]<saishou) saishou=a[i];
}
heikin = goukei / 10;
printf("%lf, %lf, %lf, %lf\n", saidai, saishou, goukei, heikin);
return;
}
出題者の意向にできるだけ忠実にしたつもり。
変数はダサく、初心者っぽくw
0060デフォルトの名無しさん
2006/01/27(金) 18:11:21#define NUM 10
#include <stdio.h>
int main()
{
float num[NUM],max,min,avg,sum=0;
int i;
for (i=0 ; i<NUM ; i++)
scanf("%f", &num[i]);
for (i=0 ; i<NUM ; i++)
sum+=num[i];
avg=sum/NUM;
max=num[0];
for (i=1 ; i<NUM ; i++)
if (num[i]>max)
max=num[i];
min=num[0];
for (i=1 ; i<NUM ; i++)
if (num[i]<min)
min=num[i];
for (i=0 ; i<NUM ; i++)
printf("%fd\n", num[i]);
printf("\nmax:%f\nmin:%f\navg%f\nsum:%f\n", max, min, avg, sum);
return 0;
}
0061デフォルトの名無しさん
2006/01/27(金) 18:13:18goukei = saidai= saishou = a[0];
for(i=1;i<10;i++) {
goukei += a[i];
if(a[i]>saidai) saidai=a[i];
if(a[i]<saishou) saishou=a[i];
}
<二修正ダ>
0062デフォルトの名無しさん
2006/01/27(金) 18:13:59double average = 0;
for(int i=0;i<10;i++) average += lpArr[i]/10;
ってのはだめかな
0063デフォルトの名無しさん
2006/01/27(金) 18:14:30saidai= saishou = a[0];
これは何か初心者っぽくないw
0064デフォルトの名無しさん
2006/01/27(金) 18:30:48そんな小手先の修正でなんとかなるようなオーバーフローならどんなやり方でやっても構わんよ。
実際に現れるオーバーフローを気にしなきゃいかん場合ってのは、そんなのが全然通用しないくらいにヤバくなる。
0065デフォルトの名無しさん
2006/01/27(金) 18:33:43+=もだめだなw
0066デフォルトの名無しさん
2006/01/27(金) 18:33:57[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1556.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1557.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1558.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/01/30
[5] その他の制限:
1558.txtは自分で一応やってみたものですが、3+4みたいな簡単なモノならできますが
3+4*5みたいになると結果がおかしくなってしまいます。
正しく動くように修正してもらえないでしょうか
0067デフォルトの名無しさん
2006/01/27(金) 18:36:460068デフォルトの名無しさん
2006/01/27(金) 18:36:52長すぎて読む気が起きん.一から作ったほうが早そう.
0069デフォルトの名無しさん
2006/01/27(金) 18:39:080070デフォルトの名無しさん
2006/01/27(金) 19:00:290071デフォルトの名無しさん
2006/01/27(金) 19:03:57http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1559.c
結局読む気が起きなかったので,読まずに書いた.いくらかやって動作確認はしたけど合ってる自信は無いよ.
0072デフォルトの名無しさん
2006/01/27(金) 19:09:15回答したくなかったら黙殺でいいじゃないか
0074デフォルトの名無しさん
2006/01/27(金) 19:16:17読まずに書いたってあるから1から書いたかと思ってしまったよ。すまない
0075デフォルトの名無しさん
2006/01/27(金) 19:38:22ありがとうございます
感謝します
0076デフォルトの名無しさん
2006/01/27(金) 19:40:53[2] 問題文(含コード&リンク): 10人の名前、年齢、電話番号の入ったファイルを作り、それを読み出すプログラムを作れ。
そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。
また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。
問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: すいませんわかりません
[3.3] 言語:C
[4] 期限:2006年1月30日まで
[5] その他の制限: 初心者なので、あまり難しくないものでお願いします。
前スレで質問の意味がわからないと言われてしまい、答えがもらえませんでした・・・
すみませんがお願いします。
0077デフォルトの名無しさん
2006/01/27(金) 19:42:28問題文が抽象的過ぎる
そんな抽象的な奴はBasicでもやってろ
0078デフォルトの名無しさん
2006/01/27(金) 19:42:41追記でいいのか上書きなのか
0079デフォルトの名無しさん
2006/01/27(金) 19:48:11また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。
はしょってるが、
scanf("%s", filename);
fp = fopen(filename, "r");
while ((c = fgetc(fp)) != EOF) putchar(c);
問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。
scanf("%s", filename);
getchar();
fgets(buf, sizeof(buf), stdin);
fp = fopen(filename, "a");
fputs(buf, fp);
0080デフォルトの名無しさん
2006/01/27(金) 19:49:27適当つか文句言っても直さん
#include<stdio.h>
#include<string.h>
int main(void){
FILE *fp;
char str[256],filename[256];
while(1){
printf("ファイル名>");
gets(str);
if(strlen(str)<9)break;
puts("ファイル名は8文字までです");
}
sprintf(filename,"%s.dat",str);
if((fp=fopen(filename,"r"))==NULL){
puts("ファイル読み込みエラー");
return 1;
}
while(fgets(str,256,fp)!=NULL)
printf("%s",str);
fp = fopen(filename,"a");
printf("\n( ´ー`)y−~~で、用件は?>");
gets(str);
fprintf(fp,"\n%s",str);
return 0;
}
0081デフォルトの名無しさん
2006/01/27(金) 19:52:57[2]
文字列の○文字目から○文字目までを抜き出して返す関数を作成しなさい
例
対象 □□□□△△△△□□□□
↓
5文字目から8文字目まで
↓
結果 △△△△
文字列の○文字目から○文字目までを削除して返す関数を作成しなさい
例
対象 □□□□△△△△□□□□
↓
5文字目から8文字目まで
↓
結果 □□□□□□□□
[3] 環境
[3.1] OS: WindowsXP
[3.2] VC.net
[3.3] 言語:C言語
[4] 期限:2006年01月30日13:00まで
[5] その他の制限:制限等は全くありません。お願いします。
0082デフォルトの名無しさん
2006/01/27(金) 19:56:53文字とは全角半角混合か?
0083デフォルトの名無しさん
2006/01/27(金) 20:00:10基本的に半角で1文字扱い
全角で2文字扱いだそうです
0084デフォルトの名無しさん
2006/01/27(金) 20:00:32>>82でした
0085デフォルトの名無しさん
2006/01/27(金) 20:02:05[2] 問題文(含コード&リンク):x軸とy軸からなる平面状の座標(x,y)を表す構造体point()
を定義せよ。次に、xとyを引数にとり、座標を示す関数define_point()、および
座標を示す構造体を引数にとり、これを座標出力に"(x,y)"の形式で出力する関数put_point()を
定義せよ。また、これらの関数を用いて、座標p1=(1,2),p2=(5,4),p3=(-2,3)を定義し、標準出力に以下のように
出力するプログラムを作成せよ。
$./test01
p1=(1,2)
p2=(5,4)
p3=(-2,3)
[3] 環境
[3.1] OS: (Windows/Linux/等々):Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 1月28日PM5:00
[5] その他の制限: 特別なライブラリなどは使わず、#includeは<stdio.h>のみ
でプログラムしていただけると幸いです。よろしくお願いします。
0086デフォルトの名無しさん
2006/01/27(金) 20:02:220087デフォルトの名無しさん
2006/01/27(金) 20:04:05char* fanc(char *str,int a,int b){
char *c;
int i;
c = malloc(b-a+2);
for(i=0;i<b-a+1;i++)
c[i] = str[i+a-1];
c[b-a+1] = '\0';
return c;
}
0088デフォルトの名無しさん
2006/01/27(金) 20:04:12void f(int i, int j, char *s, char *t) {
int k;
for (k = 1; *t = *s; ++k, ++s)
if (i <= k && k <= j) ++t;
*t = '\0';
}
void g(int i, int j, char *s, char *t) {
int k;
for (k = 1; *t = *s; ++k, ++s)
if (!(i <= k && k <= j)) ++t;
*t = '\0';
}
main() {
char s[] = "ooooxxxxoooo";
char t[100], u[100];
f(5,8,s,t);
g(5,8,s,u);
printf("%s %s %s\n", s, t, u);
}
0089デフォルトの名無しさん
2006/01/27(金) 20:05:40>>81
マルチバイト文字シラネ。文字列の範囲外の数字を指定されたときもシラネ
#include<string.h>
char*slice_string(const char*string,int begin,int end,char*dst){
memcpy(dst,string+begin,end-begin);
dst[end-begin]='\0';
return dst;
}
char*remove_string(const char*string,int begin,int end,char*dst){
memcpy(dst,string,begin);
strcpy(dst+begin,string+end);
return dst;
}
int main(){
char buf[80];/*加工した文字列を入れる*/
puts(slice_string("Hello World",2,5,buf));/* 2 .. 5 を抜き出す*/
puts(remove_string("Hello World",2,5,buf));/* 2 .. 5 を削除*/
}
0090デフォルトの名無しさん
2006/01/27(金) 20:07:49全角については、getchを用いて入力する時に判定しています。
全半角関係無しの文字数を持つ文字列を個人的に用意して、
○文字目が△であれば全角、□であれば半角といった具合です。
判定した時に全角であれば二文字分消すことになります。
0091デフォルトの名無しさん
2006/01/27(金) 20:09:490092デフォルトの名無しさん
2006/01/27(金) 20:10:11じゃあ全角半角判定の関数頂戴
0093デフォルトの名無しさん
2006/01/27(金) 20:17:13/* 残念ながら構造体名の期待に添えなかった */
struct point { int x, y; };
struct point define_point(int x, int y) {
struct point p; p.x = x; p.y = y; return p;
}
void put_point(struct point p) {
printf("(%d,%d)", p.x, p.y);
}
main() {
struct point p1, p2, p3;
p1 = define_point(1,2);
p2 = define_point(5,4);
p3 = define_point(-2,3);
put_point(p1); printf("\n");
put_point(p2); printf("\n");
put_point(p3); printf("\n");
}
0094デフォルトの名無しさん
2006/01/27(金) 20:21:12default://通常の文字の扱い
if (i > 128){
vx[b] = 'f';//全角一文字追加
b++;//全角区別無しに1文字加えた扱い
s[z] = putch(i);
z++;
}else {
vx[b] = 'h';
b++;
s[z] = putch(i);
z++;//一文字分打ち込んだことにする
}
iはgetchを入れている整数型で
zは全角を二文字扱いした時の文字数を数える整数型
bは全角を一文字扱いした時の文字数を数える整数型
sが一番基本となる文字列で、vxが前半角判定用の文字列
if (strcmp("vx[b]", "f") == 0) {
putch(i);
}
putch(i);
b--;
z--;
0095デフォルトの名無しさん
2006/01/27(金) 20:24:42009681 ◆s6s7GdUxgI
2006/01/27(金) 20:34:32申し訳ありません。ご迷惑おかけしました
>>89様の関数で問題は解決しました
ちなみに>>90と>>94は自分ではありません
getchは動作に難があるので使用しておりません(鳥つけておくべきでした)
>>87様、>>88様、>>89様をはじめとしたスレ住人の皆様方のご尽力、本当に感謝いたします
有難う御座いました
0098デフォルトの名無しさん
2006/01/27(金) 22:40:570099デフォルトの名無しさん
2006/01/27(金) 22:41:510100デフォルトの名無しさん
2006/01/27(金) 23:51:55[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1561.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1562.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 1/30
お願いします!
0101デフォルトの名無しさん
2006/01/27(金) 23:55:11きっと他の人がやってくれる
0102デフォルトの名無しさん
2006/01/28(土) 00:03:13風呂はいってきま
0103デフォルトの名無しさん
2006/01/28(土) 00:07:13#include <stdio.h>
#include <string.h>
int center_char_of_string(const char * str, int length)
{
return str[(length - 1) / 2];
}
int main(void)
{
char buf[256], dest[256] = {'\0'};
int i;
for (i = 0; i < sizeof(dest) - 1 && scanf("%255s", buf) == 1; i++) {
dest[i] = center_char_of_string(buf, strlen(buf));
}
puts(dest);
return 0;
}
0104デフォルトの名無しさん
2006/01/28(土) 00:35:51お早い回答ありがとうございます!助かりました!
0105デフォルトの名無しさん
2006/01/28(土) 01:37:41[2] 問題文(含コード&リンク): n人の学生の名前を行単位で読み込み、
関数void sort(struct student *p[],int n)でソートした後出力せよ。
struct student = {char name[40]};
struct student *a[N];
[3] 環境
[3.1] OS: (Windows XP
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[4] 期限: 2月1日
[5] その他の制限: stdlibはダメ
よろしくお願いします
0106前スレ881
2006/01/28(土) 01:41:24[2]ダイクストラ法により隣接行列で表されるグラフの最短経路を求めるプログラムを書きかけた。
このプログラムを完成させ、下の例のグラフで0番の節点から,4番の節点に至る最短経路を求めよ、
プログラム中には、動きがわかるように詳しいコメントを記すこと。
特に、shortestpath関数の詳しい説明を求める。
未完成プログラム⇒http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1550.txt
[3.1]Linux[3.2]gcc[3.3]c言語
[4] 1/31まで
[5] (↓グラフ例)
0 1 2 3 4 ⇒最初の行は節点番号
0 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
因みにこれを画像で表すとこうなります。↓
⇒http://ccfa.info/cgi-bin/up/src/up23553.bmp
念のため、ダイクストラ法の分かり易い説明が書いてあるサイトを貼っておきます。
⇒http://karel.tsuda.ac.jp/class2005/algo/c24.html
よろしくお願いしますm(__)m
0107デフォルトの名無しさん
2006/01/28(土) 10:48:21stdlib.h使用不可ってことはnの値が決まって無いのに
mallocやcallocを使わずに領域確保しろって言うのか?
それとも勝手にnの値を決めろってこと?
あと学生の名前は半角英数のみで、ファイルから読み込むのか?
0108デフォルトの名無しさん
2006/01/28(土) 11:04:39stdlib.hは使ってないw
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<memory>
struct student {char name[40];};
void sort(struct student*p[],int n){
struct inner{
static bool less_student(struct student*a,struct student*b){
return std::strcmp(a->name,b->name)<0;
}};
std::sort(p,p+n,inner::less_student);
}
int main(){
const int N = 100;
struct student *a[N];
int i;
for(i=0;i<N;++i){
std::auto_ptr<student>p(new student);
if(!std::cin.getline(p->name,sizeof(p->name)))break;
a[i] = p.release();
}
sort(a,i);
for(int j=0;j<i;++j)std::cout << a[j]->name << std::endl;
}
0109デフォルトの名無しさん
2006/01/28(土) 11:08:07[2] テキストファイルを読み込み単語数をカウントせよ。
ただし、単語と単語の間はスペースで区切られているものとし、
アルファベットしか用いられてない文章とする。
例:テキストファイルの内容がThis is an apple Apple is red だとすると
This : 1
is :2
an :1
Apple:2
red:1
[3]環境
[3-1]OS:Linux
[3-2] gcc
[3-3]C言語
[4] 1/31まで
よろしくお願いします。
0110デフォルトの名無しさん
2006/01/28(土) 11:08:52#include <cstdlib>
なんてのでどうだろう?
てか、CかC++かも書いてないんだよね。
0111デフォルトの名無しさん
2006/01/28(土) 11:10:120113デフォルトの名無しさん
2006/01/28(土) 11:14:58名前を聞いた程度です。
0114デフォルトの名無しさん
2006/01/28(土) 11:18:215つのうち、どれを習っているか書いてくださいな。
0115デフォルトの名無しさん
2006/01/28(土) 11:19:02素直にC99で可変要素数配列にすればいいじゃないの。
0116デフォルトの名無しさん
2006/01/28(土) 11:19:280117デフォルトの名無しさん
2006/01/28(土) 11:20:13ファイルの読み込み方法は?
いや俺はやらなけど
0118デフォルトの名無しさん
2006/01/28(土) 11:21:43二分探索木、malloc、ハッシュは別の授業で習ったので
プログラムに実装したことはないですけど、どのようなことをしているかは
大体分かります。
0120デフォルトの名無しさん
2006/01/28(土) 11:28:01trie 使え。以上。
0121デフォルトの名無しさん
2006/01/28(土) 11:33:360122デフォルトの名無しさん
2006/01/28(土) 11:33:48トライでやれとかいう指定があれば別だが
0123デフォルトの名無しさん
2006/01/28(土) 11:39:47出力ルールの推測がむずい。
0124デフォルトの名無しさん
2006/01/28(土) 11:45:540125デフォルトの名無しさん
2006/01/28(土) 11:46:290126デフォルトの名無しさん
2006/01/28(土) 11:47:220127108
2006/01/28(土) 11:47:27まぁ次からは言語をちゃんと指定してくださいねっと。
とりあえずstdlib.hは使わずに普通に書いてみた。
sortは一番頭の悪いソートなんで授業で,もっと賢いソートを習ってたら書き換えるのを薦める。
#include<stdio.h>
#include<string.h>
struct student {char name[40];};
void sort(struct student*p[],int n){
int i,j;
for(i=0;i<n;++i)
for(j=i;j<n;++j){
if(strcmp(i[p]->name,j[p]->name)>0){
struct student*c=i[p];i[p]=j[p];j[p]=c;
}
}
}
enum{N = 100};
int main(void){
struct student *a[N];
struct student b[N];
int i,j;
for(i=0;i<N;++i){
if(!fgets(i[b].name,sizeof(i[b].name),stdin))break;
i[a] = &i[b];
}
sort(a,i);
for(j=0;j<i;++j)fputs(j[a]->name,stdout);
return 0;
}
0128デフォルトの名無しさん
2006/01/28(土) 12:17:59i[1] = &i[b];
のあとに
fflush(stdin);
を追加したほうがいいかと思われ
0129デフォルトの名無しさん
2006/01/28(土) 12:19:11いやいや、fflush(stdin)は処理系依存。
それを分かっててソースをさらにカオスにさせたいのなら問題なしだけどw
0131デフォルトの名無しさん
2006/01/28(土) 13:39:22こんなもんでどうじゃろ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1563.c
0133デフォルトの名無しさん
2006/01/28(土) 13:58:35#include <stdio.h>
#include <string.h>
char memory[10000] = {0}; int count[10000] = {0}; void inc(char *s) {
char buf[100]; char *p; strcpy(buf, " "); strcat(buf, s); strcat(buf,
" "); p = strstr(memory, buf); if (p == NULL) { strcat(memory, buf); p
= strstr(memory, buf); } count[p - memory + 1]++; } void print(void) {
char *p; int i; for (p = memory; *p; *p++) if (*p == ' ') *p = '\0';
for (i = 0; i < 10000; i++) if (count[i]) printf("%s : %d\n", memory +
i, count[i]); } int main(void) { char buf[100]; while (scanf("%s",
buf) == 1) inc(buf); print(); return 0; }
0134デフォルトの名無しさん
2006/01/28(土) 13:59:59[2] 問題文(含コード&リンク):3つの座標p1,p2,p3を引数にとり、その3つの座標を頂点とする
三角形の面積を求める関数triangle()を定義せよ。なおこの関数には
x,y軸からなる平面上の座標を表す構造体を定義し、利用すること。
また、座標はp1(1,1) p2(2.2) p3(3,3)を頂点とする三角形の面積を求める
プログラムを作成し、各関数での仮引数の変数名はp1,p2,p3として区別がつくように
すること。
[3] 環境
[3.1] OS: (Windows/Linux/等々):Win
[3.2] コンパイラ名とバージョン: ボーランド
[3.3] 言語: C
[4] 期限: 1月29日
[5] その他の制限: #includは<stdio.h>のみでお願いします
0135デフォルトの名無しさん
2006/01/28(土) 14:12:25(1,1)(2,2)(3,3)だと、どう見ても直線です
本当に(r
#include<math.h>
#include<stdio.h>
typedef struct Point Point;
struct Point{
double x;
double y;
};
double distance(const Point*p1,const Point*p2){
double x = p2->x - p1->x;
double y = p2->y - p1->y;
return sqrt(x*x+y*y);
}
double triangle(const Point*p1,const Point*p2,const Point*p3){
double a = distance(p1,p2),b=distance(p2,p3),c=distance(p3,p1);
double r = (a+b+c)/2;
return sqrt(r*(r-a)*(r-b)*(r-c));
}
int main(void){
const Point p1={1,1},p2={2,2},p3={3,3};
printf("%f\n",triangle(&p1,&p2,&p3));
return 0;
}
0136135
2006/01/28(土) 14:13:53じゃあ適当にニュートン法でも使ってsqrtは求めてくれ
0137134
2006/01/28(土) 14:18:590138デフォルトの名無しさん
2006/01/28(土) 14:21:01double triangle(const Point*p1,const Point*p2,const Point*p3){
double x1 = p2->x - p1->x, x2 = p3->x - p1->x;
double y1 = p2->y - p1->y, y2 = p3->y - p1->y;
double S = (x1 * y2 - x2 * y1) / 2.0;
return S >= 0 ? S : -S;
}
0139135
2006/01/28(土) 14:27:53勉強になった。ありがと
やっぱ、数学の知識が少ないと、
こういうときにスマートな解を出せないから情けないなぁorz
0140デフォルトの名無しさん
2006/01/28(土) 14:34:420141デフォルトの名無しさん
2006/01/28(土) 14:47:08最初にdistanceを削除する
次にtriangleを>>138のtriangleに置き換える。
その後main関数のp1,p2,p3の代入している数字を好きなものに変える。
この先は本題とそれるけど、もし、動的に決めたいのなら
constを外して、scanfなり、fgets+(strtof or atof)なりで代入しても良い。
......というか、あそこまでプログラム書かれてて、どう変更するかが分からないようだと正直どうかと思う。
一応読みやすく書いたつもりなんだけどなぁorz
0142デフォルトの名無しさん
2006/01/28(土) 14:54:25そもそも、自分でやろうとしない人たちだから、そんなに期待しちゃだめ。
いや、綺麗なプログラムだし、見易いよ。>>135
外積の絶対値はベクトルの作る平行四辺形の面積になるのですな…>>138
符号はよくわからんけど。
俺はネタプログラムしか書けないんで、尊敬する。
0143デフォルトの名無しさん
2006/01/28(土) 15:07:11今からしっかり内容を解読したいと思います。本当にありがとうございました。…もし上記のプログラムに質問があったら、このスレに書き込んでいいのでしょうか?
0144デフォルトの名無しさん
2006/01/28(土) 15:17:24別に構わないと思うよ。
疑問に思った点を、どんなに考えても自分では答えが出せないのなら、
聞いたほうが良いからね。
0145デフォルトの名無しさん
2006/01/28(土) 15:25:06(1,1), (2,2), (3,3) →もうちょっと考えましょう。
プログラムを作る前に、入力と出力(結果)を人の手で考えたほうがよいです。
すいません、結局 →もうちょっと考えましょう。
あやまってはいますが、相手の話をぜんぜん理解しようとしてません。
…内容を解読…ありがとうございました。→たいへん謙虚でよろしいです。
…もし上記のプログラムに質問があったら、…→謙虚さをだいなしにしてしまいます。
まず、やってみて、それでもわからないときに言えばいいのです。
総評:
質問のしかたで相手がどう受け止めるか考えましょう。
宿題を完成させるのに、ちょっとだけでもいいので手間をかけましょう。
0146143
2006/01/28(土) 15:55:41上記のプログラムで解読中にわからなかった事を質問させていただきます。
・ typedef struct Point Point; という記述をまだ習っていないため、
どういった事が可能になるのかわかりません。これを使用せずにプログラムを
組む為にはどう改変していけば良いのですか?
0147デフォルトの名無しさん
2006/01/28(土) 16:03:35typedef int moe;
とやると、moeはint型として扱うことができる。
typedef Debu PIZA;
typedef Chinsou DQN;
0148デフォルトの名無しさん
2006/01/28(土) 16:04:17ってのはstruct Pointと書く代わりにPointと書いてもOKという宣言。
なので、
これを使わないのなら関数の引数や変数の定義で、
Pointと書いているところをstruct Pointに書き換える。
0149143
2006/01/28(土) 16:35:44#include<stdio.h>
struct point{
double x;
double y;
};
double triangle(const struct point*p1,const struct point*p2,const struct point*p3){
double x1 = p3->x - p1->x;
double y1 = p2->y - p1->y;
double x2 = p2->x - p1->x;
double y2 = p3->y - p1->y;
double s = (x1 * y1 - x2 * y2) / 2.0;
if (s < 0 )
s *= -1;
return s;
}
int main(void){
const struct point p1={1,2},p2={5,4},p3={-2,3};
printf("%f\n",triangle(&p1,&p2,&p3));
return 0;
}
試しに数字を入れてみたのですが、答えが3にならなければならいのに5に
なってしまいました・・orz
0150デフォルトの名無しさん
2006/01/28(土) 16:47:105であってるだろ
0151デフォルトの名無しさん
2006/01/28(土) 16:50:340152143
2006/01/28(土) 17:03:15最後に1つだけ質問させてください。
const struct point p1={1,2},p2={5,3},p3={-2,3};
という表記でなければ、初期値はあたえられないのでしょうか?
p1.x=...のような形で与えようとしたのですが、そうすると
triangleの方をどう書き換えればよいかわからくなってしまいまして..
0153デフォルトの名無しさん
2006/01/28(土) 17:07:230154デフォルトの名無しさん
2006/01/28(土) 17:09:00そんなことすら分からないなら単位諦めろよ
0155デフォルトの名無しさん
2006/01/28(土) 17:23:24理解しようとするなら、本を読んだり、講義のメモを見返したりするべし。
だれか書いてたが、「やってみる」ことが大切。
0156デフォルトの名無しさん
2006/01/28(土) 17:27:060157デフォルトの名無しさん
2006/01/28(土) 17:29:160158デフォルトの名無しさん
2006/01/28(土) 17:31:350159デフォルトの名無しさん
2006/01/28(土) 17:36:410160デフォルトの名無しさん
2006/01/28(土) 17:38:49変数名で初期化をしたいのならmain関数の変数宣言のconstを外して
Point p1,p2,p3;
p1.x = 2; p1.y = 3;
...
みたいに書けば良い。(まぁ正確には代入だから初期化ではないが)
triangleを弄る必要はない。
あと、どんなに考えても自分で答えが出なかったら質問したほうが良いとは言ったが、
何も考えずに人に聞くのは勘弁してくれ
>>157
7bitに抑えるために127回にするのはどうだろう?
0161デフォルトの名無しさん
2006/01/28(土) 17:53:38>>133
ありがとうございます。
次はここで答えられるような立場になれるようがんばります。
0162デフォルトの名無しさん
2006/01/28(土) 17:56:570163デフォルトの名無しさん
2006/01/28(土) 18:02:18OK
0164デフォルトの名無しさん
2006/01/28(土) 18:23:51「double型の引数rをひとつだけとって実部にrの値を設定し、虚部には0を
設定するようなコンストラクタComplex(double)を作成し、main()にそれを
使うコードを追加しなさい」という課題です。お手数ですが、よろしくお願いいたします。
#include<iostream>
class Complex{
private:
double real;
double imag;
public:
Complex(){ real = 0.0; imag = 0.0; }
Complex(double r,double i){ real = r; imag = i; }
~Complex() {};
double re() const {return real;}
double im() const {return imag;}
void set_re(double r){ real = r; }
void set_im(double i){ imag = i; }
void print(std::ostream& os) const
{
os << real << "+" << imag << "i";
}
};
0165デフォルトの名無しさん
2006/01/28(土) 18:24:30int main(){
Complex a;
a.set_re(1.11);
a.set_im(2.22);
Complex b(3.33,4.44);
Complex c;
c = Complex(9.99,88.88);
a.print(std::cout); std::cout << std::endl;
b.print(std::cout); std::cout << std::endl;
c.print(std::cout); std::cout << std::endl;
c = a;
c.print(std::cout); std::cout << std::endl;
return 0;
}
0166デフォルトの名無しさん
2006/01/28(土) 18:25:04でもC++の人にはいい燃料だろう。
0167デフォルトの名無しさん
2006/01/28(土) 18:37:49こんな燃料で牛脂も溶かせん
0168デフォルトの名無しさん
2006/01/28(土) 18:38:31でいいんじゃない。
0169デフォルトの名無しさん
2006/01/28(土) 18:45:18「宿題片付けます」しか目に入らないんだよ、きっと。
>>167, 168
このスレはさすが仏の顔が7bitだけありますね。
0170デフォルトの名無しさん
2006/01/28(土) 18:46:510171デフォルトの名無しさん
2006/01/28(土) 18:47:19ありがとうございました。
0172デフォルトの名無しさん
2006/01/28(土) 19:10:09なんか気持ち悪いな。
operator使えばいいのに。
0173デフォルトの名無しさん
2006/01/28(土) 20:11:09あんなのじゃ食指が動かん
0174デフォルトの名無しさん
2006/01/28(土) 20:12:21print(std::ostream& os) const は特に間違ってない。
それ呼び出すoperatorを定義していないだけde。
0175デフォルトの名無しさん
2006/01/28(土) 20:24:46原因不明のバグはたいていそういうところに…
0176デフォルトの名無しさん
2006/01/28(土) 20:25:28operatorから呼び出すようにするなら
stringに格納して返すなり、ostream返すようにするなりして
cout << a.print() << "\n";
↑こういう感じで使えるようにした方がスマートだろ
0177デフォルトの名無しさん
2006/01/28(土) 20:31:00たぶんスマートだけを言うならこのほうがスマート
std::ostream&operator<<(std::ostream&o,const Complex&c){
c.print(o);
return o;
}
cout << a << "\n";
で済むからな。
0178デフォルトの名無しさん
2006/01/28(土) 20:31:47ネタ?
0179デフォルトの名無しさん
2006/01/28(土) 20:33:50今度はoperator関数を用いて複素数の乗算を行いたいのですが、
>>164のクラス部分のComplex(double r,double i){ real = r; imag = i; }の次の行に
Complex operator*(Complex a,Complex b)
{
double r = a.re()*b.re()-a.im()*b.im();
double i = a.im()*b.re()+a.re()*b.im();
return Complex(r,i);
}
を付け加えたのですが、下記のようなエラーが出てしまいます。
`Complex Complex::operator*(Complex, Complex)' must take either zero or one argument
たびたび済みませんが、どうすればよいかお教えいただけるでしょうか。
0180デフォルトの名無しさん
2006/01/28(土) 20:38:39お前が一回死ねばみんな教えてくれると思うよ^^
0181デフォルトの名無しさん
2006/01/28(土) 20:43:34引数を一つにする。
フレンドにする。
外部関数としてオーバーロード。
別のスレで聞く。
テンプレを守る。
の内のどれか。
0182デフォルトの名無しさん
2006/01/28(土) 20:44:31教科書にoperator *の書き方載ってるはずだから、それ読め。
0183デフォルトの名無しさん
2006/01/28(土) 20:57:11それをクラス定義の外で書けば良い。
細かいアドバイスも入れるなら
先にoperator*=を実装してそれを利用したほうが好ましい。
返り値はconst Complexにしたほうが事故を防げる
引数はconst Complex&にしたほうが効率的。
こんなところ、あと最後に教科書ちゃんと読んでから質問しろ。
0184デフォルトの名無しさん
2006/01/28(土) 20:59:47やさしさに便乗させてもらおう。
C++の解答者さんに質問。使用コンパイラを教えてください。
0185デフォルトの名無しさん
2006/01/28(土) 21:00:25まず、operatorは前置記法ということを知らないとダメ。
a == bは、
== (a, b)となる。
で、operator==の実装例
「外部で」定義するとこうなる。
bool operator == (const T& lhs, const T& rhs)
(lhsはleft hand side、rhsはright hand side)
ただし、メンバとして定義すると、lhsはそのメンバ自身になる。
なので、
bool operator == (const T& rhs)
operatorは戻り値や引数、一時変数などをちゃんと考えてあげなければならないので、
結構奥が深い。
0186デフォルトの名無しさん
2006/01/28(土) 21:09:39VS6のVC6。時どきBCC。
VS6は学生時代に7万で安〜とか言って買ったんだけどなぁ。
今のアカデミックパックの安さはなに?って感じ。
0187デフォルトの名無しさん
2006/01/28(土) 21:12:48ろくな入門書読んでないか、もしくはろくに読んでないだけだろ
そんな奴は勝手に単位落として留年でもしてりゃいい
0188デフォルトの名無しさん
2006/01/28(土) 21:13:46基本的にはg++
たまにVC++.NET2003やVC++2005
0189デフォルトの名無しさん
2006/01/28(土) 21:15:380190デフォルトの名無しさん
2006/01/28(土) 21:16:12フレンドにする事で解決しました。
なお、テンプレについては読んではいたのですが、
あくまで「推奨」という事だったので、あまり重要視していませんでした。
不快に思われた方にはお詫び申し上げます。
次回からはテンプレをしっかり書かせて頂きます。
0191デフォルトの名無しさん
2006/01/28(土) 21:17:060193デフォルトの名無しさん
2006/01/28(土) 21:23:44VisualC++ toolkit 2003 + platformSDK
VS2005.NETもあるけど、重いからなんとなくこっち使っている。
(最近VS2005.NETもコマンドラインから使えるようにしたけど、
昔の習慣でつい・・・)
windowsでC/C++やるなら結構お勧め。比較的速いコード吐く。
0194デフォルトの名無しさん
2006/01/28(土) 21:26:12[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):順列 (0, 1, 2) に対して (1, 2, 0) や (2, 0, 1) の様に,もとの順列と数字がすべて異なる位置にある
順列を撹乱順列(derangement)と呼ぶ.順列 (0, 1, 2, 3, 4) に対するすべての撹乱順列を求め表示し,その個数を表示するプログラムを作りなさい.
ヒント
順列を全て列挙し、列挙した要素が撹乱順列の条件を満たすかをチェックするとよい。 実現の方法は2通りある。
1. 要素の重複を許して順列を列挙する。(5*5*5*5*5 = 3125通りのチェック)
この場合、撹乱順列のチェックと、要素のダブりがないかのチェックを両方行う必要がある。
2. 要素の重複を許さずに順列を列挙する。(5*4*3*2*1 = 120通りのチェック)
この場合、撹乱順列のチェックだけでよい。
注意
実行例では結果を省略しているが、レポートには実行結果を省略せず載せること。
実行結果
(1, 0, 3, 4, 2)
(1, 0, 4, 2, 3)
(1, 2, 0, 4, 3)
(略)
(4, 3, 0, 2, 1)
(4, 3, 1, 0, 2)
(4, 3, 1, 2, 0)
number of derangement for 5 = 44
$
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: [2006年1月31日]
[5] その他の制限: include<stdio.h>のみで。
時間がないため助けてください。
0195デフォルトの名無しさん
2006/01/28(土) 21:28:45確か2005からは.NETが名称から外されたはず
0196デフォルトの名無しさん
2006/01/28(土) 21:31:46[2] 問題文(含コード&リンク): n次元正方行列A,Bの要素を読み込みその和Cを求める。
その後、同じくn次元正方行列X,Yの要素を読み込みその積を求める。そして最後に、和Cと
積Zを出力するプログラムを作成せよ。ただし、行列BとYは共用体op_2として宣言することで、
同じ記憶領域を使用すること。また、nは最大100まで対応でいればよく、要素はfloatとしてよい。
[3] 環境
[3.1] OS:unix
[3.2] gcc
[3.3] 言語: c
[4] 期限: 1月30日
[5] その他の制限: #includは<stdio.h>のみ。
よろしくお願いします。
0197デフォルトの名無しさん
2006/01/28(土) 21:35:52本当だ。指摘サンクス
0198デフォルトの名無しさん
2006/01/28(土) 21:39:11ここに出すときは
digital mars C++
動作確認用にgcc g++ VC express(のclだけ) 辺りも併用
本当はbcc32でも試したいんだけど環境構築してないから試していない。
0199デフォルトの名無しさん
2006/01/28(土) 21:42:15Digital Marsのコンパイラってよく名前を聞くがいいの?
0200デフォルトの名無しさん
2006/01/28(土) 22:02:07素敵なアルゴリズムが思いつかないw
良い週末を。
#include <stdio.h>
int main(){
int i,j,k,l,m,count=0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(j!=i){
for(k=0;k<5;k++){
if((k!=i)&&(k!=j)){
for(l=0;l<5;l++){
if((l!=i)&&(l!=j)&&(l!=k)){
for(m=0;m<5;m++){
if((m!=i)&&(m!=j)&&(m!=k)&&(m!=l)){
if((i!=0)&&(j!=1)&&(k!=2)&&(l!=3)&&(m!=4)){
count++;
printf("(%d,%d,%d,%d,%d)\n",i,j,k,l,m);
}
}
}
}
}
}
}
}
}
}
printf("number of derangement for 5 = %d",count);
return 0;
}
0201198
2006/01/28(土) 22:11:46吐き出すコードは自分が適当に使う限り結構優秀(VCにはさすがに負ける)。
ただ、自分はD言語を主流にしてるから、D言語で面倒な処理(listとかalgorithm)をC++で実装するために、
同じ開発元のコンパイラを使ってるのが大きな理由なのであんまり品質は見ていない。
>>196
雑談ばかりだとあれなのでw
1レスに抑えるために改行圧縮してるから適当に展開して
#include<stdio.h>
union op_2{float B[100][100];float Y[100][100];}o;
float A[100][100],C[100][100],X[100][100],Z[100][100];
void input(float p[100][100],int n){int i,j;for(i=0;i<n;++i)for(j=0;j<n;++j)scanf("%f",&p[i][j]);}
void output(float p[100][100],int n){int i,j;for(i=0;i<n;puts(""),++i)for(j=0;j<n;++j)printf("%f ",p[i][j]);}
int main(void){
int n,i,j,k;
printf("次元数->");scanf("%d",&n);
printf("A=\n");input(A,n);printf("B=\n");input(o.B,n);
for(i=0;i<n;++i)for(j=0;j<n;++j)C[i][j]=A[i][j]+o.B[i][j];
printf("X=\n");input(X,n);printf("Y=\n");input(o.Y,n);
for(i=0;i<n;++i)for(j=0;j<n;++j)for(k=0;k<n;++k)Z[i][j]+=X[i][k]*o.Y[k][j];
printf("C=\n");output(C,n);printf("Z=\n");output(Z,n);
return 0;
}
0202デフォルトの名無しさん
2006/01/28(土) 22:12:51#include <stdio.h>
typedef struct Cell{ int val;struct Cell*prev; }Cell;static void
internal_each_perm(int*data,int length, Cell*cell,void proc(Cell
*max)){if(length==0){proc(cell);}else{Cell c;int i; c.prev=cell;
for(i=0;i<length;i++){c.val=data[i];data[i]=data[0];internal_each_perm(data+1
,length-1,&c,proc);data[0]=data[i];data[i]=c.val;}}} void each_perm(int*data,
int length,void proc(Cell*max)){internal_each_perm(data,length, NULL, proc);}
int data[]={0,1,2,3,4};int internal_print_derangement(Cell*max,int is_derangement,
int idx){if(max!=NULL){is_derangement=internal_print_derangement(max->prev,is_derangement
||max->val!=data[idx],idx-1);if(is_derangement){printf(" %d",max->val);}}return is_derangement
;}int count;void print_derangement(Cell*max){if(internal_print_derangement(max,0,sizeof(data)/
sizeof(data[0])-1)){++count;puts("");}}int main(void){each_perm(data,sizeof(data)/sizeof(data[
0]),print_derangement);printf("%d\n",count);return 0;}
0203デフォルトの名無しさん
2006/01/28(土) 22:19:24救われました!
0204デフォルトの名無しさん
2006/01/28(土) 22:21:13結果間違ってる
0205デフォルトの名無しさん
2006/01/28(土) 22:21:23D言語って趣味で?会社で?
使えるのあれ?
0206デフォルトの名無しさん
2006/01/28(土) 22:23:17[2] 問題文(含コード&リンク):下の文を参照して下さい
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc 2.95
[3.3] 言語:C++
[4] 期限:1月30日(月曜日)
[5] その他の制限:特にありません
A〜Iとa〜iを使用した文字列を入力し、下のように変換した文字列を出力する
A→0が1個 B→0が2個 C→0が3個 ・・・ I→0が9個
a→1が1個 b→1が2個 c→1が3個 ・・・ i→1が9個
(例)
ICeF
00000000000011111000000
よろしくお願いします。
0207デフォルトの名無しさん
2006/01/28(土) 22:24:46遅くなっちゃったなあ.解析解がありそうな気がするけど,まあバックトラック.
#include <stdio.h>
#define N 5
int count;
void solve(int work[], int used[], int size, int pos) {
int i;
if (pos >= size) {
for (i = 0; i < size; ++i)
printf("%c%d", (i == 0 ? '(' : ','), work[i]);
printf(")\n");
++count;
}
for (i = 0; i < size; ++i)
if (!used[i] && pos != i)
work[pos] = i, used[i] = 1, solve(work, used, size, pos+1), used[i] = 0;
}
main() {
int work[N], used[N], i;
for (i = 0; i < N; ++i) used[i] = 0;
solve(work, used, N, 0);
printf("number of dearangement for %d = %d\n", N, count);
}
0208デフォルトの名無しさん
2006/01/28(土) 22:25:32即レス感謝です。
unionでは無く、structを使ったプログラムもご教授願えませんか・・・?
0209デフォルトの名無しさん
2006/01/28(土) 22:28:53自分で共用体って書いてるじゃん
0210デフォルトの名無しさん
2006/01/28(土) 22:30:21#include <string>
#include <utility>
using namespace std;
int main() {
for (string s; cin >> s; )
for (int i = 0; i < s.size(); ++i)
if (islower(s[i])) cout << string(s[i]-'a'+1, '1');
else cout << string(s[i]-'A'+1, '0');
}
0213208
2006/01/28(土) 22:35:550214デフォルトの名無しさん
2006/01/28(土) 22:46:54暇人大学生ですから趣味です。
D言語は適当にちょちょいと書くスクリプト言語と同じ程度には使えます。
と言っても一番大きいソースでも4~5000行しか書いてないから正確に評価はできませんけど。
たぶん、C++で蓄積されたライブラリ群を使うほうが最終的には実用的かなぁ。
0215デフォルトの名無しさん
2006/01/28(土) 22:49:13順列の列挙アルゴリズムがこんなんしか思いつかなんだ。
int* next(int* p, int size){ int flag=0, i, j, k;
for(i=0;i<size;++i){flag|=(1<<p[i]);if(p[i]) for(j=1<<(p[i]-1);j!=0;j>>=1) if(flag&j) --p[i];}
for(i=size-2;i>=0;--i){++p[i];if(p[i]<size-i) break;p[i]=0;}
if(i<0) return 0;
for(i=0,flag=0;i<size;++i){for(j=0,k=0;j<size;++j){if(!(flag&(1<<j))) ++k;else if(p[i]<k) break;}p[i]+=(j-k);flag|=(1<<p[i]);}
return p;}
int derangement(int* p, int size){ while(p[size-1]!=size-1&&size--); return size==-1;}
main(){ int a[5]={0,1,2,3,4}, c=0; while(next(a, 5)) if(derangement(a, 5)){printf("(%d,%d,%d,%d,%d)\n", a[0],a[1],a[2],a[3],a[4]); ++c;} printf("number of derangement for 5 = %d", c);}
0216デフォルトの名無しさん
2006/01/28(土) 22:50:40なんとか解析解出せた.……けど,問題は途中経過も全部出さないと駄目なんか…….
#include <stdio.h>
int fac(int n) { return n > 0 ? n * fac(n-1) : 1; }
int bin(int n, int r) { return fac(n)/fac(r)/fac(n-r); }
int f(int n, int r) {
int a, k;
if (r != 0) return bin(n,r) * f(n-r, 0);
else {
for (a = fac(n), k = 1; k <= n; ++k) a -= f(n,k);
return a;
}
}
int main() {
int n;
scanf("%d", &n);
printf("number of dearrangement for %d = %d\n", n, f(n,0));
}
0217デフォルトの名無しさん
2006/01/28(土) 22:53:03大学で5000行スゴスwww
俺も大学生ですがMAXでせいぜい2000行程度
0218デフォルトの名無しさん
2006/01/28(土) 22:55:010219デフォルトの名無しさん
2006/01/28(土) 22:56:18誰だよ俺と同じ大学のヤツw
0220デフォルトの名無しさん
2006/01/28(土) 22:57:250221デフォルトの名無しさん
2006/01/28(土) 22:59:09なんでそうなるのか分からんが、すげー
そういうのってやっぱアルゴリズム論とかでやるの?
0222デフォルトの名無しさん
2006/01/28(土) 23:01:51[2] 問題文(含コード&リンク):"+", "*", "(", ")" を用いた式を読み込み、その計算値を出力するプログラムを作りなさい。
簡単のために、数値は1桁の整数に限り、式の途中に空白文字などの他の文字は入力されないものとする。
ヒント
"+"と"*"は優先順位が異なることを考慮すると、以下の条件が成り立つ。
1. 式(expression)はいくつかの項が"+"で結ばれている
2. 項(term)はいくつかの因子が"*"で結ばれている
3. 因子(factor)は1つの数値か、"(", ")"で囲まれた式である
この、式、項、因子をそれぞれ一つの関数で表現するとよい。
実行結果
$ ./ex9
expression? 2*(3+(4+5)*6)
value = 114
$
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限:2006年2月2日
[5] その他の制限: include<stdio.h>でお願いします。
0223デフォルトの名無しさん
2006/01/28(土) 23:03:55関数プロトタイプとmain関数
int expression(char**);
int term(char**);
int factor(char**);
int main(void)
{
char buf[1024];
char *ptr;
printf("expression? ");
scanf("%s", buf);
ptr = buf;
printf("value = %d\n", expression(&ptr));
return 0;
}
0224デフォルトの名無しさん
2006/01/28(土) 23:09:21ちょっと前にDで記述したアプリかなんかがあって、
impressかなんかに載ってたよ
かなりうろ覚えで悪いけどw
0225216
2006/01/28(土) 23:11:26組合せ論の問題かな.言われると,なるほど,と思うはず:
n 個の数からなる列でちょうど r 個の要素が元と同じ場所にあるものの数を f(n,r) とする.
このとき 全順列の数 n! = f(n,0) + ... + f(n,n).求めたいのは f(n,0) なので,残りを計算してこれを求める.
f(n,r) は n-r 個の要素が撹乱され,残りの r 個の要素が固定される場合の数に等しいから,
固定される要素の種類が nCr 個あることを考慮して f(n,r) = nCr×f(n-r,0),これを代入して >>216 .
0226デフォルトの名無しさん
2006/01/28(土) 23:12:16漏れはElementSeparateを理解するのに1時間かかったorz
・・・いやぁ・・・読みづらい・・・
0228デフォルトの名無しさん
2006/01/28(土) 23:14:53コンビニでビール買った後にでも、紙と鉛筆を用意してトライしよう。
0229デフォルトの名無しさん
2006/01/28(土) 23:19:23把握した。確かにそれで数は出せるのか
わざわざ説明サンクス
ってか題意満たして無くね?w
>>226
Dijkstra法だっけか?
あれがどんなのかは理解してるが、他人の虫食いソースなんて
読む気がしないからパス
0230デフォルトの名無しさん
2006/01/28(土) 23:19:43こういうのを思いつくのを数学的センスっていうんだろうなぁ。
私には力技しか無理です(ちなみに私は215です)。
0231デフォルトの名無しさん
2006/01/28(土) 23:23:30int expression(char **p) {
int x = term(p);
if (**p == '+') ++(*p), x += expression(p);
return x;
}
int term(char **p) {
int x = factor(p);
if (**p == '*') ++(*p), x *= term(p);
return x;
}
int factor(char **p) {
int x;
if (**p == '(') ++(*p), x = expression(p), ++(*p);
else for (x = 0; isdigit(**p); ) x *= 10, x += **p - '0', ++(*p);
return x;
}
0232デフォルトの名無しさん
2006/01/28(土) 23:30:10EOFって何ですか?
0233デフォルトの名無しさん
2006/01/28(土) 23:31:55End Of File
0234デフォルトの名無しさん
2006/01/28(土) 23:32:04ファイルの終端。コンソールから入力するときは CTRL+Z や CTRL+D など。つーかググれ。
0235デフォルトの名無しさん
2006/01/28(土) 23:32:06あなたはまずgoogleの使い方を知るべきです。
0236デフォルトの名無しさん
2006/01/28(土) 23:34:37読もうと努力したけど、アルゴリズムのところ、値を負にしてマークしたりしてて、理解が追いつかなかった。
0237デフォルトの名無しさん
2006/01/28(土) 23:36:02すみません。ありがとうございます!
後>>210をコンパイルしてもエラーが出るんですがどうしてでしょうか?
0238デフォルトの名無しさん
2006/01/28(土) 23:38:030239デフォルトの名無しさん
2006/01/28(土) 23:40:450240デフォルトの名無しさん
2006/01/28(土) 23:45:36#include<assert.h> // assert を使うためのヘッダ
class stack
{
private:
static const int max = 100; int data[max]; int sp;
public:
void push(int); void pop(); bool empty() const;
int top() const; int size() const;
friend bool equal(const stack&,const stack&);
stack(); ~stack();
};
void stack::push(int d){ assert(sp<max); data[sp++] = d; }
void stack::pop(){ assert(0<sp); --sp; }
bool stack::empty() const{ return sp==0; }
int stack::top() const{return data[sp-1]; }
int stack::size() const{ return sp; }
bool equal(const stack& s1,const stack& s2){
bool eq = true;
if(s1.sp!=s2.sp) eq = false;
else{
for(int j=0; j<s1.sp && eq; j++)if(s1.data[j]!=s2.data[j]) eq = false;
return eq;
}
}
stack::stack(){sp = 0;}
stack::~stack(){}
このクラスを実行すると、スタックが同じ場合には1,スタックが異なる場合には56と表示されました。これで合っているのでしょうか?
0241デフォルトの名無しさん
2006/01/28(土) 23:46:11エラーメッセージが長くて貼れませんでした。なので一応途中まで。
C:\MyC>gcc x.cpp -o x
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x62):x.cpp: undefined reference
to `cin'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x14f):x.cpp: undefined referenc
e to `cout'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x1f0):x.cpp: undefined referenc
e to `cout'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x1a):x.cpp: undefined reference to `endl(ostream &)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x27):x.cpp: undefined reference to `cerr'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x2c):x.cpp: undefined reference to `ostream::operator<<(char con
st *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$replace__t12basic_string3ZcZt18s
tring_char_traits1ZcZt24__default_alloc_template2b0i0UiUiUic+0x34):x.cpp: undefi
ned reference to `__out_of_range(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$replace__t12basic_string3ZcZt18s
tring_char_traits1ZcZt24__default_alloc_template2b0i0UiUiUic+0x8e):x.cpp: undefi
ned reference to `__length_error(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$resize__t12basic_string3ZcZt18st
ring_char_traits1ZcZt24__default_alloc_template2b0i0Uic+0x2c):x.cpp: undefined r
eference to `__length_error(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$__rs__H3ZcZt18string_char_traits
1ZcZt24__default_alloc_template2b0i0_R7istreamRt12basic_string3ZX01ZX11ZX21_R7is
tream+0xad):x.cpp: undefined reference to `streambuf::sungetc(void)'
0242240 ◆OtZ3csKgUQ
2006/01/28(土) 23:46:17[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):
stackにequal(const&,const&)(下のプログラム参照)を追加したプログラムを実行し、スタックを比較した結果を確認せよ。
[3] 環境
[3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 2.90 [3.3] 言語:C++
[4] 期限:1月29日12:00 [5] その他の制限:特にありません
#include<iostream>
#include<assert.h> // assert を使うためのヘッダ
0243デフォルトの名無しさん
2006/01/28(土) 23:48:14gcc は C のコンパイラ。 C++ をコンパイルするときは g++ を使う。
0244デフォルトの名無しさん
2006/01/28(土) 23:48:46自分で実装したけど、コードの穴埋めをする気にはなれない。
たぶん途中の値を負にしたりするのは、そのノードが確定かどうかの
フラグに使っていると思うんだが、読むのはストレスが溜まる。
穴埋め以外不許可なら、変数表つけるとか出題者はもっと考えるべきだな。
0246デフォルトの名無しさん
2006/01/28(土) 23:52:21わかりました。やってみます。
0247デフォルトの名無しさん
2006/01/28(土) 23:53:01どうを実行して56を表示させたんだ?↓のテストは 1 0 ときちんと表示されるが?
int main() {
stack s1, s2, s3;
s1.push(10); s2.push(10); s3.push(11);
std::cout << (equal(s1,s2)) << std::endl << (equal(s1,s3)) << std::endl;
}
0248デフォルトの名無しさん
2006/01/29(日) 00:05:09遅レスだけど。内容はヒントの2番目の通り。ソースが汚いのは行数規制のせいなので許して。
#include <stdio.h>
void swap(int *x, int *y) {int temp = *x; *x = *y; *y = temp;}
void reverse(int *first, int *last) {for(; ; ) if (first == last || first == --last) return; else swap(first++, last);}
int next_permutation(int *first, int *last) {
int *i = last - 1, *j, *k;
if (first == last || first + 1 == last) return 0;
for(; ; ) {
j = i--;
if (*i < *j) {k = last; while (!(*i < *--k)){} swap(i, k); reverse(j, last); return 1;}
if (i == first) {reverse(first, last); return 0;}
}
}
int is_derangement(int *a, int *p, unsigned int n) {
while (n--) if (a[n] == p[n]) return 0;
return 1;
}
int main() {
int i, a[] = {0, 1, 2, 3, 4}, p[sizeof(a) / sizeof(a[0])], count = 0;
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) p[i] = a[i];
do {
if (is_derangement(a, p, sizeof(a) / sizeof(a[0]))) {
printf("(");
for (i = 0; i < sizeof(a) / sizeof(a[0]) - 1; i++) printf("%d,", a[i]);
printf("%d)\n", a[i]);
count++;
}
} while (next_permutation(a, a + sizeof(a) / sizeof(a[0])));
printf("number of derangement for %d = %d\n", sizeof(a) / sizeof(a[0]), count);
return 0;
}
0249240 ◆OtZ3csKgUQ
2006/01/29(日) 00:09:06すみません。main()を書き忘れておりました。
int main()
{
stack s1,s2;
s1.push(5);s1.push(8);s1.push(9);
s2.push(5);s2.push(8);s2.push(9);s2.push(10);
std::cout << equal(s1,s2) << std::endl;
s2.pop();
std::cout << equal(s1,s2) << std::endl;
return 0;
}
>>247さんが書かれたmain()では確かに 1 0 と表示されました。
0250デフォルトの名無しさん
2006/01/29(日) 00:13:14できました!ありがとうございます!
>>210の方もありがとうございました!
0251デフォルトの名無しさん
2006/01/29(日) 00:14:14[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.整数 P, X (1 < X < P で, P, X は互いに素) を与えて, X × Y を P で割った余りが 1 になるもっとも小さな正整数 Y を求めるプログラムを書いてください。
2.ユークリッドの互除法(正整数 X, Y (X > Y) の最大公約数は X を Y で割った余りと Y の最大公約数に等しい)の手順を使って最大公約数を見つけるプログラムを作れ
3.2を利用して1のプログラムを作り直せ。(P と X は「互いに素」なので,両者の最大公約数は必ず 1 というのを使う)
[3] 環境
[3.1] unix
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] C
[4] 期限:2006年1月末
0252デフォルトの名無しさん
2006/01/29(日) 00:14:16equal関数でs1.sp!=s2.spの時に関数の最後でreturnしていないから。
0253デフォルトの名無しさん
2006/01/29(日) 00:14:37[2] 問題文(含コード&リンク):
ライツアウト(ttp://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%84%E3%82%A2%E3%82%A6%E3%83%88)を作成せよ。
どの場所のライトを点灯/消灯させるかをキー入力させて盤面を更新し、終了条件(すべて消灯)を満たすまでループするようにする。最初にどこが点灯しているかという「問題」は各自で適当に作成してよい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 1月30日まで
[5] その他の制限:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1564.txt
↑のように表示させる部分まではできたのですが点灯/消灯がどうしてもできません。
0254デフォルトの名無しさん
2006/01/29(日) 00:15:16[2] 問題文(含コード&リンク):
1.getchar, putchar を用いて標準入力(stdin) からテキストデータを読み込みそのまま 標準出力(stdout) に書くプログラムを作成せよ。
ファイル末尾に達すると getchar の値が EOF になるのを利用するとよいだろう。
2.1のプログラムを改良して,アルファベット文字に関して大文字は小文字に変換,小文字は大文字に変換して表示するプログラムを作成しなさい。
3.1のプログラムを改良してそのままじゃなくて「行番号」を付けて表示させよ。
4.英文テキストファイルを読込んで,文字数,単語数,行数をカウントして表示するプログラム mywc を作成しなさい。
[3] 環境
[3.1] unix
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] C
[4] 期限:2006年1月末
0255デフォルトの名無しさん
2006/01/29(日) 00:15:47[2] 問題文(含コード&リンク):
1.2つの分数(fraction)を入力し,その四則演算(+,-,*,/)を計算するプログラムを作成してください.
ただし,次の構造体を利用すること.ここでは,四則演算を関数化しないこと.また,既約分数にしなくとも良いです.
/*fraction_t型の定義*/
typedef struct {
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;
/*fraction_t型の変数の宣言*/
fraction_t frt;
2.和(add),差(subtract),積(multi),商(quotient)を計算する4つの関数を作成せよ.
その関数を利用し,1のプログラムと同じ構造体を利用し,同じ動作をするプログラムを作成せよ.
3.2のプログラムで,計算が正しく行われない場合を列挙して,その対応策を考えよ.
(例 1/-2 のような計算結果は,美しい表示方法とはいえません)
4.3で列挙した対応策を,2で作成したプログラム上で実現せよ.
[3] 環境
[3.1] unix
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] C
[4] 期限:2006年1月末
0256240 ◆OtZ3csKgUQ
2006/01/29(日) 00:21:570257デフォルトの名無しさん
2006/01/29(日) 00:25:442.の時点では適切に表示されないようにせよということかな?
そういう美しくない問題はいただけないなぁ。
0258デフォルトの名無しさん
2006/01/29(日) 00:27:04「単語」の定義は?「空白」で囲まれたもの?だとしたら「空白」の定義は?
isspace()が真を返すものでいいの?
0259デフォルトの名無しさん
2006/01/29(日) 00:27:511,2,3のみ
行数制限のために改行をけしているから適当に改行するように
(1)
#include<stdio.h>
int main(void){int ch;while((ch=getchar())!=EOF)putchar(ch);return 0;}
(2)
#include<stdio.h>
#include<ctype.h>
int main(void){int ch;while((ch=getchar())!=EOF)putchar(islower(ch)?toupper(ch):tolower(ch));return 0;}
(3)
#include<stdio.h>
int main(void){int ch,l=1,w=0;for(;(ch=getchar())!=EOF;l+=(w=ch=='\n'?0:w+1)==0)w||printf("%3d: ",l),putchar(ch);return 0;}
0260デフォルトの名無しさん
2006/01/29(日) 00:33:463 に 2をどう使ったらいいかわからんかったので,拡張GCDを新たに書いて使った.
わざわざプログラム三つ書くの面倒だったから適当に直してください.
void f(int P, int X) { /* 問1 */
int Y;
for (Y = 1; (X * Y) % P != 1; ++Y);
printf("Y = %d\n", Y);
}
int gcd(int X, int Y) { /* 問2 */
return Y > 0 ? gcd(Y, X % Y) : X;
}
/* 問3 で使う拡張GCD:
* aX + bY = gcd(X,Y) なる gcd(X,Y), a, b を求める */
int extgcd(int X, int Y, int *a, int *b) {
int g = X; *a = 1, *b = 0;
if (Y > 0) g = extgcd(Y, X % Y, b, a), *b -= (X / Y) * (*a);
return g;
}
void g(int P, int X) { /* 問3 */
int Y, dummy;
extgcd(X, P, &Y, &dummy);
while (Y < 0) Y += P;
printf("Y = %d\n", Y % P);
}
0261デフォルトの名無しさん
2006/01/29(日) 00:41:42>>222にあるような実行例の場合、式を正しく読み込めず
value = 0となってしまいます。
原因分かる方いらっしゃいますか?
0262デフォルトの名無しさん
2006/01/29(日) 00:47:05そうみたいですね。2では動作すればいいだけで4で改良。
>>258
たぶんisspaceというのは聞いたことないです。
>>259
ありがとうございます。でもよく分かりません。
>>260
ありがとうございます。
0263231
2006/01/29(日) 00:47:07こちらではきちんと value = 114 が表示されました.
・割り算でゼロになってないか
・不正な入力をしなかったか(入力にスペースが含まれてはいけない)
などを確認してみてください.
0265デフォルトの名無しさん
2006/01/29(日) 00:56:38[2] 問題文(含コード&リンク):長いので後で書きます。
[3] 環境
[3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 2.90 [3.3] 言語:C++
[4] 期限:1月29日12:00 [5] その他の制限:特にありません
main()で上手くいくようにComplexのデータを<<を用いて出力できるような関数
std::ostream& operator<<(std::ostream& os,Complex& c){
c.print(os);
return os;
} を以下のプログラムに追加・必要であれば修正するようなのですが、どうすればよいのか分かりません。
#include<iostream>
class Complex
{
private: double real; double imag;
public:Complex(){ real = 0.0; imag = 0.0; }Complex(double r,double i){ real = r; imag = i; } ~Complex() {};
double re() const {return real;} double im() const {return imag;}
void set_re(double r){ real = r; } void set_im(double i){ imag = i; }
void print(std::ostream& os) const{
os << real << "+" << imag << "i";
}
};
int main(){
Complex a[3];
a[0] = Complex(1.00,2.00); a[1] = a[0] + Complex(0.00,1.00);
Complex *c = &(a[2]); *c = a[0];
for(int i=0; i<3; i++) std::cout << a[i] << std::endl;
Complex *b = new Complex[3]; for(int i=0; i<3; i++)b[i]=a[i]+Complex(1.00,1.00);
for(int i=0; i<3; i++)std::cout<<b[i]<<std::endl; delete [] b; return 0;
}
0266259
2006/01/29(日) 01:00:11具体的にソースのどの部分が分からないのか該当箇所を列挙してくれ。
それによって書き換える場所と書き方を変えないといけないから。
まぁ多分(3)は全書き直ししないといけないだろうなぁとは推測してるけどw
0267デフォルトの名無しさん
2006/01/29(日) 01:06:249*9*9
value = 729 (これは正しい)
(2*3)+5
value = 0
3*(2+2)
value = 1
3+2
value = 5 (これも正しい)
おかしいのはfactorなのかな…
ちょっと弄ってみるか
0268デフォルトの名無しさん
2006/01/29(日) 01:18:02「入力される式の中の数が1桁の正整数」という与えられた前提では、
これでうまく計算されるはず。
int factor(char **p) {
int x;
if (**p == '(') ++(*p), x = expression(p), ++(*p);
else x = **p - '0', ++(*p);
return x;
}
0269231
2006/01/29(日) 01:19:53うーん,手元では,真ん中の二つも正しい結果が出てるんですけどねえ…….むーう.
とりあえずソース全文置いときますね http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1565.c
0270デフォルトの名無しさん
2006/01/29(日) 02:10:140271デフォルトの名無しさん
2006/01/29(日) 02:19:350272デフォルトの名無しさん
2006/01/29(日) 02:28:48・・・VC++が予想以上に多かったかなぁ・・・漏れも導入を検討します。
使おうかと思ってたのがg++(gcc 3.3.2)だったんで、ちと調べてみます。
0273デフォルトの名無しさん
2006/01/29(日) 02:52:07islower(ch)?toupper(ch):tolower(ch)
と
(3)は全然分からないorz
0274デフォルトの名無しさん
2006/01/29(日) 03:04:36OKOK。
三項演算子が分からんのかな? もしかするとislower()とかの関数の方かも知れんけど、
まーとりあえず三項演算子を排除して書く。
(3)は20秒位で書いたカオスなソースなんで全部書き直しっと。
//(2)
#include<stdio.h>
#include<ctype.h>
int main(void){
int ch;
while((ch=getchar())!=EOF){
if(islower(ch))
ch = toupper(ch);
else
ch = tolower(ch);
putchar(ch);
}
return 0;
}
//(3)
#include<stdio.h>
int main(void){
int ch,old='\n',line=0;
while((ch=getchar())!=EOF){
if(old == '\n')printf("%3d: ",++line);
old = ch;
putchar(ch);
}
return 0;
}
0275デフォルトの名無しさん
2006/01/29(日) 03:35:03すみません。islower、toupper、tolowerも分からないですorz
たぶん'a'=97,'A'=65を利用するのかと思います。
0276デフォルトの名無しさん
2006/01/29(日) 03:40:38ってことはASCIIコード前提でOKなんだね
(2)
#include<stdio.h>
#include<ctype.h>
int main(void){
int ch;
while((ch=getchar())!=EOF){
if('a' <= ch && ch <='z')
ch = ch + 'A' -'a';
else if('A' <=ch && ch <='Z')
ch = ch + 'a' -'A';
putchar(ch);
}
return 0;
}
0277276
2006/01/29(日) 03:42:520278デフォルトの名無しさん
2006/01/29(日) 03:52:15神様ありがとうございます。
こうやって見ると自分でもできそうなのに全然できないorz感謝です。
もし暇があれば明日でもいいので>>254の4も教えていただけると最高です。
0279焼豚
2006/01/29(日) 03:55:42[2] 問題文(含コード&リンク):「グラフ作成プログラム」
プログラムを実行したら、まずグラフ名と数値の入力を求められ、
数値データを入力したら、自動でXwindow上に二次元座標でグラフをプロットするプログラム。数値に対して座標軸などがオートで決定される。
[3] 環境
OS:TurboLinux
言語:C++
[4] 期限: 2/1
どうかお願いします
0280デフォルトの名無しさん
2006/01/29(日) 04:00:27どこまで使っていいの?gnuplotとか、pgplotとか使っていいの?
0281デフォルトの名無しさん
2006/01/29(日) 04:23:14なんだか出題内容をきちんと理解していないような気がするな。
こういうことか?
1.起動したら標準入力から二次元座標の列を手作業で入力する。
2.入力が終了したらEOFでも入れる。
3.x軸とy軸の最大値最小値を元に描画範囲を決定する。
4.gnuplotにデータを渡す。
0282デフォルトの名無しさん
2006/01/29(日) 04:25:46isspaceは確か授業で習ってないと言ってた気がするので(真面目に読んでないんで自信なし)
適当に空白は指定しておいた。
#include<stdio.h>
int main(void){
int ch;
int in_word = 0;
int line = 0,word = 0,bytes= 0;
while((ch=getchar())!=EOF){
++bytes;
if(ch=='\n' || ch==' ' || ch=='\t'){
if(ch=='\n')++line;
in_word=0;
}else{
if(in_word == 0){
++word;
in_word = 1;
}
}
}
printf(" %d %d %d",line,word,bytes);
return 0;
}
0283デフォルトの名無しさん
2006/01/29(日) 04:31:05あと、オレの知り合いの大学の先生でここチェックしている人がいるから気をつけろよ
0284デフォルトの名無しさん
2006/01/29(日) 08:43:34丸投げするような奴はその程度のことすらしないのかと改めて悲しくなった
0285焼豚
2006/01/29(日) 10:54:52遅れて申し訳ありません。そんな感じです。おねがいします
0286デフォルトの名無しさん
2006/01/29(日) 11:14:23前スレでも聞いたのですがよくわかりませんでした。
プログラミングが全然わかってないので少しやさしめに答えてもらえるとうれしいです。
0287デフォルトの名無しさん
2006/01/29(日) 11:24:46数列とか
構造体はたくさんのパターンが同じ物入れたいときとか
100人分の身長体重視力・・・とか
参照する時もname.weightとかで出せて便利でしょて思う
0288デフォルトの名無しさん
2006/01/29(日) 11:32:27構造体というか線形リスト(連結リスト)のことだな。
287に付け加えると配列は必要な分だけあらかじめ領域を確保するから
格納するデータ数が決まって(又は予想出来る)いる場合じゃないと駄目(後から配列を大きくする事は出来ない)だけど
線形リストはデータ数が決まってなくても使える。
追加はノードを新しく作成してポインタでつなげればいいし、削除もポインタを繋ぎかえてノードを解放すればいい。
ソートなんかもポインタのつなぎかえだけでOK。
ただしプログラムが面倒になる。
0289デフォルトの名無しさん
2006/01/29(日) 11:42:30[2] 問題文(含コード&リンク):
以下のプロトタイプ宣言で示すインターフェイスを持つ関数を、各問の指示に従って作りなさい。
ただし与えられたデータ構造、インターフェイスを変更しないこと。
(問)
配列内のデータを昇順に並び替える関数、及び降順に並び替える関数をそれぞれ作成せよ。
void sort(int[], int n);
/* d[] : データが格納されている関数, n : 配列内のデータの個数 */
OS:vineLinux
言語:C
コンパイラ : gcc
[4] 期限: 06/1/31まで
[5]
・#include<stdio.h>のみでお願いします。
・アルゴリズム (探索、整列)に絡む範囲は未習です。
神様お助けください。
0290デフォルトの名無しさん
2006/01/29(日) 11:43:52STUDENT:氏名、学生番号、性別・・・
とかやらずにそれぞれのグローバル配列持っておいて、
IDで管理すればいいじゃないか、と思ってた。
それでもできる、それがCクォリティ。
>>288のような連結リストのとき以外で使う意味がたいしてない。
と思っていたのはオブジェクト指向を勉強する前までだな。
0291デフォルトの名無しさん
2006/01/29(日) 11:44:450292デフォルトの名無しさん
2006/01/29(日) 11:46:08いやそうでもなくても構造体使うと
例えば多数の座標を持ちたい時とか
プログラム組む時にわかりやすいんだよ
0293デフォルトの名無しさん
2006/01/29(日) 11:55:17今では構造体なしの生活は考えられないです。
彼女と知り合えて幸せです。
0294デフォルトの名無しさん
2006/01/29(日) 11:55:21#define swap(type, x, y) do { type t = x; x = y; y = t; } while(0)
void sort(int d[], int n)
{
int i,j;
for(i = 0; i < n; i++) {
for(j = 1; j < n -1; j++)
if(d[j-1] > d[j])
swap(int d[j - 1], a[j]);
}
}
これは昇順だから降順はif(d[j-1] > d[j])をif(d[j-1] < d[j])とすればいい。
これは前後を比較して交換するバブルソートというソーティングアルゴリズム。
0295294
2006/01/29(日) 11:57:25正しくはswap(int, d[j - 1] , d[j]);
0297265 ◆H4LNFsCSUE
2006/01/29(日) 13:05:39期限は明日でも構いませんので。
0298デフォルトの名無しさん
2006/01/29(日) 13:13:300299デフォルトの名無しさん
2006/01/29(日) 13:46:391)オペレーターの記述は教科書に書いてあるはず
2)教科書無いなら、書店や図書館に置いてあるC++の本でオペレーターの定義が書いてある本を読む
3)ぐぐる
だいたい、そんな回答だった気がする。
0300デフォルトの名無しさん
2006/01/29(日) 14:39:180301デフォルトの名無しさん
2006/01/29(日) 14:42:36しかも前の締め切りは日曜の12時だし。
簡単な問題だが、答える気なくすな。
0302265 ◆H4LNFsCSUE
2006/01/29(日) 14:53:40>>301申し訳ないです。できるだけ早めにご回答を頂きたかったので、
早めに設定してしまいました。
0303デフォルトの名無しさん
2006/01/29(日) 15:00:56そういう時は嘘でも「教授に頼んで延ばしてもらった」と言うもんだ。
以下を追加。これで動く。
Complex operator+(const Complex& x, const Complex& y) {
return Complex(x.re() + y.re(), x.im() + y.im());
}
0304265 ◆H4LNFsCSUE
2006/01/29(日) 15:17:26std::ostream& operator<<(std::ostream& os,Complex& c){
c.print(os);
return os;
}
はどこに書けばいいでしょうか?
0305デフォルトの名無しさん
2006/01/29(日) 15:22:20#include<iostream>
class Complex
{
// 略
};
Complex operator+(const Complex& x, const Complex& y) {
// 略
}
std::ostream& operator<<(std::ostream& os, Complex& c){
// 略
}
int main(){
// 略
}
0306デフォルトの名無しさん
2006/01/29(日) 15:28:22ほい。かなりいい加減だから、適当に直してね。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1569.txt
#操作間違って、スレたてちゃった。削除しなきゃ。orz
0307デフォルトの名無しさん
2006/01/29(日) 15:34:34#include<stdio.h>
#include<stdlib.h>
#define ON 1
#define OFF 0
int main(void)
{
int i,j,x,y, LIGHT[5][5]={{ON,ON,OFF,OFF,OFF},
{ON,OFF,OFF,OFF,OFF},
{OFF,OFF,OFF,ON,OFF},
{OFF,OFF,ON,ON,ON},
{OFF,OFF,OFF,ON,OFF}};
int flag;
while(1){
printf(" 01234\n");
for(i=0; i<5; i++){ printf("%d", i); for(j=0; j<5; j++){ printf("%d", LIGHT[i][j]); } printf("\n"); }
printf("x:"); scanf("%d", &y);
printf("y:"); scanf("%d", &x);
if( (x < 0) || (4 < x) || (y < 0) || (4 < y)) {printf("wrong number!!\nreinput.\n\n");continue;}
if( (x - 1) >= 0) LIGHT[x-1][y] = LIGHT[x-1][y]?OFF:ON;
if( (x + 1) <= 4) LIGHT[x+1][y] = LIGHT[x+1][y]?OFF:ON;
if( (y - 1) >= 0) LIGHT[x][y-1] = LIGHT[x][y-1]?OFF:ON;
if( (y + 1) <= 4) LIGHT[x][y+1] = LIGHT[x][y+1]?OFF:ON;
LIGHT[x][y] = LIGHT[x][y]?OFF:ON;
flag = 0; for(i=0; i<5; i++) { for(j=0; j<5; j++) { if(LIGHT[i][j] == ON) { flag=1; break; } } } if (flag == 0) break; }
printf("complete!\n");
return 0;
}
多分動くと思う。線引き色付けは自分でやってね。
0308デフォルトの名無しさん
2006/01/29(日) 15:34:460310106
2006/01/29(日) 16:13:40ってかどうやら問題がだいぶ不親切で分かりにくいみたいですね・・・
ここの住人にも理解できないのに俺にできるワケねぇorz
0311デフォルトの名無しさん
2006/01/29(日) 16:21:47[2] 問題文(含コード&リンク):
次のプログラムは学生の成績データを管理するものである。クラスRecordは1人の学生の[番号(id),名前(name),点数(score)]
を記録するもので、出力用の関数(operator<<)が定義される。成績データはクラスSeisekiのdataにRecordのリストとして記録されている。
Seisekiはoperator<<と3つのメンバ関数insert,lookup,erase_worstを持つ。その働きは
�@insert(int id,const std::string& nm, int s):[番号(id),名前(name),点数(score)]というデータを追加
�Alookup(int id):番号がidのデータを検索し、std::coutに出力する。(なければnot foundと出力)。
�Berase_worst():点数の最も悪い学生のRecordを削除
というものである。空白を埋め、プログラムを完成させよ。
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26928
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C++
[4] 期限: 1月31日ですが、早めにしていただければありがたいです
よろしくお願いします。
0312デフォルトの名無しさん
2006/01/29(日) 16:57:09条件が不足している。insert()はどういう順番に追加するの?
0313デフォルトの名無しさん
2006/01/29(日) 17:01:03insert()を呼び出すごとに末尾に追加するようにしていただければ充分です。
0314デフォルトの名無しさん
2006/01/29(日) 17:05:16問題は自明なんだけど、書きかけ方が酷いんだよなあ。
もし書きかけた部分も訂正していいなら、もうちょいやってみるけど。
0315デフォルトの名無しさん
2006/01/29(日) 17:16:12ちょっと追ってみたが、、、
・Main部
char *FileName = "graph";
GetMatrix(FileName);
shortestpath();
とすると、、、
最初のElementSeparate( MatFile, NodeLabel)の中で
List[LabelNum] = atoi( IntString );
の部分でList[LabelNum]がList[2]=(*NodeLabel+2)をオーバーするんだけどw
それとノードが5個で3x3の行列容易されてもパス重み格納できなくない?
0316デフォルトの名無しさん
2006/01/29(日) 17:23:43idの番号順(昇順、小さい順)。挿入する場所を探してinsertする。
> // 点数が最も悪い学生を消去
しっかしこの辺り、背筋が寒くなる先生だなw
void Seiseki::insert(int id, const std::string& nm, int s)
{
std::list<Record>::iterator first = data.begin(), last = data.end();
while (first != last && first->id < id) ++first;
data.insert(first, Record(id, nm, s));
}
void Seiseki::lookup(int id) const
{
std::list<Record>::const_iterator first = data.begin(), last = data.end();
while (first != last && first->id != id) ++first;
if (first != last) std::cout << *first << std::endl;
}
void Seiseki::erase_worst()
{
std::list<Record>::iterator first = data.begin(), last = data.end(), i = first;
if (first != last)
for (++first; first != last; ++first)
if (first->score < i->score)
i = first;
if (i != last) data.erase(i);
}
0317310(106)
2006/01/29(日) 17:24:22もうそれでお願いしますorz
とりあえずちゃんと動作してくれればなんとかなるので。
0318デフォルトの名無しさん
2006/01/29(日) 17:28:54んじゃ、入力ファイルの形式ちょうだい。
なんかファイル読み込みのあたりから狂ってる気がする。
0320317
2006/01/29(日) 18:01:26え゛え゛え゛・・・先生しっかりしろよorz
入力ファイルの形式って・・・
0 1 2 3 4
0 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
コレだと思うですが。違うんですか(・ω・)?
0321デフォルトの名無しさん
2006/01/29(日) 18:03:23一応、shortsteppathの中は読み終わったよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1571.txt
動作確認していなので、間違っている可能性もあるけど。
たぶん、このスレでこれぐらいの課題は、できる人は多いけど、
やりたくない人も多いだけだと思うよ。
0322デフォルトの名無しさん
2006/01/29(日) 18:11:021行目が何なのか、二行目は何なのか、とかそういうのを聞いてる。
106 では1行目は接点番号って書いてあるけど、たとえば
8 7 6 5
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
みたいな入力も許されるの?
0324デフォルトの名無しさん
2006/01/29(日) 18:18:49if ( Store ) {
Store = OFF ;
IntString[j] = '\0' ;
List[LabelNum] = atoi( IntString ) ;
if(DEB) printf(" List[%d] %d", LabelNum, List[LabelNum] ) ;
LabelNum++ ;
}
俺の力量不足なんだろうが、読むのに時間のかかるプログラムだな・・・。
0325デフォルトの名無しさん
2006/01/29(日) 18:21:28配列の添え字と、接点番号が一致している必要は無いでしょ。
0326デフォルトの名無しさん
2006/01/29(日) 18:24:29とりあえず息抜きに全部書き直してみたプログラムおいときますね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1572.c
0327320
2006/01/29(日) 18:25:350 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
これを分かりやすく書くとこうなります
http://ccfa.info/cgi-bin/up/src/up23700.jpg
x接点とy接点との距離が数値なわけです
そして画像で表すとこうなります
http://ccfa.info/cgi-bin/up/src/up23699.jpg
0328デフォルトの名無しさん
2006/01/29(日) 18:27:22おう。それくらい、キレイキレイに書いてくださると明快だなぁ>326
0329デフォルトの名無しさん
2006/01/29(日) 18:29:40それは分かるんだけど、一例でしかないでしょ。
最初の行は必ず 0 から始まる連番なの?違う場合はありうるの?それ以外の入力は考えなくていいの?
0330デフォルトの名無しさん
2006/01/29(日) 18:32:36そうだね。読み込みの関数を見てなかったから気が付かなかったけど、
グローバルでノードの名前を格納する変数を作っているみたいだね。
だから、最初のノードの名前はとりあえず0の必要はなさそう。
早とちりスマソ
0331デフォルトの名無しさん
2006/01/29(日) 18:37:00でも最終結果を表示するところではその番号を参照してないんだよな。
0332320
2006/01/29(日) 18:37:46入力形式はそれ以外考えなくていいようです
0333デフォルトの名無しさん
2006/01/29(日) 19:33:37ほい。自分(321)と324氏のコードを補って、gccで動作確認したものを
上げておくよ。これでばっちりだろう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1573.txt
でも、326氏のコードで提出して、文句を言ってもいいかもねw
0335デフォルトの名無しさん
2006/01/29(日) 20:09:46超お疲れ
0336デフォルトの名無しさん
2006/01/29(日) 21:53:250337デフォルトの名無しさん
2006/01/29(日) 22:33:580338デフォルトの名無しさん
2006/01/29(日) 22:38:570339デフォルトの名無しさん
2006/01/29(日) 22:51:36[2] 問題文(含コード&リンク):以下のプログラムは地域名を入力するとその地域番号を出力するもの。
地域名と番号はEntryというクラスの配列で記憶し、string nameで地域名、string phoneで番号を
格納している。�@地域番号が0995-…のときは099-5…へ変換し、
�A入力した文字列が地域名に含まれる場合、その地域名と番号を表示する
プログラムである。このプログラムをmapを用いて書き換えよ。map<std::string,std::string>
を用い、地域名をキーとして番号を求められるようにせよ。
元のプログラムです―>http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26935
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 1月31日
よろしくお願いします
0340デフォルトの名無しさん
2006/01/29(日) 23:05:28#include <iostream>
#include <string>
#include <map>
int main(void)
{
std::map<std::string,std::string>e;
e["Hokkaido"] = "099-30-000";
e["Tohoku"] = "0995-1-111";
e["Kanto"] = "099-32-222";
e["Chubu"] = "099-33-333";
e["Kinki"] = "0995-4-444";
std::map<std::string,std::string>::iterator itr = e.begin(),end = e.end();
for(;itr != end;++itr)
if(itr->second.find("0995")==0)itr->second.replace(3,2,"-5");// 地域番号 "0995-x-xxx" を "099-5x-xxx"
std::cout << std::endl;
std::cout << "検索用文字列を入力して下さい: ";
std::string s;
std::cin >> s;
int k = 0;
for(itr = e.begin();itr != end;++itr)
if(itr->first.find(s)!=itr->first.npos){
std::cout<< itr->first << ": " << itr->second << std::endl;
k++;// k の初期値は0
}
if(k==0) std::cout << "入力された文字列に一致するものは見つかりませんでした " << std::endl;
return 0;
}
0342デフォルトの名無しさん
2006/01/30(月) 00:07:18ずいぶん早い仕事だなw
後でのんびりやろうかと思ったら、もう終わっているとは。
0343デフォルトの名無しさん
2006/01/30(月) 03:40:19ただし、今手元にK&Rもなんもないんで、そこんとこよろしく。
0344デフォルトの名無しさん
2006/01/30(月) 04:20:24[2] 問題文(含コード&リンク):
コンストラクタ、デストラクタが起動されるごとにその旨を表示させる
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26938
を実行すると、(行数制限のため、改行はほとんど入れてません。また、//は
実行結果で出力されたものではなく質問の便宜上付け加えたものです)
aaa()bbb()bbb()bbb()aaa()aaa(3,4)~aaa()aaa(7,4)~aaa()aaa(7,4)~aaa()
aaa(7,4)~aaa()~aaa()
//aaa()bbb()ccc()~ccc()~bbb()~aaa()~bbb()~bbb()~bbb()~aaa()//
という結果になるのですが、//…//で囲んだところが何故こうなるかわかりません。
恐らくはmain()のccc c;でこのような表示がされているのだと思います。
詳しく説明していただける方、よろしくお願いいたします。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 1月31日
0345デフォルトの名無しさん
2006/01/30(月) 05:19:41スラッシュの内側のみ
メインのccc c; に対応するのが aaa()bbb()ccc() コンストラクタ
プログラム終了時に入るデストラクタが
c部分 ~bbb()^aaa()^ccc()
b[3]部分 ~bbb()~bbb()~bbb()
a部分 ~aaa()
pで宣言してる部分はdelete明示してるのでc宣言前にデストラクタ走ってる。と思
0346デフォルトの名無しさん
2006/01/30(月) 05:22:40「^」記号まぎれこんでるし・・・
0347デフォルトの名無しさん
2006/01/30(月) 10:02:58[2] 問題文(含コード&リンク):
書ききれないので次の場所に書きます。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio
[3.3] 言語: C++
[4] 期限: 今日の午後五時まで
[5] その他の制限: できれば全文書いてくれると助かります。
0348デフォルトの名無しさん
2006/01/30(月) 10:04:59sumlist を拡張し, 二項演算子 + の使える全ての型 T に対して使える
template 関数 template <class T> T sumlist(list<T>&) に拡張して下さい.
#include <iostream>
#include <list>
using namespace std;
int sumlist(list<int>& l);
int main() {
list<int> lst;
for (int i = 0; i < 10; i++)
lst.push_back(i);
cout << "size =" << lst.size() << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); )
if ((*it) % 3 == 0)
it = lst.erase(it);
else
++it;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
return 0; }
int sumlist(list<int>& l) {
int i = 0;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it)
i += *it;
return i; }
0349デフォルトの名無しさん
2006/01/30(月) 10:13:13-=・=- -=・=-
前見たなこれ
0350デフォルトの名無しさん
2006/01/30(月) 10:34:29Big5→UTF-8→UTF-16に変換するプログラムを作っているのですが
iconv_open()を使用している箇所があり何を行っているのか不明です・・・
色々調べては見たのですが
ディスクリプタ(descriptor)とはなんなのでしょうか?
0351デフォルトの名無しさん
2006/01/30(月) 11:19:57#include <stdio.h>
#include <string.h>
#define MaxLine 8
main(){
FILE *fp;
int k;
char name[MaxLine], number[MaxLine], prefix[MaxLine];
if((fp = fopen("telbook","r")) == NULL){
printf("Cant open the telbook\n");
exit(1);
}
for(k = 0; k < MaxLine; k++){
fscanf(fp, "%s %s", &name[k], &number[k]);
}
fclose(fp);
for(k = 0; k < MaxLine; k = k + 1){
printf("%s %s\n", name[k], number[k]);
}
}
をコンパイルして出力すると、
%;%0%a%s%H%(%i!<
と表示されてしまいます。
どうかお助けくだしあ(TT
0352デフォルトの名無しさん
2006/01/30(月) 11:40:07ファイルディスクリプタのこと?
ファイルディスクリプタならカーネルの中のストリーム(ファイル、open file。 バイト列の流れ)
をプロセスに直接見せられないからカーネルの持っているストリームに番号を対応付けて
プロセスにその番号を指定させる。
その番号のこと。 俺もあんまり詳しくないから微妙に間違ってるかも。
もしUNIX系ならUNIXプログラミング質問すれで聞いた方がいいと思う。
0353デフォルトの名無しさん
2006/01/30(月) 12:34:09[2] 問題文(含コード&リンク):
リストの n 番目のセル(ただし、先頭を0番目とする)を削除する関数 delete() は以下のように定義される。関数 insert(), delete() を使用して実行結果と同じリスト操作を実現するプログラムの main()関数を作成しなさい。
実行例中のdelete[4]、insert[3,58]などはprintf()で表示すること。
・関数定義
void delete( struct cell **plist, int n )
/*
plist : リストの先頭を示すポインタのアドレスを示すポインタ
n : リストの先頭から数えた削除するセルの番号
*/
{
int i;
struct cell *p;
if( n<0 ) {
printf("Error: cell(%d) doesn't exist.\n", n);
exit(1);
}
for(i=0; i<n; i++) {
if ( *plist == NULL ) {
printf("Error: cell(%d) doesn't exist.\n", i);
exit(1);
}
plist = &((*plist)->link);
}
if ( *plist == NULL ) {
printf("Error: cell(%d) doesn't exist.\n", i);
exit(1);
}
p = *plist;
*plist = p->link;
free( p );
}
0354デフォルトの名無しさん
2006/01/30(月) 12:35:12実行例
$ ./ex2
print_list: 23 34 45 56 67 78 length = 6 insert[1,58]
print_list: 23 58 34 45 56 67 78 insert[2, 6]
print_list: 23 58 6 34 45 56 67 78 insert[3, 2]
print_list: 23 58 6 2 34 45 56 67 78 length = 9delete[4]
print_list: 23 58 6 2 45 56 67 78 delete[6]
print_list: 23 58 6 2 45 56 78 delete[2]
print_list: 23 58 2 45 56 78 length = 6 delete[4]
print_list: 23 58 2 45 78 delete[1]print_list: 23 2 45 78 delete[2]
print_list: 23 2 78 delete[0]
print_list: 2 78 length = 2
$
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 1月31日
よろしくお願いします。
0355デフォルトの名無しさん
2006/01/30(月) 12:49:07まぁdeleteの中身がゴミなのはまぁ良いとして、struct cellの定義はなに?
こっちが適当に書いても良いんだけど、後で文句言われるとスゲー嫌だから。
0356デフォルトの名無しさん
2006/01/30(月) 13:09:20前スレに書いた
0357デフォルトの名無しさん
2006/01/30(月) 13:12:38[2] 問題文(含コード&リンク):以下のグラフにおいて、V0からV6への最大流を求めるグラフを作成しなさい。
(グラフは、このようになっています。)
http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23177.jpg.html
最大流と最大流を実現したときの各辺に流れる量を出力すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland C
[3.3] 言語:C
[4] 期限: 2006年1月31日13:00まで
[5] その他の制限:特になし
申し訳ありませんが、よろしくお願いします。
0358デフォルトの名無しさん
2006/01/30(月) 13:23:12赤子に逆ギレされた(´・ω・`)
0359デフォルトの名無しさん
2006/01/30(月) 15:05:10すいません遅れました。
struct cell {
int data;
struct cell *link;
};
0360デフォルトの名無しさん
2006/01/30(月) 15:05:38[2] 問題文:
5本の直線を引き、平行な直線があればその直線をわかりやすく表示するプログラムを作成せよ。
直線を引く方法は座標入力でもマウス入力どちらでも構わない。
但し、平行な直線同士であっても以下の場合は平行線とはしない
・直線同士が重なって1本になっている場合
・直線同士が離れすぎている場合(垂線が引けない場合)
・別の直線と交わっている場合
[3] 環境
[3.1] OS: WindowsXP
[3.2] VC.net
[3.3] 言語:C++
[4] 期限:2006年01月31日9:00まで
[5] その他の制限:ファイル名は「heikou」
申し訳ありませんがよろしくお願いします。
0361デフォルトの名無しさん
2006/01/30(月) 15:12:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1574.txt
0362デフォルトの名無しさん
2006/01/30(月) 15:19:07正確な表現ではないけども、
Win32 でいうハンドルと同じようなものだと考えても実用上問題ない。
それとスレ違い。
0363デフォルトの名無しさん
2006/01/30(月) 15:34:57>・別の直線と交わっている場合
5本とも平行じゃないと平行線としないということか?
0364デフォルトの名無しさん
2006/01/30(月) 15:43:12[2] 問題文(含コード&リンク):
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26953
を stack に対する代入関数を定義し、正常に動くようにせよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 1月31日
よろしくお願いします
0365デフォルトの名無しさん
2006/01/30(月) 15:49:45メンバ関数に以下を追加でOK
tack(const stack&s){sp=s.sp;max=s.max;data=new int[max];for(int i=0;i<max;++i)data[i]=s.data[i];}
stack&operator=(stack s){swap(s);return *this;}
void swap(stack&s){
int t=sp;sp=s.sp;s.sp=t;
t=max;max=s.max;s.max=t;
int*p=data;data=s.data;s.data=p;
}
0366365
2006/01/30(月) 15:50:42×tack
○stack
0367360
2006/01/30(月) 15:52:53説明足らずですみません。
5本のうち平行である直線は何本でも何組でも構いません
/ / \ | _
↑この場合は左2本が平行である
× /
↑他の直線が交わっていたら平行ではない
\/ /
↑他の直線の始点または終点が乗っていると平行ではない
/ | /
↑間に別の直線があると平行ではない
0368365
2006/01/30(月) 15:52:59stack(int)のsp==0;はsp=0;の間違いと思うからそこも修正ね
0370デフォルトの名無しさん
2006/01/30(月) 16:24:45それは直線じゃなくて、線分だ。
>間に別の直線があると平行ではない
はどの条件に該当するんだ?
0371デフォルトの名無しさん
2006/01/30(月) 16:26:06[2] 問題文(含コード&リンク):
ジャンケンプログラムの作成
最初に回数を指定する。
プログラム側は同じ確率でG,C,Pを出すこと。
勝敗を表示する。
終了したあとに勝率を表示。
[3] 環境
[3.1] OS:Windows
[3.2] VC 6.0
[3.3] C++
[4] 期限: 2月2日
何卒よろしくおねがいします、、
0372デフォルトの名無しさん
2006/01/30(月) 16:29:25まだ条件が足りない。VC.netでC++なら、managedなのかそうでないか。
MFC使っていいのか、WTL使っていいのか、APIだけなのかなどが
書いてないと、折角作っても無駄になる。
0373デフォルトの名無しさん
2006/01/30(月) 16:34:04あとファイル名の指定があるけど、これはファイルは一つにしないと
いけないということ?そうなるとリソースファイルが作れないけど。
0374デフォルトの名無しさん
2006/01/30(月) 16:35:18[2] 問題文(含コード&リンク):
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26954
を引数をもつコンストラクタを用いた構文に書き換えよ。
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 1月31日
すみませんが、よろしくお願いします
0375デフォルトの名無しさん
2006/01/30(月) 17:12:12[2] 問題文(含コード&リンク):
三角関数表 sin(x), cos(x), tan(x) 0 <= x < 90度 を
ファイル trig.tab に書き込むプログラムを書きなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年2月3日12:00まで
よろしくお願いします。
0376360
2006/01/30(月) 17:17:34ファイルは1つではありません。heikouというのはプロジェクト名のことです。
プロジェクトの種類:Visual C++ プロジェクト
テンプレート:MFCアプリケーション
プロジェクト名:heikou
アプリケーションの種類はシングルドキュメントです。
ご迷惑おかけしました。
0377涼
2006/01/30(月) 17:31:00C言語のBtreeソースから、C++言語に書き換えたいのですが、
わかりません、すいませんがどなたか、教えて頂けませんでしょうか?
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): C言語のBtreeソースから、C++言語に書き換えよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1576.txt
[3] 環境
[3.1] OS:windows XP
[3.2] コンパイラ名とバージョン: (VC 6.0
[3.3] 言語: C/C++
[4] 期限: 2月8日
0378デフォルトの名無しさん
2006/01/30(月) 17:52:00defineをconst intに。
boolenをboolに。
malloc()/free()をnew,deleteに。
typedef keytype をtemplateに。
グローバル変数をクラスのメンバ変数に
pageptr関係をクラスのメンバ関数に。
0379デフォルトの名無しさん
2006/01/30(月) 18:13:46そしてこんな糞コードが量産される
int* a = new int;
if (!a) {
// エラー処理
}
0380デフォルトの名無しさん
2006/01/30(月) 18:16:110381デフォルトの名無しさん
2006/01/30(月) 18:20:060382デフォルトの名無しさん
2006/01/30(月) 20:50:21「引数を持つコンストラクタ」って何?今でもコンストラクタは
>Complex();
>Complex(double r, double i);
>Complex(const Complex& c);
と引数を持ってる奴が定義されてるが.
0383デフォルトの名無しさん
2006/01/30(月) 21:07:07[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <string.h>
struct list_elm1 {
int id;
char name[21];
struct list_elm1 *next;
};
int add_last
(struct list_elm1 *lst,
int id,
char *strng,
struct list_elm1 *cell )
{
if (lst->next != NULL)
return
add_last
(lst->next, id, strng,
cell);
lst->next = cell;
cell->id = id;
strcpy(cell->name, strng);
cell->next = NULL;
return 0;
}
0384デフォルトの名無しさん
2006/01/30(月) 21:08:17#include <iostream>
#include <string>
#include <cstdlib>
const std::string hands = "GCP";
const int result[3][3] = {{0,1,2},{2,0,1},{1,2,0}};
const char *result_msg[] = {"draw","win","lose"};
int main() {
srand(time(NULL));
int total, wins = 0; std::cin >> total;
for (int k = 0; k < total; ++k) {
std::cout << "G or C or P: ";
char c; std::cin >> c;
int player = hands.find(c), computer = (int)(rand() * 3.0 / RAND_MAX);
std::cout << "computer: " << hands[computer] << std::endl;
std::cout << result_msg[result[player][computer]] << std::endl;
wins += (result[player][computer] == 1);
}
std::cout << "ratio: " << (double)wins / total << std::endl;
}
0385383
2006/01/30(月) 21:08:27int main(void)
{
struct list_elm1
lst,a,b,c,d,x;
lst.next = NULL;
add_last(&lst,46, "Beth", &a);
add_last(&lst,23, "John", &b);
add_last(&lst,04, "Mick", &c);
add_last(&lst,32, "Kate", &d);
x = lst;
while (1) {
if (x.next == NULL)
break;
x= *x.next;
printf("%d %s \n", x.id , x.name);
}
}
これをもとにしてn番目の要素を削除するプログラムをつくれ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語:C
[4] 期限:2/1
[5] その他の制限: なし
よろしくお願いします
0386デフォルトの名無しさん
2006/01/30(月) 21:14:48[2] 問題文(含コード&リンク): http://www.teu.ac.jp/icpc/jp/domestic/ICPC2005_Problems_Domestic/F/F_ja.html
[4] 期限: 2006/1/31
[5] その他の制限:
この問題を解くアルゴリズムをお願いします。
0387377
2006/01/30(月) 21:16:58返事が遅くなって申し訳ありません。
理解できない自分がいました、
これすら理解できないのに聞いたのが本当すいません。
まだ少し時間があるので、精一杯勉強したいと思います。
0388デフォルトの名無しさん
2006/01/30(月) 21:17:40最大流を求めるアルゴリズムに指定ある?特に無ければ Edmond-Karp で書くけど.
0389デフォルトの名無しさん
2006/01/30(月) 21:21:15C++ でいい?
#一応手元に Accept されたコードがあるけど,思いっきり個人特定されちゃうので書き直す;
0390デフォルトの名無しさん
2006/01/30(月) 21:53:56http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23212.jpg.html
入力も出力も定義されてないんで、どーしたもんか…。
0391デフォルトの名無しさん
2006/01/30(月) 22:47:06[2] 問題文(含コード&リンク):
大きさ10のint型の配列aを用意し、10000以下の素数を大きい順に
10個、配列aに入れて、その後に配列aの要素の和を求めよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C
[3.3] 言語:C
[4] 期限: 2005年1月30日
まだCを始めてから2週間ほどなんですが、よろしくお願いします。
0392デフォルトの名無しさん
2006/01/30(月) 22:53:570393デフォルトの名無しさん
2006/01/30(月) 22:54:010394デフォルトの名無しさん
2006/01/30(月) 23:01:37アルゴリズムとか俺わかんないから、期待している。
0395デフォルトの名無しさん
2006/01/30(月) 23:02:02#include <stdio.h>
#define N 10
int main(void)
{
int a[N] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int sum = 0;
int i;
for (i = 0; i < N; i++)
sum += a[i];
printf("%d\n", sum);
return 0;
}
0396デフォルトの名無しさん
2006/01/30(月) 23:03:240397デフォルトの名無しさん
2006/01/30(月) 23:03:47( ´_ゝ`)
>>391
#include<stdio.h>
int prime(int n,int i){
if(i>=n)return 1;
else if(n%i==0)return 0;
else return prime(n,i+1);
}
int main(){
int a[10];
int i,j=10000+1,sum=0;
for(i=0;i<10;a[i++]=j)while(!prime(--j,2)){}
for(i=0;i<10;++i)sum+=a[i];
printf("%d\n",sum);
}
0398宿題ではないですあ
2006/01/30(月) 23:13:10#include <stdio.h>
#include <string.h>
void StrDump(const char *str,int len);
int main(void)
{
char str[] = "012abc34DE5678fgHI90";
char charset[] = "0123456789";
int len;
char *token;
len =sizeof(str);
printf("[%s]\n",str);
StrDump(str,len);
token = strtok(str,charset);
while( token != NULL )
{
printf("[%s]\n",token);
StrDump(str,len);
token = strtok(NULL,charset);
}
return 0;
}
0399宿題ではないですあ
2006/01/30(月) 23:13:52void StrDump(const char *str,int len)
{
int i;
for(i = 0; i < len; i++)
printf(" %c ",str[i]);
printf("\n");
for(i=0;i<len;i++)
printf("%02X ",str[i]);
printf("\n----------------------------------------\n");
}
0400デフォルトの名無しさん
2006/01/30(月) 23:15:31特に指定が無いみたいなので C++.実際の予選の出力と diff 取って結果を確認した.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1577.cpp
0401宿題ではないですあ
2006/01/30(月) 23:18:48strtokで切り出した部分が'\0になってるのがわかるのですが
それまでのstrtok()事態の動きがいまいちわからなんですl
どなたかご教授していただきたく、書き込みしました
お願いします
0402デフォルトの名無しさん
2006/01/30(月) 23:26:420403デフォルトの名無しさん
2006/01/30(月) 23:26:51bitset使えば意外とあっさりできたりするのねコレ。
0404デフォルトの名無しさん
2006/01/30(月) 23:40:26[2] 問題文(含コード&リンク):
次のコンストラクタを指示通りに埋め、
stack::stack(const stack& s)
{
//maxにs.maxをコピー;
//dataに動的割り当てを行う;
//spにs.spをコピー;
//dataの指す動的配列にs.dataの指す動的配列をコピー;
}
このコンストラクタを
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26955
に適当な場所へ挿入し、実行できるようにせよ。
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 1月31日
すみませんが、よろしくお願いします
0407365
2006/01/30(月) 23:55:26プログラムの再利用とか考えたこと無いのか
......まぁ良いや。これをクラス定義の下に埋めろ。
stack::stack(const stack&s){max=s.max;data=new int[max];sp=s.sp;for(int i=0;i<max;++i)data[i]=s.data[i];}
0408デフォルトの名無しさん
2006/01/31(火) 00:03:230409デフォルトの名無しさん
2006/01/31(火) 00:06:09こんな課題に関するアドバイスをお願いします。大雑把な方針でいいので。
ちなみに課題を出した先生はムチャクチャ厳しくて結構人気のある先生です。
・現在のスキル(C言語)で書ける最も実用的なプログラムを書いて提出せよ。
詳細なドキュメント必須。ソースコードはコメントを除いて20Kbyte以内とする。
・少々のバグがあっても提出者が問題点を的確に把握していれば減点しない。
・gcc3.3で-pedantic-errorsオプションつきでコンパイルできること。
・非標準のライブラリの使用は禁止。
・提出後に口頭試問を行う。提出内容を理解していない場合には単位を与えない。
0410デフォルトの名無しさん
2006/01/31(火) 00:11:25まずはお前の現在のスキルとやらを語ってもらおうではないか。
0411デフォルトの名無しさん
2006/01/31(火) 00:12:07すれ違いです。
誰か答えるかも知れないけど。
0412デフォルトの名無しさん
2006/01/31(火) 00:18:13遅レスでごめんなさい
別に指定がないので、お任せします。
大変だとは思いますが、よろしくお願いします。
0413404
2006/01/31(火) 00:21:14class XXX{…};
のことですよね?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26955
のプログラムにクラス定義が見つからないのですが・・・
私の勘違いでしたらすみません。
0414デフォルトの名無しさん
2006/01/31(火) 00:22:24期間はどれくらい?
余裕があったらニューラルネットワークとか面白いけど…実用的じゃねぇかw
0415デフォルトの名無しさん
2006/01/31(火) 00:23:28面白そうなのでやってみた。C。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1579.txt
幅優先。既知の状態を捨てる。状態が増えなくなったら解けない。
状態変数は、下10bitがロボットの位置。下11〜20bitが残っている汚れ。
ちょっと遅い。既知の状態の持ち方を変えるべきだな。
0416365
2006/01/31(火) 00:32:16謝らなくて結構。
自分で考えもしない人達をこのスレ(過去スレ含む)で幾度と無く見たから慣れたw
もしそれが簡略したソースで無くて、さらに先生がそのファイルを出したのなら
『先生。クラスの宣言がありません。
これで、どないせいちゅうねんボケがぁぁ!!!』
と、課題を出した人に文句を言うのが適切かと。
0417デフォルトの名無しさん
2006/01/31(火) 00:32:20[2] 問題文:数値列が並んでいるテキストファイルがあって
12 34 68 1 4
2 89 24 58 7 46
… こんな感じのが10行あります
これを行ごとに足し算するプログラミングをつくりなさいというのです
ファイルは、行ごとに数字の個数は、例のように5つだったり、6つだったりバラバラです
[3] 環境
[3.1] OS:winXP
[3.2] コンパイラ名とバージョン:VC++6.0
[3.3] 言語:C言語
[4] 期限:2月1日
[5] その他の制限:特にないです、そんなに難しいのはやってないと思います
よろしくおながいします
0418デフォルトの名無しさん
2006/01/31(火) 00:35:22‥課題のグラフもデータ化してupしてもらいたいんだが。
0419デフォルトの名無しさん
2006/01/31(火) 00:36:34http://www.teu.ac.jp/icpc/jp/domestic/ICPC2005_Problems_Domestic/F/F2
も実際の入力なんだけど,これに対して >>415 はこっちの環境で 218.6 秒.
3分以上結果が返ってこないのは,さすがにマズイ気がする.
#参考までに,>>400 では 3 秒弱で終わる.
0420デフォルトの名無しさん
2006/01/31(火) 00:45:100421デフォルトの名無しさん
2006/01/31(火) 00:46:47ソース:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1580.c
入力:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1581.txt
Edmond-Karp,計算量は O(V E^2).
0422デフォルトの名無しさん
2006/01/31(火) 00:53:30なんかすごくそんな気もしてきた.出てくる結果はパーフェクトに正しいし.
でも,三分待っても結果が返ってこないと、現実的な時間で結果が出るか不安にならね?
きちんとオーダー算定すりゃあそんなこともないのかなあ……?
0423357 ◆JhTAziD.X.
2006/01/31(火) 01:00:34ありがとうございます。でも、実行するとなぜか
エラー E2140 39:ここでは宣言はできない(関数 maximum_frow)と出るのですが
これはなぜでしょうか?
0424デフォルトの名無しさん
2006/01/31(火) 01:08:05ありがとーm(_ _)m
遅くても全然オーケーです
参考にしますね
0425デフォルトの名無しさん
2006/01/31(火) 01:08:41すんません,一部 C++ になってました.
39行目 int increase... の int を外し, 26行目くらいで int increase; と定義してやってください.
0427デフォルトの名無しさん
2006/01/31(火) 01:17:29どーもです。415です。
改良してみました(っつーか、作業領域に明かせた力技ですが)。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1582.txt
0428デフォルトの名無しさん
2006/01/31(火) 01:21:00考え方とか、かるーく説明してもらって(・∀・)イイ!!ですか?
今回「アルゴリズムとその妥当性を示せ」みたいに言われてるんで
0430デフォルトの名無しさん
2006/01/31(火) 01:27:58http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23231.png.html
しかし、すごいね。データ構造上手に使ってて参考になる。
0432404
2006/01/31(火) 01:39:39↓のプログラムが動くように修正できる方、よろしくお願いいたします。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26956
0433デフォルトの名無しさん
2006/01/31(火) 01:47:09基本は>>415で述べたとおりです。
基本設計:
最短歩数を求めるということなので幅優先探索。
n歩目の盤面に対して上下左右にロボットが移動した盤面をそれぞれn+1歩目の盤面として確保。
ただし循環を避けるために既知の盤面は捨てる。
ゴミが全部なくなった盤面に達したら、その歩数を返す。
ゴミが全部なくなる前に新しい盤面ができなくなったら解なし。
詳細設計:
盤面の状態はロボットの位置とゴミの状態で表す。
盤面は最大20x20なので、横と縦の位置はそれぞれ5bitで表せる。ゴミは最大10個で有/無なので10bit。
すなわち全ての状態は20bitで表すことができる。
bit0-4をy位置、5-9をx位置、10-19をゴミの有無とした32bit変数で状態を表すことにする(盤面の比較をしやすくするため)。
可動範囲の判定を簡便化するためpassableをマス配列とし、可動マス1をたてておく。
ゴミの除去の判定を簡便化するためdirtyをマス配列とし、ゴミのあるマスにゴミ番号のbitを立てた値を入れておく。
あとは初期位置から順次検索。
>>427の改良では、状態は20bit=1Mで表せるので、要素数1Mの配列に状態を添え字として確保した(要はハッシュテーブル)。
といったところです。
>>429
はう〜、どうなんでしょう。勉強になるかどうかは、分かんないです。
私も勉強させていただきます。
0434デフォルトの名無しさん
2006/01/31(火) 01:47:23今晩は楽しませてもらいました。おやすみなさい。
0435デフォルトの名無しさん
2006/01/31(火) 01:51:49↓が最終版です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1583.txt
0436365
2006/01/31(火) 02:04:08stack::stack(const stack& s)
のreturn s;を
stack plus(stack s1,stack s2)
のケツに移す以上。
#以下独り言
......代入演算子の実装が酷いなぁ。
delete[]したあとのnew[]が失敗したら最悪の事態になるじゃんw
これ書いたのが先生なら頭があんま良くないなぁ。
この師にして弟子ありって感じだ。
0437デフォルトの名無しさん
2006/01/31(火) 02:04:23問1
非負整数mと0以上60未満の整数sを仮引数として受け取ると
m分s秒が何秒であるかを返す関数m_to_sを記述せよ。
問2
正整数を1つint型の引数nに受け取ると、2^nを返す関数pow_2を記述せよ。
問3
正整数を1つint型の仮引数yearに受け取ると、西暦year年が閏年ならば1を、そうでないならば
0を返す関数check_leapを記述せよ。(閏年とは、4で割り切れる年のうち、100で割り切れないか
400で割り切れる年のこととして考えよ。)
問4
void space_star(int space, int stars)は、int型の引数spacesとstarsを受け取ると、
(1)space個の空白を表示し、
(2)stars個の*を表示し、
(3)改行コード\nを表示
する関数である。space_starを利用して、int型の引数nを受け取ると、次のような表示
をn段行い何も返さない関数m_downを記述せよ。
*
***
*****
*******
0438デフォルトの名無しさん
2006/01/31(火) 02:10:48学校の講義程度で例外中立・安全とかやってたら逆に怖いだろ
0439404
2006/01/31(火) 02:17:003_8.cpp:36: error: definition of implicitly-declared `stack::stack(const
stack&)'
3_8.cpp:36: error: declaration of `stack::stack(const stack&)' throws different
exceptions
3_8.cpp:5: error: than previous declaration `stack::stack(const stack&) throw
()'
PS:先生をかばっても仕方が無いのですが、「前の課題で作ったプログラムを書き換える」
という課題がほとんどのため、私の力不足が主な原因と思います。
0440デフォルトの名無しさん
2006/01/31(火) 02:17:06んー、そう言われるとそうかも。
自分の場合独学だから大学でどの程度のレベルを要求されるからわからんのだよなぁ。
まだ大学1年だからC++の講義もベターCレベルだし。
0442デフォルトの名無しさん
2006/01/31(火) 02:27:23・読んで理解できそうで、実用的なプログラムを探す。
・メモを取りながら読む。たぶん読んでるうちに、プログラムの変なとこをみつける。
・文法エラーならgccでエラーが出ないように、プログラムを書き直す。
・ロジックのバグなら、報告するか直すかはあなたしだい。
・メモを利用して自分でドキュメントを書く。
・ここまでやれば口頭試問は通るはず。
実用的なプログラムだけど…
式の評価(関数電卓みたいなの)とか、
ああ…画像の分類ソフトでもいいかもしんない。画像サイズが指定のファイルを探すとか。
音声ファイルの変換ていうのも手かなぁ…
20Kって、2万文字か。1行20文字換算で1000行か。うーむ。
>>438
大学でC++習ったよ。std::stringは使わない。structは習ったけど、classは習わんかった。
0443404
2006/01/31(火) 02:32:030444デフォルトの名無しさん
2006/01/31(火) 02:43:09#include<stdio.h>
int m_to_s(int m,int s){return m*60+s;};
int pow_2(int n){return 1<<n;}
int check_leap(int year){return year%4==0 && (year%100!=0 || year%400==0);}
void space_star(int space, int stars){printf("%*s",space,"");while(stars--)putchar('*');putchar('\n');}
void m_down(int n){int i;for(i=0;i<n;++i)space_star(n-i-1,i*2+1);}
0445デフォルトの名無しさん
2006/01/31(火) 02:59:14サンクス
続きお願いしていい?
問5
3次元ベクトルを2つ入力すると、その2つのベクトルの内積を計算して
表示するプログラムをつくりたい。次を完成せよ。
#include<stdio.h>
int main(void)
{
int i;
double cp, A[3],b[3];
for(i=0; i<3; i++)
{
printf("A[%d]=",i);scanf("%lf",&A[i]);
printf("B[%d]=",i);scanf("%lf",&B[i]);
}
/*解答欄開始*/
/*解答欄終了*/
return(0);
}
0446デフォルトの名無しさん
2006/01/31(火) 03:00:12正整数(10進数表現)を入力すると、その2進数表現を表示するプログラムをつくりたい。
例えば、与えられた数から始めて、2で割った商を次々と2で割り、その剰余を逆から表示
すれば良い。11に対しては、以下のようになる。
11/2=5…1
5/2=2…1
2/2=1…0
1/2=0…1
よって、剰余を配列に記憶しておき、求めた順とは逆に表示していけば良い。
次は、正整数(10進数表現)を入力すると、その2進数表現を表示するプログラムを
この方針に基づき作成した例である。完成せよ。
#include<stdio.h>
int main(void)
{
int n,i,int B[20];
printf("正整数:");scanf("%d",&n);
/*解答欄開始*/
/*解答欄終了*/
return(0);
}
あと問4 ピラミッド型でした。
0447デフォルトの名無しさん
2006/01/31(火) 03:09:320448444
2006/01/31(火) 03:14:38それぞれ解答欄の部分だけ。
解答欄の外に2,3間違いがあったがたぶん映し間違いと思うので割愛
(5)
for(cp=i=0;i<3;++i)
cp += A[i]*B[i];
printf("%f\n",cp);
(6)
for(i=0;n;n/=2,++i)B[i]=n%2;
while(i--)printf("%d",B[i]);>>445
0449デフォルトの名無しさん
2006/01/31(火) 03:57:45[2] 問題文(含コード&リンク):
定数 7,'x'に対する抽象構文木を構築し、表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: なるべく1月31日中でお願いいたします
0450デフォルトの名無しさん
2006/01/31(火) 06:50:13構文木というからには何か構文ルールがあるわけでしょう?どんなルール?四則演算?
0451デフォルトの名無しさん
2006/01/31(火) 08:20:28XPでボーランドのコンパイラ使ってます。Cです。
下のプログラムをメイク、コンパイルしようとすると次のエラーがでて実行できませんorz
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 11: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 16: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 19: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 24: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 27: ステートメントにセミコロン(;)がない(関数 main )
0452451
2006/01/31(火) 08:20:43void main()
{
int val;
int val2;
val = 0;
(1)
printf("valは%dです。val2は%dです。\n", val, val2 );
val += 100;
(2)
val2 = val * 5;
(3)
printf("val = [%d] val2 ={%d}\n",val,val2 );
val --;
(4)
val2 = 10 / 3;
(5)
printf("val = [%d] val2 = [%d]\n",val,val2);
}
0453デフォルトの名無しさん
2006/01/31(火) 08:49:42void main()をint main()に変えたらいけると思うよ
0454デフォルトの名無しさん
2006/01/31(火) 08:56:290455451
2006/01/31(火) 09:04:52ご指摘ありがとうございます。
intにかえてみましたが、同じエラーが出てしまいましたorz
始めたばかりで何にもわからないのですが、改行の仕方や、スペースの幅はコンパイルするときに関係あるのでしょうか?
つまり、上ではダブルスペースになっている箇所がありますが全てシングルにしたり、スペースの幅を小さくしたり広くしたりするとエラーはでますか?
そういったルールを教わらなかったもので、そういうルールがあるのかどうかすらわかりません・・・
0456デフォルトの名無しさん
2006/01/31(火) 09:40:39基本的にスペースや改行はある程度自由がきく。
まさかとは思うが
(1)〜(5)の行を、/*(1)*/のように/*〜*/と書き換える。
0457宿題ではないですあ
2006/01/31(火) 09:41:49問2
int pow_2(int n)
{
int i,sum=1;
for(i=0;i++;i<=n){
sum *= 2;
}
return sum;
}
問3
int check_leap(int year)
{
if((!year%4)&&(year/100)&&(year/400))
return 1;
else
return 0;
}
0458デフォルトの名無しさん
2006/01/31(火) 09:42:04全角スペースはprintfの中身など以外は許されないと思います。
(半角スペースはOK)全角スペースがないか調べて、あったら
なくしてまたコンパイルしてみて下さい。
0459196
2006/01/31(火) 09:49:32とした場合、>>201さんのプログラムをどう改変すればよいでしょうか・・・。
どなたかよろしくお願いします。
0460デフォルトの名無しさん
2006/01/31(火) 10:00:02[2] 問題文(含コード&リンク):
一年三組の11人目があなただったとします。
一郎君から順に点数を入力、最後にあなたの点数を入力し、すべて入力し終わったあと、
一番成績の良い人の順から、点数を出力するプログラムを作成しなさい。
※ 入力を求める関数、並べ替える関数、出力する関数を作成すること。
また、処理順序として、すべて入力→並び替え処理→出力 とするようにしてください。
一年三組成績
一郎君 50点陽菜さん 90点
次郎君 75点美咲さん 67点
三郎君 36点さくらさん 82点
史郎君 88点葵さん45点
五郎君 68点凛さん77点
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: 初心者なので分かりません
[3.3] 言語: C言語
[4] 期限: できるだけはやくお願いします
[5] その他の制限
できれば一番簡単な、初心者でも分かるやり方でお願いします。
0461デフォルトの名無しさん
2006/01/31(火) 10:02:37その1
nCr において,n=0〜6の全ての組み合わせについて求めるプログラムを作成しなさい.
表示例
0C0 = 1
1C0 = 1 1C1= 1
2C0 = 1 2C1 = 2 2C2 = 1
3C0 = 1 3C1 = 3 3C2 = 3 3C3 = 1
4C0 = 1 4C1 = 4 4C2 = 6 4C3 = 4 ・・・
その2
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
を計算して並べた結果は
1
1 1
1 2 1
1 3 3 1
と表される.
N=10までについて,上記のような三角形表示をするプログラムを作成しなさい.
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] C
[4] 期限:2月1日
よろしければお願いします・・・
0462デフォルトの名無しさん
2006/01/31(火) 10:03:39前スレのあれ、結局あのままスルーされてたのか。カワイソス
0463196
2006/01/31(火) 10:05:380464310
2006/01/31(火) 10:33:37はぁ…自分が前スレで書いたやつじゃダメなのか…まぁ、いいや
すみません、昨日はありがとうございました。
きょう提出したところ、追加の課題として計算量を求める機能を追加せよというものが出ました。
自分なりにclockを組み込んで、かかった処理時間で計算量を求めようとしたのですが
処理が早すぎて意味がありませんでした…
計算量を求める方法は自由らしいので、もうひとつ自分が考えた方法は
比較回数をカウントして出力するというものなのですが、どこに組み込んでよいか迷っています。
昨日も助けていただいたのに厚かましいとは思いますが、ぜひお力をお貸しくださいm(_ _)m
0465デフォルトの名無しさん
2006/01/31(火) 10:45:43ギャルゲのキャラみたいな名前だな
0466デフォルトの名無しさん
2006/01/31(火) 11:31:46問2だけ。
底が2なんだからシフト使えば?
int pow_2(int n)
{
return 1<<n;
}
但し 0<=n<sizeof(int)*8。
0467デフォルトの名無しさん
2006/01/31(火) 11:32:27[2] 問題文(含コード&リンク):
三角関数表 sin(x), cos(x), tan(x) 0 <= x < 90度 を
ファイル trig.tab に書き込むプログラムを書きなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年2月3日12:00まで
よろしくお願いします。
0469デフォルトの名無しさん
2006/01/31(火) 11:54:21あのな出力の例も書かないでやるやついない
0470451
2006/01/31(火) 11:58:33メイクとコンパイルできました!
ただ、実行すると
valは0です。val2は256です
val = [100] val2 = {500}
val = [99] val2 = [3]
とわけのわからない表示がされましたがこれで正しく実行されているのでしょうか?
コマンドプロンプトからのコピペがわからなかったので手動で書いてみました・・・
>>458
456さんの方法を先に試したところコンパイルできちゃったので試してないのですが、
全角スペースか半角スペースか見分ける方法ってあるのでしょうか?
今回の場合なら上から一つずつ探していくこともできると思うのですが、大量の構文をかくプログラムの場合
どうやって全角か、半角か判断すればいいかわからないのですが。。
何度もすみません・・・
0471デフォルトの名無しさん
2006/01/31(火) 12:05:59プログラムは正しく動いている。
ただ、最初にval2を決めてないから、val2には何が入っているかわからない。
0472デフォルトの名無しさん
2006/01/31(火) 12:10:12テキストエディタの機能で検索か置換。
始めから入力しないのが一番だけど。
0473デフォルトの名無しさん
2006/01/31(火) 12:14:04おまえワロスww
0474デフォルトの名無しさん
2006/01/31(火) 12:56:19/*(1)*/
#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<=6;++c,printf("\n"))
for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t);
return 0;
}
/*(2)*/
#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}
0475デフォルトの名無しさん
2006/01/31(火) 14:47:500476デフォルトの名無しさん
2006/01/31(火) 16:51:48問題�@文字列strの中に、文字cが含まれている個数(踏まれていなければ0とする)を返す関数
int ste_chnum(const char str[],int c) {/*・・・*/}
を作成せよ
問題�A西暦y年m月d日の《前の日》あるいは《次の日》の日付を求めてセットする関数
void yesterday(int *y, int *m, int *d){/*・・・*/}
void tomorrow(int *y, int *m, int *d){/*・・・*/}
を作成せよ(閏年などもきちんと判別すること)。
OSはwindowsです。
コンパイラはVC6.0
言語は 「c」です。
期限は2006年2月2日の12時です。
まったく分からないんです・・・誰か助けてください。。。
0477デフォルトの名無しさん
2006/01/31(火) 16:53:53文字cって小文字のみ?
0478デフォルトの名無しさん
2006/01/31(火) 17:01:11(1)
int ste_chnum(const char str[],int c)
{
int i;
for (i=0;str[i] != '\0';i++){
if (str[i]=='c'){
c++;
}
}
return c;
}
とりあえず動いた
0479デフォルトの名無しさん
2006/01/31(火) 17:04:150480デフォルトの名無しさん
2006/01/31(火) 17:07:430481デフォルトの名無しさん
2006/01/31(火) 17:16:32文字c ってことは変数 c の意味じゃないのかな…
int str_chnum( const char str[], int c )
{
int count = 0;
for(; *str != '\0'; str++) {
if( *str == c ) count++;
}
return count;
}
未確認だがこんなんでどだろ…
0482デフォルトの名無しさん
2006/01/31(火) 17:22:32変数なのか変数じゃないのかはっきりしてくれ
0483デフォルトの名無しさん
2006/01/31(火) 17:40:19ありがとう
0484デフォルトの名無しさん
2006/01/31(火) 18:04:56もうちょっと余裕を持って出してくれればなぁ。
MFC指定でなければ間に合ったかもしれないな。残念。
0485デフォルトの名無しさん
2006/01/31(火) 18:36:420486デフォルトの名無しさん
2006/01/31(火) 18:51:02[2] 問題文(含コード&リンク):
�@x^2-5=0を解くことにより小数点以下8桁まで正確な√5を求めなさい。またその時の反復回数を答えなさい
�Ax^2-3x+2=0の解を7桁まで正確に求めなさい
�Bπsin x-2x=0(-π<x<π) の解を7桁まで正確に求めなさい
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (不明)
[3.3] 言語: (C)
[4] 期限: ([2006年2月3日09:00まで] )
[5] その他の制限: (なし)
0487デフォルトの名無しさん
2006/01/31(火) 18:53:45「反復」ってことは計算法が指定されてるんだよね.Newton法?
0488デフォルトの名無しさん
2006/01/31(火) 19:30:21C言語によるアルゴリズム辞典丸写し
double mysqrt(double x)
{
double s,last;
if(x>0){
if(x>1) s=x;
else s=1;
do{
last = s; s=(x/s+s)/2;
}while(s<last);
return last;
}
if(x!=0) fprintf(stderr,"error");
return 0;
}
0489デフォルトの名無しさん
2006/01/31(火) 19:41:05#include <stdio.h>
#include <math.h>
#define PI 4.0*atan(1.0)
typedef double function(double);
double f(double x) { return x*x - 5; }
double df(double x) { return 2*x; }
double g(double x) { return x*x - 3*x + 2; }
double dg(double x) { return 2*x - 3; }
double h(double x) { return PI*sin(x)-2*x; }
double dh(double x) { return PI*cos(x)-2; }
double newton(function f, function df, double x, double eps) {
double y;
int count = 0;
do {
y = x, x -= f(x)/df(x);
++count;
} while (fabs(x-y) > eps);
printf("%d iterations\n", count);
return x;
}
main() {
printf("(1) "); printf("%12.11lf\n", newton(f,df,1,1e-8));
printf("(2) "); printf("%12.11lf\n", newton(g,dg,0,1e-7));
printf("(3) "); printf("%12.11lf\n", newton(h,dh,2,1e-7));
}
0490デフォルトの名無しさん
2006/01/31(火) 20:05:25310ってことは、たぶん担当は自分だなw
ちょっと見てくるから待っててくれ。
0491デフォルトの名無しさん
2006/01/31(火) 20:10:01最も内側のループにカウンタつけるのも手法。
・・・こういうグラフのベンチ集ってどっかにないのかね?
0492デフォルトの名無しさん
2006/01/31(火) 20:18:42前スレ該当レスうぷキボン
0493デフォルトの名無しさん
2006/01/31(火) 20:21:26時間計算量って、単純にNで実行行数がどれだけ変わるかでいいんじゃね?
0494デフォルトの名無しさん
2006/01/31(火) 20:22:07計算量をなにで判断するかによるけど、未確定のノードを確定に
するために、最小値とその(確定にしようとしている)未確定の
ノードまでの距離を比較するたびに、カウンターが上がるように
してみた。これで何回比較しているかわかるから、ひとつの
目安になるかも。修正箇所は、
26行目くらいにint counter;とグローバルでカウンターを宣言して、
147行目のforの上あたりにcounter = 0;と初期化して、
157行目のif(DEB)の下に、counter++;でカウンターを上げる。
最後は、mainでcounterの値をprintfとかで表示させればOK.
0495デフォルトの名無しさん
2006/01/31(火) 20:36:27課題の提出に、プロファイラとか実装したら凄いな。
きっと文句なしにA++だろうw
0496デフォルトの名無しさん
2006/01/31(火) 21:21:13[2] 問題文(含コード&リンク):
ある2つの整数を入力して、四則演算をして結果を出力するプログラムを作成しなさい。
※ 四則演算をそれぞれ関数にすること
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: 初心者ですので分かりません
[3.3] 言語: C言語
[4] 期限: 2/1
[5] その他の制限:初心者なので簡単にお願いします。
0497デフォルトの名無しさん
2006/01/31(火) 21:28:40初心者でもコンパイラ名ぐらいはわかるだろ。
0498デフォルトの名無しさん
2006/01/31(火) 21:29:44ちょっと調べればわかると思う
0499デフォルトの名無しさん
2006/01/31(火) 21:31:050500デフォルトの名無しさん
2006/01/31(火) 21:36:030501デフォルトの名無しさん
2006/01/31(火) 21:36:26と、ここの質問者にいっても無意味だよな。
0502デフォルトの名無しさん
2006/01/31(火) 21:47:51#include<stdio.h>
int たし算の答え, たす数1=0, たす数2=0;
int ひき算の答え, ひかれる数1=0, ひく数2=0;
int かけ算の答え, かける数1=0,かける数2=0;
int わり算の答え, わられる数1=0, わる数2=0;
int たし算の計算(){ たし算の答え = たす数1 + たす数2;}
int ひき算の計算(){ 引き算の答え = ひかれる数1 - ひく数2;}
int かけ算の計算(){ 掛け算の答え = かける数1 * かける数2;}
int わり算の計算(){ 割り算の答え = わられる数1 / わる数2;}
int main(){たし算の計算();ひき算の計算();かけ算の計算();わり算の計算();}
初心者に向けて、わかりやすく書いてみた。「せいすうの入力」は、上の
ぷろぐらむに直接入力してね。日本語使えるコンパイラなら動くはず。
あとテンプレにあるとおり、じょうけんあとだしはだめだから。
0503デフォルトの名無しさん
2006/01/31(火) 21:48:45出来ない位イライラする要素になってきた。
0504デフォルトの名無しさん
2006/01/31(火) 21:50:230505デフォルトの名無しさん
2006/01/31(火) 21:54:17禿同。まあ、これは釣りくさいがな。
0506デフォルトの名無しさん
2006/01/31(火) 22:09:57#include <stdio.h>
int add(int a, int b){return a + b;}
int sub(int a, int b){return a - b;}
int mul(int a, int b){return a * b;}
int div(int a, int b){return a / b;}
int main(void) {
int a, b;
scanf("%d%d", &a, &b);
printf("%d+%d=%d\n", a, b, add(a,b));
printf("%d-%d=%d\n", a, b, sub(a,b));
printf("%d*%d=%d\n", a, b, mul(a,b));
printf("%d/%d=%d\n", a, b, div(a,b));
return 0;
}
0507デフォルトの名無しさん
2006/01/31(火) 22:11:13ハ_ハ (^( ゚∀゚)^) 初心者〜初心者〜
アソレソレ ('(゚∀゚∩ ) /
ヽ 〈 (_ノ_ノ
ヽヽ_)
0508デフォルトの名無しさん
2006/01/31(火) 22:11:40問題がつまらん
0509デフォルトの名無しさん
2006/01/31(火) 22:11:510510デフォルトの名無しさん
2006/01/31(火) 22:12:25スルーできないなら迷惑だ。
消えてくれ。
0512デフォルトの名無しさん
2006/01/31(火) 22:20:54それだと「すべての整数(∀x(x∈int))」になってしまう。
ちゃんと曲解しろ
0513デフォルトの名無しさん
2006/01/31(火) 22:21:42/ \
/ ./⌒ ⌒ヽ ヽ
/, __| / | | ヽ |_ |
| / ○ \| 未来に逝かないか?初心者君
| / 三 | 三. |
| | 丶___|__) |
ヽ\______/
ヽ ノ
,.、-  ̄/ | l  ̄ / | |` ┬-、
/ ヽ. / ト-` 、ノ- | l l ヽ.
/ ∨ l |! | `> | i
/ |`二^> l. | | <__,| |
_| |.|-< \ i / ,イ____!/ \
.| {.| ` - 、 ,.---ァ^! | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{ ___|└―ー/  ̄´ |ヽ |___ノ____________|
}/ -= ヽ__ - 'ヽ -‐ ,r'゙ l |
__f゙// ̄ ̄ _ -' |_____ ,. -  ̄ \____|
| | -  ̄ / | _ | ̄ ̄ ̄ ̄ / \  ̄|
___`\ __ / _l - ̄ l___ / , / ヽi___.|
 ̄ ̄ ̄ | _ 二 =〒  ̄ } ̄ / l | ! ̄ ̄|
_______l -ヾ ̄ l/ l| |___|
0514デフォルトの名無しさん
2006/01/31(火) 22:22:450515デフォルトの名無しさん
2006/01/31(火) 22:27:41[2] 問題文(含コード&リンク):
文字列iの位置nに文字列eを入れる関数Ins(i,n,e)を作りなさい。
nは正の整数です。
例 :i[]→C-language
n →4
e[]→TEST
結果:i[]→C-language
↓
i[]→C-laTESTnguage
ヒント:最初に後ろへ「nguage」をずらしてから「TEST」を入れます。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:すいません、分からないです・・・
[3.3] 言語:C言語です。
[4] 期限:2月1日まで
[5] その他の制限:
つい最近StringCopy( )関数を習いました。
たぶんコレを使いながら解いていけ・・という事だと思うのですが..
できれば初心者向けに解いてもらえると有難いです。
よろしくお願いします。
0516デフォルトの名無しさん
2006/01/31(火) 22:29:08StringCopy()なんてものは標準に存在しないから、誰もその中身が
分からない。参考にして作って欲しければ、その中身も公開すること。
0517デフォルトの名無しさん
2006/01/31(火) 22:33:04ある整数でいいんでね?
100桁の整数とかの計算できないから全ての整数じゃないし
0518デフォルトの名無しさん
2006/01/31(火) 22:33:380519デフォルトの名無しさん
2006/01/31(火) 22:39:15#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char buf[1000];
int myadd(){
printf("足し算の答えを入力してください:"); return atoi(gets(buf));
}
int mysub(){
printf("引き算の答えを入力してください:"); return atoi(gets(buf));
}
int mymul(){
printf("掛け算の答えを入力してください:"); return atoi(gets(buf));
}
int mydiv(){
printf("割り算の答えを入力してください:"); return atoi(gets(buf));
}
main(){
int a, b=0;
srand(time(0));
a =(rand()*rand()*rand())&0x0000FFFF;
while(b==0||b==1||a%b) b=(rand()*rand()*rand())&0x0000FFFF;
printf("整数1は%d 整数2は%dです\n", a, b);
if((a+b)==myadd()) printf("正解です\n"); else printf("間違っています\n");
if((a-b)==mysub()) printf("正解です\n"); else printf("間違っています\n");
if((a*b)==mymul()) printf("正解です\n"); else printf("間違っています\n");
if((a/b)==mydiv()) printf("正解です\n"); else printf("間違っています\n");
}
0520デフォルトの名無しさん
2006/01/31(火) 22:39:200521デフォルトの名無しさん
2006/01/31(火) 22:42:52[2] 問題文
初心者すぎる質問ですみません。
[質問1]
・このプログラムはCですか?このプログラムを書くのはSDKのエディタですか?
・RADIOBUTTONとか書いてあるけど”ALL”というラジオボタンが画面に現れるのですか?
・また下の方に
STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
というメッセージがありますが、これはエラーメッセージか何かですか?(実際に画面に表示されるのですか?それともプログラムとしての命令文で別に表示されるものではないでしょうか?)
PRINT DIALOG DISCARDABLE 15, 15, 181, 181
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Print"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Printer:",1093,6,4,25,8
GROUPBOX "Range",1072,5,27,106,75,WS_GROUP
RADIOBUTTON "&All",1056,11,40,98,10,WS_GROUP | WS_TABSTOP
RADIOBUTTON "S&election",IDC_PRNTSTUP_SELECTION,11,51,98,10
RADIOBUTTON "C&urrent Page",1057,11,62,98,10
RADIOBUTTON "&Pages",1058,11,73,98,10
1136,50,118,62,41,CBS_DROPDOWNLIST | WS_BORDER |
END
STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
ID_COMBO_FACE "Select Font for the current selection\nFont"
END
0522デフォルトの名無しさん
2006/01/31(火) 22:44:48[質問2] これはhtmlですか?<GX>っていうタグは見たことが無いのですが。
このプログラムを書くのはテキストエディタで良いですか?
</GX>
<GX ID=Beetle>
<GX TYPE=tile ID=buyer>
Billing Address<BR>
Buyer: <GX TYPE=cell ID=buyer.name></GX><BR>
<GX TYPE=cell ID=buyer.isResPhone> Residence Phone: <GX TYPE=cell ID=buyer.rPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isBizPhone> Business Phone: <GX TYPE=cell ID=buyer.bPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isFaxPhone> Fax Phone: <GX TYPE=cell ID=buyer.fPhone></GX><BR></GX>
Address: <GX TYPE=cell ID=buyer.addrOne></GX><BR>
<!-- end of buyer tile --> </GX>
これら2つとも
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (不明)
[3.3] 言語: (C?)
[4] 期限: ([2006年2月1中] )
[5] その他の制限: (なし)
0523デフォルトの名無しさん
2006/01/31(火) 22:48:31スレ違いなので、手短に答えるとそれはリソーススクリプト。
Cではない。MS独自の形式でGUIを表したもの。書くのは
リソースエディタというツール。VC++などに付属している。
使うにはスクリプトをコンパイルしないといけない。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcresed/html/vcconWorkingWithResources.asp
0524デフォルトの名無しさん
2006/01/31(火) 22:51:47人がいないからといって、別のスレに質問するのは間違い。くだスレなどで
聞いた方がいい。たぶんxmlとかじゃないの?
0525デフォルトの名無しさん
2006/01/31(火) 23:14:19Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/
>>522
板違い
web制作管理@2ch掲示板
http://pc8.2ch.net/hp/
0526デフォルトの名無しさん
2006/02/01(水) 00:07:13[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
身の回りで構造体で表せるものを探して構造体として定義。
構造体の各メンバの値を表示する関数を作成し、使用せよ。
構造体の各メンバに値を代入する関数を作成し、使用せよ。
上記全てのプログラムを1つにまとめ、mainから呼べるようにせよ。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語:C
[4] 期限:2006年02月01日09:30まで]
[5] その他の制限:
リンクトリストを使うんだと思います。
mallocで1つのセルのメモリを獲得することで動的にメモリを確保してください。
構造体は
struct family{
char name[100];
int age;
struct family *next;
};
という感じになるのでしょうか。。。
それぞれmainでmenuから選択できるようにしてください。
ライブラリはstdio.h、string.h、stdlib.hのみ使用可です。
別質問なんですが下記の*newListってなんでしょうか。また**の意味もわかりません。
struct LIST * newList( struct LIST ** pstart){
・・・
}
どなたか、夜分遅くに申し訳ありませんが、よろしくお願いします。
0527デフォルトの名無しさん
2006/02/01(水) 00:11:05"newList"は関数名。struct LIST **はstruct LISTへのポインタへの
ポインタの宣言。
ところで、その問題からなぜリンクリストの話になるんだ?
0528デフォルトの名無しさん
2006/02/01(水) 00:11:50[2] 問題文(含コード&リンク):
2次元平面上の3つの座標p1,p2,p3を頂点とする。
三角形を考え、構造体triangleを以下のように定義する。
struct triangle{
double p1[2]; double p2[2]; double p3[2];
};
構造体triangleに対して、以下の関数を作成せよ。簡単な解説も書くこと。
int congruence(structure triangle *a, structure triangle *b)
三角形aと三角形bが合同かどうかを判定する、
合同なら1を、合同でないなら0を返す
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C 5.5.1
[3.3] 言語:C
[4] 期限: 2006年2月2日まで
申し訳ありませんが、よろしくお願いいたします。
0529デフォルトの名無しさん
2006/02/01(水) 00:12:01普通に問題文を読めば線形リストなんぞ必要ないと思うが
**はポインタへのポインタ
0530デフォルトの名無しさん
2006/02/01(水) 00:14:300531デフォルトの名無しさん
2006/02/01(水) 00:17:130532デフォルトの名無しさん
2006/02/01(水) 00:21:480533デフォルトの名無しさん
2006/02/01(水) 00:23:31同じはずなのに合同じゃねぇm9(^Д^)プギャーッみたいな
0534デフォルトの名無しさん
2006/02/01(水) 00:26:28つーか、精度要るなら手計算しろよって話になるし
0535デフォルトの名無しさん
2006/02/01(水) 00:28:23int congruence(struct triangle *a, struct triangle *b) {
/* それぞれの辺の長さの2乗を求める(ルートは必要無い) */
double al[] = {(a->p1[0] - a->p2[0]) * (a->p1[0] - a->p2[0]) + (a->p1[1] - a->p2[1]) * (a->p1[1] - a->p2[1]),
(a->p1[1] - a->p2[1]) * (a->p1[1] - a->p2[1]) + (a->p1[2] - a->p2[2]) * (a->p1[2] - a->p2[2]),
(a->p1[2] - a->p2[2]) * (a->p1[2] - a->p2[2]) + (a->p1[0] - a->p2[0]) * (a->p1[0] - a->p2[0])};
double bl[] = {(b->p1[0] - b->p2[0]) * (b->p1[0] - b->p2[0]) + (b->p1[1] - b->p2[1]) * (b->p1[1] - b->p2[1]),
(b->p1[1] - b->p2[1]) * (b->p1[1] - b->p2[1]) + (b->p1[2] - b->p2[2]) * (b->p1[2] - b->p2[2]),
(b->p1[2] - b->p2[2]) * (b->p1[2] - b->p2[2]) + (b->p1[0] - b->p2[0]) * (b->p1[0] - b->p2[0])};
/* 3辺が等しければ合同 */
if (al[0] == bl[0] && al[1] == bl[1] && al[2] == bl[2] || al[0] == bl[1] && al[1] == bl[2] && al[2] == bl[0] || al[0] == bl[2] && al[1] == bl[0] && al[2] == bl[1]
|| al[0] == bl[2] && al[1] == bl[1] && al[2] == bl[0] || al[0] == bl[1] && al[1] == bl[0] && al[2] == bl[2] || al[0] == bl[0] && al[1] == bl[2] && al[2] == bl[1]) return 1;
else return 0;
}
0536デフォルトの名無しさん
2006/02/01(水) 00:28:32合同の条件の一つだからOK.精度は、ベクトルで考えればいいんじゃない?
3点の座標の差を取って、3つのベクトルを作って、その3つの
ベクトルが全て等しくなる組み合わせがあれば合同ってのは?
0537535
2006/02/01(水) 00:30:530538526
2006/02/01(水) 00:31:13>>529さん
レスありがとうございます(>_<)
リンクトリストじゃなくても作れるんですか?
なんかこないだやったばかりだったので、
これはきっと使わないとできないに違いない!!とかおもってしまいました。
ろだに今書きかけをあげました。
挙げ方まちがえちゃったみたいで、すみません!
今こんな感じで書いてるんですが、
dainyu関数を呼び出したときに
マロックで1つめのセルを獲得してそこに1つめのデータを入れよう。。。
とかおもったのですが、関数から構造体へのポインタがよくわかりません。
hyoji関数はまだ手を出していません。。。
0539デフォルトの名無しさん
2006/02/01(水) 00:31:350540デフォルトの名無しさん
2006/02/01(水) 00:32:52一回頭冷やして出直してこい
0541526
2006/02/01(水) 00:34:00新スレ立てちゃってごめんなさい。
0542デフォルトの名無しさん
2006/02/01(水) 00:38:13http://pc8.2ch.net/test/read.cgi/tech/1138718221/l50
0543デフォルトの名無しさん
2006/02/01(水) 00:41:22[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1589.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2月2日
よろしくお願いします
0544デフォルトの名無しさん
2006/02/01(水) 00:49:53chkprimeの存在意義が分からん
まさか[min,max]のを1つずつその関数に掛けて判定しろってのか?
0545デフォルトの名無しさん
2006/02/01(水) 00:52:310546デフォルトの名無しさん
2006/02/01(水) 00:56:13min, max は十分大きいけど |max-min| がそれほど大きくない場合は
エラトステネスよりも効率がよいことがあるので、存在意義が無いわけではない。
0547デフォルトの名無しさん
2006/02/01(水) 01:02:55動かないね。具体的には以下のテストでNG。
struct triangle t1 = { {0,0},{0,2},{1,1} }, t2 = { {1,1},{0,2},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
0548デフォルトの名無しさん
2006/02/01(水) 01:10:45距離でやるならこんなとこか。
double distance2(double p1[], double p2[]){return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);}
int congruence(struct triangle *a, struct triangle *b){
double da[3] = { distance2(a->p1,a->p2),distance2(a->p2,a->p3),distance2(a->p3,a->p1)};
double db[3] = { distance2(b->p1,b->p2),distance2(b->p2,b->p3),distance2(b->p3,b->p1)};
int i;
for(i=0;i<3;++i) if(da[0]==db[i%3]&&da[1]==db[(i+1)%3]&&da[2]==db[(i+2)%3]) return 1;
return 0;
}
0549デフォルトの名無しさん
2006/02/01(水) 01:10:46適当に行詰めたから展開してなー
#include<stdio.h>
#include<math.h>
int chkprime(int n){
int x;
if(n < 2)return 0;
for(x = (int)sqrt((double)n);x!=1 && n%x;)--x;
return x==1;
}
int main(void){
int low,high,count;FILE*fp;
puts("上限と下限を入力してください");scanf("%d%d",&low,&high);
if(low > high){int c = low ; low = high; high = c;}
if(low < 0){fputs("警告: 範囲に負が含まれてる\n", stderr);return 8;}
if(high < 2){fputs("警告: 範囲内に素数が存在しない\n",stderr);return 8;}
if((fp=fopen("result.txt","w"))==NULL){fputs("エラー: ファイルの作成に失敗\n",stderr);return 8;}
for(count=0;low <= high;++low)if(chkprime(low))fprintf(fp,"%12d%c",low,++count % 5 ? ' ':'\n');
if(count % 5)fprintf(fp,"\n");
return 0;
}
0550デフォルトの名無しさん
2006/02/01(水) 01:17:43強引な圧縮に萌えた。
しかもループでsqrtの計算を頻発しないための匠の心遣いにも萌えた。
0551デフォルトの名無しさん
2006/02/01(水) 01:20:18まだ駄目。以下のテストではじかれる。
struct triangle t1 = { {0,0},{0,3},{1,1} }, t2 = { {1,1},{0,3},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
0552デフォルトの名無しさん
2006/02/01(水) 01:23:00鏡面は?
0553535
2006/02/01(水) 01:28:170554デフォルトの名無しさん
2006/02/01(水) 01:35:02貴様の魂我が心と共に。
悲しき男よ。
誰よりも愛深く、拳でしか愛を語れぬゆえに。
0555549
2006/02/01(水) 01:50:35これで十分。
int chkprime(int n){
int x;
if(n < 2)return 0;
for(x = (int)sqrt((double)n);n%x;)--x;
return x==1;
}
0556デフォルトの名無しさん
2006/02/01(水) 01:50:37O(n) じゃ判定できない。というわけで遠慮なくソートしていい。
double d2(double p[2], double q[2]) { return (p[0]-q[0])*(p[0]-q[0])+(p[1]-q[1])*(p[1]-q[1]); }
void order(double *a, double *b) { int tmp; if (*a > *b) tmp = *a, *a = *b, *b = tmp; }
void sort3(double l[3]) { order(&l[0], &l[1]); order(&l[1], &l[2]); order(&l[0], &l[2]); }
int congruence(struct triangle *a, struct triangle *b) {
double la[3] = { d2(a->p1,a->p2), d2(a->p2,a->p3), d2(a->p3,a->p1) };
double lb[3] = { d2(b->p1,b->p2), d2(b->p2,b->p3), d2(b->p3,b->p1) };
sort3(la); sort3(lb);
return la[0] == lb[0] && la[1] == lb[1] && la[2] == lb[2];
}
0557デフォルトの名無しさん
2006/02/01(水) 02:08:29制限すれば可能だし、ハッシュって手もある
0558デフォルトの名無しさん
2006/02/01(水) 02:08:32考えていることを読み取って書くと、こんな感じ?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1590.txt
0559デフォルトの名無しさん
2006/02/01(水) 02:09:250560526
2006/02/01(水) 02:15:25おさわがせしました。
なんとか自力でできました〜。
新スレたてちゃって本当に申し訳ありませんでした。
失礼します!
0562デフォルトの名無しさん
2006/02/01(水) 02:35:07実数からのハッシュなんてどうやって構成するつもり?
というか、ハッシュは普通加算集合上の関数として定義するはずだけど。
頻度表も自明なハッシュだから、状況はおんなじね。
0563デフォルトの名無しさん
2006/02/01(水) 02:40:080564デフォルトの名無しさん
2006/02/01(水) 02:47:36実数のハッシュの件なんだがだが、ビットパターンなんだから、どーとでも成るでしょ。
固定長の文字列って考えてもいいんだから。
0565デフォルトの名無しさん
2006/02/01(水) 03:12:18こっちもヨタで。実際3要素ならアルゴリズムなんて言うまでもないしね。
で。実数を有限ビットで表現することにすれば確かに加算集合になるけど、
普通、計算量というときは考慮しないと思う(計算モデルへの依存が強すぎるから)。
もっと実用的な意味では、有限ビットの表現は計算モデルによって
どこでどんな誤差が乗るのか怪しいので、 == に基づくハッシュは
有効じゃない。たとえば assert(0.3 == 1.0-0.7); が通るかどうかは環境依存。
0566デフォルトの名無しさん
2006/02/01(水) 03:17:12#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int *sieve;
int chkprime(int n) {return sieve[n];}
int main(void) {
int lower_num, upper_num, notprime, sqrtn, digits, i, j = 0;
FILE* fp;
scanf("%d%d", &lower_num, &upper_num);
if (lower_num < 0 || upper_num < 0 || lower_num > upper_num) {
fprintf(stderr, "illegal range!\n");
return 0;
}
sieve = (int*)malloc(sizeof(int) * (upper_num + 1));
for (i = 2; i <= upper_num; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
sqrtn = (int)sqrt(upper_num) + 1;
for (i = 2; i <= sqrtn; i++) {
notprime = i;
while ((notprime += i) <= upper_num) sieve[notprime] = 0;
}
fp = fopen("result.txt", "w");
digits = (int)log10(upper_num) + 2;
for (i = lower_num; i <= upper_num; i++)
if (chkprime(i)) {
fprintf(fp, "%*d", digits, i);
if (j++ % 5 == 4) fprintf(fp, "\n");
}
if (j == 0) fprintf(stderr, "there's no prime!\n");
fclose(fp); free(sieve);
}
0567デフォルトの名無しさん
2006/02/01(水) 03:25:041)3つの値に対してソートは正しい選択だ。
2)実数という書き方もマズかった。キーを「不動小数点数」を対象にしたといえばいいのだろうか。
ところで、加算集合(=濃度が整数と等しい・・・?)がイマイチわからんのだ。
不勉強な俺に加算集合とかハッシュの関連がかかれているページを教えてくれ。
0568デフォルトの名無しさん
2006/02/01(水) 07:53:37すいません、>>461です。
下記プログラム(>>474さんにやってもらったやつ)の横に
その行の仕事を書いていただけないでしょうか・・・
#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<=6;++c,printf("\n"))
for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t);
return 0;
}
/*(2)*/
#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}
0569デフォルトの名無しさん
2006/02/01(水) 11:41:160570デフォルトの名無しさん
2006/02/01(水) 12:48:530571デフォルトの名無しさん
2006/02/01(水) 14:31:55すべてコピーするプログラムを作りたいのですが、下記のプログラムでは、
out.txtが作成されません...
どなたかよろしくお願いいたします。
#include <stdio.h>
#include <stdlib.h>
int main(int argc , char *argv[]) {
int count = 1;
char str[256];
FILE *fp_in,*fp_out;
fp_out=fopen("out.txt","w");
while (count < argc) {
printf("FILE %d : %s\n" , count , argv[count]);
if((fp_in=fopen(argv[count],"r"))==NULL){
getchar();
exit (1);
}
while ((fgets(str,256,fp_in))!=NULL)
fputs(str,fp_out);
count++;
fclose(fp_in);
}
fclose(fp_out);
printf("\n");
printf("Press \"Enter\" to exit.");
getchar();
return 0;
}
0572デフォルトの名無しさん
2006/02/01(水) 14:36:55[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc (Cygwin)
[3.3] 言語: C
書き忘れてました。。。
0573474
2006/02/01(水) 14:52:45嫌です。コメント書くのってコードを書くのの約20倍ぐらい疲れるから
とりあえず意味単位にコードを分離まではするからそこから先は自分で考えてくれ
#include<stdio.h>/*(1)*/
int main(void){
int n,c,t;
for(c=0;c<=6;++c){
t = 1;
for(n=0;n<=c;++n){
printf("%dC%d = %d ",n,c,t);
t = t * (c - n) / (n+1);
}
printf("\n");
}
return 0;
}
#include<stdio.h>/*(2)*/
int main(void){
int n,c,t;
for(c=0;c<=10;++c){
printf("%*s",(10-c)*2,"");
t = 1;
for(n=0;n<=c;++n){
printf("%3d ",t);
t = t * (c - n) / (n+1);
}
printf("\n");
}
return 0;
}
0574デフォルトの名無しさん
2006/02/01(水) 15:01:21#include<stdio.h> こう書かないとコンパイラが文句をいうので仕方なく書いています。
int main(void){ C言語です。と宣言しています。
int n,c,t; この行は仕事をしていません。
for(c=0;c<=6;++c,printf("\n")) ループしています。
for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t); ループしてプリントしています。
return 0; プログラムを終わらせます。
} これはよくわかりません。たぶん意味はないです。
/*(2)*/
#include<stdio.h> 上とほとんど同じなので、うまく文章を真似てください。
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}
0575デフォルトの名無しさん
2006/02/01(水) 15:52:38[2] 問題文(含コード&リンク):符号付固定小数点加算(2進数)について以下の3つの場合のプログラムを書きなさい。
1)符号−絶対値表現による加算
2)1の補数表現による加算
3)2の補数表現による加算
[3] 環境
[3.1] OS:Windows
[3.2] わかりません。すみません。
[3.3] C、C++どちらでも可です。
[4] 期限:2月4日まで
[5] その他の制限:特にありません。
開放科目受講生なのでプログラムについてベイシックしか習ったことがありません。
ですから調べて書いてくるようにとの指示でした。どうかお願いします。
0576デフォルトの名無しさん
2006/02/01(水) 16:18:22それは、実はちゃんと動作しているんだよ。
ただ、出力先のファイルが変なところにできているだけ。
"out.txt"をフルパスで、"c:\\out.txt"とかすればいいよ。
0577デフォルトの名無しさん
2006/02/01(水) 17:17:05[2]問題文:ヒープを構築し、データの挿入、最大値の取り出しのシュミレーションを実施せよ
コメントつきのプログラムを添付せよ
[3]環境
[3.1]OS:windows
[3.2]コンパイラ名:gcc バージョン:わからないです
[3.3]C言語
[4]期限:2月2日まで
[5]その他の制限:たぶん初心者ばっかなんでIf文を使いまくって2文探索木でどうのこうのだと思うのですが
よくわかりません。
知識はゼロに近いです・・。お願いします。
0578デフォルトの名無しさん
2006/02/01(水) 17:28:18お願いします
[1] 授業単元: 個人的趣味
[2] 問題文(含コード&リンク):
二つのパラメータが同時に以下のように溜まるようにしたい(20個くらいで)
味方:■■■■■・・・・■
敵 :■■■■■・・・・■
先にパラメータが終了したら攻撃が行えるようにしたいので
どちらが先にパラメータが溜まるかわからない仕様
味方のパラメータが仮に先に終了したら味方が攻撃を行い
攻撃後はパラメータは初期化されまた最初からはじまる
攻撃の部分はどうでもいいのでパラメータをどのように溜めるかだけお願いします
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: BCC32
[3.3] 言語: C
[4] 期限: 特になし、早ければ早い方が…
[5] その他の制限: 無し
0579デフォルトの名無しさん
2006/02/01(水) 17:41:030580571
2006/02/01(水) 17:43:40できましたー!
実は本当はもう少し複雑なプログラムを作ろうと思っていたのですが、
これでうまく作れそうです。
本当にありがとうございました。
0582デフォルトの名無しさん
2006/02/01(水) 18:12:250583デフォルトの名無しさん
2006/02/01(水) 18:17:51毎フレームごとに全員のゲージを溜めていって満タンになったら行動
下はコンソールでの例(Win限定)
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<windows.h>
#include<conio.h>
int main(){
int a=0,b=0;
for(;;){
printf("A %0*d\nB %0*d\n",a,0,b,0);
a += rand()%3;//適当にゲージを溜める
b += rand()%3;//適当にゲージを溜める
if(a > 20){
printf("Aの攻撃\n");
getch();
a = 0;
}
if(b > 20){
printf("Bの攻撃\n");
getch();
b = 0;
}
Sleep(100);
system("cls");
}
}
0584デフォルトの名無しさん
2006/02/01(水) 18:21:13ところでなんか無駄にincludeされてない?
0585デフォルトの名無しさん
2006/02/01(水) 18:24:08絶対にAの攻撃になるんだが・・。
0586デフォルトの名無しさん
2006/02/01(水) 18:26:07確かにこのままだと毎回同じだけどさ
0587デフォルトの名無しさん
2006/02/01(水) 18:26:48自分でわかって使うならそれでいいけど、宿題ならそれだと減点されるぞ。
ヒント:
(1): ファイルのある行が 256byte以上ある時
(2): ファイルの中身に '\0' が含まれていたらどうする?
(3): エラー処理
答えは後程。
0588デフォルトの名無しさん
2006/02/01(水) 18:29:44(1)は問題無いな。読みきれなければ次のfgetsで読み込めるから
0589デフォルトの名無しさん
2006/02/01(水) 18:31:20#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<windows.h>
#include<conio.h>
int main(){
int a=0,b=0;
for(;;){
printf("A %0*d\nB %0*d\n",a,0,b,0);
srand((unsigned) time(NULL));
a += rand()%3;//適当にゲージを溜める
b += rand()%3;//適当にゲージを溜める
if(a > 20){
printf("Aの攻撃\n");
getch();
a = 0;
}
if(b > 20){
printf("Bの攻撃\n");
getch();
b = 0;
}
Sleep(100);
system("cls");
}
}
0590デフォルトの名無しさん
2006/02/01(水) 18:31:360591583
2006/02/01(水) 18:33:32せめてforの外でsrandしてくれw
というか自分のコードは、
あくまで概念的な説明でいい加減に出したから真面目に弄られると困るw
0592デフォルトの名無しさん
2006/02/01(水) 18:38:070じゃなくて■だとどうなんの?
0593583
2006/02/01(水) 18:41:41単に
printf("A %0*d\nB %0*d\n",a,0,b,0);
が
printf("A ");for(i=0;i<a;++i)printf("■");puts("");
printf("B ");for(i=0;i<b;++i)printf("■");puts("");
に変わるだけ(int iの宣言はどこかでしてなー)
0594デフォルトの名無しさん
2006/02/01(水) 18:43:132はfeof()使えばいいんじゃね?
0595デフォルトの名無しさん
2006/02/01(水) 18:55:55かっけえー Cでかっこいいとおもたのはじめてあるよwww
0596デフォルトの名無しさん
2006/02/01(水) 19:25:35>>333
106のダイクストラ法のプログラムってさ
グローバルで定義した配列p[]をshortestpathの中で一回使ってんじゃん
あれって何の意味があんの?
実はこの問題、本当は最短経路求めるはずなのに333のプログラムだと最短経路のコストしか分かんないんだよね
それを求めるときに使うのかなって思ったんだけど
ちなみに課題の提出は終わったから興味本位な
0597587
2006/02/01(水) 19:35:14(1) はこちらのミス。fgets(buf,n,fp) は n-1 byte だったな。
吊ってくる
(2) は使うファイルがテキストと仮定すれば問題ないか
そんな訳でほぼ意味はないが、自分なりに作った答はこちら。
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc, char *argv[]) {
int count=1;
char str[256];
FILE *fp_in,*fp_out;
fp_out=fopen("out.txt","wb");
if(!fp_out){
perror("out.txt");
return 1;
}
for(;count<argc;count++){/* */
int size;
printf("FILE %d : %s\n",count,argv[count]);
if((fp_in=fopen(argv[count],"rb"))==NULL){
getchar();
exit(1);
}
0598587=597 続き
2006/02/01(水) 19:37:49char *cur_w;
size=fread(str,1,sizeof(str),fp_in);
if(!size){
if(feof(fp_in))break;
if(errno!=EINTR){perror(argv[count]);break;}
clearerr(fp_in);
}
cur_w=str;
while(size>0){
int wrsize;
wrsize=fwrite(cur_w,1,size,fp_out);
if(ferror(fp_out)){
if(errno!=EINTR){perror("out.txt");exit(1);}
clearerr(fp_out);
}
cur_w+=wrsize;size-=wrsize;
}
}
fclose(fp_in);
}
fclose(fp_out);fputs("\nPress \"Enter\" to exit.",stdout);getchar();
return 0;
}
0599デフォルトの名無しさん
2006/02/01(水) 19:38:21>>576
横からなんだけどDDした場合って、explorer.exeかなんかがそのDDしたバイナリファイルをプロセス作成してて
カレントディレクトリの位置が親プロセスを受け継いでるから、バイナリの同ディレクトリにout.txtが出力されないって事なの?
32APIでスマソ
0600デフォルトの名無しさん
2006/02/01(水) 20:35:37そういうことだろうね。
0601デフォルトの名無しさん
2006/02/01(水) 20:45:16p[]を使うかどうかはわからんが、全てのノードへの最短の長さが
わかったら、逆に辿れば目的地までの最短経路は簡単に出るだろ。
0602デフォルトの名無しさん
2006/02/01(水) 20:58:16それで認める?
簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか
まあ そういう使い方しないとしてもp[]の使い道の意見求む
0603sage
2006/02/01(水) 20:58:56[2] 問題文:gnuplotのようにファイルの数値データを読み込んで自動的にグラフを生成するプログラム
データの値(X座標とY座標)が書き込まれたファイルをまず用意し(?.dat)、プログラムを
実行すると、 データのファイル名、グラフの種類(点、折れ線、など)を尋ねる。
入力したデータを読み込んで、グラフをグラフィック表示する。作図の範囲(X座標とY座標の範囲)は、
データから自動的に計算し、データ点が全て描かれるようにする。その際に、X軸とY軸も入れること。
[3.1] OS:Linux
[3.3] 言語: C++
[4] 期限: 2月2日まで
どうかお願いします。。
0605デフォルトの名無しさん
2006/02/01(水) 21:05:13?なにを?
>簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか
?なぜ手計算?
まあ、いいわ。スレ違いだ。やめておくわ。
0606デフォルトの名無しさん
2006/02/01(水) 21:11:320607デフォルトの名無しさん
2006/02/01(水) 21:12:24ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1591.c
0608602
2006/02/01(水) 21:14:27違ってたら悪いけど
目的地から最短経路の一つ前の節点は
((目的地への最短経路) - (目的地に接続されている点への最短経路) ) == (目的地と接続されている点との距離)
である点を探してスタート地点まで戻るんだろ?
それを手計算って呼び方にしたのが悪かったのかも知れないけど
>認める
っていうのは最短経路を求めるプログラムとして認めるかってこと
ゴメン色々と言葉足らずでした
0609デフォルトの名無しさん
2006/02/01(水) 21:37:44[2] 問題文(含コード&リンク):
char str[][51];
のような二次元配列に日本語の文字列が入っています。
その文字列を1文字づつに区切りって取り出しor出力したいのですが
どうもうまくできません・・・
strcpy(a, str[0]);
で一度aの配列に入れ、取り出そうと思いましたが
2バイト文字なのでダメでした。
なにか良い方法はないでしょうか?
[3] 環境
[3.1] OS:Linux
[3.2] バージョン不明。ccコマンドでコンパイルしています。
[3.3] 言語:C
[4] 期限:2006年02月02日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタの使い方など理解できていないので出来れば無しで。
よろしくお願い致します。
0610デフォルトの名無しさん
2006/02/01(水) 21:45:312バイト文字出力したかったら
printf("%c%c",str[i],str[i+1]);
ってやるんだよ
0611デフォルトの名無しさん
2006/02/01(水) 21:46:17入ってる文字は日本語(2バイト文字)だけ?
それとも半角英数字と日本語ごっちゃになってるのも含めるの?
0612デフォルトの名無しさん
2006/02/01(水) 21:48:180613デフォルトの名無しさん
2006/02/01(水) 21:50:170614デフォルトの名無しさん
2006/02/01(水) 21:51:260615デフォルトの名無しさん
2006/02/01(水) 21:54:300616デフォルトの名無しさん
2006/02/01(水) 21:57:57添え字アクセスの事ね('∀`;)
0617デフォルトの名無しさん
2006/02/01(水) 21:59:19JIS,SJIS,EUC,utf-8,utf-16とかいろいろ。
0618デフォルトの名無しさん
2006/02/01(水) 22:01:05char str[][51];
には外部のPGより出力されたのを受け取り入れてあります。
今度は、その受け取った文字(主に漢字で2バイト文字のみ)を
1文字づつに分解して、外部のPGに出力し使用する予定です。
VBAなどでは、文字の取り出し関数があったので困らなかったのですが
Cではそのような関数が見つからなくて・・・_| ̄|○
一度、printf("%c%c",str[i],str[i+1]); で試してみようと思います。
0619デフォルトの名無しさん
2006/02/01(水) 22:02:290620デフォルトの名無しさん
2006/02/01(水) 22:03:46つstrstr
0621デフォルトの名無しさん
2006/02/01(水) 22:19:00「gnuplotのように」ってあるけど、gnuplotを使っていいのか、
描画も実装しないといけないのかわからん。
0622603
2006/02/01(水) 22:22:26すいません描画を実装とはどういう意味ですか?
0623デフォルトの名無しさん
2006/02/01(水) 22:24:400624デフォルトの名無しさん
2006/02/01(水) 22:26:440625603
2006/02/01(水) 22:27:320626デフォルトの名無しさん
2006/02/01(水) 22:28:470627デフォルトの名無しさん
2006/02/01(水) 22:29:39#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <stdlib.h>
int main(void)
{
wchar_t wcs[300];
char str[] = "618 :デフォルトの名無しさん :2006/02/01(水) 22:01:05";
int len, i;
setlocale(LC_ALL, "");
len = mbstowcs(wcs, str, sizeof(wcs)/sizeof(wcs[0]));
for (i = 0; i < len; i++) {
printf(" [%d]..%lc\n", i, (wint_t)wcs[i]);
}
return 0;
}
0628603
2006/02/01(水) 22:33:51// 関数のプロトタイプ宣言
void initWindow(int w, int h) ;
void setColor(float r, float g, float b) ;
void fillRect(int x0, int y0, int w, int h) ;
void display(void) ;
int main(void)
{
initWindow(400, 400) ; // グラフィック表示のためのウィンドウを準備
setColor(1.0, 0.0, 0.0) ; // 描画色を赤に設定
fillRect(0,0,200,200) ; // 矩形を描画
display() ; // 描画し、ウィンドウ内をマウスでクリックするまで待つ
}
0629デフォルトの名無しさん
2006/02/01(水) 22:41:440630デフォルトの名無しさん
2006/02/01(水) 22:57:290631デフォルトの名無しさん
2006/02/01(水) 23:00:220632デフォルトの名無しさん
2006/02/01(水) 23:05:02描画領域の幅と高さとデータの最小最大をあわせて・・・ってやりゃぁできるだろ・・・
0633デフォルトの名無しさん
2006/02/01(水) 23:49:19[1]授業単元:プログラム基礎
[2]問題文:
int a[]={65,82,47,98,100,83,71,39,54,26};
という表現を用いて、あらかじめ配列に初期値を与えておくことができる。
この配列aの要素の最大値と最小値を求め、表示するプログラムをつくりなさい。
[3]
[3.3]言語:C++
[4]期限:2006年2月2日午後4時まで
よろしくお願いします。
0634デフォルトの名無しさん
2006/02/01(水) 23:56:56ありがとうございます!助かりました!
0635デフォルトの名無しさん
2006/02/01(水) 23:57:58#include<stdio.h>
int main(void)
{
int a[]={65,82,47,98,100,83,71,39,54,26};
int minimum;
int maximum;
int i;
minimum = a[0];maximum = a[1];
for(i=0; i<(sizeof(a)/sizeof(a[0])) ;i++){
if( a[i] < minimum ) minimum = a[i];
if( maximum < a[i] ) maximum = a[i];
}
printf("max = %d : min = %d\n",maximum, minimum);
return 0;
}
0636デフォルトの名無しさん
2006/02/01(水) 23:58:19真面目に答える気0
#include<iostream>
#include<algorithm>
int main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
const int size = sizeof(a) / sizeof(a[0]);
std::cout << "min = " << *std::min_element(a,a+size) << std::endl;
std::cout << "max = " << *std::max_element(a,a+size) << std::endl;
}
0637635
2006/02/02(木) 00:01:320638デフォルトの名無しさん
2006/02/02(木) 00:03:20#include <stdio.h>
int main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
int i,min=a[0],max=a[0];
for(i=0;i<10;i++){
if(a[i]<min)min=a[i];
if(a[i]>max)max=a[i];
}
printf("min=%d, max=%d\n",min,max);
return 0;
}
配列の要素数求めるのって、どうやるんだっけ?
0639デフォルトの名無しさん
2006/02/02(木) 00:04:06sizeof(a) / sizeof(a[0]);
0640デフォルトの名無しさん
2006/02/02(木) 00:07:34for(i=1,min=max=0;i<sizeof(a)/sizeof(int);min=(a[min]>a[i])?i:min,max=(a[max]<a[i])?i:max,i++);
0641638
2006/02/02(木) 00:09:48どうもです。
どうもそのようですね。>>635見て、勉強になりました。
そこがどうにかならないか考えてたら
皆ハイエナのように飢えてるんだから…_| ̄|○
C++の問題は、知らないこと力技でやったら恥ずかしい目にあうから苦手。
0642デフォルトの名無しさん
2006/02/02(木) 00:18:27#include<boost/algorithm/minmax_element.hpp>
#include<iostream>
int main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
std::pair<int*,int*>p=boost::minmax_element(a+0,a+sizeof a/sizeof a[0]);
std::cout << "min = " << *p.first << "\nmax = " << *p.second << std::endl;
}
0643デフォルトの名無しさん
2006/02/02(木) 00:35:27#include <set>
#include <iostream>
main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
std::set<int> s(a,a+sizeof(a)/sizeof(a[0]));
std::cout <<"min:" <<*s.begin() <<" max:" <<*(--s.end()) <<std::endl;
}
0644575
2006/02/02(木) 00:38:04お願いできないでしょうか。
0645デフォルトの名無しさん
2006/02/02(木) 00:43:12まずどうぞ
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
0646635
2006/02/02(木) 00:43:40そういう遊び方もあるって勉強になったよw
>>644
具体的にどんなコードが必要なのかよくわからないから、そこを
詳しく書けばいいんじゃない?
0647デフォルトの名無しさん
2006/02/02(木) 00:46:21なるほろー、探す値が一個だからmultisetじゃなくてsetで十分なのか。
0648255
2006/02/02(木) 00:47:33[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.2つの分数(fraction)を入力し,その四則演算(+,-,*,/)を計算するプログラムを作成してください.
ただし,次の構造体を利用すること.ここでは,四則演算を関数化しないこと.また,既約分数にしなくとも良いです.
/*fraction_t型の定義*/
typedef struct {
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;
/*fraction_t型の変数の宣言*/
fraction_t frt;
2.和(add),差(subtract),積(multi),商(quotient)を計算する4つの関数を作成せよ.
その関数を利用し,1のプログラムと同じ構造体を利用し,同じ動作をするプログラムを作成せよ.
3.2のプログラムで,計算が正しく行われない場合を列挙して,その対応策を考えよ.
(例 1/-2 のような計算結果は,美しい表示方法とはいえません)
4.3で列挙した対応策を,2で作成したプログラム上で実現せよ.
[3] 環境
[3.1] unix
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] C
[4] 期限:2006.2/6
0649デフォルトの名無しさん
2006/02/02(木) 01:06:47真面目に答える気ゼロで書いてても誰か別の人が書いてくれると思ったのに
>>633(の教師)が求めていそうなコードはC言語版しか出ていない。
というわけで理解しやすいコードを求めて変数名を異常に饒舌に書いてみた
>>633
#include<algorithm>
#include<iostream>
int main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
int maximum_value = a[0];
int minimum_value = a[0];
int a_array_length= sizeof(a) / sizeof(a[0]);
for(int a_array_loop_index = 0;a_array_loop_index < a_array_length ; ++a_array_loop_index){
int temporarily_variable_for_comparison = a[a_array_loop_index];
if(temporarily_variable_for_comparison > maximum_value){
maximum_value = temporarily_variable_for_comparison;
}else if(temporarily_variable_for_comparison < minimum_value){
minimum_value = temporarily_variable_for_comparison;
}
}
std::cout << "min = " << minimum_value << " : max = " << maximum_value << std::endl;
}
0650デフォルトの名無しさん
2006/02/02(木) 01:08:190651デフォルトの名無しさん
2006/02/02(木) 01:08:410652デフォルトの名無しさん
2006/02/02(木) 01:17:56一番綺麗だが一番効率悪いという罠
0653デフォルトの名無しさん
2006/02/02(木) 01:39:36#include <stdio.h>
#include <limits.h>
int min(int *p, int *end){ if(p==end) return INT_MAX; return *p<min(p+1,end)?*p:min(p+1,end);}
int max(int *p, int *end){ if(p==end) return INT_MIN; return *p>max(p+1,end)?*p:max(p+1,end);}
main(){
int a[]={65,82,47,98,100,83,71,39,54,26};
printf("min=%d\n", min(a,a+sizeof(a)/sizeof(a[0])));
printf("max=%d\n", max(a,a+sizeof(a)/sizeof(a[0])));
}
0654デフォルトの名無しさん
2006/02/02(木) 01:51:40C++のイテレータ的な感覚で使ってるなw
無茶苦茶いいじゃねーか(*´д`)
0655デフォルトの名無しさん
2006/02/02(木) 02:08:11O(N^2)かよw
0656デフォルトの名無しさん
2006/02/02(木) 02:12:56俺はどのスレか忘れたけど、「適宜,対応」のセンセ降臨が好きだった。
0657655
2006/02/02(木) 02:32:51しかしネタ回答は書くのも見るのも本当に楽しいなぁ
0658デフォルトの名無しさん
2006/02/02(木) 02:44:49int main(){int a[]={65,82,47,98,100,83,71,39,54,26};int i,*b,*c,*d;for(b=a+1,c=d=b;b<a+sizeof(a)/sizeof(int);c=*b>*c?b:c,d=*b<*d?b:d,b++);printf("min=%d,max=%d\n",*c,*d);return 0;}
0659デフォルトの名無しさん
2006/02/02(木) 02:59:24多少の警告は無視してgcc,dmc,clで通した
a[]={65,82,47,98,100,83,71,39,54,26},*b=a,d;main(c){for(c=d=*a;b-a-sizeof a/sizeof*a;b++)c>*b?c=*b:d<*b?d=*b:0;printf("min=%d,max=%d\n",c,d);}
0660デフォルトの名無しさん
2006/02/02(木) 03:12:530661デフォルトの名無しさん
2006/02/02(木) 03:52:41後期の講義も昨日で終わり、とてもいい気分なので調子に乗って書いてみた。
ほれ、汚い&条件満たしてないプログラムだが、一応見てみてくれ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1592.txt
0662661
2006/02/02(木) 03:54:44条件を満たしていない「かも」ということにしておこう。
引き続き2以降の課題にも取り組んで見ます!
0663デフォルトの名無しさん
2006/02/02(木) 04:31:49( ゚д゚)
0664661
2006/02/02(木) 04:35:49ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1593.txt
で、このプログラムが正しく計算できない場合を考えると…
・分子に負の数を入れたとき、四則演算の解で分母に-がくっついて出力されてしまう場合がある
→出力する前に分母の方に-をくっつける
・数値を読み込むときに分母に負の数を入れた場合計算結果がおかしくなる。
→分母に負数が入力されたときに警告文を出すか、計算前に分子の方に-をくっつける処理を行う
(・分母に0を入れたときっていうのも、一応計算が正しく行われていないことになるのかなぁ…)
→分母に0を入力したときは警告文を出す
もしかしたら他にも不都合な点があるかも知れんが、とりあえず上の3つに対してのプログラムを書いてみます。
0665デフォルトの名無しさん
2006/02/02(木) 04:47:150666デフォルトの名無しさん
2006/02/02(木) 04:55:09ちょっとプログラム書き換えてみます
0667664
2006/02/02(木) 05:08:55if(frt[0].denominator != frt[1].denominator){ /*ここで通分を行う*/
frt[0].numerator *= frt[1].denominator;
frt[1].numerator *= frt[0].denominator;
frt[0].denominator = frt[1].denominator = frt[0].denominator * frt[1].denominator;
}
ちょうど4のプログラムもできたので、全部のプログラムの改訂版をまとめてうpしておきます。
問題1改訂版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1594.txt
問題2改訂版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1595.txt
問題4
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1596.txt
0668デフォルトの名無しさん
2006/02/02(木) 07:24:372進数の保持の仕方は? 文字列? int?
サイズは?(=最上位ビットは何ビット目?
小数点の位置指定は?
値の指定方法は?
intに格納した値を8bitの2進数と解釈するものはできたけど、回答になるのかどうか分からん。
0669デフォルトの名無しさん
2006/02/02(木) 08:44:16あのプログラムは読むのが面倒すぎてやる気がおきなかったけど……,
ダイクストラ法の p[] って言うと,一応「p[i] は i の一歩前の頂点」
ってのが,多くのアルゴリズムの本では書かれてるはず.
具体的には 326 のコード使って↓みたいに使う.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1597.c
0670デフォルトの名無しさん
2006/02/02(木) 08:55:06#include <stdio.h>
#include <limits.h>
typedef int func(int, int);
int foldl(func f, int z, int *first, int *last) {
return first == last ? z : foldl(f, f(z, *first), first+1, last);
}
int min2(int a, int b) { return a < b ? a : b; }
int max2(int a, int b) { return a < b ? b : a; }
int min(int *first, int *last) { return foldl(min2, INT_MAX, first, last); }
int max(int *first, int *last) { return foldl(max2, INT_MIN, first, last); }
int main() {
int a[]={65,82,47,98,100,83,71,39,54,26};
printf("min=%d\n", min(a,a+sizeof(a)/sizeof(a[0])));
printf("max=%d\n", max(a,a+sizeof(a)/sizeof(a[0])));
}
0671デフォルトの名無しさん
2006/02/02(木) 09:11:27ありがとうございます!
0672デフォルトの名無しさん
2006/02/02(木) 09:46:44なるほど
それだったら納得
勉強になったよ
ありがと
0673644
2006/02/02(木) 11:54:05質問に行きましたところ、固定小数点の整数でいいようです。
格納についてはintで、サイズも8bitで良いとのことでした。
情報不足で申し訳ありません。お願いします。
0674657
2006/02/02(木) 12:06:46C++で言うところのstd::accumulate相当の処理ですなぁ
オーダーも下がるし、コードは明示的ループより読みやすいし、
末尾再帰は偉大なりって感じですねー。
0675デフォルトの名無しさん
2006/02/02(木) 13:07:17下のプログラムを動かしたんですが、a=1,b=256とデフォルトで出てきてしまいます。
数字を入力したら計算はきちんとできるんですが、1と256を出ないようにして
デフォルトでa= ,b= とだけ表示するにはどうしたらいいですか?
つまりa= が出てきて例えば10という数値を入れてa=10という表示がされるようにしたいのですが。。。
後、BCCDeveloperというエディタを使っていますがリリース版の実行ファイルの作成の仕方がわかりません・・・
デバッグかリリース選ぶ箇所でリリースしてコンパイルしようとするとエラーが出てしまいます。
どなたかリリース版の実行ファイルの作り方が分かる方がいれば教えていただけませんか?
#include<stdio.h>
void main()
{
int a,b,total,average;
printf("a=%d\n",a);
scanf("%d",&a);
printf("b=%d\n",b);
scanf("%d",&b);
total = a+b,average = a+b/2;
printf("total=%d\n",a+b);
printf("average=%d\n",(a+b)/2);
}
0676デフォルトの名無しさん
2006/02/02(木) 13:21:00scanf("%d",&a);
printf("%d\n",a);
printf("b=");
scanf("%d",&b);
printf("%d\n",b);
こんなんじゃだめか。だめだろうな
二つ目はスレ違いだから該当スレを探して聞いてくれ
0677デフォルトの名無しさん
2006/02/02(木) 13:22:27void main()
{
int a=0;
int b=0;
int total=0;
int average=0;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
total = a+b,average = a+b/2;
printf("total=%d\n",a+b);
printf("average=%d\n",(a+b)/2);
}
変数の初期化はしといたほうがいいと思うよ。
0678えび
2006/02/02(木) 13:26:37[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows
[3.2] Visual Studio.net 2002
[3.3] C++ で
[4] 期限: ([2006年2月7日
[5] その他の制限: 基本的にC++の知識が全く無い状態での課題なのですが…
まず、縦1000文字 横19列の数字列の入ったファイルEEG.txtを読み込み、
波形を表示するというものなのですがまったくもって分かりません><
ファイルの中の数字は-999〜999の間となっており数字と数字の間はスペースが入っています…(例:-154 254 567 2 6 )
これを配列に読み込んで表示を行うというプログラムを考えてもらえないでしょうか。
よろしくお願いします。
0679デフォルトの名無しさん
2006/02/02(木) 13:54:25無駄すぎる初期化はいらねえよ
0680デフォルトの名無しさん
2006/02/02(木) 14:06:48エラーの元
0681675
2006/02/02(木) 14:09:22ありがとうございます。初期化したので妙な数値は出てこなくなってデフォルトでa=0 b=0と出てくるようになりました。
けど僕がしたいのはa= b=のみをまず初めに表示させて、その後に数値を入力するようにしたいんです。
例えば
a=10
b=20
合計30
平均15
というようにしたいのです。
初期化して実行してみると
a=0
10
b=0
20
合計30
平均15
となってしまいます・・・
後、totalとaverageの記述が無意味になってたので少し書き換えてみました
0682デフォルトの名無しさん
2006/02/02(木) 14:09:230683675
2006/02/02(木) 14:09:41void main()
{
int a=0,b=0,total,average;
printf("aの数値を指定してください%d\n",a);
scanf("%d",&a);
printf("bの数値を指定してください%d\n",b);
scanf("%d",&b);
total = a+b,average = (a+b)/2;
printf("合計=%d\n",total);
printf("平均=%d\n",average);
}
0684デフォルトの名無しさん
2006/02/02(木) 14:22:15[2] 問題文:
30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
( 例 )
150..155 6 :******
155..160 13 :*************
160..165 11 :***********
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2006年2月8日まで
どうぞお手柔らかにお願いします
0685Kenji ◆3yMYCQiOMU
2006/02/02(木) 14:24:30[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://www.tatunet.ddo.jp/koneko70/uponesan/img/683.pdf
[3] 環境
[3.1] OS: FreeBSD
[3.2] コンパイラ名とバージョン: gcc-2.95.3
[3.3] 言語: C
[4] 期限: [2006年02月10日00:00まで]
[5] その他の制限: ほぼ習っているので特にありません。
0686デフォルトの名無しさん
2006/02/02(木) 14:39:39根拠の無い適当な値で初期化するのは強く反対だなぁ
とりあえず0で初期化とかその値に根拠があるのか? ふざけてるのか? と思ってしまう。
0687デフォルトの名無しさん
2006/02/02(木) 14:43:15データはどうやって読み込み方は?
プログラム中で身長が書かれたファイルを読み込むの?それともリダイレクションでいいの?
0688687
2006/02/02(木) 14:44:070689684
2006/02/02(木) 14:46:27で、データを自分で入力して読み込むと思います。
0690デフォルトの名無しさん
2006/02/02(木) 14:55:27禿同 とりあえず 0 とかやってると、いつか 1 で初期化しないといけないところで間違えるよ
0691Kenji ◆3yMYCQiOMU
2006/02/02(木) 15:03:01[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): この中にPDFが二つあります。http://www.ebiman.com/cgi-bin/cboard/filexs/Machi.lzh
[3] 環境
[3.1] OS: FreeBSD
[3.2] コンパイラ名とバージョン: gcc-2.95.3
[3.3] 言語: C
[4] 期限: [2006年02月10日00:00まで]
[5] その他の制限: ほぼ習っているので特にありません。
0692デフォルトの名無しさん
2006/02/02(木) 15:14:44自分でやれよ、カス!
0693デフォルトの名無しさん
2006/02/02(木) 15:18:04岡山大学 工学部通信ネットワーク工学科2年 乙
0694デフォルトの名無しさん
2006/02/02(木) 15:22:36だったら自分でやれと言いたい
あと不正コピーは削除しとけよ
0695デフォルトの名無しさん
2006/02/02(木) 15:27:59見るのやめようっと
0696デフォルトの名無しさん
2006/02/02(木) 15:29:19>>619 待ち行列はググればソース付きのレポートがある。ハフマン法はソースがある。
0697デフォルトの名無しさん
2006/02/02(木) 15:30:45色んな数値を入れてみたのですが、elseの場合の文章が表示されません・・・
何故でしょうか?
#include<stdio.h>
void main()
{
int ten;
printf("テストは何点でしたか?(0から100まで)\n");
scanf("%d",ten);
if("ten >=99 && ten <= 100")
{
printf("よく頑張った!感動した!\n");
}
else
{
printf("もっと勉強して下さい!\n");
}
}
0698デフォルトの名無しさん
2006/02/02(木) 15:33:39工エエェェ(´д`)ェェエエ工工
scanf("%d",ten);
( ゚Д゚)......
if("ten >=99 && ten <= 100")
......(゚Д゚)!!
0699デフォルトの名無しさん
2006/02/02(木) 15:33:45ifの中身が常に真だから
つか何で""で囲んでるんだお前
0700697
2006/02/02(木) 15:35:27scanfのとこで&追加。そして99のとこでスペース追加
けどまだ無理ですorz
0701デフォルトの名無しさん
2006/02/02(木) 15:35:44てかscanfの使い方もおかしいなw
0702デフォルトの名無しさん
2006/02/02(木) 15:36:32だからなんでifの中身文字列にしてんだっつーの
0703デフォルトの名無しさん
2006/02/02(木) 15:36:490704デフォルトの名無しさん
2006/02/02(木) 15:37:460705697
2006/02/02(木) 15:38:21ありがとうございます!
""つけてしまいました。これはずしたらいけました。
>>698
void main()って何か変ですか?
0706デフォルトの名無しさん
2006/02/02(木) 15:39:19別に構わないけど一応mainの戻り値はintと決められてる
0708デフォルトの名無しさん
2006/02/02(木) 15:44:00int main(void) {/*...*/}
int main(int argc, char *argv[]) {/* .... */}
の2つだけなんで、他の書き方してたら、「やばいかなぁ?」という印象をもつ。
main() {/* ... */}
void main() {/* ... */}
int main() {/* ... */}
int main(int ac, char **av) {/* ... */}
最後のは規格と同じ意味だけど、わざわざ表現変えてるから我の強いプログラムだろうなって。
0709デフォルトの名無しさん
2006/02/02(木) 15:45:30ヽ/⌒ヘ~
., 't,_,ノ丶 , - ─- △ 、
/ ! '` 巛(リノ))ヽ\ヽ▽ ヽ えへへへへ
,/ ● L_/ 'i, i えへ
/ ″ l ,/ ● i川 えへへへへ
ノ从 し ii ″ 丿从 〜 △v��
|`:、\ ii __,/__ノi �厦
'i、 ̄~)) ij((____,ノ
^- i' ' ヽ| `i ∧∧∧
i_____ 'l_|、 ( )
ノ ,ゝ ~ T ~
~^''!, ̄ T T ̄ ,!_ <ヽ | //
\ l, ~''‐--::,,⊃ ) ) \| ノ
0710デフォルトの名無しさん
2006/02/02(木) 15:45:481個の引数あってもいいじゃない
0711デフォルトの名無しさん
2006/02/02(木) 15:46:480712デフォルトの名無しさん
2006/02/02(木) 15:47:01ifの条件は99点以上ってだけでもいいような希ガス
0713デフォルトの名無しさん
2006/02/02(木) 15:48:13いくらでもあったところで使い道思いつかないんだけど
つかargcの方って何が入るの?
使った記憶がないんだけど
0714デフォルトの名無しさん
2006/02/02(木) 15:51:11岡山大学って難しいことやってるんだな…
同じ2年&&同じ旧国立大学なのに、やってることがこんなに違うとは
なんか自分は将来社会の役に立つことができるのかどうか不安になってきてしまった…
0715デフォルトの名無しさん
2006/02/02(木) 15:52:55>>713
argc には引数の数+1の数か代入されてますYO!
0716デフォルトの名無しさん
2006/02/02(木) 15:55:52使い道わからんYO
使わないと警告でるけど別に問題ないよNE?
0717デフォルトの名無しさん
2006/02/02(木) 15:56:400718デフォルトの名無しさん
2006/02/02(木) 15:57:44別にargvを解析しないプログラム(またはargv[argc]==NULLを利用する)なら
使わなくても良いよ。
0719デフォルトの名無しさん
2006/02/02(木) 15:58:03#include <stdio.h>
int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d] '%s'\n", i, argv[i]); return 0;}
0720デフォルトの名無しさん
2006/02/02(木) 16:01:13#include <stdio.h>
int main(int argc, char *argv[]) { int i; for (i = 0;argv[i]; i++) printf("argv[%d] '%s'\n", i, argv[i]); return 0;}
0721デフォルトの名無しさん
2006/02/02(木) 16:08:09#include<iostream>
#include<numeric>
int main(int argc, char *argv[]) { std::cout << accumulate(argv,argv+argc,std::string());}
0722デフォルトの名無しさん
2006/02/02(木) 16:38:080723デフォルトの名無しさん
2006/02/02(木) 17:15:43[2] 問題文(含コード&リンク):次のJava文をC言語(#include<stdio.h>から始まるプログラムに)書き直してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1598.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2月3日8時まででお願いします。
[5] その他の制限: なし
0724デフォルトの名無しさん
2006/02/02(木) 17:18:290725デフォルトの名無しさん
2006/02/02(木) 17:46:16ワラタ
0726デフォルトの名無しさん
2006/02/02(木) 18:37:14ttp://linux.maruhn.com/sec/harissa.html
ttp://www.cs.arizona.edu/sumatra/toba/
0727デフォルトの名無しさん
2006/02/02(木) 19:01:52[2] 問題文(含コード&リンク):ナップサック問題
荷物の個数がn=5、それぞれの荷物の重さがw1=10、w2=5、w3=15、w4=7、w5=3、
ナップサックの限界容量がW=22である場合、ちょうど荷物の合計がW=22と
等しくなる荷物の組合せは何通りあるかを出力するプログラムをかけ。
このとき、枝がりを必ず行う事。更に、W=22となる荷物の組合せの
内訳も表示するようにせよ。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限: 明日までです。(3日)
[5] その他の制限: とくにありませんが、再帰関数をつかってもらいたいです。
挑戦していたのですが、関数内でどこにreturnするのか
混乱してしまいました。どうぞよろしくお願いします。
0728デフォルトの名無しさん
2006/02/02(木) 19:11:00#include <stdio.h>
int f(int n) {if (n) return f(n-1); return 0;}
int main(void) {f(10);printf("2通り。(w1, w2, w4)\n(w3, w4)\n");retrun 0;}
0729デフォルトの名無しさん
2006/02/02(木) 19:15:46#include<stdio.h>
void search(const int w[],int i,int length,int use,int W){
if(W == 0){
for(i=0;i<length;++i)
if(use>>i&1)printf("%d ",w[i]);
printf("\n");
return;
}else if(W < 0 || i==length)return;
search(w,i+1,length,use,W);
search(w,i+1,length,use|1<<i,W-w[i]);
}
int main(){
const int w[]={10,5,15,7,3};
search(w,0,5,0,22);
}
0730729
2006/02/02(木) 19:23:34#include<stdio.h>
int search(const int w[],int i,int length,int use[],int W,int c){
if(W == 0){
for(i=0;i<length;++i)
if(use[i])printf("%d ",w[i]);
printf("\n");
return c+1;
}else if(W < 0 || i==length)return c;
use[i]=1;
c = search(w,i+1,length,use,W-w[i],c);
use[i]=0;
return search(w,i+1,length,use,W,c);
}
int main(){
const int w[]={10,5,15,7,3};
int use[sizeof(w)/sizeof(w[0])]={0};
printf("組み合わせは%d通り\n",search(w,0,5,use,22,0));
}
0731デフォルトの名無しさん
2006/02/02(木) 19:50:47[2] 問題文:
30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
( 実行例 )
150..155 6 :******
155..160 13 :*************
160..165 11 :***********
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2006年2月8日まで
どうぞお手柔らかにお願いします
0732デフォルトの名無しさん
2006/02/02(木) 19:56:01まだ六時間も経ってないだろ。期限まで時間はあるんだからのんびり待て。
0733デフォルトの名無しさん
2006/02/02(木) 19:57:270734デフォルトの名無しさん
2006/02/02(木) 20:06:100735デフォルトの名無しさん
2006/02/02(木) 20:10:290736デフォルトの名無しさん
2006/02/02(木) 20:13:39クズの鏡だなwww
0737デフォルトの名無しさん
2006/02/02(木) 20:16:40#include<stdio.h>
#define a_array_length 30
int main(){
int temporarily_variable_for_comparison,a[a_array_length],maximum_value,minimum_value,a_array_loop_index,score_loop_index,score;
scanf("%d",&temporarily_variable_for_comparison);
maximum_value = minimum_value = a[0] = temporarily_variable_for_comparison / 5;
for(a_array_loop_index = 1;a_array_loop_index < a_array_length ; ++a_array_loop_index){
scanf("%d",&temporarily_variable_for_comparison);
temporarily_variable_for_comparison /= 5;
if(temporarily_variable_for_comparison > maximum_value)
maximum_value = temporarily_variable_for_comparison;
else if(temporarily_variable_for_comparison < minimum_value)
minimum_value = temporarily_variable_for_comparison;
a[a_array_loop_index] = temporarily_variable_for_comparison;
}
for(score_loop_index = minimum_value;score_loop_index <= maximum_value;++score_loop_index){
for(score = a_array_loop_index = 0;a_array_loop_index < a_array_length ; ++a_array_loop_index)
if(a[a_array_loop_index]==score_loop_index) ++ score;
if(score == 0)continue;
printf("%d..%d %d :",score_loop_index*5,score_loop_index*5+5,score);
for(;score != 0;--score)
printf("*");
printf("\n");
}
}
0738デフォルトの名無しさん
2006/02/02(木) 20:24:24何?そのうざいコードw
0739デフォルトの名無しさん
2006/02/02(木) 20:25:380740デフォルトの名無しさん
2006/02/02(木) 20:48:53[2] 問題文(含コード&リンク):
ライフゲームのプログラムをつくりなさい
ライフゲームは、菌などの増殖のシュミレーションに用いられるもので、縦横にしきられた空間(セル)
に生命が発生するか、消滅するかを一定のルールに従い判定し、変化させていくものである。
ルールは、ある時刻において空いている場所に隣接する3つのセルに生物が存在したら、そのセルにも
生物を発生させる。逆に生物が存在したセルでは生物は、生物が存在するセルと1以下および4以上隣接する場合、そのセルでは生物は消滅させる。
これを時間の経過と共に次々と繰り返す。
生物が存在するセルの初期位置をいろいろ工夫して、できるだけ変化が長く続くものにしなさい。
[3] 環境
[3.1] OS Windows
[3.2] lcc win
[3.3] 言語: C
[4] 期限: 今週中
よろしくおねがいします。
0741デフォルトの名無しさん
2006/02/02(木) 20:49:06ちょwwwwwおまwwwwwwww
0742デフォルトの名無しさん
2006/02/02(木) 20:57:50初期配置はこれがお勧め。
■■
□■■
□■
0743デフォルトの名無しさん
2006/02/02(木) 20:58:08むしゃくしゃして書いた。
今は満足している。
0744Kenji ◆3yMYCQiOMU
2006/02/02(木) 21:02:04http://www.cypress.ne.jp/yasuke/OFDM.txt
できれば>>691やってくれないっすかね。難しくて・・・orz
0745デフォルトの名無しさん
2006/02/02(木) 21:04:240746デフォルトの名無しさん
2006/02/02(木) 21:10:11面倒なだけで、自分でできると思うぞ。要求されているのは
静的ハフマンらしいが、出てくる回数数えて、木を繋ぎかえるだけだし。
待ち行列は手順が書いてあるから、それをモンテカルロみたいに
やれってことなんじゃ?
ついでに書くと、単純なフーリエ変換はFT。FFTは高速だから
ちょっとアルゴリズムに工夫がある。
0747デフォルトの名無しさん
2006/02/02(木) 21:18:270748デフォルトの名無しさん
2006/02/02(木) 21:24:20あるね.http://cise.edu.mie-u.ac.jp/~okumura/algo/archive/ 参照.
0749デフォルトの名無しさん
2006/02/02(木) 21:41:31やってみたんだが何か変だ
もしかして隣接ってななめ含む?
0750デフォルトの名無しさん
2006/02/02(木) 21:42:40普通のライフゲームでは含む。
0751デフォルトの名無しさん
2006/02/02(木) 21:47:07マジか
0752デフォルトの名無しさん
2006/02/02(木) 22:01:19初期配置適当
もしかしてコンソールまずかった?
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 10
void show(int ban[MAX][MAX]){
int i,k;
char str[2][3]={"□","■"};
for(i=0;i<MAX;i++){
for(k=0;k<MAX;k++)
printf("%s",str[ban[i][k]]);
puts("");
}
}
0753デフォルトの名無しさん
2006/02/02(木) 22:01:50int mona[MAX+2][MAX+2],i,k,a,b,cnt;
for(i=0;i<MAX+2;i++)
for(k=0;k<MAX+2;k++)
mona[i][k] = -1;
for(i=1;i<MAX+1;i++)
for(k=1;k<MAX+1;k++)
mona[i][k] = ban[i-1][k-1];
for(i=1;i<MAX+1;i++)
for(k=1;k<MAX+1;k++){
cnt = 0;
for(a=-1;a<2;a++)
for(b=-1;b<2;b++)
if(mona[i+a][k+b]==1&&(a!=0||b!=0))++cnt;
if(mona[i][k]==0&&cnt>=3)
ban[i-1][k-1] = 1;
else if(mona[i][k]==1&&(cnt<=1||cnt>=4))
ban[i-1][k-1] = 0;
}
}
int main(void){
int ban[MAX][MAX]={{0}};
ban[3][3] = 1;ban[4][3] = 1;
ban[4][4] = 1;ban[4][5] = 1;ban[3][2] = 1;
while(kbhit()==0){
show(ban);
live(ban);
Sleep(200);
system("CLS");
}
return 0;
}
0754デフォルトの名無しさん
2006/02/02(木) 22:29:11誕生の条件はcnt >= 3じゃなくてcnt == 3
void live(int ban[MAX][MAX]){
int mona[MAX+2][MAX+2]={{0}},i,k,a,b,cnt;
for(i=0;i<MAX;i++)
for(k=0;k<MAX;k++)
mona[i+1][k+1] = ban[i][k];
for(i=1;i<MAX+1;i++)
for(k=1;k<MAX+1;k++){
cnt = 0;
for(a=-1;a<2;a++)
for(b=-1;b<2;b++)
cnt += mona[i+a][k+b];
ban[i-1][k-1] = cnt==3 || mona[i][k] && cnt==4;
}
}
0755デフォルトの名無しさん
2006/02/02(木) 22:41:48あらま間違えた
ban[i-1][k-1] = cnt==3 || mona[i][k] && cnt==4;
こうゆう文初めて見たんですけどこれってどんな意味ですか?
0756デフォルトの名無しさん
2006/02/02(木) 22:46:51単純に書くとこんな感じ。
条件式は真なら1、偽なら0なのを利用。
誕生とか死亡とかは無視して、次にそこにセルが存在するかしないかだけを考えて書いた。
if(cnt==3 || (mona[i][k] && cnt==4 ))
ban[i-1][k-1] = 1;
else
ban[i-1][k-1] = 0;
0757デフォルトの名無しさん
2006/02/02(木) 22:50:25「cntが3に等しい或いは『mona[i][k]が0でなくcntが4に等しい』」ならば1、そうでなければ0をban[i-1][k-1]に代入。
0758756
2006/02/02(木) 22:54:20適当に式を展開して単純な形に変形してたりする
(mona[i][k]==0 && cnt==3) || (mona[i][k]==1 && (cnt==3||cnt==4) );
0759デフォルトの名無しさん
2006/02/02(木) 22:56:22式の意味がわかったけど何でそれでうまく行くのか理解するのに時間かかったw
なるほど偽は0だと知ってたけど真も決まった値なんですね
0760デフォルトの名無しさん
2006/02/02(木) 23:02:11[2] 問題文:
正の整数 1〜3999 のいずれかを入力して、ローマ数字による表記で出力するプログラムを作成せよ。
ただし、 I(1) V(5) X(10) L(50) C (100) D(500) M(1000) を使って表すものとする。
( 例 )
45...XLV
3999...MMMCMXCIX
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2006年2月6日まで
何とぞおてやわからにお願いします(3999まで表示できなくてもよいので・・・)
0761デフォルトの名無しさん
2006/02/02(木) 23:05:12A>B 、A==B、 !A、 A&&B 、A||B
などの論理式では真が1で偽が0,
他の演算の場合は違うからその点だけ注意な
0762デフォルトの名無しさん
2006/02/02(木) 23:09:11了解です
0763デフォルトの名無しさん
2006/02/02(木) 23:16:46#include <stdio.h>
void roman_number(int *dec_n, int n, char c) {
while(*dec_n >= n) {
*dec_n -= n;
printf("%c", c);
}
}
int main(int argc, char *argv[])
{
int num;
printf("Input Number(1-3999)?");
scanf("%d", &num);
if(num < 1 || num > 3999) {
printf("Error!\n");
exit(1);
}
roman_number(&num, 1000, 'M');
roman_number(&num, 500, 'D');
roman_number(&num, 100, 'C');
roman_number(&num, 50, 'L');
roman_number(&num, 10, 'X');
roman_number(&num, 5, 'V');
roman_number(&num, 1, 'I');
printf("\n");
return 0;
}
0764デフォルトの名無しさん
2006/02/02(木) 23:20:48例の45が正しく動いてないが
ついでにそのmainの引数は何者だ
0765デフォルトの名無しさん
2006/02/02(木) 23:22:16しまった、よく見たらやっぱりIVやIX表現がいるんじゃないか。
やり直しだ。
0767デフォルトの名無しさん
2006/02/02(木) 23:23:17良い子も悪い子も真似しちゃ駄目w
#include<stdio.h>
void printR_(int n,char*a,char*b){
if(!n)return;
printR_(n/10,a+1,b+1);
switch(n%10){
case 0:break;
case 3:putchar(*a);
case 2:putchar(*a);
case 1:putchar(*a);break;
case 4:putchar(*a);
case 5:putchar(*b);break;
case 6:putchar(*b);putchar(*a);break;
case 7:putchar(*b);putchar(*a);putchar(*a);break;
case 8:putchar(*b);putchar(*a);putchar(*a);putchar(*a);break;
case 9:putchar(*a);putchar(a[1]);break;
}
}
void printR(int n){printR_(n,"IXCM","VLD");}
int main(void){
int i;
for(i=1;i<4000;++i){
printf("%4d: ",i);
printR(i);
printf("\n");
}
return 0;
}
0769767
2006/02/02(木) 23:29:01( ´゚д゚`)えーーー
main関数をこれに置き換えてちょ。
int main(void){
int n;
printf("Input number: ");scanf("%d",&n);
printR(n);printf("\n");
}
0770デフォルトの名無しさん
2006/02/02(木) 23:30:19え?なんでまねしちゃダメなん?
0771デフォルトの名無しさん
2006/02/02(木) 23:31:46ってwwwちょwwwwおまwwwwどんなswichの使い方やねんwwwwww
0773デフォルトの名無しさん
2006/02/02(木) 23:33:250774デフォルトの名無しさん
2006/02/02(木) 23:34:16待て待てwwwそれ出したら教授にぶっ飛ばされるぞwwwwww
0775デフォルトの名無しさん
2006/02/02(木) 23:34:51お前らがswitchやらforやらwhileなぞ使う所為で先に答え書かれてしまうわ
0776デフォルトの名無しさん
2006/02/02(木) 23:36:22お前マジ頭いいな
俺もこれから見習うわ
0778デフォルトの名無しさん
2006/02/02(木) 23:38:49まだまだ余裕だ〜ね
0780デフォルトの名無しさん
2006/02/02(木) 23:40:470781767
2006/02/02(木) 23:41:25上のswitch版をこれに置き換えればたぶん大丈夫。
void printR_(int n,char*a,char*b){
if(n == 0)return;
printR_(n/10,a+1,b+1);
n %= 10;
if(n > 4){
if(n==9)b = a + 1;
else putchar(*b);
n -= 5;
}
if(n==4){
putchar(*a);
putchar(*b);
}else{
while(n-- != 0)putchar(*a);
}
}
0782デフォルトの名無しさん
2006/02/02(木) 23:42:230783デフォルトの名無しさん
2006/02/02(木) 23:42:49ライフゲーム組むのに2時間半かかったorz バグありっぽいし。
0784デフォルトの名無しさん
2006/02/02(木) 23:43:5045の場合 X(10)L(50)V(5) ???
まぁローマ英数字さえも良くワカランのだけど
0785デフォルトの名無しさん
2006/02/02(木) 23:45:14乙
0786デフォルトの名無しさん
2006/02/02(木) 23:45:28GUI?うp汁
0787デフォルトの名無しさん
2006/02/02(木) 23:46:14ホントすごいですね!!
すぐに違った感じの答えも分かるなんて・・・本当にありがとうございます!
>>784
X(10) XX(20) XXX(30) XL(40) って感じに考えていただければいいと思います。
0788デフォルトの名無しさん
2006/02/02(木) 23:46:180789デフォルトの名無しさん
2006/02/02(木) 23:47:49今wiki見てきたけどXLってL-Xって意味なのね
0790デフォルトの名無しさん
2006/02/02(木) 23:48:37お前、それだと2なら1を横に2個並べればいいんだろって考え方だぞwww
0791デフォルトの名無しさん
2006/02/02(木) 23:53:24普通そんなことやったら殴られる。
0792デフォルトの名無しさん
2006/02/02(木) 23:57:030793デフォルトの名無しさん
2006/02/02(木) 23:57:060.表示なし
1.a
2.aa
3.aaa
4.ab
5.b
6.ba
7.baa
8.baaa
9.ac
ってことだろ。
0794デフォルトの名無しさん
2006/02/02(木) 23:57:34お前はプロシージャを否定した
0795デフォルトの名無しさん
2006/02/02(木) 23:58:21#include <stdio.h>
#define RO(i,v,x) "",#i,#i#i,#i#i#i,#i#v,#v,#v#i,#v#i#i,#v#i#i#i,#i#x
const char * conv[][10] = {{RO(I,V,X)},{RO(X,L,C)},{RO(C,D,M)},{RO(M,M,M)}};
void internal_print(int val, int dim)
{ if (val > 0) internal_print(val / 10, dim + 1),printf(conv[dim][val % 10]); }
void print(int val) { internal_print(val, 0), puts(""); }
int main(void) { int i; while (scanf("%d", &i) == 1) print(i); return 0; }
>>776の方がうまいな
0796デフォルトの名無しさん
2006/02/03(金) 00:00:44ダウンロードしてがっかりしてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1599.zip
0797デフォルトの名無しさん
2006/02/03(金) 00:02:01しかし見てて楽しい
0798デフォルトの名無しさん
2006/02/03(金) 00:03:40どうもありです。
すんごいスマートなできあがりですねぇ!
0799デフォルトの名無しさん
2006/02/03(金) 00:05:06[2] 問題文:
30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
( 例 )
150..155 6 :******
155..160 13 :*************
160..165 11 :***********
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2006年2月4日まで
ヒントだけでもいいのでお願いしますです
0800デフォルトの名無しさん
2006/02/03(金) 00:06:20(,,゚Д゚)∩先生くそ重いです
0801デフォルトの名無しさん
2006/02/03(金) 00:06:360802デフォルトの名無しさん
2006/02/03(金) 00:08:14別に3人や5人でもいいのでお願いします・・・
0803デフォルトの名無しさん
2006/02/03(金) 00:09:050804デフォルトの名無しさん
2006/02/03(金) 00:10:18身長のデータはどうやったら得るのよ
プログラムの最初に30人分乃至適当な人数の身長データを入力させるのか
それとも特定ファイルから身長の値を読み込むのか。
もし後者ならそのファイルをうpするか、どの様に値がファイルに記録されてるのか教えろって
0805デフォルトの名無しさん
2006/02/03(金) 00:10:59それって0センチ〜3メートルとかまで対応しなきゃダメ〜?
0806デフォルトの名無しさん
2006/02/03(金) 00:11:52適当に自分で入力します
0807デフォルトの名無しさん
2006/02/03(金) 00:12:54いや〜、そこまではしなくてもいいと思います
0808デフォルトの名無しさん
2006/02/03(金) 00:13:18int main(void) {
printf("150..155 6 :****** \n");
printf("155..160 13 :************* \n");
printf("160..165 11 :*********** \n");
return 0;
}
実行は./a.out <datafile
データファイルには30人分のデータを入れておくこと。
>800 うん。重い。正直、イカンと思う。気が向いたら、高速化してみる。
(メモリコピーじゃなくて、描画がネックっぽい)
0809デフォルトの名無しさん
2006/02/03(金) 00:13:310810デフォルトの名無しさん
2006/02/03(金) 00:15:08>>737じゃ駄目なん?
0811デフォルトの名無しさん
2006/02/03(金) 00:16:25何が聞きたいのか分からないんですが・・・
身長を入力するのは、 fgets(), sscanf(); などを使って
自分で適当に入力できるようにすればいいだけなんですけど・・・
0812デフォルトの名無しさん
2006/02/03(金) 00:19:49int main(void)
{
int number[60] = {0}, i;
while(!eof(stdin)){int height; scanf("%d", &height); number[(height-1)/5]++; }
for(i=0;i<60;i++){if(number){printf("%d...%d%3d",i*5,i*5+5,number[i]);
for(;number[i];number[i]--)putchar('*');puts("");}}
return 0;
}
0813デフォルトの名無しさん
2006/02/03(金) 00:20:28「適当」の意味がわからん。たとえば
160cm
1.8m
150inch
7744寸
…
みたいな入力されたら困る。
0814デフォルトの名無しさん
2006/02/03(金) 00:22:16はいww
#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<5;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
printf("%d..%d ",i*5,i*5+5);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
return 0;
}
0815814
2006/02/03(金) 00:23:040816812
2006/02/03(金) 00:24:030817デフォルトの名無しさん
2006/02/03(金) 00:26:35身長は整数値でもいいと思いますが、while()内の eof って何ですか?・・
0818デフォルトの名無しさん
2006/02/03(金) 00:27:49どっちもネタっぽいけどwww
0819デフォルトの名無しさん
2006/02/03(金) 00:29:340820デフォルトの名無しさん
2006/02/03(金) 00:33:26#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<30;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
printf("%d..%d %d ",i*5,i*5+5,flag[i]);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
return 0;
}
0821デフォルトの名無しさん
2006/02/03(金) 00:33:320822デフォルトの名無しさん
2006/02/03(金) 00:35:260823デフォルトの名無しさん
2006/02/03(金) 00:35:470824デフォルトの名無しさん
2006/02/03(金) 00:36:13バカはさっさと消えろ!
0825デフォルトの名無しさん
2006/02/03(金) 00:38:26うむそこは重要なところだな
0827デフォルトの名無しさん
2006/02/03(金) 00:50:00う〜ん、そこを変えても無理みたいです・・・
0828デフォルトの名無しさん
2006/02/03(金) 00:51:05>>820使えばいいじゃん
やってることはほとんど同じだぞ
0829デフォルトの名無しさん
2006/02/03(金) 00:55:25すみません、アンカーが違う人だったので別のプログラムだと思ってました・・・
どうもありです。でも、出力は全部じゃなくて入力した値付近のだけをしてほしいんですが・・・
(0のところは出力しない感じで・・・)
0830デフォルトの名無しさん
2006/02/03(金) 00:56:58とりあえず
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1600.txt
もしビット各桁ごとに順番に加算しろという課題だとこれだとダメ。
あと1の補数の桁あふれの処理の仕方にちょっと自信ないです。
0831デフォルトの名無しさん
2006/02/03(金) 00:57:58ちぇ・・・それじゃ面白くないのにw
#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<30;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
if(flag[i]!=0){
printf("%d..%d %d ",i*5,i*5+5,flag[i]);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
}
return 0;
}
0832673
2006/02/03(金) 01:04:04本当にどうも有難うございます。
説明不足などすみませんでした。
0833デフォルトの名無しさん
2006/02/03(金) 01:04:580834デフォルトの名無しさん
2006/02/03(金) 01:22:00[2] 問題文(含コード&リンク):
半径1の球を中心座標(x,y,z)=(0,0,5)半径2の球を中心座標(x,y,z)=(2,0,8)、
大きさ2*2のスクリーンを(0,0,0)、視点を(0,0,-1)に配置し、光源ベクトル(0,-1,0)としたとき、スクリーンに投影される球の輝度地分布図を求めよ。
ただし、表面反射特性はランバートモデルを用いること。
ランバートモデル(完全拡散反射)とは、以下。
c=αn(x)・l
c:輝度値
n:物体の表面法線ベクトル
x:スクリーン上に投影される点に対応する物体の表面座標
l:光源ベクトル
α:物体の表面特性による係数
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: なんでも
[3.3] 言語: C
[4] 期限: 明日です!!!
[5] その他の制限: 特になし
全然わかりません!明日までで途中でもいいので、皆様の能力をおかりしたいです。
よろしくお願いします。
0835デフォルトの名無しさん
2006/02/03(金) 01:24:32どうゆう出力をしたいのか
それを計算するにはどのような計算手順を踏めばいいのか教えれ
0836デフォルトの名無しさん
2006/02/03(金) 01:27:060837デフォルトの名無しさん
2006/02/03(金) 01:29:29一応参考になるかなっていうサイトは見つけました。
ttp://nis-lab.is.s.u-tokyo.ac.jp/~nis/junk/lecture/Enshu302_1.html
0838デフォルトの名無しさん
2006/02/03(金) 01:31:49gccでapiだけでつくったっぽいね。
このサイズってことは、libc使っていないかな。なかなか技師と見たw
0839デフォルトの名無しさん
2006/02/03(金) 01:38:09>>1にも書いてあるけど数式書かないと俺らわからんよ?
0840デフォルトの名無しさん
2006/02/03(金) 01:38:56要するにレイトレだね。
ttp://www.not-enough.org/abe/manual/ray-project/c.html
とか参考になると思う。
Winならウィンドウ出してSetPixelでも使えばヨシ。
漏れは卒研でいそ(ry
0841デフォルトの名無しさん
2006/02/03(金) 01:40:39無料でやるのはコンソールが限度
0842834
2006/02/03(金) 01:51:39ほかにもやることがあって、もし暇な方がいたら少しだけでもやってみてくれないでしょうか?
ほんとすいません。
0843デフォルトの名無しさん
2006/02/03(金) 01:53:34APIスレ池
アルゴリズムほしければ数学板池
無理だったらお前の頭が悪い
0844834
2006/02/03(金) 02:00:50すいませんでした。
0845デフォルトの名無しさん
2006/02/03(金) 02:02:25基本的にCで作れるのはコンソールだからコンソールだけ
0846デフォルトの名無しさん
2006/02/03(金) 02:10:090847デフォルトの名無しさん
2006/02/03(金) 02:31:07どうもありです!
ソレを求めてました!w
0848デフォルトの名無しさん
2006/02/03(金) 02:34:00[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1601.txt
FFTのプログラムなのですが誰か詳細なコメントを付けてくれる方いませんか。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] 言語: C
[4] 期限: 2006年2月3日23:59まで
[5] その他の制限: 特に無し。
0849デフォルトの名無しさん
2006/02/03(金) 02:35:58こっちは数値計算はちょっと・・・
0850デフォルトの名無しさん
2006/02/03(金) 02:52:050851デフォルトの名無しさん
2006/02/03(金) 02:52:52確か"numerical recipe"とかに書いてあったんじゃないかな。
(英語でよければ、オンラインで読めたはず)
最終的な式だけ書いてあるから、本を読んだ方が早いよ。
2の倍数の時は、組み合わせで計算の数が減らせるって話だったと
思うけど、詳細は忘れてしまった。
0852デフォルトの名無しさん
2006/02/03(金) 03:01:28ttp://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap7/index.htm
簡単にいうと、FTでは複素で計算するときexp(iwt)みたいなのをかけるけど、
この関数には周期性があって、同じ値をかけるところが出てくる。
それをまとめてしまえば、計算の数が減るって話らしい。
0853848
2006/02/03(金) 03:08:380854848
2006/02/03(金) 03:22:100855834
2006/02/03(金) 03:27:55おそらくできたっぽいです、かなり参考になるサイトですね。
助かりました、これでなんとか単位とれそうです。
ありがとうございましたー。
0856デフォルトの名無しさん
2006/02/03(金) 03:47:16ライフゲーム・・・すまん、やっぱ重い。
0857デフォルトの名無しさん
2006/02/03(金) 04:25:00眠れん・・・
ライフゲーム、試してみたけど面白いね。前よりも数が増えてるw
タイム(?)もついたみたいだけど、平衡状況になったように見えても
終わらないね。これは、そういうものなのかな?
あと起動するとCPU駆動率100%になるので、どっかでsleep入れた方が
いいのかも。最後に・・・スレ違いスマソ
0858デフォルトの名無しさん
2006/02/03(金) 05:21:58[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1603.txt
安定的結婚問題という奴なのですが、穴埋め部分が分かりません。
どなたか教えてください。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: (VC++ 6.0)
[3.3] 言語: C
[4] 期限: 2006年2月3日23:59まで
[5] その他の制限: 特に無し。
0859アゲハ
2006/02/03(金) 10:16:03[2] 問題文(含コード&リンク):indata.datファイルを読み込んで得点順に並び替えよ。
<a href=""http://id18.fm-p.jp/gamen/s_scr.php?dir=26&uid=hanon0220&num=1>http://id18.fm-p.jp/gamen/s_scr.php?dir=26&uid=hanon0220&num=1</a>
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc 2.9 VC 6.0等)
[3.3] 言語:C++
[4] 期限:2006年02月13日21:30まで
[5] その他の制限:基本的なことのみ
0860デフォルトの名無しさん
2006/02/03(金) 12:54:52[2] 問題文(含コード&リンク):�@DNSサーバーの53番ポートにリクエストがあったら
�Aネットワーク内にあるサーバーのログ(負荷状況やCPU使用率など)を集めて
�B一番負荷の軽いサーバーを見つけ出し
�CそのサーバーのIPアドレスを返信する
[3] 環境
[3.1] OS:WindowsXP
[3.2] gcc 2.9 VC 6.0など
[3.3] 言語:C
[4] 期限:2006年2月3日22:00まで
[5] その他の制限:基本的なことのみ
0861デフォルトの名無しさん
2006/02/03(金) 12:55:03[2] 問題文(含コード&リンク):分数を分子、分母をメンバとする構造体で表現する。
標準入力から分母、分子のデータを受取り、分数を通分した結果を表示するプログラムを作成せよ。
通分するには分子と分母の最大公約数を求める必要がある。
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2/4
[5] その他の制限: #include は <stdio.h>のみでお願いします。
0862デフォルトの名無しさん
2006/02/03(金) 13:08:54[2] 問題文(含コード&リンク):
main関数でキーボードから入力された2つの整数を引数として
渡された時、最大公約数を返すプログラム
main()
{
変数の定義とキーボードからの入力
c=gcm(a,b);
結果の表示
}
int gcm(int x,int y)
{
変数の定義と最大公約数の計算
return z;
}
を完成させて、36,90をキーボードから入力した時に最大公約数18が表示されるかどうか
確認しなさい。
(最初はmain関数だけでプログラムを組み、後で最大公約数の計算部分を
関数かすると作りやすい)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: わからないです。
[3.3] 言語: C++
[4] 期限: 2006年2月4日
よろしくお願いします。
0863デフォルトの名無しさん
2006/02/03(金) 13:30:11#include<stdio.h>
struct fraction{
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;
int Gcd(int, int);
main(){
struct fraction t;
int gcd;
printf("分数の分子を入力してください:");
scanf("%d",&t.numerator);
printf("分母を入力してください:");
scanf("%d",&t.denominator);
gcd = Gcd(t.numerator,t.denominator);
if(t.denominator/gcd == 1) printf("通分した結果は%dです\n",t.numerator/gcd);
else printf("通分した結果は%d/%dです\n",t.numerator/gcd,t.denominator/gcd);
}
int Gcd(int n1, int n2){ /*ユークリッドの互除法で最大公約数を求める*/
if (n2 == 0) return n1;
else return Gcd(n2, n1 % n2);
}
0864デフォルトの名無しさん
2006/02/03(金) 13:32:26あと、構造体の後にくっついてるfraction_tは消しておいてください
0865デフォルトの名無しさん
2006/02/03(金) 14:58:46いや意味わからん日本語わかり辛い
0866デフォルトの名無しさん
2006/02/03(金) 21:52:340867デフォルトの名無しさん
2006/02/03(金) 21:55:260868デフォルトの名無しさん
2006/02/03(金) 22:08:18今から2時間でできるかわからんけど、手をつけてみる。
できなかったらごめんね。
0869デフォルトの名無しさん
2006/02/03(金) 22:09:01結構あるんだな
0870デフォルトの名無しさん
2006/02/03(金) 22:21:37いつからだろう・・・・動きが止まってしまったのは・・・
ちょっと目を放した隙にゲーム終了orz
0871デフォルトの名無しさん
2006/02/03(金) 22:56:16http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/algo.lzh
にある、marriage.cが参考にならない?
0872デフォルトの名無しさん
2006/02/03(金) 23:27:190873デフォルトの名無しさん
2006/02/03(金) 23:31:21というよりVBから使えるフリーのFFTライブラリを ('A`)ソースつきで
0874デフォルトの名無しさん
2006/02/03(金) 23:31:560875208
2006/02/03(金) 23:34:53[2] 問題文(含コード&リンク):
アッカーマン関数A(m,n)
{n + 1 (m = 0)
A(m,n) ={A(m - 1,1) (n = 0)
{A(m-1,A(m,n-1)) (m ≠ 0, n ≠ 0)
は原始機能的関数ではない関数としてしられている。アッカーマン関数を定義し、
標準入力から入力された値に対する解を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS: win
[3.2] コンパイラ名とバージョン: ボーランド
[3.3] 言語: C
[4] 期限:2/5
[5] その他の制限: #include は <stdio.h>だけ。
よろしくお願いします。
0877デフォルトの名無しさん
2006/02/03(金) 23:39:030878デフォルトの名無しさん
2006/02/03(金) 23:40:03#include <stdio.h>
int A(int n,int m);
int main(){
int m,n;
scanf("m=:",&m);
scanf("n=:",&n);
printf("%d",A(n,m));
return 0;
}
int A(int n,int m){
if(m=0) return n+1;
if(n=0) return A(m-1,1);
return A(m-1,A(m,n-1));
}
きっとこんな感じ・・・ごめん俺VB厨で、コレ手書きだから動くかSH4 ('A`)
0879デフォルトの名無しさん
2006/02/03(金) 23:41:160880デフォルトの名無しさん
2006/02/03(金) 23:50:55へ(へ´∀`)へ 流石に残り10分じゃ無理な気がするがちょっと頑張ってみる
0881デフォルトの名無しさん
2006/02/03(金) 23:52:27#include<cstdio>
using namespace std;
template<int M, int N> class A {
public: static const int n = A<M-1,A<M,N-1>::n>::n;
};
template<int M> class A<M,0> {
public: static const int n = A<M-1,1>::n;
};
template<int N> class A<0,N> {
public: static const int n = N+1;
};
int main() {
printf( "A(3,5)=%d", A<3,5>::n );
}
0882sage
2006/02/03(金) 23:58:46一番大事なアルゴリズムの部分が理解できました。
考えてくださった皆さん、ありがとうございました!!
0884デフォルトの名無しさん
2006/02/04(土) 00:03:40コンパイルが通ってしまうあたり罠だな。
一番の罠はnとmが入れ替わっていることだが。
なるべく気持ちを尊重して書くとこう:
#include <stdio.h>
int A(int m,int n);
int main(){
int m,n;
printf("m=:"); scanf("%d",&m);
printf("n=:"); scanf("%d",&n);
printf("%d",A(n,m));
return 0;
}
int A(int m,int n){
if(m==0) return n+1;
if(n==0) return A(m-1,1);
return A(m-1,A(m,n-1));
}
0885デフォルトの名無しさん
2006/02/04(土) 00:04:51すまん・・・ちょっとしたミスだ(orz
0886デフォルトの名無しさん
2006/02/04(土) 00:06:10printf("%d",A(m,n));
0887デフォルトの名無しさん
2006/02/04(土) 00:07:410888875
2006/02/04(土) 01:06:350889デフォルトの名無しさん
2006/02/04(土) 01:30:04明日までにA(4,2)を計算して提出するように。
0890デフォルトの名無しさん
2006/02/04(土) 01:46:34今まで計算した値をa[][]の配列に入れるようにし、0じゃなかったら
その値を返すようにすれば、A(4,2)程度ならぎりぎり計算できる。
まともに計算したら、多分一週間たっても終わらないのではないかと。
それか ghc でも使うか。
0891889
2006/02/04(土) 01:53:270892デフォルトの名無しさん
2006/02/04(土) 01:55:230893デフォルトの名無しさん
2006/02/04(土) 01:56:210894デフォルトの名無しさん
2006/02/04(土) 02:20:240895デフォルトの名無しさん
2006/02/04(土) 02:25:50たぶんメモ化を期待してるんだと思われ。
0896デフォルトの名無しさん
2006/02/04(土) 02:32:05そんで>>892のようなVB厨がこの世からいなくなりますように
0897デフォルトの名無しさん
2006/02/04(土) 03:02:07http://www.geocities.co.jp/Technopolis/9946/function.html
A(4,2)って一体何桁になるのやら?
0898sage
2006/02/04(土) 04:17:07[2] 問題文(含コード&リンク):
1.三角形の三辺を読み込みヘロンの公式を用いて面積を求めよ。
http://www.asahi-net.or.jp/~jb2y-bk/NaturalSci/math/heron.htm
2.正六角形の一辺を読み込んで面積を求めよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限: 2006年2月4日18:00
0899デフォルトの名無しさん
2006/02/04(土) 05:04:19Lv1とLv2を解いて欲しいです
お願いします
0900デフォルトの名無しさん
2006/02/04(土) 06:36:36a=91
s= "は、素数です。"
for i = 2 to (a-1)
if aMod i = 0 Then
s="は、素数ではありません。"
Exit For
End If
Next
MsgBox CStr(a) & s
というVBScriptの言語をC言語に置き換えるという問題を誰か、解いてください!
91の素数を求めるんですが。。
0901デフォルトの名無しさん
2006/02/04(土) 06:54:40int main(){
int a=91;
int i;
char *s = "は、素数です。";
for(i=2;i<=(a-1);i++){
if(a%i==0){
s = "は、素数ではありません。" ;
}
}
printf("%d%s\n",a,s);
return 0;
}
0902デフォルトの名無しさん
2006/02/04(土) 08:24:41とりあえずLevel 2だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1604.c
0903デフォルトの名無しさん
2006/02/04(土) 10:12:07[2] 問題文(含コード&リンク):番号と得点を読み込んで、得点が70点以上なら“合格”、70点未満なら
“不合格”と、番号、得点と共に出力するプログラムを作れ。(if文を使用すること)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限:05年2月5日19:00
どうか、よろしくお願いします。
0904デフォルトの名無しさん
2006/02/04(土) 10:20:51読み込みはキーボードからでいいのかい?
0905デフォルトの名無しさん
2006/02/04(土) 10:23:24はい
0906デフォルトの名無しさん
2006/02/04(土) 10:30:37#include <stdio.h>
int main(void)
{
int num,score;
printf("番号:"); scanf("%d",&num);
printf("得点:"); scanf("%d",&score);
printf("\n番号:%d 得点:%d - ",num,score);
if(score>=70)printf("合格\n");
else printf("不合格\n");
return 0;
}
0907デフォルトの名無しさん
2006/02/04(土) 10:31:310909デフォルトの名無しさん
2006/02/04(土) 10:50:05[2] 問題文(含コード&リンク): 例を参考にして2文探索木を横型検索の順で表示せよ
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:BCC55
[3.3] 言語:C
[4] 期限: 2月6日まで
[5] その他の制限: 特になし
例 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1605.txt
0910デフォルトの名無しさん
2006/02/04(土) 10:51:53しらんがな
#include <math.h>
#define NAS (-1)
double sp_Tri(double a,double b,double c){
double S;
if(a<0 || b<0 || c<0) return NAS;
S=(a+b+c)/2;
return sqrt(S*(S-a)*(S-b)*(S-c));
}
double sp_Hex(double h){
if(h<0) return NAS;
return 6*sp_Tri(h,h,h);
}
0911デフォルトの名無しさん
2006/02/04(土) 11:12:22横型検索ってなぬ?
親→子をFIFO順に入れたQueueを対象にして探索しろってこと?
0912デフォルトの名無しさん
2006/02/04(土) 11:21:26幅優先探索のことだろ
0913デフォルトの名無しさん
2006/02/04(土) 11:32:59[2] 問題文(含コード&リンク):
�@ number.dat を入力ファイルとして、date.dat を引数として入力するようにする。
つまり、date02.dat 等の処理はプログラムの修正が不要なようにする。
�A date.dat に入ってるファイルの上から順番に、最初に出てきた番号の人に100点、次に出てきた人には99点の評価を与え、その次の人は98点という具合に評価点が下がるようにする。番号が見出されない人には -1点を付ける。
※複数回同じ番号が出てくるときは、先に出てきたほうを優先する
�B 出力ファイル名は date.out として、引数の dat を out に変更するものとする。
date.out は 40行のファイルとして、1行目は A001 の評価点を2文字の整数 (例えば 35)で、10行目には A025 の評価点を2文字の整数で、40行目には A104の評価点を2文字の整数で出力する。
number.dat & date.dat ---> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1606.zip
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:GCC
[3.3] 言語:C
[4] 期限:2006年02月08日23:59 まで
[5] その他の制限:なるべく簡単なプログラムでお願いします。
0914デフォルトの名無しさん
2006/02/04(土) 11:42:53【1-名-1】 日付、年月日{ねんがっぴ}
【1-名-2】 期日{きじつ}、日取り{ひどり}
【1-名-3】 年代{ねんだい}、時代{じだい}
【1-名-4】 人の生没年{せいぼつねん}、物事{ものごと}の始まりと終わりの年
【1-名-5】 デート
【1-名-6】 〈米話〉デートの相手{あいて}、付き合っている異性{いせい}
いったいどーゆー意味で名づけたんでしょうか?
0915909
2006/02/04(土) 11:45:57幅優先探索です。
2文探索木で深さの浅いところから表示させたいのです。
0916デフォルトの名無しさん
2006/02/04(土) 11:59:40というわけでsearchnodeを改変しますた
紙面の関係上、下手な改行。
typedef _BinNodeQueue{ int cnt; int sz; BinNode* *lst; } BinNodeQueue;
BinNodeQueue* AllocQueue(){BinNodeQueue* r;r=(BinNodeQueue*)malloc(sizeof(BinNodeQueue)); r->cnt=0; r->sz=0; r->lst=NULL; return r;}
void FreeQueue(BinNodeQueue *bq){if(bq->lst!=NULL) free(bq->lst);free(bq);}
void EnQueue(BinNodeQueue *bq,BinNode* b){
bq->sz++;
if(bq->cnt < bq->sz){
int i; BinNode* *dlst;
bq->cnt+=1024;
dlst=(BinNode**)malloc(sizeof(BinNode) * bq->cnt);
for(i=0;bq->sz-1;i++) dlst[i]=bq->lst[i];
if(bq->lst!=NULL) free(bq->lst);
bq->lst=dlst;}
bq->lst[bq->sz-1]=b;
}
BinNode* DeQueue(BinNodeQueue *bq){if(bq->cnt==bq->cnt) return NULL; else return bq->lst[--bq->sz];}
/*--- 氏名による探索 ---*/
BinNode *SearchNode(BinNode *p, Data x){
BinNodeQueue* bq;
int i;
bq=AllocQueue();
//検索開始
EnQueue(bq,p); //便宜上、キューに突っ込んでおく
for(;;){
p=DeQueue(bq); //pを取り出す
if((p=DeQueue(bq))==NULL){ FreeQueue(bq); return NULL;} //キューに何も無い
if(NameCmp(x,p->Data)==0){ FreeQueue(bq); return p; } //p->Dataをチェック
AddQueue(bq,p->left); AddQueue(bq,p->right);} //pの子をキューに入れる
}
0918909
2006/02/04(土) 12:25:54ありがとうございます。参考にさせていただきます。
0919909
2006/02/04(土) 12:27:24ありがとうございます。参考にさせていただきます。
0920デフォルトの名無しさん
2006/02/04(土) 13:15:26[2] 問題文(含コード&リンク):1行に「人口(千人)、製造品出荷額(億円)、県名」のデー タが記入され、
これを中国5県分(5行)提供しているファイル pref_output.txt がある。
このデータを読み込み、以下のように各県の「県名 人口(千人) 製造品出 荷額(億円) 県民一人当たりの製造品出荷額(億円/千人)」を表示した後、
中国地方の人口合計(千人)、総製造品出荷額(億円)、一人当たりの製造品出 荷額(億円/千人)を表示するプログラムを作成しなさい。また、出力結果は以下と同じになるようにすること。
pref_output.txtの中身はpop.out,県名というならびである。
Prefecture Pop. Out. Ave.
---------------------------------------
Tottori 613 10255 16.73
Shimane 762 10034 13.17
Yamaguchi 1528 49505 32.40
Okayama 1951 62860 32.22
Hiroshima 2879 65523 22.76
---------------------------------------
TOTAL 7733 198177 25.63
[3] 環境
[3.1] OS : Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2月4日16時まで
課題を出されたのですがこの一問だけできなくて、すいませんどうかよろしくおねがいします。
0921デフォルトの名無しさん
2006/02/04(土) 13:26:590922920
2006/02/04(土) 13:29:22613 10255 Tottori
762 10034 Shimane
1528 49505 Yamaguchi
1951 62860 Okayama
2879 65523 Hiroshima
です。長くて一度にかきこめなくてすいません。
0923デフォルトの名無しさん
2006/02/04(土) 13:46:55#include<stdio.h>
int main(void){
FILE *fp;
int pop,out,i,pops=0,outs=0;
char str[256],kenmei[256];
fp = fopen("pref_output.txt","r");
while(fgets(str,256,fp)!=NULL){
sscanf(str,"%d%d%s",&pop,&out,kenmei);
pops += pop;
outs += out;
printf("%s %d %d %4.2f\n",kenmei,pop,out,(double)out/pop);
}
printf("%d %d %4.2f\n",pops,outs,(double)outs/pops);
return 0;
}
0924デフォルトの名無しさん
2006/02/04(土) 13:50:10#include<stdio.h>
int main(void){
FILE *fp;
int pop,out,i,pops=0,outs=0;
char str[256],kenmei[256];
fp = fopen("pref_output.txt","r");
puts("Prefecture Pop. Out. Ave.");
for(i=0;i<40;i++)putchar('-');puts("");
while(fgets(str,256,fp)!=NULL){
sscanf(str,"%d%d%s",&pop,&out,kenmei);
pops += pop;
outs += out;
printf("%s %d %d %4.2f\n",kenmei,pop,out,(double)out/pop);
}
for(i=0;i<40;i++)putchar('-');puts("");
printf("TOTAL %d %d %4.2f\n",pops,outs,(double)outs/pops);
return 0;
}
0925デフォルトの名無しさん
2006/02/04(土) 13:54:04なんとかA(4,1)までは計算できるようになったが
A(4,2) = 2^65536 - 3 なんて数、そもそもどうやって格納しときゃいんだて
0926デフォルトの名無しさん
2006/02/04(土) 13:55:140927デフォルトの名無しさん
2006/02/04(土) 13:58:32/*--- 全ノードのデータを表示 ---*/
static int PrintTreeSub(BinNode *p, int depth, int max_depth)
{
int result = 0;
if (p != NULL) {
if (depth == max_depth) {
PrintData(p->data);
result = 1;
} else {
result = PrintTreeSub(p->left, depth + 1, max_depth);
result += PrintTreeSub(p->right, depth + 1, max_depth);
}
}
return result;
}
void PrintTree(BinNode *p)
{
int i;
for (i = 0; PrintTreeSub(p, 0, i); i++)
;
}
0929デフォルトの名無しさん
2006/02/04(土) 14:01:290930デフォルトの名無しさん
2006/02/04(土) 14:05:110931デフォルトの名無しさん
2006/02/04(土) 14:44:560932デフォルトの名無しさん
2006/02/04(土) 14:45:36バロスwwwwwwwwwwwwうぇっうぇwwwww
0933デフォルトの名無しさん
2006/02/04(土) 14:48:44まあ授業名と内容が異なるのは高校・大学ではよくあることだし
0934デフォルトの名無しさん
2006/02/04(土) 15:05:580935デフォルトの名無しさん
2006/02/04(土) 15:10:060936デフォルトの名無しさん
2006/02/04(土) 15:11:030938デフォルトの名無しさん
2006/02/04(土) 15:56:29http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1607.txt
多分ブラウザで直接は見れないから、ファイルに落としてから見てね。
0939デフォルトの名無しさん
2006/02/04(土) 16:14:570940デフォルトの名無しさん
2006/02/04(土) 16:20:16巨体整数演算
javaなりrubyなり、C++なりで実装されてるだろ?
0941デフォルトの名無しさん
2006/02/04(土) 16:22:34イタタタ
0942デフォルトの名無しさん
2006/02/04(土) 16:26:470943デフォルトの名無しさん
2006/02/04(土) 16:29:570944デフォルトの名無しさん
2006/02/04(土) 19:43:52[2] 問題文(含コード&リンク): 銀河のシミュレーション
半径が0.5万光年で10個のリングを配置し、各リングには20個の構成を配置しシミュレーションを行う。
for() 全ての星が星 i に加える力を計算する。
for() 求めた力より、星 i の速度の変化を求め星 i の新しい位置を計算する。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0
[3.3] 言語: C
[4] 期限: 2006/2/6
[5] その他の制限: gnuplotで表示したい。
0945デフォルトの名無しさん
2006/02/04(土) 20:03:130946862
2006/02/04(土) 20:09:32[2] 問題文(含コード&リンク):
main関数でキーボードから入力された2つの整数を引数として
渡された時、最大公約数を返すプログラム
main()
{
変数の定義とキーボードからの入力
c=gcm(a,b);
結果の表示
}
int gcm(int x,int y)
{
変数の定義と最大公約数の計算
return z;
}
を完成させて、36,90をキーボードから入力した時に最大公約数18が表示されるかどうか
確認しなさい。
(最初はmain関数だけでプログラムを組み、後で最大公約数の計算部分を
関数かすると作りやすい)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: わからないです。
[3.3] 言語: C++
[4] 期限: 2006年2月4日
よろしくお願いします。
0947デフォルトの名無しさん
2006/02/04(土) 20:22:46万有引力の法則にのっとって、質点の移動をシミュレートせよ。
という意味だと思う。
0948デフォルトの名無しさん
2006/02/04(土) 20:30:12#include<iostream>
using namespace std;
int gcm(int,int);
int main(){
int a,b;
cin >> a >> b;
int c = gcm(a,b);
cout << c << endl;
}
int gcm(int x,int y)
{
if(y==0)return x;
while(x %= y)
if((y %=x)==0)return x;
return y;
}
0949次スレテンプレ
2006/02/04(土) 20:32:52【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 59代目
http://pc8.2ch.net/test/read.cgi/tech/1138320520/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
次スレが立たない時の避難所
http://pc8.2ch.net/test/read.cgi/tech/1122705615/
0950デフォルトの名無しさん
2006/02/04(土) 20:33:56いやいあマテ、それは標準入力から、であって出題に含まれる”キーボードから”は満たせんぞ。
0951デフォルトの名無しさん
2006/02/04(土) 20:35:57ジョン、それよりも「キーボードのみに限定されていないので、仕様を越えている」じゃないか?
0952デフォルトの名無しさん
2006/02/04(土) 20:37:53標準入力からっていうと、入力を促すメッセージを出さなくていい。
キーボードからっていうと、入力を促すメッセージを出す。
って意訳してるけど。まあ、あれだ。イチャモンに近い。>950 ついでに、次スレ頼むわ。
0953948
2006/02/04(土) 20:39:55いや、>>950はジョークだろw
ここは>>951の言うとおり、
仕様を発展、拡張した高度プログラムを書いた(ことにする)のですよ。
0954デフォルトの名無しさん
2006/02/04(土) 20:41:03puts("input a");
scanf("%d",&a);
puts("input b");
scanf("%d",&b);
c=gcm(a,b);
printf("gcm=%d\n",c);
return 0;}
int gcm(int x,int y) {
int z;
while(y!=0){
int temp;
temp=x%y;
x=y;
y=temp;}
z=x;
return z;}
脳内コンパイルだから動くかどうかしらね
ついでにユークリッド互助法もうろ覚えなんであってるかどうかしらね
0955デフォルトの名無しさん
2006/02/04(土) 20:42:27おまけに汚いし恥ずかしいのぉ
0956デフォルトの名無しさん
2006/02/04(土) 20:42:390957デフォルトの名無しさん
2006/02/04(土) 20:48:03お前凄いな
>>944
現状ではほぼ間違いなく誰も答えてくれないと思われる
0958デフォルトの名無しさん
2006/02/04(土) 20:49:01#include<iostream>
using namespace std;
int gcm(int,int);
int main(){
cout<<"input a -> ";int a;cin >> a;
cout<<"input b -> ";int b;cin >> b;
int c = gcm(a,b);
cout << c << endl;
}
int gcm(int x,int y){
if(y==0)return x;
else return gcm(y,x%y);
}
0959デフォルトの名無しさん
2006/02/04(土) 20:49:08合体して巨大な星が生まれるんだな!
0960デフォルトの名無しさん
2006/02/04(土) 20:49:260961デフォルトの名無しさん
2006/02/04(土) 20:51:460962デフォルトの名無しさん
2006/02/04(土) 20:52:430963デフォルトの名無しさん
2006/02/04(土) 20:53:440964950
2006/02/04(土) 20:54:35C/C++の宿題を片付けます 60代目
ttp://pc8.2ch.net/test/read.cgi/tech/1139053955/
0965デフォルトの名無しさん
2006/02/04(土) 21:07:02つ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1608.zip
0966デフォルトの名無しさん
2006/02/04(土) 21:18:08おもろい
0967デフォルトの名無しさん
2006/02/04(土) 21:39:030968デフォルトの名無しさん
2006/02/04(土) 21:46:45すみません。リングとは軌道のことです。
プログラムは947さんの考えと合っています。ありがとうございます。
星の次の位置を与えそれをfor文でループさせgnuplotでアニメーション表示したいのです。
完成した動きは、中心点(ブラックホール)の周りを200個の星がぐるぐる回るというものです。
0969デフォルトの名無しさん
2006/02/04(土) 21:51:01やはり止まる
0970デフォルトの名無しさん
2006/02/04(土) 22:00:033 3 *
.*.
..*
***
はどう判定してよいのやら。
0971デフォルトの名無しさん
2006/02/04(土) 22:20:200972デフォルトの名無しさん
2006/02/04(土) 22:38:290973デフォルトの名無しさん
2006/02/04(土) 22:40:570974デフォルトの名無しさん
2006/02/04(土) 22:48:280975デフォルトの名無しさん
2006/02/04(土) 23:17:30今のところ俺のメインマシンは生きている
詳細は>>965へ
0976デフォルトの名無しさん
2006/02/04(土) 23:22:43スレに書き込む人数がどんどん減っていったのを思い出した。
0977デフォルトの名無しさん
2006/02/04(土) 23:33:020978デフォルトの名無しさん
2006/02/04(土) 23:46:41私は生です
0979デフォルトの名無しさん
2006/02/05(日) 00:37:360980デフォルトの名無しさん
2006/02/05(日) 00:38:16生気持ち良い!!!
・・・(((( ;゜Д゜)))ガクガクブルブル
0981デフォルトの名無しさん
2006/02/05(日) 00:38:480982デフォルトの名無しさん
2006/02/05(日) 00:42:31危険ですな・・・。
0983デフォルトの名無しさん
2006/02/05(日) 00:44:37('A`) ってゆーかデバッグ実行しても手遅れだろ
0984デフォルトの名無しさん
2006/02/05(日) 00:52:40「void swap(int *pa, int *pb) { int tmp = *pa; *pa = *pb; *pb = tmp; }」
「あのぅ・・・swapって習ってないんですけど?」
「自分で関数を作るって習った?」
「習っていません。」
「・・・int main(void) {int a = 1, b = 2, tmp; tmp = *&a; *&a = *&*&*&b; b = tmp; return 0; }」
「何も表示されないんですが・・・」
「題意は満たしてる」
0985デフォルトの名無しさん
2006/02/05(日) 00:58:07「xxxという講義の第x週で出した課題です.分からなかったら部屋まで来てください,適宜対応します」
ホンモノ?
あ、スゴイ、この先生、コピー&ペースト対策してる・・・。
0986デフォルトの名無しさん
2006/02/05(日) 01:00:53→通報
先生、独学の人間にもエサ^H^H資料を見せてください。金払いますから・・・。
0987デフォルトの名無しさん
2006/02/05(日) 01:27:29pdfは最近だったから、覚えてる
で、適宜は17代目
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#355
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#365
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#646
採点:もうちっとネタを料理しましょう
0988デフォルトの名無しさん
2006/02/05(日) 01:37:05[2] 問題文(含コード&リンク):
2つの文字列A,B(最大文字数は255とする)を読み込み、
それぞれの文字列の先頭から順に一文字づつ抜き出し、
交互に出力するプログラムを作成しなさい。
例:
文字列Aにabcd
文字列Bに123456
と入力すると
出力結果 a1b2c3d456
が出力されるようにする。
文字列の入力は
char *string;
……
scanf("%s", string);
のように変換指定子に%sを使用する。
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2006年2月7日
ポインタとかさっぱりです、どうかよろしくお願いします。
0989デフォルトの名無しさん
2006/02/05(日) 01:41:260990デフォルトの名無しさん
2006/02/05(日) 01:42:14一般の入門書にはsscanfとかは確実に載ってない
0991デフォルトの名無しさん
2006/02/05(日) 01:43:38……による
0992デフォルトの名無しさん
2006/02/05(日) 01:44:310993デフォルトの名無しさん
2006/02/05(日) 01:48:12void printAlter(char *a,char *b){
int flg=0;
while(flg!=3){
if(*a==0) flg|=1; else printf("%c",*a++);
if(*b==0) flg|=2; else printf("%c",*b++);
}
}
こんなの作ればいいんでね?
0994デフォルトの名無しさん
2006/02/05(日) 01:49:48まあ、いいや。
void put(char *a, char *b) { if (a == NULL) {puts(b): } else { putchar(*a); put(b, a + 1); } }
int main(void) {char a[100], b[100]; scanf("%s%s", a, b); put(a, b); return 0;}
0995デフォルトの名無しさん
2006/02/05(日) 01:50:26#include <stdio.h>
void put(char *a, char *b)
{
if (*a) {
putchar(*a);
put(b, a + 1);
} else {
puts(b);
}
}
int main(void)
{
char fmt[20], a[100], b[100];
sprintf(fmt, "%%%ds%%%ds", (int) (sizeof(a) - 1), (int) (sizeof(b) - 1));
if (scanf(fmt, a, b) == 2) {
put(a, b);
}
return 0;
}
0996デフォルトの名無しさん
2006/02/05(日) 01:50:34俺もだけど
0997デフォルトの名無しさん
2006/02/05(日) 01:53:160998デフォルトの名無しさん
2006/02/05(日) 01:54:280999デフォルトの名無しさん
2006/02/05(日) 01:54:281000デフォルトの名無しさん
2006/02/05(日) 01:54:3610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。