ぼるじょあがC/C++の宿題を片付けますYO! 37代目
1 :
デフォルトの名無しさん :
04/12/25 03:44:00
ノノ*^ω^)<次はもきゅえりりんがC/C++の宿題を片付けますよ?
4 :
デフォルトの名無しさん :04/12/25 04:20:19
ヘ o , ── / __, / _, /_/_/ __, / / \ ´ ── / / ─' / _ / _/ \ __ / ___/ ___/ / ___/  ̄ ̄ ̄ _ , ― 、 ,−' `  ̄ヽ_ ,' ヽ ( `ー'ー'ヽ`ー'ー'ヽ ) ( ノ '''''' '''''':::::::ヽ ) ( . )(●), 、(●)、.:( ) + ( ) ,,ノ(、_, )ヽ、,, .::::( ) <ヨン様が華麗に4get! . ヽ ) `-=ニ=- ' .:::::::|ノ + \ `ニニ´ .:::::/ + ,,.....イ.ヽヽ、ニ__ ーーノ゙-、. : | '; \_____ ノ.| ヽ i
5 :
デフォルトの名無しさん :04/12/25 04:32:46
ぼるじょあスレッドキターーーーーーーーーーーーーーーーーーーーーーーーーー!!!!!!
>>1 GJだYO!
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
(・3・)エェー ただの付け忘れだYO
11 :
前スレ990-972 :04/12/25 19:17:26
>前スレ993 使った数字何回でも使ってよければ0000以外何でもできると思うぞ
>>13 結論から言うと、4つの数字を一回ずつ使って10にするという昔からある算数パズル。
poland.txtを取り込んで逆ポーランドから演変換するのは作ったけど
もともとの課題がそれでいいのかどうかわからんので保留中。
数学スレ池
15 :
デフォルトの名無しさん :04/12/25 23:51:21
[2] 問題:音源と幾何情報を1chとする音声のマルチチャネル伝送 [3] 環境 [3.1] OS:Win [3.2] コンパイラ:Visual Studio [3.3] 言語:C/C++/どちらでも [4] 期限:2004年12月27日午前中 チャットくらいはなんとかなったのですが 音声通信の所がどうも理解できません。 ヒント程度でいいので、よろしくお願いいたします。
>>15 そんな短期間で作成して提出しなければならない宿題なのか?
>16 いえ、もうちょっと猶予があったんですが 自分でなんとかしようともがいているうちにこんな状態に‥orz
18 :
デフォルトの名無しさん :04/12/26 04:35:56
仕事を宿題と偽ってここにうpすうrな
仕事じゃなくて釣りだろ。 仕事でちょっとでもプログラムやってるようなら、こんな馬鹿くさい質問の仕方ができるわけない。
てか、躓いてるのはCじゃないじゃん。 環境依存だし。
俺様がクールにあげてやるぜ
クールとフールの違い分かる?
24 :
デフォルトの名無しさん :04/12/28 16:25:34
俺様がフールにあげてやるぜ
25 :
しゅんぺい ◆Ib0wMmHGGI :04/12/29 01:25:37
[1] 授業単元: [2] WAVEファイル(PCMでステレオ・モノラルなどの各種形式は問わない)のデータの位相を反転させ、元のデータと合成することによって、無音になることをプログラムを作成し実証しなさい。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン): Visual Studio6 [3.3] 言語:C [4] 期限:2005年01月15日 8:50まで
当たり前すぎて宿題なんだろうか・・・・・?
すみません、どなたか36代目のスレッドのファイルくれませんか?
皆さん、冬休みの宿題は早めに依頼しておきましょうねぇage
31 :
しゅんぺい ◆Ib0wMmHGGI :04/12/30 09:26:20
>>25 どうやら、形式を問わないとは、モノラルでもステレオでも8bitでも16bitでも、どの形式でも読み込めるということらしいです。
形式を判定する関数くらいは作ってくれないと
33 :
しゅんぺい ◆Ib0wMmHGGI :04/12/30 14:29:23
すみません。 でも、素人的な見解ですけど、データ部分について、位相反転させればいいってことは、ステレオ、モノラルは問わないってことですよね? 後、必要な情報は、8bitか16bitだけってことですから・・・・。 生意気な口利いて申し訳ないのですが、waveファイルから8bitか16bitのデータを読み出して、そのまま保存するプログラムを作成してもらえませんか? 残りの合成やら、他の事に関しては、私が自分でやります。お願いします。
だからお前が形式を判定するプログラム作れよ。 プログラミングとしては、合成やらなんやらするよりよっぽど簡単な作業だろ。 WAVEフォーマットについて調べるのが面倒とか言うなよ?
> そのまま保存するプログラムを作成してもらえませんか? 氏ね。
36 :
デフォルトの名無しさん :04/12/30 15:45:37
任意の数を入力して入力し終わったら、そこからランダムで6個の数字を 取り出すプログラムを教えて下さい。
37 :
デフォルトの名無しさん :04/12/30 16:05:00
int i=atoi(gets()),j=0,a[20];while(i){a[j]=i%10;i/=10;j++;} j--; for(i=0;i<6;i++)printf("%d\n",a[bound_rand(0,j)]);
38 :
デフォルトの名無しさん :04/12/30 16:25:10
JPEGからPNG PNGからGIP GIFからBMP 上記プログラムを別々に作成しなければいけません。 環境はVC6.0またはBorlandC++でも可です。 1月4日までに必要なのでよろしくお願いします。 可能ならどこかのサイトにアップしてください。 だめならここに分割して乗せてください。
39 :
デフォルトの名無しさん :04/12/30 16:33:39
char s[22];//NOTE:スタック溢れの危険 …gets(s)… int b_rand(lo,hi)int hi,lo; { //RAND_MAXとrand()でかけ }
40 :
デフォルトの名無しさん :04/12/30 16:35:57
ただでやるもんか
画像の変換めんどくせえよ・・・
42 :
デフォルトの名無しさん :04/12/30 16:41:00
補足です。 JPEGからPNGとありますが直接が難しい場合は JPEG⇒BMP⇒PNG でもかまいません。ただ、既存のライブラリを使ってはだめといわれました。 よろしくお願いいたします。
43 :
デフォルトの名無しさん :04/12/30 16:45:56
できたら金くれる?
1モリタポあげる
45 :
42 ◆opL87fRjm. :04/12/30 16:51:17
>>43 私が理解できて自分で先生に説明できるぐらいわかりやすいものを作っていただけるのでしたら。
一つあたり5000円でいかがでしょうか?
46 :
デフォルトの名無しさん :04/12/30 16:55:26
断る
47 :
42 ◆opL87fRjm. :04/12/30 16:57:21
>>46 わかりやすいものは作れないってことでしょうか?
ある程度までなら妥協しますが・・・
ま、4日まで頑張れ。LZ77展開くらいまでは作れるだろ。
て言うかそんなもん5000円で作るくらいだったら商用ライブラリにするよ。
そういえば前、中間記法で書かれた計算式の文字列を計算するだけのコード書いて 1万貰ったな。
>>36 #include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
int main()
{
std::srand(static_cast<unsigned int>(std::time(0)));
std::vector<int> v;
int temp;
while (std::cin >> temp)
v.push_back(temp);
std::random_shuffle(v.begin(), v.end());
if (v.size() >= 6)
for (int i = 0; i < 6; ++i)
std::cout << v[i] << std::endl;
else
std::cout << "指定した数が少ないです" << std::endl;
return 0;
}
>>51 キサマそれでもC++使いか!
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
int main(){
std::srand(static_cast<unsigned int>(std::time(0)));
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(v));
std::random_shuffle(v.begin(), v.end());
if (v.size() >= 6)
copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
else
std::cout << "指定した数が少ないです" << std::endl;
}
コンパイル通したらいろいろミスがあったorz #include <algorithm> #include <cstdlib> #include <ctime> #include <iostream> #include <vector> #include <iterator> int main(){ std::srand(static_cast<unsigned int>(std::time(0))); std::vector<int> v; std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(v)); std::random_shuffle(v.begin(), v.end()); if(v.size() >= 6) std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n")); else std::cout << "指定した数が少ないです" << std::endl; }
取り出すのは6個 std::copy(v.begin(), v.end() → v.begin(), v.begin() + 6
>>38 jpegもpngも仕様策定団体が公式サイトでライブラリを公開している。
従って、常識的にはそれを使うべきかと。
#GifはCompuServeが権利を持っているけどいいんだっけ?
56 :
42 ◆opL87fRjm. :04/12/30 19:14:30
>>55 大学の宿題です。
ライブラリは使えません。
皆さんの実力を発揮してください。よろしくお願いします。
>>56 自分でやれ。
金払ってる親が泣くぞ。
何のために大学に行っている?
学ぶ気がないならさっさと辞めて社会に出た方がよい。
58 :
デフォルトの名無しさん :04/12/30 19:19:50
>>56 ばれたら落ちる。やめなって。ここでできるのは情報収集だけだよ。
59 :
42 ◆opL87fRjm. :04/12/30 19:23:51
>>58 そうですか・・・
ではせめてヒントをお願いします。
元ネタになるソースがあればもっとうれしいです。
ここで解答しても、解答者に著作権があるわけではないから、質問者が自分でやった と言っても全然問題ないんじゃないの?
libpngとか良く無いかい?
62 :
デフォルトの名無しさん :04/12/30 19:36:35
以下抜かり無いか? ファイル入出力の基礎。 jpeg,gif,pngの関連ソースと仕様の入手。 コーディングの基礎。 winで動くlib*などのソースは、cygwinのミラーから取れ。susie,imagemagickなどのソースはgoogleで探せ。
64 :
デフォルトの名無しさん :04/12/30 19:45:18
いいか。今から支障が出ない程度に睡眠時間を削れ。掲示板にレスする暇もコンパイルする暇もないぞ。ビットマップの知識はあるな? まずファイルのデータ構造を知り、ファイル全体を一気に読み込んでみろ。
int main(int argc,char *argv[]) { char data[1024 * 1024 * 1024]; FILE *fp = fopen("data.jpg","r"); fread(fp,1,1024 * 1024 * 1024,data); fclose(fp); return 0; } 次は何やればいい?おっさん。
66 :
42 ◆opL87fRjm. :04/12/30 19:50:13
>>64 ビットマップの知識はあります。
>まずファイルのデータ構造を知り、ファイル全体を一気に読み込んでみろ。
申し訳ありません。おっしゃっている意味が今ひとつわかりません。
67 :
デフォルトの名無しさん :04/12/30 19:51:40
次にどんな汚い方法でもいい、読んだもんに基づいて、構造体データとビットマップを作れ。
あと6日でjpeg,gif,pngの独自実装か。死ねるな。
69 :
42 ◆opL87fRjm. :04/12/30 19:54:06
70 :
42 ◆opL87fRjm. :04/12/30 19:54:53
71 :
デフォルトの名無しさん :04/12/30 19:56:13
返事は短く! ファイル種ごとに分析用の関数を分けろ。画像の仕様をみれば構造が分かる
72 :
デフォルトの名無しさん :04/12/30 20:00:21
ややこしいことがあったら、手短にメモれ
質問スレで質問したらなんかアホがいました。・・・と。
74 :
デフォルトの名無しさん :04/12/30 20:04:31
皆ども、状況報告せよ!
75 :
デフォルトの名無しさん :04/12/30 20:05:51
読み込みコード完成!
76 :
デフォルトの名無しさん :04/12/30 20:07:03
よろしい。では書き込みコードをかけ
77 :
デフォルトの名無しさん :04/12/30 20:10:21
構造体って何ですか
78 :
デフォルトの名無しさん :04/12/30 20:11:34
だまれ!偽物め!
79 :
42 ◆opL87fRjm. :04/12/30 20:11:41
すみません。もう一度聞きたいことを整理します。 JPEGからPNG、PNGからGIP、GIFからBMP 上記変換プログラムを別々に作成しなければいけません。 ただ直接変換が難しければJPEG→BMP→PNGといった感じでもかまいません。 C,C++は一通りできます。ビットマップの構造も知っています。 アドバイスよろしくお願いします。
80 :
デフォルトの名無しさん :04/12/30 20:14:19
こら、まだjpeg,gif仕様を入手してないのか!急げ!
81 :
デフォルトの名無しさん :04/12/30 20:20:51
状況報告せよ!
82 :
42 ◆opL87fRjm. :04/12/30 20:21:30
>>80 すみません。どこで入手できるんでしょうか?
ぐぐっているんですけどそれっぽいのがでてこなくて・・・
84 :
デフォルトの名無しさん :04/12/30 20:23:59
司令官は怠け者に与える時間はないぞ!報告せよ!
86 :
42 ◆opL87fRjm. :04/12/30 20:29:26
>>83 ありがとうございます。
英語なのでどこまでできるかわかりませんが読んでみます。
日本語があったらうれしいけど贅沢はいえませんよね・・・
87 :
デフォルトの名無しさん :04/12/30 20:32:10
各ファイル種の構造がわかったら、報告せよ!
88 :
デフォルトの名無しさん :04/12/30 20:36:20
今、場合分けしてバイト列を書いているところです。
89 :
デフォルトの名無しさん :04/12/30 20:39:03
こらー、私語を慎んで専念しろ!
90 :
デフォルトの名無しさん :04/12/30 20:44:58
場合分けでは、{}で内包的表記をするとよい。
91 :
デフォルトの名無しさん :04/12/30 20:50:58
何だこの新入りは? 自動翻訳も電子辞書も使えないのか
92 :
デフォルトの名無しさん :04/12/30 20:53:31
JPEG解読しました!
93 :
デフォルトの名無しさん :04/12/30 20:57:23
よろしい。では、関数の独立性に注意して、先のファイル全体読み込みコードとJPEG分析コードを組み合わせてみよ!急げ!
94 :
デフォルトの名無しさん :04/12/30 21:03:47
時間掛りそうなトラブルがあれば必ず報告せよ!
95 :
デフォルトの名無しさん :04/12/30 21:09:48
jpegっていうとウェーブレット変換とかもやるの? 興味あるんだけど
96 :
デフォルトの名無しさん :04/12/30 21:13:24
JPEGファイルの構造も分かり、 何とか全部自分でできるような気がしてきたので、もう大丈夫です。迷惑をお掛けして済みませんでした。これまでどうもありがとうございました。
97 :
デフォルトの名無しさん :04/12/30 21:52:25
もうなにがなんだか
98 :
42 ◆opL87fRjm. :04/12/30 22:11:05
GIFのフォーマットは大体わかりました。 ただ、LZWの圧縮方法がよくわかりません。 申し訳ありませんがソースか詳しく解説しているホームページがあれば教えていただけないでしょうか?
99 :
デフォルトの名無しさん :04/12/30 22:16:07
ソースを教えたらダメだよ〉皆さん
100 :
デフォルトの名無しさん :04/12/30 22:17:11
LZW法は特許で守られています。
101 :
デフォルトの名無しさん :04/12/30 22:17:18
アドレス教えたらダメね<皆様
あー、あれだ。せっかくだから特許に抵触しない展開法とやら使え。
103 :
デフォルトの名無しさん :04/12/30 22:20:58
104 :
デフォルトの名無しさん :04/12/30 22:28:25
ワトソン君、もうつまづいたのかい? LZW法が違法なのにGIF読み込みのフリーウェアがあるのはどうしてだろうなー。世界のどこかに答えがあるだろうか。
105 :
42 ◆opL87fRjm. :04/12/30 22:29:05
106 :
デフォルトの名無しさん :04/12/30 22:31:11
>>105 特許なんてとっくの昔に切れたから心配せずに使え。
特許切れてるから抵触する展開法なんか無いような・・・
108 :
42 ◆opL87fRjm. :04/12/30 22:34:44
>>106 使う前に方法がわかりません。
ヒントとしてホームページだけでも教えていただけないでしょうか?
109 :
デフォルトの名無しさん :04/12/30 22:40:04
やれやれ、webのキーワード検索も知らないと見える。
情報Aの教科書(高校)に検索の仕方が書いてある。 良くも悪くもそんな時代です。
111 :
デフォルトの名無しさん :04/12/30 22:46:03
googleのヘルプを見て勉強しな
112 :
デフォルトの名無しさん :04/12/30 23:04:00
ー終了ー
#include <stdio.h> main() { int i,j; for(i=2;i<101;i++) { for(j=2;j<101;j++) { if(i%j==1) { if(i==j) { printf("%d\n",i); } } } } } 2から100までの数字の素数を求めるプログラムを考えたのですが、 どう間違っているのか教えて頂けませんか? 自分の考え方は、素数は2以上の数ではその素数でしか割れないので、 余りが1のときにi=jになると考えたのですが、 実行結果はPress any key to continueとしか表示されません。よろしくお願いします。
if(i%j==1) { if(i==j) { 等しい数で割って1余るっておかしいだろ
>>114 そうですね、すみません・・。
商と余りを逆に考えてました・・。
116 :
51 :04/12/31 01:07:04
>>52 できるだけ教育的プログラムを書いたわけだが。
>>113 #include <stdio.h>
int main(int argc, char *argv[])
{
int i, j = 0, k, sosuu[50];
sosuu[j] = 2;
for(i = 3; i <= 100; i++){
for(k = 0; k <= j; k++)
if((i % sosuu[k]) == 0)
break;
if(k == j + 1)
sosuu[++j] = i;
}
for(k = 0; k <= j; k++)
printf("%2d\n", sosuu[k]);
return 0;
}
ガッツだ。
>>33 もう見てないかもしれないが、それはACMにも対応しなければならないのか?
それとも無圧縮WAVだけに対応すればいいのか?それによってすることが若干
変わって来るんだが。
('A`)マンドクセ
汚ねぇソースだな
>>113 眠れないから、java勉強しつつ作ってみた。
#include<stdio.h>
int main(void){
int i,j,k;
k=0;
for(i=2;i<=100;i++){
for(j=2;j<=100;j++){
if((i!=j) && (i%j == 0))
break;
if((i==j) && (i%j == 0)){
k++;
printf("素数%d個目=%d\n",k,i);
break;
}
}
}
return 0;
}
気合だ!
125 :
デフォルトの名無しさん :04/12/31 10:37:14
age
126 :
42 ◆opL87fRjm. :04/12/31 12:26:54
GIP→BMPは大体できました。 簡単な動作確認はとれたので時間が余ったらちゃんとしたテストをすることにします。 JPEGの方で相談なんですが、処理方式に ・基本DCT変換 ・拡張DCT変換 ・可逆方式 ・ハイアラーキカル方式 の4つがあるようなのですが、ハイアラーキカル方式に関する情報が手に入りません。 ここで回答してくださっている方はとても優秀な方だと思いますので、 ハイアラーキカル方式の変換ロジックを作製していただけないでしょうか? よろしくお願いします。
他人に丸投げしてもやってもらえるわけないだろうに。 とりあえず、自分で書けるとこまで書いたモノを出してみたら? 努力の跡が認められればヒントくらいはもらえると思うよ
130 :
42 ◆opL87fRjm. :04/12/31 13:36:04
>>129 ?
宿題投下しましたが跳ね返されたんですが?
C言語は対応できない、と言っていますか?
131 :
デフォルトの名無しさん :04/12/31 13:41:58
130 ホットケーキ
132 :
デフォルトの名無しさん :04/12/31 14:09:48
変換ルーチン3×2=6個必要。このペースじゃ間に合わないよ。コンパイルする暇ないぞ!急げ!
>>117 ,124
ありがとうございます。
自分は素数未満の2以上の数で素数は割り切れないのでこんな感じでやりました。
#include <stdio.h>
main()
{
int i,j;
for(i=2;i<101;i++)
{
for(j=2;j<101;j++)
{
if((i>j)&&(i%j==0))break;
if(i==j) printf("%4d",i);
}
}
}
>>130 が気持ち悪いよー
「ですが?」
この語尾気持ち悪いよー
すいません、冬休みの課題がわからないので お願いします。 英文のテキストファイルを入力し、アルファベットの出現度数 と割合を表示するプログラムを以下の仕様に基づいて作れ。 入力: 英文テキストのファイル名(main関数で入力) 処理1(input関数): ファイルを開き、その内容を一文字ずつ読み込み アルファベット文字ごとに数える(大文字、小文字は区別しない) ・引数…ファイル名(char*)、アルファベット勘定用配列(int*) ・戻り値…なし(void)
処理2(sort関数): ファイルの出現度数をキーに降順(大きい順)に並べ替える (どのアルファベットかも分かるように) ・引数…アルファベット文字用配列(char*)、 アルファベット勘定用配列(int*) ・戻り値…なし(void) 出力(output関数): アルファベットの文字、その出現度数と割合、割合に応じて 「*」を表示したグラフを新しいファイルと画面に表示する。 ・引数…アルファベット文字用配列(char*)、 アルファベット勘定用配列(int*) ・戻り値…なし(void)
アルファベット文字用配列: char a[26]; a[0]〜a[25]に'A'コード(65)〜'Z'コード(90)までを入力しておく。 あとで、ソートと出力の際に利用する。 アルファベット勘定用配列: int b[26]; 'A'の出現度数をb[0]へ、以下1ずつずらして'Z'の出現度数 はb[25]へ勘定するようにする。
input関数: ファイルを開いてファイルの内容を1文字ずつ読み込む。 int c; FILE *fp; if(NULL==(fp=fopen(fi,"r"))){ fprintf(stderr,"error:file open[%s].\n,fi); exit; } while(EOF!=(c=getc(fp))){ (アルファベットの勘定) (アルファベットだったら大文字にして勘定する) }
大晦日に、人の宿題をするのも(・∀・)イイ!!
sort関数: sortでアルファベット文字用配列a[]とアルファベット勘定 用配列b[]の両方の要素を同時に入れ替える。 (入れ替えたときにアルファベット文字がどこに対応するか 分からなくならないようにする) 例(降順) int b[5]={3,1,4,5,2},tmp; for(i=0;i<4;j++){ for(j=i+1;j<5;j++){ if(b[i]<b[j]){ tmp=b[i]; b[i]=b[j]; b[j]=tmp; } } }
>>136 初仕事。出来るだけ君の要望に沿ってみた。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
void input(char *fi, int *b){
int c;
FILE *fp;
if (NULL == (fp = fopen(fi, "r"))){
fprintf(stderr, "error:file open\[%s\].\n", fi);
exit(1);
}
while (EOF != (c = getc(fp))) if (isalpha(c)) b[toupper(c) - 'A']++;
fclose(fp);
}
void sort(char *a, int *b){
int i, j, tmpi;
char tmpc;
for (i = 0; i < 25; i++)
for (j = i + 1; j < 26; j++)
if (b[i] < b[j]){
tmpi = b[i];
b[i] = b[j];
b[j] = tmpi;
tmpc = a[i];
a[i] = a[j];
a[j] = tmpc;
}
}
void output(char *a, int *b){ int i, j, sum = 0; printf("character:frequency:percentage\n"); for (i = 0; i < 26; i++) sum += b[i]; for (i = 0; i < 26; i++){ printf("%c:%3d:%3d:", a[i], b[i], (int)((double)b[i] / sum * 100)); for (j = 0; j < (int)((double)b[i] / sum * 50); j++) printf("*"); printf("\n"); } } int main(void){ char fi[256], a[26]; int b[26], i; printf("input file name:"); scanf("%[^\n]s", fi); for (i = 0; i < 26; i++) b[i] = 0; input(fi, b); for (i = 0; i < 26; i++) a[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; sort(a, b); output(a, b); return 0; }
正月に人の宿題をするのも(・∀・)イイ!!
正月に宿題を出す方も解く方もどうかと思うが
>>142 ありがとうございます!
本当に助かります・・・。極限感謝!
>>145 そんなこと言わないで・・・。
おれも解きてえ。 仕事が詰まりすぎてるからぜひ現実逃避させてくれ。
148 :
デフォルトの名無しさん :05/01/01 09:10:46
1.任意のテキストファイルから英単語を抽出せよ。 2.文字列ポインタで与えられた単語群から最長のしりとり列を作れ。 3.対話的にしりとりをせよ。
149 :
デフォルトの名無しさん :05/01/01 09:22:08
早く解けよ
>>148 1.
#include <cctype>
#include <iostream>
#include <iterator>
#include <fstream>
#include <set>
#include <string>
int main()
{
std::string filename;
std::cout << "input file name:"; std::cin >> filename;
std::string str(std::istreambuf_iterator<char>(std::ifstream(filename.c_str()).rdbuf()), std::istreambuf_iterator<char>());
std::set<std::string> words;
const char delimiters[] = " ,.\t\n:';!?\"";
std::string::size_type start_index = str.find_first_not_of(delimiters);
while (start_index != std::string::npos)
{
std::string::size_type end_index = str.find_first_of(delimiters, start_index);
if (end_index == std::string::npos) end_index = str.length();
if (end_index - start_index != 0)
{
std::string word(str.substr(start_index, end_index - start_index));
if (words.find(word) == words.end()) words.insert(word);
}
start_index = str.find_first_not_of(delimiters, end_index);
}
for (std::set<std::string>::iterator first = words.begin(), last = words.end(); first != last; ++first)
std::cout << *first << ' ';
return 0;
}
しりとり。
キタ━━━━━━━━━━━(゚∀゚)━━━━━━━━━━━!!!
test
おみくじどうやってやるんですか
>>155 名前欄に記入
御神籤:!omikuji
お年玉:!DAMA
tes
てs
oppai
test
これからはテスト禁止にしますね。
もっとも宿題こないとこのスレやることないし
166 :
デフォルトの名無しさん :05/01/02 13:35:38
C言語です。お願いします。 10人のアルファベット表記の名前を (1)マージソート (2)クイックソート で辞書順に出力するプログラムを各々作成せよ。 10人の名前は2次元配列で作成しmain関数以外の 関数も作成して実行せよ。 ってのが宿題なんですが、できればstrcpyを使わず strcmpで作っていただきたいですm(_ _)m お願いしますm(_ _)m
>>166 マージソートがどういう性質のものかわかってんのか?
168 :
デフォルトの名無しさん :05/01/02 14:00:15
配列の型はポインタの型に変換できる。Cでは通常、文字列を0=='\0'で終る文字の配列のように扱う。つまり、文字の二次配列は、文字列ポインタのポインタに変換できる。 char names[10][MAX_NAMELEN]={略}; char*pch; int i=0; pch=names[i]; //これはOK
169 :
デフォルトの名無しさん :05/01/02 14:03:57
>>167 一応わかってるんですが〜自分でやったのがstrcpyを
使ってしまうんです・・・。
一応貼り付けます。
#include <stdio.h>
#include <string.h>
void merge(char [][10],int,int,int,int);
void merge_sort(char [][10],int,int);
int main()
{
int i;
char name[][10] = {
"suzuki","kimura","sato","watanabe","takeuti",
"ito","kobayasi","moroisi","hukuda","maejima",
"iwasaki","yanagida","saito","toyodome","umino",
"endo","hasimoto","morita","yosida","watahiki",
"onai","isibasi","aizawa","isitobi","sugaya",
"huruta","onnoda","noguti","usuba","doguti",
"mori","tokunaga","tani","watahiki","simizu",
"jono","hukasawa","hosoyati","yamauti","minowa",
"sakuragi","rukawa","anzai","yazawa","soeta",
"baba","sakai","kobayasi","tuemura","amarume",
};
170 :
デフォルトの名無しさん :05/01/02 14:04:47
puts("--- ソート前 ---"); for( i = 0; i <=49; i++){ printf("%s\n",name[i]); } merge_sort(name, 0, 49); puts("--- ソート後 ---"); for( i = 0; i <= 49; i++){ printf("%s\n",name[i]); } return 0; }
171 :
デフォルトの名無しさん :05/01/02 14:05:21
void merge(char name[][10],int begin1,int end1,int begin2,int end2) { int left = begin1, right = begin2; int k = 0, i; char tmp[50][10] = {0}; /* 左側か、右側か、どちらか短い方の終端まで比較処理を行なう */ while( (left <= end1) && (right <= end2) ){ if(strcmp(name[left], name[right]) < 1){ strcpy(tmp[k++], name[left++]); }else{ strcpy(tmp[k++], name[right++]); } } /* 左側が残っていれば、すべてコピー */ while( left <= end1 ){ strcpy(tmp[k++], name[left++]); } /* 右側が残っていれば、すべてコピー */ while( right <= end2 ){ strcpy(tmp[k++], name[right++]); } /* 整列済みデータの書き戻し */ for(i = 0; i < k; ++i){ strcpy(name[begin1+i], tmp[i]); } }
172 :
デフォルトの名無しさん :05/01/02 14:05:42
void merge_sort(char name[][10],int begin,int end) { int mid; char tmp[10] = {0}; if(end == begin) return; if(end == begin+1){ if(strcmp(name[begin], name[end]) > 0){ /* 値交換 */ strcpy(tmp, name[begin]); strcpy(name[begin], name[end]); strcpy(name[end], tmp); } return; } mid = (begin + end) / 2; merge_sort(name, begin, mid); /* 左側の部分ソート */ merge_sort(name, mid+1, end); /* 右側の部分ソート */ merge(name, begin, mid, mid+1, end); /* 併合処理 */ }
173 :
デフォルトの名無しさん :05/01/02 14:05:58
[10][]だよ。高次が左
174 :
デフォルトの名無しさん :05/01/02 14:06:53
>>167 こんな感じです。ちなみに50人でやった場合です。
175 :
デフォルトの名無しさん :05/01/02 14:19:55
関数の仮引数に配列使うな。ポインタに直せ
176 :
デフォルトの名無しさん :05/01/02 14:27:22
はい。直しておきます。 それとどうすればstrcpyを使わない プログラムにできるんですか?
177 :
デフォルトの名無しさん :05/01/02 14:37:57
実体をコピーせずにindexやpointerで参照する配列を作ると早い
この手の宿題見るといつも思うんだけどさぁ、 文字列処理なんてC言語でするなよ。 せめてC++でstd::string型使って。 俺の経験上、Cで出された課題もC++で書いて出して、 おまけで「いまどきCで文字列処理なんてやってんじゃねぇよ」 (実際提出する際には口調は穏やかに)って書いとけば優もらえるよ。
179 :
デフォルトの名無しさん :05/01/02 16:03:15
>>178 それが〜C言語でやらなきゃいけないんですよ〜。
できればクイックソートの問題解いてもらえませんか?
>>179 いや、だから、先生に「C言語で」といわれてるにもかかわらず、
C++で出した上に文句書いて優もらえた経験がある。
俺の環境が恵まれてるのか?
181 :
デフォルトの名無しさん :05/01/02 16:14:40
>>180 教授の人格にもよります。
オレの習ってる教授ではダメなんですよ〜。
褒める先生も居れば怒る先生も居るだろう。 指定通りに書けば怒られることはない。
183 :
デフォルトの名無しさん :05/01/02 16:22:09
そういうわけで誰かクイックソートの問題を 解いていただきたいのですが〜・・・。
184 :
デフォルトの名無しさん :05/01/02 16:44:41
実力あるんだから、自分でやるんだ。実体をコピー&ソートしないで、別の配列に(弱い)参照を用意してそれをソートすろよ
しまいにはstring algorithms library使って 「標準ライブラリなんか使ってんじゃねぇよ」ってか? ただのDQNだな
186 :
デフォルトの名無しさん :05/01/02 16:58:37
qsortという便利な関数を使うとなお良い(使えれば)。
187 :
デフォルトの名無しさん :05/01/02 17:03:40
ついでに、const,registry,restrictedキーワードも使いこなしてくれれば…
つか、ソートの勉強するのにqsort使ったら本末転倒やん。
189 :
デフォルトの名無しさん :05/01/02 17:08:43
アセンブリとクロスレファレンスも吐き出してくれないか
190 :
デフォルトの名無しさん :05/01/02 17:14:57
ついでにx86アセンブリ勉強して、ソートをpentium用に最適化してくれないか。
191 :
デフォルトの名無しさん :05/01/02 17:17:37
なんで逃げられたんだろ…
192 :
デフォルトの名無しさん :05/01/02 17:34:48
非標準の関数を1ミリ秒早くするのにものすごい苦労があるのさ
193 :
デフォルトの名無しさん :05/01/02 17:43:31
「標準入力から C 言語などのプログラムテキストファイルを読み込み、 使用している関数名を頻度順に並べなさい。 これは宣言文と実際の式のどちらも含みます。 なお、同じ頻度の関数は辞書順に並べなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに 入力した出力を示しなさい。 なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに 依存しなければなりません。勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。」 という課題が出てるのですができないので教えてください。 10日までによろしくい願いします。
「標準入力から C 言語などのプログラムテキストファイルを読み込み、 ~~~~~~
195 :
デフォルトの名無しさん :05/01/02 18:56:11
「標準入力から C 言語のプログラムテキストファイルを読み込み、 使用している関数名を頻度順に並べなさい。 これは宣言文と実際の式のどちらも含みます。 なお、同じ頻度の関数は辞書順に並べなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに 入力した出力を示しなさい。 なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに 依存しなければなりません。勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。」 という課題が出てるのですができないので教えてください。 10日までによろしくい願いします。
答える必要ないな。自分でやれ。
パーサ合成技術
>>195 とりあえずcdecl拾ってくりゃ8割方完成
>>195 提出日当日に
「先生!
#define M(a, b) a##b
とか
#define M(a) #a
の扱いが判らなかったので、出来ませんですた」
と言えば、多分許してくれると思う。
>>195 括弧の直前にある名前は関数名として考えていいと思う。
それが{}に囲まれている範囲内なら関数呼び出しで、
トップレベルなら宣言ということにしていいんじゃないかな。
実際には関数の中で関数の宣言をすることは可能なんだけど、
やってることはめったに無いってことで。
gcc2.Xから.yファイル拾ってきて関数のとこだけ書き出すようにすりゃ完成。
>>195 とは別人なんですけど、
>>201 読んで
#include<stdio.h>
main()
{
int func( char *str)
{ printf(str); }
func("func()");
}
とやったら通ったんですが(gcc)、こういうのは認められてるやり方なんですか?
一文字入力させるときどういうふうに書いてますか?
>>203 ,205
関数定義の中で関数定義をするのは規格で認められていないかもしれないが、
(プロトタイプ)宣言だけなら可能なはず。
Dなら認められているよね。関数のネスト。
冬休みの課題で出た問題がひとつだけわかりません…… ヒントだけでも結構ですので、どうかよろしくお願いします [2] 入力されたデータがランダムかどうか判別するプログラムを作成せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): gcc(3.3.5?) [3.3] 言語:C [4] 期限:2005年01月07日23:59まで
不可能 つかネタだろ
・何をもって、ランダムとするか ・入力データってのは何であるか(数限定とか) その辺がわかりません。ヒント下さい。
// データの規則性の高さを返す。 // 全く乱雑な時、intの最大値を返す。 int kisokusei(void*data,size_t size);
で、結局ネタだったの?
任意のチューリングマシンが有限回のステップの後に停止するかどうかを判別するプログラムも課題で出ています。 これを落とすと卒業できなくなってしまいます!助けてください!!!!
度合いしか測定できねえべ。 「ランダムである」って言い切ってるしなあ
ネタですな
TMの停止問題は有名
>>224 先生!入力されたデータがランダムであるかどうか判定できない事を数学的に証明
してください!
>>227 すごい!さすが先生です!こんな証明をなさるなんて!
>>227 は本当にゲーデルの不完全性定理を完全に理解しているのだろうか…
負け惜しみ
冬休み早く終わらないかな。
年中夏休み冬休み
>>201 ANSI-C以前のソースを見ると山ほど出てくるぞ。
/* こんなのとか */
int func(foo)
char *foo;
{
char buf[BUFSIZ];
FILE *fopen();
FILE *fp = fopen(foo, "r");
int bar = fgets(buf, sizeof(buf), fp);
fclose(fp);
return bar;
}
234 :
デフォルトの名無しさん :05/01/04 04:01:24
C言語でお聞きしたいのですが、 ファイルの中に縦1列に並んだ2、3桁の数字を配列 に格納して表示しようとしてるんですが・・・ どのようにすればa[m]として for(m=0;m==\0;m++)printf("%d%d",m,atoi(a))を実行 した時にm=0,1,2,...となってくれるのでしょうか?
235 :
デフォルトの名無しさん :05/01/04 04:04:06
あ、間違いです。 for(m=0;a[m]==\0;m++)printf("%d%d\n",m,atoi(a)); でした。 お願いします。
ちゃんと喋れ
言ってる意味がよくわからん
239 :
デフォルトの名無しさん :05/01/04 09:04:46
forの終了条件を日本語で説明しろ。 目的と対象をちゃんと記述しろ。例えば、ここに赤と青のボールがあった時に「ボール持って来て」と君が命令しても、すぐに対処できないし、聞き返すのも時間の無駄。
240 :
デフォルトの名無しさん :05/01/04 09:40:04
自己解決しました。ありがとうございました。
C言語でお聞きしたいのですが、 ファイルの中に縦1列に並んだ2、3桁の数字を配列 に格納して表示しようとしてるんですが・・・ こんな感じで並んでいます 458 236 11 25 69 42 140 どのようにすればa[m]として "458"を458に変換できて for(m=0;m==\0;m++)printf("%d%d",m,atoi(a[m])) を実行した時に a[0], a[1], a[2], a[3]... の中身を表示してくれるのでしょうか?
>>241 それでも言ってる意味がさっぱりわからん
243 :
デフォルトの名無しさん :05/01/04 09:50:03
>241に問題です。 atoi(a[m])の値は何を表すか? 上記のforループでの終了条件は、文法も論理も完全に間違っていますが、正しい終了条件を日本語で記述しなさい。
244 :
デフォルトの名無しさん :05/01/04 10:02:42
日本語がダメならスワヒリ語で機械にもよく分かるように終了条件を説明しろ。
245 :
デフォルトの名無しさん :05/01/04 10:08:04
ファイルから何行読み込んだか分かるか?
246 :
デフォルトの名無しさん :05/01/04 10:11:18
また逃げられたか…
自己解決しました。ありがとうございました。
248 :
デフォルトの名無しさん :05/01/04 12:31:53
>>243 atoi(a[m])1行ずつの数字をあらわすようにしたいです。
>>245 わかりません・・・。
>> どのようにすればa[m]として >> "458"を458に変換できて itoa 一行ずつなら\nごとにパースすればいいと思うが
250 :
デフォルトの名無しさん :05/01/04 12:48:16
何行来るか分からないのに全部配列に格納できないよ。型って知ってる? int i; char s[行の最長の長さ]; fgetsで文字列をsに読み込む。 失敗したらやめる。 atoiでsを整数として解釈した結果をiに代入。繰り返し。
日本語おかしかった、スマソ あとvector<int> aにつっこんでけばできるでそ
252 :
デフォルトの名無しさん :05/01/04 12:57:18
それなら ファイルa.txtとb.txtには1行に1つ整数値が書かれている。 しかも小さい順にソートされている。a.txtとb.txtの整数値を あわせてソートさせて表示するプログラムを書け。 というレポートがあるんですがこれは配列は使わない ってことなんですか?
253 :
デフォルトの名無しさん :05/01/04 13:04:13
>252 #include<stdlib.h> malloc, realloc, free で格納場所を陣取っておけ
254 :
デフォルトの名無しさん :05/01/04 13:08:16
>253 すみません。どうやればいいかわかりません。
255 :
デフォルトの名無しさん :05/01/04 13:08:52
int*pi=NULL; ... pi=(int*)realloc(sizeof(int)*n); ... free(pi);
256 :
デフォルトの名無しさん :05/01/04 13:10:30
...realloc(pi, sizeof...
> ファイルa.txtとb.txtには1行に1つ整数値が書かれている。 > しかも小さい順にソートされている。a.txtとb.txtの整数値を > あわせてソートさせて表示するプログラムを書け。 これなら配列は要らない
258 :
デフォルトの名無しさん :05/01/04 13:13:05
>255 よくわからないです。 つまり配列に格納はできないですよね?
259 :
デフォルトの名無しさん :05/01/04 13:16:45
>257 配列いらないのですか? ではどのように考えればいいのですか?
260 :
デフォルトの名無しさん :05/01/04 13:21:25
>259 2ファイル同時に開いて小さい方の値を選んで出力していけ。
261 :
デフォルトの名無しさん :05/01/04 13:25:05
>260 わかりました。がんばってみます。 できないときはもう一度ここでヒントをもらいますので そのときはお願いします。ありがとうございました。
262 :
デフォルトの名無しさん :05/01/04 13:27:53
>258 pi!=NULLならば、0<=i<nの範囲でpi[i]がint値として使える。
263 :
デフォルトの名無しさん :05/01/04 13:52:45
GOTOを使うと逮捕なんですか。 岩手大生がGOTO、現行犯逮捕 岩手県警盛岡東署は4日、盛岡市高松、岩手大人文社会科学部4年 容疑者(22)をGOTOの現行犯で逮捕した。(読売新聞)
264 :
デフォルトの名無しさん :05/01/04 14:00:45
逮捕だけじゃない、変なレッテルが付いてるとgoto hellに陥る
265 :
デフォルトの名無しさん :05/01/04 14:53:56
[2] 問題文(含コード&リンク): 1〜100までの素数を表示するプログラムを作成するというプログラムで、 For文を使った場合とWhile文を使った場合でプログラムを作成という冬休み課題がでているのですが For文はわかったのですがWhile文の場合だとどのようにすればいいか検討がつきません。 よろしくお願いいたしますm(_ _)m [3] 環境 [3.1] OS: XP [3.2] コンパイラ(バージョン): ボーランドフリーコンパイラ [3.3] 言語:C
266 :
デフォルトの名無しさん :05/01/04 15:00:31
for(init();cond();cont()){ doit(); } は init(); while(cond()){ doit(); cont(); } と同じ
for文で書いたものを出せ そうすりゃそれをwhile文に書き直してやる
268 :
265 :05/01/04 15:32:04
#include "stdafx.h" int main(void) { int i,j,k,d; k=0; for (i=2;i<=100;i++){ d=0; for (j=2;j<=i;j++){ if ((i%j==0)&&(i!=j)){ d=1; } } if (d==0){ k++; printf("素数%d個目=%d\n",k,i); } } return 0; } FORだとこれです。
>>268 無駄な計算が多いな
動くことは動くが、もうちょと考えてみてはどうだ
#include "stdafx.h" int main(void) { int i,j,k,d; k=0; i=2; while (i<=100){ d=0; j=2; while (j<=i){ if ((i%j==0)&&(i!=j)){ d=1; } j++; } if (d==0){ k++; printf("素数%d個目=%d\n",k,i); } i++; } return 0; }
272 :
デフォルトの名無しさん :05/01/04 16:13:20
すみません。 ファイルa.txtとb.txtには1行に1つ整数値が書かれている。 しかも小さい順にソートされている。a.txtとb.txtの整数値を あわせてソートさせて表示するプログラムを書け。 が、がんばったんですができませんでした。 おしえてください!!
273 :
デフォルトの名無しさん :05/01/04 16:16:50
>272 どこまでできた?
一つのファイルでソートできているプログラムがあるなら、 system("cat a.txt > c.txt"); system("cat b.txt >> c.txt"); を走らせて、c.txtをソーティング。 かなり外道なやり方だけどね。
275 :
265 :05/01/04 16:28:29
276 :
デフォルトの名無しさん :05/01/04 16:29:08
とりあえずaのファイルの出力だけです・・・。 #include<stdio.h> #include<stdlib.h> int main() { FILE *fp,*fp2; char c[128],d[128]; int m,n,k; fp=fopen("a.txt","r"),fp2=fopen("b,txt","r"); while(fgets(c,128,fp)!=NULL){ for(m=0;c[m]!='\n'; ){ for(k=0;c[m]!='\n';m++){ e[k]=c[m]; k++; } e[k]='\0'; printf("%d\n",atoi(e)); } } fclose(fp); fclose(fp2); return 0; }
277 :
デフォルトの名無しさん :05/01/04 16:37:11
>273 276です。まだまだ全然ダメです。
278 :
デフォルトの名無しさん :05/01/04 16:39:39
break;と書くと、ループを抜けられるぞ。条件式が一度に書けないなら、一時的な変数にfgetsの結果を置け。ここでは改行チェックをしなくてもよい
+std::vector<int> v; -print("%d\n",atoi(e)); +v.push_back(atoi(e)); +std::sort(v.begin(), v.end());
280 :
デフォルトの名無しさん :05/01/04 16:58:26
atoiは後ろの改行を無視するはずだ。改行を消さずとも
281 :
デフォルトの名無しさん :05/01/04 18:18:44
かけ算九九表を出力するという宿題がでたのですが 一の段 二の段 三の段 四の段 五の段・・・ というかんじでループさせて出力させたいのですがどのようにかけばよいのでしょうか?
for(i=1;i<10;i++){ for(j=1;j<10;j++){ sum=i*j; printf("%3d",sum); } printf("\n"); }
283 :
デフォルトの名無しさん :05/01/04 18:28:14
>281 二重のforループ中で掛け算してprintfで左上から右下まで吐き出せばいい。
284 :
デフォルトの名無しさん :05/01/04 18:30:14
>282 ありがd
285 :
デフォルトの名無しさん :05/01/04 18:42:21
タブキーのアスキーコード教えてください。
'\t'
287 :
デフォルトの名無しさん :05/01/04 18:46:08
>>286 数字で教えてください。よろしくお願いします。
printf("%d",'\t');
printf("%d\n", '\t'); 自分で調べろや('A`) 0x09じゃないか?
かぶったorz
291 :
デフォルトの名無しさん :05/01/04 18:49:55
>>289 サンクスえりまっち
292 :
デフォルトの名無しさん :05/01/04 18:49:56
printf("%d\n",'\t');
293 :
デフォルトの名無しさん :05/01/04 18:56:20
なんか他のスレが開けないのでここで・・・ WinSDKなんですが、RichEditにキー入力されたのを取得するには どうしたらいいんでしょうか?
294 :
デフォルトの名無しさん :05/01/04 19:04:17
任意長の文字列を "\n"→"\\n" "\t"→"\\t" のように変換して、別のバッファに格納する関数ってありますか?
>>294 boost::algorithm::replace_all
void replace_es(char *dest, char *buf) { while(*dest != '\0'){ switch(*dest){ case '\n': *buf++ = '\\'; *buf++ = 'n'; break; case '\t': *buf++ = '\\'; *buf++ = 't'; break; default: *buf++ = *dest; break; } dest++; } return; }
298 :
281 :05/01/04 20:46:21
>>283 ヒントありがとうございます。
While文で作れと指示があって色々いじってみているのですがうまくいきません・・・
#include <stdio.h>
void main(void)
{
int i,k,j;
i=1;
while (i<=9)i++{
j=1;
while (j<=9)j++{
k=i*j;
printf("%d ",k);
}
printf("\n");
}
return 0;
}
と入力してコンパイルしたのですがERRORがでてコンパイルできません・・・・
どこが悪いのでしょうか?
i=1; while (i<=9)i++{ //ココと j=1; while (j<=9)j++{ //ココ k=i*j; printf("%d ",k); }
300 :
デフォルトの名無しさん :05/01/04 21:46:37
わらた
>297 buf と dest 意味逆ぢゃね? あと、文字列ぢゃなくね?
302 :
デフォルトの名無しさん :05/01/04 22:54:13
1+2+3+4+・・・・の和が結果が、初めて1000を超える時の数と、 その和を出力するプログラムを作成せよ。という課題がでたのですが、 int goukei=0,i; for(i=1;i と、考えたのですがそれ以降どのようにかけばいいかわかりません・・・ どのように書けばよいのでしょうか?
int main(int argc,char *argv[]){ int i; int sum=0; for(i=1;sum<1000;i++,sum+=i){ } printf("%d\t%d\n",i,sum); return(0); }
304 :
デフォルトの名無しさん :05/01/04 23:01:55
>>302 #include <stdio.h>
int main()
{
int goukei,i;
for(goukei=0,i=2;goukei<=1000;i++)
goukei=i*(i+1)/2;
printf("始めて(ry: %d\n和: %d\n",i,goukei);
return 0;
}
305 :
304 :05/01/04 23:03:07
累積するんだから毎回計算する必要ねーし。
馬鹿ばっかりだなここ
あ、間違えた。 int main(int argc,char *argv[]){ int i; int sum=1; for(i=1;sum<1000;i++,sum+=i){ } printf("%d\t%d\n",i,sum); return(0); }
309 :
デフォルトの名無しさん :05/01/04 23:09:33
>>306 毎回いちいち総和を計算しなくてもいいってこと。
むしろ304は答えがまちがっとる
間違ってるってか無限ループじゃねぇか?
313 :
デフォルトの名無しさん :05/01/04 23:14:22
int n = 1000; int x = ((-1+sqrt(8*n+1.0)) / 2) + 1; printf ("%d\t%d\n", x, x*(x+1)/2);
普通にたしていったほうが早いと思う。
int n = 1000;
int x = ((-1+sqrt((n<<3)+1.0)) / 2) + 1;
printf ("%d\t%d\n", x, (x*(x+1)
>>1 ));
304はコード自体も稚拙だな
sum+=i の方がよっぽど早くてわかりやすい 足し算と掛け算割り算は等速じゃないぞ
320 :
302 :05/01/04 23:50:15
>>303 ,304,305,306,308,309
ありがとうございました!!308でコンパイルできました。
どこに性能の重きを置くかって問題だからねぇ。 ループで足していくのも、ループ使わないのも、どっちもそんな悪いコードじゃないと思うけど。
この場合は明らかに可読性を取ってループを使うべきかと
323 :
302 :05/01/04 23:59:00
すいません、While文を使うとどのようになりますでしょうか?
for文で書いたやつがあるんだから、 while文に書き直すくらい自分でやりなさいよ・・・
for (A;B;C){ 〜 } = A while (B){ 〜 C }
327 :
302 :05/01/05 00:06:58
すいませんでした・・・ 今書き換え中です。。。
>>326 A;
while (B){
〜
C;
}
for文とwhile文を相互変換できないなんて一切理解してないんですね
ifとgotoでなんでも出来るんだが
0と1で何でもできるんだが。
332 :
302 :05/01/05 00:16:35
やっとWhileにできました^^;) 教科書類もってかえるの忘れてとんでもないめにあってしまった・・・
代入型言語厨、臭う。
BrainFuckなら <[+-.,]> だけでなんでもできる。
VMをそういう仕様にすれば作れるんじゃない? 特定のメモリアドレスに値が書き込まれたらウインドウを作る、とか。 …まあ絶対やりたくないけど
実用するなら最低限forthくらいは必要だと思うけどな。
スタックは欲しいよね
340 :
デフォルトの名無しさん :05/01/05 11:34:27
コマンドを実行して標準出力と標準エラー出力を別々にファイルに出力できるかね、チミー?
341 :
御神籤:!omikuji :05/01/05 11:54:02
わー
行動が遅いぞ
344 :
デフォルトの名無しさん :05/01/05 15:28:31
>343 シェルのない環境はどうするよ、チミー?
>>344 WindowsならGetStdHandleでごにょごにょ
347 :
デフォルトの名無しさん :05/01/05 16:09:34
>345 ROMやDOSでは動かない。それに〜、、、Cじゃないシィ〜
348 :
デフォルトの名無しさん :05/01/05 16:20:29
>346 どの辺りが気持ちいい?
349 :
デフォルトの名無しさん :05/01/05 19:06:09
>340は釣りでした。でもホントに知らない人多いんだな〜
>>340 Cmd.exe上でならhoge > out.txt 2> error.txt
351 :
デフォルトの名無しさん :05/01/05 21:34:12
3点を通る円の中心を求める計算プログラムを作成しろという課題が出たのですが、 連立方程式をどうやってプログラムに直したらよいか分かりません。 どなたか教えてください。
352 :
デフォルトの名無しさん :05/01/05 21:40:59
3点の座標をscanfで入力。 計算した結果を代入。結果をprintfで出力。
行列使え
354 :
351 :05/01/05 21:44:31
>>352 scanfに代入する式が分からないです。
355 :
351 :05/01/05 21:47:02
すいません書き方を間違えました。 x^2+y^2+ax+by+c=0というのは分かるのですが、 これをどうプログラムにしたら良いか分からないです。
手作業で解くやり方を入力しろ
357 :
351 :05/01/05 22:00:49
358 :
デフォルトの名無しさん :05/01/05 22:03:51
1,3,9,27・・・のとうに、数値を三倍していき、その時々の各数値を表示するプログラムを作成しなさい。 ただし、数値が10000を超えたら処理を終了させるようにすること。 という宿題なのですが下記のように入力したところ1,が永遠に表示されてしまいます。 どのように訂正すればよいのでしょうか? void main(void) { int a,k; k=1; for (a=1;k<=10000;a+2){ k=a*a; printf("%d,",k); } }
359 :
デフォルトの名無しさん :05/01/05 22:05:41
授業をモーレツに聞け。教科書見ろ。掛け算は*、割り算は/だ。+,(,)はそのまま。
× a+2 ○ a+=2 もしくは a = a + 2
361 :
デフォルトの名無しさん :05/01/05 22:07:47
a+2は代入でない
void main(void) { int k; for(k = 1; k <= 10000; k *= 3){ printf("%d", k); } }
int main(void)にしろ
364 :
351 :05/01/05 22:21:52
#include <stdio.h> #include <math.h> int main() { int i,j,k; double cx,cy,r; double x[3],y[3]; double pivot; double a[3][4]; double erase; printf("始点:"); scanf("%lf,%lf", &x[0], &y[0]); printf("中間点:"); scanf("%lf,%lf", &x[1], &y[1]); printf("終点:"); scanf("%lf,%lf", &x[2], &y[2]); for(i=0; i<3; i++) { a[i][0] = x[i]; a[i][1] = y[i]; a[i][2] = 1.0; a[i][3] = (x[i]*x[i] + y[i]*y[i]); } for(i=0; i<3; i++) { pivot = a[i][i]; for(j=0; j<4; j++) { a[i][j] /= pivot; } for(k=0; k<3; k++) { erase=a[k][i]; for(j=i; j<4; j++){ if(k != i) a[k][j] -= erase*a[i][j]; } } }
365 :
351 :05/01/05 22:22:20
cx = a[0][3]/2; cy = a[1][3]/2; r = sqrt((cx*cx) + (cy*cy) - a[2][3]); printf("中心:(%lf, %lf)", cx, cy); printf("半径:%lf", r); return 0; } 一応作ってみたんですが、これだと簡単な計算はできるのですが、 小数点などのちょっと複雑な計算だとエラーが出てしまいます。 どこを改良したらよいでしょうか?
366 :
358 :05/01/05 22:22:32
>>359 〜363
レスありがとういございます。
362でできました。
367 :
デフォルトの名無しさん :05/01/05 22:23:35
宿題の答え載せるなボケ
スレの存在意義を否定するなボケ
369 :
デフォルトの名無しさん :05/01/05 22:30:33
学校から苦情来るんだボケ
誰に苦情が来るの?
371 :
デフォルトの名無しさん :05/01/05 22:38:39
で、351はちったあわかったのか?
372 :
デフォルトの名無しさん :05/01/05 22:43:29
つうか
>>351 よ、その先生はmath使えと言っていたのか?
373 :
351 :05/01/05 23:04:52
いえ、使えと言ってませんでした。
こんなスレイラネ
375 :
デフォルトの名無しさん :05/01/05 23:11:06
376 :
デフォルトの名無しさん :05/01/05 23:37:25
1月11日〆切の冬休みの課題が出たのですが、よくわかりません… [問題文]元日からの日数を入力して、何月何日かを出力する。 閏年ではない年として計算してよい。 <入力例> 72 <出力例> 3月13日 よろしくお願いしますm(__)m
377 :
デフォルトの名無しさん :05/01/06 00:14:06
英単語を任意個入力して、それをアルファベット順に並び替えるプログラムを 作りたいのですが、分かりません・・・。 制御構造と関数を必ず使わなければならないそうです。 言語はCです。明日22時提出なので、よろしくお願いします!!
>>376 Cか、C++か、はっきり汁。と言うかテンプレ使って質問汁。
sort
自己解決しました。ありがとうございました。
すいません関数=「自分で定義した関数」のことです。 紛らわしくてごめんなさい。。
>>376 一応Cで。
#include <stdio.h>
int main(void){
int i, num, days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("日数:");
scanf("%d", &num);
for (i = 0; i < 12; i++) if ((num -= days[i]) <= 0) break;
if (i == 12) printf("日数大きすぎ");
else printf("%d月%d日", i + 1, num + days[i]);
}
>>377 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag{
char name[16];
struct field_tag *next;
} field;
void search_and_insert(field *dest, const field *src){
field *temp;
if (dest->next == NULL) {
dest->next = (field*)malloc(sizeof(field));
memcpy(dest->next, src, sizeof(field));
}
else if (!(strcmp(dest->next->name, src->name) < 0)) {
temp = (field*)malloc(sizeof(field));
memcpy(temp, src, sizeof(field));
temp->next = dest->next;
dest->next = temp;
}
else search_and_insert(dest->next, src);
}
void free_all(field *ptr){
if (ptr->next != NULL) free_all(ptr->next);
free(ptr);
}
int main(void){ field *root= (field*)malloc(sizeof(field)), *cur = root, temp; memset(root, 0, sizeof(field)); temp.next = NULL; while(scanf("%s", temp.name) != EOF){ search_and_insert(cur, &temp); memset(&temp, 0, sizeof(field)); } cur = root; while (cur != NULL){ printf("%15s\n", cur->name); cur = cur->next; } if (root != NULL) free_all(root); return 0; }
>>383 ありがとうございます!!なにやら難しそうなプログラムなんですね。。
コンピュータ音痴で困ってました。助かります!!
>>385 いや、もっと簡単に出来るんだが、手元に作り溜めがあったから、
そのままコピペしただけ。
387 :
デフォルトの名無しさん :05/01/06 07:55:23
195と同じ質問になってしまうのですが教えてください。 プログラム全くなのでお願いします。 「標準入力から C 言語のプログラムテキストファイルを読み込み、 使用している関数名を頻度順に並べなさい。 これは宣言文と実際の式のどちらも含みます。 なお、同じ頻度の関数は辞書順に並べなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに 入力した出力を示しなさい。 なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに 依存しなければなりません。勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。」
388 :
デフォルトの名無しさん :05/01/06 08:37:58
>387 君の実力だとCでは無理かも知れない。ヒントは、cdecl cproto wc flex bison yacc パーサー
動的確保とか習っていないのに使うと教師に注目される可能性がある
boost::tokenizer や boost::spirit や std::vector に似た機能を作って 実装すると教師に注目される可能性がある
391 :
デフォルトの名無しさん :05/01/06 08:54:35
君がどうしようもない怠け者だったら、C++ parserでぐぐれ。
>>387 >これは宣言文と実際の式のどちらも含みます。
というのはどう解釈したらいいんだろ。
区別しないということでいいのか?
393 :
デフォルトの名無しさん :05/01/06 12:26:38
[2] 文字列のリストをファイルから文字型の2次元配列に読み込み キーボードから読み込んだ文字列を逐次検索するプログラムを作成せよ。 [3] 環境 [3.1] OS:ウィンドウズXP [3.2] コンパイラ(バージョン): コマンドプロンプト? [3.3] 言語:C言語 [4] 期限:2005年01月7日 午後まで ファイルを読み込むぐらいしかわからないです、その後の検索からさっぱり もの凄い簡単ぽいですがよかったら教えてください
コンパイラが何か判ってない辺り、実は全然書いてない悪寒。
コマンドプロンプトで bcc32 ***.c ってやってるんだけどこれコンパイラじゃないの? とりあえず適当だけどやったソース貼ります main() { FILE *f1; char a[3][11]; char moji[3]; int i,n; n=3; f1=fopen("word.txt", "r"); for(i=1; i<=n; i++); fgets(a[i], 3, f1); fclose(f1); printf("検索したい文字列を入力してください\n"); scanf("%s", moji);
/* 逐次検索 */ while(i<n && a[i]!=moji) i++; if(a[i]==moji) printf("%3s は %3d 番目にみつかりました\n", moji, i); else printf("%3s は見つかりませんでした\n", moji); return 0; } なんかずれた、後一番上に #include <stdio.h> #include <string.h> 抜けてました
専門か大学かは知らんが、その程度のことも教えられていないし、自分で調べようともしていないのか
400 :
デフォルトの名無しさん :05/01/06 13:25:49
>>393 突っ込みどころが多過ぎ。
特に酷いのは、
・二次元配列の使い方
・検索ロジック
の2点。
前者は勉強し直せ。後者は標準ライブラリ関数を使うのが無難。
そうそう、配列の要素数の取り扱いについても要注意で。
>397は、プログラムは全てウィンドウを持っていると思い込んでいる悪寒。 少なくとも、bcc32が独立したプログラムと認識してないと思われ。
403 :
デフォルトの名無しさん :05/01/06 13:52:04
まあ、ゆっくり料理の本を読もうゼ。
なんでstring.hをインクルードしてるのに比較を(ry
405 :
デフォルトの名無しさん :05/01/06 16:19:51
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):1.キーボードから5つの実数データを入力し、その ・合計 ・平均 ・最大値 ・最小値 ・範囲 を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン): ? [3.3] 言語:C/C++/どちらでも可 のいずれか :C [4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか 2005年01月06日17:00 [5] その他の制限: お願いします
>>405 おいてめーマルチしてんだろうが
C言語なら俺に聞けのスレであやまってきたら解いてやるぜはげ
ていうか過去ログ読めば答え載ってそうだけど?
その程度なら自分でできるべ つーかなんで使ってるコンパイラさえ知らないんだヴォケ とマルチ初心者厨に言ってみる
409 :
デフォルトの名無しさん :05/01/06 17:02:40
>1-407 解決しました
#include <stdio.h> #include <stdlib.h> #define NaN (0)/* 数値が得られないことを示せればいい */ #define numberof(x) (sizeof(x)/sizeof(*(x))) static double total(double * pValues, int nValues) { int ic; double total = 0; for (ic = 0; ic < nValues; ++ic) { total += pValues[ic]; } return total; } static double average(double * pValues, int nValues) {return nValues == 0 ? NaN : total(pValues, nValues) / nValues;} static double maximum(double * pValues, int nValues) { int ic; double maximum; if (nValues == 0) { return NaN; } maximum = pValues[0]; for (ic = 1; ic < nValues; ++ic) { if (maximum < pValues[ic]) { maximum = pValues[ic]; } } return maximum; }
static double range(double * pValues, int nValues) {return maximum(pValues, nValues) - minimum(pValues, nValues);} int main(void) { static const char * const sLabels[] = {"1st", "2nd", "3rd", "4th", "5th",}; double values[numberof(sLabels)]; int ic; for (ic = 0; ic < numberof(sLabels); ++ic) { char buf[100];/* 実数値一個のためにはこんなに要らね */ printf("Input %s value.\n", sLabels[ic]); if (fgets(buf, sizeof(buf), stdin) == NULL) { return EXIT_FAILURE; } values[ic] = atof(buf); } printf("total:%.10g\n" "average:%.10g\n" "maximum:%.10g\n" "minimum:%.10g\n" "range:%.10g\n", total(values, ic), average(values, ic), maximum(values, ic), minimum(values, ic), range(values, ic)); return EXIT_SUCCESS; }
見肉
/* これで充分 */ int main(void) { char buf[100]; /* 実数値一個のためにはこんなに要らね */ unsigned num = 0; double total = 0; double minimum = NaN; double maximum = NaN; while (fgets(buf, sizeof(buf), stdin)) { double value = atof(buf); ++num; total += value; if (num == 1 || value > maximum) { maximum = value; } if (num == 1 || value < minimum) { minimum = value; } } printf("total:%.10g\n" "average:%.10g\n" "maximum:%.10g\n" "minimum:%.10g\n" "range:%.10g\n", total, total / num, maximum, minimum, maximum - minimum); return EXIT_SUCCESS; }
0x07 (0111) の 右から1番目のbitは? → 1 右から2番目のbitは? → 1 右から3番目のbitは? → 1 右から4番目のbitは? → 0 って感じにしたいんだがどうやればいいんだ? 標準関数で、任意の位置のbitを調べるものとかってある?
シフトして逐一mod2とか?
CとC++どっちがいい?
417 :
デフォルトの名無しさん :05/01/06 18:47:24
>414 整数nの左からi+1番目のビットは!!(n&(1<<i))です。
418 :
デフォルトの名無しさん :05/01/06 18:49:05
>417 右の間違い
あ、忘れてた。C言語でお願いしたい for(a=7;a!=0,a>>=1){ b=a; if (b&=1) ==1) printf( "bit=%d",b); } ってのを自分考えたんだけど
421 :
デフォルトの名無しさん :05/01/06 18:52:19
>417-418 ありがと
// C++ #include <iostream> #include <bitset> using namespace std; int main(){ bitset<4> bs(0x07); for(int i = 0; i < bs.size(); i++) cout << "右から" << i << "番目のbitは? → " << bs[i] << endl; return 0; } /* C(もちろんC++でもOK) */ int main(){ unsigned int n = 0x07; for(int i = 0; i < 4; i++) printf("右から%d番目のbitは? → %d\n", i, n >> i & 1); return 0; }
書き忘れ 後者に#include <stdio.h>
ミスって途中で送信 ってのを自分では考えたんだけど、これだと元の値が変わってしまう 3変数使えば問題なくできるんだけど、なんか上手い方法はないかなぁ、と と書いていたら返答が。皆ありがとう
すみません、よろしくお願いします。 [1] 授業単元: 数値計算プログラミング実習 [2] 問題文(含コード&リンク): 1・二次関数の二次の係数、一次の係数、定数 a,b,c と xの最大値、最小値およびyの最大値、最小値を入力し、二次関数のグラフを描画するプログラムを作成してください。 xの最小値、最大値が1行めから20行目に yの最小値、最大値が1ます目から40ます目に対応するようにしてください。 グラフは '*" で描画してください。 2・上記グラフに、X軸Y軸を'+'で描画し グラフ上のf(x)=0の解の近傍点を'@"で描画してください。 [3] 環境 OS:solaris 言語:C言語 [4] 期限:2005年1月11日 [5] その他の制限:includeするのは、できるだけ<stdio.h>のみ。
426 :
デフォルトの名無しさん :05/01/06 20:45:52
<問題> 保存してあるファイルの内容を読み出して、各文字列の先頭に行番号を 付けて、画面に1ページごとに表示するプログラムを作成する <制限> getchを使う ページが変わっても番号は振りなおさない よろしくお願いします
427 :
デフォルトの名無しさん :05/01/06 20:51:12
>425 char[][]仮想画面で描くのが一番かっこいいやり方だ。分からなかったらy軸を平行にたどりながら、左上から右下に描いていきな
428 :
デフォルトの名無しさん :05/01/06 20:55:59
>426 小さな紳士よ、重複投稿は顧客を失うゾ
429 :
デフォルトの名無しさん :05/01/06 20:59:08
>>428 すいません、問題自体を丸投げする場合はやはりこちらかと思いまして・・
以後気をつけます。
430 :
デフォルトの名無しさん :05/01/06 21:00:46
[3] 環境 [3.1] OS: LINUX [3.2] コンパイラ(バージョン): [3.3] 言語:C言語 直線をBMPファイルで保存するプログラムを作成したのですが、 出来た画像が上下さかさまになってしまいました。 課題はこのままで提出しましたが、何故上下さかさまになる理由がわかりません。 どうか教えてください。お願いします
BMPは左下から保存するから。
432 :
デフォルトの名無しさん :05/01/06 21:06:35
>430 M$の設計したデータ仕様に例外はつきものさ。確か高さを負にしなければy座標が逆になる。BITMAPINFO,BITMAPINFOHEADERを参照。
ディスプレイ表示上の理由が無いではない。
C++Builder を使用しています。 ブラックジャックを作るうえで、 1.実際のカードの数値とブラックジャックで使用する数値が異なる点(Kが13ではなく10であったり) 2.Aは1と11と、場合によって二つの数値になるので、それをどう処理するか。 Aが複数手元に来た場合、片方だけ11から1にするにはどうしたらよいのか 悩んでいます。何か良い方法は無いでしょうか?
[1] 授業単元:信号処理
[2] 問題文(含コード&リンク):単純移動平均を用いて、入力sin(400πt)+cos(200πt)+1+U
(ただしUは一様乱数、データ数2000点、サンプリング間隔τ=0.0001[s])に対して
平滑化点数m=5 (N=11)としたときの結果を出力せよ。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ(バージョン): Cygwin?
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限: なし。
ソース→
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ろだの宿題の答えはここに書け!!No49のソースで入力信号はデータとして出力できるのですが、単純移動平均を
適用するためにどう変形すればいいかわかりません。データ点数が11個あるので、
前後5つのデータと自身を単純平均したデータを一つのデータとして出力するのでしょうが・・
よろしくおねがいします。
436 :
デフォルトの名無しさん :05/01/06 23:13:48
>>434 2番について
1枚目のAは保留にしておく
2枚目以降のAは必ず「1」とする
最後に1枚目のAを21を超えないように決定する
の順でいいかと
437 :
デフォルトの名無しさん :05/01/06 23:22:17
>>426 こんな感じ?
【テキストファイル】
zero one two three ...
twenty_five twenty_six twenty_seven twenty_eight ...
【実行内容】
[1ページ目]
0 zero
1 one
2 two
3 three
...
(矢印キー等を押す)
[2ページ目]
0 twenty_five
1 twenty_six
2 twenty_seven
3 twenty_eight
...
>>438 > ページが変わっても番号は振りなおさない
~~~~~~~~~~
440 :
デフォルトの名無しさん :05/01/07 00:07:38
Whileを使い1〜10までの整数の二乗を計算して表示するプログラムを作成しなさい。 という宿題なのですがうまくコンパイルできませんどこがわるいのでしょうか? #include <stdio.h> void main(void) { int s,k; printf("X X**2\n"); k=1; while(k<=10){ s=k*k; printf("%d… %d\n",k,s); } k++; printf("\n"); } return 0; }
>>440 printf("%d… %d\n",k,s);
} ←こいつが余計
k++;
中括弧がちゃんと全部対応してるか確認しなさい。
前にも思ったんだけど、こいつWhileなんて書いてる時点で 学校やめた方がいいと思う
VBの香りがするな、懐かしい…
445 :
440 :05/01/07 00:35:49
>>441 ありがとうございました。
きちんとコンパイルされました。
>>440 スマートに書くとこんなカンジ
#include <stdio.h>
int main(void)
{
printf("X X**2\n");
for(int k=1; k<=10; k++) printf("%d… %d\n", k, k*k);
printf("\n");
return 0;
}
447 :
440 :05/01/07 00:39:16
>>446 For版で書いていただきありがとうございます。
今回の宿題ForとWhileの二つ提出でForは私も考えられたのですが、
Whileの変換でへんなところに{いれててエラーになってました・・・
>>436 ありがとうございました。
トランプの識別は構造体を利用しているんですが、1番の質問に何か良い考えはないものでしょうか…。
上手い方法が全く思い浮かばなくて。
449 :
デフォルトの名無しさん :05/01/07 00:46:50
構造体に得点のメンバつければいいだけちゃうんかと
450 :
デフォルトの名無しさん :05/01/07 01:20:20
>>450 _, ._
(;゚д゚) ・・・・
"C++ parser" じゃなくて、C++ と parser だろ。
453 :
デフォルトの名無しさん :05/01/07 01:40:39
>>451 C++ と parser ???
どうゆうことですか?
ぐぐる[ラ四動詞] Google(などの検索エンジン)で検索すること。 つまり Googleで"C++ parser"をキーワードにして検索しろってこった
455 :
デフォルトの名無しさん :05/01/07 01:54:18
検索してみたのですが文法がでているやつですか?
456 :
デフォルトの名無しさん :05/01/07 03:40:10
並べ替えたい単語数を入力して、 英単語をその数だけ入力して、 アルファベット順に並べるプログラムってどうやって作れますか? どうかよろしくお願いします。
457 :
デフォルトの名無しさん :05/01/07 04:18:14
>>561 マルチいくない。
英単語アルファベット順にソートするなら
strncmpあたりか先頭文字の値を比較すればいいんでないかな。
あんま覚えてないんで間違ってるかもしれない。
宿題じゃないんですが…宿題の一部で、なんとかならないかなと
思うところがあるので質問させていただきます。
[2] 問題文(含コード&リンク):
12345…Nのという数列があるとする。
数を並びえた数列はN!個あるが、それらをすべて列挙するアルゴリズムきぼん。
例えばN=3のときは3!=6個、以下のように求める。
0:123 1:132
2:213 3:231
4:312 5:321
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン): GCC
[3.3] 言語:C
[5] その他の制限:
ただし、以下のような総当りをしてはいけない。
111->false 112->false
113->false 121->false
122->false 123->TRUE
また、生成値を与えると一意に数列が決まったりするとなお良い。
例:0を引数にすると123を返し
1を引数にすると132を返し
5を引数にすると321を返す、など.
スレ違いかと存じますが、いい案があったら教えてください
458 :
457 :05/01/07 04:22:40
459 :
デフォルトの名無しさん :05/01/07 08:47:52
>457 最初の数字で場合分けしたら、次の文字で場合分けし、…(略)。これで場合分けの木ができる。木の要素を規則的に並び換え、番号を付ける。
460 :
デフォルトの名無しさん :05/01/07 09:02:12
>455 怠け者決定
>>457 int Factorial(int n){
int m = 1, i;
for(i = 2; i <= n; i++)
m *= i;
return m;
}
void swap(char *v1, char *v2)
{
char tmp;
tmp = *v1;
*v1 = *v2;
*v2 = tmp;
return;
}
/* 次に続く */
/* 前の続き */ int GetSeries(int number, int order) { int i, n; char *tmp = malloc(number + 1); for(i = 0; i < number; i++) tmp[i] = '1' + i; tmp[number] = '\0'; for(i = 0; i < number - 1; i++){ n = order / Factorial(number - i - 1); swap(tmp+i, tmp + i + n); //printf("%d→", order); order %= Factorial(number - i - 1); //printf("%d\n", order); } n = atoi(tmp); free(tmp); return n; } int main(void) { int i, n = 4; for(i = 0; i < Factorial(n); i++) printf("%d: %d\n", i, GetSeries(n, i)); return 0; }
#include <stdio.h> #include <stdlib.h> これつけといてorz 工房の弱い頭で考えたらこれが限界。ショボくてスマソorz
>>457 #include <stdio.h>
void hoge(int x, int n, unsigned bits, char buf[])
{
int i;
if (x > n) {
puts(buf);
return;
}
for (i = 0; i < 9; i++) {
if (bits & (1 << i)) {
buf[x - 1] = '1' + i;
bits &= ~(1 << i);
hoge(x + 1, n, bits, buf);
bits |= (1 << i);
}
}
}
int main(int argc, char *argv[])
{
int n = argv[1][0] - '0';
unsigned bits = ~((~0) << n);
static char buf[10];
hoge(1, n, bits, buf);
return 0;
}
1〜9までの階乗を求め表示するプログラムを作成しないさい。 例: 5の階乗 5!=120 求め方→5!=5*4*3*2*1 9の階乗 9!=362880 求め方→9!=9*8*7*6*5*4*3*2*1 という課題なのですが #include <stdio.h> void main(void) { int a,b,c; for(a=1;a<=9;a--){ までしか考えられないのですがどのように書けばよいのでしょうか?よろしくお願いいたします。
466 :
426 :05/01/07 10:34:24
>>438 それだと思います^^;どのようにしたらよいのでしょうか?
MSXベーシックなら簡単なのに・・・
467 :
デフォルトの名無しさん :05/01/07 10:46:42
int a,b,c;
for(a=1;a<=9;a--){
までしか考えられないのですがどのように書けばよいのでしょうか?よろしくお願いいたします。
466 名前:426 :05/01/07 10:34:24
>>438 それだと思います^^;どのようにしたらよいのでしょうか?
MSXベーシックなら簡単なのに・・・
名前: E-mail:
>>465 long Factorial(int x)
{
int i;
long y;
for (i = 1; i <= x; i++)
y *= x;
return y;
}
int main(void)
{
int i;
for (i = 1; i <= 9; i++)
printf("%d!\t%ld\n", i, Factorial(i));
return 0;
}
>>466 C++でgetchの制限さえなければCより簡単。宿題だから仕方ないけど。
>>465 int main(void)
{
int a=1, i;
for (i=1; i<=9; ++i) {
a *= i;
printf("%d!\t%ld\n", i, a);
}
return 0;
}
>>457 で、一意に数列を返す
#include<stdio.h>
#include <stdlib.h>
unsigned d;
void sub( char *s, unsigned n, unsigned x, unsigned a )
{
unsigned i,t;
for( i=0; i<n; i++ ){
if( n==1 ) if( a==0 || ++d==a ) printf("%s\n", s);
t=*(s+x-n),*(s+x-n)=*(s+x-n+i),*(s+x-n+i)=t;
sub( s, n-1, x , a );
t=*(s+x-n),*(s+x-n)=*(s+x-n+i),*(s+x-n+i)=t;
}
}
int main( int argc, char *argv[] ){
char str[10]={0}, i, n=(argc>=2)?atoi(argv[1]):0;
d=0;
for( i=0; i<n; i++ ) str[i]=i+'0'+1;
sub( str, i, i, (argc>=3)?atoi(argv[2]):0 );
}
472 :
デフォルトの名無しさん :05/01/07 13:05:23
[2] 問題文(含コード&リンク): n個の英単語を入力し、アルファベット順に並び替えて 出力するプログラムを、関数及び制御構造を必ず用いて 作成せよ。なお、nは有限であっても良いが固定であっては ならない。 [3] 環境 [3.1] OS: Windows XP Home [3.2] コンパイラ(バージョン): Visual Studio.NET 2003 [3.3] 言語:C [4] 期限:2005年01月07日22:00まで 出直してきました。どうかお願い致します。
473 :
デフォルトの名無しさん :05/01/07 14:19:31
>>470 ありがとうございました!!printf少しいじって例題のように出力できるようになりました。
474 :
C言語です。 :05/01/07 14:28:07
int a,b,x,y; if(a>b){ x } else if(a<b){ y } この式あってますか? もしa>bならx,b<aならyとしたいのですが。
a==bの時は? そもそも何をxにしたいの?
a==bのときはどうするんだ?
x,yは文ではないようですね
478 :
474 :05/01/07 14:35:09
みなさんありがとうございます。 まずa==bは無視しています。 xは赤、yは青という意味です。
>>478 いやそうじゃなくて、プログラム中に
1+2; と書いても間違いではないけど意味はないだろ
xとyをどうしたいのさ
480 :
474 :05/01/07 14:42:33
えっと、474と同じようなプログラムが他に3つあるのですが、 それぞれのプログラム内で、青か赤かを認識させといて、 4つを総合させたいんです。。
481 :
474 :05/01/07 14:44:35
・・・なんか意味不明ですよね^^; うまく書けない(><)
[2] 問題文(含コード&リンク): 文字列を入力として受付け、“end”が入力されるまで入力を繰り返し受け付ける。 “end”が入力された場合、それまで入力した文字列の内、長さが一番長いものを出力する。 ただし、最大の要素数の指定にはマクロを用いること。 例) a ab abc abcd end 出力結果:abcd [3] 環境 [3.1] OS:Windows XP pro [3.2] コンパイラ(バージョン):Visual C++.net 2003 [3.3] 言語:C [4] 期限:2005年1月8日朝9:00まで どなたかお願い致します。もう全然お手上げなんです。
急に増えてきたな。そろそろ学生の正月休みが終わる頃だからかな。
>>482 #include <stdio.h>
#include <string.h>
#define N 10 // 最大要素数
int main()
{
char buf[N][256];
int i=0, len_max=0, len, index=0;
for(;;) {
fgets(buf[i], sizeof(buf[i]), stdin);
len = strlen(buf[i]);
buf[i][len-1]='\0';
if (strcmp(buf[i], "end") == 0)
break;
if (len_max < len) {
index = i;
len_max = len;
}
if (++i == N)
break;
}
if (i != 0)
printf("%s\n", buf[index]);
return 0;
}
あまりスマートじゃないですが orz
>>484 スマートさは兎も角、fgets()!=NULLは確認する癖をつけたほうがいい。
>>472 改行思いっきり詰めたから適当に直して
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** add_str(char** a,int n,const char* s)
{
char** p;
p=realloc(a,sizeof(char**)*(n+1));
if(p){p[n]=malloc(strlen(s));if(p[n]){strcpy(p[n],s);}else{p=NULL;}}
return p;
}
int sort_sub(const void* x,const void* y){return strcmp(*(char**)x,*(char**)y);}
#define MAX_STR1024
int main()
{
int i,n;
char** a=NULL;
char** p;
char s[MAX_STR];
puts("Ctrl+Z [ENTER] で終了");
for(n=0;;n++){
printf("%d>",n);
if(fgets(s,MAX_STR,stdin)==NULL)break;
p=add_str(a,n,s);
if(p==NULL){puts("メモリ不足");exit(1);}
a=p;
}
qsort(a,n,sizeof(char**),sort_sub);
for(i=0;i<n;i++){printf("%s",a[i]);}
return 0;// 解放はOSにまかすさよなら
}
[訂正] ああスペースがつぶれた.↓ #define MAX_STR 1024
>>485 あ、忘れてました…
指摘ありがとうございます。
489 :
457 :05/01/07 16:04:19
みなさんありがとうございます。 まだ内容を吟味はしていないのですが、理解に努めますorz
490 :
472 :05/01/07 16:29:46
どうか助けて下さい m(_ _)m
492 :
デフォルトの名無しさん :05/01/07 16:47:52
C言語の宿題です。ちょっと分りにくいかも。 **** text.txt **** awsedr ftgy * hujikolp * zsxdc vcgbn * vnytk wruigf ・ ・ *************** こんな感じのtext.txtというテキストファイルがあって 不規則的に「*」が数行置きに置かれてます。 これを hoge[0].str[0]={"awsedr"} hoge[0].str[1]={"ftgy"} hoge[1].str[0]={"hujikolp"} hoge[2].str[0]={"zsxdc"} hoge[2].str[1]={"vcgdn"} こんな感じにします。 これはどうやればいいんですか? とりあえずforを使うっていうのは分ったんですが・・・
while(fgets(buf, sizeof(buf), /*** ファイル ポインタ ***/) != NULL){ if(!strcmp(buf, "*")){ i++; j = 0; } else { /*** hogeを動的に確保する場合は数に応じて拡張 ***/ strcpy(&(hoge[i].str[j]), buf); j++; } }
494 :
492 :05/01/07 17:22:43
>>493 レスありがとうございます。
でもコードが難しくてよく理解できないので
もし良かったら、どういう仕組み(?)に
なっているのか教えてください。
bufがファイルポインタなのかな・・・?
>>494 コードが難しいから理解できないんじゃなくて、
単に君の知識が不足してるから理解できないだけなわけだが。
×知識 ○知能
毒舌吐かないと気がすまない人はカルシウム不足
499 :
492 :05/01/07 17:45:48
本当に分らないんです。 while(fgets(buf, sizeof(buf), /*** ファイル ポインタ ***/) != NULL){ このコメントのところに、ファイルポインタを書くという意味ですか? だとすると、bufは何の変数なんでしょうか
464
sage
>>457 463さんの方法で464の順列を生成してみました
#include <stdio.h>
long kaijo[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
long hoge(int n, long d) {
int i, j, a, b;
unsigned bits = ~((~0) << n);
long x = 0;
for (i = 1; i <= n; i++) {
a = d / kaijo[n - i];
b = 0;
for (j = 0; j < 9; j++) {
if (bits & (1 << j))
b++;
if (b > a)
break;
}
x = x * 10 + (1 + j);
bits &= ~(1 << j);
d %= kaijo[n - i];
}
return x;
}
int main(int argc, char *argv[]) {
int n = argv[1][0] - '0';
long i;
for (i = 0; i < kaijo[n]; i++)
printf("%ld\n", hoge(n, i));
return 0;
}
505 :
492 :05/01/07 18:16:38
なんかエラーが出るんですけど・・・ 'strcpy' : 1 番目の引数を 'char (*)[256]' から 'char *' に変換できません。 ヽ(`Д´)ノウワァァン!!
&とれよ
507 :
492 :05/01/07 18:23:48
>>506 コンパイルできました!ありがとうございます!
頭いいですね!
こういう課題が出るってことは最低でも高校生だよなぁ とてもそうは思えない奴が多すぎだ 出来のいい奴はこんなところに来ないだろうから、特にそう見えるのかもしれないが
まぁ、ちょっと調べればできることなのに何も調べないなさそうな奴多そうだし。
ちょっと調べるより、質問丸投げの方が楽だからな…
そうでもない。
さんざん答えた後に言うなよ・・・
まあ、なんて聞いたらいいのか解らんときもあるさ
515 :
デフォルトの名無しさん :05/01/08 05:05:51
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): テキストファイルの入力に対して行数の短い順に並べて出力しなさい。空行は出力しないこと。 例) abcd abcdef ab abc 出力結果: ab abc abcd abcdef [3] 環境 [3.1] OS: Windows XP pro [3.2] コンパイラ(バージョン): Visual Studio 6 [3.3] 言語:Cのみ [4] 期限:2005年01月14日22:00まで 自力で半月頑張りましたが、ファイル読み込みまでしかうまく出来ませんでした どうかお願いします。
自己解決しました。ありがとうございました。
(・3・) エェー どういたしましてですYO
518 :
515 :05/01/08 05:19:27
数分で解決出来たらこんなに悩んでませんorz
7分で解決出来てるじゃんw
>>519 一目瞭然だと思いますが、516は偽者の発言です
>>515 ソートするの
行あたり文字数の上限は
どこに出力するの
C++とかJavaとかじゃないと解く気しねーな
>>521 80行を超えた分は無視して読み込まないで、
表示は実行ウインドウに表示されれば良いみたいです。
行数の上限はあるの?
行数の上限の指定はありませんでした。
>>213 80行を超えた分 ->80文字
でした。何度もすいません。
>>523 80行を超えた分 ->80文字を超えた分
でした。
徹夜で何かパニくってましたorz
ホントに何度もすみません。
空行って改行しかない行? それともスペースやタブしかない行?
全然だめぽなんで作り直すからちょっと待ってて
すいません、少し席をはずしてました。 こんなに早く作って頂きまして、ホントに感謝です! さっそく実行してみますね。
>>528 空行は改行しかない行で良いと思います。
529さん、ありがとう御座います。 これから色々試して出きる限り動くように頑張ろうと思います。 おかげさまで助かりました!
ぬるっぽ
ぐるっがああっ
537 :
デフォルトの名無しさん :05/01/08 11:43:52
[1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: UNIX Solaris [3.2] コンパイラ(バージョン): [3.3] 言語:C++ 質問したいのは、主に どのようにして辞書順にソートするかです。 インプットは、一行に一単語のテキスト形式で それを読み込み、辞書順に 並び替えて別のテキストに出力するという 単純なプログラムを作らなけれ ばなりません。 ポイントとしましては、 Typeをmainとは別ファイルに作る。 makefileを作る。 自分が一番分からないところは、どのように辞書順に並び替えるかです。 strcmpでは、辞書順にならないし、もちろん >や<でもなりません。 又、Typeを別ファイルで作るという事ですが 多分、Compareや、Sortといった ファイルを作って、単語同士の比較をそちらにやらせるという感じになると 思うのですが、今一具体的に アイデアがわきません。 助けてください! 御願いします。。
>>537 std::lexicographical_compare()
ソート基準は関数オブジェクトで
540 :
デフォルトの名無しさん :05/01/08 13:10:19
>>537 条件を満たしてないので参考までに
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
#include <functional>
using namespace std ;
inline bool my_comp( const string& lhv, const string& rhv )
{ return lexicographical_compare( lhv.begin(), lhv.end(), rhv.begin(), rhv.end() ) ; }
int main( int argc, const char* argv[] )
{
vector<string> strs ;
ifstream ifile( argv[1] ) ;
ofstream ofile( argv[2] ) ;
copy( istream_iterator<string>( ifile ), istream_iterator<string>(), back_inserter( strs ) ) ;
sort( strs.begin(), strs.end(), ptr_fun( &my_comp ) ) ;
copy( strs.begin(), strs.end(), ostream_iterator<string>( ofile, "\n" ) ) ;
return 0 ;
}
541 :
デフォルトの名無しさん :05/01/08 18:53:47
CでDOSスロットマシーンを作るのですうわなにをするやめrppppppp@@@@@@@@@@@
tes
>>543 mplus関数にn,mの情報が渡されてない
あと
main関数の下から5行目はnじゃなくてm
>544 分かりました、何とかやってみます
546 :
537 :05/01/08 21:18:16
すばやい返答ありがとうございました! 早速、lexical_compareを使ってやってみたいと思います。 又分からない事がでてきたら、よろしくおねがいします。
547 :
537 :05/01/08 22:34:50
>>547 std::lexicographical_compare()なんて使うならstd::stringのメンバ関数の
operator<()使っても何の違いもないと思うんだけど。
>>547 そっち、突っ込みどころだらけ。次のコードのmy_compを別ファイルに
移せば一応条件は満たしていると思うが。
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
#include <functional>
struct my_comp
{
bool operator()(const std::string& x, const std::string& y)
{
return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}
};
int main(int argc, char* argv[])
{
if (argc < 3) return 1;
std::ifstream input(argv[1]);
std::ofstream output(argv[2]);
if (!input.is_open() || !output.is_open()) return 1;
std::vector<std::string> dic;
dic.assign(std::istream_iterator<std::string>(input), std::istream_iterator<std::string>());
std::sort(dic.begin(), dic.end(), my_comp());
std::copy(dic.begin(), dic.end(), std::ostream_iterator<std::string>(output, "\n"));
return 0 ;
}
550 :
537 :05/01/09 02:06:15
>549さん やはり、突っ込みどころだらけですか。。 我ながら低レベルなコードだと思います。 逆に、549さんのコードは ハイレベル過ぎて今一わからない部分があります。 たくさんIncludeされてますが、半分ほど 初めてみるようなLibraryです。 my_compを別ファイルに移すというのは、具体的にどのようにするのでしょうか? my_comp.cpp と my_comp.h を作って、my_compの実行コードを my_comp.cppに 移して、my_comp.hにSpecificationを書いて、 mainのあるファイル内でinclude <my_comp.h> すればよいということでしょうか?
551 :
デフォルトの名無しさん :05/01/09 02:20:28
円周率πの値を計算するモンテカルロシミュレーションのプログラムが分かる 人是非教えてください。お願いします。
552 :
537 :05/01/09 02:25:35
もしよければ 私のコードのどこら辺がおかしいか 大まかにでも教えて 頂けませんか? なるべく理解して 修正していきたいので よろしく御願いします。。 私の考え的には、 1.テキストファイルから単語を読んで、string list[100]に保存していく。(最高100単語) 2.保存していく際に、以下の方法で 辞書順に並び替えながら保存していく。 3.まず単語をstring wordに保存し、wordをlist[n] (最初はn=0) と見比べる。この時、外部Methodを呼ぶ。 4.外部Methodはパラメーターに渡された二つのstringを比べて、Booleanを返す。 5.外部Methodは二つのstringが同じ場合、もしくは比べる単語が、比べられる単語より辞書順で前に来る場合、Falseを返す。 比べる単語が、比べられる単語より後に来る場合Trueを返す。 6.mainで、methodの返し値がTrueの場合 wordをlist[n++]と比べる。 methodの返し値がFalseの場合 wordをlist[n]とスワップしてから、n++して、3に戻る。 7.最終的に、wordはlist内の一番最後のword (空白)とスワップされる。よって、wordが空白に なった時に このループを終える。 8.list内のデータをファイルに出力する。 以上の事が、私がやりたかった事です。やりたい事がわかっているのに、コードにできないのはとても 歯痒いですね。。多分 以上のアルゴリズムは全くもって低レベルなのでしょうけど。。
std::vector, list 等につっこんで sort これでよけいなことは考えなくてすむ
555 :
551 :05/01/09 02:32:22
>>553 C++を使ったプログラムがわからないのです…
>>551 てきとー
#include <iostream>
#include <cstdlib>
#include <ctime>
#define N 100000
using namespace std;
int main()
{
int cnt=0;
double x,y;
srand((unsigned int)time(0));
for (int i=0; i<N; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if ((x*x + y*y) <= 1)
cnt++;
}
cout << "π=" << (double)cnt/N*4 << endl;
}
558 :
537 :05/01/09 03:31:50
>557さん ほんと感謝します:D
559 :
デフォルトの名無しさん :05/01/09 03:38:35
メモリモデルについて説明せよ。
>557さん こんな丁寧に自分のコードを直された事がなかったので 大変嬉しいです。 分かりやすい解説をどうもありがとう。 教えてもらった通りに書き換えてみたのですが、Compileエラーがいくつか出てしまいます。 環境に依存するものでしょうか?(Solarisです) >g++ -o sorter sorter.cpp と打つと Undefined first referenced symbol in file Compare::Compare(std::string, std::string)/var/tmp/ccLKVSfb.o Compare::Compare_To_Each_Other() /var/tmp/ccLKVSfb.o ld: fatal: Symbol referencing errors. No output written to sroter collect2: ld returned 1 exit status. とでます。何か心当たりはありませんでしょうか? 取り合えずコンパイルされて どのようにソートされるかを見て、できるだけ自分で アルゴリズムから考えなおしてみます。
562 :
デフォルトの名無しさん :05/01/09 13:18:36
ねぇねぇCでスロットマシーン作りたいの
g++ -o sorter sorter.cpp compare.cpp
564 :
デフォルトの名無しさん :05/01/09 13:50:15
>562 '\r'出力とgetch使って試してくんろ
565 :
デフォルトの名無しさん :05/01/09 14:52:57
"1234567〓♂☆★" ♂:1チェリー ♂♂:2チェリー ♂♂♂:3チェリー 〓〓:2バー 〓〓〓:3バー 111〜777:大当たり ☆☆☆:確率変動 ★★★:ディスク初期化
566 :
デフォルトの名無しさん :05/01/09 14:59:39
567 :
デフォルトの名無しさん :05/01/09 15:09:29
\r出力で行の先頭に移動できる。 期待得点=(得点×確率)の和。 期待減点=(減点×確率)の和。 期待点=期待得点-期待減点≒0となるように3ドラムを設計。
569 :
デフォルトの名無しさん :05/01/09 15:44:14
#define D_SIZE ドラムの大きさ char dd[3][D_SIZE][10]={{ドラム1設計},...}; int di[3]={ドラム1の位置,...}; ... printf("%s\r",dd[i][di[i]]);
570 :
デフォルトの名無しさん :05/01/09 15:49:03
sleep関数を使ってアニメ化のための遅延(時間待ち)を行うとよい。ここまでで質問はないか?
ディスク初期化は何点に相当しますか?
>571 -666点
sage
ぼるじょあ#ぶるじょあ
575 :
551 :05/01/09 17:29:04
このプログラムはある系列(SEEDというグローバル変数)の[0,1]なる擬似一様乱数 を発生し表示するプログラムなんですけど、これを参考にして円周率πの値を計算 するモンテカルロシミュレーションのプログラムが作れません。教えてください。 よろしくお願いします! #include<iostream> #include<cstdlib> #define SEED 100000 int main(int argc, char **argv) { unsigned int SEED; unsigned int MAXNUM; if(argc != 3){ cerr << "USAGE:uniform SEED MAXNUM\n"; exit(1); } SEED = atoi(argv[1]); MAXNUM = atoi(argv[2]); srand(SEED); for(unsigned int i =1; i <= MAXNUM; i++){ double x = (double)rand() / (double)RAND_MAX; cout << i << '\t' << x << '\n'; } return(0); }
もう解答出てないか?
577 :
デフォルトの名無しさん :05/01/09 17:36:08
>575 なぜ過去スレやGoogleで調べようとしない? 乱数生成ルーチンを関数にしろ。それから、針が乱雑に落ちる場合を図に描き、その図から円周率を含む式を考えろ
まるち!マルチ!multi!まるち!マルチ!multi!まるち!マルチ!multi!
過去スレというか…
>>556 をちょっと変えるだけでいいんじゃないの?
_ , '⌒ ⌒\ \\ ノノレノ ))) (○) |||ノ 'へ゛゛ーノ ‖ (  ̄ ̄ ̄《目 | ===《目 |__| ‖ ∠|_|_|_|_ゝ ‖ |__|_| ‖ | | | ‖ |__|__| ‖ | \\ 皿皿
581 :
551 :05/01/09 17:50:57
考えてはみたんですけど分からないのです。本当に教えてください。お願いします。
556の何が不満なんだ?
583 :
デフォルトの名無しさん :05/01/09 17:59:14
ファイルを読み込んで1行に空白で区切ってある数字があります。 1行に数字が何個あるかは決まってなく、ファイルの終わりまでの すべての数字を読み込んで総和を出すプログラムなんですが・・・。 もっと簡単になりませんかね? #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char a[256], b[10]; int i,k,sum=0; fp=fopen("data.txt","r"); while(fgets(a,255,fp)!=NULL){ i=0; while( a[i]!='\n'){ k=0; for( ; a[i]!=' '&& a[i]!='\n'&& a[i]!='\0'; i++){ b[k]=a[i]; k++; } b[k]='\0'; sum += atoi(b); for( ;a[i]==' ';i++); } } printf("総和は%d",sum); fclose(fp); return 0; }
584 :
デフォルトの名無しさん :05/01/09 18:07:37
>583 atoiは数字より後の数字以外の文字を無視するから、配列bにコピーするのは無駄
>>583 C++ならこうなる。
#include <fstream>
#include <iostream>
#include <iterator>
#include <numeric>
int main()
{
std::ifstream data("data.txt");
std::cout << std::accumulate(std::istream_iterator<int>(data), std::istream_iterator<int>(), 0) << std::endl;
return 0;
}
586 :
デフォルトの名無しさん :05/01/09 18:12:26
584> どこをかえればいいんですか?
587 :
デフォルトの名無しさん :05/01/09 18:30:02
C言語で因子分析のプログラムを作成したいのですが、誰か参考になるプログラムなどありませんか?
589 :
575 :05/01/09 18:54:54
誰かわかりませんか?
釣りはツマンネ
モロトフカクテル
>>583 自分の求める以外のレスにも何か反応したらどうだい?C限定ならこうなる。
#include <ctype.h>
#include <stdio.h>
int main(void)
{
FILE *fp;
int c, num = 0, sum = 0;
if ((fp = fopen("data.txt", "r")) == NULL) return 1;
while ((c = getc(fp)) != EOF) {
if (isdigit(c)) {
num *= 10;
num += c - '0';
}
else {
sum += num;
num = 0;
while (!isdigit(c = getc(fp)));
ungetc(c, fp);
}
}
sum += num;
fclose(fp);
printf("%d", sum);
return 0;
}
>>592 ungetcとか要るの?
#include <ctype.h>
#include <stdio.h>
int main(void)
{
FILE *fp;
int ch, n=0, t=0;
if ( !(fp=fopen("data.txt","r")) ) return 1;
while( (ch=getc(fp))!=EOF )
if( isdigit(ch) ) n=n*10+ch-'0'; else t+=n,n=0;
fclose(fp);
printf("total:%d", t+n);
return 0;
}
583ではないんですけど、 n=n*10+ch-'0' の-'0'ってなにをしてるんっすか?
n = '3' - '0'; // n == 3
596 :
デフォルトの名無しさん :05/01/09 20:56:22
>594 '0'からの相対位置。Win+R キーを押した後「charmap」と入力してEnter押してみろ
Win+Rで出ることを初めて知った…
ブラックジャックを作っています。一連の流れは作り終えたのですが。 一度対戦を終え、もう一度やり直すと、必ず固まってしまいます。 C++Builderを使用しております。 スタートボタンで「カードをシャッフル・コンピュータとプレイヤーにカードを2枚配る・カードの値の判定と表示」 を行っているのですが。一度はきちんと動くんですが、2回目からは固まるのです。 つまり、スタートボタンが2度は押せないのです。 プログラムはおかしくないとは思うのですが。こういった時の原因ってどう発見すれば良いんでしょうか。
>>599 プログラムがおかしいんです。
現実逃避を止めましょう
601 :
デフォルトの名無しさん :05/01/09 21:16:38
>>600 そうなのかもしれませんが。一度目はきちんと作動するんです。
二回目からも、不自然な動作をする訳じゃなく、ただ固まるだけなので。
それで困ってるんです。
603 :
575 :05/01/09 21:33:21
考えても分かりません。誰か教えてくれませんか!!
>603 どこで分からないか説明できないのなら、きっぱりあきらめなさい。
>>599 ・サンプルなりチュートリアルなりを参考にしているならそれらをよく読む。
・コードを晒す。
ま、どっちかかな。
606 :
575 :05/01/09 21:49:42
申し訳ないんですけどプログラム作ってもらえませんか。
まるち〜
609 :
575 :05/01/09 23:13:32
分からないから頼んでるんですよ。お願いします!
610 :
575 :05/01/09 23:15:18
分からないから頼んでるんですよ。お願いします!
早く俺の宿題やれチンカスども!もう眠いから寝るが、明日の昼までにやっとけ
>599 1度目→2度目の時にやっておかなければならない初期化等の漏れ
正直ここの住人は尊敬するよ。
正直hereのinhabitantはrespectするよ。
ポーカーでカード配るのは出来るんですが、いらないカードを交換する部分が上手くいきません
537です。
549さんのコードを理解しようとしているのですが、最後から3つ目と2つ目の行の
sortとcopyは、Iteratorというライブラリに収容されているMethodでしょうか?
調べてみた所、random_iteratorやら、reserve_iteratorやらと 色々なiteratorがあるようですが、
549さんのコードには、iterator のみがincludeされていますよね。これ一つで、全種類の
iteratorが使えるようになるのでしょうか?
やっていることは分かるのですが、将来も使えるMethodなら使いたいので 教えてください。
後、もう一つだけ教えてください。
多分、ファイルのリンクが上手く行っていないとおもうのですが、549さんのコードでいう
my_comp、(私は自分で、compare.cpp compare.hという二つのファイルに、ちょっと違うコードを
書いてみました)なのですが、 Typeを別クラスに収納するやりかたは ぼんやりですが分かっている
のですが ファンクションのみというのは、どのようにするのでしょうか?やってみたのですが、
二つだけ、コンパイルエラーがでてしまいます。。
以下に、549さんのコードをヒントに書いてみたコードのリンクを張っておきますので、時間があるときに
目を通していただいて、間違っている所を指摘していただければ幸いです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/58.zip 宜しく御願いします。
618 :
デフォルトの名無しさん :05/01/10 05:15:03
プログラム はじめたばかりの大学生ですが ・授業単元:配列? ・環境 ・ OS: win XP ・コンパイラ(バージョン):bcpad ・言語:C++ ・期限:1989年1月10日: 今日中だとうれしいです よろしくお願いいたします。 3問課題が出題されたのですが、後の2問がりかいできませんでした。 申し訳ありませんが協力おねがいします。 @ #include <stdio.h> void main(void) { int a[ ]={ 65,82,47,98,100,83,71,39,54,26}; int b[10],i; for(i=0;i<=9;i++){ b[i]=a[i]; } for(i=0;i<=9;i++){ printf(“a[%d]=%d b[%d]=%d\n”,i,a[i],i,b[i]); } }
619 :
618 :05/01/10 05:21:31
A @の配列 aの要素値を多きい順に並び替えるプログラム。 B @の配列 aの要素値の最大値と最小値を求め、表示するプログラムを作成。 以上の2問です。 すいませんが頼らせていただきます。よろしくお願いします。
>・期限:1989年1月10日: 今日中だとうれしいです ?????
A #include <iostream> #include <iterator> #include <algorithm> #include <functional> template <class T, std::size_t N> inline std::size_t numOf(const T (&)[N]) { return N; } int main() { std::sort(&a[0], &a[numOf(a)], std::greater()); } B template <class T, std::size_t N> inline std::size_t numOf(const T (&)[N]) { return N; } template <class T, std::size_t N> inline T min(const T (&t)[N]) { return *std::min_element(&t[0], &t[N]); } template <class T, std::size_t N> inline T max(const T (&t)[N]) { return *std::max_element(&t[0], &t[N]); } int main() { std::cout << min(a) << ' ' << max(a) << std::endl; } 漏れの脳内コンパイルは通った
>>621 2ですけど
missing template arguments before '(' token
って出てしまいます。
623 :
デフォルトの名無しさん :05/01/10 07:59:35
maze[x][y]==KITA; if(maze[y][x+1] == AKI)座標(x+1,y)をプッシュダウン if(maze[y+1][x] == AKI)座標(x,y+1)をプッシュダウン if(maze[y][x-1] == AKI)座標(x-1,y)をプッシュダウン if(maze[y-1][x] == AKI)座標(x,y-1)をプッシュダウン スタックを使った迷路なんですが、これはfindgoal()という関数の中の 一文です。1つの座標に一方向ではなく、四方向を検索してすべての 迷路の経路と距離を再帰関数を使わずに求めるにはどうしたらいいでしょう? スタックでは、x,y座標以外に検索方向dを加えています。まだ検索してない座標 は(x,y,d)をスタックにプッシュダウンします。dが0なら右,1なら下,2なら左,3 なら上,4なら終了という意味にしています。
>>617 sortとcopyは<algorithm>内に収められている。
<iterator>はistream_iterator/ostream_iterator用。
iterator自体はコンテナのヘッダや<string>をインクルードすれば使える。
625 :
デフォルトの名無しさん :05/01/10 08:09:16
>>623 関数findgoal()の書き換えで求めるんですが、
プログラム文が短くてわかりづらかったらご指摘ください。
よろしくお願いします。
626 :
618 :05/01/10 09:05:42
>>620 弟の誕生日入れてまいました。すいません
>>621 ,622
朝からありがとうございます。
1989というと俺と同級か
>>627 若いねー。俺なんて1978だよ。もうオッサン腹だよ。
このスレの住人ってどのくらいの年齢層なんだろうね。
まぁ宿題持ってくる奴は18〜22が平均なのだろうが。
629 :
デフォルトの名無しさん :05/01/10 10:57:50
>>628 藻前様よりもずっと年上だよ。でも未だに二十歳のときの体型維持しているがね。
[1] 授業単元:
[2] 問題文(含コード&リンク):HTTPクライアントとサーバの作成
クライアントの動作
1 起動後、
2 標準入力からURL (http: で始まるものだけ) を入力し、 その情報をもとにサーバにTCPで接続し、 上記プロトコル(HTTP 1.1 のサブセット)に従い、
コンテンツ (message-body) の転送要求を行い、 結果を画面に表示する。 (サーバのポート番号は URL の中で指定できるようにすること)
3 2. の動作を繰り返す。
サーバの動作
1 引数は TCPのポート番号とする
2 起動後、
3 クライアントからのコネクション待ちに入る。
4 クライアントのコネクション確立後、 クライアントからのコンテンツ転送要求に応じてコンテンツを転送する。
5 2. の状態に戻る。
詳細はこちらに
http://www.kuis.kyoto-u.ac.jp/isle/le2/http.html [3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):gcc バージョンはわかりません
[3.3] 言語:C
[4] 期限:なるべく早く
[5] その他の制限:
よろしくお願いします。
>634 残念。infoseekのCGIには直リンク不能と思われ。
[2]ニュートンラプソン法を用いて方程式を解く問題で fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 というエラーがでて解決法がわかりません。 [3.1] OS:win XP [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 1/10中でお願いします
書いたプログラムは #include <stdio.h> #include <math.h> main() { const float eps = 1.0e-14 float x0,x1; float f(float x); float fd(float x); x1=1; do { x0 = x1; x1 = x0-f(x0)/fd(x0); } while (fabs(x1-x0) > eps); printf("x = %g\n" ,x1); } float f(float x) { return (x*x-3*cos(x)+sin(x)); } float fd(float x) { return (2*x+3*sin(x)+cos(x)); }
>>637 const float eps = 1.0e-14
にセミコロンがありませんよ。
>>fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
って事はVC使ってるかな?
プロジェクトの設定見直した方がいいかも。g++では通りましたよ。
はいVCです。設定ですか? さっぱりわかりません(TT)
コンソールアプリケーションだよね。 プロパティー→C/C++→プリコンパイルの プリコンパイル済みヘッダーの作成/使用を「使用しないに」。
教えていただいて申し訳ないですが見つからないです。
うーむ。バージョンが違うのかなぁ。 どっかに、プリコンパイル済みヘッダーの作成/使用に関する設定がないかなぁ
いっそプロジェクト作りなおすとか
2003使ってるんですが ツール→オプション→エディットコンティニュ にプリコンパイルを許可するって欄があってチェック外したのですが 変化なしです
あれ、2003だったら、プロジェクト→(プロジェクト名)のプロパティに例の項目無い?
は!ありました。どうもご迷惑おかけしました。 無事ビルドできましたありがとうございます!!
>>637 のプログラム書いた者なんですがこのプログラムって
あってるんでしょうか?
ニュートン法?
はい。度々申し訳ないですが解答が x=0.9〜ってのはおかしいと
というかその本からのコピペでやっても 0.955909…になるなぁ 変なところで収束してるんじゃなかろか
根本的にCをわかってないのも多いから、奥村先生の本読んでも コードのどこをどう使えばいいのか分からないだろうから、意味がない
方程式にムリがあるんですかね?
初期値に無理があるんだろ。ニュートン法は解が複数ある方程式の場合は どこに収束するかは初期値次第だからな。
解は-1.314485609と0.9559087985ですね。
原因は
>>654 が正しいかと
>>655 その解の値を元の方程式につっこんでも0にならないのはなんででしょ?
>>656 (ほぼ)0になるよ。
勿論誤差はあるけど。
Mathematicaで吐かせたら解けない言われてもた(;´Д`)
>>657 ああ…指数表現に惑わされてました。確かにほぼ0ですね。スンマソン
みなさんありがとうございました。
初期値を-.200805にすると面白いと思うよ。 #経過を表示してないと判らないと思うけど。
いきなり-154に跳ね上がるのね
663 :
デフォルトの名無しさん :05/01/10 19:46:29
XYZ -)ZYX ─── の条件を満たす数 X Y Z を求め、 表示するプログラムを作成しなさいという宿題がでたのですが どのように書けばよいのでしょうか?
XYZ - ZYXがどうなるのが条件なんだ?
>663 条件式中の引き算の結果は?
出題ミスかも? 出題者に条件を聞いてみたら?
668 :
デフォルトの名無しさん :05/01/10 20:04:40
>1-1001 自己解決しました。有難うございました
ネタなのかな〜・・・・OTZ
671 :
663 :05/01/10 20:19:47
すいませんかきわすれてました・・・ XYZ -)ZYX ─── 1XY です。よろしくお願いいたします。
>663 総当りで調べるが良い すなわち for(x=1; x<=9; ++x){ for(y=0; y<=9; ++y){ for(z=1; z<=9; ++z){ if(z*100+y*10+z-(z*100+y*10+x)==100+x*10+y){ // ここで表示! } } } } ※3桁の先頭が0にならないと考えた、一応
673 :
デフォルトの名無しさん :05/01/10 20:26:41
x,y,zを0〜9の数として三重forループで生成した後、条件に合うものを使えば良い
>674 infoseek直接リンクダメだって
どうせなら一重ループでやれや
[1] 授業単元:
[2] 問題文(含コード&リンク): AKSアルゴリズムによる素数判定時間の表示
希望動作
1.桁数nを入力
2.指定桁数内で乱数a生成(10^(n-1)〜10^n -1の間)
3.乱数aが素数(prime)か合成数(composite)かを判定
4.乱数aの素数判定の処理時間をだす(乱数生成時間は含まない)
5.乱数aと素数判定結果(素数か否か)と処理時間をファイル出力or表示
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ(バージョン): Borland C++(Ver5.5.1)
[3.3] 言語:C/C++/どちらでも可(なるべくCで)
[4] 期限:05年1月17日くらい(なるべく早めに)
[5] その他の制限:
AKSアルゴリズムを使った素数判定でお願いします
AKSアルゴリズムの内容(日本語)
ttp://www.h4.dion.ne.jp/~a00/ms_project_jp.html よろしくお願いします。
OperaもOK
へ〜 AKSアルゴリズム知らなかったけど面白そうだね
681 :
663 :05/01/10 22:02:55
>>674 ありがとうございました。これで冬休みの課題終了しました!!
ここの住人本当に感謝します!!
>>676 main(){
int x;
for( x=100; x<1000; x++ )
if( (x-x/100)%10*99==100+x%10*10+x/10%10 )
printf("x:%d y:%d z:%d\n",x%10,x*10%10,x*100%10);
}
これで満足か
printf("x:%d y:%d z:%d\n",x%10,x/10%10,x/100%10);
AKSのオーダーは?
XYZ % 10 = Z XYZ * 10 % 10 = 0 XYZ * 100 % 10 = 0
>>682 そういう意地悪すんなや。
バックトラックとか、スマートなやりかたがあるだろ。
AKSアルゴリズムだけでかなりの量になるわけだが・・・
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int a = 0; double n, hoge, piyo; printf("桁数入力-->"); scanf("%lf", &n); srand(time(NULL)); hoge = pow(10.0, n); piyo = pow(10.0, n-1); while(a < (int)piyo) { a = rand() % (int)hoge; } return 0; } AKSアルゴを実装してから持って来てくれ。 俺にはよく理解できなかった。 とりあえず、1・2だけ。
16X16の行列の積を出来るだけ速く、省メモリに計算する関数を作って下さい。 言語はCです。OSに依存するコードは駄目です。コンパイラは何でも構いません。 100行以内でお願いします。 C=A * B matmul(double *A,double *B,double *C){ }
>>691 ソース見たけど、長いねぇ(400行ぐらいかな)。
アップするにしても、あぷろだになるね。
まぁ、別の人に頼んで。(←ヘタレ)
本当はもっと短く書けますが…
696 :
デフォルトの名無しさん :05/01/11 00:14:52
697 :
デフォルトの名無しさん :05/01/11 00:19:24
>>691 f(n)がO(g(n))である ⇔ lim[n→∞](f(n)/g(n))≦c
698 :
デフォルトの名無しさん :05/01/11 00:34:14
オーダーについてなんとなく理解できてきました f(n)=O(log^10.5 n) もしくは f(n)=O(log^12 n) でお願いします。 表記等が間違っていたらすいません。
700 :
デフォルトの名無しさん :05/01/11 00:54:47
はて、何をお願いされたのか
>>699 オーダーはプログラムを書くときには関係ない。
>>698 pgm画像データの配列への代入?
xv/ImageMagick/libpgm/libpnm辺りのソースを探そう。
すみません。レポートの問題が全然分からないのでどうか皆様のお力を貸して下さい。 自分は機会工学科の学生でCAD/CAMの授業を受けていたのですが、3回目のレポートにして プログラムの問題が出題されて苦悩しています。 これまでの課題は機械的な問題だったので解けたもののプログラムはチンプンカンプンで、 これまでの不勉強を悔やむばかりです。 こんな深夜に大変あつかましいお願いですが、どうぞよろしくお願いします。 [1] 授業単元: CAD/CAM [2] 問題文: 以下の関数を使ってどうやって三角錐の体積を求めているか説明せよ。 ベクトルを使った体積計算 1/6a ( b×c ) (a,b,cはベクトル) が基本になっている というのがヒントでした。 [4] 期限:2005年1月11日14:00まで 今日ですね…
705 :
704 続きです。 :05/01/11 02:33:59
double svolume(s) solid *s; { Face *f; Loop *l; HalfEdge *he1, *he2; vector c; double res: res = 0 . 0; f = s-> sfaces; while (f) { l = f -> floops; while (l) { he1 = l -> ledg; he2 = he1 -> nxt; do { cross (c, he1 -> vtx -> vcoord, he2 -> vtx -> vcoord); res += dot (he2 -> ntx -> vtx -> vcoord, c); } while ( (he2 = he2 -> nxt) !=he1); l = l -> nextl; } f = f -> nextf; } return (res / 6.0); }
706 :
デフォルトの名無しさん :05/01/11 04:50:00
文系の学生です 般教で情報処理を取ってC言語の宿題が出たんですがさっぱらわかりません 問題は @一つ126円のハンバーガーと一杯105円のコーヒーをそれぞれいくつかづつ購入し 1000円で支払った場合のおつりを計算して画面に表示しなさい A二つの数値を入力しその2数の積が20の倍数かどうかを判断するプログラムを作りなさい B数値を入力しその回数だけ自分の名前を画面に表示するプログラムを作りなさい 親切な方教えてください
「文系」なんてわざわざ断るような香具師に教える気はさらさらない。 つーか、文系と宣言するくらいならまともな日本語を書け。 そもそも情報処理を取っててなんで「さっぱら」判らないんだ?
708 :
デフォルトの名無しさん :05/01/11 05:41:30
>>706 (1)
#include <stdio.h>
int main(void)
{
int a, b;
printf("ハンバーガーの個数: ");
scanf("%d", &a);
printf("コーヒーの個数: ");
scanf("%d", &b);
printf("おつり: %d\n", 1000 - 126 * a - 105 * b);
return 0;
}
709 :
デフォルトの名無しさん :05/01/11 05:44:10
>>706 (2)
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
if (a * b % 20 == 0) { printf("20の倍数\n"); }
else { printf("20の倍数ではない\n"); }
return 0;
}
710 :
デフォルトの名無しさん :05/01/11 05:45:50
>>706 (3)
#include <stdio.h>
int main(void)
{
int i, n;
scanf("%d", &n);
for (i = 0; i < n; i++) { printf("自分の名前\n"); }
return 0;
}
711 :
デフォルトの名無しさん :05/01/11 06:40:31
問題文: 山くずしゲーム. コンピュータ側が任意の自然数を乱数として設定し(これを石の数とする)、 対局者とコンピュータとで交互に1個ないし2個の石を取り続ける。 最後の石をとったほうが勝ち。 このゲームでコンピュータ側が最強になるようなアルゴリズムを作れ。 なおコンピュータ側から “石の残り××個です。何個取りますか?” “石の残り××個です。私は×個とります。” などのメッセージを表示しながら、決着がつくまで進めること。 (ヒントとして石の数が3の倍数になるようにして残して対局者に 渡すことが出来れば、必ずコンピュータ側が最後の石を取ることが出来る。 3の倍数に出来ないなら、仕方なくコンピュータ側は1個でも取って相手に渡し、 相手が失敗するのを待つしかない) とありました… [3]言語:C言語 [4]期限:2005年1月11日19:00まで よろしくお願いします…
712 :
デフォルトの名無しさん :05/01/11 06:58:02
713 :
デフォルトの名無しさん :05/01/11 07:16:50
>711 これは未知数を使った簡単なパズルのようなものだ。コンピュータ側が最後に勝つように最終局から総当たりで現在の状態になるような手順を場合分けの木を使ってじっくり考えたまえ
>711 例えばコンピュータの番の時、4個残っていたら、どうするか。この場合、コンピュータには必勝法がある
>>711 #include <stdio.h>
#include <stdlib.h>
const char *person(int *pnstone) {
int n = 0;
char s[8];
do {
fprintf(stderr, "%d: ", *pnstone);
fgets(s, sizeof(s), stdin);
n = atoi(s);
} while ((n != 1 && n != 2) || *pnstone < n);
*pnstone -= n;
return "";
}
const char *computer(int *pnstone) {
static int result_array[] = {1, 1, 2};
*pnstone -= result_array[*pnstone % 3];
return "";
}
int judge(int *pnstone, const char *(*func)(int *)) { int n = *pnstone; const char *who = func(pnstone); if (!*pnstone) { fprintf(stderr, "%s\n", who); return 0; } else { fprintf(stderr, "%s%d\n", who, n - *pnstone); return 1; } } int main(void) { int nstone; srand(time(NULL)); nstone = rand() % 20 + 5; while (judge(&nstone, person) && judge(&nstone, computer)) ; return 0; } 以上、課題提出にはまず使えない(けど動く)コードでしたw
うげ、このXサーバ、日本語の変換してくれないのなorz じゃあもう一度初めからスマン #include <stdio.h> #include <stdlib.h> const char *person(int *pnstone) { int n = 0; char s[8]; do { fprintf(stderr, "石は%d個ある。とる石の数を入力しやがれ\ : ", *pnstone); fgets(s, sizeof(s), stdin); n = atoi(s); } while ((n != 1 && n != 2) || *pnstone < n); *pnstone -= n; return "あなた"; } const char *computer(int *pnstone) { static int result_array[] = {1, 1, 2}; *pnstone -= result_array[*pnstone % 3]; return "コンピュータ"; }
int judge(int *pnstone, const char *(*func)(int *)) { int n = *pnstone; const char *who = func(pnstone); if (!*pnstone) { fprintf(stderr, "%sの勝ち\n", who); return 0; } else { fprintf(stderr, "%sは%d個とりました\n", who, n - *pnsto\ ne); return 1; } } int main(void) { int nstone; srand(time(NULL)); nstone = rand() % 20 + 5; while (judge(&nstone, person) && judge(&nstone, computer)) ; return 0; } …全くネタを張るときには気をつけろとあれだけ
719 :
706 :05/01/11 08:08:04
720 :
デフォルトの名無しさん :05/01/11 09:55:10
>>703 いえ、質問の仕方が間違っていました。すみません。
波紋や任意の角度における回転のアルゴリズムを教えてください。
ソースを書いていただけるとうれしいです。
>>720 (ある程度高機能な)画像編集ソフトを持っていたら、カスタムフィルター機能があると思う。
それに適当に値を入れて試してみ。
例えば、
0 0 0
0 1 0
0 0 1
のフィルターなら斜め方向にぼかせる。
他にも
0 0 0
3 0 1
0 0 0
でゴーストっぽいとか。
波紋や回転も要は座標変換を行なえばいい。
つまり、新画像[x, y] = 旧画像[座標変換(x, y)]のイメージ。
#逆でもいいけどその場合、隙間ができないように注意。
直交座標では計算しにくいと言うなら、一回極座標に変換すればいい。
詳しくは画像処理スレで。
#あっちだと私がついていけないけどw
>>720 アルゴリズムを教えるのと、
ソースを書いて貰うのは違うぞ。
「標準入力から C 言語のプログラムテキストファイルを読み込み、 使用している関数名を頻度順に並べなさい。 これは宣言文と実際の式のどちらも含みます。 なお、同じ頻度の関数は辞書順に並べなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに 入力した出力を示しなさい。 なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに 依存しなければなりません。勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。」 期限:2005年1月11日23:00まで ネ申 求 む !
実行例 入力 int combination(int n, int m){ if(m==0){return 1;} else if(n==m){return 1;} return combination(n-1,m-1)+combination(n-1,m); } main(){ int n=5,m=2; printf("%dC%d = %d\n",n,m,combination(n,m)); } 出力 combination: 4 main: 1 printf: 1
[1] 授業単元:情報処理 [2] 問題文: 次のプログラムの実行結果が同じになるようにfor命令を用いて書き換えよ #include <stdio.h> main() { int i,n,sum=0 printf("6個のデータを入力してください。\n"); i=O while(i<6){ scanf("%d",&n); sum=sumth; i++; printf("%d個のデータの合計=%d\n",i,sum); } [3] 環境:C言語 [4] 期限:2005年1月13日まで 親切な人お願いします。。。
>>727 #include <stdio.h>
main()
{
int i,n,sum=0
printf("6個のデータを入力してください。\n");
for(i=1;i<=6;i++){
scanf("%d",&n);
sum=sum+n;
}
printf("%d個のデータの合計=%d\n",i,sum);
}
729 :
デフォルトの名無しさん :05/01/11 14:06:05
1山くずしゲーム。コンピュータ側が任意の自然数を乱数として設定し(これを石の数 とする)。対局者とコンピュータとで交互に1個または2個の石を取り続ける。最後の石 を取った方が勝ち。このゲームでコンピュータ側が最強になるようなアルゴリズムを作り なさい。 なお、コンピュータ側から ”石の残り○○個です。何個とりますか?” ”石の残り○○個です。私は○個とります。” などのメッセージを表示しながら、決着がつくまで進めること。 ヒント)石の数が3の倍数になるように残して対局者に渡すことができれば、必ず コンピュータ側が最後の石を取ることができる。3の倍数にできないのなら、仕方なく コンピュータ側は1個でも取って相手に渡し、相手が失敗するのを待つしかない。 お願いしますm(_ _)m
730 :
デフォルトの名無しさん :05/01/11 14:15:00
>>721 >>722 すみませんでした。波紋、回転、ゴーストを起こすソースを書いていただけ無いでしょうか?
>>712 上のサイトのを使うなら
stdlib.hをインクルードして
unsigned char (*Gray)[X_SIZE] = new unsigned char[Y_SIZE][X_SIZE]; を
unsigned char (*Gray)[X_SIZE] = malloc(Y_SIZE*X_SIZE);
delete [] Gray; を
free(Gray);
にするだけ
732 :
デフォルトの名無しさん :05/01/11 15:02:18
>729 3で割ったときの余りに着目して、 m=3n, m=3n+1, ないしm=3n+2 と場合分けして考えろ。
>>729 こういうので最強のアルゴリズム作っても面白くないよな
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// [s,e]の範囲の整数を入力
int getn(int s,int e)
{
int n;
do{scanf("%d",&n);}while(s>n||n>e);
return n;
}
int main()
{
int n,m,player;
srand(time(NULL));
n=(rand()&0x1F)+3;// 3〜34個
printf("石の数は%d個\n",n);
printf("先手を決めてください(コンピュータ:0 / あなた:1)\n");
player=getn(0,1);
for(;;){
printf("石の残り%d個です。",n);
if(player){printf("何個とりますか?>");m=getn(1,n>=2?2:1);}else{m=(n%3)?n%3:1;printf("私は%d個とります。\n",m);}
n-=m;
if(n==0)break;
player=1-player;
}
printf("%sの勝ちです\n",player?"あなた":"コンピュータ");
return 0;
}
734 :
デフォルトの名無しさん :05/01/11 15:41:11
[1] 授業単元:「50音が出るプログラム」
[2] 問題文(含コード&リンク):以下のプログラムでは「あ」から「お」までは出るのですが、「ka」のような2文字以上ではエラーが出てしまいます。
どのように記述すれば、2文字(出来れば3文字)処理できるようになるかご教授ください。
input01.txtは、「aka」と記述してます。kとaを別々の文字として判断されているのでエラーが出ます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/61.txt [3.1] OS: xp
[3.2] コンパイラ(バージョン): MS VC++7.1
[3.3] 言語:C++
[4] 期限:2005年01月末日まで
>>734 struct{
char roma[4];// ローマ字
char roma_len;// ローマ字の長さ
char kanji[5];// ひらがな
}aiu[]={
{"\0",1,""}
{"a",1,"あ"},{"i",1,"い"},{"u",1,"う"},{"e",1,"え"},{"o",1,"お"},
{"ka",2,"か"},{"ki",2,"き"},{"ku",2,"く"},{"ke",2,"け"},{"ko",2,"こ"},
// : 以下略
};
ハッシュじゃないから遅いけどこの表で
int roma2kanji(char* buf)
{
for(j=0;j<sizeof(aiu);j++){
if(memcmp(buf,aiu[j].roma,aiu[j].len)==0){
return aiu[j].len;
}
return 0;
}
呼び出し側
for(i=0;i<len;){
r=roma2kanji(&buf[i]);
if(r==0){
printf(error);
break;
}
i+=r;
}
なにやってんだ俺は…エロ画像の見すぎだ int roma2kanji(char* buf) { int i; char name[256]; for(i=0;i<sizeof(aiu);i++){ if(memcmp(buf,aiu[i].roma,aiu[i].roma_len)==0){ printf(aiu[i]); sprintf(name,"%s.wav",aiu[i].roma); PlaySound("a.wav", NULL, SND_FILENAME | SND_SYNC); return aiu[i].roma_len; }
>735 IMEのヘルプにローマ字表がある。別の方法として母音と子音の関係でまとめると {...,{"じゃ","じぃ","じゅ","じぇ","じょ"},...} {...,{"jy",1},{"zh",1},...} 置換後の文字列長は埋め込んだ方が速そう。
>738 何言ってるんだ。オレだったらswitchの中で出力文字列と長さを代入するぜ。
>>734 どうみてもC++とは思えないからC風にした。かなり手抜き
#include <windows.h>
#include <cstdio>
#include <cstring>
#include <clocale>
using namespace std;
wchar_t KanaTable[][5] = {
{L"あいうえお"},
{L"かきくけこ"},
{L"さしすせそ"},
{L"たちつてと"},
{L"なにぬねの"},
{L"はひふへほ"},
{L"まみむめも"},
{L"や ゆ よ"},
{L"らりるれろ"},
{L"わゐ ゑを"},
};
const int BUF_LEN = 256;
int main(void) { FILE *fp = fopen("input01.txt", "r"); char buf[BUF_LEN]; if (fp) { setlocale(LC_ALL, "jpn"); while (fgets(buf, BUF_LEN, fp)) { int i; int len = strlen(buf) - 1; for (i = 0; i < len; i++) { const char *Shiin = "kstnhmyrw"; const char *Boin = "aiueo"; int offset; char FileName[7], *pFileName = FileName; const char *p = strchr(Shiin, buf[i]); if (p) { *pFileName++ = buf[i++]; offset = p - Shiin + 1; } else { offset = 0; }
p = strchr(Boin, buf[i]); if (p) { *pFileName++ = *p; strcpy(pFileName, ".wav"); putwchar(KanaTable[offset][p - Boin]); PlaySound(FileName, NULL, SND_FILENAME | SND_SYNC); } else { puts("error"); } } putchar('\n'); } if (ferror(fp)) puts("file read error"); fclose(fp); return 0; } else { puts("file open error"); return 1; } }
744 :
デフォルトの名無しさん :05/01/11 17:02:31
なお、漢字を含む文章をローマ字表記にしたいなら、KAKASIを参考にするとよい
745 :
734 :05/01/11 18:19:58
皆様ありがとうございました。 助かりました。
747 :
デフォルトの名無しさん :05/01/11 18:24:39
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 文の中に含まれている単語の個数を返す関数strcnt()を作成せよ。 int strcnt(const char *s1,const char *2); 文字列(文)s1に含まれている文字列(単語)s2の個数を返す。 なお、2つの単語間には空白文字があるとする。 [例] s1="The theory of computation is a branch of meta-mathematics that has been developed since the early 1900's.",s2="the"のとき、 strcnt(s1,s2)の値は2である。 [3] 環境 [3.1] OS: Fedora Core3 [3.2] コンパイラ(バージョン):gcc? [3.3] 言語:C [4] 期限:2005年1月12日12:00 [5] その他の制限:特になし。 よろしくお願いします。
大文字小文字はどうすんだ
749 :
747 :05/01/11 18:30:40
この問題文からすると、大文字小文字両方ともカウントするみたいです。
>>747 strstr()でs2見つけて、後ろに空白あるか確かめれ。
[1] 授業単元: c言語 [2] 問題文: 螺旋形状のグラフを作成するために必要な数値データを作成するプログラムを作成せよ。 数値データファイル名:output.csv PAI:3.14159 include:stdio.h,math.h また、以下の文を使用すること。 for(i=0; i<360; i++){ r=(double)i*0.1; theta = PAI*(double)i/180.0; x=r*cos(theta); y=r*sin(theta); fprintf(fp,"%8.4f,%8.4f\n",x,y); } [3] 環境 言語:C言語 [4] 期限:2005年1月12日まで よろしくお願いします。
出題者はPIをPAIと間違えてるし、何で定数M_PIを使わない? 出題者と出題校の実力を疑う(でも就職率は高いんだナァこれが)。
>>753 M_PIは必ずしもあるとは限らないから使わないが吉。
[1] 授業単元: c言語 [2] 問題文: 以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にちをもつ予定データ(ノード)を表示する関数 void show_plan_day(NODE **tbl, int day); を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ また,この関数の処理内容を説明せよ. * 関数名:show_plan_day * 仮引数NODE **tbl:データを探索するハッシュ表を受け取る. * 仮引数 int day:探索する日にち(問題1参照). * 戻り値なし(void型) * 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る. このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDayをもつ すべての予定データ(ノード)を探索し表示する. 連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,先頭ノードから探索して表示するだけで,時間順に表示される.
756 :
デフォルトの名無しさん :05/01/11 19:43:27
>752 三角関数の式は回転を表している。この回転をz軸方向にずらしていくと、らせんになるはず。csvの中身を見てみろ。読めそうな気にならないか?
757 :
デフォルトの名無しさん :05/01/11 19:47:23
>755 できるだけ自分で設計してみろ。 typedef struct _NODE { 何のデータが必要かな? }NUDE;
758 :
747 :05/01/11 20:07:11
>>751 strstr()というのは聞いたことが無い=授業では習っていないので、
出来るだけ使わないほうが良いと思うのですが、
それ以外の方法は無いですかね?
あと、それだと、文の終わりとかに[.]がついている単語はカウントされない
と思うんですけど。
>>758 アホか。
授業で習っていようがいまいが使って良いに決まっているだろ。
それとも、使ってはいけないという指示でも出ているのか?
>>758 それなら後ろの文字をispunctかisspaceが真になるかどうかで確かめろ。
761 :
747 :05/01/11 20:23:40
>>759 そういう指示は出ていませんが、なるべく、便利技みたいなのは、使わない
やり方というものが知りたかったので。すいません。
その方法でやってみます。
>>760 これはよく使い方が分かりませんが、情報をありがとうございます。
>>747 strstr()を使わないやり方
int strcnt( const char *s1, const char *s2)
{
int c=0;
const char *p=s1,*q=s2;
for(;;){
if( q==s2+strlen(s2) ) if(*p==' '||*p=='\0') c++;
for( ;*p==' '; p++)
if( *p=='\0' ) break;
for( q=s2; *q&&*p;) if(tolower(*p++)!=tolower(*q++)) break;
}
return c;
}
>761 最初の文字がないか、ポインタを動かして探…(以下略
>>762 下から六行目、セミコロンが抜けてるぞ。
これじゃ止まらないね。 for( ;*p==' '; p++); でした。ごめん
int strcnt(const char *s1, const char *s2) { const char *p = s2; int cnt = 0; do{ printf("%c %c %c\n", *p, *s1, *s2); if(*p == '\0' && (*s1 == '\0' || *s1 == ' ')) cnt++; if(*s1 != *p){ while(*s1 != ' ') s1++; p = s2; } else p++; s1++; }while(*s1 != '\0'); return cnt; }
先に書き込まれてるし、デバッグのprintfつけたままだし 鬱打氏脳
769 :
デフォルトの名無しさん :05/01/11 21:16:29
すみません。レポートの問題が全然分からないのでどうか教えて下さい。 [1] 授業単元:情報処理 [2] 問題文(含コード&リンク): オリジナルのプログラミングを作る。内容・プログラムの大小は問わないが、 関数・クラス・ポインタの内容を必ず用いること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Microsoft Visual C++ [3.3] 言語:C++ [4] 期限:2005年1月13日17:00まで
>>768 空白までのスキップに問題有りやね
まぁ先に書いてる人居るからいいや
>>769 で、何を作りたいんだ?それがなければ作りようがない。
それじゃまるで「PC買ったんだけど何したらいい?」と言っているようなもの。
それから、締め切りがある以上あまり長くなるようなものも作れないから
そこは考慮するように。
>769 独自の(オリジナルの; original)プログラムを作れって。身の周りでこんなツールがあったらなーと思うヤツを形にしてみろ。
773 :
デフォルトの名無しさん :05/01/11 21:29:03
>>771 いや、ほんとになんでもいいんです。
とりあえず、関数・クラス・ポインタさえ使っていれば、どんなプログラムでもかまわないんで、
なんとかお願いできませんか?
774 :
デフォルトの名無しさん :05/01/11 21:30:39
クラスやポインタ使うなら、内部データが動的に変わるものがよい
なんでもいいなら class a{ int *a; void func(); }; int main(){ return 0; } でいいじゃん。ちゃんとクラス・関数・ポインタ使ってるよ。
778 :
デフォルトの名無しさん :05/01/11 21:44:49
全世界情報部員管理システムとか、国家予算管理システムとか、落下する複数の物体にボールを投げ当てるシステムとかはどうだ?
779 :
デフォルトの名無しさん :05/01/11 22:21:23
鼻毛記録システムなんてどうだい? 長い鼻毛と汚い鼻毛などをクラスに分類して、ボタンひとつで鼻毛記録の表示方法を変えられるとか?
780 :
デフォルトの名無しさん :05/01/11 22:21:30
学校で課題が出て困ってます。 スロットマシーンを作るプログラムです。 ・数字+Enterキーの入力をきっかけに乱数を発生し、0 から 9 までの数値を形成する ・これを三回繰り返し、得られた数字の並び方で点数を付ける ・三回とも同じなら 10 点、二個同じなら 2 点、並び順なら 5 点を与える ・これを十回繰り返して、合計を表示する このプログラムできる方は教えて下さい!お願いします! OS:UNIX 期限1月14日
>>780 きっかけにって、その入力された数字は無視?
783 :
デフォルトの名無しさん :05/01/11 22:25:39
784 :
デフォルトの名無しさん :05/01/11 23:02:30
エクセルで簡単な足し算や掛け算、引き算が20問くらい出題されて最後に採点される計算問題集作りたいんですけど、どんなプログラムかけばいいのかおしえてください。お願いします。
786 :
デフォルトの名無しさん :05/01/11 23:24:28
ポインタの質問です。初心者なので教えてください。 int a; int *b; int c; これを使って、 1.aに100を代入する 2.ポインタ変数bにaのアドレスを代入する 3.bの値をcに代入して、cを表示させて下さい。 (100が表示されればOKです。) A アドレス(&c)を使う方法:変数のアドレスを代入する方法 B ポインタ(*b)を使う方法:値を代入する方法 注:c=a と代入した場合は100と表示されても認めません! 宜しくお願い致します。
b = &a; c = *b; printf("%d", c); 授業ちゃんと聞け
>初心者なので教えてください。 >初心者なので教えてください。 >初心者なので教えてください。 >初心者なので教えてください。 >初心者なので教えてください。
A ムリ B a=100,b=&a,c=*b;
791 :
デフォルトの名無しさん :05/01/11 23:46:35
786≠788です。
792 :
デフォルトの名無しさん :05/01/11 23:48:38
簡単な計算ソフトってどんなプログラムかけばできるんですか。
794 :
747 :05/01/12 00:06:11
出来ました! 答えてくださった方々、ありがとうございました。
795 :
デフォルトの名無しさん :05/01/12 00:37:54
[1] 授業単元: [2] 問題文(含コード&リンク): #include<stdio.h> main() { int i,n,sum=0; printf("6つのデータを入力\n"); i=0; while(i<6){ scanf sum=sum+n; i++; printf("%d個のデータの合計=%d\n",i,sum); } } ↑を実行結果が同じになるようにfor命令で書き換え [3] 環境 [3.1] OS: win [3.2] コンパイラ(バージョン): [3.3] 言語:C/C++/どちらでも [4] 期限:05年01月13日午前中 [5] その他の制限: 特に無し お願いします
#include<stdio.h> main() { int i,n,sum=0; printf("6つのデータを入力\n"); for(i=0;i<6;i++){ scanf // 何だよこれ sum=sum+n; printf("%d個のデータの合計=%d\n",i,sum); } } i=0, i++の位置とか分かりやすくしてくれてるのに・・・
#include <stdio.h> main() { int i,n,sum=0 printf("6個のデータを入力してください。\n"); i=O for(;i<6;){ scanf("%d",&n); sum=sumth; i++; printf("%d個のデータの合計=%d\n",i,sum); }
int i,n,sum=0; printf("6つのデータを入力\n"); i=0; for(;i<6; sum=sum+n,i++,printf("%d個のデータの合計=%d\n",i,sum)) scanf // 何だよこれ
801 :
デフォルトの名無しさん :05/01/12 06:07:39
C++で、以下のプログラムを書けというアサイメントです。 int n を読み込み、arctan(1)のTaylor Seriesのゼロではないn個目までの和を求めて、πのだいたいの値を出力するプログラムを作れ。 プログラムには Double Precision arithmeticを使う事。 ちょっとこんがらがってしまって、自分では力不足なので お助け下さい。
[1] 授業単元: c言語 [2] 問題文: 以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にちをもつ予定データ(ノード)を表示する関数 void show_plan_day(NODE **tbl, int day); を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ また,この関数の処理内容を説明せよ. * 関数名:show_plan_day * 仮引数NODE **tbl:データを探索するハッシュ表を受け取る. * 仮引数 int day:探索する日にち * 戻り値なし(void型) * 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る. このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDayをもつ すべての予定データ(ノード)を探索し表示する. 連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,先頭ノードから探索して表示するだけで,時間順に表示 お願いします
803 :
デフォルトの名無しさん :05/01/12 07:23:01
>802 どこまでできた? 後でつまづかないように設計は自力でやってくれ
学校の宿題じゃないんですが質問いいでしょうか?C++です int a,b,c,d; a = b == c ? d : 0; //←この文の意味を教えてください
if (b == c) { a = d; } else { a = 0; }
807 :
デフォルトの名無しさん :05/01/12 07:48:01
>802 ハッシュと連結リストの意味はわかってるんだな? 自分なりに説明してみろ。
>>801 超テキトー C++ は知りません。
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv)
{
if( argc < 2 ) {
printf( "usage: test_pi [n]\n");
return EXIT_FAILURE;
}
/* calculate: arctan(1) */
int i, n = atoi( argv[1]);
int sign = 1;
int a = 1;
double x = 0;
for( i = 0; i < n; ++i ) {
if( sign )
x += (double)1.0 / a;
else
x -= (double)1.0 / a;
809 :
デフォルトの名無しさん :05/01/12 07:58:03
>801 根拠となる式と条件はわかってるな? 論理破綻していないなら、もう一人の自分が混乱した箇所をassertやデバッガでデバッグしてみろ。
a += 2; sign = !sign; } /* calcuate: pi */ printf( "pi is about %f\n.", x * 4); return EXIT_SUCCESS; } 結果 $ ./test_pi 10000 pi is about 3.141493
>>802 ハッシュ表(連結リスト)って言葉の意味がわからない
オープントハッシュのことか?
NODEの構造を示してくれないと仕様に沿ったプログラムは出してもらえないぞ
#define HASH_SIZE 366
int hash(int n){return n%HASH_SIZE;}
void show_plan_day(NODE **tbl, int day)
{
int h=hash(day);
NODE* node=tbl[h];
while(node!=NULL){
if(node->Day==day){
printf("%s\n",node->Schedule);
}
node=node->next;
}
}
812 :
801 :05/01/12 09:44:40
801です 808さんのをヒントに自分のコードを見直して、作り直してみみたら ちゃんと動きました! 感謝感謝でうs。どうもありがとうーー
813 :
デフォルトの名無しさん :05/01/12 09:47:28
>808,>810 精度が落ちた原因は、絶対値の大きい数から加減したことと、後で4倍したことにある。
×ソース ○ソースコード
816 :
デフォルトの名無しさん :05/01/12 10:39:23
タルタルソース
817 :
M野さん :05/01/12 10:52:55
分数の計算を行うためにクラスRationalを作り、そのクラスをテストするメインプログラムを書け。 このクラスのprivateデータ:分子と分母は整数型の変数にする。 このクラスのオブジェクトが宣言されたときに初期化されるよう、コンストラクタ関数を用意する。 初期値が与えられない場合はデフォルト値をセットすること。コンストラクタは、分数を通分した形で格納しなければならない。 例えば、分数2/4の場合、分子は1、分母は2としてオブジェクト内に格納する。また、次の2項演算子を多重定義すること。 (a)+演算子で2つの分数の加算を行う。結果は通分した形で保存すること。 (b)-演算子で2つの分数の減算を行う。結果は通分した形で保存すること。 (c)*演算子で2つの分数の乗算を行う。結果は通分した形で保存すること。 (d)/演算子で2つの分数の除算を行う。結果は通分した形で保存すること。 また、次のようなメンバ関数を定義すること。 (e)分数をa/bの形式でプリントする。ここでaは分子、bは分母。 (f)分数を浮動小数点形式でプリントする。 ↑の問題が分からなくて困っています(ToT)/~~~ よろしくおねがいします(*^_^*)☆♪
[3.1] OS: xp [3.3] C++でVC [4] 1/12中 以下の計算を9回ループさせたいのですが方法がわかりません。 よろしくお願いします。 #include <stdio.h> #include <math.h> main() { double x0,x1,x2; double f(double x); x0 = 0; x1 = 10; while () { x2 = x0+(x1-x0)/2; if (f(x2+1.0e-6) > f(x2-1.0e-6)) x2 = x1; else x2 = x0; } printf("x0 = %g\n",x0); printf("x1 = %g\n",x1); } double f(double x) { double y; y = x+14/x; return (y); }
819 :
デフォルトの名無しさん :05/01/12 11:00:29
>818 int i; for(i=0;i<9;i++) じゃダメか?
820 :
デフォルトの名無しさん :05/01/12 11:04:47
821 :
デフォルトの名無しさん :05/01/12 11:11:53
>817 できるところまでやってみろ! class Rational{ private:int m_num,m_denom; public:Rational(){...} Rational(int _n,int _d){...} Rational operator+(const Rational&a,const Rational&b){...return Rational(...,...);}... };
822 :
デフォルトの名無しさん :05/01/12 11:35:46
>820 もうここで解くレベルじゃないな。何を使って作るんだい? わからん言葉があったら聞くんだな。
823 :
デフォルトの名無しさん :05/01/12 11:50:23
>820 ビットのチェックは、bit-wise演算子か、ビットフィールドを使え。ファイルの読み込みは、fread使えば良い。日頃からコードの再利用を考えてないから、大きなプロジェクトであたふたしちゃうんだろ?
824 :
820 :05/01/12 11:51:55
すいません、忘れていました。 C++です。 てんぱってしまっています。。
825 :
デフォルトの名無しさん :05/01/12 12:35:02
>821 friendの指定忘れてるぞー
>>826 よくもまぁ、BOOSTなんて非標準な物を使えと言えるもんだなぁ。
>>827 いいじゃないか、4年後には標準になるんだから
BOOSTが標準でついてくるVC++6がほしい!
830 :
デフォルトの名無しさん :05/01/12 14:29:34
【問題】 C言語で標準入力から C 言語などのプログラムテキストファイルを読み込み 使用している関数名を頻度順に並べなさい。 これは宣言文と実際の式のどちらも含みます。 なお、同じ頻度の関数は辞書順に並べなさい。 なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存しなければなりません。 勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。 (注)どちらもWindows の API は使用しないで作って下さい。
831 :
デフォルトの名無しさん :05/01/12 14:38:29
環境:C言語 学習範囲:for文・while文 問題:1から6までのそれぞれの階乗を計算して表示するプログラムを書きなさい。 ヒント:i=1からスタートして逐次(n-1)!*nを計算する。 ここまではやってみたのですがここから先にすすめません。よろしくお願いします。 #include <stdio.h> int main(void) { int i; for (i=1; i<6; i++) {
832 :
デフォルトの名無しさん :05/01/12 14:45:45
[1] 授業単元:情報工学 [2] 問題文(含コード&リンク):(一次元配列の問題)フィボナッチ数列a[0]〜a[n]を作る。 nの値は3以上30以下とする。異常終了の場合、(nの値が2以下、31以上の場合)例えば 「40はnの値として不適切です!」という文を出す。 a[0]=1 a[1]=1 a[2]=2 a[3]=3 ・ ・ ・ という実行結果を出す。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン):Visual Basic Studio.net [3.3] 言語:C++ [4] 期限:2005年1月18日まで [5] その他の制限: 特になし みなさんお願いします!
>>831 そこまでやったんだら、
int main(void)
{
int i;
for (i = 1; i <= 6; ++i) {
/* (n - 1) ! * n を計算する。 */
/* n! を表示する。 */
}
return 0;
}
くらい書いておけばいいのに。
で、
int main(void)
{
int i;
int val;
for (i = 1, val = 1; i <= 6; ++i) {
val *= i;
printf("%d の階乗は %d\n", i, val);
}
return 0;
}
こんなもんかな。
834 :
デフォルトの名無しさん :05/01/12 14:52:28
>831 直前の階乗f_(i-1)にiを掛けるとf_iになる。なお、0!=f_0=1. int f;
836 :
デフォルトの名無しさん :05/01/12 14:56:12
>832 数学的帰納法を思い出せ。任意のa[i]とa[i+1]からa[i+2]が求まる。
Visual Basic Studio.net? template <int n> class CFib{ enum{val=(int)CFib<n-1>::val+(int)CFib<n-2>::val}; }; template <> class CFib<0>{enum{val=0}}; template <> class CFib<1>{enum{val=1}};
>>832 cでやってみた。あとは頑張れ。
#include<stdio.h>
int fibonacci(int);
int main(void){
int a[40],i,x;
a[0]=a[1]=1;
printf("フィボナッチのn項まで求めます(3<=n<=30)n=");
scanf("%d",&x);
if(3>x || 30<x)
printf("%dはnの値として不適切です。",x);
else{
printf("フィボナッチ1項a[0]=%d\nフィボナッチ2項a[1]=%d\n",a[0],a[1]);
for(i=3;i<x;i++){
a[i-1]=fibonacci(i);
printf("フィボナッチ%d項a[%d]=%d\n",i,i-1,a[i-1]);
}
}
return 0;
}
int fibonacci(int n){
if(n==1 && n==2)
return 1;
if(n>3)
return fibonacci(n-1)+fibonacci(n-2);
}
フィボナッチ数列って典型的な「再帰は使わない方がいい」課題だと思うが… 別に再帰使えとは書いてないだろ?
すぐ再起使いたがる香具師は素人 ってかフィボナッチに再帰はさすがに酷いな。 頑張れば定数時間だし、ちょっと工夫するだけで対数時間なのに
宿題なんだから定義をそのまま函数にするだけで十分じゃないか? ところで定数時間ってどうやるの?
>>840 ,841
大学とかの課題だと、再帰の勉強のために
フィボナッチや階乗計算とかを再帰で解けとか言われなかったっけ?
>>843 指定されてりゃしょうがないけど、
この場合指定がないんだから再帰を使わないべきでは?
使うべきでも使わないべきでもないだろ
#include <stdio.h> #include <math.h> int main() { int n,i; int a[30]; printf("(3 <= n <= 30)\nn = "); scanf("%d", &n); if (n < 3 || 30 < n) { printf("%d は不適切です\n", n); return 1; } for (i=1; i<=n; i++) { a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5); printf("%d : %d\n", i, a[i-1]); } return 0; } ひねくれるとこんな感じか
スマン、26項で誤差出る _| ̄|○
848 :
デフォルトの名無しさん :05/01/12 16:26:23
オリジナルのプログラミングを作る。内容・プログラムの大小は問わないが、 関数・クラス・ポインタの内容を必ず用いること。 という宿題が出て、このスレに乗せて class a{ int *a; void func(); }; int main(){ return 0; } というのを教えていただいたのですが、 d:\新しいフォルダ (2)\cpp1.cpp(1) : error C2580: クラス名 'a' が再定義されています。 d:\新しいフォルダ (2)\cpp1.cpp(1) : 'a' の宣言を確認してください。 というエラーが出ます。 どこをどう直せばいいのでしょうか? 環境はこんな感じです。 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Microsoft Visual C++ [3.3] 言語:C++
>>848 class aとint *aで同じ a という名前を使っているからそうなる。
どっちかを別の名前に変えろ。
850 :
デフォルトの名無しさん :05/01/12 16:30:51
#include <vector> class a{static vector<int> v;}; このような場合どのようしにて静的メンバ変数 を再宣言すればいいのでしょうか? 教えてください。
vector<int> a::v;
852 :
デフォルトの名無しさん :05/01/12 16:38:07
854 :
デフォルトの名無しさん :05/01/12 16:39:21
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):質量5kgの物体を初速度v[m/s]で、水平な地面に対し角度10度〜80度までそれぞれ10度ずつ変えて射出した。 その時の物体の位置が最も高くなる時の高さ、物体の着地地点、着地までの時間をそれぞれの角度において計算するプログラムを作成せよ。 なお、物体の初期位置を水平軸x=0、垂直軸y=0とし、場所は地球表面、初速度vは4とする。 また、ポイント・関数・クラスの使用を必須とする。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ(バージョン):Visual C++ [3.3] 言語:C++ [4] 期限:2005年1月13日16:00まで [5] その他の制限:プログラムの文頭に「#include<math.h>」を加えること。 自分で考えてはみたのですが、全然わかりません。 どなたかよろしくお願いします。
855 :
デフォルトの名無しさん :05/01/12 16:45:03
>848 クラス、関数、ポインタの「内容」を実質的に使っていない。そんなに落第生になりたいのか?
856 :
デフォルトの名無しさん :05/01/12 16:47:01
>>855 すいません。間違えていました。
ポイント・関数・クラスの使用は関係ありませんでした。
>>854 解析的に解ける問題じゃないか。
出題者はなんで解析的に解けない問題を出さないんだろう。
860 :
デフォルトの名無しさん :05/01/12 16:53:18
>854 三角関数使えば、初速のx,y成分が分かる。後は物理公式か積分使えばOK。空気抵抗は?
861 :
デフォルトの名無しさん :05/01/12 16:54:15
>>855 では、ポイント・関数・クラスを使ったプログラムを教えていただけませんか?
862 :
デフォルトの名無しさん :05/01/12 16:55:21
class a{static int b;}; int a::b; a::b = 10; コンパイルすると「2回以上初期化されている」とエラーがでるのですが、 どういうことなんでしょうか?教えてください。
865 :
デフォルトの名無しさん :05/01/12 16:56:45
>861 お前のホッペをバッコーン☆
int a::b; a::b = 10; だとエラーが出て、 int a::b = 10; だとエラーがでないのはなぜなんでしょうか
初期化と代入は違う
871 :
デフォルトの名無しさん :05/01/12 17:02:37
>>863 どんなものでもいいんです。
プログラムの大小は問わないらしいので。
873 :
デフォルトの名無しさん :05/01/12 17:04:41
>>860 プログラムの組み立て方がわからないので、できれば組み立てていただきたいのですが。。
874 :
デフォルトの名無しさん :05/01/12 17:06:15
>871 自分でやれ〜パ〜ンチ!☆
875 :
デフォルトの名無しさん :05/01/12 17:13:52
>873 角度tを仮引数にした関数で求めたい変数を出す。 mainの中でforループで角度変えながら関数呼んで計算結果を簡単な表にする。
なんだよ、このスレ。 役たたずしかいないな。 宿題を片付けますYO!だって?誰もできないんだったら意味ないじゃないww
878 :
デフォルトの名無しさん :05/01/12 17:18:04
>876 ぼるじょあが留守だから、拙者が代わりに助言してる次第。不満あらば帰れよ
>>873 math.hって書いてあるからCで書いたけど、いいのかな?
#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265
#endif
int main()
{
double v=4.0, g=9.8;
double h, t, x, rad, c, vs, vc;
for (c=10.0; c<=80.0; c+=10.0) {
rad = c*2*M_PI/360;
vs = v*sin(rad); vc = v*cos(rad);
h = vs*vs/(2*g);
t = 2*vs/g;
x = vc*t;
printf("%d°:\n\t最高点 y=%g[m]\n\t着地時間 %g[sec]\n\t着地点 x=%g[m]\n", (int)c, h, t, x);
}
return 0;
}
880 :
デフォルトの名無しさん :05/01/12 17:25:26
881 :
デフォルトの名無しさん :05/01/12 17:29:00
どなたか関数・ポインタ・クラスを使ったプログラムを組み立ててはいただけませんか? プログラムの大小はどうでもいいので、どなたかお願いします。 環境はWindouws・Microsoft Visual C++です。
わざわざ質量が書いてあるってことは、 もしかしてgもその都度求めないといけないとか…(´Д`)
> ポイント・関数・クラスの使用を必須とする。 これ見落としてたわ…
884 :
デフォルトの名無しさん :05/01/12 17:32:57
>>883 あっ、そこは気にしないでください。
私が打ち間違っただけなので。。
885 :
デフォルトの名無しさん :05/01/12 17:35:24
>881 図書館逝けばソースがころがってるというのに、あきらめの悪いヤツだ。次のうちから選べ。目覚まし時計、電卓、年号変換、データベース管理、生年月日から年齢を求める
多倍長整数クラスでも作れば?
887 :
デフォルトの名無しさん :05/01/12 17:40:13
>886 彼の実力じゃ無理
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): #include<stdio.h> int beki(int a,int b); main() { int a,b; a=3; b=2; printf("%dの%d3乗は%d\n",a,b,beki(a,b)); a=5; b=4; printf("%dの%d3乗は%d\n",a,b,beki(a,b)); } int i,ans; { ans=1; for(i=1;i<=b;i++){ fans=ans*a; } return(ans); }
889 :
デフォルトの名無しさん :05/01/12 17:41:33
>>888 を変更して、関数bekiの中で計算した結果も表示するようにせよ。
mainは次のプログラムを使用せよ
#include<stdio.h>
int beki(int a,int b)
main()
{
beki(3,2);
beki(5,4);
}
[3] 環境:C言語
[4] 期限:2005年1月13日まで
よろしくお願いします
890 :
デフォルトの名無しさん :05/01/12 17:43:19
>>885 では、生年月日から年齢を求める。というのをお願いできますか?
>>889 #include <stdio.h>
void beki(int, int);
main()
{
beki(3,2);
beki(5,4);
}
void beki(int a, int b)
{
int i, ans=1;
if(b<0) return;
for(i=0;i<b;i++)
ans = ans * a;
printf("%d\n",ans);
}
892 :
デフォルトの名無しさん :05/01/12 17:57:46
>890 time_tは日付と時刻を表す型だ。struct tmは日付と時刻を表す構造体だ。これとlocaltime,mktime,strftime,time関数を使えば簡単。関数ヘルプで見よ
>>881 出たばっかだしboost::serializationでも使ってみれば?
894 :
デフォルトの名無しさん :05/01/12 18:05:56
difftime関数は、2つのtime_tを比較し、秒数の差をdouble型で返す。ヘルプを見よ。 注意 #include<time.h>を忘れるな!
895 :
デフォルトの名無しさん :05/01/12 18:09:45
>>892 すいません。どうやったらいいかわからないんで、組み立てて教えていただけませんか?
896 :
デフォルトの名無しさん :05/01/12 18:12:05
わかっているとは思うが、1時間は60×60=3600秒。1日は24時間。
>>895 検索した方がアホみたいにソースが出るわけだが
898 :
デフォルトの名無しさん :05/01/12 18:17:49
>895 生年月日を尋ね、struct tm bdataに入力。 bdataから生年月日のtime_t birthを求める。 現在の日時をtime_t nowに格納。 difftime関数でnowとbirthを比較。 年齢が分かる。
899 :
デフォルトの名無しさん :05/01/12 18:19:43
すごく丁寧に説明してもらっているのですが、やっぱりどうやって組み立てるかわかりません。。 ばかですいません。。
900 :
デフォルトの名無しさん :05/01/12 18:25:29
>899 それぞれの関数のヘルプを見る前にあきらめてはいけない。VC++を使ってるなら、ヘルプで関数名を検索すれば見れる。関数で何ができるかが分かる。
901 :
デフォルトの名無しさん :05/01/12 18:34:12
tmの内容をヘルプで見ながら続きを書いてみよ。 struct tm bdata; printf("何年: "); scanf("%d",&bdata.tm_yday); printf("何月: "); ...
[2] 問題:入力した文字列を逆順に表示する [3] 環境 OS:Unix 言語:C [4] 期限:2005年1月20日正午 スタックを利用して入力した文字列を逆順に出力するプログラムなのですが コンパイル時にオーバーフロウとなってしまいました。その原因がわかりませ ん。あとreverse_str関数がうまくできなっかたのでそれも教えていただきたいです。 一応作れたプログラムを載せます。 #include <stdio.h> #include <stdlib.h> #define STACK_EMPTY -32768 struct cell { char data; struct cell *link; }; struct cell *getcell(); struct cell *create(); void insert(struct cell *, int, char); void delete(struct cell *, int); void push(struct cell *, char); char pop(struct cell *); void reverse_str( char *);
int main(void) { char string[100]; struct cell *stack; printf("Input String: "); scanf("%s", string); reverse_str( string ); printf("Reverse String: %s\n", string); return 0; }
void insert(struct cell *plist, int n, char data) { int i; struct cell *p; void delete(struct cell *list, int n) { int i; struct cell *p; if(n<=0) { printf("Error\n"); exit(0); } for(i=0; i<n-1 && list->link != NULL; list=list->link, i++);
if(list->link == NULL) { printf("Error\n"); exit(0); } p = list->link; list->link = p->link; free(p); } struct cell *getcell() { struct cell *p; p = (struct cell *)malloc(sizeof(struct cell)); if(p==NULL) { printf("Error\n"); exit(0); } return p; } for(i = 1; i<n; i++) { if(plist ==NULL) { printf("Error\n"); exit(1); } plist = plist->link; }
906 :
デフォルトの名無しさん :05/01/12 18:40:34
>902 スタックを食い潰すまで止まらないのが原因。前提や終了条件が間違ってるのでは?
p = getcell(); p->data = data; p->link = plist; plist = p; } void push(struct cell *stack, char data) { insert( stack, 1, data ); } char pop( struct cell *stack ) { char data; if(stack->link == NULL) { data = STACK_EMPTY; } else { data = stack->link->data; delete( stack, 1 ); } return data; } struct cell *create() { struct cell *p; p = getcell(); p->data = -1; p->link = NULL; return p; }
void swap(char* lhs, char* rhs) { char oldLhs = *lhs; *lhs = *rhs; *rhs = oldLhs; } void reverseStringRange(char* first, char* last) { for (; first < last; ++first) { swap(first, --last); } } void reverseString(char* string) { reverseStringRange(string, string + strlen(string)); } int main(void) { char s[] = "qwert"; printf("%s", s); reverseString(s); printf("%s", s); return 0; }
909 :
デフォルトの名無しさん :05/01/12 18:44:26
>899 関数や構造体のヘルプが見れないの? VCのヘルプの使い方が分からないの?
910 :
デフォルトの名無しさん :05/01/12 18:49:48
>>902 6回もわけて書くんだったらあぷろーだつかえばか
912 :
デフォルトの名無しさん :05/01/12 18:57:28
VCで何もない余白にtimeって入力してその単語の上をクリックして、キーボードの左上のF1ボタンを押してごらん。何か出てこないか?
>>899 わからないんじゃなくてわかろうとしていないんだろうが
ほんの少しでも考えたのなら、全然形になっていなくてもいいからコードをここに書いてみろよ
考えたふりすらしてない奴に教える気なんぞない
914 :
デフォルトの名無しさん :05/01/12 19:08:25
>910 お〜い、>912を読んだか〜?
915 :
デフォルトの名無しさん :05/01/12 19:08:50
ヘルプを表示できません。っていうメッセージが出てきます。
916 :
デフォルトの名無しさん :05/01/12 19:14:56
>915 timeは半角で入力した? チカチカ点滅するヤツ(キャレット)はちゃんとtimeの上に乗っかってる? timeと他の単語がくっついてない?
917 :
デフォルトの名無しさん :05/01/12 19:21:17
>>916 ちゃんとあってますよ。
でも、何回やっても表示できませんって出るんです。
918 :
デフォルトの名無しさん :05/01/12 19:28:18
>917 それは大変だ、ではしかたない、ヘルプのウィンドウにコンボボックスとタブ(つまみのようなもの)が見えるか〜? 見えなかったら >> のようなボタンをクリックして〜
ココってぼるじょあスレじゃねーの?
920 :
デフォルトの名無しさん :05/01/12 19:36:25
疲れた
>>919 ぼるじょあは氏にました。
次回から大原ゆきが宿題を片付けます。
923 :
デフォルトの名無しさん :05/01/12 19:49:42
だめだこりゃ
次はだれだろワクワク
>>950 スレ立てよろしく。
ギコになったことってあったっけ
スタックを利用して逆順にする関数を知りたいのですが...
>>926 普通 auto な変数はスタックを利用しているけど?
928 :
デフォルトの名無しさん :05/01/12 21:26:41
>926 template<class t_type> void rev(t_type* p,int n){ if(n<2)return; t_type tmp=*p; *p=p[n-1]; p[n-1]=tmp; rev(++p,n-2); }
>>902 この宿題は、関数呼び出しの際にコンパイラに使われるスタックを
使って再帰を実行しなさいと言うことではなくて、スタックを自分で
用意しなければならないのかい?
データを格納するpushとpopの関数を作成してそれを利用して 逆順に表示するように言われています。
>>931 「関数の再帰をしてはならない」と言う言外の指示を感じるだが、
君自身はどう思うかい?それによって解答が多少変わると思う
んだが。
関数も使用するなと言われてます。
934 :
デフォルトの名無しさん :05/01/12 21:39:03
[2] 問題:0〜99まで、1行に10個ずつ、桁を揃えて表示せよ。 実行例 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ..... 90 91 92 93 94 95 96 97 98 99 [3] 環境 :C言語 [4] 期限:2005年1月14日 よろしくお願い致します。
>>934 #include <stdio.h>
int main(void) {
int i;
for (i=0; i<100; i++) {
if (i!=0 && i%10==0) printf("\n");
printf("%2d ",i);
}
return 0;
}
まだスタックについて詳しく習っていないので再帰についてなんともいえません。 すみません。スタックの性質の先に入れたデータが後から出てくることを利用しなさいと 言われていてreverse_str中のpopとpushの利用法がわからないんです。
937 :
sage :05/01/12 22:01:15
>>935 ありがとうございました。
助かりました。
先生に確認を取りました。 「コンパイラに使われるスタックを使って作りなさい」との事でした。
938は僕でありません
文字列全部pushでいれたあと、全部popで出せばいいんでは?
[1] C言語 [2] 関数名:recursive_func 仮引数int n, int c: 戻り値(int型):再帰的に計算した結果を返す.1から9までの整数が返る. 機能:以下の式に基づいて,ラッキーナンバーを計算する. recursive_func(n,c)= n=0の時 c mod 9+1 n>0の時 (n*recursive_fucn(n-1,c)+c)mod 9+1 第2引数として,指定した日にちを渡す.そして, recursive_func()関数によって返された値がその日にちのラッキーナンバーとなる. たとえば,15日(土曜日(6))のラッキーナンバーを計算するための関数呼び出しは, recursive_func(6, 15) となる.
はい、やってみます。
>>941 int recursive_func(int n, int c)
{
if (n == 0) return c % 9 + 1;
else if (n > 0) return (n * recursive_func(n - 1, c) + c) % 9 + 1;
else exit(1);
}
944 :
デフォルトの名無しさん :05/01/12 23:21:21
>>944 実は手法がいくつかあって、見えかたが違ってくる。
RGBをYCrCbにしてYだけ取ってくるとか、二値画像変換とか、 色々あるからなあ
2値画像は違うと思うぞ。
>>947 モノクロプリンタへ送ってるデータは2値画像データですね。
まずグレースケール作って、判別分析法かなんかで2値化ですかねぇ?
グレースケールは画像処理のテンプレから
Q:カラー画像をグレースケールに変換するには?
A:グレースケールへの変換には、完全な解答はありません。
一般には、下式が用いられるようです。
グレースケール = 0.299R + 0.587G + 0.114B
ちなみに、(R+G+B)/3はオススメできません
判別分析法はぐぐってくれ。
もちろん、解はこれ以外にもあるのは
>>945 >>946 のとおり
950 :
デフォルトの名無しさん :05/01/13 01:22:04
点数(実数値)を入力して、0以上60未満はC、60以上80未満はB、 80以上100以下はAと表示せよ。但し、それ以外の値はエラーとする。 int main(void) { double no; printf("点数を入力:"); scanf(「 (1) 」); if (「 (2) 」) puts("入力エラーです"); else if (「 (3) 」) puts("C"); else if (「 (4) 」) puts("B"); else puts("A"); return (0); どなたか教えてください。
>>950 #include<stdio.h>
int main(void)
{
double no;
printf("点数を入力:");
scanf("%lf",&no);
if (no<0 || no>100)
puts("入力エラーです");
else if (no>=0 && no<60)
puts("C");
else if (no>=60 && no<80)
puts("B");
else
puts("A");
return (0);
}
#include<stdio.h> int main(void) { double no; printf("点数を入力:"); scanf("%lf",&no); if (no<0.0 || no>100.0) puts("入力エラーです"); else if (no<60.0) puts("C"); else if (no<80.0) puts("B"); else puts("A"); return 0; }
955 :
デフォルトの名無しさん :05/01/13 03:13:28
問い (0,1)で一様分布する変数 xi から 標準正規分布する変数 yj を 作るには、次の式を用いる。 yj=Σ(i=1,12) xi-6.0 rand() を用いて xi を12000個 発生させて、作成した yj の 分布を -5〜5までの間で * を用いた棒グラフにせよ。 お願いします
以下のプログラムがうまく動きませんどこがおかしいのでしょうか? #include <stdio.h> #include <math.h> main() { int i; double x0,x1,x2; double f(double x); x0 = 0; x1 = 10; i=0; while (i<=9) { x2 = x0+(x1-x0)/2; if (f(x2+1.0e-6) > f(x2-1.0e-6)) x2 = x1; else x2 = x0; i=+1; } printf("x0 = %g\n",x0); printf("x1 = %g\n",x1); } double f(double x) { double y; y = x+14/x; return (y);
>>956 >どこがおかしいのでしょうか?
あんたの頭。
959 :
デフォルトの名無しさん :05/01/13 08:40:24
>956 ifの条件が誤差を考慮してない。区間の縮小で論理錯誤。最後に}がない。全て一からやり直せ。この場合、2分法を使うとよい。
960 :
デフォルトの名無しさん :05/01/13 09:04:55
>955 //疑似乱数∈開区間(0,1) #define myrand() \ (rand()+1.0)/(RAND_MAX+2.0)
962 :
デフォルトの名無しさん :05/01/13 09:08:49
5桁のHex character stringをバイナリ形式のInt に変換するには、どのようにしたらよいのでしょうか? たとえば String a=”B0070” これをバイナリ形式のIntに変換したいのです。 よろしくお願いします。
このスレ、香ばしいやつが常駐してるよな。(ワラ
964 :
デフォルトの名無しさん :05/01/13 09:23:01
>962 strtoi,sscanf
LCQ48:ナヌヤサイヤオカ,ヒカタサイタ,ラカヲヨミツロ
966 :
デフォルトの名無しさん :05/01/13 10:13:17
LCN48:TXT:BEG:^E<$50.143.59.94>^M:END
問 リスト構造を用い、任意の要素数n個の疎行列を LU分解法によって解くプログラムを作れ。 ただし、以下のような構造にすること。 ・疎行列のデータは外部から入力させる。 ・(0の入力を省略するなどして)メモリを節約する構造にする。 ・疎行列の0を含む割合を変えられる構造にする。 おながいします。 OSはUNIX、言語はCです。
969 :
832 :05/01/13 12:57:01
#include <stdio.h> #include <math.h> #define N 30 void main() { int n,i; int a[30]; printf("フィボナッチ数列を作るプログラムです \n\n"); /*データの個数の入力*/ printf("nの値(3以上30以下の整数)を入力して下さい\nn = "); scanf("%d", &n); /*nが3以上30以下の整数でない場合*/ if (n < 3 || 30 < n) { printf("%d は不適切です! \n", n); } for (i=1; i<=n; i=i+1) { a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5); printf("a[%d] : %d\n", i, a[i-1]); } } フィボナッチの数列の課題を聞いたものです。ここまでは出来てるんですが、 a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5) の部分がよく分かりません。 何かの公式ですか? あと、異常終了がうまくいかないので、誰か教えて下さい!
970 :
デフォルトの名無しさん :05/01/13 13:07:18
公式は知らんけど、a[1]=1,a[2]=1 としてa[i]=a[i-1]+a[i-2]にを求めるだけだろ for文をelseの中に入れないから3未満31以上の数字でも実行してしまう
>>969 その公式は誤差出るって書いただろうに。゜(゚´Д`゚)゜。
ちなみにα=(1+√5)/2と置いて、
α^n / √5 に一番近い整数がn番目のフィボナッチ数 ていう
ビネの公式を簡略化したもの。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, s=1;
int a[30];
printf("フィボナッチ数列を作るプログラムです \n\n");
/* データの個数の入力 */
printf("nの値(3以上30以下の整数)を入力して下さい\nn = ");
scanf("%d", &n);
if (n<3 || 30<n) {
printf("%d は不適切です! \n", n);
return 1;
}
a[0]=1; a[1]=1;
for (i=2; i<n; i++) {
a[i] = a[i-1] + a[i-2];
}
for (i=0; i<n; i++) {
printf("a[%d] : %d\n", i+1, a[i]);
}
return 0;
}
#include <math.h> 削除し忘れた…
973 :
832 :05/01/13 13:29:25
>>971 本当にありがとうございます。
#include <stdio.h>
#include <math.h>
#define N 30
void main()
{
int n,i;
int a[30];
printf("フィボナッチ数列を作るプログラムです \n\n");
/*データの個数の入力*/
printf("nの値(3以上30以下の整数)を入力して下さい\nn = ");
scanf("%d", &n);
/*nが3以上30以下の整数でない場合*/
if (n < 3 || 30 < n) {
printf("%d は不適切です! \n", n);
}
a[0]=1; a[1]=1;
for (i=2; i<n; i++) {
a[i] = a[i-1] + a[i-2];
}
for (i=0; i<n; i++) {
printf("a[%d] : %d\n", i+1, a[i]);
}
うちの授業、returnとか使うの習ってないんですよ・・最初に言ってなくてすいません。
でも、これで3以上30以下の場合は動くんですけど、やっぱ異常終了はうまくいかなくて・・
よく分からんのです
>>973 if (n < 3 || 30 < n) {
printf("%d は不適切です! \n", n);
} else {
a[0]=1; a[1]=1;
for (i=2; i<n; i++) {
a[i] = a[i-1] + a[i-2];
}
for (i=0; i<n; i++) {
printf("a[%d] : %d\n", i+1, a[i]);
}
}
975 :
832 :05/01/13 13:37:50
ありがとうございました!! 付け足ししてごめんなさい。ほんとに助かりました。
976 :
955 :05/01/13 13:41:34
≫960 本当にありがとうございます
977 :
.kansai :05/01/13 15:13:18
初心者の質問ですいませんが、以下の問題に快く答えてくれる方がいればお願いします。 機械語(アセンブラなど)でプログラムを書いている場合は見過ごされるが、 プログラミング言語(C言語)のコンパイラでは発見されるエラーってどんなのがありますか?
>>977 例えばポインタと整数の混同とか。(Cではキャストしないとエラーになる)
>>977 >機械語(アセンブラなど)
アセンブラもプログラミング言語の一つだ。
# 機械語≠アセンブラ
どうでもいいけどアセンブラはアセンブリ言語のコードをマシン語に変換するソフトのことだぞ
982 :
デフォルトの名無しさん :05/01/13 19:38:14
984 :
デフォルトの名無しさん :05/01/13 22:52:07
整数を入力すると、その数字の読み方を出力するプログラムを作成してください。 入力する数字は9桁までとする。 例 158 one hundred and fifty eight 63567 sixty three thousand five hundred and sixty seven
学生のとき思ったんだけどさあ、なんで列挙したりするときに ナントカカントカアーンドナントカみたいに、アンド入れるわけ? 何個目にいれなきゃいけないとか決まりがあるの?
正の数だけでいいのかな
987 :
984 :
05/01/13 23:08:38