3 :
デフォルトの名無しさん :2009/04/20(月) 23:58:25
3ゲット [1] 授業単元:ソフトウェア工学 [2] 問題文(含コード&リンク):• 別途配布するプログラムを,リンクせずにコンパ イルのみする.(オブジェクトファイルを生成する) - 手順を報告する • コンパイラオプションにより,アセンブラコードを 生成させる. - オブジェクトファイル毎に生成されたアセンブ ラコードを報告する(処理を行っている部分の み抜粋する). [3] 環境 [3.1] OS: XP [3.2] Visual Studio 2008 [3.3] C [4] 期限:4/22の朝八時 家に環境無いからお願いします。
>>4 #include <stdio.h>
int main()
{
int list[] = { 10000, 2000, 1000, 500, 100, 50, 10, 5, 1 }, money, i;
printf("How much? > ");
scanf("%d", &money);
printf("========\n");
for(i = 0; i < sizeof(list) / sizeof(int); i++){
printf("%d->%d\n", list[i], money / list[i]);
money %= list[i];
}
return 0;
}
6 :
デフォルトの名無しさん :2009/04/21(火) 00:50:10
文字の規格でEUCってあるじゃん? あれのコードマップ(補助漢字を除いた部分)をC言語のプログラムで生成する課題をやってるんだけど、 家のパソ(ウインドウズ)でVISUALC++上で作ったら、A1〜Fe(151〜225)の数字を文字列として出力しても全然違う文字が出てしまう。 それとはずらした範囲で同じことをやったら、今度は飛び飛びで出力されてしまう。 プログラムはFOR文で一ビットと二ビットの数字を特定の範囲で虱潰しにするだけのもので、 あってるはずなんだけど、何で出来ないのかわからない。 もしかしたらLINUX上でやらなきゃ駄目なのか?(本来はLINUXのコマンドプロンプトでやるように言われた課題なので)、 って思ったんだけど、やっぱそうなのかな? ASKIIVerの課題もあるんだけど、そっちは普通に上手く行ってた。
7 :
デフォルトの名無しさん :2009/04/21(火) 00:51:01
あ、何かテンプレとかあるんだ・・・。 プログラム自体は合ってると思うから、やっぱ他所で聞きます。すいません。
見た目は大人、頭脳は子供、その名も名探偵↓
[1] 授業単元: プログラミング 〜構造体〜 [2] 問題文(含コード&リンク): 3名の名前と性別、10桁の会員番号を入力し表示せよ *会員番号は数字のみで入力し、2,6桁目の後に「-」を出力で表示せよ 入力(1234567890)→出力(12-3456-7890) *入力された会員番号が10桁に満たない場合、 または大きい場合は再度入力する指示を入れること [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: 04/22 09:00 [5] その他の制限: 構造体名{ person_t }メンバ{ name,sei,mem }を使用しています 宜しくお願いします
11 :
デフォルトの名無しさん :2009/04/21(火) 01:53:33
3です。問題文張るの忘れてました。 #include <stdio.h> int add(int a, int b) { return a+b; }v oid main() { int a, b; int s; a = 10; b = 20; s = add(a, b); printf("%d+%d=%d\n", a, b, s); }
>>10 丸投げする前にExcelで考えてみたら気が変わったかもな
こういうのはお互い最善手をさすのを前提にするんじゃないの?
だよね。なら15のままで多分いいはず(ミスがなければ)。
21 :
デフォルトの名無しさん :2009/04/21(火) 17:35:18
[1]授業単元:数値シュミレーション演習 [2]問題文:逐次二分法を用いて、 f(x)=exp(x)-3xの根を求めよ。 x1=0,x2=1とおいて計算を始める。許容誤差は10^-5、 反復回数は30回とする。 ・#include "stdafx.h" #include <stdio.h> #include <math.h>)として始めること。 [3]環境 [3.1]OS:windous XP [3.2]コンパイラ名とバージョン:Visual Studio.NET2003 [3.3]言語:C++ [4]期限:4月27日 [5]その他:プログラミングは全くの素人で、申し訳ありませんがよろしくお願いします。
またお前か
あるぇ〜、どこぞの講師か教授でしたか?いつもご苦労様。 ここがお前の縄張りなの?せいぜい持論を展開していな、レベルの低い集団w
>>22 いいたいことがあるなら具体的にコードで書かないと長文さんに怒られちゃうぞw
>>25 あれ?日本語が通じなかった?お前の中ではそうなんでしょ?
コンピュータの中では知りませんけど、処理系によっては、ね。
XPでプログラム終了してもメモリ開放されないことがあるとはねw
ガベージコレクションとかメモリリークの意味がわかってないに1億Z$
問題自体もアレだけどな Cなら固定長でいいじゃん 可変長を使いたいならC++のstd::stringなりstr:vectorを使えよ
#include <stdio.h> #include <stdlib.h> int main() { void* pv = malloc(50000000); scanf("%*c"); return 0; } VC++6.0 SP6 の Debug Release それぞれでビルドして確認したが プロセスが終了したらちゃんと解放されたぞ(XP Home SP3) メモリリークが問題になるのはプロセスが残ってる場合だぞ すぐ終わるプロセスでもきちんと解放するに越したことはないが
このバカはいつも思い込みで他人をバカにするけど、間違ってるのはたいてい本人。 それを突っ込まれると常人には理解できない長文を連投して大暴れ。 何度大恥かいても一向に成長しないw
少ない脳みそで自分が間違ってることがかろうじて理解できると、 後釣り宣言することもあるな。
34 :
デフォルトの名無しさん :2009/04/21(火) 19:51:11
4月中はおろか4宇宙年(約400億年)後でも真の解決は難しいかもw
36 :
35 :2009/04/21(火) 20:06:03
誤爆しました。すみません
1宇宙年て2億年じゃなかったかな
課題程度の話ならやっとかないと先生に怒られるからやっとけってレベル。
40 :
デフォルトの名無しさん :2009/04/21(火) 21:44:31
[1] 授業単元: プログラミングB [2] 問題文(含コード&リンク):入力された文字列を2進数の文字列として 解釈し、10進数に変換し画面出力しなさい。 入力にはライブラリ関数putcharを使用すること。 Enterキーのみが押された場合、エラーを表示し、再入力する。 0,1以外の文字が入力された場合、エラーを表示し、再入力する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 [3.3] 言語:C言語 [4] 期限: 2009/04/23 よろしくお願いします。
にゅっ、入力に m9(^д^ )プッチャー を?
入力にputchar?
getcharではなくて?
44 :
デフォルトの名無しさん :2009/04/21(火) 21:50:56
すみません。 getcharでした!
宿題というわけではないのですが、 なにかヒントをいただきたく、 書き込みます。 2バイト文字を、 24*24の二次元テーブルに代入する ex) "大"の場合、 000000000000000000000000 000000000011000000000000 000000000011000000000000 000000000011000000000000 000011111111111111100000 000011111111111111100000 000000000011000000000000 000000000111100000000000 000000001100110000000000 000000011000011000000000 000000110000001100000000 000001100000000110000000 (これは24*12ですが・・・) のような処理をしたいのですが、 どのようにアプローチすればよいのか、 アドバイスご教授願います。 これは、 ドットビューという 点図ディスプレイに表示させるための ものです。
>>40 #include <stdio.h>
int main(void)
{
int ch, n;
while(1) {
n = 0;
ch = getchar();
if(ch!='\n') {
while(ch=='0' || ch == '1') {
n = n * 2 + ch - '0';
ch = getchar();
}
if(ch == '\n') break;
}
printf("error\n");
while(ch!='\n') ch = getchar();
}
printf("%d", n);
return 0;
}
47 :
デフォルトの名無しさん :2009/04/21(火) 22:23:21
>>39 本当に助かりました!!有難うございました。
49 :
デフォルトの名無しさん :2009/04/21(火) 22:28:08
質問です C++でゲームを作っています 画像ファイルを別にもっていて、例えばゲーム.exeを機動すると画像ファイルを読み込んで表示するようにしています このときに同一フォルダに画像がないと実行しても表示されないと思うのですが これらを一つにまとめた実行体?を作ることってできますか
54 :
デフォルトの名無しさん :2009/04/21(火) 23:10:28
[1] 情報処理 [2] 整数の平方根を開平法で求めるCのプログラムを作成せよ。結果は小数点第1位まで求めればよい [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語: C [4] 期限: 今日明日中にお願いします 。 [5]期限短いですが全然わからないのでよろしくおねがいします。
ありがとうございます しらべてみます
>>18 ありがとうございました。
今取り組んでる課題にも参考にしたいと思います。
57 :
デフォルトの名無しさん :2009/04/21(火) 23:42:25
[1] 授業単元: 簡易家計簿(C++応用) [2] 問題文(含コード&リンク):以下の処理できること @画面より入力した文字列(支出明細)と数字(金額)をファイルに保存すること。 Aファイル名は「記入年月日.txt」になること B日付変わった場合、新しいファイルで保存できること Cファイル内容は以下の形式で保存できること [記入年月日] [支出明細] [支出金額] [合計金額] D月が替わった場合、同じ月のファイル内の「合計金額」を「年月_total.txt」に以下の形式で保存できること [年月] EXPENDITURE [合計金額] ※「年月_total.txt」ファイルの[合計金額]は同じ月の「記入年月日.txt」ファイル内の「合計金額」を合計した数字となります [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 [3.3] 言語:C++ [4] 期限: 2009/04/22 朝 06:30 日付の取得や取得した日付情報をファイル名にするとか、日付変わった時の判定と処理とかは良く分からないから、軽く説明もいただければ助かります。 宜しくお願いいたします。
58 :
49 :2009/04/22(水) 00:57:22
>>48 >>50 ありがとうございます!
またやってみて行き詰ったらおねがいします。
59 :
34 :2009/04/22(水) 00:58:12
間違えました。。 ありがとうございます!
>>48 Boost.Random使わないやり方ってあるんですか?
[1] 授業単元:中級C++
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org28097.zip.html [3] 環境
[3.1] Linux
[3.2] g++
[3.3] c++
[4] 期限: 23日12:00迄にお願いします
[5] 演算子のオーバーロードの問題ですが、全く意味がわからないままインターネットを参考にしたら
プログラムできちゃいました(と思う)。けれどコピーしただけで全く理解出来ていないので、(2)〜(4)が答えられません
宜しくお願いします
備考:
(2)→フレンドがついていないからメンバですか?そうだとするとなぜ僕はメンバ関数にしたのでしょうか?
(3)→フレンドがついているからグローバルですか?そうだとするとなぜ僕はグローバル関数にしたのでしょうか?
(4)→とりあえずやってみたらコンパイルは通りました。値はrだけ足し算されています。これは「動作している」と
言えるのでしょうか?もし言えるとするとなぜ動作するのでしょうか?
というわけでよろしくおねがいします
>>63 (2)グローバル関数にするとfriendにしなければならなくなるから
(3)出力演算子<<はメンバ関数にする事はできない
(4)dの虚数部が0iだから。0i以外の値を入れて検証すればよい
>>63 ごめん(4)が間違えていた
(4)クラスComplexのコンストラクタが Complex (double a = 0.0, double b = 0.0);
とデフォルト引数を持っており、虚数部が省略された事により0.0が
自動的に代入されたから動作している
66 :
34 :2009/04/22(水) 18:12:51
>>48 >>50 何度もすいません;
最大値,最小値 と 平均値,分散値 が指定できないです。。
67 :
57 :2009/04/22(水) 23:09:04
すみません〜 「取得した日付情報をファイル名にする」と「日付変わった時の判定と処理」 について、アドバイスいただけないでしょうか?^^;; 宜しくお願いします
class foo { template< class T > void bar( T ); template<> void bar( int ); }; 上の二つ目の bar は特殊化か、それともオーバーロードか。 ちなみに下はオーバーロード。 class foo { void bar( int ); template< class T > void bar( T ); };
70 :
63 :2009/04/23(木) 00:23:27
>>64 ありがとうございます
まだよくわからないのでもう少し詳細教えて下さい
(2)「+」のオーバーロードはフレンドでもメンバのどちらでもいけるということですが、なぜフレンドにするとよろしくないのでしょうか?
(4)デフォルト引数について勉強しました。例えばComplex x(3);とした場合、r=3.0, i=0.0の複素数が出来るのは理解しますが、そもそも
なぜ整数7が自動的にComplexとみなされるのでしょうか?(「+=」のオーバーロードの引数がComplex aだというのはわかりますが。。なぜ??)
>>70 (2)フレンドは別にいいけど折角クラスでprivateメンバにしている
変数が見えてしまいカプセル化の原則に反するから
(4)自動的に型変換が行われるから
これが嫌ならコンストラクタにexplicitを付けておけば = で呼び出す
形式は使えなくなる
>>71 あなたは友達がいるんですね!?是非私とオホモダチになてークダサーイ
>>67 1行入力するごとにファイル名を生成して追加モードで書き込めば3の処理は問題ない
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
struct tm *p;
time_t now;
char fname[_MAX_PATH];
FILE *pf;
time(&now);
p = localtime(&now);
sprintf(fname, "%.4d%.2d%.2d.txt", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);
pf = fopen(fname, "at");
fprintf(pf, "%.2d:%.2d:%.2d\n", p->tm_hour, p->tm_min, p->tm_sec);
fclose(pf);
return 0;
}
75 :
63 :2009/04/23(木) 03:25:14
>>72 おぉ!なんかわかりましたありがとう
ところでデフォルト引数ってC言語でやったらコンパイルエラーになったみたいですが
C++の新機能ですよね?Javaにもないすよね?
(Javaは基本型だと0で初期化することはできるけど)
テンプレートをつくるとき、 template<typename T> template<class T> のどちらでもオッケーですが、この二つに違いがないという文章をC++ standard(英語)から探して来いと言われました。 C++ standardでぐぐるとなんかいっぱい出てくるのですが、どれかわかる人おしえてください (文章まで見つけてくれるとなおおk)
>>76 INTERNATIONAL STANDARD ISO/IEC 14882 Programming languages -- C++
買う気ないのでfinal draftから(差異があったらすまん)
14 - Templates
14.1 - Template parameters
-2-
There is no semantic difference between class and typename in a template-parameter. typename followed
by an unqualified-id names a template type parameter. typename followed by a qualified-name denotes
the type in a non-type
とある。
78 :
76 :2009/04/23(木) 04:03:33
80 :
デフォルトの名無しさん :2009/04/23(木) 05:22:54
>>45 ヒント:C言語なんかよりもそういう処理に特化した言語がある、あとはぐぐれ
81 :
57 :2009/04/23(木) 06:56:23
自分で問題文へのリンクまではっておいて何が問題なのでしょうってww プログラミング言語以前に日本語が不自由過ぎるぞ
(c) はダイナミックキャストを使わないようにすれば解決したことになるのか、 それとも多重継承で不正とされるようなダウンキャストを 合法にする術を2つ見つけ出せというのか、どっちだろ。 後者ならわしもわからん*_*
1. (a) (b) 2. (a) (b)
86 :
82 :2009/04/23(木) 12:31:57
>>83 , 84
そうですよね。。分かる人が見ると分かるような問題かと思いましたが、さすがにこんなんじゃわかんないですよね。
こちらの問題は諦めます。とりあえず、(a)と(b)だけでも提出したいのですがお願いできますでしょうか?
こちらも意味不明になってますでしょうか?
89 :
86 :2009/04/23(木) 13:12:34
>>88 ありがとうございます!厨くさいなんてとんでもないです。
とりあえず、「明解C++」を購入したのでこれを片手にコードの理解に努めます!
有り難うございました★☆。.:*:・"゚★('-^v)Thanks(v^-')★。.:*:・"☆★
>>87 covariance(共変性)。
class Base {
virtual Base* clone() {}
};
class Derived {
virtual Derived* clone() {}
};
一般に、仮想関数のオーバーライドはパラメータだけでなく、
戻り値も完全に一致している必要があるが、
戻り値が基底クラスへのポインタまたは参照のときは
それを派生クラスへのポインタまたは参照に置き換えてよい、というルール。
・・・はいいとして、問題難しすぎてまったくわかりません^^
dynamic_cast を使うか、template < class T > clone( T t )みたいな外部関数を用意するしか思いつかない…
どうせ今年も、ソート、素数、組み合わせ、標準偏差、構造体、リスト、文字列検索など お決まりのパターンの課題が出るだろうから、今から準備しておく。
準備しなくてもいいだろ、そんなレベルの問題はw
なぬっ!?麻呂のリストクソースが要らんとな?なら見せて進ぜよう ここで質問される前に
>>94 それらの書き込みと話が合わないみたいだが・・・
とりあえず、ク素数を求めるコードを出すでおじゃるか?
スレ違い。 オナニーショーがしたいならどっかよそでやって。
麻呂のクソースが出される前に先に答えて自己アピールしたがっている このスレを自分の縄張りだと思っている常駐引きこもり、あるいは どこぞのランクの低い講師か大学の教授が我先にと必死だなw
>>97 シンプソン積分とかルンゲ・クッタ法もよく出るんだがな
教本や教科書に載っているリスト構造のソースを丸写しして ウハッwwww俺すげっwwwwwwこんなプログラムが作れたwwww って思う程度の低い講師や教授は、もう少し多種様々な使用目的で 作られているソフトの仕組みにも目を向けた方が良い。 何も、お前らがそれらの基本を作ったわけじゃないだろ?うざいんだよ 講師のくせして、講師風情のくせして、生徒を見下す奴ってw
>>98 問題出る前に貼ろうとするヤツ以上に必死なヤツなんていねーよw
つまり先に貼られるのがくやしくてくやしくて仕方ないのがこの長文でおk?
終了したプロセスでメモリリークが発生すると思ってた低脳乙w
麻呂を目の敵にする負け犬、低ランク学校の講師か教授が必死涙目wwww お前の書いたソースは所詮、教科書に載っていたもので、各企業で使われている 企業秘密として存在もしている、技術的にも高度なコード(駄洒落ではない)には 到底及ばないし金にもならないもんねぇ〜♪ 自分でちと吹いた、高度なコードw
お前がそう思うんならそうなんだろう お前ん中ではな
お前がトップならそうなんだろ お前の学校ではな
偽麻呂にここまで翻弄されるとは、やはりお前らそうとう気にしてるな・・・あの雑魚をw
なんで偽ってわかるの?
[1] 授業単元:
通信ネットワーク演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9073.txt [3] 環境
[3.1] OS: (Windows/Linux/等々)
Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
2009年5月10日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
資料が多すぎてややこしいかもですがよろしくお願いします。
なんか死すアドクラスの問題キター・3・
115 :
87 :2009/04/24(金) 01:07:25
どなたかcovarianceのやつお願い出来ないでしょうか?
close()じゃなくてclone()でした
118 :
115 :2009/04/24(金) 02:44:00
>>116 ありがとうございます
どんなものでも助かります
これからソース解読します ほんとにありがとうございました
116に刺激を受けてやってみた。あくまでvirtualを使ってみた。 class A { public: A* clone() {return clone_impl();} virtual string identity() { return "私はAです"; } protected: virtual A *clone_impl() { return new A(*this); } }; class B : virtual public A { public: B* clone() {return dynamic_cast<B*>(clone_impl());} virtual string identity() { return "私はBです"; } protected: virtual A *clone_impl() { return new B(*this); } }; class C : virtual public A { public: C* clone() {return dynamic_cast<C*>(clone_impl());} virtual string identity() { return "私はCです"; } protected: virtual A *clone_impl() { return new C(*this); } }; class D : public B, public C { public: D* clone() {return dynamic_cast<D*>(clone_impl());} virtual string identity() { return "私はDです"; } protected: virtual A *clone_impl() { return new D(*this); } };
120 :
115 :2009/04/24(金) 03:22:53
>>119 ありがとうございます
僕には全く理解出来ない領域ですがこれから勉強します
ありがとうございました
121 :
54 :2009/04/24(金) 06:36:27
>>114 ありがとうございます
ソース解読します
本当にありがとうございました
123 :
デフォルトの名無しさん :2009/04/24(金) 09:39:38
>>123 (3_1) 配列
#include<stdio.h>
int a[10][10]={
 {0,1,7,4,5,2,0,6,6,9},
 {3,5,8,0,0,5,6,0,3,0},
 {4,6,5,9,8,5,0,6,4,7},
 {9,7,2,0,7,3,6,7,9,3},
 {2,9,7,7,6,0,6,8,2,4},
 {7,4,2,2,3,1,4,8,9,0},
 {9,5,5,3,9,4,2,0,9,0},
 {5,3,2,9,5,4,9,0,7,7},
 {8,1,0,6,8,6,7,7,9,8},
 {2,3,3,5,5,8,4,8,2,4}};
int main(){
 int i=0,j=0,c=0;
 for(;i<10;++i)for(;j<10;++j)c+=a[i][j]%2;
 printf("%d\n",c);
}
>>123 (3_2) 1. 隣り合う項の比
#include<stdio.h>
int fib(int n){return n<2?1:fib(n-1)+fib(n-2);}
int main(){
 int a[30],n=0;
 for(;n<30;++n)a[n]=fib(n+1);
 puts("隣り合う項の比");for(n=0;n<29;n++)printf("%f\n",(double)a[n+1]/a[n]);
}
>>123 (3_2) 2.各項を 2 で割ったあまり
#include<stdio.h>
int fib(int n){return n<2?1:fib(n-1)+fib(n-2);}
int main(){
 int a[30],n=0;
 for(;n<30;++n)a[n]=fib(n+1);
 puts("各項を 2 で割ったあまり");for(n=0;n<30;n++)printf("%d\n",a[n]%2);
}
127 :
123 :2009/04/24(金) 11:15:49
迅速な対応ありがとうございます。 ただ、申し訳ないのですが 全てのプログラムに対して 2:error: parse error before '&' token (3_1)には 13:error: parse error before '&' tokenが追加されてしまいます。
まさかコピペしたソースに が残ってるなんてことはないよね
>>123 (3_3) 構造体
#include<stdio.h>
#include<math.h>
typedef struct{int x,y,r;}circle_t;
double dist(circle_t C1, circle_t C2){
 return sqrt(pow(C2.x-C1.x,2)+pow(C2.y-C1.y,2));//(問) 円 C1 と C2 の距離を計算
}
int main(){
 circle_t C1={3,-4,2},C2={2,1,1};
 double a = 0;
 printf("C1 の中心の (x,y) 座標: (%d,%d)\n", C1.x, C1.y);
 printf("C2 の中心の (x,y) 座標: (%d,%d)\n", C2.x, C2.y);
 //(問) 円 C1 の中心と C2 の中心の x 座標の差を表示
 printf("%d\n",C2.x-C1.x);
 //(問) 円 C1 の x 座標を +2, y 座標を +1 して, 座標を再表示
 printf("%d %d\n",C1.x+2,C1.y+1);
 //関数 dist を実行し結果を表示. 初めは 0 と表示される.
 a = dist(C1,C2);
 printf("Distsnce between C1 and C2 is %lf\n", a); // 距離を表示
 return 0;
}
あああ…。
Firefoxだと" "が"&nbsp"になっちゃうのか。
>>127 は置換するなり,IEでコピペしなおすなりしろ。
>>130 君はエスパーか、しかし本当ならFirefoxにとってはひどい設定。
&nbsp;を&nbsp として空白表示になるとは。
132 :
123 :2009/04/24(金) 11:59:06
>>130 全くもって仰る通りでした…
IEで確認したところ、nbspは表示されておりませんでした。
(3_3)まで確認しましたが、(3_1)がどうも最初の行(0174520669)に対してしか奇数の数が求められておらず、./aのあとに4と表示されるだけとなっております…
>>132 各行の奇数の数を出力するの?
俺が書いたのは全部(100個)の合計だよw
直すから少し待て。
>>132 (3_1)修正版
#include<stdio.h>
int a[10][10]={
{0,1,7,4,5,2,0,6,6,9},
{3,5,8,0,0,5,6,0,3,0},
{4,6,5,9,8,5,0,6,4,7},
{9,7,2,0,7,3,6,7,9,3},
{2,9,7,7,6,0,6,8,2,4},
{7,4,2,2,3,1,4,8,9,0},
{9,5,5,3,9,4,2,0,9,0},
{5,3,2,9,5,4,9,0,7,7},
{8,1,0,6,8,6,7,7,9,8},
{2,3,3,5,5,8,4,8,2,4}};
int main(){
int i=0,j,c;
for(;i<10;++i,printf("%d\n",c))for(j=c=0;j<10;++j)c+=a[i][j]%2;
}
135 :
123 :2009/04/24(金) 12:07:39
>>133 そういう課題のようです。
本当にありがとうございます。
136 :
131 :2009/04/24(金) 12:29:33
>>132 (3_1)修正版
#include<stdio.h>
int a[10][10]={
 {0,1,7,4,5,2,0,6,6,9},
 {3,5,8,0,0,5,6,0,3,0},
 {4,6,5,9,8,5,0,6,4,7},
 {9,7,2,0,7,3,6,7,9,3},
 {2,9,7,7,6,0,6,8,2,4},
 {7,4,2,2,3,1,4,8,9,0},
 {9,5,5,3,9,4,2,0,9,0},
 {5,3,2,9,5,4,9,0,7,7},
 {8,1,0,6,8,6,7,7,9,8},
 {2,3,3,5,5,8,4,8,2,4}};
int main(){
 int i=0,j,c;
 for(c=0;i<10;++i)for(j=0;j<10;++j)c+=a[i][j]%2;
 printf("%d\n",c);
}
137 :
デフォルトの名無しさん :2009/04/24(金) 12:45:47
>>105 あ〜あ、参考資料を提示したのに、あれを理解できなかったとボロを出したよ、こいつwwww
138 :
デフォルトの名無しさん :2009/04/24(金) 12:50:39
>>105 環境次第では、なんだが、そこを理解できなかったようで。これだから一部の環境でしか
通用しないクソコードを平気で書く、クソ麻呂未満の低レベル講師は・・・生徒だったら
まだやり直せるけど、お前がいい年こいたオッサンなら、人生無駄にしてきたと思え。
>>111 麻呂ではない俺がおじゃるを付けて発言しただけだからw
クソースとおじゃるで麻呂になれるよ、あんたも?
(´・ω・`)プロセスが異常終了したらメモリリークするような環境は基幹業務にゃ使えないよね
>>137 >[3]環境
>[3.1]OS:windous XP
>[3.2]コンパイラ名とバージョン:Visual Studio.NET2003
>[3.3]言語:C++
>>19 の環境に対して
>>20 の答えでプロセス終了時にメモリリークがおきると思ってた低脳乙
元気な高校生がいると聞いてやってきましたが、 読むのがめんどくさい流れなので帰ります
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
http://pc12.2ch.net/test/read.cgi/tech/1232627790/369 intersectionメソッドが返す整数の列は文字列であること。整数の間には、"2,3,5"のように必ず,で区切ることとし、文字列の先頭や末尾には余分な,を付けないこと。
intersectionメソッドが返す整数の列は必ず数値の小さい順に並べること
intersectionメソッドに与えられる引数は、第一引数、第二引数それぞれについて、配列内の要素はかならず小さい順に並んでおり、一つの配列の中に同じ値が2回出てくることはないものと仮定してよい
集合の要素としてはint型で扱えるあらゆる整数に対応すること。また集合の要素数も実用的に扱える範囲のさまざまな要素数に対応すること
積集合が空の場合は、""を返すこと。
class a_set {
public:
static char *intersection(int* a, int* b) {
// 結果を保存する文字列
// TODO: aとbの積集合を求めて、結果をresultに文字列として格納
// 結果を返す
return result;
}
}
int main() {
int a[] = {2, 3, 10, 35};
int b[] = {3, 5, 10, 18};
cout << a_set::intersection(a, b) << endl;
}
[3] 環境
[3.1] OS: Windows 2000以降
[3.2] コンパイラ名とバージョン: VC7以降 (/Za オプション)
[3.3] 言語: C++
例題の答えは、3,10
>>143 aとかbの要素数はどうやって intersection に教えたらいいの?
145 :
143 :2009/04/24(金) 15:58:51
>>144 static string intersection(vector<int> a, vector<int> b);
に修正お願いします。(.n.)
じゃあresultもvectorに入れるべきだろ
java の宿題を無理やり C++ に合うように改変したからわかってないんじゃなかい? あと、C++ならSTLで一発だし。
>>130 こんどからセミコロンもちゃんとつけろよ
Firefoxの動作が一般に正しい動作
IEは気を利かせすぎ
149 :
130 :2009/04/24(金) 16:25:22
>>148 らじゃ。正直すまんかった。
>>134 では直してある。
にしてもJaneのプレビューはIEベースなのかねぇ…。
フィボナッチで再帰使ったり、ループ処理おかしかったり、 わざと嫌がらせしてんの?
再帰については効率の良さはともかく、その性質を知るのに使うことはあるだろ。 バブルソートなんて習う必要がないが、効率の悪いものから良いものへ、 そういうのを学ぶのも、現在発展途上の案件に対し、発展させる考えを 持たせるにはあっても良い授業だ。そもそも、時代の変化と共に、こういった技術は どんどん進化している。今あるものが大昔からあるものから最近発見されたものまで その歴史を知るが良い。
10です (
>>10 )
>>15 ありがとうございました
!canwin()として再帰させているあたりが参考になりました
1600〜2009年が与えられますが
2004年くらいが与えられると再帰の回数が多くなって答えを出すのに時間がかかってしまいました
メモ化しようと思ったのですが先手後手をどう扱えばいいか分からずできませんでした
>>12 Excelは持っていないので
>>15 と紙を使って規則性を考えてみました
この問題は2009年4月24日を渡したら勝ちですが
渡す月+日の奇偶が重要らしく、ここでは4+24=28なので
与えられた日付がY年M月D日のとき、基本的にM+Dが奇数ならAの勝ち
例外で、4月30日と6月30日はAの勝ち、Y年がうるう年ならY年2月29日はAの負けとなるようでした
ちなみに渡す月日が奇数のとき、Aの勝ち負けが反転して
例外が2月29日と4月30日と6月30日ではなく、9月30日と11月30日になるようでした
>>143 #include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>
class a_set {
public:
static std::string intersection( const std::vector< int > &a, const std::vector< int > &b ) {
std::vector< int > v;
std::set_intersection( a.begin(), a.end(), b.begin(), b.end(), back_inserter( v ) );
if ( v.empty() ) {
return "";
} else {
std::string s; std::stringstream ss;
std::vector< int >::const_iterator iter = v.begin();
ss << *iter; ++iter;
for ( ; iter != v.end(); ++iter ) {
ss << "," << *iter;
}
s = ss.str();
return s;
}
}
};
int main() {
using namespace std;
int a[] = {2, 3, 10, 35}; int b[] = {3, 5, 10, 18};
vector< int > v1( &a[0], &a[3] ); vector< int > v2( &b[0], &b[3] );
cout << a_set::intersection( v1, v2 ) << endl;
}
>>152 です
ちょっと間違えました
うるう年じゃないときに2月28日が相手に渡ったら負けるだけで、
基本的にM+Dが奇数ならAの勝ち、例外で、4月30日と6月30日はAの勝ち
だけでした
ジョン・フォン・ノイマンを知らないのは論外です、プログラミングだけでなく PCを扱うに於いて
>>153 std::string s; std::stringstream ss;
std::vector< int >::const_iterator iter = v.begin();
ss << *iter; ++iter;
for ( ; iter != v.end(); ++iter ) {
ss << "," << *iter;
}
s = ss.str();
の部分は
std::string s; std::stringstream ss;
copy( v.begin(), v.end(), std::ostream_iterator< int >( ss, "," ) );
s = ss.str();
s.resize( s.size() -1 );
と書いたほうがSTLっぽかったかな。
157 :
123 :2009/04/24(金) 17:44:43
>>123 です。 アップローダーが落ちているようなので再うpします。
[1] 授業単元:
[2] 問題文 (3_4) 学生 A, B, C, D さんの logi, math, ecom の成績はそれぞれ以下のようになっている.
A B C D
logi 90 70 90 80
math 80 85 70 90
ecom 90 85 80 70
math, logi, ecom というメンバを持つ構造体 grade_t を作成せよ. grade_t オブジェクト A, B, C, D を定義して, 成績をそれぞれの変数に格納し, 以下の機能を実装せよ;
それぞれの学生の成績の合計点を計算
各科目の平均点を計算せよ。
(3_5) (3_4) で grade_t に name というメンバを加えて構造体の配列を用い, (3_4) と同様の動作をするプログラムを作成せよ。
[3] 環境
[3.1] windows
[3.2] gcc
[3.3] C/C++
[4] 期限: 本日23:30
[5] その他の制限:なし
Q3.printfとwriteの違いはなんでしょう? おねがいします
>>150 再帰の何が嫌がらせなのか分からん。
ループ処理はどこがおかしいのか分からん。
具体的に指摘してくれ。
>>157 (3_4)
#include <stdio.h>
struct grade_t {int logi; int math;int ecom;};
struct grade_t A = {90, 80, 90};
struct grade_t B = {70, 85, 85};
struct grade_t C = {90, 70, 80};
struct grade_t D = {80, 80, 90};
int sum(struct grade_t *x)
{
return x->logi + x->math + x->ecom;
}
void ave(int num, struct grade_t *x[])
{
int i; double logi=0.0, math=0.0, ecom=0.0;
for (i = 0; i < num; i++) {
logi += x[i]->logi; math += x[i]->math; ecom += x[i]->ecom;
}
printf("average logi:%g, math:%g, ecom:%g\n",logi/num, math/num, ecom/num);
}
int main()
{
struct grade_t *p[4] = {&A, &B, &C, &D};
printf("%s sum:%d\n", "A", sum(&A));
printf("%s sum:%d\n", "B", sum(&B));
printf("%s sum:%d\n", "C", sum(&C));
printf("%s sum:%d\n", "D", sum(&D));
ave(4, p);
return 0;
}
>>157 (3_5)
#include <stdio.h>
struct grade_t {char *name; int logi; int math; int ecom;};
struct grade_t array[4] = {
{"A", 90, 80, 90},{"B", 70, 85, 85},{"C", 90, 70, 80},{"D", 80, 80, 90}
};
int sum(struct grade_t *x)
{
return x->logi + x->math + x->ecom;
}
void ave(int num, struct grade_t x[])
{
int i; double logi=0.0, math=0.0, ecom=0.0;
for (i = 0; i < num; i++) {
logi += x[i].logi; math += x[i].math; ecom += x[i].ecom;
}
printf("average logi:%g, math:%g, ecom:%g\n",logi/num, math/num, ecom/num);
}
int main()
{
int i;
for (i = 0; i < 4; i++) {
printf("%s sum:%d\n", array[i].name, sum(&array[i]));
}
ave(4, array);
return 0;
}
引数でint numが前だとなんか気持ち悪いなw
164 :
デフォルトの名無しさん :2009/04/24(金) 19:23:49
>>162 全問やっていただき本当にありがとうございました。
お陰で期限に楽勝で間に合いました! 本当にありがとうございます!
165 :
143 :2009/04/24(金) 22:05:47
>>153 >>156 やっていただいて、有難う御座います。GCC でエラーが出ましたが、後はこちらで調べてみます。
http://ml.tietew.jp/cppll/cppll/thread_articles/12484 gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
D:\>g++ 156.cpp
156.cpp: In static member function `static std::string a_set::intersection(const std::vector<int, std::allocator<int> >&, const std::vector<int, std::allocator<int> >&)':
156.cpp:16: error: `ostream_iterator' is not a member of `std'
156.cpp:16: error: expected primary-expression before "int"
>>165 ostream_iterator を使うには
#include <iterator>
が必要。あと、copy も std::copy にしないと多分エラー。
168 :
デフォルトの名無しさん :2009/04/25(土) 00:39:05
C言語の基礎の基本的な問題と解答が載っているサイトを教えてください。 問題は、プログラムを書けといった問題や、プログラムを実行するとどのように表示されるかといった問題や、 プログラムの穴埋めなどの、プログラムに関する問題です。 内容は、具体的には、最初から、printf、scanf、if、for、while、do-while、 break、continue、switch-caseぐらいまでの内容です。 よろしくお願いします。
[1] 情報処理: [2] キーボードより整数型データを配列に入力し、大きさの順に並べ替えて結果を表示するプログラムを作成しなさい。 ただし、データの個数は15とし、下記に示すプログラムのポインタ変数poを利用し<プログラムの本体>を作成せよ: [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] C [4] 4/27
#include<stdio.h> int main() { int x[25],i,j,temp; int *po; <プログラムの本体> return 0; }
閏年、カレンダーを出力する質問マダー?
素数、最小公倍数、最大公約数マダー?フィボナッチ数列マダー?
174 :
デフォルトの名無しさん :2009/04/25(土) 02:48:12
[1] 授業単元:プログラミング [2] 問題文:下の実行例のように、一行で入力された加算減算の式を計算して、 その答えを求めるプログラムを作りなさい。 ただし、式で入力する値は正の整数とし、演算は+とーのみとする。 [実行例] 式:3+21-15+1 答え:10 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:4月中 よろしくお願いします。
>>174 適当
#include<stdio.h>
#include<stdlib.h>
int main()
{
char s[80];
printf("式:");
fgets(s,sizeof s,stdin);
int v = 0;
char*p,*q=s;
do v += strtol(p=q,&q,10);while(p!=q);
printf("答え:%d\n",v);
}
10分経過 あと数分で1つ出てくる筈 その後5分程度でもう一本 さすがにその後は出来てても揚げないみたいだけど
>>176 C語通訳クンの競争は激しいねw
プロトコル位作りゃいいのに
最大公約数=ユークリッドの互除法 最小公倍数=x×y÷(x,yの最大公約数)
179 :
174 :2009/04/25(土) 03:38:06
180 :
174 :2009/04/25(土) 03:44:13
あとできれば、174のプログラムをポインタを使わずに作ってもらえるとありがたいです。
↓のボイン太君が何とかしてくれるはず
>>174 言ってるポインターって何や?
#include<stdio.h>
#define NUMBERS "0123456789" /* strspn(s, NUMBERS) 指定した文字群からなる部分文字列の長さを求めます。*/
int main()
{
char s[80];
int v, np, size;
printf("式:");
fgets(s, sizeof s, stdin);
if(s[0] == '-' || s[0] == '+') {
np = strspn(s+1, NUMBERS);
np++;
} else {
np = strspn(s, NUMBERS);
}
v = atol(s);
while(
size = strspn(s+np+1, NUMBERS) ) {
v += atol(s+np);
np += size+1;
} ;
printf("答え:%d\n", v);
}
>>174 #include <stdio.h>
int main(void)
{
int ch, sum = 0, temp = 0, flag = 1;
while(1) {
ch = getchar();
if('0'<=ch && ch <= '9') temp = temp * 10 + ch - '0';
else {
sum += flag * temp;
temp = 0;
if(ch == '\n' || ch == EOF) break;
if(ch == '+') flag = 1;
else if(ch == '-') flag = -1;
else return 1;
}}
printf("%d", sum);
return 0;
}
>>98 むしろしばらくたっても誰も答えないような難易度の高い問題をさくっと解くほうがかっこいいですねえ。
>>54 とか
186 :
185 :2009/04/25(土) 16:13:44
自己レスです。一点書き忘れました。 (1)は構造体の定義の後、メイン関数の前に helloworld x; と実際に使う必要がありました。
>>187 std::for_eachの第三引数は参照渡しではなく値渡しだから
ファンクタから戻るとファンクタが消滅する
正しい結果を得るには次のようにする
string::size_type maxlen2;
struct maxlenftn {
maxlenftn() : maxlen(0) {}
void operator()(string s) {
maxlen = maxlen2 = max(maxlen, s.size());
}
string::size_type maxlen;
};
int main() {
const char *na[] = {
"Orange", "Notebook", "XP", "UnitedKingdom"
};
vector<string> names(na, na + sizeof(na) / sizeof(const char *));
maxlenftn maxf;
for_each(names.begin(), names.end(), maxf);
cout << maxlen2 << endl;
}
>>185 #include <iostream>
using namespace std;
class helloworld {
public:
helloworld(int val) : a(val++), b(val++) {
cout << "Test 2 "<<a<<b<<endl; }
helloworld(int vala, int valb) : a(vala), b(valb) {
cout << "Test 3 "<<a<<b<<endl; }
private:
const int a, b; // a=2, b=3
// const int b, a; // b=2, a=3
};
//helloworld x();
helloworld y(2);
helloworld z(2,3);
int main(){
return 0;
}
191 :
174 :2009/04/25(土) 23:32:09
192 :
デフォルトの名無しさん :2009/04/25(土) 23:36:48
>>192 (a) i % 3 == 0 || 30 <= i && i <= 39 || (i % 10) == 3
(b) i % 5 == 0
>>170 #include <stdlib.h>
int main()
{
int x[25], i, j, temp;
int *po;
const int NUM = 15;
/* 入力 */
for(i=0; i<NUM; i++) {
while(printf("%2d/%d:", i+1, NUM), scanf("%d", &x[i]) != 1)
scanf("%*s");
}
/* バブルソート */
for(i=0; i<NUM-1; i++) {
for(j=NUM-1; j>i; j--) {
po = &x[j-1];
if(po[0] > po[1]) { /* 降順は>、昇順は< */
temp = po[1], po[1] = po[0], po[0] = temp;
}
}
}
/* 出力 */
for(i=0; i<NUM; i++)
printf("%d ", x[i]);
return 0;
}
世界のナベアツのパクリキターー!このスレは世界のアツナベが乗っ取った! これから3の倍数と3の付く番号にレスをした奴はアホっぽくレスをせずとも アホ決定!
>>196 ありがとうございます!
すいません、
サーバの平均の処理時間を1で正規化して、これを基準とした相対的な時間を用いる仕様にして欲しいのですが、無理でしょうか?
200 :
デフォルトの名無しさん :2009/04/26(日) 11:37:13
おまんこおーぷん もしヌルヌルなら おちんちん
201 :
デフォルトの名無しさん :2009/04/26(日) 12:17:06
202 :
187 :2009/04/26(日) 13:13:49
>>199 よく言っている意味がわからないんだけど、
arrivalRate /= serviceRate;
serviceRate = 1.0;
じゃだめなの?
>>203 シミュレーション時間の単位のことです。
実際の物理的な時間単位(sec等)でもよいが、
>>199 であるような仕様にしたほうがよいと書いてあるので・・
205 :
デフォルトの名無しさん :2009/04/26(日) 16:52:50
>>194 30 <= i && i <= 39よりも、
( i / 10 ) == 3
がよさげ。
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): h = 1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5 これを2重のfor文で解け。 [3] 環境 [3.1] OS: windows vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: c [4] 期限: 5月15日まで
>>206 /* h = 1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5 */
#include <stdio.h>
int main() {
int i, j, mul, sum = 0;
for(i=1;i<=5;i++) {
mul = 1;
for(j=1;j<=i;j++) {
mul *= j;
}
sum += mul;
}
printf("h = %d", sum);
}
>>207 キチンと動きました。!!
本当にありがとうございます!!。
[1] 授業単元: プログラミング言語 [2] 2重のfor文で下記のように表示しろ。 98765 87654 76543 65432 54321 [3] 環境 [3.1] OS: windows vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: c [4] 期限: 5月15日まで
#include <stdio.h> int main(void) { int i, j; for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%d", 9-i-j); putchar('\n'); } return 0; }
#include<stdio.h> int main(){ const char s[]= "98765\n" "87654\n" "76543\n" "65432\n" "54321\n"; int i,j; for(i=0;i<1;++i) for(j=0;s[j]!='\0';++j) putchar(s[j]); }
>>209 #include <stdio.h>
int main()
{
int i, j;
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++){
printf("%d", (9-i-j));
}
printf("\n");
}
return 0;
}
>>210-212 どれもきちんと正常に動きました。
本当に皆さんありがとうございます。助かりました!!
214 :
193 :2009/04/26(日) 18:50:02
>>201 ありがとうございます。
正常に動作しました。
よろしければ引き続き2番目の方もどなたかお願いします。
テステス
>>215 1-1 throw
1-2 try
1-3 catch
1-4 range_error
2-5 MyData&
2-6 a.str
2-7 free(str)
2-8 *this
2-9 vector<MyData>::const_iterator
2-10 *(it++)
3-1 getIP(s)
3-2 atoi(s)
3-3 >>=
220 :
215 :2009/04/26(日) 22:28:03
>>219 様
ありがとうございます。
助かりました!!!!
221 :
193 :2009/04/26(日) 22:44:47
>>218 すいません。説明が不十分でした。
リストのコードと配列のコードである
2つを別々に作るということでした。
>>193 MAXENTは3として欲しい。わざわざ4にした理由がわからん
#define MAXENT 4 /* 最大3個の要素が入る待ち行列*/
/* テストのためわざと小さい大きさにしている */
int x[MAXENT-1]; /* 待ち行列用の配列の宣言 */
224 :
193 :2009/04/27(月) 00:33:20
>>223 申し訳ありません。
ただ自分が作った問題ではないのでなんとも言えないのですが。
>>201 >>218 >>222 >223
皆さん大変ありがとうございました。
これからは自分で作れるように努力したいと思います。
226 :
デフォルトの名無しさん :2009/04/27(月) 12:44:49
[1] 授業単元: 演習課題 [2] 問題文(含コード&リンク): nCrを計算するプログラムを,(再帰的呼び出しを用いずに)作成せよ.但し,nは0以上5以下とする [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 早ければ早いほどいいが、無期限 [5] その他の制限: 初心者
>>226 joyful/img/9097.c
・・・ここまで書いて、条件を満たしてないことに気づいた。
ま、まぁ、参考までに。
230 :
226 :2009/04/27(月) 15:00:39
>>227 >>228 ありがとうございます!
おかげで一つ謎が解けそうです。
あとは自分で作れるよう、このソースを解読してみます。
>>225 問1 1 :: 2 : 3 バッファオーバーラン 4 strncpy 5 strncpy(this->phone, phone, MAXNAME-1);
・・・「ぜいじゃくせい」じゃないのかなぁ?
2-1 β 2-2 bool 2-3 x 2-4 y 2-5 "四角形の内側です\n"
>>232 はスタックを作れとは書いてないから
そのまま文字列表示しちゃってもいいのか?w
課題1 #include <stdio.h> int main() { char buf[32]; int a, b; printf("A?"); fgets(buf, sizeof(buf), stdin); a = atoi(buf); printf("B?"); fgets(buf, sizeof(buf), stdin); b = atoi(buf); printf("\n"); printf("A+B = %d\n",(a+b)%10); printf("A-B = %d\n",(a-b)%10); printf("A*B = %d\n",(a*b)%10); printf("A/B = %d\n",(a/b)%10); printf("A%B = %d\n",(a%b)%10); return 0; }
課題2 #include <stdio.h> int main() { char buf[32]; int s; printf("身長を入力してください?:"); fgets(buf, sizeof(buf), stdin); s = atoi(buf); printf("\n標準体重は %4.1fkg です.\n",((double)s - 100.0) * 0.9); return 0; }
238 :
デフォルトの名無しさん :2009/04/27(月) 18:07:39
突然の質問ですいません #include <stdio.h> int main (){ int i; double a; a=0.0; for(i=0;i<20;i++) { a=a+0.1; printf("a=%f\n",a); if(a==1.0) break; } printf(" a = %f \n", a ); return 0; } この答えが2になるのは何故でしょうか?
239 :
デフォルトの名無しさん :2009/04/27(月) 18:16:31
if(a==1.0)が真にはならない
こういうのって0.1ずつ足していくと 1.0にならずに0.9999999とかになるんじゃなかったっけ。
a=a+0.125; とか1/2^nであらわせる数なら誤差は出ない
printf("a=%.16f\n",a); にすれば1.0じゃないのがわかる
245 :
デフォルトの名無しさん :2009/04/27(月) 19:14:29
TEST
246 :
デフォルトの名無しさん :2009/04/27(月) 19:19:23
>>242 それは実装系依存(FLT_RADIX依存?)。
238は環境を提示していないので、239以上のことは言えんと思う。
>>246 9086.txt
#include <stdio.h>
int main()
{
int i = 1; double sum = 0.0;
while (1) {
sum += 1.0 / (i * (i + 2));
if (sum > 0.74)
break;
i++;
}
printf("%d %g\n", i,sum);
return 0;
}
9087.txt
(a) [now > 0]
(b) [max < prod]
(c) [max = prod]
(d) [prev = now]
(e) [scanf("%d", &now)]
>>248 日本語でおk。論より証拠。ならばお主がソースで具体的に
自分が言いたかったことを示したら?コードでおk。
>>248 > C言語側で制限つける
ユーザが0から5の間で入力すれば良いと言いたいのか?
それならそれで良いんだが。ただ、入力できる数は何も0から5の間に
限ったことではないんでね。
252 :
デフォルトの名無しさん :2009/04/27(月) 22:13:03
>>248 の書いたソースコードマダー?(チンチンAA略)
253 :
デフォルトの名無しさん :2009/04/27(月) 22:15:37
>>248 (・∀・) (^Ω^) (^ω^ ) まだかお?
254 :
デフォルトの名無しさん :2009/04/27(月) 22:24:10
>>248 ( ̄工 ̄) 子供だって美味いんだも〜ん、飲んだらこう言っちゃうよぉ〜
>>251 オレは248じゃねぇが、問題文の「nは0以上5以下とする」は
「入力値は0〜5とする。それ以外の値が入力されることについては考えなくて良い」とも解釈できんだろ。
その視野狭窄は治しとかんといらん恥かくぞ。
>>255 >解釈できんだろ
どっちにでもとれる表現は勘弁してくれw
おぅ、わりぃ。「解釈できるだろ」ってことでひとつ。 226読み直したが、入力するとも書いてねぇな。 forでnとrを0〜5で回して一覧表示するってのでも、回答にはなりそうだべ。
>>258 printf("x=%d\n",&x);
↓
printf("x=%d\n",x);
260 :
225 :2009/04/27(月) 22:58:45
>>259 すみません、そこはタイプミスでしたorz
直したのですがうまくいきません;
263 :
258 :2009/04/28(火) 00:17:58
少し追記ですがx=(ad-bc)/(a-b-c+d)の式にa,b,c,dを代入して自分で計算した結果と プログラムを実行して出た結果は同じだったのですが 式b-x:a-x=d-x:c-xに代入して計算すると違う答えになってしまいますorz
具体的に何を代入した?
>>261 #include <string.h>
char *strsearch(const char *s1,const char *s2)
{
char *result = NULL;
int dlen = strlen(s2);
while (*s1){
if(strncmp(s1, s2, dlen) == 0){
result = (char *)s1;
break;
}
s1++;
}
return result;
}
267 :
232 :2009/04/28(火) 05:45:25
>>232 です。
すみません、書き忘れていました。
前回がdouble型までの学習だったのでもう少しシンプルになりませんでしょうか?
>>264-265 例えばa=1800、b=22000,c=450,d=2000とすると
a*b=39600000、b*c=9900000、a-b-c+d=-18650
a*b-b*c=29700000
((a*b)-(b*c))/(a-b-c+d)=-1592
プログラムの結果も1592となったのですがb-x:a-x=d-x:c-xに代入してやると
(22000-x):(1800-x)=(2000-x):(450-x)で内側と外側をかけて
3600000-1800x-2000x+x^2=9900000-22000x-450x+x^2
3600000-3800x=9900000-22450x
18650x=6300000
x=338となり結果が違うのですが計算方法が間違っているかもしれません;
プログラムの結果は1592ではなく-1592に訂正を;
>>270 そうですか・・・処理系に依存するようなところはないと思うので誤字など
ないか確認してみます。
回答ありがとうございます<(_ _ )>
>>268 x=(a*d-b*c)/(a-b-c+d)
で
x=337.80160857908847184986595174263
が正解じゃね?
>a*b=39600000
これがおかしい。a*dと間違えてる
>>267 >[2] 実行例のように表示されるプログラムを作製せよ。
要求を満たしているので、これで良いのではないかな。
>もう少しシンプルになりませんでしょうか?
何を使えとか、何を使うなとか、要求を具体的に書いてみて。
>>273 課題文をフルで書いてみます。
課題1
実行例のように、二つの整数を入力し、和・差・積・商・剰余の下一桁を表示するプログラムを作成しなさい。
ヒント:下一桁=10で割った余りです。
課題2
実行例のように、身長を整数値として入力し、標準体重を実数値で表示するプログラムを作成しなさい。標準体重は(身長-100)*0.9によって求め、その小数点以下は、一桁だけ表示すること。明示的な変換を使用すること。
恐らく1はprintf関数とscanf関数と剰余演算子です。
2はあまりよくわからないですが、変換指定に%fを使用するものだと思います。
誤解を解くのも説明するのも面倒だからそのまま出しとけよ。 題意は満たしてるんだし。
>>274 BMIは同じ修正なので省略します。
#include <stdio.h>
int main()
{
int a, b;
printf("A?");
for(;;) {
if(scanf("%d", &a)) break;
scanf("%*s");
}
printf("B?");
for(;;) {
if(scanf("%d", &b)) {
if(!b) {
printf("0で割りました");
return 1;
}
break;
}
scanf("%*s");
}
printf("\n");
printf("A+B = %d\n",(a+b)%10);
printf("A-B = %d\n",(a-b)%10);
printf("A*B = %d\n",(a*b)%10);
printf("A/B = %d\n",(a/b)%10);
printf("A%B = %d\n",(a%b)%10);
return 0;
}
>>244 さんのを借り
#include <stdio.h>
#include <stdlib.h>
int Factorial(int k)
{
char ans=1,i,temp;
if(k == 0)
return 1;
for(i=k;i>0;i--) {
temp = ans;
ans *= i;
if(temp>ans) return 0;
}
return ans;
}
int comb(int n, int r)
{
int a1, a2, a3;
if(!(a1 = Factorial(n))) return 0;
if(!(a2 = Factorial(r))) return 0;
if(!(a3 = Factorial(n-r))) return 0;
return a1/a2/a3;
}
int main()
{
int j, ans;
for(j=0; ans=comb(j, j/2); j++)
printf("%dC%d=%d\n", j, j/2, ans);
}
279 :
デフォルトの名無しさん :2009/04/28(火) 15:01:33
>>226 > (再帰的呼び出しを用いずに)
日本語が読めない人がいるようです
再帰呼び出し:関数の中でその関数を呼び出すこと。 (間接)再帰的呼び出し:関数がその関数を呼び出す関数を(場合によっては 間接的に)呼び出すこと
282 :
デフォルトの名無しさん :2009/04/28(火) 19:34:37
>>279 解こうと思ったけど、リストが中途半端なのでやめた
アメリカまで行ってなにやってんだか
284 :
261 :2009/04/28(火) 21:22:03
>>261 int getUserIP(const char *s, char *user, char *ip)
{
int result = 0;//結果を格納する変数1なら正常終了、0なら異常終了
char *p;
if((p = strstr(s, "Accepted password for ")) != NULL){
p += 22;//22は"Accepted password for "の長さ これでpはユーザ名の先頭文字を指し示す
while (*p != '\0'){
if(/*1 カ*/isspace(*p)){//現在の文字(*p)がスペースならユーザ名の終了
*user = '\0';//ターミネータを書き込む
break;
}
/*2 オ*/*user++ = *p++;//*sから*userに文字をコピーする
}
if((p = strstr(s, "from ::ffff:")) != NULL){
p += 12;//12は"from ::ffff:"の長さ これでpはIPアドレスの先頭文字を指し示す
while(*s != '\0'){
if(/*1 カ*/isspace(*p)){//現在の文字列(*p)がスペースならIPアドレスの終了
*ip = '\0';//ターミネータを書き込む
/*3 ク*/result = 1;//正常終了
break;
}
/*4 イ*/*ip++ = *p++;//*sから*ipに文字をコピーする
}
}
}
return result;
}
286 :
279です :2009/04/28(火) 22:32:13
282はなんか勘違いしてるんだと思うYo!
288 :
デフォルトの名無しさん :2009/04/28(火) 23:11:09
>>279 二分ヒープまでしかできなかった
template<class T>
class heap{
std::vector<T> data;
public:
int push(T x){
data.push_back(x);
for(int n=data.size();n>1 && data[n/2-1]<data[n-1];n/=2){
std::swap(data[n/2-1], data[n-1]);
}
return 1;
}
int pop(T& x){
if(!data.size()) return 0;
x=data[0];
std::swap(data[0], data[data.size()-1]);
data.pop_back();
for(int n=0;n<data.size()/2;){
int idx=n;
if(data[n]<data[n*2+1]) idx=n*2+1;
if((n*2+2)<data.size() && data[idx]<data[n*2+2]) idx=n*2+2;
if(idx==n) break;
std::swap(data[n], data[idx]), n=idx;
}
return 1;
}
};
290 :
デフォルトの名無しさん :2009/04/29(水) 00:11:45
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): 入力された数値の回数分だけ乱数を使ってコイン投げを行い, 表裏が出る枚数をカウントして表示させるプログラム を作りなさい。 [3] 環境 [3.1] OS: Windows [3.2] VC 6.0 [3.3] 言語: C++ [4] 期限: 4月30日午後12時まで お手上げ状態です。 よろしくお願いします・
294 :
デフォルトの名無しさん :2009/04/29(水) 00:48:24
>>291 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int i, n, h = 0;
printf("n = "), scanf("%d", &n);
srand((unsigned)time(NULL));
for(i = 0; i < n; i++) h += rand() % 2;
printf("head: %d\ntail: %d\n", h, n - h);
return 0;
}
>>295 すごいですね。
ありがとうございました。
もしよかったら下の部分を詳しく教えてください
h += rand() % 2;
表と裏が出る確率が50%ずつとは限らないんじゃないだろうか? とか言ってみる。 #include <iostream> #include <cstdio> #include <ctime> int main() { using namespace std; const double PH = 0.49; const double PT = 0.49; srand(static_cast<unsigned>(time(0))); int n, h = 0, t = 0; cin >> n; for(int i = 0; i < n; ++i ) { double p = static_cast<double>(rand())/(RAND_MAX); if(p <= PH) ++h; else if(p <= (PH+PT)) ++t; } cout << "Heads:" << h <<" Tailes:" <<t <<endl; return 0; }
298 :
デフォルトの名無しさん :2009/04/29(水) 01:33:09
警告をコピペしてくれないから何とも言えないが、return 0 にかえれば警告は出なくなるんじゃない? しかしそれ以前に a の確保のしかたが違う気がする
>>298 変数aとbをNULLで初期化した後、それを参照すること無くmallocで得られた値を代入してるから意味ないじゃんっていう警告。
要するにコンパイラのお節介。
無視するか、この種類の警告を出さないオプション「-w-8004」を付けてコンパイルすれば良い。
301 :
デフォルトの名無しさん :2009/04/29(水) 02:21:10
>>299 すみません;;
警告をコピーするの忘れてました。
警告 W8004 21-1.c 44: 'b' に代入した値は使われていない(関数 main )
警告 W8004 21-1.c 42: 'a' に代入した値は使われていない(関数 main )
です;;
初期化しなきゃいいじゃん。
なぁ… * sizeof(char)って、必要か? sizeof(char)ってのは、1バイトを示すもんだろ?
警告 W8004 21-1.c 44: 'b' に代入した0は使われていない(関数 main ) 警告 W8004 21-1.c 42: 'a' に代入した0は使われていない(関数 main )
306 :
デフォルトの名無しさん :2009/04/29(水) 02:34:14
>>298 これはまずいんじゃ?
× a = malloc(STR_LENGTH * STR_NUMBER * sizeof(char));
○ a = malloc(STR_LENGTH * STR_NAME * sizeof(char));
私なら、aはポインタのポインタ、strcpyはポインタへの代入にしたい。
今のままだとメモリー破壊する
310 :
デフォルトの名無しさん :2009/04/29(水) 02:56:49
VS2008でコンパイルしたら、エラーが出てる。 error C2440: '=' : 'void *' から 'char (*)[6]' に変換できません。 46 error C2440: '=' : 'void *' から 'student *' に変換できません。 47
>>298 CodeGuard掛けたらエラー出たぞ。下のはその一例な
Error 00001. 0x130410 (スレッド 0x0AD4):
アクセス オーバーラン: アドレス 0x00D74324 から 6
バイトを参照しました。 これは 4
バイトの長さしか確保されていない ヒープブロック
0x00D74324 に当たります。
intr_strcpy(0x004020DE ["AICHI"], 0x00D74324)
| dai1.c line 62:
| }
|
|> strcpy(a[0],"AICHI");
| strcpy(a[1],"GIFU");
|
呼び出し履歴:
0x00401230(=dai1.exe:0x01:000230) dai1.c#62
0x329C41EA(=CC3290MT.DLL:0x01:0C31EA)
メモリブロック(0x00D74324) [長さ: 4 バイト] は malloc
によって確保されました。
| dai1.c line 46:
| struct student *b = NULL;//確・ウれる記憶域・?アドレスを格納す・・?\造・?・定義する
|
|> a = malloc(STR_LENGTH * STR_NUMBER * sizeof(char));
| b = malloc(2 * sizeof(struct student));
|
呼び出し履歴:
0x004011E8(=dai1.exe:0x01:0001E8) dai1.c#46
0x329C41EA(=CC3290MT.DLL:0x01:0C31EA)
>>310 それはVSでコンパイルしてるからじゃなくて、C++としてコンパイルしてるから出てるエラーだ。
313 :
261 :2009/04/29(水) 06:10:46
314 :
デフォルトの名無しさん :2009/04/29(水) 06:59:22
delete a,b; delete[] c,d; って間違いですか?
315 :
112 :2009/04/29(水) 09:13:24
>>199 の仕様ににするのは無理でしょうか?それとできれば平均到着率は入力できるようにしてもらいたいのですが・・
>>276 K&R に載ってたような。
今日が締め切りだけど、「英単語 カウント C」で検索すると沢山出る。
>>279 >>282 難問ですね。それはともかく、私の環境ではブラウザでみると文字化けしてしまうのですが、ここにはなにがかいてあるのですか?
>>276 落とし穴(ピリオドの後ろに必ずスペースが必要)があるが、
設問の課題データ例のパターンなら大丈夫と思う。
表示法例では0回の時どうするか分からないので全て表示にした。
(3)+(2)の(a)
#include <stdio.h>
#include <stdlib.h>
int count[16];
void wordcount(char word[16])
{
int i = 0;
for (i = 0; i < 16; i++) { if (word[i] == '.' || word[i] == 0) { break; } }
count[i]++;
}
int main()
{
char buf[16]; int i;
while (1) {
scanf("%15s%*c", buf);
if (buf[0]=='*' || buf[0] == 0) { break; }
wordcount(buf);
}
printf("文字数 出現回数\n");
for (i = 1; i < 16; i++) { printf(" %2d %3d\n", i, count[i]);}
return 0;
}
(3)+(2)の(b) #include <stdio.h> #include <stdlib.h> int count[16]; void wordcount(char *word) { int i = 0; for (i = 0; i < 16; i++) { if (*(word+i) == '.' || *(word+i) == 0) { break; } } count[i]++; } int main() { char buf[16]; int i; while (1) { scanf("%15s%*c", buf); if (buf[0]=='*' || buf[0] == 0) { break; } wordcount(buf); } printf("文字数 出現回数\n"); for (i = 1; i < 16; i++) { printf(" %2d %3d\n", i, count[i]); } return 0; }
321 :
316 :2009/04/29(水) 13:16:00
>>199 1で正規化→1固定と解釈
/* 処理中のサービスがなければ開始 */
// EventManager_addEvent(&mgr, EVENT_SERVICE_FINISH, e.time + (Time)(exp_random(serviceRate)*SECOND));
EventManager_addEvent(&mgr, EVENT_SERVICE_FINISH, e.time + (Time)( SECOND));
322 :
デフォルトの名無しさん :2009/04/29(水) 21:33:36
323 :
276 :2009/04/29(水) 22:27:31
325 :
324 :2009/04/29(水) 23:59:05
>>326 レスと誘導ありがとう
やっぱりそうですよね…どうしようかな…
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9117.txt (1)上記の関数は抜ける前にcoutをフラッシュするつもりで書かれている。
このフラッシュは保証されているか?もし保証されていなければどのようにすれば修正出来るか。
※func2とfunc3の内容はわからないものとする。
(2)もし仮にstd::cout << func3()の箇所をstd::cout << func1();とした場合、
再帰的に自分自身を永遠に呼び出し続けるか、それとも関数呼び出しが終わる事が保証されているか。
理由も含めて答えよ。
[3] 環境
[3.1] OS: ウィンドウズ
[3.2] G++
[3.3] 言語:C++
[4] 期限: 09/4/30中
[5] その他の制限:
特に無し
なぜ「++Cでなく」C++と名付けられたのか、その理由を答えよ、というクイズ問題が出題されました。 グーグルを駆使しているのですが答えが見つかりません。どなたかわかった人は教えて下さい。よろしくおねがいします
何かにCを加えるのではなく、Cを拡張したからこそ後に何かを足すといった 勝手に想像してみるテスト。そんなの、C++開発者の公式サイトを見た方が早い。
>>329 C++Primerという本の、回答編(?)という本に載ってたはず。
var=1, ans=++var; // ans = 2, var = 2 var=1, ans=var++; // ans = 1, var = 2 ++Cを評価すると、C の値に1増加と為り、 C++を評価すると、C の内容と同じ値に為るから。 つまり、[ ] by 10点
Cとの互換性があるよってことか
336 :
329 :2009/05/01(金) 00:49:46
Where did the name "C++" come from?にはむしろ「++Cの方がC++より優れていると考える目利きもいる」と書いてあり、
Orwell,1949には一切ネーミングについて++Cの話は出て来ませんでした。
>>333 の話がどこかに載っているといいのですがインターネット上にありますか?
337 :
328 :2009/05/01(金) 00:57:27
どなたかお願いできないでしょうか?
>>337 あってるか知らないけど。
1.保証されない。
try{
// 略
} catch (...) {
std::cout << std::flush;
}
2.保証されない
再帰呼び出しを行ってスタックオーバーフローをおこし、プログラムが終了する
339 :
328 :2009/05/01(金) 05:10:39
>>338 (1)すみません よくわからないのですが全文かいていただけないでしょうか
(2)std::cout << "aiueo";の後とfunc2()の後でflushを付け加えたのですがそれでもスタックオーバーフローになります
flushすればバッファがたまっていかないのでメモリがいっぱいになることもなく、したがって永遠にループするかと思ったのですが。なぜスタックオーバーフローになるのでしょうか?
340 :
286です。 :2009/05/01(金) 06:23:11
>>328 (1)保証される。よって修正したソースは不要。
(2)再帰から抜ける条件が無いため、無限に再帰動作する。
(3)永久ループと無限再帰はメモリの消費が異なるため。
343 :
あ :2009/05/01(金) 13:57:16
これわかりますか? キーボードから 3整数を読みこみ、これを三辺の長さとする三角形が成立するかどうかがわかる プログラムを論理演算子を用いて作りなさい わかったらお願いします!
>>340 top->left = new binary_tree();
top->right = new binary_tree();
top->ch = 0;
(top->left)->left = (top->left)->right = NULL;
(top->right)->left = (top->right)->right = NULL;
(top->left)->ch = pq.top().ch, pq.pop();
(top->right)->ch = pq.top().ch, pq.pop();
length = 2;
以上を↓こうしてみたら?
top->left = new binary_tree();
top->right = new binary_tree();
top->ch = pq.top().ch, pq.pop();
length = 1;
>>340 #include <iostream>
using std::cin;
using std::cout;
int main(void) {
int a, b, c;
cout <<"Input a b c length:";
cin >> a >> b >> c;
if(a+b <= c || a+c <= b || b+c <= a)
cout << "三角形にはなりません\n";
else
cout << "三角形です\n";
}
麿のクソースが発動できないでおじゃるっ!早くリストの問題を出すでおじゃる!
>>347 問1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_VAL 100000
#define REPEAT_NUM 1000
int count_prime(int max_val) {
int *a = calloc(max_val, sizeof(int)), i, j, count = 0;
for (i = 2; i <= max_val; i ++) {
if (a[i-1] == 0) {
count ++;
for (j = i * 2; j <= max_val; j += i) a[j-1] = 1;
}
}
free(a);
return count;
}
int main() {
clock_t start_time, end_time;
int num, i;
start_time = clock();
for (i = 0; i < REPEAT_NUM; i ++) num = count_prime(MAX_VAL);
end_time = clock();
printf("Number of primes=%d\n", num);
printf("Elapsed time=%gsec\n", (end_time - start_time) / (double)CLOCKS_PER_SEC / REPEAT_NUM);
return 0;
}
347(1)解答45分ですた。
>>347 問2
#include<stdio.h>
#include<stdlib.h>
#define MAX_VAL 100000
int *make_primes(int max_val, int *num) {
int *a = calloc(max_val, sizeof(int)), i, j, count = 0, *primes;
for (i = 2; i <= max_val; i ++)
if (a[i-1] == 0) { count ++; for (j = i * 2; j <= max_val; j += i) a[j-1] = 1; }
primes = malloc(count * sizeof(int));
for (i = 2, count = 0; i <= max_val; i ++) if (a[i-1] == 0) primes[count++] = i;
free(a); *num = count; return primes;
}
void factorize(int k, const int *primes, int prime_num) {
int i, r;
printf("入力整数=%dは", k);
for (i = 0; i < prime_num; i ++)
if (k % primes[i] == 0) {
for (r = 0; k % primes[i] == 0; r ++) k /= primes[i];
printf("\n %dの%d乗", primes[i], r);
}
printf("の積で表現される。\n");
}
int main() {
int prime_num, *primes = make_primes(MAX_VAL, &prime_num);
factorize(12345, primes, prime_num);
factorize(23456, primes, prime_num);
factorize(34567, primes, prime_num);
factorize(45678, primes, prime_num);
factorize(56789, primes, prime_num);
free(primes);
return 0;
}
篩ならj=i*2じゃなくてj=i*iってしなよ
おう、なるほどな。
354 :
340です。 :2009/05/01(金) 23:21:05
毎度ありがとうございます。 B&Rしてみましたが、残念ながらツリーがやはり正しくありません。 ご協力ありがとうございました!!もうちょい粘ってみます!! 2チャンネラーが神々しく見えてきた・・・
>>352 j=i*i であるべきだけど max_val の値によってオーバーフローするから
プログラム的には i*2 が悪いわけではない
for(i=2; i*i<=max_val; i++) { if(a[i]==0) { count++; for(j=i*i; j<=max_val; j+=i) a[j] = 1; }} for(; i<=max_val; i++) if(a[i]) count++; オーバーフロー気にするならわければいい。
[1] 授業単元:Cプログラミング言語 [2] 問題文: 問題1 (平年の)1年は何時間か を計算して表示するプログラムを 作ってみましょう。 [3] 環境 [3.1] OS:Windows [3.2] めじろ [3.3] C言語?です [4] 期限:明後日までです・・・・ よろしくおねがいします
>>357 main(){printf("%d",365*24);}
>>358 様
ありがとうございます。本当にありがとうございます。感謝です。
[1] Cプログラミング言語 [2] キーボードから整数を読み込んで (計算せずにそのまま)表示する プログラムを作っりなさい。 [3.1] OS:Windows [3.2] めじろ [3.3] C言語です [4] 期限:明後日までです・・・・ まだまだあります・・・。 ある程度は参考書みて頑張ります・・・。少しだけ助けてください・・・。 みなさんすごすぎです・・・・
#include <stdio.h> int main(void) { int n; scanf("%d", &n); printf("%d", n); return 0; }
>>361 様
本当にありがとございます。
心から感謝しています。
これは初心者レベルなのでしょうか?
初心者レベルでわからない私は一体・・・・。
[1] Cプログラミング言語 〔2〕 ツルの数とカメの数を読み込んで 足の数を計算するプログラムを作 ってみましょう (平年の)1年は何週間と何日か を計算して表示するプログラムを 作ってみましょう。 1億の1万倍がいくつになるかを 計算するプログラムを作り、実行 して、その結果を報告して下さい。 [3.1] OS:Windows [3.2] めじろ [3.3] C言語です [4] 期限:明後日までです。これが最後です。お願いします。
#include <stdio.h> int main(void) { int c, t; printf("鶴の数:"); scanf("%d", &c); printf("亀の数:"); scanf("%d", &t); printf("足の数:%d",c*2+t*4); return 0; }
>.364様 本当にありがとうございます。 感謝です。 すごいですね、本当に。 私にはただの記号にしかみえません
#include <stdio.h> int main(void) { int d, w; for(d = 365,w = 0; d >= 7; d -= 7) w++; printf("一年は%d週と%d日\n", w, d); return 0; }
>>366 様
本当にありがとうございます。
少しづつですが、なんとなくどのようなものかわかってきました。
あたしの実力では一番最初のが限界ですがwww
本当にありがとうございます。
368 :
デフォルトの名無しさん :2009/05/02(土) 11:08:10
[1] C言語実習 [2] Windowsに付属しているカードゲーム「フリーセル」を自動的に解くプログラム。 [3.1] Windows [3.2] gcc [3.3] C言語 [4] 期限:5月10日 enum SUIT { SPADE, HEART, DIAMOND, CLUB }; typedef struct tagCARD { char suit, number; } CARD;
369 :
デフォルトの名無しさん :2009/05/02(土) 11:39:19
#include <stdio.h> int main(void) { int n; n = 100000000; n *= 10000; printf("%d\n", n); return 0; }
オーバーフロー
>>363 _3
>>363 >>363 .3
#include <stdio.h>
int main(){
int yukiti=10000;float yukiko=(float)yukiti; double choo;
choo=yukiko*yukiko*yukiko;
printf("%.0f.\n", choo);
choo/=10000.; /* 1万以下端数四捨五入 */
if((int)choo%10000 == 0) {
choo/=10000.;
if((int)choo%10000 == 0) {
printf("%.0f.兆\n", choo/10000.);
} else
printf("%.0f.億\n", choo);
} else
printf("%.0f.万\n", choo);
}
main() { printf("%.0f\n", (double)100000000 * 10000); }
代入すると精度が落ちるが、代入さえしなけければ(float)でもかまわない。 #include <stdio.h> int main() { printf("%.0f\n", 100000000*10000.); }
printf("%d億\n", 1*10000);
>>356 for(i=2; i*i<=max_val; i++) {
if(a[i]==0) {
count++;
for(j=i*i; j<=max_val; j+=i) a[j] = 1;
}}
for(; i<=max_val; i++) if(a[i]==0) count++;
>>376 その意味の「自動的に解く」ならあんなenumとか書かない気がする。
>>378 enum って c++ からじゃないの?
画像認識とWinAPIでマウスを動かせば
できないことも無いと思うけど・・・
>enum って c++ からじゃないの? アホだw
初期条件をどうするかな。 10日期限だと画像認識は無理だろう。 知らなかったかもしれないが、 enumはCからあるよ。
画像認識だとAのスートが開始時に確定しないからちょっとめんどいな。
>>368 制限として明記されていないが、そのenumとstructは使えという指示?
それとも自分で定義したもので他の方法でできるなら使わなくて良い?
383 :
382 :2009/05/03(日) 09:03:28
> 画像認識だとAのスートが開始時に確定しないからちょっとめんどいな。 右クリックで出るのに今気づいたorz
384 :
デフォルトの名無しさん :2009/05/03(日) 13:20:38
C言語の課題で 「整数部分が9ケタ以内の正の数を入力させ、もしその数が整数ならばケタ数を表示し、少数ならば「整数を入力してください」と表示するプログラムを作れ」という課題が出ました 最初の「整数部分が9ケタ以内の正の数を入力させ、もしその数が整数ならばケタ数を表示し」のところは自力でできたのですがそのあとの「少数ならば」のところができません。 しかも授業で習った範囲でしか使ってはいけないのでelseなどは使ってはいけないと言われています。どなたか教えていただけないでしょうか? これが途中までのプログラムです。 #include<stdio.h> int main() { double x; printf("九桁以内の正の数を入力しなさい\n"); scanf("%lf",&x); if(1<=x){ if(9>=x){ printf("桁数は1ケタです\n"); } } if(10<=x){ if(99>=x){ printf("桁数は2ケタです\n"); } } (これが9ケタになるまで続く(長くなるから省略) return(0); }
>>385 ですがテンプレ忘れていました。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 整数部分が9ケタ以内の正の数を入力させ、もしその数が整数ならばケタ数を表示し、少数ならば「整数を入力してください」と表示するプログラムを作れ
[3] 環境
[3.1] Windows/vista
[3.2] わからないです
[3.3] C++
[4] 期限: ([2009年5月6日10:00まで]
[5] その他の制限:elseなどを使わない。(doubleやintなどを駆使してやるように言われました。
少数→小数
>>385 int xx = x;
if (x - xx > 0) {
printf("整数を入力してください\n");
return 0;
}
>>388 そのint xx = x;
if (x - xx > 0) {
printf("整数を入力してください\n");
return 0;
}
のプログラムは
intxx=x;をdouble x;の後ろに作り
if (x - xx > 0) {
printf("整数を入力してください\n");
return (0);
}
をif(100000000<=x){
if(999999999>=x){
printf("桁数は9ケタです\n");
}
}
の後ろに作るということでしょうか?
390>> scanfしている行の次に入れる。ということは #include<stdio.h> int main() { double x; int xx = x; printf("九桁以内の正の数を入力しなさい\n"); scanf("%d",&x); if (x - xx > 0) { printf("整数を入力してください\n"); return 0; } ということですか・・・?エラーが出てしまうのですが・・たびたび質問してすいません。
>>391 xxへはscanfした結果を代入。
この後に、桁数表示する処理を入れる。
エラーになるときは、その表示内容も書いてくれ。
コンパイラ名も。
>>392 こんな感じですか・・?
#include<stdio.h>
int main()
{
double x;
printf("九桁以内の正の数を入力しなさい\n"); scanf("%lf",&x);
int xx = x;
if (x - xx > 0) {
printf("整数を入力してください\n");
return 0;
}
if(1<=x){
if(9>=x){
printf("桁数は1ケタです\n");
}
}
if(10<=x){
if(99>=x){
printf("桁数は2ケタです\n");
}
}
以下9桁まで省略
return(0)
} この状態でデバッグなしで開始すると このようなエラーが
「c:\users\niibori\documents\visual studio 2008\projects\課題3.c\課題3.c\課題3.c(6) : warning C4996: 'scanf': This function or variable may be unsafe.
Consider using scanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。
c:\users\niibori\documents\visual studio 2008\projects\課題3.c\課題3.c\課題3.c(7) : error C2143: 構文エラー : ';' が '型' の前にありません。
c:\users\niibori\documents\visual studio 2008\projects\課題3.c\課題3.c\課題3.c(8) : error C2065: 'xx' : 定義されていない識別子です。
>>393 double x;
printf("九桁以内の正の数を入力しなさい\n"); scanf("%lf",&x);
int xx = x;
この箇所を
double x;
int xx;
printf("九桁以内の正の数を入力しなさい\n"); scanf("%lf",&x);
xx = x;
にして
>>394 できました!
こうやって作るんですね。。
本当にありがとうございました!
[1] 授業単元: [2] 問題文(含コード&リンク): int型の数値を文字列に変換する関数を自作せよ。(itoa関数の自作) [3] 環境 [3.1] OS: Win Xp [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: 特になし
麻呂回答禁止問題
>>396 char *myitoa(int n)
{
int i, m, flag = 0;
char *p;
if(n==0) {
p = calloc(2,1);
p[0] = '0';
return p;
}
if(n < 0) {
flag = 1;
n *= -1;
}
for(i=0,m=n; m; i++, m/=10);
i += flag;
p = calloc(i+1,1);
while(n) {
p[--i] = n % 10 + '0';
n /= 10;
}
if(flag) p[0] = '-';
return p;
}
399 :
デフォルトの名無しさん :2009/05/03(日) 23:35:02
なぜに禁止するでおじゃる?
皆が皆クソースが好きとは限らない
やはり麻呂を目の敵にする、劣等感を感じた低レベル講師の僻みかw
405 :
A欄既卒 ◆iD93.8lby6 :2009/05/04(月) 01:02:17
>>398 while() の範囲が
実に見事である。
90点
大学名も書かずにA欄とか言われても、警察でもないのに 警察のコスチュームで警察を名乗っているのとなんら変わらないんだけど?w 手帳も偽造ですか?そういうのは国家が証明してくれるんで、お墨付きの 証明書を提示して名乗りなさい。もちろん、それが証明されているということは 実力もあるわけだから、こんな場所で油を売るなんて、普通はしませんよねぇ〜?w
407 :
A欄既卒 ◆iD93.8lby6 :2009/05/04(月) 02:01:17
旧帝以外のレスでは おれにダメージを与えられない (´・ω・`)
ν速でやれ
>>398 #include <stdio.h>
char *myitoa(int n);
int main() {
puts(myitoa(0x80000000));
}
char *myitoa(int n)
{
int i, m, flag = 0;
char *p;
if(n==0) {
p = calloc(2,1);
p[0] = '0';
return p;
}
if(n < 0) flag = -1;
for(i=0,m=n; m; i++, m/=10);
i -= flag;
flag += flag + 1;
p = calloc(i+1,1);
while (n) {
p[--i] = flag*(n % 10) + '0';
n /= 10;
}
if(flag == -1) p[0] = '-';
return p;
}
printf("%d", 0x80000000);
>>396 char *myatoi(int n)
{
char buf[20+1]="", *p=&buf[sizeof(buf)/sizeof(buf[0])-1];
int sign=1;
*--p='0'+abs(n%10);
if(n<0) sign=-1,n=-(n/10);
else n/=10;
for(;n!=0;n/=10)
{
*--p='0'+n%10;
}
if(sign==-1) *--p='-';
return strdup(p);
}
413 :
412 :2009/05/04(月) 06:22:08
>>412 の修正
負数に対する除算の丸め方向が違っても大丈夫なように変更
// (-1)/10 の結果は (0 余り -1) もしくは (-1 余り 9) のいずれか
char *myatoi(int n)
{
char buf[20+1]="", *p=&buf[sizeof(buf)/sizeof(buf[0])-1];
int sign=1, m;
if(n<0) sign=-1;
m=(10+sign*(n%10))%10;
*--p='0'+m;
for(n=sign*(n-sign*m)/10;n!=0;n/=10)
{
*--p='0'+n%10;
}
if(sign==-1) *--p='-';
return strdup(p);
}
char*を返すのはやめろ
>>398 みたいなバカが使うとメモリリークするぞ
415 :
デフォルトの名無しさん :2009/05/04(月) 10:58:45
>>413 例えば:-13/10=-1 あまり -3
-9/10=0 あまり -9
あのソースに90点評価をしてしまったA欄(笑) お前はせいぜい学ラン止まりだろw
417 :
デフォルトの名無しさん :2009/05/04(月) 16:12:45
ヽ(`Д´)ノ
>>415 ほとんどのアーキテクチャでは
整数除算の商を 0 方向に丸めるっぽい
商を値の小さい方に丸めるアーキテクチャってのが
どういうところで使われているのか知りたいくらい
質問です。
[1] 授業単元:コンピュータ基礎とプログラミング
[2] 問題文(含コード&リンク):URLもありますが、課題は紙で渡されました。
http://ipl.sfc.keio.ac.jp/text/com-pro-2009-4/main_c3_s1.html#doc1_id900 [3] 環境
[3.1] OS: (Windows/Linux/等々) MAC
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Emacs
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C++
[4] 期限:2009/05/06まで
[5] その他の制限:#include <iostream> から始めないといけないそうです
2のURLは授業でやったことで、宿題はそれをさらに発展させた形で出ました。
その課題の問題文なんですが
「3の倍数と3を含む数」を入力すると「アホ」と出るようなプログラムを作れ というものです。
if文の中にi % 3 == 0 || i % 10 == 3は入れて、3の倍数と1の位が3の時はアホと出るようには既になっているのですが
333334や5300といった、「3の倍数ではないけれども3が含まれる数」全てでアホと出るようにしたいです。
よろしくお願いします。
>>418 対称性から考えたら、被除数と除数の符号がどうであっても
その両者が正であるときの「商と余り」と絶対値が等しいように商と余りを定める方が直感的だが
余りは常に非負とする、という考えもありえなくは無いな
アーキテクチャというか実装レベルでどちらを採用しているかなんかは知らない
こんな感じか char *myatoi(int n, char *p, int d) { static const char symbol[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char buf[40+1]="", *q=&buf[sizeof(buf)/sizeof(buf[0])-1]; int sign=1, m; if(d<2 || d>10+26 || p==NULL) return p; if(n<0) sign=-1; m=(d+sign*(n%d))%d; *--q=symbol[m]; for(n=sign*(n-sign*m)/d;n!=0;n/=d) { *--q=symbol[n%d]; } if(sign==-1) *--q='-'; return strcpy(p, q); }
>>423 if(d<2 || d>10+26 || p==NULL) return p;
↓
if(d<2 || d>10+26 || p==NULL) return NULL;
>>421 有難う御座います。参考にしてなんとか頑張ってみます
麻呂以外回答禁止問題
mallocを使わないソースを麻ー呂に書かせるなんて、何様のつもりでおじゃっ!?
人をなじるのは面白いかい?
指摘をするならともかく、いちいち罵詈雑言を投げかけるのはどうかと思うぞ、 人間として、人格形成に於いても。
お前らいいやつだったんだな
自分が手本を見せていないくせに、他人の粗探しをして 出来ない事、下手な事を指摘するだけで罵倒する様な人は 人格がおかしいんでしょうね。第三者から見ると気持ち悪い。 インターネットが普及して、直接対面せず、相手が直接自分を特定して 反撃してこないのを良いことに、やりたい放題やって来た奴は 最後は警察を挑発して、犯行予告あるいは紛らわしい言葉で アウト、セーフなんて訳の分からない行動に出るが、そんなことを している暇がある自分がこの世の中ではどういう存在か? 理解できなくなっているんでしょうね。
そのゆとり思考どうにかならないの? どんな奴が指定しても駄目な物は駄目だろ 絶対比較って奴だ なんで相対比較で手本見せない奴よりマシとか、訳分らない思考してんのw
>>434 絶対比較って奴なら、ちゃんと駄目な点を指摘してやれよ。
根拠も書かずになじるのもゆとり思考だと思うが?
>>435 だから、なに?その超絶ゆとり思考w
駄目な点を指摘してなくとも、駄目な物は駄目
これが絶対比較
駄目な点を指摘するのが絶対比較?
ゆとりをブッチ切って、自分に都合が良い変換じゃんww
>>437 比較である以上、何かと比べたんだろ?
その比較対象との差異を示さない/示せないお前も絶対比較で駄目じゃん。
>>437 おまえはだめな奴
だめな点を指摘しようがしまいがだめには変わらない
どんなに言葉遊びをしようが駄目な物は駄目 教えてクレクレ君なゆとりは、人にソース見せる前に勉強と経験をつめw
ちゃんと動作するけど、オレが理解できないからダメ 難しすぎて分からないものなんて作るんじゃねーよ 分からなさ過ぎてどこを指摘すればいいのか分からん そういうことだからダメw
いや、ここは宿題を片付けるスレだから
っていうか、itoa作れって言ってんのにatoi作って無駄に罵倒合戦ですかw
関数名間違ってるってことかw
あーあー、言っちゃった 黙ってればゆとり君がどんどんはまって、最後に恥辱のカタストロフィが訪れたのにw
446 :
435 :2009/05/05(火) 02:56:21
>>445 十分訪れたよ。
確かに駄目だわ。俺も含めてな。
>>436 4隅もそれぞれ1234は縛り(ルール)ですか?
448 :
436 :2009/05/05(火) 03:05:09
>>447 4隅ってのは(0,0)(0,3)(3,0)(3,3)のこと?
そこの配置には何の縛りもないはずだけど。
麻呂のクソースが発動するのはリストの問題の時でおじゃっ!
450 :
447 :2009/05/05(火) 03:08:49
いえ、(0,0)(0,1)(1,0)(1,1)です。しかし了解です。
なるほどねw 自分では難解な問題をソースに落せた、他人は難解で分らないだろう、と思い込んで散々偉そうにして、 実は小学生以下の文章読解能力やアルファベット名称の問題が間違ってる、とは思いもしてなかったとw 指摘したら一発だから指摘なんかするかってのw 散々吠えてクレクレして、”俺も含めて”だってwwww
452 :
436 :2009/05/05(火) 03:12:07
>>451 鬼の首を取ったかのように騒ぐあなたも同類です
狙ってた通りの反応で…いや、それ以上の反応だったからw
特に
>>441 は傑作すぐるwww
つーかもう寝ろ
この人は何もかもが楽しいんだろうね 羨ましいわ
そもそも
>>429 で、
>>422 と見比べろって書いてあるじゃんw
比較をよこせって書き込みまでは予測の範囲内だったが
自分のコードが難しくて読めてないんだろ的な書き込みがされた瞬間、ちょー噴いたw
[1] 授業単元:
[2] 問題文(含コード&リンク):
2つの文字列を入力し、アナグラムかどうかを判定するプログラムを作れ
[3] 環境
[3.1] OS: Win Vista
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:木曜まで
[5] その他の制限:
決められた関数を必ず使用すること。
詳細は以下にあります。(英文で申し訳ない)
http://www.filebox100.net/src/fb1002975.pdf
>>458 リンク先が 404 not found だって
int is_anagram(const unsigned char *a, const unsigned char *b)
{
int count_a[256]={0}, count_b[256]={0}, i;
for(i=0;a[i];i++) count_a[a[i]]++;
for(i=0;b[i];i++) count_b[b[i]]++;
for(i=0;i<256;i++) if(count_a[i]!=count_b[i]) return 0;
return 1;
}
460 :
458 :2009/05/05(火) 10:32:37
このスレって意外と勢いあるんだな
#defineを使うよう指示する講師の言うことなんて聞かないほうがいい。程度が知れるから
>>466 >>467 .cだとエラーが出て焦ったのですが、cppだと問題ないんですね
説明不足かと思いましたがやっていただきありがとうございます
bufの定義とlog.spへの代入の文を入れ替えたらcでも動くんじゃね?
>>470 どのように変更したいいのでしょうか?良かったら教えてもらえないでしょうか
>>471 char buff[256];
を1行上に持っていくだけ。
フリーセルの課題を解こうと思ったが難しい 自分がどうやって解いているのかすら分からないw
MSのやつのルールなら52要素(要素はマークと数が保持できればよさそう。)の配列を用意して、 なるべく先頭が低い数字になるようにシャッフル。で、列をランダムにカード配ってけばよさそう。 余裕があったらコンピュータに一回解かせるのもいい。
トラックバック方式で理論上とけるとこまではいったが、
盤面によってははまりパターンからなかなか抜け出せず時間がかかり過ぎる。
幅優先の方がいいかも知れん。
enumとstructの縛りも時間がかかる要員のひとつ。
>>475 初期配置の話? どんな配置でも(証明はされてないけど)解けるんじゃないの?
>>476 ゲーム番号に -1 を入れると
解けない盤面になる
>>476 昔アメリカの学生が研究して、解けない問題が4つ(だったかな?)あることを
示したよ。
480 :
479 :2009/05/06(水) 14:23:00
一点書き忘れたので細くです。 問題17個のうち、8個は自分でやってみました。 なので答えがあっているかみてほしいです。9番からは何が何だか意味不明なのでよろしくおねがいします
481 :
475 :2009/05/06(水) 14:23:16
>>476 そう。初期配置の話。
実は、フリーセルは数えるほどしかやったこと無いから詳しくないんだ。すまない。
あー、やっとわかった。元々からAI作ってるのか。余計なこと言っちゃったな。
int solve() { if(/* すでに解けていたら */) return 1; /* 次に打てる手をリスト化する */ for(/* 全ての手に対して */){ /* その手を実行 */ if(solve()){ return 1; } /* この手では解けなかったので元に戻す */ } /* 手詰まり */ return 0; }
>>476 フリーセルの盤面パターンは1000000通り。
ランダムに並べるともっと多いよね。
F3キーで番号指定できる。
この時、表示は1〜1000000になるんだが、
-1と-2を受け付ける。これは絶対に解けない。
番号と配置パターンが解析できるなら、一番良いんだがね。
>>482 尤もな方法ではあるけど
一度現れた形を除外するようにしないと無限ループする
深さ優先探索で記憶領域的に全部保持できるかどうかは不明
今から力任せ探索でやってみて、ダメなら枝狩りを考えるとしよう
さぁ、どんどんコードを書き込むのじゃ〜パクってやんよ?
487 :
デフォルトの名無しさん :2009/05/06(水) 17:03:56
【質問テンプレ】
[1] 授業単元:プログラミング言語
[2] 問題文:
http://h.pic.to/16ggp3 [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C++)
[4] 期限: ([5月7日13:00まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
お願いします
>>487 問題文になってないぞ。
画像はあくまで例なので、
・合計は表示する必要ない
・平均は表示する必要ない
・総合判定もいらない
・科目名も家庭科とかでも良い
ってこと?
キーボードから得点読み込んで表示すればなんでも良さそうだな
489 :
487 :2009/05/06(水) 17:16:48
1.得点は整数型で定義、キーボードから読み込むこと 2.各科目は150満点 3.各科目について6割以上は合格 合格は1、不合格は2 4.総合判定は3科目以上が合格 5.どんな得点を入力しても桁がそろうようにする 9 5月8日(金)13:00までに 実行例 ---------------------------------------------- "c:\Cf-r4\Document\2008年度\講義 ---------------------------------------------- 国語=150 算数=0 理科=124 社会=89 合計[363],平均[ 90.75] 国語[150],[100.000%],[1] 算数[ 0],[ 0.000%],[0] 理科[124],[ 82.667%],[1] 社会[ 89],[ 59.333%],[0] 総合判定[0] Press any key to continue□ ---------------------------------------------- ※ Press any key to contine
>>489 各科目の最後の1と0は何?
合否は1と2だよね?
492 :
487 :2009/05/06(水) 17:25:19
493 :
デフォルトの名無しさん :2009/05/06(水) 17:26:24
struct seiseki { int sougou; int koku, san, rika, sha; } seito; int s_hantei() { if( seito.sougou >= 3 ) return 1; return 0; } int hantei(int tokuten) { if( tokuten/150.*100 > 75 ) { seito.sougou++; return 1; } return 0; } int main(void) { seito.sougou = 0; cout<<"国語="; cin>>seito.koku; cout<<"算数="; cin>>seito.san; cout<<"理科="; cin>>seito.rika; cout<<"社会="; cin>>seito.sha; int goukei = seito.koku + seito.san + seito.rika + seito.sha; cout<<fixed<<setprecision(2)<<endl; cout<<"合計["<<setw(3)<<goukei<<"],平均["<<setw(6)<<goukei/4.<<"]"<<endl; cout<<fixed<<setprecision(3); cout<<"国語["<<setw(3)<<seito.koku<<"],["<<setw(7)<<seito.koku/150.*100<<"%],["<<hantei(seito.koku)<<"]"<<endl; cout<<"算数["<<setw(3)<<seito.san <<"],["<<setw(7)<<seito.san/150.*100 <<"%],["<<hantei(seito.san)<<"]"<<endl; cout<<"理科["<<setw(3)<<seito.rika<<"],["<<setw(7)<<seito.rika/150.*100<<"%],["<<hantei(seito.rika)<<"]"<<endl; cout<<"社会["<<setw(3)<<seito.sha <<"],["<<setw(7)<<seito.sha/150.*100 <<"%],["<<hantei(seito.sha)<<"]"<<endl; cout<<"総合判定["<<s_hantei()<<"]"<<flush; }
495 :
デフォルトの名無しさん :2009/05/06(水) 19:40:59
【質問テンプレ】 [1] 授業単元:確率統計学 [2] 問題文: 確率変数X、Yに関する実行地データについて、それぞれの平均、分散および 標準偏差の推定値と相関係数の推定値を求めるプログラムを作成せよ。 X=2.049,Y=1.764 X=4.987,Y=8.424 X=5.963,Y=9.989 X=6.378,Y=13.393 X=11.430,Y=18.958 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 5月8日16:00まで [5] その他の制限: よろしくお願いします
スレチだが
C++といえど
>>494 みたいな書き方よりはprintf使った方がいいんじゃないか
なんか統一性が無いのは気のせい?
498 :
デフォルトの名無しさん :2009/05/06(水) 21:42:08
C++ で printf 使うなんてイヤだ。
6割以上が合格なのになんで if( tokuten/150.*100 > 75 ) { なんだ?
#include <iostream> #include <iomanip> using namespace std; struct seiseki { int koku, san, rika, sha, sougou; } seito; int s_hantei(int tanni) { if( tanni >= 3 ) return 1; return 0; } int hantei(int tokuten) { if( tokuten/150.*100 >= 60 ) { seito.sougou++; return 1; } return 0; } int main(void) { seito.sougou = 0; cout<<"国語="; cin>>seito.koku; cout<<"算数="; cin>>seito.san; cout<<"理科="; cin>>seito.rika; cout<<"社会="; cin>>seito.sha; int goukei = seito.koku + seito.san + seito.rika + seito.sha; cout<<fixed<<setprecision(2)<<endl; cout<<"合計["<<setw(3)<<goukei<<"],平均["<<setw(6)<<goukei/4.<<"]"<<endl<<setprecision(3); cout<<"国語["<<setw(3)<<seito.koku<<"],["<<setw(7)<<seito.koku/150.*100<<"%],["<<hantei(seito.koku)<<"]"<<endl; cout<<"算数["<<setw(3)<<seito.san <<"],["<<setw(7)<<seito.san /150.*100<<"%],["<<hantei(seito.san )<<"]"<<endl; cout<<"理科["<<setw(3)<<seito.rika<<"],["<<setw(7)<<seito.rika/150.*100<<"%],["<<hantei(seito.rika)<<"]"<<endl; cout<<"社会["<<setw(3)<<seito.sha <<"],["<<setw(7)<<seito.sha /150.*100<<"%],["<<hantei(seito.sha )<<"]"<<endl; cout<<"総合判定["<<s_hantei(seito.sougou)<<"]"<<endl; }
501 :
デフォルトの名無しさん :2009/05/06(水) 22:34:39
【質問テンプレ】 [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):トランプカードの操作 配られた1枚のカードを手札に加え、手札を更新する関数updateHand()を作成し、カードデッキを初期化してシャッフルし、5枚のカードを配り、その結果を出力する プログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 5月7日 [5] その他の制限: 用法: Card *updateHand(Card *hand,int num,Card deal); 処理内容: ポインタhandが指す配列のnum個の要素とdealを格納する配列を新たに確保し、その配列の先頭アドレスを返す 実装方法: 1.handが指す配列(動的に確保される)の要素数numより1つ大きい要素数をもつCard型配列をcalloc()により確保 2.handが指す配列の内容とdealを新たに確保した配列にコピー 3.handが指す配列の領域をfree()により消去 4.新しい配列へのポインタを返す
シャッフルキター!
麻呂のクソースを待っておれ。待たぬと言うでおじゃるか?
>>501 一枚配るごとにcallocとfreeって正気か?
realloc() を使わないのか?
そういう問題じゃねーw 普通は手札の配列は最初に固定で確保だろ。
手札が動的に伸長するんだよ、きっと。 例えばゲーム中にある条件がそろったらカードデッキを1セット新たに加えて手札にn毎ずつ配るとかさ。
フリーセルの話。 深さ優先と幅優先の2つで組んでみたが、実行すると帰ってこん(簡単に解ける盤面ではテスト済)。 ヒューリスティックな優先順位付けがないと厳しいっぽい。 しかしオレはフリーセルが解けない人なので、ヒューリスティックなぞむりでぷ。
#include <stdio.h> #include <malloc.h> #include <memory.h> struct Card { int a, b; }; struct Card *updateHand(struct Card *hand, int num, struct Card deal) { struct Card *temp; #if 1 temp = calloc(num + 1, sizeof(struct Card)); if(temp == NULL) return NULL; memcpy(temp, hand, num * sizeof(struct Card)); memcpy(&temp[num], &deal, sizeof(struct Card)); free(hand); return temp; #else temp = realloc(hand, (num + 1)*sizeof(struct Card)); if(temp == NULL) return NULL; memcpy(&hand[num], &deal, sizeof(struct Card)); return hand; #endif } int main() { int i, size=5; struct Card *in, *out; struct Card n = {5,6}; in = calloc(size, sizeof(struct Card)); out = updateHand(in, size, n); if(out) for(i=0; i<size+1; i++) printf("%d,%d ", out[i].a, out[i].b); puts(""); }
511 :
デフォルトの名無しさん :2009/05/07(木) 09:39:37
>>509 同じマスを何度も調べてしまうことが原因で無限ループになるんだったら、同じマスを調べないようにすればいいんじゃね?
フリーセルって最大何手で解けるの?いや、最小じゃなく。
>>512 15000 手以上のサンプル
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9136.lzh ほとんどの場合計算時間が長すぎてストップさせてるから
最低でもこの10倍程度はいくと思う
---------------------------------------------------
none none none none // 一枚だけカードを置ける場所4ヶ所
H3 HJ S8 S4 CQ CA D3 // カードの並び 一番右のカードだけを動かせる x 8列
DJ HA D9 H7 S5 S0 H8
S9 SA S6 DK D8 H2 HK
H0 D0 S7 S2 H4 C5 D7
C3 C0 D5 C7 H9 SJ
SQ DQ C2 D6 H6 D4
C4 C6 C9 DA S3 D2
HQ H5 CJ SK CK C8
none none none none // 最終的にカードを積んでいく山 4ヶ所
>>513 は深さ優先探索で一番最初に出てきた解だが無駄な動きが多い
「フリーセルで遊んでいるときに勝手にカードが山に積まれる機能」
と同じ機能を実装すれば手数は大幅減になると思う
515 :
479 :2009/05/07(木) 10:59:24
516 :
485 :2009/05/07(木) 12:14:42
>>515 えーっと、すまんな。俺の12は間違ってる。
パズル的に解いてたからちょっと思い込みがあったかも知れん。
多分以下のようになる。
int A::*p1 = &A::Value;//ValueはAでパブリックに設定されてるint型
細かいことだが、関数ポインタ系は戻り値の設定が無いからvoidにした。
あと、俺は初心者なので、あんまり鵜呑みにはしないでくれ。
517 :
485 :2009/05/07(木) 12:37:32
>>515 一応見てみた。俺が言語仕様を全部把握してるわけではないが一応動いていた。
逆に何でクラスの関数ポインタ呼び出すに変数が必要なのか逆にわからなかった。
やくにたてなくてすまないな。
>>518 OSの機能を使わないとほとんどむりだろ。
これだけのソースではList作るよりもそのベース作るほうが大変じゃないか?
スカラ型の変数の読み書きと、関数compareAndExchangeの実行が
不可分に行われることを仮定して問題を解けということかな。
問題の前提条件が講義中で説明されていたんじゃない?
>>518
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 架空のテストの点数をランダムに生成するプログラムを作成しなさい。 得点は0点〜100点とする。 生徒の数は手で入力orプログラム内で指定(100人程度) 出力した点数の平均点が、事前に指定したものとなるようにする。 例えば、生徒数3 平均点3点の場合 1 2 6 生徒数4 平均点50の場合 32 69 42 57 など 実行毎に毎回違う値を出力すること [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Borland C++ 5.5 [3.3] 言語: C [4] 期限: できるだけ早めでお願いします [5] その他の制限: 難しい方法を使わず、初歩的な方法でお願いします
>>521 問1とやらはコーディング基準を教えてくれないと答えようがないぞ。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int n, ave, sum, score; scanf("%d%d", &n, &ave); srand(time(NULL)); sum = n * ave; while(--n) { if(sum < 100) score = rand() % (sum + 1); else if(sum > n * 100) score = 100 - rand() % ((n+1) * 100 - sum); else score = rand() % 101; printf("%d ", score); sum -= score; } printf("%d\n", sum); return 0; }
525 :
デフォルトの名無しさん :2009/05/07(木) 23:00:42
>>523 ごめんなさい
問1のほうは普通に考えればできました・・・。
問2のほうお願いできますでしょうか?
>>511 無限ループはしてない。(一番最初にはまってデバッグ済みw)
深さ優先の場合、候補手について親に遡って盤面の同一性を判定し、同一なら棄ててる。
前に調べた子と重なるのは、保持してないので看過。
このため手順が前後するだけの同じ盤面を何度も探索してるのが敗因。
>>524 score = 100 - rand() % ((n+1) * 100 - sum);
じゃなくて
score = 100 - rand() % ((n+1) * 100 - sum + 1);
>>526 思いつきですまんが、
「最終的にカードを積んでいく山(homecell)に積み上げる」を優先
「任意のhomecellへの積上げ完了」を1サイクルにする。
「積上げ」のための検索処理をバックトラックで実装する。
だとどうなるかな?
「積上げ」のための処理を、総当たりではない、効率的(高収益を得る方法?)
判定手順で検索するのは困難だろうかね。
>>526 がどの様なロジックで考えているかよくわからないまま書いているから
突っ込みは勘弁w
530 :
518 :2009/05/08(金) 02:11:22
>>519 >>520 すみません。聞いたら「コンペア&エクスチェンジ関数はマシン語とか他のライブラリで実装されるだろうが
そこは想定で」というような感じのことを言っていたのですがそれだと意味通じますでしょうか?
全くわからないので。。よろしくおねがいします
>>522 乱数の合計だけれども平均値は合うという問題
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n=7, n2, ave=21, i, score, sum=0;
int *data;
printf("Enter number of students and average : ");
scanf("%d %d", &n, &ave);
// printf("%d %d\n", n, ave);
srand(time(NULL));
data = calloc(n, sizeof(int));
if(data==NULL) return 1;
for(i=0; i<n; i++) data[i] = ave;
n2 = n * 2 * 50; // 2の倍数回
for(i=0; i<n2; i++) {
score = (float)rand()/RAND_MAX * n;
if(i%2) {
if(data[score] == 100) i++;
else data[score]++;
} else {
if(data[score] == 0) i++;
else data[score]--;
}
}
for(i=0; i<n; i++) {
printf("%d ", data[i]);
sum += data[i]; // 検算用
}
printf("\ntotal=%d, ave=%.0f", sum, (float)sum/n);
free(data);
return 0; }
>>531 間違い
score = (float)rand()/RAND_MAX * n;
じゃなくて
score = (float)rand()/(RAND_MAX+1) * n;
533 :
518 :2009/05/08(金) 03:35:23
すみませんどんなものでも結構ですので朝までに出来ると大変たしかります
先生、ひどいっす。 343 名前: 名無しさん@九周年 Mail: sage 投稿日: 2009/05/08(金) 07:54:27 ID: RsghHNeu0 2chやmixiの「宿題教えて」スレッドに微妙に嘘を混ぜて遊ぶことがある けど、結構気づかずにそのまま使ってるね。答を書いてしまえば誰もわざ わざチェックしないみたいだし。 実は自分が大学で出した課題も教えてスレッドに出ていたので、嘘の答を 書いておいたところ、それをそのまま写してきた学生が数人いた。当然× にしたけどさ。
最悪な教師だな。 でもプログラムなら嘘書いたらわかるだろ?
俺が回答するときはほとんど意図的な嘘は書かないが、バグの出ない保障は無いので、 動作は保障しない。の一言をつけておくことが多い。
また熊本か
問1 (1)1; (2)fib(n-1) + fib(n-2); 問2 (1)n1 = n2; (2)n2 = sum; 問3 (1)(rval >= 0) (2)rval; (3)rval = fib(n-1) + fib(n-2); (4)fib_ary[n] = rval; 問4 (1)list_tのサイズ (2)list_t (3)list_tへのポインタ
>>537 問題5
再帰,もしくはリストを使った,あなただけの独創的なC言語の問題を
作りなさい.また,その解答も作成しなさい.
解答
再帰,もしくはリストを使った,あなただけの独創的なC言語の問題を
作りなさい.また,その解答も作成しなさい.
自分の講義のレベルも考慮できない低脳講師がよく出すありふれた問題じゃんw
>>542 問題文と同じなので独創的ではありません。0点
>>537 の先生、修論とD論のタイトルが同じだ。
まあ、だから何だというわけではないけど。
>>537 階乗じゃなくフィボナッチなのに!を使うって、死んだ方がいいんじゃね?
551 :
515 :2009/05/08(金) 14:56:35
>>550 とりあえず問1だが、if(n == 0 || n == 1)って聞いてるのは、
if (n == 0) return 0;
if (n == 1) return 1;
こう書かずに return n しろっていいたいんだろ
>>550 ソースコードありがとうございます!!
早速使わせていただきました
これで課題もなんとかなりそうです
ほんとありがとうございます!!
↑ 537です
555 :
デフォルトの名無しさん :2009/05/08(金) 16:03:28
麿のクソースが発動できないでおじゃるっ!はよク素数、ヘヴォナッチ、 ファイル検索など、リストの課題を出すでおじゃっ!>学校の講師、教授
557 :
550 :2009/05/08(金) 16:14:16
すぐ上にヘヴォナッツィオの問題が出てんじゃんw
>>535 最悪か?むしろよく分ってる最高の教師だと思うが。
むしろ呼びつけて↓くらいは言ってもいい。
「これ、宿題片付けますスレのを丸写しにしたでしょ?あれ書いたの僕なんだけど。」
「講義でてればすぐわかる内容だし、ひたすら面倒くさいだけな意地悪な課題も出してないよ?」
「義務教育じゃないんだから、ついてこれなかったりやる気が無いんなら、いつでも大学辞めていいんだよ。」
うちの先生はこことmixiの丸投げコミュはチェックしてるよと言ってた。
>>559 「義務教育」の意味を間違えていますねえ。
>>559 うちの大学では何も言わずに、採点対象外になる。
担当教官のスレかとおもた。
誰が書いても同じような答えにしかならないような問題が多いのにな。
親の義務だとか言いたいんだろ
愚かすぎるなそれは。
>>561 日本の義務教育はどこまで?まさかあんた、高校、大学も
義務だと思っていたゆとり?
>>559 なぜプログラミングが出来ないぐらいで大学を辞めなければいけないのかと
十分パワハラだよ
課題の不正は十分退学事由になりえる。
>>569 必修科目かどうかによる
必修科目ができない奴は卒業できてはいけない…はずだろ
>>570 さすがにそれはないwww
実際、期末テストでカンニングしたって、そのセメの
単位全部落とされるだけで退学にはならんしな。
>>495 二変数の相関係数を求めるんじゃなくて
X, Y は確率変数なのか?
確率が1を超えるとか訳分からんし
確率というなら分布も与えられてしかるべき
講義の内容聞いてないので判断のしようがない
と書いたところで期限切れなことに気がついた
>>569 大学に来て勉強しない奴はいらないって言ってるだけだろ。
会社に来て働かない奴はいらないのと同じ。
鼬だが、「大学は(狭義の)勉強するところ」としか考えられないやつは偏ってるよ。 大学教授になるようなやつは大半が偏ってるんだろうけどさ。
>>574 違うぞ。金もらってないし、払ってるし。
windowsのフリーセルのカード初期配置を再現する方法を教えてくだされ ゲーム番号毎に対応したのを出したいのですがさっぱり分かりません
ゲーム番号と初期盤面の作成方法は公開してないようだね。 関係ないけど、#11982は解答不能なんだそうだ。 他にもいくつかあるそうだ。
>>575 その狭義の勉強するために大学に行っているんだよな?
それを除いた広義の勉強は大学じゃないとできないってことはないだろ。
>>576 いい歳して自分で選択した立場でやるべきことが分ってないって点に関して
同じだろ。
>>576 その金は単位に対してではなく講義に対して払ってるんだろ。
その講義を聞いてないで単位を落とすのは自己責任。
逆に言えば、金をもらっている以上、教授はちゃんとやってる学生を区別して評価する義務もあるはず。
学生側にも問題あるとは思うんだが、既に教育ってビジネスなんではないかね。 ちゃんとやってる学生は、教官にとっては実にありがたい存在かも。
>>581 8年で除籍になる部分だけがいけないということだね!
>>581 経営者にとってはビジネスかもしれんが、
教授にとっては雑務で、自分たちの研究が本分だよ。
>>573 書いてある数字が計算対象なら、X(x)のxが書いてないのに
期待値の計算はありえない。実効値の書き間違いは、まあいいとして。
「確立変数X、Y」とか「推定値」とか書かなきゃ簡単な問題なのに。
>>580 自分の講義の単位を認めないのは教官の自由だけど、「大学辞めたら?」ってのは必然性がないよね
鼬害だからもうやめておく
>>585 身につかない講義に金を払うより、大学やめてリアル土方でもしてた方が経済的にも有意義だろって事だろw
大学としては留年して金落としてって貰えるのが一番得なんだから、むしろ親切だろw
大学生じゃないとできん広義の勉強はあるよ。 費やせる時間が社会人とでは全然違うし、こもりニートにはない社会生活もある(重要)。 単位やるorやらないは講座主の恣意なんで勝手。しかし「大学辞めりん」は学生の人生に干渉し過ぎ。 指導教官でもそんなこせーへんし(←「指導教官」ってw、出身大学ばれるし)
(ノ∀`) アチャー
>>587 ん?
つまり費やせる時間が違うだけで同じことができるんだろ?
一体何ができないんだよ?
#include <stdio.h> #include <math.h> int main(void) { int i, n; float (*data)[2], goukei, sa, kyoubunsan; float heikin_x, heikin_y, hensa_x, hensa_y; printf("相関係数を計算します。\n集団の個数nを入力して下さい:"); fscanf(stdin,"%d", &n); data = calloc(n*2, sizeof(float)); if(data == NULL) return 1; else puts("メモリー確保に成功しました"); for(i=0; i<n; i++) { printf("xの%d番目のデータを入力して下さい:", i+1); fscanf(stdin,"%f%*c", &data[i][0]); } for(i=0; i<n; i++) { printf("yの%d番目のデータを入力して下さい:", i+1); fscanf(stdin,"%f%*c", &data[i][1]); } puts("データの入力が終了しました。"); for(i=0, goukei=0; i<n; i++) goukei += data[i][0]; heikin_x = goukei/n; for(i=0, goukei=0; i<n; i++) goukei += data[i][1]; heikin_y = goukei/n; printf("xの平均は %f yの平均は %f\n", heikin_x, heikin_y); for(i=0, goukei=0; i<n; i++) { sa = data[i][0] - heikin_x; goukei += sa * sa; } hensa_x = sqrt(goukei/n); for(i=0, goukei=0; i<n; i++) { sa = data[i][1] - heikin_y; goukei += sa * sa; } hensa_y = sqrt(goukei/n); printf("xの分散は %f yの分散は %f\n", hensa_x*hensa_x, hensa_y*hensa_y); printf("xの標準偏差は %f yの標準偏差は %f\n", hensa_x, hensa_y); for(i=0, goukei=0; i<n; i++) goukei += (data[i][0] - heikin_x) * (data[i][1] - heikin_y); kyoubunsan = goukei/n; printf("xとyの共分散は %f\n", kyoubunsan); printf("xとyの相関係数は %f\n", kyoubunsan/hensa_x/hensa_y); free(data); }
>>590 アウトオブレンジしてないか?気のせいかな。
592 :
デフォルトの名無しさん :2009/05/09(土) 16:32:08
> つまり費やせる時間が違うだけで同じことができるんだろ? 換言すると、どんだけ時間使っても結果は同じと。 ま、そんなヤツには関係なか。
ネット上でくらい標準語を使ってほしい
ん?アウトオブレンジはC++の範囲外書き込みの例外のことだぞ。 セキュリティてきに不味すぎる。
「標準語」(藁藁
>>592 大学生以上に自由時間を持つ立場にだってなれるだろうが。
だから何ができないかはっきりさせろよ。
定職持った社会人でも、フリーターでも家事手伝いでもなく、
大学生でしかできない広義の勉強って何だよ。
>>368 なんとか6065,6778,16576を解けるくらいにはなったんでアップ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9144.txt 深さ優先。n手先の盤面の評価値で次手の優先順位付け。評価値の足切りあり。
足切りがあるので解けるものも解けない可能性があるが、足切りないと1分とか2分じゃ帰ってこないので一緒。
ソース中のFREE制限とは、フリーセルに動かしたあとは、その山がからまない山間移動を禁止。
HOME制限とは、ホームに動かしたあとはその山かホームがからまない移動は禁止。
HOME制限は手数が増えるのでアップしたソースではコメントアウトしてる。
細部調整は自分でよろ。評価関数(evaluate)は調整の余地多分にあり。
質問は今日中に(明日は見ない可能性あり)。
ポインタは使っちゃダメとか、callocはNGとかは勘弁な。
しかし世の中には10秒以内でとくやつもあるんだな。DLしたけど動かなかったんで試してはいないが。
そんな人から見たらオレのアルゴリズムなんて稚拙なんだろうなぁ。
598 :
597 :2009/05/09(土) 18:37:08
こーゆー問題は 解けるか解けないかを自動検出する(つまり途中のブランチのどれをとって もいずれはループするか手詰まりになる)ことのほうが価格が高い。 解ける場合は解放は一通りじゃないだろうから。(暇婆の生き甲斐を 奪う嫌われるタイプ)
解けない場合のことなんてほとんど考える必要もないぐらい例外的なのに、 なに言っちゃってんの?w
601 :
597 :2009/05/09(土) 23:48:54
解ける解けないを自動検出する方向に発展させてけるんで奪ってないんじゃないかねぇ。 解けない盤面になったのを実際に試すより少ないインストラクションで検知できるんなら、刈り込みにも便利だろうし。 ただ368の〆切が明日なんで、オレができるのはここまで。 評価関数をいくつか用意して、stackCountが10000くらいになったらあきらめて次ので掘っていくようにすると、結構早いかも。 1手先で10000くらいなら1〜数秒で到達するだろうし。
課題が出たのですが途中まではおそらくできているのですが 最後までできません。 「生年月日を入力し、干支と星座が出るようにプログラムしろ」 という課題です。 途中までの課題がこれです #include<stdio.h> int main() { int x,y,z; printf("生まれた年を入力してください:\n");scanf("%d",&x); printf("生まれた月を入力してください:\n");scanf("%d",&y); printf("生まれた日を入力してください:\n");scanf("%d",&z); switch(x%12){ case 0: puts("あなたは申年です\n"); break; case 1: puts("あなたは酉年です\n"); break; case 2: puts("あなたは戌年です\n"); break; case 3: puts("あなたは亥年です\n"); break; case 4: puts("あなたは子年です\n"); break; case 5: puts("あなたは丑年です\n"); break; case 6: puts("あなたは寅年です\n"); break; case 7: puts("あなたは卯年です\n"); break; case 8: puts("あなたは辰年です\n");break; case 9: puts("あなたは巳年です\n");break; case 10: puts("あなたは午年です\n");break; case 11: puts("あなたは未年です\n");break; } return(0); } で干支までは出るようにしました。星座を出すにはどうやってプログラムすればいいのでしょうか? 一応プログラムにはif文とswitch文を使うように言われました。
課題が出たのですが途中まではおそらくできているのですが 最後までできません。 「生年月日を入力し、干支と星座が出るようにプログラムしろ」 という課題です。 途中までの課題がこれです #include<stdio.h> int main() { int x,y,z; printf("生まれた年を入力してください:\n");scanf("%d",&x); printf("生まれた月を入力してください:\n");scanf("%d",&y); printf("生まれた日を入力してください:\n");scanf("%d",&z); switch(x%12){ case 0: puts("あなたは申年です\n"); break; case 1: puts("あなたは酉年です\n"); break; case 2: puts("あなたは戌年です\n"); break; case 3: puts("あなたは亥年です\n"); break; case 4: puts("あなたは子年です\n"); break; case 5: puts("あなたは丑年です\n"); break; case 6: puts("あなたは寅年です\n"); break; case 7: puts("あなたは卯年です\n"); break; case 8: puts("あなたは辰年です\n");break; case 9: puts("あなたは巳年です\n");break; case 10: puts("あなたは午年です\n");break; case 11: puts("あなたは未年です\n");break; } return(0); } で干支までは出るようにしました。星座を出すにはどうやってプログラムすればいいのでしょうか? 一応プログラムにはif文とswitch文を使うように言われました。
すいません;; 間違えて2回入力されてしまいました
すみませんついでに
>>1 見てテンプレに直すとなお良かったな。
星座は
switch(y){
case 1:
if(z < (調べて)) printf("○○座);
else printf("△△座");
ってな感じでとりあえず出ると思う。
具体的な数字は自分で調べてくれ。
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): 生年月日を入力し、干支と星座が出るようにプログラムしろ」 [3] 環境 [3.1] OS: (Windows/vista) [3.2] コンパイラ名とバージョン: (gcc 3.4 ) [3.3] 言語:C++ [4] 期限: ([2009年5月15日10:00まで] [5] その他の制限: 今回でswitch文とif文を習いました。 すいません。テンプレを忘れていました;;
いかにも初心者がやりました、ってな感じを出すならこんなのでいいんじゃないかな if(y*100+z< 121)puts("山羊座") else if(y*100+z< 220)puts("水瓶座") else if(y*100+z< 321)puts("魚座") else if(y*100+z< 421)puts("牡羊座") else if(y*100+z< 522)puts("牡牛座") else if(y*100+z< 622)puts("双子座") else if(y*100+z< 723)puts("蟹座") else if(y*100+z< 823)puts("獅子座") else if(y*100+z< 923)puts("乙女座") else if(y*100+z<1024)puts("天秤座") else if(y*100+z<1123)puts("蠍座") else if(y*100+z<1223)puts("射手座") else puts("山羊座");
すまない、各行末にセミコロンを忘れた
>>607 y*100+zの値を変数に保持した方がら良くね?
> いかにも初心者がやりました、ってな感じを出すなら と書いてある以上わざとじゃ…?
>>577 参考URL:
http://www.stack.nl/~dimitri/doxygen/index.html GNU Generalライセンス下にあるようだ。
ちなみにFreecell, generateでぐぐったら出た。英語でもぐぐる癖をつけとくと良い。
#include <stdlib.h>
#include <stdio.h>
int MicrosoftRandom(long* Seed){
*Seed = ((*Seed) * 214013 + 2531011);
return ((*Seed) >> 16) & 0x7fff;
}
void shuffle(char *deck, int seed){
int i, j, pos = 0, temp[52], left = 52;
for(i=0;i<13;i++) for(j=0;j<4;j++) temp[pos++] = i+j*13;
for (i = 0; i < 52; i++){
j = MicrosoftRandom((long*)&seed) % left;
deck[i] = temp[j];
temp[j] = temp[--left];
}
}
main(int argc, char *argv[]){
char deck[52], SUIT_LETTER[] = { 'C', 'D', 'H', 'S' };
int i, seed;
if(argc == 2) seed = atoi(argv[1]);
if(seed == 0) return -1;
shuffle(deck, seed);
for(i = 0; i < 52; ++i) printf("%c%02d%c", SUIT_LETTER[deck[i]/13], deck[i]%13+1, i%8==7 ? '\n' : ' ');
}
>>576 さすがにあんたの感覚を疑うわ。言っていることが支離滅裂。
目的が何なのか、だろ?学校に来て勉強しないって、学ぶ意志があるの?w
会社に来て働かないのは、金を払って社員にしてもらっているわけでもなく、
当然会社側は正当な理由で解雇できるがな。
釣りだと思うが、宿題スレで議論するテーマではないよね?
確かにマジで言ってるならキモイな
[1] 授業単元:コンピュータ演習 [2] 問題文(含コード&リンク): ポテンシャルU(x) U(x)=((50-x(dt))*(50-x(dt))*(50+x(dt))*(50+x(dt))/250000 中の質点の動きを調べよ。 ただし、初期位置はx=50とし、所速度はv=-5に変化させてみよう。 問:時間に対して、位置と速度を作図してみよう。 初期値 u(50)=0 v(0)=-5 x(0)=50 v(dt+1)=-(dt/dx)*( u(x(dt) + dx) - u(x(dt))) + v(dt) x(dt+1)=v(dt) * dt + x(dt) 補足: ポテンシャル中の質点のdt(正確には凾狽ナすが・・・)を1秒刻みで変移させたときの位置と速度を求めるプログラムです。 速度と位置の式はそれぞれ運動方程式のポテンシャル微分の式を差分化したもので、与えられているものです。 作図云々の前にまずプログラムが複雑で、自分の能力ではまったく手に負えませんでした。説明足りてるか微妙ですがお願いします。 [3] 環境 [3.1] OS: (Windows/vista) [3.2] コンパイラ名とバージョン: Borland C++ Compiler [3.3] 言語:C [4] 期限: ([2009年5月11日12:00まで] [5] その他の制限:ポインタはよくわからないから、使わないで頂けるとありがたいです。。。
追記ですが、dx=1で固定です。
dtじゃなくて?
すまん寝ぼけてた
>>612 おおthx
宿題としては期限切れだけどやってみる
623 :
620 :2009/05/10(日) 10:20:24
アルゴリズムの図なんですけど、スキャナーとかなくてうpできません・・・ 時間かかるけど手書きでうpしたほうがいいかのかな・・・?
携帯で撮れない?
625 :
620 :2009/05/10(日) 11:17:26
628 :
620 :2009/05/10(日) 12:58:07
>>620 N口先生にこのスレのリンクをメールしておきました。
630 :
デフォルトの名無しさん :2009/05/10(日) 14:42:48
>>630 d:\my documents\cplus\part125_630\9149.c(26) : warning C4700: 値が割り当てられていないローカルな変数 'ii' に対して参照が行われました。
初期化処理か・・・
633 :
デフォルトの名無しさん :2009/05/10(日) 16:41:02
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 次のf (x) = 0 f ( x ) = x^3 - x - 6 の実根をニュートン・ラフソン法で求めるC言語プログラムを作成せよ。 なお,初期値や収束判定に必要な定数等は #define を使ってプログラム中で設定する。したがって,プログラム中 に入力用関数 scanf 等を含めないこと。 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 5月12日 [5] その他の制限: よろしくお願いします
>>633 #include<stdio.h>
#include<math.h>
#define F(x) ((x)*(x)*(x) - (x) - 6) // f(x)=x^3-x-6
#define F_(x) (3*(x)*(x) - 1) // f'(x)=3x^2-1
#define X0 0
#define EPS (1e-8)
int main() {
double x = X0, dx;
while (1) {
printf("%g\n", x);
dx = F(x) / F_(x);
if (fabs(dx) < EPS)
break;
x -= dx;
}
return 0;
}
お願いします。C言語コンパイラgcc OSソラリス 台形の面積を求めるプログラム キーボードより上底a下底b高さhの値を入力して台形の面積を計算するプログラムを作成せよ。
638 :
デフォルトの名無しさん :2009/05/10(日) 21:06:36
639 :
デフォルトの名無しさん :2009/05/10(日) 21:24:21
>>637 int main(void)
{
int johen, kahen, takasa;
printf("上辺 下辺 高さを入力してください\n")
scanf("%d %d %d", &johen, &kahen, &takasa);
printf("面積は %lf\n", (johen + kahen) * takasa / 2.0);
return 0;
}
642 :
デフォルトの名無しさん :2009/05/10(日) 22:37:47
>>641 さん、
ありがとうございました。とても助かりました。
>>626 さん、ありがとうございます。いただいたソースを元にファイル出力プログラムを作ってみたのですが、やっぱり力が及ばなく・・・
こちらも教えていただけないでしょうか。mainの中身を少しいじったものがこちらです。
int main(int argc, char** argv)
{
FILE *fout;
double x, v, dx;
int t = 0;
(中略)
}
fout =fopen("diskfile", "w");
fprintf(stderr,"end %s.\n", "diskfile");
fprintf(fout, "t\tv\tx\n");
fprintf(fout, "%d\t%g\t%g\n", t, v, x);
for (; t < LOOP; ++t) {
scanf("%lf %lf %lf",&t ,&v ,&x);
fprintf(fout, "%d\t%g\t%g\n", t+1, v, x);
}
fclose(fout);
exit (0);
return 0;
}
>>643 >>626 さんではないけど、
forのブロックの中にscanfがあるけど
要らないように思う。
9148.cがしているように、
dxとvとxの計算を消さないで
そのまま行えば良いんじゃないの?
>>626 >>644 さんではないけど、追加注文。
int main()
{
FILE *fout;
double x, v, dx;
int t = 0;
x = 50;
v = -5;
fout = fopen("diskfile.txt", "w");
if(fout == NULL) {
fprintf(stderr, "end %s.\n", "diskfile.txt");
return 1;
}
printf(" t v x\n");
fprintf(fout, " t v x\n");
printf("%3d %9.4f %9.4f\n", t, v, x);
fprintf(fout, "%3d %9.4f %9.4f\n", t, v, x);
for (; t < LOOP; ++t) {
dx = dX(v);
v += dV(x, dx);
x += dx;
printf("%3d %9.4f %9.4f\n", t+1, v, x);
fprintf(fout, "%3d %9.4f %9.4f\n", t+1, v, x);
}
fclose(fout);
return 0;
}
>>648 #include <stdio.h>
#include <limits.h>
int main()
{
int a;
int max = 0;
int min = INT_MAX;
int count = 0;
int sum = 0;
while(1) {
if (scanf("%d",&a)==0){
printf("不正な文字\n");
return 0;
}
if (a < 0) break;
sum += a;
count++;
if (max < a) max = a;
if (min > a) min = a;
}
printf("最大値:%d\n", max);
printf("最小値:%d\n", min);
printf("入力個数:%d\n", count);
printf("平均値:%d\n", sum/count);
return 0;
}
650 :
デフォルトの名無しさん :2009/05/11(月) 02:54:03
[1] 授業: プログラミング [2] 問題文 車の走行距離〔Km〕とガソリンの消費量〔l〕をキーボードから入力して燃費を計算するプログラムを作成せよ。 [3.3] 言語: C++ [4] 期限: 5月11日 三限 初心者すぎてわかりません、分かる人いたらお願いします ヒントが出てたんですが ・まずCinで走行距離をキーボードから読み取る ・次にCinでガソリンの消費量をキーボードから読み取る ・その二つのデータから燃費を計算する ・最後に走行距離、ガソリンの消費量、燃費を表示する。表示は次のように工夫されたい ・何Km走り方ましたか? ・ガソリンは何l使いましたか? ・この車の燃費はKm/lです。 という感じです
>>658 #include <iostream>
using namespace std;
int main()
{
double dist, gas, expens;
cout << "車の走行距離[km]を入力して下さい: ";
cin >> dist;
cout << "ガソリンの消費量[l]を入力して下さい: ";
cin >> gas;
expens = dist / gas;
cout << "車は " << dist << "[km]走りました。" << endl;
cout << "ガソリンは " << gas << "[l]使いました。" << endl;
cout << "この車の燃費は " << expens << "[km/l]です。" << endl;
}
三限,,, できればGMTでたのむ。
654 :
デフォルトの名無しさん :2009/05/11(月) 04:43:50
[1] 授業:プログラミング [2] 問題文:テキストファイルで10行以上のアルファベットの英文を作り そのテキストファイルに含まれている文字の数をカウントせよ。 ただし、小文字大文字の区別はつけなくてよい。 [3] 環境 [3.1] OS:win [3.2] コンパイラ名とバージョン: Microsoft Visual C++ ver.3.6(で合ってるんですかね [3.3] 言語: C [4] 期限: 5/11 12:00 [5] その他の制限: 1)テキストの読み込みはプログラムないでは行わなず、コマンドプロンプト内で行うこと。 2)文は1行ごとに読み込みその後1文字ずつ処理してください。
>>654 「10行以上のアルファベットの英文」の意味が不明。
意味がある英文なのか、出鱈目なアルファベットの羅列でもいいのか。どっち?
行は単に改行すればいいの?
VCのバージョンは、思い切り違うと思うが、汎用的な解答はあるかも
もしかしたら、テキストファイルはあらかじめ作っておいて、 作成したいプログラムはその処理だけすれば良いのかな?
658 :
デフォルトの名無しさん :2009/05/11(月) 05:34:35
>>657 printf("平均値:%d\n", sum/count);
すまん、これは変だな。
printf("平均値:%g\n", (double)sum/count);
こうしてくれ。
659 :
デフォルトの名無しさん :2009/05/11(月) 05:48:11
>>655 得に指定がなかったためでたらめで大丈夫だと思います。
660 :
>>654 :2009/05/11(月) 05:50:43
>>656 自分に当ててくれたものだったらそういうことになります。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 1 + 1/2 + 1/3 + ... + 1/1000の計算をするプログラム [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 5月11日 なるべく簡単でお願いします
#include <stdio.h> int main(void) { int i; double sum = 0.0; for(i=1; i<=1000; i++) sum += 1.0 / i; printf("%f", sum); return 0; }
どうも。参考になりやす
>>654 ファイルは適当に作ってリダイレクトしてくれ
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int i, cnt[26] = {0};
char buff[256];
while(fgets(buff, 256, stdin)) {
for(i=0; buff[i]; i++) if(isalpha(buff[i])) cnt[tolower(buff[i])-'a']++;
}
for(i=0; i<26; i++) printf("%c:%d\n", 'a'+i, cnt[i]);
return 0;
}
>>662 浮動小数点には「積み残し」という特有な現象があるから
小さい方から順に足していった方が誤差が少ないよ
まあ今回そこまで考慮する必要があるのかどうかわからんけど
667 :
デフォルトの名無しさん :2009/05/11(月) 12:36:36
>>664 遅れましたが無事提出できました。
ありがとうございます。
668 :
620 :2009/05/11(月) 16:00:05
>>634 報告ありがとうございます。復旧させました
あと参考資料の方使わせていただきました!カラフルでとても見やすいです
669 :
デフォルトの名無しさん :2009/05/11(月) 17:24:33
>>651 本当にありがとうございます
助かりました
671 :
670 :2009/05/11(月) 18:55:50
672 :
デフォルトの名無しさん :2009/05/11(月) 18:56:06
質問テンプレ】 [1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): ガウスの消去法で入力された3元連立方程式を解くプログラムを作成せよ。また、掛け算と割り算の回数も 表示すること。さらに途中の行列の式も逐一表示すること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C [4] 期限: 5月13日 よろしくおねがいします。どうやらdoubleの配列、for文を繰り返して作る感じです。
月面の重力は地球の約17%です。 自分の体重を入力すると月での実効体重を 計算し、表示するプログラムを作成してくだ さい。 これ誰か組んでください↑ 勉強してもまったく分りません [1] 授業単元: C言語実習 [2] 問題文(含コード&リンク): 月面の重力は地球の約17%です。 自分の体重を入力すると月での実効体重を 計算し、表示するプログラムを作成してくだ さい。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: ボーランド [4] 期限: 5月12日 [
>>673 #include <stdio.h>
int main()
{
int w;
printf("Earth: ");
scanf("%d", &w);
printf("Moon: %d\n", w * 17 / 100);
return 0;
}
>>673 >勉強してもまったく分りません
いさぎよく単位落としたら?
[1] 授業単元: 実習 [2] 問題文(含コード&リンク): 四角形の面積を計算するプログラムを書い て下さい。この時、辺の値はユーザーに入力して もらうものとします。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: [3.3] 言語: C言語 [4] 期限: 今日迄
>>678 #include <stdio.h>
int main(void) {
int x, y;
printf("辺の縦の長さ: ");
scanf("%d", &x);
printf("辺の横の長さ: ");
scanf("%d", &y);
printf("四角形の面積:%d\n", x*y);
return(0);
}
こんなんでいい?
680 :
デフォルトの名無しさん :2009/05/11(月) 20:19:03
自分の名前、生年月日、年齢、住所を画面に表示するプログラムを作ってみてくれませんか? まだやったばかりでcoutとか文字の出力法くらいしかやってないですが… 名前とか個人情報とかそういうのは全部てきとうで記号とかでいいです
681 :
デフォルトの名無しさん :2009/05/11(月) 20:38:24
682 :
デフォルトの名無しさん :2009/05/11(月) 20:42:29
>>680 ですがすみません
[1] 授業単元: 実習
[2] 問題文(含コード&リンク):自分の名前、生年月日、年齢、住所を画面に表示するプログラムを作り、それぞれの行にコメントを入れよ
まだやったばかりでcoutとか文字の出力法くらいしかやってないですが…
名前とか個人情報とかそういうのは全部てきとうで記号とかでいいです
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C++
[4] 期限: 今日
>>682 coutができるなら答えることは何もないと思うが?
>>676 #define N 5 /* 駅の数 */
int main(void)
{
COSTUNIT cost_list[] = { /* 上限距離と距離単位の金額 */
{20, 5, 100},
{100, 10, 180},
{500, 50, 850},
{0, 100, 1650},
};
double dist_list[N]={0,10,30,50,100}; /*各駅間の距離 */
int fare_table[N][N]; /* 運賃表 */
make_fare_table(N, dist_list, cost_list, fare_table); /* 一覧作成 */
表示するならfor文2つ使って適当に
return 0;
}
ざっと見たので間違ってるかも
685 :
デフォルトの名無しさん :2009/05/11(月) 21:17:40
>>683 coutってどこでどう使えばいいんですか?
void main() { // 名前を出力する cout << "私の名前は○○○○です" <<endl; // 生年月日を出力する cout << "生年月日は19xx年yy月zz日です" <<endl; (以下略) あとは同様。
>>680 >>682 #include<iostream>//iostreamを#include
int main(){std::cout<<"俺の名前,2009年5月11日生まれ,0歳,〒000-0000"<<std::endl;}//自分の名前、生年月日、年齢、住所を画面に表示するプログラム
>>685 下らんことをここで訊くな。別のスレへ行け。
>>684 コンパイルしたときに
make_fare_table(N, dist_list, cost_list, fare_table); /* 一覧作成 */ の部分に
「問題のあるポインタの変換」って警告が出て、エラーで止まりました
>>674 あぁ、なるほど!
論理演算子を用いるのですね。
勉強になりました!有難うございますm(_ _)m
690 :
デフォルトの名無しさん :2009/05/11(月) 22:00:36
>>686 すみませんまだいますでしょうか
#include<iostream>
using namespace std;
int main(){
return 0;
}
は鉄板らしいんですよね。
肝心な中身はその書いてくれたのをこれに入れて通りますかね?
>>690 俺をシカトすんなw
#include<iostream>//iostreamを#include
using namespace std;//std省略
int main(){//main関数の定義
std::cout<<"俺の名前,2009年5月11日生まれ,0歳,〒000-0000"<<std::endl;//自分の名前、生年月日、年齢、住所を画面に表示
return 0;//0を返す
}//main関数の終わり
692 :
デフォルトの名無しさん :2009/05/11(月) 22:14:39
>>691 あ、すみません。
ありがとうございます。でも、コメントの部分iostreamを#include
そうしたなら、#include<include>になっちゃいませんか?もしかしてそのコメントは()内はiostreamとする
っていうのが言いたいんですか?
あと、std省略と書いてあるんですが、stdって文章に残ってますよね
>>670 http://pc12.2ch.net/test/read.cgi/tech/1240022781/714 #include <stdio.h>
#define swap(a,b) tmp=a, a=b, b=tmp
int main()
{
float n1, n2, n3, tmp;
printf("実数Aを入力:"); scanf("%f", &n1);
printf("実数Bを入力:"); scanf("%f", &n2);
printf("実数Cを入力:"); scanf("%f", &n3);
if(n1 < n2) swap(n1, n2);
if(n2 < n3) swap(n2, n3);
if(n1 < n2) swap(n1, n2);
if(n1==n2) {
if(n2==n3)
printf("\n%.1f\n", n3);
else
printf("\n%.1f>%.1f\n", n2, n3);
} else if(n2==n3)
printf("\n%.1f>%.1f\n", n1, n2);
else
printf("\n%.1f>%.1f>%.1f\n", n1, n2, n3);
}
>>688 失礼こんな感じでどうかな
#define N 5 /* 駅の数 */
int main(void)
{
COSTUNIT cost_list[] = { /* 上限距離と距離単位の金額 */
{20, 5, 100},
{100, 10, 180},
{500, 50, 850},
{0, 100, 1650},
};
double dist_list[N]={0,10,30,50,100}; /*各駅間の距離 */
int i;
int* fare_table[N]; /* 運賃表 */
for(i=0;i<N;i++)
fare_table[i] = (int*)malloc(sizeof(int)*N);
make_fare_table(N, dist_list, cost_list, fare_table); /* 一覧作成 */
表示するならfor文2つ使って適当に
for(i=0;i<N;i++)
free(fare_table[i]);
return 0;
}
>>676 #define N 5
int main(void){
COSTUNIT cost_list[] = {
{20, 5, 100},
{100, 10, 180},
{500, 50, 850},
{0, 100, 1650},
};
double dist_list[N - 1] =
{10.1, 21.1, 32.1, 43.1};
int x, y;
int **p = (int **)malloc(N * sizeof(int *));
for (x = 0; x < 11; x++)
*(p + x) = (int*)malloc(N * sizeof(int));
make_fare_table(N,dist_list, cost_list, p);
for (x=0; x<N;x++) {
for (y=0; y<N;y++) {
printf("%4d ", *(*(p+y) +x));
}
printf("\n");
}
return 0;
}
696 :
686 :2009/05/11(月) 22:33:17
なんだ、釣りか。
697 :
デフォルトの名無しさん :2009/05/11(月) 22:36:57
698 :
695 :2009/05/11(月) 22:38:58
解放忘れた。
699 :
691 :2009/05/11(月) 22:45:32
>>692 >でも、コメントの部分iostreamを#include
>そうしたなら、#include<include>になっちゃいませんか?もしかしてそのコメントは()内はiostreamとする
>っていうのが言いたいんですか?
すまんが,何を言っているのか分からん。
#include<iostream> は iostreamを#includeしている。いいだろ?
おまいの理解がおかしくないか?
>あと、std省略と書いてあるんですが、stdって文章に残ってますよね
揚げ足取り乙。
そう思うならstd::を消して提出しろよ。
俺のコードはコンパイル通るし正しいコードだ。
お前の美学にかなうことが宿題ならやるが。
丸投げスレでぐだぐだ言うんじゃねぇよw
だからつりって言われるんだろうに。
701 :
デフォルトの名無しさん :2009/05/11(月) 22:52:01
>>699 揚げ足取りなんかじゃないです。ただstd省略ってどこが省略されてるのかなと思いました
>>694 >>695 malloc使えばよかったんですね
どうもありがとうございました。本当に助かりました。
703 :
デフォルトの名無しさん :2009/05/11(月) 23:07:37
>>691 何とかわかりました
ありがとうございます
>>681 1.
Point::Point(string pname, double px, double py){
name = pname; x = px; y = py;
}
double Point::distance(){
return sqrt(pow(x,2)+pow(y,2));
}
double Point::distance(const Point& p){
return sqrt(pow(p.x-x,2)+pow(p.y-y,2));
}
void Point::print(){
cout << "name=" << name << " x=" << x << " y=" << y << endl;
}
>>681 2.
int main(){
Point* p[10];
int i;
double x,y;
double a = 0;
for (i=0;i<10;i++){
cout << "x y?";
cin >> x >> y;
p[i] = new Point("noname", x, y);
a += p[i]->distance();
}
a /= 10.0;
cout << "原点からの距離平均=" << a << endl;
cout << "平均以上の距離の点" << endl;
for (i=0;i<10;i++)
if ( p[i]->distance() >= a )
p[i]->print();
for(i=0;i<10;i++)
delete p[i];
}
きっと何か見落としてると思うが
math.hインクルードしないとだめかも
それがNGなら二乗のとこはpow使わないでかけ算して
706 :
デフォルトの名無しさん :2009/05/12(火) 00:15:11
>>704-705 さんありがとうございます。
なにも指定されてないのでpowは使って大丈夫だと思います。mathインクルードしてうまく動きました。
ちなみに2番の問題
>>705 のプログラムで
必ず10個のデータ入力ではなくて、最大10個のデータ入力(データ入力が5個だったり7個だったりもする)
という形にするにはどうすればよいのでしょうか?
自分でやってみたんですが実行するとセグメントエラーになってしまって・・・
>>706 こんな感じでxに-1とか入れればokかな…
int main(){
Point* p[10];
int i,count;
double x,y;
double a = 0;
for (i=0;i<10;i++){
cout << "x y?";
cin >> x >> y;
if(x < 0)
break;
p[i] = new Point("noname", x, y);
a += p[i]->distance();
}
count=i;
if(count >= 1){
a /= count;
cout << "原点からの距離平均=" << a << endl;
cout << "平均以上の距離の点" << endl;
for (i=0;i<count;i++)
if ( p[i]->distance() >= a )
p[i]->print();
for(i=0;i<count;i++)
delete p[i];
}else
cout << "データがありません" << endl;
}
//
>>680 //出た!コメント埋め問題
//もしかして、鉄板はテンプレートかフライパンの聞き間違いか?
#include <iostream> // #includeの後は1個空白
using namespace std; // 以下はstd::を省略する
int main() { // ()内は(void)でもよい
string name, birthday, age, address; // 各変数の宣言
// 変数は使う直前に宣言しても良い string name など
name = "○□△"; // 名前を設定
birthday = "2002-01-30"; // 誕生日を設定
age = "9"; // 年齢を設定(年齢なので数値でも可能)
address = "Losangels USA, ZIP 1234"; // 住所を設定
// 設定した名前、誕生日、年齢、住所をここから表示
cout << "名前:" << name << endl // 名前の表示
<< "誕生日:" << birthday << endl // 誕生日の表示
<< "年齢:" << age << endl // 年齢の表示
<< "住所:" << address << endl; // 住所の表示
return 0;
}
709 :
デフォルトの名無しさん :2009/05/12(火) 11:27:43
>>707 遅くなりましたが、うまく動きました。
とても助かりました。ありがとうございました。
712 :
デフォルトの名無しさん :2009/05/12(火) 15:05:31
u,n,x,y,z,dは整数で 1000>u>1,1000>n>=3 x>0,y>0,z>0 d>=0 の条件下で d=u^n-max{x^n+y^n+z^n} このときdが最小となる(x,y,z)の組を求めよ ↓サンプルデータです u n d x y z 2 3 5 1 1 1 6 3 0 3 4 5 7 4 224 4 5 6 98 3 8 2 48 94 76 4 733 17 47 73 54 5 103717 13 47 47 123 3 0 6 51 120 456 3 0 6 51 120 最低このくらいのu,nでのx,y,zの組合せは欲しいのです。
713 :
712 :2009/05/12(火) 15:10:51
[1]学校の課題orz [2] 問題文 [3] 環境 [3.1] linux? (どこまで習 [3.2] なんかGNOMEってやつ [3.3] 言語:c [4] 期限:来週の月曜日 [5] その他の制限:得ニナ氏
1000の1000乗は無理w
715 :
712 :2009/05/12(火) 15:56:40
1000っていうのはとりあえず値です。 いちおう作ったけど、一桁の小さい値ですらもできないので・・・。 うちの学科は情報と電気系なんだけど、情報系にいくきはまったくないんだよね・・。 さっさと単位とっちまいたいのさ。お願いします
それ以前にmax(x^n+y^n+z^n)の意味というか効果が無い
ことで釣りだと判断できない
>>714 のアフォさときたら...
maxに意味がなくただの括弧だと思えばいいだけだろw
718 :
712 :2009/05/12(火) 16:00:58
はじめて書き込んだんだけど、うまくつたわってなかったようだ。 2chのやつらやっぱ冷たいな。自力でがんばるさ。
>>712 #include <stdio.h>
#include <math.h>
int main(void)
{
int u, n, d, x, y, z, i, j, k, temp, un;
printf("u:");
scanf("%d", &u);
printf("n:");
scanf("%d", &n);
d = un = pow(u, n);
for(i=1; i<u; i++) {
for(j=i; j<u; j++) {
for(k=j; k<u; k++) {
temp = un - (pow(i,n)+pow(j,n)+pow(k,n));
if(temp < 0) break;
if(temp < d) x = i, y = j, z = k, d = temp;
}}}
printf("u:%d n:%d d:%d x:%d y:%d z:%d\n", u, n, d, x, y, z);
return 0;
}
数が大きいとエラーになるけど、例程度ならこんなんで十分
ああmaxの意味はu^n以下でもっとも大きい値って事か で初期に与えられるのはuとnだと そう書いてくれないとエスパー以外わかりません…
サンプル見りゃわかるけどな
てっきり max{ x^n, y^n, z^n } の typo で x^n, y^n, z^n 中の最大の値かと思ってた
>最低このくらいのu,nでのx,y,zの組合せは欲しいのです。 がきちんと読めて、サンプルデータを少し計算して見ればエスパー能力なんて必要ない。 相手の書き方を非難する前に、自分の読解力のなさをなんとかすべき。
おまえ細かいな もてないだろw
問題を理解できない頭の悪さを棚にあげて釣り扱いする
>>716 のアフォさときたら……
>>710 に釣られたのかなぁ。反応無いと寂しい。(+o+
728 :
デフォルトの名無しさん :2009/05/12(火) 20:31:44
>>700 672です。どうもありがとうございました。
>>712 double で扱ってるけど有効桁数が15桁程度なので計算途中で誤差が出る
多倍長演算ライブラリを使ったほうがいい
#include<stdio.h>
#include<math.h>
int main(void){
int u, n, x, y, z, min_x, min_y, min_z, i;
double table[1000], d, min_d;
while(scanf("%d%d", &u, &n)==2){
if(u<=1 || 1000<=u) break;
if(n<3 || 1000<=n) break;
for(i=1;i<=u;i++) table[i]=pow(i, n);
min_d=table[u]-3;
min_x=min_y=min_z=1;
for(z=u-1;z>0;z--){
d=table[u]-table[z];
for(y=z;y>0 && table[y]>d;y--);
for(;y>0;y--){
d=table[u]-table[z]-table[y];
if(d>table[y+1]) break;
for(x=y;x>0 && table[x]>d;x--);
d-=table[x];
if(x>0 && d<min_d) min_d=d,min_x=x,min_y=y,min_z=z;
}
}
printf("%d %d %.0f %d %d %d\n", u, n, min_d, min_x, min_y, min_z);
}
return 0;
}
730 :
デフォルトの名無しさん :2009/05/12(火) 23:45:47
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):F0=0、F1=1、F=Fn-1+Fn-2(n>=2)で定義される数列Fnを求めるプログラムを作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2009年5月13日7:00まで [5] その他の制限:再帰的なもの、非再帰的なものの二種類作らないといけないらしいです。 どなたかCに詳しい方お願いしますm(__;)m
またフィボナッチか
再帰的な方法 int fibi (int n, int a, int b) { if (n == 0) return a; else return fibi(n - 1, b, a + b); } int fib (int n) { return fibi(n, 0, 1); } 非再帰的な方法 int fib (int n) { int a = 0, b = 1; for (int i = 0; i < n; i++) { int t = a; a = b; b = t + b; } return a; }
733 :
デフォルトの名無しさん :2009/05/13(水) 00:02:10
だからC99の記法はやめろとどれだけ言ったら…
>>728 あーよく考えたらb[]を0.0で初期化するのを忘れてたわ
修正しといて
昨晩疲れた頭で考えたのでやっぱりバグ残ってるなあ
736 :
デフォルトの名無しさん :2009/05/13(水) 00:04:53
>>732 はやいぃ―!!!
明日早めに家出ないといけなかったんで助かります。
いまからコンパイルしてみます!
ありがとうございました(._.)
フィボナッチ多いらしいのに...ありがとうございますm(__)m
>>733 ベタに書いてみたけどどうじゃろ
int main(void)
{
double a[N][N+1];
int i, j, k;
double t,pv;
if(matrix_in(a) != 0){
printf("Error in matrix_in().\n");
return 1;
}
for(i=0;i<N;i++){
pv=a[i][i];
for(j=0;j<N+1;j++)
a[i][j] /= pv;
for(j=0;j<N;j++){
if(j==i) continue;
t=a[j][i];
for(k=0;k<N+1;k++)
a[j][k] -= t*a[i][k];
}
}
printf("X=%lf Y=%lf Z=%lf", a[0][N], a[1][N], a[2][N]);
return 0;
}
マロクソースでおじゃるか?
740 :
デフォルトの名無しさん :2009/05/13(水) 01:23:11
すいません...もうひとつ問題有りました... [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):F0=0、F1=1、F=Fn-1+Fn-2(n>=2)で定義される数列Fnを求めるプログラム 加算演算'+'の回数をTnとおく。T(0)=T(1)=0、Tn=n−1 加算演算の回数がTnであるような再帰的なプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc 3.4[3.3] 言語:C [4] 期限:2009年5月13日7:00まで なんか加算演算の条件つきらしい問題です... お手数ですがお願いしますm(__;)m
>>740 過去に求めた計算結果を配列にストアして
二度目以降はそちらを使うようにすればうまくいくな
>>740 こんな感じで
>>732 で書いた関数にちょっと足せばできあがり。
nが0,1のときの加算回数は0、2以上の場合はn-1になっているはず。
int fibi (int n, int a, int b) {
if (n == 0)
return a;
else if (n == 1)
return b;
else
return fibi(n - 1, b, a + b);
}
int fib (int n) {
return fibi(n, 0, 1);
}
わかってると思うけど、これはFnを計算する関数だけだから、
適当にmain関数を作っておかないと実行できないからね。
再帰処理で目的と手段を取り違えることは大きな災いの元
744 :
デフォルトの名無しさん :2009/05/13(水) 02:27:54
>>742 ん− main関数がうまくできません(__;)
745 :
デフォルトの名無しさん :2009/05/13(水) 02:34:50
>>742 連続ですいません
mainいじったら上手くいきました!!
ホント夜遅くまで付き合ってくださってありがとうございます(__)
次からは自分でも出来るよう頑張ります。ありがとうございました!
>>732 これは思いつかなかったわw やべっ、なんかわくわくしてきたぞw
病人を見てわくわく
>>732 のどこが面白いの?
SICPとか読んだらすぐ頭のほうに出てくるはずだが。
750 :
732 :2009/05/13(水) 09:05:39
実は自分がとっている講義の配布資料に書いてある方法をパクっただけです。
じゃあ同じO(n)でももっと変態な方法を typedef struct { int a, b; } intx2; intx2 fib2(int n) { if (n == 0) { return (intx2){ 0, 1 }; } else { intx2 s = fib2(n - 1); return (intx2){ s.b, s.a + s.b }; } } int fib(int n) { return fib2(n).a; }
でたなC99厨め。ここでは複合リテラルは禁断の技だ。 しかも構造体をそのまま返値にするとはふとどきな。
C99厨はD厨と同じ位にマイナーで憐れよのう
>>753 添付のデータファイルの形式が間違ってない?
4,5列目が何を示しているのか明記されていない気がする。
>>755 固定長なんではないか?
7 1 9 16 11 2 5
ageとgpaは 2 4
[1] 授業単元: c言語入門 [2] 問題文(含コード&リンク): 次のような数列を計算するプログラム(関数を使うこと) Fn+2 = Fn + Fn+1 ただし,F0 = 0, F1 = 1 とする.入力されたn(n > 0)に対し,F0 からFn まで表示させること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C++ [4] 期限: 5月15日まで よろしくお願いします。
またフィボナッチか
同じ問題が何回でも出てくるな
761 :
760 :2009/05/13(水) 14:28:12
>>753 コマンドの引数で、Students.datのファイル指定をしてくれ。
>>749 面白いというわけではなく、今まで再帰と言えば
return f(n) + f(n-1); といった形式だったもんで
あぁなるほどと思ったわけでw
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 入力された値(int 型)が正の整数ならば1 を,負の整数ならば−1 を,0 ならば0 を表 示するプログラム。ただし関数を使うこと [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC2005 [3.3] 言語: C++ [4] 期限: 今日中 どうかよろしくお願いします。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): Javaで作られたプログラムをC言語に記述しなおすプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Cygwin [3.3] 言語: C [4] 期限:5月14日 [5] その他の制限:基本的なことは履修しました
>>764 #include <stdio.h>
int F(int N){
if(N>0) return 1;
if(N<0) return -1;
return 0;
}
int main(){
int i;
puts("Input Number");
scanf("%d",&i);
printf("result %d -> [%d]\n",i,F(i));
return 0;
>>765 トランスコーダは宿題の範疇ではないと思うんだが、どうだろう。
っていうか、どこの宿題だ?
>>765 1日でそれ作れって言うのか?
Googleのトップでも無理だと思う
[1] 授業単元:情報処理 [2] 問題文: 10個の任意の数字を入力し、最大値、最小値を絶対値で求めるプログラムを作成せよ、また求めた値を標準化せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Cygwin [3.3] 言語: C [4] 期限:5月14日 [5] その他の制限:最大値と最小値を絶対値で求める事はできました。以下のプログラムを改変してください。
>>769 続き
#include <stdio.h>
#include <math.h>
#define N 100
main()
{
int i,n;
float min,max;
float a[N+1];
printf("n=");
scanf("%d",&n);
if (n>N) exit(1);
for (i=1; i<=n; i=i+1)
{
printf("a[%d]=",i);
scanf("%f",&a[i]);
}
max=fabs(a[1]);
min=fabs(a[1]);
for (i=2; i<=n; i=i+1)
{
if(min>a[i]) min=fabs(a[i]);
else if(max<a[i]) max=fabs(a[i]);
}
printf("max %f \n",max);
printf("min %f \n",min);
}
>>769 標準化基準は最大値?平均値?標準偏差?
>>771 標準化基準は最大値だと思います。
例えば以下の出力結果だったら、maxとminを最大値で割ってやればいいと思います。
宜しくお願いします。
/*
n=10
a[1]=-90
a[2]=50
a[3]=-30
a[4]=35
a[5]=78
a[6]=0
a[7]=-27
a[8]=41
a[9]=3
a[10]=12
max 90.000000
min 3.000000
*/
>>769 標準化が分からなかったので a[n]/max にしておいた
#include <stdio.h>
#include <math.h>
#define N 100
#define EPS (1e-10)
int main()
{
int i,n;
float min,max;
float a[N+1];
printf("n=");
scanf("%d",&n);
if (n>N) return 1;
for (i=1; i<=n; i=i+1)
{
printf("a[%d]=",i);
scanf("%f",&a[i]);
}
max=min=fabs(a[1]);
for (i=2; i<=n; i=i+1)
{
float t=fabs(a[i]);
if(min>t) min=t;
else if(max<t) max=t;
}
printf("max %f \n",max);
printf("min %f \n",min);
if(max>EPS){
for(i=1;i<=n;i++) printf("a[%d]=%f %.2f \n", i, a[i], a[i]/max);
}
return 0;
}
>>774 (char)h を %s で参照してるのがおかしい
%s を %c にすればおk
>>774 char hの表示は、
%s ではなく %c に
777 :
776 :2009/05/14(木) 00:15:50
既に回答あったのねw
778 :
712 :2009/05/14(木) 00:34:23
ありがとう!
>>719 と
>>729 !
多分
>>729 のやつつかったら俺じゃないやつが作ったみたいなことになりそうだから
>>719 を参考にしてもうちょいだけ高度化?したやつを作ってためそうかとおもうわ!
ifの中に||とかつけるのみたことないし。多分習ってないわ。 調べたらすぐわかったけど
782 :
780 :2009/05/14(木) 13:09:35
>>781 パターンを認識させるって?
ステートパターンをどう適用すればよいのかわからないのですが、
(1)状態を示す抽象的なステートクラス
(2)ステートクラスを継承するコンクリートクラス→これは回答ノードと質問ノードで使用させるメソッドを定義?
(3)ステートクラスをメンバ変数に持つコンテキストクラス
をどうにかして定義して使用すればよいものかと。
>>780 ごめんね、C++やったことないんだ。
で、学校で習ったことあるなーっていうアルゴリズムっだったから、
聞いてみただけ。
>>782 多分そういうことだろうけどこれをステートパターンにする意味がわからないね
アニマルゲームと言うのの仕様もよくわからん
最後に「それはブタですか?」にNoと答えたら次の質問ノードはその「ブタですか?」のNoにリンクされるの?
785 :
780 :2009/05/14(木) 18:42:05
>>784 確かに僕もステートパターンの意義は低いように思いました。
ただオブジェクト指向の勉強をしたところなので単にポリモーフィズムを理解させるために出題したものかと思われます。
最後に「豚ですか」にNoと答えるとNoにリンクされます。アニマルゲームの仕様は上記リンクの通りですが
実行するとわかります。曖昧なところは特にないと思ってます
>>780 ではないけれど
始め「その動物はブタですか?」の質問にNoと答えると、答えに黒ブタが登録されて。
次からNoと答えると「その動物は黒ブタですか?」が出てくるんだ。
それでその質問にNoと答えると、答えに茶ブタが登録されて。
次からNoと答えると「その動物は茶ブタですか?」が出てくるんだ。
787 :
デフォルトの名無しさん :2009/05/14(木) 19:21:17
>>786 違うと思うぞ
> 縞模様がありますか?
Y
> その動物はシマウマですか?
N
> 正しい答えを教えてください。
トラ
> その動物を特定する質問を入力してください。
白黒の縞模様ですか?
> 質問への答えを入力してください。
N
とすると、「縞模様がありますか?」のYesリンクに新しい「白黒の縞模様ですか?」ノードがリンクされ
そのNoリンクに新しい「その動物はトラですか?」ノードが、Yesリンクに既存の「その動物はシマウマですか?」ノードがリンクされる。
788 :
787 :2009/05/14(木) 19:36:56
787はサンプルの流れな。 んでStateパターンにするってことは > 「縞模様がありますか?」のYesリンクに新しい「白黒の縞模様ですか?」ノードがリンクされ > そのNoリンクに新しい「その動物はトラですか?」ノードが、Yesリンクに既存の「その動物はシマウマですか?」ノードがリンクされる。 が 既存の「その動物はシマウマですか?」ノード(回答)が「白黒の縞模様ですか?」ノード(質問)に状態遷移、 「その動物はシマウマですか?」ノード(回答)と「その動物はトラですか?」ノード(回答)を新しく作成し、 上の遷移したノードのYesリンクとNoリンクにそれぞれ紐付ける となるんだと思う。コードは今から書きま。
789 :
787 :2009/05/14(木) 20:59:37
790 :
780 :2009/05/14(木) 21:16:13
>>787 はや。。もう二日かけてるのですが。。(汗)
有難うございます。こちらも並行して必死でやってるのですがまだまだ動かない上に
もらったコードに比べるとめちゃソース量多くて複雑。。なんでこうなるんだろう。
これから中身解読します 有難うございました
791 :
787 :2009/05/14(木) 21:18:26
mainにある > string input; はゴミです。削除してくらはい。
792 :
780 :2009/05/14(木) 21:23:39
了解いたしやした。
>>773 >>779 ありがとう御座います。
おかげで課題を提出することができました。
今度は提出したプログラムで以下の出力結果をmaxは、そのままでminを-50と出力するようなプログラムを、どなたか作ってくれませんか?
プログラムは、
>>773 を改変してください。
n=10
a[1]=1
a[2]=2
a[3]=10
a[4]=50
a[5]=-50
a[6]=-100
a[7]=-25
a[8]=-10
a[9]=0
a[10]=40
max 100
min 0
-100じゃないんだ
>>793 絶対値を符号逆転に変更すればいいのかな?
max=min=fabs(a[1]);
↓
max=min=-a[1];
float t=fabs(a[i]);
↓
float t=-a[i];
1.31ビットのM系列乱数を返す関数MRand()を作成しなさい(タップは任意)。 2.該当関数を使った下記の出力結果を提出しなさい。 int main(void) { int i,x,y; int Count[5][5]; memset(Count,0,sizeof(int)*5*5); for (i=0;i<100000;i++) { Count[MRand()][MRand()]++; } for (y=0;y<5;y++) { for (x=0;x<5;x++) { printf("%6d",Count[y][x]); } printf("\n"); return 0; } 3.なぜそのような表示結果となったのか考察しなさい。
>>796 今家に環境がないので、明日学校で試してみようと思います。
明日教官にもう少し詳しく聞いてみます。
わざわざ、すいません。
799 :
797 :2009/05/14(木) 22:20:03
2の真ん中あたり Count[MRand()][MRand()]++; を写し間違えました。 正しくは Count[MRand()%5][MRand()%5]++; です。
>>797 写し間違えはそれだけ?
}が1個足りないようにも見えるけど。
801 :
797 :2009/05/14(木) 22:32:00
>>800 最後あたりこれでした。
} printf("\n");}
802 :
デフォルトの名無しさん :2009/05/15(金) 13:47:18
[1] 授業単元: 情報処理 [2] 問題文:次のガウスの消去法プログラムにピボット交換のプログラムを書き込め。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:cc [3.3] 言語:C [4] 期限: 本日17:30まで [5] その他の制限: math.hは使える。以下がガウス消去法プログラム #include<stdio.h> main() { double a[3][4]; double r; int n,i,j,m; n=3; for(i=0;i<n;++i) /*係数の読み込み*/ for(j=0;j<n+1;++j) scanf("%lf",&a[i][j]); showmtx(a,n); /*下三角を0にする*/ for(m=0;m<=n-2;++m) { for(i=m+1;i<=n-1;++i) { r=a[i][m]/a[m][m]; for(j=m;j<=n;++j) a[i][j]-=r*a[m][j]; } }
803 :
デフォルトの名無しさん :2009/05/15(金) 13:50:18
上の続きです。showmtx(a,n); for(j=n-1;j>=0;--j) { a[j][n]/=a[j][j]; a[j][j]=1; for(i=0;i<j;++i) { a[i][n]-=a[i][j]*a[j][n]; a[i][j]=0; } } showmtx(a,n); } showmtx(a,n) double a[3][4]; int n; { int i,j; for(i=0;i<n;++i) { for(j=0;j<=n;++j) printf("%6.3f",a[i][j]); printf("\n"); } printf("\n"); }
C的には純正
>>806 ありがと
勝手に書き換えさせてもらうわ
またK山先生のところか。
811 :
デフォルトの名無しさん :2009/05/15(金) 15:33:54
>>810 802です。書き換えありがとうございました。
なんとかなりそうです。
>>805 時間過ぎたかな
問題1
(1) element->next = sp;
(2) sp = element;
問題2
(1) tmp = sp;
(2) sp = tmp->next;
問題3
(2) (double)(t->a.x + t->b.x + t->c.x)/3.0;
(3) (double)(t->a.y + t->b.y + t->c.y)/3.0;
問題4
(1) return 1;
(2) return (fact(cdr(head)) * car(head));
5は勘弁
813 :
812 :2009/05/15(金) 15:44:10
問題3で回答漏れ (1)はprint_g(&t);
1〜4ができない人に5をやれと言うのが一番酷な気がするw
>>805 >>812 問題5
再帰とは、私が
検索エンジンを使って調べ、そのまま他人の文をコピペして作成しようとした文章の中に
意味の分からない単語が存在したとき、その単語の意味を検索エンジンを使って調べ、
そのまま他人の文をコピペすることを、意味の分からない単語が無くなるまで繰り返し、
文章を作成することです。
再起とは螺旋階段である。 同じようなことを繰り返しているようだが、螺旋階段を歩くことで高低差を踏破するという仕事を完遂できるのである。 とか、今ひねり出した。
再帰問題は、夢の中で当たった宝くじを現実世界に持ち帰る方法の考察から始まった。
先の見えない世の中でも 一歩ずつしっかり歩けば きっと目的地に辿り着く 大喜利やってんじゃねぇぞw
GNUやPNGみたいに 再帰とは 「さ」いきは 「い」○○○ 「き」○○○ の略である。 とかで良いんじゃね
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): はじめに人数を入力させる。次に人数分、交通費を入力、すると交通費を分配するためにはお金の種別ごと(一万円、五千円、千円、五百円、百円、五十円、十円、五円、一円)に何枚用意する必要があるか、表示してくれるプログラムを作成せよ [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語C++ [4] 期限: ([2009年5月21日15:00まで] [5] その他の制限: 今日の授業でdo-while文 while文 for文を習いました こんな感じなのかな・・と思ってやってみたのですが・・ #include<stdio.h> int main(){ int x,y,z,kosu,i; printf("人数を入力してください\n"); scanf("%d",&kosu); i=1; while(i<=kosu){ printf("1人目の交通費は\n");scanf("%d",&x); i=i+1; } printf("10000円 %d\n",x/10000); printf("5000円 %d\n",(x%10000)/5000); printf("1000円 %d\n",(x%5000)/1000); printf("500円 %d\n",(x%1000)/500); printf("100円 %d\n",(x%500)/100); printf("50円 %d\n",(x%100)/50); printf("10円 %d\n",(x%50)/10); printf("5円 %d\n",(x%10)/5); printf("1円 %d\n",(x%5)/1); return(0); }
環境書き忘れてました。 vistaです
注意事項を書き忘れていました ・人数として負の数を入力された場合は「正しい人数を入力してください」と表示し 終了する ・枚数が0枚のときは硬貨の種類は表示されない
>>823 すいません。配列はまだ習っていません;;
>>820 #include<stdio.h>
int main(void){
int x,kosu=-1,i;
int num10000=0,num5000=0,num1000=0,num500=0,num100=0,num50=0,num10=0,num5=0,num1=0;
printf("人数を入力してください\n");scanf("%d",&kosu);
if(kosu<0){ printf("正しい人数を入力してください\n");return 1; }
for(i=0;i<kosu;i++){
x=-1; printf("%d人目の交通費は\n",i+1);scanf("%d",&x);
if(x<0){ printf("正しい金額を入力してください\n");return 1; }
num10000+=x/10000;x%=10000;
num5000+=x/5000;x%=5000;
num1000+=x/1000;x%=1000;
num500+=x/500;x%=500;
num100+=x/100;x%=100;
num50+=x/50;x%=50;
num10+=x/10;x%=10;
num5+=x/5;x%=5;
num1+=x;
}
if(num10000) printf("10000円 %d\n",num10000);
if(num5000) printf("5000円 %d\n",num5000);
if(num1000) printf("1000円 %d\n",num1000);
if(num500) printf("500円 %d\n",num500);
if(num100) printf("100円 %d\n",num100);
if(num50) printf("50円 %d\n",num50);
if(num10) printf("10円 %d\n",num10);
if(num5) printf("5円 %d\n",num5);
if(num1) printf("1円 %d\n",num1);
return 0;
}
>>823 すいません。。配列習ってました。
配列を使ってもいいそうです。。
>>820 #include <stdio.h>
int main()
{
int i, x, y, kosu;
printf("人数を入力してください\n");
scanf("%d",&kosu);
if (kosu < 0) {
printf("正しい人数を入力してください\n");
return 0;
}
i=1;
while(i<=kosu){
printf("1人目の交通費は\n");scanf("%d",&x);
y = x / 10000; x -= y * 10000; if (y > 0) printf("10000円%d\n",y);
y = x / 5000; x -= y * 5000; if (y > 0) printf("5000円 %d\n", y);
y = x / 1000; x -= y * 1000; if (y > 0) printf("1000円 %d\n",y);
y = x / 500; x -= y * 500; if (y > 0) printf("500円 %d\n",y);
y = x / 100; x -= y * 100; if (y > 0) printf("100円 %d\n",y);
y = x / 50; x -= y * 50; if (y > 0) printf("50円 %d\n",y);
y = x / 10; x -= y * 10; if (y > 0) printf("10円 %d\n", y);
y = x / 5; x -= y * 5; if (y > 0) printf("5円 %d\n",y);
if (x > 0) printf("1円 %d\n",x);
i=i+1;
}
return 0;
}
>>820 #include<stdio.h>
int main(void){
int x,kosu=-1,i, j;
int face_values[]={10000,5000,1000,500,100,50,10,5,1,0};
int amount[sizeof(face_values)/sizeof(face_values[0])]={0};
printf("人数を入力してください\n");
scanf("%d",&kosu);
if(kosu<0){
printf("正しい人数を入力してください\n");
return 1;
}
for(i=0;i<kosu;i++){
x=-1;
printf("%d人目の交通費は\n",i+1);
scanf("%d",&x);
if(x<0){
printf("正しい金額を入力してください\n");
return 1;
}
for(j=0;face_values[j]>0;j++){
amount[j]+=x/face_values[j];
x%=face_values[j];
}
}
for(j=0;face_values[j]>0;j++){
if(amount[j]) printf("%d円 %d\n", face_values[j], amount[j]);
}
return 0;
}
830 :
828 :2009/05/15(金) 20:12:44
× printf("1人目の交通費は\n");scanf("%d",&x); ○ printf("%d人目の交通費は\n",i); scanf("%d",&x); 間違えてる
>>825 numが習っていないので・・・でも作っていただきありがとうございます。
>>828 デバッグなしでしたらエラーしてしまいました。。
>>829 face valuesとかいう単語をまだ授業中で使っていないので・・・
作っていただきありがとうございます。
[1] 授業単元: 実習 [2] 問題文(含コード&リンク): 血液型を聞いて、出力するプログラム [3] 環境 ボーランド コンパイラ 5.5 [3.1] OS: (Windows/Linux/等々) XP [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語:C [4] 期限: 明後日
833 :
828 :2009/05/15(金) 20:19:51
>>831 エラーになった箇所のifの前に全角スペースがある。取り除いてくれ
>>832 #include<stdio.h>
int main(void)
{
char buf[100+1]="unknown";
printf("血液型を入力してください\n");
scanf("%100s", buf);
printf("\n血液型は %s です\n", buf);
return 0;
}
>>828 できたのですが
これを金額を一人一人別々に表示するのではなくまとめて表示できるようにするには
どうしたらよいのでしょうか?
>>835 そうするには10000万円の枚数、5000円の枚数、...を
それぞれ別の変数に覚えておかなければならない。
だから
>>825
numを使わないことはできますか? 今日の授業で↓をうまく組み合わせればできると言われたので・・ int c; printf("10000円 %d\n",x/10000); printf("5000円 %d\n",(x%10000)/5000); printf("1000円 %d\n",(x%5000)/1000); printf("500円 %d\n",(x%1000)/500); printf("100円 %d\n",(x%500)/100); printf("50円 %d\n",(x%100)/50); printf("10円 %d\n",(x%50)/10); printf("5円 %d\n",(x%10)/5); printf("1円 %d\n",(x%5)/1); と int sum=0,x,i,kosu; scanf(%d,&kosu); i=1 while(i<=kosu){ scanf("%d",&x); sum=sum+x; i=i+1 }
#include <stdio.h> #include <stdlib.h> int main() { printf("血液型なに?\n"); srand(getchar()); printf("そうなんや。ちなみに俺は%s型。", &"A\0\0B\0\0O\0\0AB\0"[rand()%4*3]); return 0; } 聞いて、出力。あほですんません。
int c; scanf("%d",&c) printf("10000円 %d\n",c/10000); printf("5000円 %d\n",(c%10000)/5000); printf("1000円 %d\n",(c%5000)/1000); printf("500円 %d\n",(c%1000)/500); printf("100円 %d\n",(c%500)/100); printf("50円 %d\n",(c%100)/50); printf("10円 %d\n",(c%50)/10); printf("5円 %d\n",(c%10)/5); printf("1円 %d\n",cx%5)/1); x→c scanf入れ忘れ
>>832 これに数日掛けられる課題ってどこ行けば受けられるんだよ…
>>837 こんな風で良いのか?
#include <stdio.h>
void print(int y[9])
{
if (y[0] > 0) printf("10000円 %d\n", y[0]); if (y[1] > 0) printf("5000円 %d\n", y[1]);
if (y[2] > 0) printf("1000円 %d\n", y[2]); if (y[3] > 0) printf("500円 %d\n", y[3]);
if (y[4] > 0) printf("100円 %d\n", y[4]); if (y[5] > 0) printf("50円 %d\n", y[5]);
if (y[6] > 0) printf("10円 %d\n", y[6]); if (y[7] > 0) printf("5円 %d\n", y[7]); if (y[8] > 0) printf("1円 %d\n", y[8]);
}
int main()
{
int i, j, x, kosu, y[9], kouka[9]; // 紙幣硬貨毎の枚数・累計枚数
for (j = 0; j < 9; j++) kouka[j] = 0;
printf("人数を入力してください\n"); scanf("%d",&kosu);
if (kosu < 0) {printf("正しい人数を入力してください\n"); return 0;}
i=1;
while(i<=kosu){
printf("%d人目の交通費は\n", i); scanf("%d",&x);
y[0] = x / 10000; x -= y[0] * 10000; y[1] = x / 5000; x -= y[1] * 5000;
y[2] = x / 1000; x -= y[2] * 1000; y[3] = x / 500; x -= y[3] * 500;
y[4] = x / 100; x -= y[4] * 100; y[5] = x / 50; x -= y[5] * 50;
y[6] = x / 10; x -= y[6] * 10; y[7] = x / 5; x -= y[7] * 5; y[8] = x;
print(y); // 個別を表示(これは必要無かったのか?)
for (j = 0; j < 9; j++) kouka[j] += y[j];// 紙幣硬貨ごとの枚数を集計
i++;
}
printf("累計\n"); print(kouka); //紙幣硬貨ごとの集計結果を表示
return 0;
}
/*
>>832 >>834 >>838 血液型を聞いて、出力するプログラム */
#include <stdio.h>
#include <string.h> /* for Borland */
int main() {
char buf[10];
while(1) {
printf("あなたの血液型を A/B/O/AB で入力して下さい:");
if(fgets(buf, 10, stdin) == 0) break; /* at Ctrl/D */
buf[strlen(buf)-1] = '\0';
if( strcmp(buf, "A") == 0 || strcmp(buf, "B") == 0 ||
strcmp(buf, "O") == 0 || strcmp(buf, "AB") == 0 ) {
printf("あなたの血液型は %s ですね?\n", buf);
}
}
return 0; /* for Borland */
}
お前ら宿題が少ない日は一つの課題に対してたくさんソースを書くのなw
>>841 今やっとわかりました!ありがとうございました。
>>797 作ってみた
#define MRAND_BITS 7
#define MRAND_BITS_Q (MRAND_BITS-3)
unsigned long MRand(void){
static char bits[MRAND_BITS];
static int is_first=1, index;
unsigned long ret=0;
int i;
if(is_first){
for(i=0;i<MRAND_BITS;i++) bits[i]=(rand()
>>8 )&1;
is_first=0;
}
for(i=0;i<31;i++){
ret=(ret<<1)|(bits[(index+i)%MRAND_BITS]^=bits[(index+i+MRAND_BITS_Q)%MRAND_BITS]);
}
index=(index+31)%MRAND_BITS;
return ret;
}
#include <stdio.h> #include <float.h> void main() { double e1, e2; //εを代入する変数 //e1は一つ前, e2は計算用の現在のε unsigned int n;//forのカウント用 e1 = DBL_MIN; //εの初期値の代入 for(n=1; n<4294967295; n++) { /*ここにe2(現在のε)の更新処理を入れる*/ //ε=DBL_MIN * 10n乗 if(1.0 != (1.0+e2)){ /*ここにεとnの出力処理を代入*/ } /*ここにe1(一つ前のε)の更新処理を入れる*/ } プログラミング言語の授業で初めての演習なんですが全く分からないのでお願いします コメントに沿ってプログラムを作るらしいのですが手も足もでなくて… 結果がでた理由も添えてもらえると有り難いです
>>846 テンプレは?
責めてコンパイラの種類だけでも。
それが不明ならコンパイルした後のエラーメッセージを。
締め切りも、書いてあると有り難い。
コンパイラわよくわからないんですがvisual C++2008てのを使ってます 締め切りは来週の木曜日までですができるだけ速い方が有り難いです
#include <stdio.h> #include <float.h> void main() { double e1, e2; unsigned int n; e1 = DBL_MIN; for(n=1; n<4294967295; n++) { e2 = e1 * 10; if(1.0 != (1.0+e2)) { printf("%.20f %d\n", e2, n); break; } e1 = e2; } }
>>846 入門書なり入門サイトなりを最初の数ページ読めば分かることなのに、何故それをしないの?
>>846 処理可能な最小数をさらに小さくする計算にどんな意味があるんだ?
演習の意図がよく分からんな。
>>846 >>1 にある質問テンプレを使って依頼を書き直して。
課題内容もそのまま書いてみれ。
題名 精度の調査 有限精度の数値計算では1+εが1に等しいような正のεが存在する.そのようなεの中で最大のものを見いだせ ただし ε=DBL_MIN*10n乗とする DBL_MINはヘッダファイル<float.h>で定義されている しようする変数の型はdoubleとし、printfの出力の書式は%eとする 条件を満たす時のnも出力する て問題です OSは vista コンパイラはビジュアルスタジオ2008 言語C++
855 :
ぽるむ :2009/05/16(土) 13:50:21
[1] プログラミング応用 [2] 在庫管理システムを作れ 条件:@商品がいくつあるかを[商品名と個数をメーカーごと]にエクセルに保存できる A日別・月別の在庫一覧を見れる B入庫・出庫は商品一覧から選択し処理をする Cコンパイラ等の使用したソフトを記載すること Dexeファイルで提出すること [3] 環境 [3.1] OS:WinXP SP3 [3.2] コンパイラは自由 [3.3] C [4] 期限:無期限 [5] 制限なし よろしくお願いします!
[1]C言語演習 [2]生徒ID(8桁整数),国語得点(4桁整数)、 数学得点(4桁整数)、理科得点(4桁整数)、社会得点(4桁整数)、英語得点(4桁整数) が書かれたタブ区切りファイルを標準入力から読み込み、次の32個の タブ区切りファイル(yyyymmddhhmmss.xxx.txt)を作るプログラム x=0の場合、入力行を生徒ID昇順にそのまま出力する それ以外の場合x=y(0)+y(1)2+y(2)2^2+y(3)2^3+y(4)2^4 (y(0),y(1),y(2),y(3),y(4)は0か1) とすると 量z=国語得点y(0)+数学得点y(1)+理科得点y(2)+社会得点y(3)+英語得点y(4)が定まる。 生徒ID z zに関する降順順位(同一順位繰り下げ方式) を各行とするタブ区切りファイルとすること。 (同一順位繰り下げ方式:1位が3名居る場合はすべて3位) yyyymmddhhmmssは処理開始をした時刻とする。(共通) [3] linux/gcc 制限:入力タブ区切りファイルの行数サイズは無制限とするので、メモリに展開して記憶しては ならない。無効行(すべての項目が揃っていないetcなどフォーマットエラーチェック)チェックは 今回は省略して良いが入れる余地を残すようにコーディングすること。 同じ生徒IDの行があった場合は異常終了すること(同時に作成したすべてのファイルを削除) 処理速度は問わない。処理中同時に開けるファイル数は5個以下とする。 プログラムコード上限500行以内(コメント含む) [4]月曜日まで
>>853 #include <stdio.h>
#include <float.h>
int main()
{
double e1 = DBL_MIN, e2;
int n = 0;
while (1) {
printf("%3d:%.15e\n", n, e1);
if (1.0 < 1.0 + e1)
break;
e2 = e1; e1 *= 10; n++;
}
printf("DBL_MIN=%.15e\n", DBL_MIN);
printf("n=%d\n", n);
printf("%.15e %s\n", e2, ((1.0 < 1.0 + e2)? "not same": "same"));
printf("%.15e %s\n", e1, ((1.0 < 1.0 + e1)? "not same": "same"));
return 0;
}
>>849 e1とn-1
/*ここにεとnの出力処理を代入*/
printf("%.20f %d\n", e2, n);
859 :
デフォルトの名無しさん :2009/05/16(土) 15:46:29
[1] 授業単元:プログラミング実習1 [2] 問題文(含コード&リンク): 長さ32の0と1の列を入力して、このビット列の表わす実数値を出力するプログラムを作成せよ。 実数表現の仕方はIEEE規格754に従うものとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:明日 [5] その他の制限: 特にない
【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 1) フィボナッチ数列 X(n) = X(n-1) + X(n-2), X(1) = X(2) =1 の n = 1 から 100までの値を 一覧表にせよ. (2) 次の (a), (b) いずれかの極限値を求めよ. (a) 1 + 1/1! + 1/2! + 1/3! + ...... + 1/n! + ..... (b) sin(x)/x (x → 0) [3] 環境 [3.1] OS:Linux [3.2]gcc 恐らく最新 [3.3] 言語: C [4] 期限:月曜日の夕方五時まで [5] その他の制限: ループのところのレポートなのでなんらかの形でループを使うのだと思います。 配列は使わないとありがたいです。条件分岐は習ってます (2)はどちらでも構わないです、(1)だけとかでも十分ありがたいです よろしくお願いします
862 :
858 :2009/05/16(土) 16:09:40
ありがと、間違ってなければ、良くなるだろう。woman
>>859 #include <stdio.h>
main(){
int i, n = 0;
char c;
for(i = 0; i < 32; ++i){
scanf("%c", &c);
(n <<= 1) |= c == '1' ? 1 : 0;
}
printf("%g", *(float*)&n);
}
intとfloatが32bitで、gccのfloatがIEEE754準拠の前提。違ったらメンゴ。
左辺値で計算できたっけ?gcc
どれでもできねえよ
左辺値で計算? 言ってる意味がよくわからんが863ならテスト済みだぞ?
= や op= は左辺値を返すからね。
>>863 はちゃんと動く。
C++でコンパイルしてんじゃね?
(複合)代入演算子の結果はCだと左辺値にならない(C++ならなるが)。 gccは独自拡張で可能なだけ。-std=c89や他のC89処理系だとエラーになる。
870 :
デフォルトの名無しさん :2009/05/16(土) 17:13:45
なるほど。じゃあ適当に揉みしだいてくれ。
873 :
797 :2009/05/16(土) 17:27:53
いまさらですが質問ルールに沿っていなかったようなので
-- 797の補足です --
[1] 授業単元: C言語応用
[2] 問題文(含コード&リンク):
>>797 参照
[3] 環境
[3.1] OS: Windows XP
[3.2] gcc 3.4.5
[3.3] 言語:C
[4] 期限 5/22(金)
>>845 ありがとうございます。
>>797 の2のメイン関数につけて実行したところ下記になりました。
3937 2362 2361 4724 4724
0 4726 4723 3151 5512
6297 788 2363 1576 2363
2363 3937 2363 8660 6298
5514 6298 1575 5511 7874
Count[y=1][x=0]のところの値が0になっています。
おそらくこれの考察が
>>797 の3 の意味だと思います。
猿でも分かる解説、もしくはリンク等どなたかご教授願いませんか?
>>859 #include <stdio.h>
#include <memory.h>
main(){
int i, n = 0;
char c;
float a = 2.5;
memcpy((void*)&n, (void*)&a, 4);
for(i = 0; i < 32; ++i){
printf("%d", (n>>(31-i)) & 1);
}
puts("");
n = 0;
for(i = 0; i < 32; ++i){
scanf("%c", &c);
n |= (c == '1' ? 1 : 0) << (31-i);
// (n <<= 1) |= c == '1' ? 1 : 0;
/* n <<= 1,
* n |= (c == '1') ? 1 : 0;
*/ }
printf("%g", *(float*)&n);
puts("");
for(i = 0; i < 32; ++i){
printf("%d", (n>>(31-i)) & 1);
}
}
もうフィボナッチはテンプレに入れるべき
>>873 このくらいに変更してみて
#define MRAND_BITS 79
#define MRAND_BITS_Q (MRAND_BITS-31)
>>875 どの辺でエラー?
一応vc2005とgccで確認したが。
>>875 申し訳ない、作り直したらできました、ありがとうございます
>>879 1.
#include <stdio.h>
int main(void)
{
int i, num, n;
printf("1桁の整数を入力:");
scanf("%d", &num);
for (i = 1; i <= 99; i++)
if(i%num==0||i/10==num||i%10==num)
printf(" %d", i);
return (0);
}
>>879 2.
#include <stdio.h>
int mypow(int a, int b)
{
int i,r;
for(i=1,r=a;i<b;i++)
r *= a;
return r;
}
int main(void)
{
int i,j,a,b;
printf("a?");
scanf("%d", &a);
printf("b?");
scanf("%d", &b);
for (i = 1; i <= b; i++){
for(j=1;j<=a;j++)
printf(" %d",mypow(j,i));
printf("\n");
}
return (0);
}
ところで
>>859 ってあれでいいの?
IEEE754を自力で解きほぐさなくて?
884 :
797 :2009/05/16(土) 19:56:46
885 :
879 :2009/05/16(土) 23:04:47
>>882 回答有難うございます。
>>881 は問題ないのですが、
>>882 は習っていないものがあるのでもう少し簡単に出来ませんでしょうか?
基本的にint main(void)は#includeの下に来ますし、2行目のint(int a, int b)という方法も習っていないので。
>>885 #include <stdio.h>
int main(void)
{
int i, j, k, a, b;
printf("a?"); scanf("%d", &a);
printf("b?"); scanf("%d", &b);
for (i = 1; i <= b; i++) {
for (j = 1; j <= a; j++) {
int w = j; for (k = 1; k < i; k++) w *= j; printf("%d ", w);
}
printf("\n");
}
return 0;
}
>>886 有難うございます。
これなら問題なさそうです!
助かりました。
888 :
デフォルトの名無しさん :2009/05/17(日) 00:15:24
>>888 ってログインしなきゃ見れないんじゃね?httpsだし。
見れる場所にあげるか問題を転記しれ。
>>860 (1) フィボナッチ(桁が大きくなると誤差が出てくる)
#include <stdio.h>
int main() {
double i1, i2, i3;
int j;
i1 = 1.;
i2 = 1.;
printf(" 1:%21.0lf\n 2:%21.0lf\n", i1, i2);
for(j=2; j<100; j++) {
i3 = i1 + i2;
printf("%3d:%21.0lf\n", j+1, i3);
i1 = i2;
i2 = i3;
}
}
>>860 (2) (a) 極限値 =e
#include <stdio.h>
double factorial(int i) {
if(i == 1) return 1.0;
return i * factorial(i-1);
}
int main() {
double a=1.0, a1, fa;
int i=1;
do {
fa = factorial(i);
a += 1/fa;
printf("%.20f %.0f\n", a, fa);
if(a == a1) break;
a1 = a;
} while(i++);
}
>>860 (2) (b) 極限値 =1.0
#include <stdio.h>
#include <math.h>
int main() {
int i=1;
double x = 3.14, a=0.0, a1=0.0;
do {
a = sin(x)/x;
printf("%.20f %.20f\n", a, x);
if(a1 == a) break;
a1 = a;
x /= 2.0;
} while (i++);
}
サンク
>>860 (2) (a) 極限値 =e
#include <stdio.h>
int main() {
int i=1;
double a=1.0, a1, fa=1.0;
do {
fa *= i;
a += 1/fa;
printf("%.20f %.0f\n", a, fa);
if(a == a1) break;
a1 = a;
} while(i++);
}
>>856 仕様を詳細に書き直してみた。
入力ファイル (','はタブを表す)
11111111,2222,3333,4444,5555,6666
1:生徒ID
2:国語点数
3:数学点数
4:理科点数
5:社会点数
6:英語点数
出力ファイル (','はタブを表す)(99999は合計点数)(8888は降順順位 10-9-9-7-6-6-4)
yyyymmddhhmmss.000.txt
11111111,2222,3333,4444,5555,6666 (生徒IDでソート)
yyyymmddhhmmss.001.txt 国語だけの点数
11111111,2222,8888 (国語点数でソート)
yyyymmddhhmmss.002.txt 数学だけの点数
11111111,3333,8888 (数学点数でソート)
yyyymmddhhmmss.003.txt 国語+数学の点数
11111111,99999,8888 (国語+数学点数でソート)
yyyymmddhhmmss.004.txt 理科だけの点数
11111111,4444,8888 (理科点数でソート)
省略
yyyymmddhhmmss.031.txt 国語+数学+理科+社会+英語の点数
11111111,99999,8888 (国語+数学+理科+社会+英語点数でソート)
899 :
デフォルトの名無しさん :2009/05/17(日) 14:36:22
900 :
892 :2009/05/17(日) 14:52:13
>>899 void twos_complement(int *a, int *b)
{
int i;
for(i=7; i>=0; i--) if(b[i]=a[i]) break;
while(i--) b[i] = 1 ^ a[i];
}
void print_bin(char *s, int *p)
{
int i;
printf("%s", s);
for(i=0; i<8; i++) printf("%d", p[i]);
printf("%\n");
}
>>901 0いれてみてくだ再
#define N 8
void twos_complement(int *a, int *b) {
int i;
for(i=0; i<N; i++)
b[i] = !a[i];
for(i=N-1; i>=0; i--) {
if(b[i] == 0) {
b[i] = 1;
break;
}
b[i] = 0;
}
}
void print_bin(char *s, int *a) {
int i;
printf("%s", s);
for(i=0; i<N; i++)
printf("%d", a[i]);
puts("");
}
文脈から見てfseek禁止だろ
[1] 授業単元: [2]問題:アルファベット、数字、空白からなる文字列を渡したとき、小文字を大文字にする関数 void to_upper(char s[]); を作成しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 9日火曜日、午後1時 [5] その他の制限: さっぱりわかりません。どなたかよろしくお願いします。
#include <stdio.h> #include <ctype.h> void to_upper(char s[]) { char *p = s; do{ if(islower(*p)) *p = toupper(*p); } while(*p++ != '\0'); return; } int main() { char s[256]; scanf("%s", s); to_upper(s); puts(s); return 0; }
907 :
903 :2009/05/17(日) 18:45:01
>>904 宿題なので、要求仕様はライブラリー関数で処理可能と考えた。
仮に1000万人以上のレコード処理を要求する宿題なら、
それなりの設問をするのでは?
>>907 同意
データを標準入力から受け取り、メモリ上に展開してはならない以上
一時ファイルを作成しない限り解けない問題だと思う
ついでに整数8桁のIDに対して処理可能ということは
2GB/100M=20B
一時ファイル内の一つのレコードの大きさを 20Byte 以下に納めないと
fseek やらファイルシステムやらの制約を受け始めるという厄介な問題
>>904 ファイルに対するランダムアクセスは不可能という前提でやれということ?
みたいだな。そう読める?どんなへんてこな仕様なんだw
911 :
デフォルトの名無しさん :2009/05/17(日) 21:41:41
>>911 dir指定を許す?
複数ファイル指定もあり?
914 :
デフォルトの名無しさん :2009/05/17(日) 22:14:20
915 :
デフォルトの名無しさん :2009/05/17(日) 23:11:27
[1] 授業単元: 実習 [2] 問題文(含コード&リンク): 長さが32の0と1の列、 s e7 e6 … e1 e0 d1 d2 … d23 を入力して、このビット列の表す実数値(実数表現の仕方はIEEE規格754に従うものと仮定する) --------------------------------------------- (-1)^s * (1+M) * 2^E if -127 < E < 128 (-1)^s * M * 2^(E + 1) if E = -127 Inf(無限大) if E = 128, M = 0 NaN(非数) if E = 128, M ≠ 0 ここで、M = Σ(i = 1→23)di * 2^(-i), E = Σ(i = 0→7) ei * 2^i - 127 --------------------------------------------- を出力するCプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日;; [5] その他の制限: 2^E = 2^Σ(i = 0→7)ei * 2^i - 127 = 2^((e7 - 1) * 2^7 + Σ(i = 0→6)ei * 2^i + 1) = ((…(((1/2^(1 - e7))^2 * 2^e6)^2 * 2^e5)^2 …)^2 * 2^e1)^2 * 2^e0 * 2 となることは与えられているのですが、for文を使ってこの式をどう表すのかわかりません…。 お願いします。
859にあるじゃん
IDA Proでディスアセンブルしてちょこちょこいじったあとに それを実行形式にできますか? わしは素人じゃけん。
919 :
デフォルトの名無しさん :2009/05/17(日) 23:51:37
920 :
>>915 :2009/05/17(日) 23:57:12
float a = 2.5とは、何を宣言しているのですか? 本当にプログラミングが苦手で…;
921 :
>>915 :2009/05/18(月) 00:16:35
それと出力した際に、 01000000001000000000000000000000 と表示されるのですが、これは何ですか・・?
922 :
892 :2009/05/18(月) 00:19:00
>>892 どなたか出来ませんでしょうか?
やはり無理でしょうか…
>>915 ちょっとこれ説明してみて。J
2^E = 2^Σ(i = 0→7)ei * 2^i - 127
= 2^((e7 - 1) * 2^7 + Σ(i = 0→6)ei * 2^i + 1)
= ((…(((1/2^(1 - e7))^2 * 2^e6)^2 * 2^e5)^2 …)^2 * 2^e1)^2 * 2^e0 * 2
>>922 SA(焼きなまし)法というのを色々調べてみました。
シミュレーションを行い、最適解を求める手法のようですが、
この問題文からはそのイメージが湧いてきません。
(辺の長さから正方形を敷き詰めるような組み合わせ問題なら
想定はできます)。
提示されていない何らかの制約事項、初期条件や評価関数が
あるのではないですか?
勘違いしているかも知れません。その時はご容赦
925 :
892 :2009/05/18(月) 01:05:09
>>924 任意の矩形が、任意の数だけ与えられた時に、その矩形を正方形に敷き詰めるようにして
且つ、その正方形は小さければ小さいほど良いという、組み合わせ最適化の問題です。
関数は自身が用意した矩形サンプルで作るのですが、評価は教授が容易した矩形サンプルが使われます。
よって特定の矩形群だけに効くアルゴリズムではなく汎用的なもが求められます。
これ以外に知りたい事がありますでしょうか?
926 :
デフォルトの名無しさん :2009/05/18(月) 01:06:38
927 :
892 :2009/05/18(月) 01:13:04
もしかすると、正方形に敷き詰めると言う部分が分り辛いのでしょうか 正方形の形にピッタリと敷き詰めると言う意味ではなく 敷き詰めた全矩形を内包する形が正方形で、更に小さければ小さい程良いと言う事です。
>>925 矩形の縦横の寸法と個数が予め与えられる問題だと、
わざわざシミュレーションするまでもなく解が求まりませんか?
何か勘違いしてるかな?
>>924 いい加減な方法でよければ
1.最初に矩形を横一列に並べる
2.1.の長辺を一辺とする正方形を用意する
3.正方形の外周の右端または下端に接する矩形を正方形内の任意の位置(右端、下端を除く)に移動させてみる
4.正方形を小さくできるなら小さくする
5.3〜4繰り返し
移動に乱数を使うとか、できる限り左上に置くとか方法はありそうです
直感的にこの方法だと中身がスカスカになりますが、題意は満たします
930 :
856 :2009/05/18(月) 01:19:41
>>903 実はサンプルデータのほうが用意されておりそれと比較しましたが、若干動作が違ったようです。
yyyymmddhhmmss.xxx.txt (xxx!=0)の場合、生徒IDの行順序は変えてはいけないみたいです。
生徒ID 得点の和 順位
33243 3435 19
34359 4298 12
34385 1957 39
12689 3848 14
.....
こんな感じで出なければいけなかったようでした。
あと、C言語演習という講座名でしたがC++と余り区別しない講座らしく、
C++で書いたほうが良かったみたいです。
今日中に頂いたコードを修正して何とかしてみます。ありがとうございました。
>>904 >>908-910 バイナリファイルを使っちゃいけないとは問題文に書いていないので多分大丈夫だと
思ってますが、もしダメというのであれば今回はあきらめます。
>>928 出来るかは知らんが、教授の意図としては焼きなまし法を使うことに意味があるのでは。
プログラムの講義ではないみたいだし。
いきなり複雑なものをやらすのは厳しいだろうし、単純でもよく例に挙げられるのでは
それをコピーされてしまう。
932 :
デフォルトの名無しさん :2009/05/18(月) 01:20:55
>>930 それなら問題が簡単になる
バイナリファイルに保存しながらバケットソートをする
バケットソートの結果を見ながらバイナリファイルを読み出し順位を決定
バケットソートに必要な領域は
long backet[32][50000] ≒ 6.4MB
でも xxx==0 があるから、結局は面倒な方法を取らないといけないのか
935 :
892 :2009/05/18(月) 01:33:58
>>928 レポートがプログラムになったのは、人間が考えるのでは無く
SA法によってアルゴリズムで解く為です。
矩形の形と個数が分ると、プログラムだとSA法などを使わなくとも、最適配置が解けるのでしょうか?
>>929 それだとSA法ではなく、総当り法と同じ様なアルゴリズムです。
しかも局所解に陥りやすく、多分再提出になると思います…
>>931 人間の頭で考えて良いなら、SA法の勉強にならないとの事です。
プログラム等のアルゴリズムで、オートで解くのが主眼だそうです。
授業もろくに理解してなく提示出来る手助けが少なくて申し訳無いのですが、宜しくお願いします。
>>928 そりゃ最適解は一意に求まるが、最適性の判定はNP困難。
だからSA法のような近似アルゴリズムを用いる。
授業をろくに理解していないのなら理解する努力をするかいさぎよく単位を落とせばいいのに。
938 :
928 :2009/05/18(月) 01:46:37
勘違いしてた。矩形は1枚毎に違っているのか。 すまない。
940 :
892 :2009/05/18(月) 01:48:16
プログラムの授業と平行していて、私はプログラムが苦手なのですが 今回のSA法の授業は、プログラムの難しい授業と同じ感じでチンプンカンプンでして… 確かにC++のレポートですが、 内容がプログラム言語仕様を使うレベル以上だと欲張りなお願いなんでしょうか? …困ってます…
>>939 さすがにお早い。ありがとうございます!
>>940 書いてはみるが、正直めんどい
なんで前日まで放置してたんだよ…
C/C++言語だけをとっても、*自在に*使えるようになるだけでも、相当に専門的。 更に言えば離散最適化問題とかは数学を相当学んで自在に使える水準の人でなきゃ無理。 要するに完全に学部学生向けじゃない講義だということ。
いや、この程度ならB3ぐらいでできてくれないと困る。
945 :
892 :2009/05/18(月) 02:00:02
>>942 マジですか?是非、よろしくお願いします。
他のレポートや用事と重なって、今超しんどくて藁にもすがる思いでココを頼りました。
2ちゃんって使わないのですが…良い方が居て感動してます。
月曜の日付の間に提出フォルダに入れれば良いので、
恐らく夜中の24時でも平気かな、と思っています。
>>944 住む星を間違えたようだなw
M87星雲にでも池
ここは地球だ
パッキング問題とは。 このスレにとっては難しすぎじゃないのかw
結構前に出てた最小費用流問題?も分からなかったし
お手上げですわ
>>929 の手順ならできるけど局所探索になるんだよね
全体最適化ってどうするんだ?
>>925 ぽいプログラムでいいなら、
1.ランダムで1個の矩形を配置。
2.ランダムで1つの矩形を選択して、その矩形に接するように配置
3.以下、できあがった多角形に対して常にどこかに接するように配置
4.全て配置した後全体の正方形の1辺の長さを測定して、現在のものよりも小さければ
現在のものを捨てて新しい配置を採用。
5.以下何度も時間が許す限り繰り返す。
かな?
充分大きな正方形内に、ランダムに配置するとよりそれっぽいけど、
最初からランダム配置の範囲が決まってると正方形が縮まないし。
>>949 なお、あらかじめ与えられた矩形がソートできるならもっと精度が上がる。
2の配置で接する位置をランダムに決めるとき、その時点でもっとも矩形が
小さくなる位置を探すのがSAっぽくていいんじゃないかな。
>>930 更新したやつを9197,txtに置いておいた。
>>949 ランダム配置→微動(適当回数)→最小正方形保存
ランダム配置→微動(適当回数)→最小正方形比較
:
:
を適当回数
って事じゃないのかな?
>>952 SAの枠組みはその通りだけど、その「微動」の部分をどうするかが
性能に直結するよね。949は、ある矩形を、すでにおかれているものに
接する位置に配置するというルールを設けた上で、その位置をランダムに
選択することで、所定時間内に最も小さくなった正方形を選択するように
なってる。もっといいヒューリスティックはもちろんあるだろうけれど、
どんなものを想定しているのか是非聞いてみたい。
954 :
856 :2009/05/18(月) 09:32:37
>>953 952じゃないけどSequence pairとか.
矩形の配置を,矩形のIDの列と対応づけられるから微動はうまく表現できる.
956 :
デフォルトの名無しさん :2009/05/18(月) 14:15:04
>>956 PDFは今やめとけ
GENOウィルスの亜種が増殖中だから皆警戒してるぞ
958 :
デフォルトの名無しさん :2009/05/18(月) 16:24:54
>>956 そうなんですか。わかりました。
pdfを形式変えてアップするにはどういった手段をとればいいですか?
959 :
デフォルトの名無しさん :2009/05/18(月) 16:46:51
>>956 追記ですが、自分がアップしたpdfファイルは大学の掲示板から落としたものなので大丈夫だと思います。
pdfファイルをword文書やメモ帳に貼り付けてみたりいろいろ試行錯誤してみたのですがうまくいきませんでした。
期限が迫っているので信用して課題を見ていただけると嬉しく思います。
>>859 教授名や大学名(調べればすぐ判る)を曝しているんだけども。
大学の掲示板とは言っても部外からは見えないんだろ?
公開するのに承認とかは要らないのか?
いまさらw
最近は教員やTAもここ見てるからなあ。
>>957 ちゃんとアップデートしとけば被害でないぞ。
お前PDFを駆逐したいM$の手先かなんかか?
[1] 授業単元: プログラミング言語1 [2] 問題文(含コード&リンク): int型の配列に値を読み込み、読み込んだ順番と逆順に出力するプログラムを作りなさい。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual C++ 2008 [3.3] 言語:C [4] 期限: 今週火曜18:00まで [5] その他の制限:配列の大きさは5でおねがいします。
>964 関数作ってもいいの?
>>964 #include<stdio.h>
int main()
{
int i, a[5];
for(i=0;i<5;i++) scanf("%d", a+i);
for(i=4;i>=0;i--) printf("%d\n", a[i]);
}
>>952 その1行分でSA法としては充分じゃない?
>>956 PDFがどうとかよりも、ボタンでダウンロードってのが躊躇するなぁ。
おつれか
973 :
デフォルトの名無しさん :2009/05/18(月) 23:25:13
975 :
デフォルトの名無しさん :2009/05/19(火) 00:51:52
事情がありまして、以下のような課題を至急仕上げなければなりません。 知恵袋の使い方と合致していないとは思いますが、どうかご協力お願いします。 Q、C言語を使用したH8マイコンのLED制御に関する。 (1)SOSのモースル信号を発しなさい。 (2)加速を含めたイルミネーションを発しなさい。 例 ♯include<3048.h> main() { p1.ddr=0xff; p1.dr.byte=0xff } お恥ずかしい質問ですが、よろしくお願いします。 補足 ffを2進数に11111111、でLED全8個がひかります。 longなどをつかってお願いします。 (1)高額基礎実験 (3)WIN (4)あと四時間
976 :
デフォルトの名無しさん :2009/05/19(火) 01:37:08
授業単元ソフトウェア製作実習。 osソラリス コンパイラ gcc 台形の面積を求めるプログラム キーボードより上底a下底b高さhの値を入力して台形の面積を計算するプログラムを作成せよ。 表示形式 上底a=6 下底b=15 高さh=3 面積=31.5 小数点以下一桁まで よろしくお願いします。
977 :
デフォルトの名無しさん :2009/05/19(火) 03:01:18
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): 正の整数nを入力し、1 から100 までの間にあるnの倍数をすべて表示す ると共に、それらnの倍数の和を表示するプログラムを作成せよ。 例えば25を入力したら,その倍数である25, 50, 75, 100とそれらの和で ある250が表示されることになる。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2009年5月22日0:00まで [5] その他の制限: ほぼ完全な素人です。do/whileの中に何を打てばいいかわかりません、よろしくお願いします。
>>976 #include <stdio.h>
int main(void)
{
double a, b, h;
printf("上底a=");
scanf("%lf", &a);
printf("下底b=");
scanf("%lf", &b);
printf("高さh=");
scanf("%lf", &h);
printf("面積=%.1f", (a+b)*h/2);
return 0;
}
>>977 #include <iostream>
int main()
{
int n, sum = 0;
std::cin >> n;
for(int i = n; i<=100; i+=n) std::cout << i << ' ', sum += i;
std::cout << std::endl << sum;
}
980 :
デフォルトの名無しさん :2009/05/19(火) 06:29:36
981 :
973 :2009/05/19(火) 07:37:05
>>974 お疲れ様です!
最後の問題の後半部がkeyの宣言がなされていなかったため
少しエラーが出ましたが、その他は問題無かったです。
本当にありがとうございました!
982 :
ぽるむ :2009/05/19(火) 10:33:55
なんのためのECMA-376なのかと
>>982 @はcsv出力とかでいいのか?
A〜Bはプログラム自身で行う?
D? ソースが要らないのか。
>>915 最終の4行目違ってないか?
2^E =
2^((Σ(i = 0→7)ei * 2^i) - 127) =
2^((e7 - 1) * 2^7 + Σ(i = 0→6)ei * 2^i + 1) =
((…(((1/2^(1 - e7))^2 * 2^e6)^2 * 2^e5)^2 …)^2 * 2^e1)^2 * 2^e0 * 2
解答
2^E =
2^(e7*2^7 + e6*2^6 + e5*2^5 + e4*2^4 + e3*2^3 + e2*2^2 + e1*2^1 + e0*2^0 - 127) =
2^((e7-1)*128 + e6*64 + e5*32 + e4*16 + e3*8 + e2*4 + e1*2 + e0 + 1) =
2^((((((((e7-1)*2 + e6)*2 + e5)*2 + e4)*2 + e3)*2 + e2)*2 + e1)*2 + e0 + 1) =
(((((((2^(e7-1))^2 * 2^e6)^2 * 2^e5)^2 * 2^e4)^2 * 2^e3)^2 * 2^e2)^2 * 2^e1)^2 * 2^e0 * 2
(((((((2^(e7 + (-1)))^2 * 2^e6)^2 * 2^e5)^2 * 2^e4)^2 * 2^e3)^2 * 2^e2)^2 * 2^e1)^2 * 2^e0 * 2
(((((((2^e7 * 2^(-1))^2 * 2^e6)^2 * 2^e5)^2 * 2^e4)^2 * 2^e3)^2 * 2^e2)^2 * 2^e1)^2 * 2^e0 * 2
(((((((2^e7 * 1/2)^2 * 2^e6)^2 * 2^e5)^2 * 2^e4)^2 * 2^e3)^2 * 2^e2)^2 * 2^e1)^2 * 2^e0 * 2
> となることは与えられているのですが、for文を使ってこの式をどう表すのかわかりません…。お願いします。 2^E = 2^Σ(i = 0→7)ei * 2^i - 127 = 2^((e7 - 1) * 2^7 + Σ(i = 0→6)ei * 2^i + 1) #include <stdio.h> #include <math.h> int main() { int e[][8] = { 0, 0, 0, 0, 0, 0, 0, 0, /* 2^-127 */ 0, 0, 0, 0, 0, 0, 0, 1, /* 2^-126 */ 0, 0, 0, 0, 0, 0, 1, 0, /* 2^-125 */ 0, 1, 1, 1, 1, 1, 1, 0, /* 2^-2 */ 0, 1, 1, 1, 1, 1, 1, 1, /* 2^-1 */ 1, 0, 0, 0, 0, 0, 0, 0, /* 2^0 */ 1, 0, 0, 0, 0, 0, 0, 1, /* 2^1 */ 1, 1, 1, 1, 1, 1, 0, 1, /* 2^126 */ 1, 1, 1, 1, 1, 1, 1, 0, /* 2^127 */ }, i; for(i=0;i<sizeof(e)/sizeof(e[0]); i++) printf("%.9g\n", pow(2.,((e[i][7-7]-1)*128 + e[i][7-6]*64 + e[i][7-5]*32 + e[i][7-4]*16 + e[i][7-3]*8 + e[i][7-2]*4 + e[i][7-1]*2 + e[i][7-0] + 1))); }
>>988 バケットソートなので処理時間 O(n) オーダ
でも、20MB あれば 125万件までメモリに乗せられるwww
855は途中までやったけどDB劣化版を作ってるのが空しくなってやめた 劣化版じゃないのを作れってのは無理ww
994 :
デフォルトの名無しさん :2009/05/20(水) 01:04:17
>>991 exeファイルでいいんだから、Vectorあたりから適当な在庫管理ソフトをダウンロードしちゃえばいいんじゃね?w
996 :
デフォルトの名無しさん :2009/05/20(水) 06:00:07
囲碁の指し手なんですがあと一手で囲んで取れるっていうのを 低コストで見つけるにはどうすればいいですか? 人間だとすぐにわかるのですが。
999 :
994 :2009/05/20(水) 14:55:44
>これは書いていないのでよろしく。 なんで書かないんだカス
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。