1 :
デフォルトの名無しさん :
2006/01/27(金) 09:08:40
∧__∧
(`・ω・´)
>>1 乙
.ノ^ yヽ、
ヽ,,ノ==l ノ
/ l |
~""""""~"""~"""~"
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
>>1 乙
4 :
りんご :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週間です。
>>4 前スレ使い終わってからこっちを使えボケ
スレ削除依頼出してきたのか?
それ宿題か?
7 :
デフォルトの名無しさん :2006/01/27(金) 13:42:07
6、4、3、8、1という数字を昇順に並びかえよ。と言う問題が分かりません。 SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。 どなたかこの問題を解いて下さいませんか?宜しくお願いします。
#include <stdio.h> #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; }
前スレ埋め立て完了しますた (。・x・)ゝ
>>7 #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;
}
前すれ埋めた馬鹿どもはなんだ 厨房板やVIPじゃあるまいし
VIPなめるとと酷いお(# ^ω^)
>>11 残念ながらプログラム板にもVIPのカス共はいるってことさ
15 :
デフォルトの名無しさん :2006/01/27(金) 15:01:56
VIPから来ました。
16 :
デフォルトの名無しさん :2006/01/27(金) 15:02:28
VIPのほうからきました
17 :
デフォルトの名無しさん :2006/01/27(金) 15:03:13
間違いなくVIPからきました
18 :
デフォルトの名無しさん :2006/01/27(金) 15:03:14
* + 巛 ヽ
〒 ! + 。 + 。 * 。
+ 。 | |
* + / / イヤッッホォォォオオォオウ!
∧_∧ / /
(´∀` / / + 。 + 。 * 。
,- f
/ ュヘ | * + 。 + 。 +
〈_} ) | それがVIPクオリティ
/ ! + 。 + + *
http://ex7.2ch.net/news4vip/ ./ ,ヘ |
ガタン ||| j / | | |||
――――――――――――
19 :
デフォルトの名無しさん :2006/01/27(金) 15:03:38
Vipからきました
ぶいあいぴーからきますた
21 :
デフォルトの名無しさん :2006/01/27(金) 15:04:59
''';;';';;'';;;,., ザッ ''';;';'';';''';;'';;;,., ザッ ザッ ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; vymyvwymyvymyvy ザッ ザッ MVvvMvyvMVvvMvyvMVvv、 Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ /\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ /'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ . |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:| | ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::| \ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´ 「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
22 :
デフォルトの名無しさん :2006/01/27(金) 15:05:01
荒らすなバカ
remove関数でvip掃討キボン
24 :
デフォルトの名無しさん :2006/01/27(金) 15:08:22
''';;';';;'';;;,., ザッ ''';;';'';';''';;'';;;,., ザッ ザッ ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; vymyvwymyvymyvy ザッ ザッ MVvvMvyvMVvvMvyvMVvv、 Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ /\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ /'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ . |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:| | ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::| \ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´ 「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
26 :
デフォルトの名無しさん :2006/01/27(金) 15:10:07
>>14 格好つけんなよ厨房が( ^ω^)ママの乳でも吸ってろ
27 :
デフォルトの名無しさん :2006/01/27(金) 15:10:41
''';;';'';';''';;'';;;,., ザッ ザッ ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; vymyvwymyvymyvy ザッ ザッ MVvvMvyvMVvvMvyvMVvv、 Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ /\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ /'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ . |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:| | ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::| \ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´ 「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
28 :
デフォルトの名無しさん :2006/01/27(金) 15:14:23
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
29 :
デフォルトの名無しさん :2006/01/27(金) 15:15:30
''';;';'';';''';;'';;;,., ザッ ザッ ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; vymyvwymyvymyvy ザッ ザッ MVvvMvyvMVvvMvyvMVvv、 Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ ザッ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ザッ /\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ /'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ . |(●), 、(●)、.:|(●), |(●), 、(●)、.:|、( |(●), 、(●)、.:| | ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::::| . | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::| \ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´ 「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
てか 7はCなら俺に聞けすれでも聞いてたマルチ野郎だぞ テンプレぐらい守れってんだ
32 :
vipper :2006/01/27(金) 15:19:23
呼んだか?
というかバブルソートくらいは自分でやってくれないと 何を教えても無駄な気がするのだが。
34 :
デフォルトの名無しさん :2006/01/27(金) 15:20:57
VIPって何だ?
35 :
30 :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; }
36 :
30 :2006/01/27(金) 15:28:38
int main(void) { 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; }
プログラミングを作るって何だろう?
30は何を必死にそんな答えたがっているのだろうか
>>38 駄目だろ。バブルソートの関数を使ってないんだから。
41 :
デフォルトの名無しさん :2006/01/27(金) 15:48:16
VIPから絶対来てません
42 :
デフォルトの名無しさん :2006/01/27(金) 15:52:47
VIPをバカにするやつがいると聞いてやってきましたがここですか? VIPはおかしなことをする奴は多いけど礼節知らずが多いとは違うんだぞ。
>>7 #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;
}
あぁ・・・そうですか。 あんたにとっては葬式中に屁をブッブこきながら笑うのも礼儀知らずのうちに入らないんだろうね。
葬式会場だったのか。
自分自身は何もやってないくせに 「俺たちVIPPERは凄いことやってる」とか息巻いてるカス共ww
逮捕される奴ってVIPPER率たかくね?
48 :
デフォルトの名無しさん :2006/01/27(金) 16:25:47
VIPの悪口書くとVIPPERの内お調子者の連中がくるから や め れ
悪口書いてるのもVIPPERですがなにか?
50 :
デフォルトの名無しさん :2006/01/27(金) 16:28:20
VIPの前を通り過ぎてきました
>>48 × VIPの悪口書くとVIPPERの内お調子者の連中がくるから
○ VIPの悪口書くと屑VIPPER共の最底辺の連中がくるから
>>51 お前が一番煽ってるという事を自覚してないようだな
55 :
デフォルトの名無しさん :2006/01/27(金) 16:57:22
ドウモ〜〜〜ッ!!お〜o( ^ω^ )oは〜♪ハジメマシテ〜〜〜ッ☆☆(*^ω^*)ブーン 私は27歳のOLしてるのぉ〜〜〜っ♪(#^ω^#)ブーン うーんとー、私メル友がすっごくすっごく欲しくってー、\( ^ω^ )/ブーン 探してたら( ^ω^ )なんσ( ^ω^ )とっ!☆彡(ノ^ω^)ノ☆彡ヘ(^ω^ヘ)☆彡(ノ^ω^)ノ☆彡 素敵(^ω^;ブーン!な掲示板♪を発見!!!!( ^ω^)//""" パチパチパチブーン あやしい所(^ω^;ブーン!とか…{{ (^ω^;) }} ブルブルブーンすごい数の掲示板がありますけど、 これ全部1人の方が管理して ∩ てなわけで、ついついσ( ^ω^ ) | | /⌒',ノ ̄ ̄`ヽ、―ニ メキメキメキメキッ!!!! メル友に、なってσ( ^ω^ )くれる ヽ(^ω/ ´`ヽ _ 三,:三ー三,: え?くれないのぉ〜?(;^ω^ )そんノ .ノヽ--/ ̄ , ` ` ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ なってくれなかったら、( ^ω^)乂(^( }. ...| /! ☆○(^ω^)o ぱ〜んちブーン、☆(\ }、ー‐し'ゝL _ ( ^ω^ ) いてっ!ダメ!! ゛o(^ω^*)o\_jr--‐‐'´} ;ーー------------------------------ 素敵(^ω^;ブーン!な掲示板♪ブ━`ヾ---‐'ーr‐'"==!!!( ^ω^)//""" パチパチパチブーン ( ^ω^ )きゃ〜〜(^ω^;)やられた〜〜(o^ω^)o ドテッブーン ブ━━(^ω^;)━━ン! ( ^ω^ )←気絶中。。。。・゜゜・o( ^ω^ )o・゜゜・。うぇぇん <( ^ω^;)>ノォオオオオオ!!ブーン なあんて(#^ω^#)こんな♪(#^ω^#)キャハブーン 私っ!σ( ^ω^ )だけど、(///^ω^///) お友達σ( ^ω^ )になってm( ^ω^ )mくださいませませブーン♪(^ω^'*)フフブーン ということで。(^ω^)vじゃあね〜〜〜ブーン♪( ^ω^ )/~~ ほんじゃo(^ω^ヽ)(/^ω^)o レッツブーン♪ それでは、今から他の掲示(^ω^;ブーン!板も色々見てきまーすC= C= C= C=┌(^ω^)┘ブーン (*^ω^*)ノ~~マタネー☆'.・*.・:★'.・*.・:☆'.・*.・:★
>>7 #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;
}
1. キーボードから10個の実数を配列 double a[10] に読み込み、合計、平均、 及び最大値、最小値を求めて表示するプログラムを作れ。 ヒント: 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] その他の制限:特にありません。 これがわかりません、教えてください
58 :
デフォルトの名無しさん :2006/01/27(金) 18:07:37
>>57 #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;
}
>>57 void 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
>>57 #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;
}
>>59 goukei = 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];
}
<二修正ダ>
averageを求めるのにオーバーフローを恐れて double average = 0; for(int i=0;i<10;i++) average += lpArr[i]/10; ってのはだめかな
63 :
デフォルトの名無しさん :2006/01/27(金) 18:14:30
>>59 saidai= saishou = a[0];
これは何か初心者っぽくないw
>>62 そんな小手先の修正でなんとかなるようなオーバーフローならどんなやり方でやっても構わんよ。
実際に現れるオーバーフローを気にしなきゃいかん場合ってのは、そんなのが全然通用しないくらいにヤバくなる。
電卓とか再起ばりばりのプログラム(´・ω・`)
>>66 長すぎて読む気が起きん.一から作ったほうが早そう.
69 :
デフォルトの名無しさん :2006/01/27(金) 18:39:08
「ここを書こう」ってとこだけを書くって制約なので・・・
70 :
デフォルトの名無しさん :2006/01/27(金) 19:00:29
マジで読みたくねぇw
宿題の趣旨と異なるじゃん 回答したくなかったら黙殺でいいじゃないか
73 :
71 :2006/01/27(金) 19:12:06
>>72 え?趣旨は捕らえてるつもりなんだけど,なんかまずかった?
ごめ、リンク先見てなかった 読まずに書いたってあるから1から書いたかと思ってしまったよ。すまない
76 :
デフォルトの名無しさん :2006/01/27(金) 19:40:53
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 10人の名前、年齢、電話番号の入ったファイルを作り、それを読み出すプログラムを作れ。 そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。 また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。 問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: すいませんわかりません [3.3] 言語:C [4] 期限:2006年1月30日まで [5] その他の制限: 初心者なので、あまり難しくないものでお願いします。 前スレで質問の意味がわからないと言われてしまい、答えがもらえませんでした・・・ すみませんがお願いします。
意味がわからんもんはわからん 問題文が抽象的過ぎる そんな抽象的な奴はBasicでもやってろ
78 :
デフォルトの名無しさん :2006/01/27(金) 19:42:41
だから読み込んだデータどうするんだっつの 追記でいいのか上書きなのか
そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。 また、ファイル名が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);
80 :
デフォルトの名無しさん :2006/01/27(金) 19:49:27
>>76 適当つか文句言っても直さん
#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;
}
[1]C言語実習 [2] 文字列の○文字目から○文字目までを抜き出して返す関数を作成しなさい 例 対象 □□□□△△△△□□□□ ↓ 5文字目から8文字目まで ↓ 結果 △△△△ 文字列の○文字目から○文字目までを削除して返す関数を作成しなさい 例 対象 □□□□△△△△□□□□ ↓ 5文字目から8文字目まで ↓ 結果 □□□□□□□□ [3] 環境 [3.1] OS: WindowsXP [3.2] VC.net [3.3] 言語:C言語 [4] 期限:2006年01月30日13:00まで [5] その他の制限:制限等は全くありません。お願いします。
>>81 基本的に半角で1文字扱い
全角で2文字扱いだそうです
[1] 授業単元: プログラム演習 [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>のみ でプログラムしていただけると幸いです。よろしくお願いします。
全角の半分が切れる場合は?
87 :
デフォルトの名無しさん :2006/01/27(金) 20:04:05
>>81 char* 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;
}
>>81 全角とか半角とか全然気にしないで書いた
void 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);
}
//
>>81 >>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 を削除*/
}
>>86 全角については、getchを用いて入力する時に判定しています。
全半角関係無しの文字数を持つ文字列を個人的に用意して、
○文字目が△であれば全角、□であれば半角といった具合です。
判定した時に全角であれば二文字分消すことになります。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
>>85 /* 残念ながら構造体名の期待に添えなかった */
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");
}
>>92 default://通常の文字の扱い
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--;
なんか説明する気が感じられないので俺パスな
>>91 申し訳ありません。ご迷惑おかけしました
>>89 様の関数で問題は解決しました
ちなみに
>>90 と
>>94 は自分ではありません
getchは動作に難があるので使用しておりません(鳥つけておくべきでした)
>>87 様、
>>88 様、
>>89 様をはじめとしたスレ住人の皆様方のご尽力、本当に感謝いたします
有難う御座いました
97 :
85 :2006/01/27(金) 21:28:20
>>93 ありがとうございました。
自分なりに少し改良などしてみたいと思います。
98 :
デフォルトの名無しさん :2006/01/27(金) 22:40:57
三河やさんひどいです><;
誤爆・・・
101 :
デフォルトの名無しさん :2006/01/27(金) 23:55:11
眠いめんどくさい きっと他の人がやってくれる
しゃぁない、ワシが一肌ぬぐか 風呂はいってきま
>>100 #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;
}
>>103 お早い回答ありがとうございます!助かりました!
[1] 授業単元: プログラミング [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はダメ よろしくお願いします
107 :
デフォルトの名無しさん :2006/01/28(土) 10:48:21
>>105 stdlib.h使用不可ってことはnの値が決まって無いのに
mallocやcallocを使わずに領域確保しろって言うのか?
それとも勝手にnの値を決めろってこと?
あと学生の名前は半角英数のみで、ファイルから読み込むのか?
>>105 stdlib.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;
}
[1] プログラム開発 [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まで よろしくお願いします。
うむ。そういう解釈なら、 #include <cstdlib> なんてのでどうだろう? てか、CかC++かも書いてないんだよね。
>109 二分探索木って習った?構造体って習った?mallocって習った?ハッシュって習った?リストって習った?
112 :
108 :2006/01/28(土) 11:14:38
>>110 しまった、その手があったか。
そっちで書いたほうが皮肉が利いてて嫌味っぽいなw
んー・・・講義で説明を受けてるとか、提示されてるなら、それを使うべきなんで・・・ 5つのうち、どれを習っているか書いてくださいな。
>>112 素直にC99で可変要素数配列にすればいいじゃないの。
コンパイラがC99に対応してるかどうかだな
>>109 ファイルの読み込み方法は?
いや俺はやらなけど
構造体を用いたプログラムは書いたことがあります。 二分探索木、malloc、ハッシュは別の授業で習ったので プログラムに実装したことはないですけど、どのようなことをしているかは 大体分かります。
119 :
109 :2006/01/28(土) 11:25:26
>>117 ファイルの入力はリダイレクションかfopenです。
この2つしか入力方法は分かりません。
ああ。トライは組んだことないな。挑戦してみっか。
面倒くさいだけで難しい課題ではないと思うんだけどな トライでやれとかいう指定があれば別だが
いや、ちとメンドウだぞ。appleとAppleを同一視し、出力に出てきてるのは後に出現したAppleだ。 出力ルールの推測がむずい。
出力ルールは「最後に現れた単語に従う」でいいんじゃねーの?
ウダウダ言ってる暇があればさっさと書けよグズども
英数字は全て小文字か大文字に変換ってルールを作れば比較は簡単だと思うが
127 :
108 :2006/01/28(土) 11:47:27
>>105 まぁ次からは言語をちゃんと指定してくださいねっと。
とりあえず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;
}
>>127 i[1] = &i[b];
のあとに
fflush(stdin);
を追加したほうがいいかと思われ
>>128 いやいや、fflush(stdin)は処理系依存。
それを分かっててソースをさらにカオスにさせたいのなら問題なしだけどw
130 :
105 :2006/01/28(土) 12:54:36
>>127 次回が来ないようにがんばります。
本当にありがとうございました。
>>58 ,59様ありがとうございます、おそくなってすいません
>>109 向け。ネタ考えてるうちに、マットウなのが来てしまって残念。
#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; }
1] 授業単元: プログラム演習 [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>のみでお願いします
>>134 (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;
}
136 :
135 :2006/01/28(土) 14:13:53
あ、math.hなしなのか。 じゃあ適当にニュートン法でも使ってsqrtは求めてくれ
137 :
134 :2006/01/28(土) 14:18:59
すいません、座標は(1,1)(2,-1)(-1,3)で宜しくお願いします……orz
ヘロンは sqrt で誤差が出るのでできれば避けるべき.三点から面積を出すのは外積が常套手段: double 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; }
139 :
135 :2006/01/28(土) 14:27:53
お、そういう計算の仕方があるのか。 勉強になった。ありがと やっぱ、数学の知識が少ないと、 こういうときにスマートな解を出せないから情けないなぁorz
すいません、結局どういうプログラムになったのでしょうか…orz
>>140 最初にdistanceを削除する
次にtriangleを
>>138 のtriangleに置き換える。
その後main関数のp1,p2,p3の代入している数字を好きなものに変える。
この先は本題とそれるけど、もし、動的に決めたいのなら
constを外して、scanfなり、fgets+(strtof or atof)なりで代入しても良い。
......というか、あそこまでプログラム書かれてて、どう変更するかが分からないようだと正直どうかと思う。
一応読みやすく書いたつもりなんだけどなぁorz
センセ、センセ。ここは宿題全部やってって人が多いですぜ。
そもそも、自分でやろうとしない人たちだから、そんなに期待しちゃだめ。
いや、綺麗なプログラムだし、見易いよ。
>>135 外積の絶対値はベクトルの作る平行四辺形の面積になるのですな…
>>138 符号はよくわからんけど。
俺はネタプログラムしか書けないんで、尊敬する。
携帯からのアクセスでしたので、どうしても頭の中でごちゃまぜになってしまったもので…orz。 今からしっかり内容を解読したいと思います。本当にありがとうございました。…もし上記のプログラムに質問があったら、このスレに書き込んでいいのでしょうか?
>>143 別に構わないと思うよ。
疑問に思った点を、どんなに考えても自分では答えが出せないのなら、
聞いたほうが良いからね。
添削。 (1,1), (2,2), (3,3) →もうちょっと考えましょう。 プログラムを作る前に、入力と出力(結果)を人の手で考えたほうがよいです。 すいません、結局 →もうちょっと考えましょう。 あやまってはいますが、相手の話をぜんぜん理解しようとしてません。 …内容を解読…ありがとうございました。→たいへん謙虚でよろしいです。 …もし上記のプログラムに質問があったら、…→謙虚さをだいなしにしてしまいます。 まず、やってみて、それでもわからないときに言えばいいのです。 総評: 質問のしかたで相手がどう受け止めるか考えましょう。 宿題を完成させるのに、ちょっとだけでもいいので手間をかけましょう。
146 :
143 :2006/01/28(土) 15:55:41
みなさんありがとうございます。 上記のプログラムで解読中にわからなかった事を質問させていただきます。 ・ typedef struct Point Point; という記述をまだ習っていないため、 どういった事が可能になるのかわかりません。これを使用せずにプログラムを 組む為にはどう改変していけば良いのですか?
typedefはただの別名。 typedef int moe; とやると、moeはint型として扱うことができる。 typedef Debu PIZA; typedef Chinsou DQN;
typedef struct Point Point; ってのはstruct Pointと書く代わりにPointと書いてもOKという宣言。 なので、 これを使わないのなら関数の引数や変数の定義で、 Pointと書いているところをstruct Pointに書き換える。
149 :
143 :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
どういう計算したら3になるのかを逆に聞きたい?
152 :
143 :2006/01/28(土) 17:03:15
すいませんでした...orz 最後に1つだけ質問させてください。 const struct point p1={1,2},p2={5,3},p3={-2,3}; という表記でなければ、初期値はあたえられないのでしょうか? p1.x=...のような形で与えようとしたのですが、そうすると triangleの方をどう書き換えればよいかわからくなってしまいまして..
聞く前に入門書でも読めや
>>152 そんなことすら分からないなら単位諦めろよ
作ってもらったものを提出でいいと思うぞ。 理解しようとするなら、本を読んだり、講義のメモを見返したりするべし。 だれか書いてたが、「やってみる」ことが大切。
ここの人間は、仏の顔が何度もあるんですね。
157 :
デフォルトの名無しさん :2006/01/28(土) 17:29:16
仏の顔も128度まで
いじってあそんでるだけだってば。
あたしのマンコを弄ばないで><!!
>>152 変数名で初期化をしたいのならmain関数の変数宣言のconstを外して
Point p1,p2,p3;
p1.x = 2; p1.y = 3;
...
みたいに書けば良い。(まぁ正確には代入だから初期化ではないが)
triangleを弄る必要はない。
あと、どんなに考えても自分で答えが出なかったら質問したほうが良いとは言ったが、
何も考えずに人に聞くのは勘弁してくれ
>>157 7bitに抑えるために127回にするのはどうだろう?
>>131 >>133 ありがとうございます。
次はここで答えられるような立場になれるようがんばります。
131はC99。133はネタ(一応動くみたいだが)なので注意。
163 :
デフォルトの名無しさん :2006/01/28(土) 18:02:18
164 :
デフォルトの名無しさん :2006/01/28(土) 18:23:51
以下のC++プログラムは複素数を計算するものです。 「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"; } };
165 :
デフォルトの名無しさん :2006/01/28(土) 18:24:30
>>164 の追加です。main()はこちらです。
int 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;
}
この流れでテンプレ無視できるのはすごいと思う。 でもC++の人にはいい燃料だろう。
Complex(double r,double i=0) こんな燃料で牛脂も溶かせん
Complex(double r){ real = r; imag = 0; } でいいんじゃない。
>>166 「宿題片付けます」しか目に入らないんだよ、きっと。
>>167 , 168
このスレはさすが仏の顔が7bitだけありますね。
170 :
デフォルトの名無しさん :2006/01/28(土) 18:46:51
仏の顔もlong long int
171 :
デフォルトの名無しさん :2006/01/28(土) 18:47:19
print(std::ostream& os) const なんか気持ち悪いな。 operator使えばいいのに。
>>172 print(std::ostream& os) const は特に間違ってない。
それ呼び出すoperatorを定義していないだけde。
「なんか気持ち悪い」ってのは大事だと思う。 原因不明のバグはたいていそういうところに…
>>174 operatorから呼び出すようにするなら
stringに格納して返すなり、ostream返すようにするなりして
cout << a.print() << "\n";
↑こういう感じで使えるようにした方がスマートだろ
>>176 たぶんスマートだけを言うならこのほうがスマート
std::ostream&operator<<(std::ostream&o,const Complex&c){
c.print(o);
return o;
}
cout << a << "\n";
で済むからな。
179 :
デフォルトの名無しさん :2006/01/28(土) 20:33:50
>>164 で質問させていただいた者です。
今度は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
たびたび済みませんが、どうすればよいかお教えいただけるでしょうか。
>>179 お前が一回死ねばみんな教えてくれると思うよ^^
>>179 引数を一つにする。
フレンドにする。
外部関数としてオーバーロード。
別のスレで聞く。
テンプレを守る。
の内のどれか。
テンプレ(
>>1 )読め。
教科書にoperator *の書き方載ってるはずだから、それ読め。
>>179 それをクラス定義の外で書けば良い。
細かいアドバイスも入れるなら
先にoperator*=を実装してそれを利用したほうが好ましい。
返り値はconst Complexにしたほうが事故を防げる
引数はconst Complex&にしたほうが効率的。
こんなところ、あと最後に教科書ちゃんと読んでから質問しろ。
やさしいなぁ・・・ほんと。 やさしさに便乗させてもらおう。 C++の解答者さんに質問。使用コンパイラを教えてください。
operatorはわかりにくいからな。 まず、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は戻り値や引数、一時変数などをちゃんと考えてあげなければならないので、 結構奥が深い。
>>184 VS6のVC6。時どきBCC。
VS6は学生時代に7万で安〜とか言って買ったんだけどなぁ。
今のアカデミックパックの安さはなに?って感じ。
とゆうかoperatorのオーバーロードが分からんって奴は ろくな入門書読んでないか、もしくはろくに読んでないだけだろ そんな奴は勝手に単位落として留年でもしてりゃいい
>>184 基本的にはg++
たまにVC++.NET2003やVC++2005
今更の感もあるかもしれんが、C++やるならEffective C++とMoreの内容くらいは把握しとくのが筋。
190 :
デフォルトの名無しさん :2006/01/28(土) 21:16:12
>>181 さん、ありがとうございました。
フレンドにする事で解決しました。
なお、テンプレについては読んではいたのですが、
あくまで「推奨」という事だったので、あまり重要視していませんでした。
不快に思われた方にはお詫び申し上げます。
次回からはテンプレをしっかり書かせて頂きます。
191 :
デフォルトの名無しさん :2006/01/28(土) 21:17:06
アカデミックって商用利用ダメだっけ?
192 :
デフォルトの名無しさん :2006/01/28(土) 21:19:14
>>184 VisualC++ toolkit 2003 + platformSDK
VS2005.NETもあるけど、重いからなんとなくこっち使っている。
(最近VS2005.NETもコマンドラインから使えるようにしたけど、
昔の習慣でつい・・・)
windowsでC/C++やるなら結構お勧め。比較的速いコード吐く。
194 :
デフォルトの名無しさん :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>のみで。 時間がないため助けてください。
>>193 確か2005からは.NETが名称から外されたはず
[1] 授業単元: c言語演習 [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>のみ。 よろしくお願いします。
>>184 ここに出すときは
digital mars C++
動作確認用にgcc g++ VC express(のclだけ) 辺りも併用
本当はbcc32でも試したいんだけど環境構築してないから試していない。
>>198 Digital Marsのコンパイラってよく名前を聞くがいいの?
>>194 素敵なアルゴリズムが思いつかない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;
}
201 :
198 :2006/01/28(土) 22:11:46
>>199 吐き出すコードは自分が適当に使う限り結構優秀(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;
}
>>194 #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;}
203 :
デフォルトの名無しさん :2006/01/28(土) 22:19:24
205 :
デフォルトの名無しさん :2006/01/28(土) 22:21:23
>>201 D言語って趣味で?会社で?
使えるのあれ?
[1] 授業単元:情報処理 [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 よろしくお願いします。
>>194 遅くなっちゃったなあ.解析解がありそうな気がするけど,まあバックトラック.
#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);
}
>>201 即レス感謝です。
unionでは無く、structを使ったプログラムもご教授願えませんか・・・?
#include <iostream> #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'); }
211 :
210 :2006/01/28(土) 22:31:31
212 :
194 :2006/01/28(土) 22:32:08
213 :
208 :2006/01/28(土) 22:35:55
意味不明な質問をして申し訳なかったです・・・orz
>>205 暇人大学生ですから趣味です。
D言語は適当にちょちょいと書くスクリプト言語と同じ程度には使えます。
と言っても一番大きいソースでも4~5000行しか書いてないから正確に評価はできませんけど。
たぶん、C++で蓄積されたライブラリ群を使うほうが最終的には実用的かなぁ。
>>194 順列の列挙アルゴリズムがこんなんしか思いつかなんだ。
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);}
>>194 なんとか解析解出せた.……けど,問題は途中経過も全部出さないと駄目なんか…….
#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));
}
217 :
デフォルトの名無しさん :2006/01/28(土) 22:53:03
>>214 大学で5000行スゴスwww
俺も大学生ですがMAXでせいぜい2000行程度
漏れもDやってたがDじゃメシ食えんことに気づいてやめた
219 :
デフォルトの名無しさん :2006/01/28(土) 22:56:18
220 :
デフォルトの名無しさん :2006/01/28(土) 22:57:25
てかD使ってる企業あるの?
>>216 なんでそうなるのか分からんが、すげー
そういうのってやっぱアルゴリズム論とかでやるの?
222 :
デフォルトの名無しさん :2006/01/28(土) 23:01:51
[1] 授業単元:プログラミング実習 [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>でお願いします。
223 :
デフォルトの名無しさん :2006/01/28(土) 23:03:55
>>222 のつづき
関数プロトタイプと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;
}
>>220 ちょっと前にDで記述したアプリかなんかがあって、
impressかなんかに載ってたよ
かなりうろ覚えで悪いけどw
225 :
216 :2006/01/28(土) 23:11:26
>>221 組合せ論の問題かな.言われると,なるほど,と思うはず:
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 .
106はなんで、手をつけるひとがいないのかな・・・? 漏れはElementSeparateを理解するのに1時間かかったorz ・・・いやぁ・・・読みづらい・・・
227 :
デフォルトの名無しさん :2006/01/28(土) 23:14:04
うーむ。一通り読んだだけでは、理解できん>組み合わせ論 コンビニでビール買った後にでも、紙と鉛筆を用意してトライしよう。
>>225 把握した。確かにそれで数は出せるのか
わざわざ説明サンクス
ってか題意満たして無くね?w
>>226 Dijkstra法だっけか?
あれがどんなのかは理解してるが、他人の虫食いソースなんて
読む気がしないからパス
>>225 こういうのを思いつくのを数学的センスっていうんだろうなぁ。
私には力技しか無理です(ちなみに私は215です)。
>>223 プロトタイプと main は省略.不正な式にも対応しない.
int 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;
}
>>232 ファイルの終端。コンソールから入力するときは CTRL+Z や CTRL+D など。つーかググれ。
>>232 あなたはまずgoogleの使い方を知るべきです。
>>226 読もうと努力したけど、アルゴリズムのところ、値を負にしてマークしたりしてて、理解が追いつかなかった。
cl /GX だっけ。
240 :
デフォルトの名無しさん :2006/01/28(土) 23:45:36
#include<iostream> #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と表示されました。これで合っているのでしょうか?
>>238 エラーメッセージが長くて貼れませんでした。なので一応途中まで。
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)'
242 :
240 ◆OtZ3csKgUQ :2006/01/28(土) 23:46:17
>>240 [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 を使うためのヘッダ
>>241 gcc は C のコンパイラ。 C++ をコンパイルするときは g++ を使う。
>>226 自分で実装したけど、コードの穴埋めをする気にはなれない。
たぶん途中の値を負にしたりするのは、そのノードが確定かどうかの
フラグに使っていると思うんだが、読むのはストレスが溜まる。
穴埋め以外不許可なら、変数表つけるとか出題者はもっと考えるべきだな。
245 :
240 ◆OtZ3csKgUQ :2006/01/28(土) 23:50:10
>>240 どうを実行して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;
}
>>194 遅レスだけど。内容はヒントの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;
}
249 :
240 ◆OtZ3csKgUQ :2006/01/29(日) 00:09:06
>>247 さん。ありがとうございます。
すみません。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 と表示されました。
251 :
デフォルトの名無しさん :2006/01/29(日) 00:14:14
前スレの767ですがスルーされてるのでよろしくお願いします。 [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月末
>>249 equal関数でs1.sp!=s2.spの時に関数の最後でreturnしていないから。
254 :
デフォルトの名無しさん :2006/01/29(日) 00:15:16
[1] 授業単元: プログラミング基礎演習 [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月末
255 :
デフォルトの名無しさん :2006/01/29(日) 00:15:47
[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年1月末
256 :
240 ◆OtZ3csKgUQ :2006/01/29(日) 00:21:57
>>252 さん、ありがとうございました!解決しました。
>>255 2.の時点では適切に表示されないようにせよということかな?
そういう美しくない問題はいただけないなぁ。
>>254 「単語」の定義は?「空白」で囲まれたもの?だとしたら「空白」の定義は?
isspace()が真を返すものでいいの?
>>254 1,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;}
>>251 3 に 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);
}
>>231 のプログラムをgccでコンパイルしたんですけど、
>>222 にあるような実行例の場合、式を正しく読み込めず
value = 0となってしまいます。
原因分かる方いらっしゃいますか?
262 :
デフォルトの名無しさん :2006/01/29(日) 00:47:05
>>257 そうみたいですね。2では動作すればいいだけで4で改良。
>>258 たぶんisspaceというのは聞いたことないです。
>>259 ありがとうございます。でもよく分かりません。
>>260 ありがとうございます。
263 :
231 :2006/01/29(日) 00:47:07
>>261 こちらではきちんと value = 114 が表示されました.
・割り算でゼロになってないか
・不正な入力をしなかったか(入力にスペースが含まれてはいけない)
などを確認してみてください.
264 :
231 :2006/01/29(日) 00:49:09
>>263 割り算なんか実装してないよね orz なんかボケてきたので後誰か頼
265 :
デフォルトの名無しさん :2006/01/29(日) 00:56:38
[1] 授業単元:C++によるプログラミング [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; }
266 :
259 :2006/01/29(日) 01:00:11
>>262 具体的にソースのどの部分が分からないのか該当箇所を列挙してくれ。
それによって書き換える場所と書き方を変えないといけないから。
まぁ多分(3)は全書き直ししないといけないだろうなぁとは推測してるけどw
>>231 のソースを拝借中
9*9*9
value = 729 (これは正しい)
(2*3)+5
value = 0
3*(2+2)
value = 1
3+2
value = 5 (これも正しい)
おかしいのはfactorなのかな…
ちょっと弄ってみるか
>>261 「入力される式の中の数が1桁の正整数」という与えられた前提では、
これでうまく計算されるはず。
int factor(char **p) {
int x;
if (**p == '(') ++(*p), x = expression(p), ++(*p);
else x = **p - '0', ++(*p);
return x;
}
269 :
231 :2006/01/29(日) 01:19:53
日曜の昼が締め切りってどーよ?
C++の使用コンパイラのこと教えてくれてありがとです。 ・・・VC++が予想以上に多かったかなぁ・・・漏れも導入を検討します。 使おうかと思ってたのがg++(gcc 3.3.2)だったんで、ちと調べてみます。
273 :
デフォルトの名無しさん :2006/01/29(日) 02:52:07
>>266 islower(ch)?toupper(ch):tolower(ch)
と
(3)は全然分からないorz
>>273 OKOK。
三項演算子が分からんのかな? もしかすると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;
}
275 :
デフォルトの名無しさん :2006/01/29(日) 03:35:03
>>274 すみません。islower、toupper、tolowerも分からないですorz
たぶん'a'=97,'A'=65を利用するのかと思います。
>>275 ってことは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;
}
277 :
276 :2006/01/29(日) 03:42:52
あ、#include<ctype.h>は要らんから消しといて
278 :
デフォルトの名無しさん :2006/01/29(日) 03:52:15
>>276 神様ありがとうございます。
こうやって見ると自分でもできそうなのに全然できないorz感謝です。
もし暇があれば明日でもいいので
>>254 の4も教えていただけると最高です。
279 :
焼豚 :2006/01/29(日) 03:55:42
[1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク):「グラフ作成プログラム」 プログラムを実行したら、まずグラフ名と数値の入力を求められ、 数値データを入力したら、自動でXwindow上に二次元座標でグラフをプロットするプログラム。数値に対して座標軸などがオートで決定される。 [3] 環境 OS:TurboLinux 言語:C++ [4] 期限: 2/1 どうかお願いします
>>279 どこまで使っていいの?gnuplotとか、pgplotとか使っていいの?
>279 なんだか出題内容をきちんと理解していないような気がするな。 こういうことか? 1.起動したら標準入力から二次元座標の列を手作業で入力する。 2.入力が終了したらEOFでも入れる。 3.x軸とy軸の最大値最小値を元に描画範囲を決定する。 4.gnuplotにデータを渡す。
>>278 isspaceは確か授業で習ってないと言ってた気がするので(真面目に読んでないんで自信なし)
適当に空白は指定しておいた。
#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;
}
>279 あと、オレの知り合いの大学の先生でここチェックしている人がいるから気をつけろよ
isspaceとかtoupperとかググれば先頭に出てくるんだがなぁ 丸投げするような奴はその程度のことすらしないのかと改めて悲しくなった
285 :
焼豚 :2006/01/29(日) 10:54:52
>281 遅れて申し訳ありません。そんな感じです。おねがいします
データを配列に記憶するのと構造体に記憶することの長所と短所を教えてください。 前スレでも聞いたのですがよくわかりませんでした。 プログラミングが全然わかってないので少しやさしめに答えてもらえるとうれしいです。
287 :
デフォルトの名無しさん :2006/01/29(日) 11:24:46
よくわからんが配列は単純に連続した数字等を入れるときはいいんでない 数列とか 構造体はたくさんのパターンが同じ物入れたいときとか 100人分の身長体重視力・・・とか 参照する時もname.weightとかで出せて便利でしょて思う
288 :
デフォルトの名無しさん :2006/01/29(日) 11:32:27
>>286 構造体というか線形リスト(連結リスト)のことだな。
287に付け加えると配列は必要な分だけあらかじめ領域を確保するから
格納するデータ数が決まって(又は予想出来る)いる場合じゃないと駄目(後から配列を大きくする事は出来ない)だけど
線形リストはデータ数が決まってなくても使える。
追加はノードを新しく作成してポインタでつなげればいいし、削除もポインタを繋ぎかえてノードを解放すればいい。
ソートなんかもポインタのつなぎかえだけでOK。
ただしプログラムが面倒になる。
[1] 授業単元: プログラム基礎演習 [2] 問題文(含コード&リンク): 以下のプロトタイプ宣言で示すインターフェイスを持つ関数を、各問の指示に従って作りなさい。 ただし与えられたデータ構造、インターフェイスを変更しないこと。 (問) 配列内のデータを昇順に並び替える関数、及び降順に並び替える関数をそれぞれ作成せよ。 void sort(int[], int n); /* d[] : データが格納されている関数, n : 配列内のデータの個数 */ OS:vineLinux 言語:C コンパイラ : gcc [4] 期限: 06/1/31まで [5] ・#include<stdio.h>のみでお願いします。 ・アルゴリズム (探索、整列)に絡む範囲は未習です。 神様お助けください。
290 :
デフォルトの名無しさん :2006/01/29(日) 11:43:52
俺も構造体の役割がよくわからんかった。
STUDENT:氏名、学生番号、性別・・・
とかやらずにそれぞれのグローバル配列持っておいて、
IDで管理すればいいじゃないか、と思ってた。
それでもできる、それがCクォリティ。
>>288 のような連結リストのとき以外で使う意味がたいしてない。
と思っていたのはオブジェクト指向を勉強する前までだな。
291 :
デフォルトの名無しさん :2006/01/29(日) 11:44:45
神じゃないから助けない><
292 :
デフォルトの名無しさん :2006/01/29(日) 11:46:08
>>290 いやそうでもなくても構造体使うと
例えば多数の座標を持ちたい時とか
プログラム組む時にわかりやすいんだよ
293 :
デフォルトの名無しさん :2006/01/29(日) 11:55:17
>>292 今では構造体なしの生活は考えられないです。
彼女と知り合えて幸せです。
294 :
デフォルトの名無しさん :2006/01/29(日) 11:55:21
>>289 #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])とすればいい。
これは前後を比較して交換するバブルソートというソーティングアルゴリズム。
295 :
294 :2006/01/29(日) 11:57:25
ミスった。 正しくはswap(int, d[j - 1] , d[j]);
296 :
286 :2006/01/29(日) 11:58:12
297 :
265 ◆H4LNFsCSUE :2006/01/29(日) 13:05:39
すいません。
>>265 に書き込んだ者ですがどなたかお答えいただけませんか?
期限は明日でも構いませんので。
298 :
デフォルトの名無しさん :2006/01/29(日) 13:13:30
C++シラネ
>>297 1)オペレーターの記述は教科書に書いてあるはず
2)教科書無いなら、書店や図書館に置いてあるC++の本でオペレーターの定義が書いてある本を読む
3)ぐぐる
だいたい、そんな回答だった気がする。
突然期限が明日に延びるってどういうことだろう。 しかも前の締め切りは日曜の12時だし。 簡単な問題だが、答える気なくすな。
302 :
265 ◆H4LNFsCSUE :2006/01/29(日) 14:53:40
>>265 です。
>>301 申し訳ないです。できるだけ早めにご回答を頂きたかったので、
早めに設定してしまいました。
>>302 そういう時は嘘でも「教授に頼んで延ばしてもらった」と言うもんだ。
以下を追加。これで動く。
Complex operator+(const Complex& x, const Complex& y) {
return Complex(x.re() + y.re(), x.im() + y.im());
}
304 :
265 ◆H4LNFsCSUE :2006/01/29(日) 15:17:26
>>303 ご回答ありがとうございます。それはどこに書けばいいですか?また、
std::ostream& operator<<(std::ostream& os,Complex& c){
c.print(os);
return os;
}
はどこに書けばいいでしょうか?
>>304 #include<iostream>
class Complex
{
// 略
};
Complex operator+(const Complex& x, const Complex& y) {
// 略
}
std::ostream& operator<<(std::ostream& os, Complex& c){
// 略
}
int main(){
// 略
}
>>300 #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;
}
多分動くと思う。線引き色付けは自分でやってね。
設問のほーが間違ってるんだとおもうが、oparator <<の第2引数はconstをつけるもんじゃなかろーか?
309 :
265 ◆H4LNFsCSUE :2006/01/29(日) 15:44:17
310 :
106 :2006/01/29(日) 16:13:40
>>106 をお願いしますm(__;)m
ってかどうやら問題がだいぶ不親切で分かりにくいみたいですね・・・
ここの住人にも理解できないのに俺にできるワケねぇorz
[1] 授業単元: プログラミングC++
[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日ですが、早めにしていただければありがたいです
よろしくお願いします。
>>311 条件が不足している。insert()はどういう順番に追加するの?
>>312 「できれば番号順にソートしろ」とのことですが、
insert()を呼び出すごとに末尾に追加するようにしていただければ充分です。
>>310 問題は自明なんだけど、書きかけ方が酷いんだよなあ。
もし書きかけた部分も訂正していいなら、もうちょいやってみるけど。
>>310 ちょっと追ってみたが、、、
・Main部
char *FileName = "graph";
GetMatrix(FileName);
shortestpath();
とすると、、、
最初のElementSeparate( MatFile, NodeLabel)の中で
List[LabelNum] = atoi( IntString );
の部分でList[LabelNum]がList[2]=(*NodeLabel+2)をオーバーするんだけどw
それとノードが5個で3x3の行列容易されてもパス重み格納できなくない?
>>311 idの番号順(昇順、小さい順)。挿入する場所を探して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);
}
>もし書きかけた部分も訂正していいなら もうそれでお願いしますorz とりあえずちゃんと動作してくれればなんとかなるので。
>>317 んじゃ、入力ファイルの形式ちょうだい。
なんかファイル読み込みのあたりから狂ってる気がする。
319 :
311 :2006/01/29(日) 17:46:36
320 :
317 :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 コレだと思うですが。違うんですか(・ω・)?
>>320 1行目が何なのか、二行目は何なのか、とかそういうのを聞いてる。
106 では1行目は接点番号って書いてあるけど、たとえば
8 7 6 5
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
みたいな入力も許されるの?
323 :
321 :2006/01/29(日) 18:14:00
>>322 いや、たぶん0スタートだと思うよ。あの関数、
0スタートで書いてあったから。
GetMatrix()の不足分。 if ( Store ) { Store = OFF ; IntString[j] = '\0' ; List[LabelNum] = atoi( IntString ) ; if(DEB) printf(" List[%d] %d", LabelNum, List[LabelNum] ) ; LabelNum++ ; } 俺の力量不足なんだろうが、読むのに時間のかかるプログラムだな・・・。
>>323 配列の添え字と、接点番号が一致している必要は無いでしょ。
327 :
320 :2006/01/29(日) 18:25:35
まあ・・・入力末尾に改行がないと無限ループしそーだしな・・・>モトの おう。それくらい、キレイキレイに書いてくださると明快だなぁ>326
>>327 それは分かるんだけど、一例でしかないでしょ。
最初の行は必ず 0 から始まる連番なの?違う場合はありうるの?それ以外の入力は考えなくていいの?
>>325 そうだね。読み込みの関数を見てなかったから気が付かなかったけど、
グローバルでノードの名前を格納する変数を作っているみたいだね。
だから、最初のノードの名前はとりあえず0の必要はなさそう。
早とちりスマソ
>>330 でも最終結果を表示するところではその番号を参照してないんだよな。
332 :
320 :2006/01/29(日) 18:37:46
最初の行は必ず0から始まる連番です 入力形式はそれ以外考えなくていいようです
334 :
332 :2006/01/29(日) 19:39:17
>>333 凄ぇ・・・流石ですね。
皆様どうもありがとうございましたm(__)m
明日締め切りのの駆け込みがあるかなーと覗いてみたが、なさそーね。
息抜きのつもりがしっかり遊んじゃって、眠気&レポートと格闘している俺がいる。
がんがれ、俺は明日のメシの仕込みでもするわ・・・。
339 :
デフォルトの名無しさん :2006/01/29(日) 22:51:36
[1] 授業単元:C++によるプログラミング
[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日
よろしくお願いします
>>339 #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;
}
341 :
339 :2006/01/29(日) 23:24:05
>>340 ずいぶん早い仕事だなw
後でのんびりやろうかと思ったら、もう終わっているとは。
眠れねぇ・・・Cの燃料くれ。 ただし、今手元にK&Rもなんもないんで、そこんとこよろしく。
344 :
デフォルトの名無しさん :2006/01/30(月) 04:20:24
[1] 授業単元:C++によるプログラミング
[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日
>>344 スラッシュの内側のみ
メインのccc c; に対応するのが aaa()bbb()ccc() コンストラクタ
プログラム終了時に入るデストラクタが
c部分 ~bbb()^aaa()^ccc()
b[3]部分 ~bbb()~bbb()~bbb()
a部分 ~aaa()
pで宣言してる部分はdelete明示してるのでc宣言前にデストラクタ走ってる。と思
配列はb[]じゃなくx[]だったし 「^」記号まぎれこんでるし・・・
347 :
デフォルトの名無しさん :2006/01/30(月) 10:02:58
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): 書ききれないので次の場所に書きます。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio [3.3] 言語: C++ [4] 期限: 今日の午後五時まで [5] その他の制限: できれば全文書いてくれると助かります。
348 :
デフォルトの名無しさん :2006/01/30(月) 10:04:59
>>347 の問題
sumlist を拡張し, 二項演算子 + の使える全ての型 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; }
350 :
デフォルトの名無しさん :2006/01/30(月) 10:34:29
プログラム初心者です。 Big5→UTF-8→UTF-16に変換するプログラムを作っているのですが iconv_open()を使用している箇所があり何を行っているのか不明です・・・ 色々調べては見たのですが ディスクリプタ(descriptor)とはなんなのでしょうか?
突然失礼します。 #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
>>350 ファイルディスクリプタのこと?
ファイルディスクリプタならカーネルの中のストリーム(ファイル、open file。 バイト列の流れ)
をプロセスに直接見せられないからカーネルの持っているストリームに番号を対応付けて
プロセスにその番号を指定させる。
その番号のこと。 俺もあんまり詳しくないから微妙に間違ってるかも。
もしUNIX系ならUNIXプログラミング質問すれで聞いた方がいいと思う。
353 :
デフォルトの名無しさん :2006/01/30(月) 12:34:09
[1] 授業単元:プログラミング実習 [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 ); }
354 :
デフォルトの名無しさん :2006/01/30(月) 12:35:12
>>353 のつづきです。
実行例
$ ./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日
よろしくお願いします。
>>353 まぁdeleteの中身がゴミなのはまぁ良いとして、struct cellの定義はなに?
こっちが適当に書いても良いんだけど、後で文句言われるとスゲー嫌だから。
[1] 授業単元:プログラミング
[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] その他の制限:特になし
申し訳ありませんが、よろしくお願いします。
359 :
デフォルトの名無しさん :2006/01/30(月) 15:05:10
>>355 すいません遅れました。
struct cell {
int data;
struct cell *link;
};
[1]授業単元: プログラミング演習 [2] 問題文: 5本の直線を引き、平行な直線があればその直線をわかりやすく表示するプログラムを作成せよ。 直線を引く方法は座標入力でもマウス入力どちらでも構わない。 但し、平行な直線同士であっても以下の場合は平行線とはしない ・直線同士が重なって1本になっている場合 ・直線同士が離れすぎている場合(垂線が引けない場合) ・別の直線と交わっている場合 [3] 環境 [3.1] OS: WindowsXP [3.2] VC.net [3.3] 言語:C++ [4] 期限:2006年01月31日9:00まで [5] その他の制限:ファイル名は「heikou」 申し訳ありませんがよろしくお願いします。
>>350 正確な表現ではないけども、
Win32 でいうハンドルと同じようなものだと考えても実用上問題ない。
それとスレ違い。
>>360 >・別の直線と交わっている場合
5本とも平行じゃないと平行線としないということか?
364 :
デフォルトの名無しさん :2006/01/30(月) 15:43:12
>>364 メンバ関数に以下を追加で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;
}
366 :
365 :2006/01/30(月) 15:50:42
やべ切れた ×tack ○stack
367 :
360 :2006/01/30(月) 15:52:53
>>363 説明足らずですみません。
5本のうち平行である直線は何本でも何組でも構いません
/ / \ | _
↑この場合は左2本が平行である
× /
↑他の直線が交わっていたら平行ではない
\/ /
↑他の直線の始点または終点が乗っていると平行ではない
/ | /
↑間に別の直線があると平行ではない
368 :
365 :2006/01/30(月) 15:52:59
あ、忘れてた。 stack(int)のsp==0;はsp=0;の間違いと思うからそこも修正ね
369 :
364 :2006/01/30(月) 16:07:00
>>367 それは直線じゃなくて、線分だ。
>間に別の直線があると平行ではない
はどの条件に該当するんだ?
[1] 授業単元:C++ [2] 問題文(含コード&リンク): ジャンケンプログラムの作成 最初に回数を指定する。 プログラム側は同じ確率でG,C,Pを出すこと。 勝敗を表示する。 終了したあとに勝率を表示。 [3] 環境 [3.1] OS:Windows [3.2] VC 6.0 [3.3] C++ [4] 期限: 2月2日 何卒よろしくおねがいします、、
>>360 まだ条件が足りない。VC.netでC++なら、managedなのかそうでないか。
MFC使っていいのか、WTL使っていいのか、APIだけなのかなどが
書いてないと、折角作っても無駄になる。
>>360 あとファイル名の指定があるけど、これはファイルは一つにしないと
いけないということ?そうなるとリソースファイルが作れないけど。
374 :
デフォルトの名無しさん :2006/01/30(月) 16:35:18
[1] 授業単元:プログラミング [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まで よろしくお願いします。
376 :
360 :2006/01/30(月) 17:17:34
環境はVC++.NETです。タイプミスでした申し訳ありません。 ファイルは1つではありません。heikouというのはプロジェクト名のことです。 プロジェクトの種類:Visual C++ プロジェクト テンプレート:MFCアプリケーション プロジェクト名:heikou アプリケーションの種類はシングルドキュメントです。 ご迷惑おかけしました。
377 :
涼 :2006/01/30(月) 17:31:00
コメントをC++形式に。 defineをconst intに。 boolenをboolに。 malloc()/free()をnew,deleteに。 typedef keytype をtemplateに。 グローバル変数をクラスのメンバ変数に pageptr関係をクラスのメンバ関数に。
>>378 そしてこんな糞コードが量産される
int* a = new int;
if (!a) {
// エラー処理
}
VC6って標準ではそんなことせんといかんかった気がする。
まあVC6はC++ではないからね
>>374 「引数を持つコンストラクタ」って何?今でもコンストラクタは
>Complex();
>Complex(double r, double i);
>Complex(const Complex& c);
と引数を持ってる奴が定義されてるが.
[1] 授業単元: アルゴリズム [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; }
>>371 #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;
}
385 :
383 :2006/01/30(月) 21:08:27
<続き> int 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] その他の制限: なし よろしくお願いします
386 :
デフォルトの名無しさん :2006/01/30(月) 21:14:48
387 :
377 :2006/01/30(月) 21:16:58
涼です。 返事が遅くなって申し訳ありません。 理解できない自分がいました、 これすら理解できないのに聞いたのが本当すいません。 まだ少し時間があるので、精一杯勉強したいと思います。
>>357 最大流を求めるアルゴリズムに指定ある?特に無ければ Edmond-Karp で書くけど.
>>386 C++ でいい?
#一応手元に Accept されたコードがあるけど,思いっきり個人特定されちゃうので書き直す;
[1] 授業単元:プログラミング演習 [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週間ほどなんですが、よろしくお願いします。
期限切れの宿題持って来られても困る
締切り丁度1年前だな。
>>388 スマン。
>>390 は間違い。v9->v12をv12->v9として計算している。
アルゴリズムとか俺わかんないから、期待している。
>>391 #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;
}
大きいのから順にな...>395
>>395 ( ´_ゝ`)
>>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);
}
strtok()の使い方で #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; }
398続き void 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"); }
で、3.9.8いかのぷろぐらむで strtokで切り出した部分が'\0になってるのがわかるのですが それまでのstrtok()事態の動きがいまいちわからなんですl どなたかご教授していただきたく、書き込みしました お願いします
素数という話が出てきたのでエラトステネってみたけど、 bitset使えば意外とあっさりできたりするのねコレ。
404 :
デフォルトの名無しさん :2006/01/30(月) 23:40:26
[1] 授業単元:プログラミング C++
[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日
すみませんが、よろしくお願いします
405 :
365 :2006/01/30(月) 23:42:29
406 :
404 :2006/01/30(月) 23:48:21
>>405 すみません。似てるかもしれませんが、別の課題で、
>>404 の指示通りに作れという問題です。
407 :
365 :2006/01/30(月) 23:55:26
stack::の7文字を足すのと代入する順序変えるだけやん プログラムの再利用とか考えたこと無いのか ......まぁ良いや。これをクラス定義の下に埋めろ。 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];}
ここの質問者に自分で考えるということを求めてたら疲れるぞ。
409 :
デフォルトの名無しさん :2006/01/31(火) 00:06:09
もしかしたらスレ違いかもしれませんが… こんな課題に関するアドバイスをお願いします。大雑把な方針でいいので。 ちなみに課題を出した先生はムチャクチャ厳しくて結構人気のある先生です。 ・現在のスキル(C言語)で書ける最も実用的なプログラムを書いて提出せよ。 詳細なドキュメント必須。ソースコードはコメントを除いて20Kbyte以内とする。 ・少々のバグがあっても提出者が問題点を的確に把握していれば減点しない。 ・gcc3.3で-pedantic-errorsオプションつきでコンパイルできること。 ・非標準のライブラリの使用は禁止。 ・提出後に口頭試問を行う。提出内容を理解していない場合には単位を与えない。
>>409 まずはお前の現在のスキルとやらを語ってもらおうではないか。
>>409 すれ違いです。
誰か答えるかも知れないけど。
>>388 遅レスでごめんなさい
別に指定がないので、お任せします。
大変だとは思いますが、よろしくお願いします。
413 :
404 :2006/01/31(火) 00:21:14
>>409 期間はどれくらい?
余裕があったらニューラルネットワークとか面白いけど…実用的じゃねぇかw
416 :
365 :2006/01/31(火) 00:32:16
>>413 謝らなくて結構。
自分で考えもしない人達をこのスレ(過去スレ含む)で幾度と無く見たから慣れたw
もしそれが簡略したソースで無くて、さらに先生がそのファイルを出したのなら
『先生。クラスの宣言がありません。
これで、どないせいちゅうねんボケがぁぁ!!!』
と、課題を出した人に文句を言うのが適切かと。
[1] 授業単元:プログラミング1 [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] その他の制限:特にないです、そんなに難しいのはやってないと思います よろしくおながいします
出来れば、入力形式と出力形式を提示して欲しいんだが。 ‥課題のグラフもデータ化してupしてもらいたいんだが。
コンテストじゃないんだし、一問あたり一分くらいかかってもいいんじゃね?
>>420 なんかすごくそんな気もしてきた.出てくる結果はパーフェクトに正しいし.
でも,三分待っても結果が返ってこないと、現実的な時間で結果が出るか不安にならね?
きちんとオーダー算定すりゃあそんなこともないのかなあ……?
>>421 ありがとうございます。でも、実行するとなぜか
エラー E2140 39:ここでは宣言はできない(関数 maximum_frow)と出るのですが
これはなぜでしょうか?
424 :
デフォルトの名無しさん :2006/01/31(火) 01:08:05
>>415 ありがとーm(_ _)m
遅くても全然オーケーです
参考にしますね
>>423 すんません,一部 C++ になってました.
39行目 int increase... の int を外し, 26行目くらいで int increase; と定義してやってください.
>>425 ありがとうございます!できました。
本当にありがとうございました。
428 :
デフォルトの名無しさん :2006/01/31(火) 01:21:00
>>427 考え方とか、かるーく説明してもらって(・∀・)イイ!!ですか?
今回「アルゴリズムとその妥当性を示せ」みたいに言われてるんで
429 :
419 :2006/01/31(火) 01:22:11
>>427 参りました.6 秒くらいで F2 通りますね.
実装面の高速化でこんな早くなるとは.勉強させてもらいます.
431 :
421 :2006/01/31(火) 01:33:39
>>430 出た最大流が直感より少なくて不安だったけど,なんとなく正しそうですね.サンクス.
432 :
404 :2006/01/31(火) 01:39:39
>>428 基本は
>>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 はう〜、どうなんでしょう。勉強になるかどうかは、分かんないです。
私も勉強させていただきます。
なんか、いー具合にプログラムの競争とか、協力とかしてるなぁと。 今晩は楽しませてもらいました。おやすみなさい。
436 :
365 :2006/01/31(火) 02:04:08
>>432 stack::stack(const stack& s)
のreturn s;を
stack plus(stack s1,stack s2)
のケツに移す以上。
#以下独り言
......代入演算子の実装が酷いなぁ。
delete[]したあとのnew[]が失敗したら最悪の事態になるじゃんw
これ書いたのが先生なら頭があんま良くないなぁ。
この師にして弟子ありって感じだ。
437 :
デフォルトの名無しさん :2006/01/31(火) 02:04:23
c言語です。 問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を記述せよ。 * *** ***** *******
>>436 学校の講義程度で例外中立・安全とかやってたら逆に怖いだろ
439 :
404 :2006/01/31(火) 02:17:00
>>436 何度もありがとうございます。まだこんなエラーが出てしまいます。
3_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:先生をかばっても仕方が無いのですが、「前の課題で作ったプログラムを書き換える」
という課題がほとんどのため、私の力不足が主な原因と思います。
>>438 んー、そう言われるとそうかも。
自分の場合独学だから大学でどの程度のレベルを要求されるからわからんのだよなぁ。
まだ大学1年だからC++の講義もベターCレベルだし。
441 :
365 :2006/01/31(火) 02:20:17
>>439 悪りぃ。stack(int sz)の真上にでも
stack(const stack&);を追加しといて
>>409 ・読んで理解できそうで、実用的なプログラムを探す。
・メモを取りながら読む。たぶん読んでるうちに、プログラムの変なとこをみつける。
・文法エラーならgccでエラーが出ないように、プログラムを書き直す。
・ロジックのバグなら、報告するか直すかはあなたしだい。
・メモを利用して自分でドキュメントを書く。
・ここまでやれば口頭試問は通るはず。
実用的なプログラムだけど…
式の評価(関数電卓みたいなの)とか、
ああ…画像の分類ソフトでもいいかもしんない。画像サイズが指定のファイルを探すとか。
音声ファイルの変換ていうのも手かなぁ…
20Kって、2万文字か。1行20文字換算で1000行か。うーむ。
>>438 大学でC++習ったよ。std::stringは使わない。structは習ったけど、classは習わんかった。
443 :
404 :2006/01/31(火) 02:32:03
>>441 お世話になりました(またお世話になるかもしれませんが)。ありがとうございました!
>>437 #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);}
445 :
デフォルトの名無しさん :2006/01/31(火) 02:59:14
>>444 サンクス
続きお願いしていい?
問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);
}
446 :
デフォルトの名無しさん :2006/01/31(火) 03:00:12
問6 正整数(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 ピラミッド型でした。
・・・プログラミングとか数学ってつまらないかなぁ・・・?
>>446
448 :
444 :2006/01/31(火) 03:14:38
>>445 それぞれ解答欄の部分だけ。
解答欄の外に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
449 :
デフォルトの名無しさん :2006/01/31(火) 03:57:45
[1] 授業単元:C++によるプログラミング [2] 問題文(含コード&リンク): 定数 7,'x'に対する抽象構文木を構築し、表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: g++ [3.3] 言語: C++ [4] 期限: なるべく1月31日中でお願いいたします
>>449 構文木というからには何か構文ルールがあるわけでしょう?どんなルール?四則演算?
451 :
デフォルトの名無しさん :2006/01/31(火) 08:20:28
いきなりつまづいてしまいました。 XPでボーランドのコンパイラ使ってます。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 )
452 :
451 :2006/01/31(火) 08:20:43
#include <stdio.h> void 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); }
>>450 すみません。ちゃんと勉強してからまた質問しなおします。
455 :
451 :2006/01/31(火) 09:04:52
>>453 ご指摘ありがとうございます。
intにかえてみましたが、同じエラーが出てしまいましたorz
始めたばかりで何にもわからないのですが、改行の仕方や、スペースの幅はコンパイルするときに関係あるのでしょうか?
つまり、上ではダブルスペースになっている箇所がありますが全てシングルにしたり、スペースの幅を小さくしたり広くしたりするとエラーはでますか?
そういったルールを教わらなかったもので、そういうルールがあるのかどうかすらわかりません・・・
>>455 基本的にスペースや改行はある程度自由がきく。
まさかとは思うが
(1)〜(5)の行を、/*(1)*/のように/*〜*/と書き換える。
>>437 問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;
}
>>455 全角スペースはprintfの中身など以外は許されないと思います。
(半角スペースはOK)全角スペースがないか調べて、あったら
なくしてまたコンパイルしてみて下さい。
459 :
196 :2006/01/31(火) 09:49:32
遅れてカキコ申し訳ないですが、
>>196 の問題で「行列AとXを共用体op_1として宣言する」
とした場合、
>>201 さんのプログラムをどう改変すればよいでしょうか・・・。
どなたかよろしくお願いします。
460 :
デフォルトの名無しさん :2006/01/31(火) 10:00:02
[1] 授業単元: 宿題 [2] 問題文(含コード&リンク): 一年三組の11人目があなただったとします。 一郎君から順に点数を入力、最後にあなたの点数を入力し、すべて入力し終わったあと、 一番成績の良い人の順から、点数を出力するプログラムを作成しなさい。 ※ 入力を求める関数、並べ替える関数、出力する関数を作成すること。 また、処理順序として、すべて入力→並び替え処理→出力 とするようにしてください。 一年三組成績 一郎君 50点陽菜さん 90点 次郎君 75点美咲さん 67点 三郎君 36点さくらさん 82点 史郎君 88点葵さん45点 五郎君 68点凛さん77点 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: 初心者なので分かりません [3.3] 言語: C言語 [4] 期限: できるだけはやくお願いします [5] その他の制限 できれば一番簡単な、初心者でも分かるやり方でお願いします。
[2] その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日 よろしければお願いします・・・
>>460 前スレのあれ、結局あのままスルーされてたのか。カワイソス
463 :
196 :2006/01/31(火) 10:05:38
すいません、解決しますた..orz
464 :
310 :2006/01/31(火) 10:33:37
>>460 はぁ…自分が前スレで書いたやつじゃダメなのか…まぁ、いいや
すみません、昨日はありがとうございました。
きょう提出したところ、追加の課題として計算量を求める機能を追加せよというものが出ました。
自分なりにclockを組み込んで、かかった処理時間で計算量を求めようとしたのですが
処理が早すぎて意味がありませんでした…
計算量を求める方法は自由らしいので、もうひとつ自分が考えた方法は
比較回数をカウントして出力するというものなのですが、どこに組み込んでよいか迷っています。
昨日も助けていただいたのに厚かましいとは思いますが、ぜひお力をお貸しくださいm(_ _)m
>>437 ,
>>457 問2だけ。
底が2なんだからシフト使えば?
int pow_2(int n)
{
return 1<<n;
}
但し 0<=n<sizeof(int)*8。
[1] 授業単元:プログラミング [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まで よろしくお願いします。
468 :
451 :2006/01/31(火) 11:46:57
>>456 ,458
レスありがとうございます。さっそく試してみます
469 :
デフォルトの名無しさん :2006/01/31(火) 11:54:21
>>467 あのな出力の例も書かないでやるやついない
470 :
451 :2006/01/31(火) 11:58:33
>>456 メイクとコンパイルできました!
ただ、実行すると
valは0です。val2は256です
val = [100] val2 = {500}
val = [99] val2 = [3]
とわけのわからない表示がされましたがこれで正しく実行されているのでしょうか?
コマンドプロンプトからのコピペがわからなかったので手動で書いてみました・・・
>>458 456さんの方法を先に試したところコンパイルできちゃったので試してないのですが、
全角スペースか半角スペースか見分ける方法ってあるのでしょうか?
今回の場合なら上から一つずつ探していくこともできると思うのですが、大量の構文をかくプログラムの場合
どうやって全角か、半角か判断すればいいかわからないのですが。。
何度もすみません・・・
>>470 プログラムは正しく動いている。
ただ、最初にval2を決めてないから、val2には何が入っているかわからない。
>>470 テキストエディタの機能で検索か置換。
始めから入力しないのが一番だけど。
473 :
デフォルトの名無しさん :2006/01/31(火) 12:14:04
>>461 /*(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;
}
>469 すいませんでした。勉強してきます。
プログラミングT 問題@文字列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時です。 まったく分からないんです・・・誰か助けてください。。。
>>476 (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;
}
とりあえず動いた
あほか
どうせアホですよ(つД`)
>>478 文字c ってことは変数 c の意味じゃないのかな…
int str_chnum( const char str[], int c )
{
int count = 0;
for(; *str != '\0'; str++) {
if( *str == c ) count++;
}
return count;
}
未確認だがこんなんでどだろ…
>>476 変数なのか変数じゃないのかはっきりしてくれ
>>360 の課題、ようやく形になってきたけど、期限切れだね。
もうちょっと余裕を持って出してくれればなぁ。
MFC指定でなければ間に合ったかもしれないな。残念。
485 :
デフォルトの名無しさん :2006/01/31(火) 18:36:42
VC++.net依存の問題はもうC言語じゃないよなぁ・・・
486 :
デフォルトの名無しさん :2006/01/31(火) 18:51:02
1] 授業単元:プログラミング演習 [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] その他の制限: (なし)
>>486 「反復」ってことは計算法が指定されてるんだよね.Newton法?
>486 C言語によるアルゴリズム辞典丸写し 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; }
>>486 返事が無いのでNewton法.
#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));
}
>>464 310ってことは、たぶん担当は自分だなw
ちょっと見てくるから待っててくれ。
プロファイラとかカバレッジとか・・・(うそ?) 最も内側のループにカウンタつけるのも手法。 ・・・こういうグラフのベンチ集ってどっかにないのかね?
>>464 時間計算量って、単純にNで実行行数がどれだけ変わるかでいいんじゃね?
>>464 計算量をなにで判断するかによるけど、未確定のノードを確定に
するために、最小値とその(確定にしようとしている)未確定の
ノードまでの距離を比較するたびに、カウンターが上がるように
してみた。これで何回比較しているかわかるから、ひとつの
目安になるかも。修正箇所は、
26行目くらいにint counter;とグローバルでカウンターを宣言して、
147行目のforの上あたりにcounter = 0;と初期化して、
157行目のif(DEB)の下に、counter++;でカウンターを上げる。
最後は、mainでcounterの値をprintfとかで表示させればOK.
>>491 課題の提出に、プロファイラとか実装したら凄いな。
きっと文句なしにA++だろうw
496 :
デフォルトの名無しさん :2006/01/31(火) 21:21:13
[1] 授業単元: 宿題 [2] 問題文(含コード&リンク): ある2つの整数を入力して、四則演算をして結果を出力するプログラムを作成しなさい。 ※ 四則演算をそれぞれ関数にすること [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: 初心者ですので分かりません [3.3] 言語: C言語 [4] 期限: 2/1 [5] その他の制限:初心者なので簡単にお願いします。
>>496 =460
初心者でもコンパイラ名ぐらいはわかるだろ。
どうしてコンパイラ名がわからないのか。 ちょっと調べればわかると思う
初心者初心者書くのは、学ぶ意思が無いに等しい
500 :
デフォルトの名無しさん :2006/01/31(火) 21:36:03
関数化求められてる時点でどうも初心者とは思えないな
初心者認識してるなら、少しは勉強しやがれ。 と、ここの質問者にいっても無意味だよな。
>>496 #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(){たし算の計算();ひき算の計算();かけ算の計算();わり算の計算();}
初心者に向けて、わかりやすく書いてみた。「せいすうの入力」は、上の
ぷろぐらむに直接入力してね。日本語使えるコンパイラなら動くはず。
あとテンプレにあるとおり、じょうけんあとだしはだめだから。
初心者初心者とかいちいち自己申告するのもいい加減スルー 出来ない位イライラする要素になってきた。
504 :
デフォルトの名無しさん :2006/01/31(火) 21:50:23
きちんとテンプレ守ってるあたり、初心者じゃないな。
>>496 #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;
}
ハ_ハ ハ_ハ (^( ゚∀゚)^) 初心者〜初心者〜 アソレソレ ('(゚∀゚∩ ) / ヽ 〈 (_ノ_ノ ヽヽ_)
初心者かどうかなんてどうでもいい 問題がつまらん
509 :
デフォルトの名無しさん :2006/01/31(火) 22:11:51
よくこの流れで解くね
>>503 スルーできないなら迷惑だ。
消えてくれ。
511 :
506 :2006/01/31(火) 22:14:20
つか「ある整数(∃x(x∈int))」なんだからその答えはおかしいだろ。 それだと「すべての整数(∀x(x∈int))」になってしまう。 ちゃんと曲解しろ
_____ / \ / ./⌒ ⌒ヽ ヽ /, __| / | | ヽ |_ | | / ○ \| 未来に逝かないか?初心者君 | / 三 | 三. | | | 丶___|__) | ヽ\______/ ヽ ノ ,.、-  ̄/ | l  ̄ / | |` ┬-、 / ヽ. / ト-` 、ノ- | l l ヽ. / ∨ l |! | `> | i / |`二^> l. | | <__,| | _| |.|-< \ i / ,イ____!/ \ .| {.| ` - 、 ,.---ァ^! | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l __{ ___|└―ー/  ̄´ |ヽ |___ノ____________| }/ -= ヽ__ - 'ヽ -‐ ,r'゙ l | __f゙// ̄ ̄ _ -' |_____ ,. -  ̄ \____| | | -  ̄ / | _ | ̄ ̄ ̄ ̄ / \  ̄| ___`\ __ / _l - ̄ l___ / , / ヽi___.|  ̄ ̄ ̄ | _ 二 =〒  ̄ } ̄ / l | ! ̄ ̄| _______l -ヾ ̄ l/ l| |___|
それをいうなら「整数を入力」するコーディングが必要なわけだが。
1] 授業単元:C言語宿題 [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( )関数を習いました。 たぶんコレを使いながら解いていけ・・という事だと思うのですが.. できれば初心者向けに解いてもらえると有難いです。 よろしくお願いします。
>>515 StringCopy()なんてものは標準に存在しないから、誰もその中身が
分からない。参考にして作って欲しければ、その中身も公開すること。
517 :
デフォルトの名無しさん :2006/01/31(火) 22:33:04
>>512 ある整数でいいんでね?
100桁の整数とかの計算できないから全ての整数じゃないし
518 :
デフォルトの名無しさん :2006/01/31(火) 22:33:38
もう最初に中身書かない時点でやる気失せた
>>496 #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");
}
次スレから、コンパイラの名前の見分け方をテンプレに入れた方がいいかもね。
521 :
デフォルトの名無しさん :2006/01/31(火) 22:42:52
[1] 授業単元:? [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
522 :
デフォルトの名無しさん :2006/01/31(火) 22:44:48
あともう一つ、htmlスレに人がいないのでここで質問します。 [質問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] その他の制限: (なし)
>>522 人がいないからといって、別のスレに質問するのは間違い。くだスレなどで
聞いた方がいい。たぶんxmlとかじゃないの?
526 :
デフォルトの名無しさん :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){ ・・・ } どなたか、夜分遅くに申し訳ありませんが、よろしくお願いします。
>>526 "newList"は関数名。struct LIST **はstruct LISTへのポインタへの
ポインタの宣言。
ところで、その問題からなぜリンクリストの話になるんだ?
[1] 授業単元:プログラム概論 [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日まで 申し訳ありませんが、よろしくお願いいたします。
>>526 普通に問題文を読めば線形リストなんぞ必要ないと思うが
**はポインタへのポインタ
530 :
デフォルトの名無しさん :2006/02/01(水) 00:14:30
数学的に合同の説明ないとわからなくね?
3辺の長さがそれぞれ一緒ならおkじゃね?合ってるか知らんが
精度を考えると難しそうだな
533 :
デフォルトの名無しさん :2006/02/01(水) 00:23:31
floatでやろうもんなら 同じはずなのに合同じゃねぇm9(^Д^)プギャーッみたいな
精度はどうしようもないだろ つーか、精度要るなら手計算しろよって話になるし
>>528 int 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;
}
>>531 合同の条件の一つだからOK.精度は、ベクトルで考えればいいんじゃない?
3点の座標の差を取って、3つのベクトルを作って、その3つの
ベクトルが全て等しくなる組み合わせがあれば合同ってのは?
537 :
535 :2006/02/01(水) 00:30:53
あ、チェックはしてない。
538 :
526 :2006/02/01(水) 00:31:13
>>527 さん
>>529 さん
レスありがとうございます(>_<)
リンクトリストじゃなくても作れるんですか?
なんかこないだやったばかりだったので、
これはきっと使わないとできないに違いない!!とかおもってしまいました。
ろだに今書きかけをあげました。
挙げ方まちがえちゃったみたいで、すみません!
今こんな感じで書いてるんですが、
dainyu関数を呼び出したときに
マロックで1つめのセルを獲得してそこに1つめのデータを入れよう。。。
とかおもったのですが、関数から構造体へのポインタがよくわかりません。
hyoji関数はまだ手を出していません。。。
541 :
526 :2006/02/01(水) 00:34:00
>>543 chkprimeの存在意義が分からん
まさか[min,max]のを1つずつその関数に掛けて判定しろってのか?
>>544 min, max は十分大きいけど |max-min| がそれほど大きくない場合は
エラトステネスよりも効率がよいことがあるので、存在意義が無いわけではない。
>>545 動かないね。具体的には以下のテストでNG。
struct triangle t1 = { {0,0},{0,2},{1,1} }, t2 = { {1,1},{0,2},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
>>535 はなんか勘違いしてるね。
距離でやるならこんなとこか。
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;
}
>>543 適当に行詰めたから展開してなー
#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;
}
>>549 強引な圧縮に萌えた。
しかもループでsqrtの計算を頻発しないための匠の心遣いにも萌えた。
>>548 まだ駄目。以下のテストではじかれる。
struct triangle t1 = { {0,0},{0,3},{1,1} }, t2 = { {1,1},{0,3},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
553 :
535 :2006/02/01(水) 01:28:17
だが後悔はしてない。
忘れはせぬ。 貴様の魂我が心と共に。 悲しき男よ。 誰よりも愛深く、拳でしか愛を語れぬゆえに。
555 :
549 :2006/02/01(水) 01:50:35
よく考えたらx==1のときはn%x==0だから余計な比較だったな。 これで十分。 int chkprime(int n){ int x; if(n < 2)return 0; for(x = (int)sqrt((double)n);n%x;)--x; return x==1; }
一般に長さ n の二つのリストが含む要素がすべて等しいかどうかは O(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]; }
リストから頻度表を作成。表の登録/削除がデータ容量によらず、O(1)なら、可能だろうよ・・・。 制限すれば可能だし、ハッシュって手もある
って、三要素かよ・・・。
560 :
526 :2006/02/01(水) 02:15:25
すみません! おさわがせしました。 なんとか自力でできました〜。 新スレたてちゃって本当に申し訳ありませんでした。 失礼します!
561 :
558 :2006/02/01(水) 02:24:30
>>560 自力でなんとかなりそうになったら、そう書いてくれると
ありがたいんだが・・・
>>557 実数からのハッシュなんてどうやって構成するつもり?
というか、ハッシュは普通加算集合上の関数として定義するはずだけど。
頻度表も自明なハッシュだから、状況はおんなじね。
スマン。寝ぼけてるので明日、chkprime()を書く。
3変数では無理意味が無い。だから、もっと数が多いばあいとして、俺の話はヨタ話として聞いてくれ。 実数のハッシュの件なんだがだが、ビットパターンなんだから、どーとでも成るでしょ。 固定長の文字列って考えてもいいんだから。
>>564 こっちもヨタで。実際3要素ならアルゴリズムなんて言うまでもないしね。
で。実数を有限ビットで表現することにすれば確かに加算集合になるけど、
普通、計算量というときは考慮しないと思う(計算モデルへの依存が強すぎるから)。
もっと実用的な意味では、有限ビットの表現は計算モデルによって
どこでどんな誤差が乗るのか怪しいので、 == に基づくハッシュは
有効じゃない。たとえば assert(0.3 == 1.0-0.7); が通るかどうかは環境依存。
>>543 #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);
}
マズ、私の非を認める。 1)3つの値に対してソートは正しい選択だ。 2)実数という書き方もマズかった。キーを「不動小数点数」を対象にしたといえばいいのだろうか。 ところで、加算集合(=濃度が整数と等しい・・・?)がイマイチわからんのだ。 不勉強な俺に加算集合とかハッシュの関連がかかれているページを教えてくれ。
/*(1)*/
すいません、
>>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;
}
569 :
デフォルトの名無しさん :2006/02/01(水) 11:41:16
ちょwww同じ課題がすでに書いてあるwww
実行ファイルにドラッグ&ドロップされたファイルを出力ファイル(out.txt)に すべてコピーするプログラムを作りたいのですが、下記のプログラムでは、 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; }
[3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc (Cygwin) [3.3] 言語: C 書き忘れてました。。。
573 :
474 :2006/02/01(水) 14:52:45
>>568 嫌です。コメント書くのってコードを書くのの約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;
}
>568 #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; }
575 :
デフォルトの名無しさん :2006/02/01(水) 15:52:38
[1] 授業単元:計算機システム [2] 問題文(含コード&リンク):符号付固定小数点加算(2進数)について以下の3つの場合のプログラムを書きなさい。 1)符号−絶対値表現による加算 2)1の補数表現による加算 3)2の補数表現による加算 [3] 環境 [3.1] OS:Windows [3.2] わかりません。すみません。 [3.3] C、C++どちらでも可です。 [4] 期限:2月4日まで [5] その他の制限:特にありません。 開放科目受講生なのでプログラムについてベイシックしか習ったことがありません。 ですから調べて書いてくるようにとの指示でした。どうかお願いします。
>>571 それは、実はちゃんと動作しているんだよ。
ただ、出力先のファイルが変なところにできているだけ。
"out.txt"をフルパスで、"c:\\out.txt"とかすればいいよ。
[1]授業単元:プログラミング実習 [2]問題文:ヒープを構築し、データの挿入、最大値の取り出しのシュミレーションを実施せよ コメントつきのプログラムを添付せよ [3]環境 [3.1]OS:windows [3.2]コンパイラ名:gcc バージョン:わからないです [3.3]C言語 [4]期限:2月2日まで [5]その他の制限:たぶん初心者ばっかなんでIf文を使いまくって2文探索木でどうのこうのだと思うのですが よくわかりません。 知識はゼロに近いです・・。お願いします。
578 :
デフォルトの名無しさん :2006/02/01(水) 17:28:18
C言語なら俺に聞け でも聞いたのですがどちらかというと宿題スレのような感じですので お願いします [1] 授業単元: 個人的趣味 [2] 問題文(含コード&リンク): 二つのパラメータが同時に以下のように溜まるようにしたい(20個くらいで) 味方:■■■■■・・・・■ 敵 :■■■■■・・・・■ 先にパラメータが終了したら攻撃が行えるようにしたいので どちらが先にパラメータが溜まるかわからない仕様 味方のパラメータが仮に先に終了したら味方が攻撃を行い 攻撃後はパラメータは初期化されまた最初からはじまる 攻撃の部分はどうでもいいのでパラメータをどのように溜めるかだけお願いします [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: BCC32 [3.3] 言語: C [4] 期限: 特になし、早ければ早い方が… [5] その他の制限: 無し
FFのアクティブタイムバトルみたいな感じか
580 :
571 :2006/02/01(水) 17:43:40
>>576 できましたー!
実は本当はもう少し複雑なプログラムを作ろうと思っていたのですが、
これでうまく作れそうです。
本当にありがとうございました。
581 :
578 :2006/02/01(水) 18:07:54
582 :
デフォルトの名無しさん :2006/02/01(水) 18:12:25
マルチスレッド使うかむりやりそれっぽく作るかだな
>>578 毎フレームごとに全員のゲージを溜めていって満タンになったら行動
下はコンソールでの例(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");
}
}
584 :
デフォルトの名無しさん :2006/02/01(水) 18:21:13
おお、なんかおもれ〜 ところでなんか無駄にincludeされてない?
586 :
デフォルトの名無しさん :2006/02/01(水) 18:26:07
それは種変えればいいだけじゃね? 確かにこのままだと毎回同じだけどさ
>>571 自分でわかって使うならそれでいいけど、宿題ならそれだと減点されるぞ。
ヒント:
(1): ファイルのある行が 256byte以上ある時
(2): ファイルの中身に '\0' が含まれていたらどうする?
(3): エラー処理
答えは後程。
>>587 (1)は問題無いな。読みきれなければ次のfgetsで読み込めるから
じゃあこれやっとこうよ。無駄にincludeが多い気がするけどまあいいか #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"); } }
590 :
デフォルトの名無しさん :2006/02/01(水) 18:31:36
学校の宿題程度ならそんなんで減点ないと思う
591 :
583 :2006/02/01(水) 18:33:32
>>589 せめてforの外でsrandしてくれw
というか自分のコードは、
あくまで概念的な説明でいい加減に出したから真面目に弄られると困るw
593 :
583 :2006/02/01(水) 18:41:41
>>592 単に
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の宣言はどこかでしてなー)
>>583 かっけえー Cでかっこいいとおもたのはじめてあるよwww
>>106 >>333 106のダイクストラ法のプログラムってさ
グローバルで定義した配列p[]をshortestpathの中で一回使ってんじゃん
あれって何の意味があんの?
実はこの問題、本当は最短経路求めるはずなのに333のプログラムだと最短経路のコストしか分かんないんだよね
それを求めるときに使うのかなって思ったんだけど
ちなみに課題の提出は終わったから興味本位な
597 :
587 :2006/02/01(水) 19:35:14
>>588 (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);
}
while(1){ char *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; }
599 :
デフォルトの名無しさん :2006/02/01(水) 19:38:21
>>571 >>576 横からなんだけどDDした場合って、explorer.exeかなんかがそのDDしたバイナリファイルをプロセス作成してて
カレントディレクトリの位置が親プロセスを受け継いでるから、バイナリの同ディレクトリにout.txtが出力されないって事なの?
32APIでスマソ
>>596 p[]を使うかどうかはわからんが、全てのノードへの最短の長さが
わかったら、逆に辿れば目的地までの最短経路は簡単に出るだろ。
>>596 それで認める?
簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか
まあ そういう使い方しないとしてもp[]の使い道の意見求む
603 :
sage :2006/02/01(水) 20:58:56
[1] 授業単元:プログラミング演習 [2] 問題文:gnuplotのようにファイルの数値データを読み込んで自動的にグラフを生成するプログラム データの値(X座標とY座標)が書き込まれたファイルをまず用意し(?.dat)、プログラムを 実行すると、 データのファイル名、グラフの種類(点、折れ線、など)を尋ねる。 入力したデータを読み込んで、グラフをグラフィック表示する。作図の範囲(X座標とY座標の範囲)は、 データから自動的に計算し、データ点が全て描かれるようにする。その際に、X軸とY軸も入れること。 [3.1] OS:Linux [3.3] 言語: C++ [4] 期限: 2月2日まで どうかお願いします。。
604 :
602 :2006/02/01(水) 20:59:42
> それで認める? ?なにを? >簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか ?なぜ手計算? まあ、いいわ。スレ違いだ。やめておくわ。
606 :
デフォルトの名無しさん :2006/02/01(水) 21:11:32
だったら最初から書くなよ・・・
608 :
602 :2006/02/01(水) 21:14:27
>>605 違ってたら悪いけど
目的地から最短経路の一つ前の節点は
((目的地への最短経路) - (目的地に接続されている点への最短経路) ) == (目的地と接続されている点との距離)
である点を探してスタート地点まで戻るんだろ?
それを手計算って呼び方にしたのが悪かったのかも知れないけど
>認める
っていうのは最短経路を求めるプログラムとして認めるかってこと
ゴメン色々と言葉足らずでした
[1] プログラミング入門 [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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ポインタの使い方など理解できていないので出来れば無しで。 よろしくお願い致します。
610 :
デフォルトの名無しさん :2006/02/01(水) 21:45:31
2次元配列にどうやって入ってるんだ? 2バイト文字出力したかったら printf("%c%c",str[i],str[i+1]); ってやるんだよ
>>609 入ってる文字は日本語(2バイト文字)だけ?
それとも半角英数字と日本語ごっちゃになってるのも含めるの?
612 :
デフォルトの名無しさん :2006/02/01(水) 21:48:18
前々から思ってたけど仮に2バイト文字と1バイト文字入り乱れてたらどうやって見分けるんだ?
英数字がASCIIな場合文字コードの違いで分解すればおk
setlocale, mbstowcs, 添字アクセス
方法あるのかコード表みないとわからんな
添え字アクセスって何のことかと調べたら 添え字アクセスの事ね('∀`;)
コード依存だからなぁ・・・ JIS,SJIS,EUC,utf-8,utf-16とかいろいろ。
>>610-611 char str[][51];
には外部のPGより出力されたのを受け取り入れてあります。
今度は、その受け取った文字(主に漢字で2バイト文字のみ)を
1文字づつに分解して、外部のPGに出力し使用する予定です。
VBAなどでは、文字の取り出し関数があったので困らなかったのですが
Cではそのような関数が見つからなくて・・・_| ̄|○
一度、printf("%c%c",str[i],str[i+1]); で試してみようと思います。
宿題スレなんで、そこんとこよろしくな・・・・。
つstrstr
>>603 「gnuplotのように」ってあるけど、gnuplotを使っていいのか、
描画も実装しないといけないのかわからん。
622 :
603 :2006/02/01(水) 22:22:26
>>621 gnuは使わずにお願いします すいません描画を実装とはどういう意味ですか?
コンソールに*をかけばいーんでね?
Linuxで〜GUI書けというのか
625 :
603 :2006/02/01(水) 22:27:32
>>623 すいませんそういうのではなくグラフィック関数をもちいたものでお願いします
グラフィックを扱うプログラム(例題とかサンプルとか)を渡されているはずなので、それをUP。
>>618 #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;
}
628 :
603 :2006/02/01(水) 22:33:51
#include <iostream.h> // 関数のプロトタイプ宣言 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() ; // 描画し、ウィンドウ内をマウスでクリックするまで待つ }
独自ライブラリか・・・オラ知らね。
さすがにこれは無理だろw
軸の値(文字列)の表示に調整が要りそうだが、 描画領域の幅と高さとデータの最小最大をあわせて・・・ってやりゃぁできるだろ・・・
[1]授業単元:プログラム基礎 [2]問題文: int a[]={65,82,47,98,100,83,71,39,54,26}; という表現を用いて、あらかじめ配列に初期値を与えておくことができる。 この配列aの要素の最大値と最小値を求め、表示するプログラムをつくりなさい。 [3] [3.3]言語:C++ [4]期限:2006年2月2日午後4時まで よろしくお願いします。
>>633 #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;
}
>>633 真面目に答える気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;
}
637 :
635 :2006/02/02(木) 00:01:32
あ、C++だったのか。勘違いした。
>>633 #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;
}
配列の要素数求めるのって、どうやるんだっけ?
>>638 sizeof(a) / sizeof(a[0]);
一行にしてみるw for(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++);
641 :
638 :2006/02/02(木) 00:09:48
>>639 どうもです。
どうもそのようですね。
>>635 見て、勉強になりました。
そこがどうにかならないか考えてたら
皆ハイエナのように飢えてるんだから…_| ̄|○
C++の問題は、知らないこと力技でやったら恥ずかしい目にあうから苦手。
真面目に答える気0 第二弾 #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; }
こんなんいかがでしょう、ししょー #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; }
644 :
575 :2006/02/02(木) 00:38:04
575番です。 お願いできないでしょうか。
646 :
635 :2006/02/02(木) 00:43:40
>>642 ,643
そういう遊び方もあるって勉強になったよw
>>644 具体的にどんなコードが必要なのかよくわからないから、そこを
詳しく書けばいいんじゃない?
>>643 なるほろー、探す値が一個だからmultisetじゃなくてsetで十分なのか。
648 :
255 :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
なんてこった!
真面目に答える気ゼロで書いてても誰か別の人が書いてくれると思ったのに
>>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;
}
配列ソートして頭と穴を返すようにしてみると、ちょっとだけバカになった気がします。
俺はstd::set<>を使ったのが一番綺麗だと思う
これでどうだ。 #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]))); }
>>653 C++のイテレータ的な感覚で使ってるなw
無茶苦茶いいじゃねーか(*´д`)
ネタ回答が多いのぉ。心に残るネタ回答を教えてくれ。 俺はどのスレか忘れたけど、「適宜,対応」のセンセ降臨が好きだった。
657 :
655 :2006/02/02(木) 02:32:51
あ、ミスった、O(2^N)だw しかしネタ回答は書くのも見るのも本当に楽しいなぁ
短くするのにチャレンジ int 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;}
よっしゃ、対抗する。 多少の警告は無視して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);}
もはや宿題ではなくなっている。ワロス
662 :
661 :2006/02/02(木) 03:54:44
ってよく考えたら、条件満たしてないプログラムかよく分からんしなぁ… 条件を満たしていない「かも」ということにしておこう。 引き続き2以降の課題にも取り組んで見ます!
>661 ( ゚д゚)
664 :
661 :2006/02/02(木) 04:35:49
よし!2番もそれっぽいのができたぞ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1593.txt で、このプログラムが正しく計算できない場合を考えると…
・分子に負の数を入れたとき、四則演算の解で分母に-がくっついて出力されてしまう場合がある
→出力する前に分母の方に-をくっつける
・数値を読み込むときに分母に負の数を入れた場合計算結果がおかしくなる。
→分母に負数が入力されたときに警告文を出すか、計算前に分子の方に-をくっつける処理を行う
(・分母に0を入れたときっていうのも、一応計算が正しく行われていないことになるのかなぁ…)
→分母に0を入力したときは警告文を出す
もしかしたら他にも不都合な点があるかも知れんが、とりあえず上の3つに対してのプログラムを書いてみます。
いま自分も気づいて、そのことを書き込もうとしたら
>>665 氏に指摘されてました…
ちょっとプログラム書き換えてみます
667 :
664 :2006/02/02(木) 05:08:55
>>644 2進数の保持の仕方は? 文字列? int?
サイズは?(=最上位ビットは何ビット目?
小数点の位置指定は?
値の指定方法は?
intに格納した値を8bitの2進数と解釈するものはできたけど、回答になるのかどうか分からん。
>>657 これは O(N) だよ.というか関数型プログラミング言語では普通にされる書き方.
#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])));
}
>>669 なるほど
それだったら納得
勉強になったよ
ありがと
673 :
644 :2006/02/02(木) 11:54:05
>>668 質問に行きましたところ、固定小数点の整数でいいようです。
格納についてはintで、サイズも8bitで良いとのことでした。
情報不足で申し訳ありません。お願いします。
674 :
657 :2006/02/02(木) 12:06:46
>>670 C++で言うところのstd::accumulate相当の処理ですなぁ
オーダーも下がるし、コードは明示的ループより読みやすいし、
末尾再帰は偉大なりって感じですねー。
ボーランドのコンパイル使ってます。お願いします 下のプログラムを動かしたんですが、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); }
printf("a="); scanf("%d",&a); printf("%d\n",a); printf("b="); scanf("%d",&b); printf("%d\n",b); こんなんじゃだめか。だめだろうな 二つ目はスレ違いだから該当スレを探して聞いてくれ
677 :
デフォルトの名無しさん :2006/02/02(木) 13:22:27
#include<stdio.h> void 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); } 変数の初期化はしといたほうがいいと思うよ。
678 :
えび :2006/02/02(木) 13:26:37
[1] 授業単元: [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 ) これを配列に読み込んで表示を行うというプログラムを考えてもらえないでしょうか。 よろしくお願いします。
680 :
デフォルトの名無しさん :2006/02/02(木) 14:06:48
681 :
675 :2006/02/02(木) 14:09:22
>>676-677 ありがとうございます。初期化したので妙な数値は出てこなくなってデフォルトでa=0 b=0と出てくるようになりました。
けど僕がしたいのはa= b=のみをまず初めに表示させて、その後に数値を入力するようにしたいんです。
例えば
a=10
b=20
合計30
平均15
というようにしたいのです。
初期化して実行してみると
a=0
10
b=0
20
合計30
平均15
となってしまいます・・・
後、totalとaverageの記述が無意味になってたので少し書き換えてみました
確かに初期化はしたほうがいいな、うん
683 :
675 :2006/02/02(木) 14:09:41
#include<stdio.h> void 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); }
684 :
デフォルトの名無しさん :2006/02/02(木) 14:22:15
[1] 授業単元:プログラミング [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日まで どうぞお手柔らかにお願いします
685 :
Kenji ◆3yMYCQiOMU :2006/02/02(木) 14:24:30
論理的に意味のある値で初期化するのは大切だが、 根拠の無い適当な値で初期化するのは強く反対だなぁ とりあえず0で初期化とかその値に根拠があるのか? ふざけてるのか? と思ってしまう。
>>684 データはどうやって読み込み方は?
プログラム中で身長が書かれたファイルを読み込むの?それともリダイレクションでいいの?
688 :
687 :2006/02/02(木) 14:44:07
日本語がおかしかった…スマソ
689 :
684 :2006/02/02(木) 14:46:27
fgets(), sscanf(); で、データを自分で入力して読み込むと思います。
>>686 禿同 とりあえず 0 とかやってると、いつか 1 で初期化しないといけないところで間違えるよ
691 :
Kenji ◆3yMYCQiOMU :2006/02/02(木) 15:03:01
>>691 岡山大学 工学部通信ネットワーク工学科2年 乙
>ほぼ習っているので特にありません だったら自分でやれと言いたい あと不正コピーは削除しとけよ
こんな反応冷たいってことは難しいのか面倒なのかのどっちかか 見るのやめようっと
>>685 AMとかFMでサンプルが出されているはずなので、それをup
>>619 待ち行列はググればソース付きのレポートがある。ハフマン法はソースがある。
697 :
デフォルトの名無しさん :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"); } }
void main() 工エエェェ(´д`)ェェエエ工工 scanf("%d",ten); ( ゚Д゚)...... if("ten >=99 && ten <= 100") ......(゚Д゚)!!
>>697 ifの中身が常に真だから
つか何で""で囲んでるんだお前
700 :
697 :2006/02/02(木) 15:35:27
自分で気づいたとこだけ修正しました。 scanfのとこで&追加。そして99のとこでスペース追加 けどまだ無理ですorz
>>700 だからなんでifの中身文字列にしてんだっつーの
宿題じゃないなら入門書かサイト読み直せ
てかこのレベルはこのスレで聞くことじゃないだろwww
705 :
697 :2006/02/02(木) 15:38:21
>>699 ありがとうございます!
""つけてしまいました。これはずしたらいけました。
>>698 void main()って何か変ですか?
>>705 別に構わないけど一応mainの戻り値はintと決められてる
707 :
697 :2006/02/02(木) 15:41:48
>>706 参考になります。ありがとうございます。
宿題というか、学校の授業乗り遅れたので今ひっしこいて遅れとりもどしてます・・・
ANSI規格に書いてあるのは int main(void) {/*...*/} int main(int argc, char *argv[]) {/* .... */} の2つだけなんで、他の書き方してたら、「やばいかなぁ?」という印象をもつ。 main() {/* ... */} void main() {/* ... */} int main() {/* ... */} int main(int ac, char **av) {/* ... */} 最後のは規格と同じ意味だけど、わざわざ表現変えてるから我の強いプログラムだろうなって。
「このスレは楽しいな」 ヽ/⌒ヘ~ ., 't,_,ノ丶 , - ─- △ 、 / ! '` 巛(リノ))ヽ\ヽ▽ ヽ えへへへへ ,/ ● L_/ 'i, i えへ / ″ l ,/ ● i川 えへへへへ ノ从 し ii ″ 丿从 〜 △v |`:、\ ii __,/__ノi 厦 'i、 ̄~)) ij((____,ノ ^- i' ' ヽ| `i ∧∧∧ i_____ 'l_|、 ( ) ノ ,ゝ ~ T ~ ~^''!, ̄ T T ̄ ,!_ <ヽ | // \ l, ~''‐--::,,⊃ ) ) \| ノ
なんでmainて0個OR2個の引数なんだろう 1個の引数あってもいいじゃない
3個ってOSもあるぞ。いちおう。
0〜100までって文字を出力して入力を促しているから ifの条件は99点以上ってだけでもいいような希ガス
3個〜〜〜いくらでもOKとかないかな いくらでもあったところで使い道思いつかないんだけど つかargcの方って何が入るの? 使った記憶がないんだけど
>>691 岡山大学って難しいことやってるんだな…
同じ2年&&同じ旧国立大学なのに、やってることがこんなに違うとは
なんか自分は将来社会の役に立つことができるのかどうか不安になってきてしまった…
連投スマソ
>>713 argc には引数の数+1の数か代入されてますYO!
>>715 使い道わからんYO
使わないと警告でるけど別に問題ないよNE?
CUI環境を考えろ
>>716 別にargvを解析しないプログラム(またはargv[argc]==NULLを利用する)なら
使わなくても良いよ。
有名どこのサンプル #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;}
argcを使わない版 #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;}
argcが無いとかなり面倒な例 #include<iostream> #include<numeric> int main(int argc, char *argv[]) { std::cout << accumulate(argv,argv+argc,std::string());}
Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
723 :
デフォルトの名無しさん :2006/02/02(木) 17:15:43
50%スレ違い
727 :
デフォルトの名無しさん :2006/02/02(木) 19:01:52
[1] 授業単元:プログラミング演習3 [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するのか 混乱してしまいました。どうぞよろしくお願いします。
/* 枝狩り済み再帰関数使用 */ #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;}
>>727 #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);
}
730 :
729 :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)); }
[1] 授業単元:プログラミングB [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日まで どうぞお手柔らかにお願いします
アンカーすら出来ずに同じことを二度も書く低脳などスルー
簡単な課題なのに答えてもらえないのには、何か理由があるではないかと考えてみたらどうかね
735 :
デフォルトの名無しさん :2006/02/02(木) 20:10:29
>>730 参考になりました!!ありがとうございますm(__)m
>>731 コードの再利用っと
#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");
}
}
てかお前らカスなんて相手にしてないからスルーしてくれないか?www
740 :
デフォルトの名無しさん :2006/02/02(木) 20:48:53
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ライフゲームのプログラムをつくりなさい ライフゲームは、菌などの増殖のシュミレーションに用いられるもので、縦横にしきられた空間(セル) に生命が発生するか、消滅するかを一定のルールに従い判定し、変化させていくものである。 ルールは、ある時刻において空いている場所に隣接する3つのセルに生物が存在したら、そのセルにも 生物を発生させる。逆に生物が存在したセルでは生物は、生物が存在するセルと1以下および4以上隣接する場合、そのセルでは生物は消滅させる。 これを時間の経過と共に次々と繰り返す。 生物が存在するセルの初期位置をいろいろ工夫して、できるだけ変化が長く続くものにしなさい。 [3] 環境 [3.1] OS Windows [3.2] lcc win [3.3] 言語: C [4] 期限: 今週中 よろしくおねがいします。
>>740 初期配置はこれがお勧め。
■■
□■■
□■
>>741 むしゃくしゃして書いた。
今は満足している。
744 :
Kenji ◆3yMYCQiOMU :2006/02/02(木) 21:02:04
彼女やバイクで舞い上がってるのも分かるが、自力でやることも必要だと思うぞ。
>>744 面倒なだけで、自分でできると思うぞ。要求されているのは
静的ハフマンらしいが、出てくる回数数えて、木を繋ぎかえるだけだし。
待ち行列は手順が書いてあるから、それをモンテカルロみたいに
やれってことなんじゃ?
ついでに書くと、単純なフーリエ変換はFT。FFTは高速だから
ちょっとアルゴリズムに工夫がある。
アルゴリズム辞典にハフマンはあった気がする。
>>740 やってみたんだが何か変だ
もしかして隣接ってななめ含む?
>>740 初期配置適当
もしかしてコンソールまずかった?
#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("");
}
}
void live(int ban[MAX][MAX]){ int 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; }
>>753 誕生の条件は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;
}
}
>>754 あらま間違えた
ban[i-1][k-1] = cnt==3 || mona[i][k] && cnt==4;
こうゆう文初めて見たんですけどこれってどんな意味ですか?
>>755 単純に書くとこんな感じ。
条件式は真なら1、偽なら0なのを利用。
誕生とか死亡とかは無視して、次にそこにセルが存在するかしないかだけを考えて書いた。
if(cnt==3 || (mona[i][k] && cnt==4 ))
ban[i-1][k-1] = 1;
else
ban[i-1][k-1] = 0;
>>755 「cntが3に等しい或いは『mona[i][k]が0でなくcntが4に等しい』」ならば1、そうでなければ0をban[i-1][k-1]に代入。
758 :
756 :2006/02/02(木) 22:54:20
本当はもっと分かりやすい、こういう式だったんだけど、 適当に式を展開して単純な形に変形してたりする (mona[i][k]==0 && cnt==3) || (mona[i][k]==1 && (cnt==3||cnt==4) );
>>756 式の意味がわかったけど何でそれでうまく行くのか理解するのに時間かかったw
なるほど偽は0だと知ってたけど真も決まった値なんですね
[1] 授業単元:プログラミング演習 [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まで表示できなくてもよいので・・・)
>>759 A>B 、A==B、 !A、 A&&B 、A||B
などの論理式では真が1で偽が0,
他の演算の場合は違うからその点だけ注意な
>>760 IV(4)やIX(9)とかはいらないんだよね?
#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;
}
>>763 例の45が正しく動いてないが
ついでにそのmainの引数は何者だ
763です しまった、よく見たらやっぱりIVやIX表現がいるんじゃないか。 やり直しだ。
766 :
760 :2006/02/02(木) 23:23:04
>>763 え!
2...II
4...IV
みたいにはしてほしいんですが・・・
あと、実行するとエラーが出ちゃうんですけど・・・
>>760 良い子も悪い子も真似しちゃ駄目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;
}
768 :
760 :2006/02/02(木) 23:25:28
>>767 いや、あの〜 人が入力した数字をローマ数字に変えて出力するんで、
勝手に全部出力されても困りますです・・・
769 :
767 :2006/02/02(木) 23:29:01
>>768 ( ´゚д゚`)えーーー
main関数をこれに置き換えてちょ。
int main(void){
int n;
printf("Input number: ");scanf("%d",&n);
printR(n);printf("\n");
}
>>767 ってwwwちょwwwwおまwwwwどんなswichの使い方やねんwwwwww
772 :
760 :2006/02/02(木) 23:33:12
>>767 でも、すごいですね・・・ちょうどswitch文習ったとこですw
私出てないので分からないんですが
半分ネタ解答だなww
>>772 待て待てwwwそれ出したら教授にぶっ飛ばされるぞwwwwww
簡単で馬鹿らしい問題はgoto文使いまくりで回答しようと思っても お前らがswitchやらforやらwhileなぞ使う所為で先に答え書かれてしまうわ
>>775 お前マジ頭いいな
俺もこれから見習うわ
777 :
760 :2006/02/02(木) 23:36:23
>>774 うはwwwww
switch(){
case
}
を使ってるんで、完璧じゃん と思ったのに・・・
6日まででしょ? まだまだ余裕だ〜ね
779 :
760 :2006/02/02(木) 23:39:31
あの〜、
>>774 をスマートにできるのであればお願いします!
十分短くていいと思ってしまう私・・・
781 :
767 :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); } }
てかこうゆうswitch文の使い方ってアリ?
久しぶりでWindowsのプログラム組んだ。 ライフゲーム組むのに2時間半かかったorz バグありっぽいし。
760の問題がわからんのだけど 45の場合 X(10)L(50)V(5) ??? まぁローマ英数字さえも良くワカランのだけど
>>781 ホントすごいですね!!
すぐに違った感じの答えも分かるなんて・・・本当にありがとうございます!
>>784 X(10) XX(20) XXX(30) XL(40) って感じに考えていただければいいと思います。
Iは1、IIは2、IIIは3ということを考えると、Iをその数、出力すりゃいいんだろう。
>>787 今wiki見てきたけどXLってL-Xって意味なのね
>>788 お前、それだと2なら1を横に2個並べればいいんだろって考え方だぞwww
どうして?
その桁の1を表す文字をa,5を表す文字をb,一桁上の数を表すものをcとすると、 0.表示なし 1.a 2.aa 3.aaa 4.ab 5.b 6.ba 7.baa 8.baaa 9.ac ってことだろ。
>>760 #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 の方がうまいな
MFCアプリかお しかし見てて楽しい
>>795 どうもありです。
すんごいスマートなできあがりですねぇ!
[1] 授業単元:基礎プログラミング [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日まで ヒントだけでもいいのでお願いしますです
まずその生徒の身長データが格納されているファイル乃至バッファを提供しなさい
>>801 別に3人や5人でもいいのでお願いします・・・
おまえ、これで何度目だ
だからー 身長のデータはどうやったら得るのよ プログラムの最初に30人分乃至適当な人数の身長データを入力させるのか それとも特定ファイルから身長の値を読み込むのか。 もし後者ならそのファイルをうpするか、どの様に値がファイルに記録されてるのか教えろって
>>799 それって0センチ〜3メートルとかまで対応しなきゃダメ〜?
>>805 いや〜、そこまではしなくてもいいと思います
#include <stdio.h> int main(void) { printf("150..155 6 :****** \n"); printf("155..160 13 :************* \n"); printf("160..165 11 :*********** \n"); return 0; } 実行は./a.out <datafile データファイルには30人分のデータを入れておくこと。 >800 うん。重い。正直、イカンと思う。気が向いたら、高速化してみる。 (メモリコピーじゃなくて、描画がネックっぽい)
適当だと?ふざけるな
>>809 何が聞きたいのか分からないんですが・・・
身長を入力するのは、 fgets(), sscanf(); などを使って
自分で適当に入力できるようにすればいいだけなんですけど・・・
#include <stdio.h> int 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; }
>>811 「適当」の意味がわからん。たとえば
160cm
1.8m
150inch
7744寸
…
みたいな入力されたら困る。
>>808 はい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;
}
815 :
814 :2006/02/03(金) 00:23:04
forの中身i<30にしといて
816 :
812 :2006/02/03(金) 00:24:03
うは、人数30人を無視した上に身長全員整数値にしちまった。
>>812 身長は整数値でもいいと思いますが、while()内の eof って何ですか?・・
なんか久々に楽しいなこのスレ
出力間違ってた #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; }
End Of Lifeだった気がする。
END OF FINALFANTASY
Each Of File
826 :
812 :2006/02/03(金) 00:46:00
>>817 失礼、失礼。while(!feof(stdin))の間違いだった。
>>826 う〜ん、そこを変えても無理みたいです・・・
>>820 すみません、アンカーが違う人だったので別のプログラムだと思ってました・・・
どうもありです。でも、出力は全部じゃなくて入力した値付近のだけをしてほしいんですが・・・
(0のところは出力しない感じで・・・)
>>829 ちぇ・・・それじゃ面白くないのに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;
}
832 :
673 :2006/02/03(金) 01:04:04
>>830 本当にどうも有難うございます。
説明不足などすみませんでした。
反応はや!Σ(゚Д゚;
834 :
デフォルトの名無しさん :2006/02/03(金) 01:22:00
[1] 授業単元: プログラム演習 [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] その他の制限: 特になし 全然わかりません!明日までで途中でもいいので、皆様の能力をおかりしたいです。 よろしくお願いします。
それなんかもうC言語の宿題じゃない・・・(゚Д゚;) どうゆう出力をしたいのか それを計算するにはどのような計算手順を踏めばいいのか教えれ
輝度地分布図ってなによ。要するにレイトレじゃなくて?
>>796 gccでapiだけでつくったっぽいね。
このサイズってことは、libc使っていないかな。なかなか技師と見たw
setPixelなんて聞いた瞬間やる気うせるわな 無料でやるのはコンソールが限度
842 :
834 :2006/02/03(金) 01:51:39
むずいっすね、頑張ってみます。 ほかにもやることがあって、もし暇な方がいたら少しだけでもやってみてくれないでしょうか? ほんとすいません。
というかスレ違い APIスレ池 アルゴリズムほしければ数学板池 無理だったらお前の頭が悪い
844 :
834 :2006/02/03(金) 02:00:50
まじっすか、Cの宿題なんでここかと思ったんですが・・・ すいませんでした。
ここの住人はAPIは相当気が向かないと叩かない 基本的にCで作れるのはコンソールだからコンソールだけ
濃淡のみのrawファイル出力したりとかは禁止な
>>831 どうもありです!
ソレを求めてました!w
848 :
デフォルトの名無しさん :2006/02/03(金) 02:34:00
これはCスレじゃなくて数学とかの方面で聞いたほうがいいかと こっちは数値計算はちょっと・・・
850 :
デフォルトの名無しさん :2006/02/03(金) 02:52:05
プログラムの動きのコメントだけでも結構ですので分かる方いればお願いしますm(_ _)m
>>848 確か"numerical recipe"とかに書いてあったんじゃないかな。
(英語でよければ、オンラインで読めたはず)
最終的な式だけ書いてあるから、本を読んだ方が早いよ。
2の倍数の時は、組み合わせで計算の数が減らせるって話だったと
思うけど、詳細は忘れてしまった。
853 :
848 :2006/02/03(金) 03:08:38
ありがとうございます。そのサイトを読んで考察を付けたいと思います。
854 :
848 :2006/02/03(金) 03:22:10
しかしプログラムのコメントの仕方がよく分かりませんので誰か分かる方いればよろしくお願いしますm(_ _)m
855 :
834 :2006/02/03(金) 03:27:55
>>840 さん
おそらくできたっぽいです、かなり参考になるサイトですね。
助かりました、これでなんとか単位とれそうです。
ありがとうございましたー。
>>856 眠れん・・・
ライフゲーム、試してみたけど面白いね。前よりも数が増えてるw
タイム(?)もついたみたいだけど、平衡状況になったように見えても
終わらないね。これは、そういうものなのかな?
あと起動するとCPU駆動率100%になるので、どっかでsleep入れた方が
いいのかも。最後に・・・スレ違いスマソ
858 :
デフォルトの名無しさん :2006/02/03(金) 05:21:58
859 :
アゲハ :2006/02/03(金) 10:16:03
860 :
デフォルトの名無しさん :2006/02/03(金) 12:54:52
[1] 授業単元:情報処理 [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] その他の制限:基本的なことのみ
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):分数を分子、分母をメンバとする構造体で表現する。 標準入力から分母、分子のデータを受取り、分数を通分した結果を表示するプログラムを作成せよ。 通分するには分子と分母の最大公約数を求める必要がある。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2/4 [5] その他の制限: #include は <stdio.h>のみでお願いします。
862 :
デフォルトの名無しさん :2006/02/03(金) 13:08:54
[1] 授業単元:計算機実習 [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日 よろしくお願いします。
863 :
デフォルトの名無しさん :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); }
あ、
>>861 宛ね
あと、構造体の後にくっついてるfraction_tは消しておいてください
せんせー、ライフゲームに熱中しすぎて、時間が無駄に過ぎていきます!
コンソールGAME作ってるから宿題にこたえる気なんて起きない
>>858 今から2時間でできるかわからんけど、手をつけてみる。
できなかったらごめんね。
今ぐぐって気が付いたんだが、シェアウェアのライフゲームって 結構あるんだな
>>856 いつからだろう・・・・動きが止まってしまったのは・・・
ちょっと目を放した隙にゲーム終了orz
スレ違いネタで申し訳ないが、需要があるようなら、初期配置指定可能なライフゲーム上げるけど・・・
誰かint[]とその大きさint cntを突っ込んで、周波数成分でてくるよーなライブラリ知らないか? というよりVBから使えるフリーのFFTライブラリを ('A`)ソースつきで
面白そうだなァ俺もちょっとAPI叩いてライフゲーム作ってみよう
875 :
208 :2006/02/03(金) 23:34:53
[1] 授業単元: Cプログラム基礎 [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>だけ。 よろしくお願いします。
876 :
868 :2006/02/03(金) 23:38:17
>>858 正直、スマンカッタ。間に合わなス
個人的には↓もあわせてもうちょい楽しみます。
>>871 d
大事なもの貰った気がする。
>>875 #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`)
SH4→SiH4 ('A`)
>>858 へ(へ´∀`)へ 流石に残り10分じゃ無理な気がするがちょっと頑張ってみる
>875 残念、C++版なら手元にあったんだが。 #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 ); }
882 :
sage :2006/02/03(金) 23:58:46
>>871 一番大事なアルゴリズムの部分が理解できました。
考えてくださった皆さん、ありがとうございました!!
883 :
880 :2006/02/04(土) 00:00:46
>>882 乙
('A`) 俺、頑張ったけど無理だったよ…
>>878 コンパイルが通ってしまうあたり罠だな。
一番の罠は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));
}
('A`) しまった!!!!! すまん・・・ちょっとしたミスだ(orz
といいつつ、自分もミスった。 printf("%d",A(m,n));
('A`) なんか "m"と"n" の順番よりも "n"と"m" の順番の方が正しく思えてくる罠ですた
888 :
875 :2006/02/04(土) 01:06:35
助かりました!皆さん有難うございます(-人-
>888 明日までにA(4,2)を計算して提出するように。
>>889 今まで計算した値をa[][]の配列に入れるようにし、0じゃなかったら
その値を返すようにすれば、A(4,2)程度ならぎりぎり計算できる。
まともに計算したら、多分一週間たっても終わらないのではないかと。
それか ghc でも使うか。
891 :
889 :2006/02/04(土) 01:53:27
>890 ま、試しにやってみそ。
へ(へ´∀`)へ 頑張ってVB6で展開しようとしている俺への挑戦状と見た
↑('A`)飽きた
>>890 ackermann は遅延評価しても意味ないから haskell でも変わらんよ
>>894 たぶんメモ化を期待してるんだと思われ。
VBの案件がこの世から消え失せますように
そんで
>>892 のようなVB厨がこの世からいなくなりますように
898 :
sage :2006/02/04(土) 04:17:07
899 :
デフォルトの名無しさん :2006/02/04(土) 05:04:19
900 :
デフォルトの名無しさん :2006/02/04(土) 06:36:36
幼稚な質問なんですけど、 a=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の素数を求めるんですが。。
#include <stdio.h> int 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; }
[1] 授業単元:情報処理基礎 [2] 問題文(含コード&リンク):番号と得点を読み込んで、得点が70点以上なら“合格”、70点未満なら “不合格”と、番号、得点と共に出力するプログラムを作れ。(if文を使用すること) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C [4] 期限:05年2月5日19:00 どうか、よろしくお願いします。
>>903 読み込みはキーボードからでいいのかい?
>>901 #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;
}
908 :
903 :2006/02/04(土) 10:42:08
909 :
デフォルトの名無しさん :2006/02/04(土) 10:50:05
>>898 しらんがな
#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);
}
>>909 横型検索ってなぬ?
親→子をFIFO順に入れたQueueを対象にして探索しろってこと?
[1] 授業単元: プログラミングT
[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] その他の制限:なるべく簡単なプログラムでお願いします。
date 【1-名-1】 日付、年月日{ねんがっぴ} 【1-名-2】 期日{きじつ}、日取り{ひどり} 【1-名-3】 年代{ねんだい}、時代{じだい} 【1-名-4】 人の生没年{せいぼつねん}、物事{ものごと}の始まりと終わりの年 【1-名-5】 デート 【1-名-6】 〈米話〉デートの相手{あいて}、付き合っている異性{いせい} いったいどーゆー意味で名づけたんでしょうか?
915 :
909 :2006/02/04(土) 11:45:57
>>911 幅優先探索です。
2文探索木で深さの浅いところから表示させたいのです。
横型検索でググってみても出なかったんで(orz 普通に横型探索なのな というわけで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の子をキューに入れる }
917 :
916 :2006/02/04(土) 12:01:58
>>915 俺VB厨だからCのmalloc&free苦手
それを克服するために今書いてみたから、そのへん注意してください
918 :
909 :2006/02/04(土) 12:25:54
>>917 ありがとうございます。参考にさせていただきます。
919 :
909 :2006/02/04(土) 12:27:24
>>917 ありがとうございます。参考にさせていただきます。
1] 授業単元: オブジェクト指向言語 [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時まで 課題を出されたのですがこの一問だけできなくて、すいませんどうかよろしくおねがいします。
ファイルの中身不明なのにどうせいと?
922 :
920 :2006/02/04(土) 13:29:22
すいません、ファイルの中身は 613 10255 Tottori 762 10034 Shimane 1528 49505 Yamaguchi 1951 62860 Okayama 2879 65523 Hiroshima です。長くて一度にかきこめなくてすいません。
>>922 #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;
}
出力間違えた #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; }
>>889 なんとかA(4,1)までは計算できるようになったが
A(4,2) = 2^65536 - 3 なんて数、そもそもどうやって格納しときゃいんだて
リストw
>>909 反復深化 つかその例おかしいぞ (__で始まる名前はどこで使っても未定義動作 & return文を忘れてる)
/*--- 全ノードのデータを表示 ---*/
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++)
;
}
928 :
920 :2006/02/04(土) 13:58:41
>>924 すごく助かりました!今から提出してきます。
sscanfって授業で出てくるもんだろうか・・・・・
わ・ざ・と♥
授業単元にはだれも突っ込まないのか。
>>931 バロスwwwwwwwwwwwwうぇっうぇwwwww
C++を学ぶ前にCを学んでいるんじゃないのか? と思ったがもうそんな時期は終わっているはずだよな まあ授業名と内容が異なるのは高校・大学ではよくあることだし
しかしC言語はオブジェクト指向ではない
できないことも無いがする意味がない
なんだかCで関数ポインタをゴリゴリやって実装してるのを聞いたことがある乙
937 :
913 :2006/02/04(土) 15:53:32
>>914 特に意味は無いと思います。
自分でつけた訳ではないので・・・
そんな長大な整数をどうやって計算したのかのほうが、興味がある。
>>939 巨体整数演算
javaなりrubyなり、C++なりで実装されてるだろ?
>巨体整数演算 イタタタ
巨体ktkrwwwwwwww
944 :
デフォルトの名無しさん :2006/02/04(土) 19:43:52
[1] 授業単元: 物理シミュレーション [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で表示したい。
問題文の意味がさっぱり理解できない
946 :
862 :2006/02/04(土) 20:09:32
[1] 授業単元:計算機実習 [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日 よろしくお願いします。
(リングは不明だが)10x20=200個の質点を半径0.5万光年以内に収まるよう、位置を与え、それぞれ、質量と初期移動量を与える。 万有引力の法則にのっとって、質点の移動をシミュレートせよ。 という意味だと思う。
>>946 #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;
}
>948 いやいあマテ、それは標準入力から、であって出題に含まれる”キーボードから”は満たせんぞ。
>>950 ジョン、それよりも「キーボードのみに限定されていないので、仕様を越えている」じゃないか?
まあ・・・細かいツッコミだなぁ・・・ 標準入力からっていうと、入力を促すメッセージを出さなくていい。 キーボードからっていうと、入力を促すメッセージを出す。 って意訳してるけど。まあ、あれだ。イチャモンに近い。>950 ついでに、次スレ頼むわ。
953 :
948 :2006/02/04(土) 20:39:55
int a,b,c; puts("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;} 脳内コンパイルだから動くかどうかしらね ついでにユークリッド互助法もうろ覚えなんであってるかどうかしらね
ってC++か おまけに汚いし恥ずかしいのぉ
誰もGCMに突っ込まない件について
たんに末尾再帰が書きたかっただけ #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); }
int gcm(int x, int y) {if (x == 36 && y == 90) return 18; printf("答えられません\n"); exit(1); return 0;}
GCM=Greatest Common Multiple
もっともでっかい、きょうつうの、かけざん?
互助法って……
964 :
950 :2006/02/04(土) 20:54:35
967 :
デフォルトの名無しさん :2006/02/04(土) 21:39:03
先走り依頼防止age
968 :
デフォルトの名無しさん :2006/02/04(土) 21:46:45
すみません。リングとは軌道のことです。 プログラムは947さんの考えと合っています。ありがとうございます。 星の次の位置を与えそれをfor文でループさせgnuplotでアニメーション表示したいのです。 完成した動きは、中心点(ブラックホール)の周りを200個の星がぐるぐる回るというものです。
すれ違いだが、ライフゲームは、止るという判断をするか、むずかしい・・・。 3 3 * .*. ..* *** はどう判定してよいのやら。
カウンターが上がっていってる限り、安定状態であってフリーズではないだろうと。
・・・カンストいくつだよ・・・
バイナリ拾ってきて動かす勇気に感服
で? 安全なの?
セキュ板かどこかで以前にある実行ファイルのリンクが貼られてからその スレに書き込む人数がどんどん減っていったのを思い出した。
もちろんデバッガ通して実行してるお
生はキケンだぞ。うん。
>>979 生気持ち良い!!!
・・・(((( ;゜Д゜)))ガクガクブルブル
マシンが生きてても苺の類はどうしようもないなぁ
まあ・・・ここに載ったソースをコンパイル→実行するとディレクトリがご臨終するプログラムもあったことだし。 危険ですな・・・。
>>977 ('A`) ってゆーかデバッグ実行しても手遅れだろ
「センセー! ポインタを利用して整数を交換するプログラムを書けという課題がでました!」 「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; }」 「何も表示されないんですが・・・」 「題意は満たしてる」
「
ttp://ほげほげ の課題を解説してください」
「xxxという講義の第x週で出した課題です.分からなかったら部屋まで来てください,適宜対応します」
ホンモノ?
あ、スゴイ、この先生、コピー&ペースト対策してる・・・。
「ID foo, PASS barの某pdfを解いて欲しいんですが。」 →通報 先生、独学の人間にもエサ^H^H資料を見せてください。金払いますから・・・。
[1] 授業単元:情報処理 [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日 ポインタとかさっぱりです、どうかよろしくお願いします。
char*にscanfてまずくねぇ?
>>989 一般の入門書にはsscanfとかは確実に載ってない
mallocで256確保してからfgetsで読み込んで・・でいいでない
入力バッファオーバーフローは外側に任すとして void 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++); } } こんなの作ればいいんでね?
・・・char *string;?? まあ、いいや。 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;}
すまん。994は間違い。 #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; }
もうやる気あんまりないなぁw 俺もだけど
997
良い子は寝るべ。
次スレいこーぜ
1000 :
デフォルトの名無しさん :2006/02/05(日) 01:54:36
正直つまらんかったな、このスレは
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。