C/C++の宿題片付けます 135代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 134代目
http://pc12.2ch.net/test/read.cgi/tech/1263824755/
0002デフォルトの名無しさん
2010/03/24(水) 23:21:550003デフォルトの名無しさん
2010/03/25(木) 23:29:190004デフォルトの名無しさん
2010/03/25(木) 23:46:560005デフォルトの名無しさん
2010/03/26(金) 00:23:010006デフォルトの名無しさん
2010/03/26(金) 17:22:22なんなんだろうね。馬鹿じゃないかと思うよね。
0007デフォルトの名無しさん
2010/03/26(金) 17:23:13どうして馬鹿だと思うのかね?
0008デフォルトの名無しさん
2010/03/26(金) 17:25:28・・・ってすでにやってたのねorz
0009デフォルトの名無しさん
2010/03/27(土) 13:25:520010デフォルトの名無しさん
2010/03/28(日) 18:15:09昔、そのように指導していた入門書があったような気がする。
0011デフォルトの名無しさん
2010/03/29(月) 00:34:38サンプル作るときはreturn省略できるから書いたりする。
まぁ今は昔と違って、void mainも仕様に沿ってるよね
0012デフォルトの名無しさん
2010/03/29(月) 01:10:18(゚Д゚)ハァ?
0013デフォルトの名無しさん
2010/03/29(月) 13:36:15// ̄~`i ゝ `l |
/ / ,______ ,_____ ________ | | ____ TM
| | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>>
\ヽ、 |l | | | | | | | | ``( (. .| | | | ~~
`、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二=''
ヽヽ___// 日本
_____ _____ ______ _______
| ウェブ | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
._________________
| │・検索オプション
└────────────────┘・表示設定
| Google検索 | I'm Feeling Lucky | ・言語ツール
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
○ウェブ全体から検索 ◎日本語のページを検索
0014デフォルトの名無しさん
2010/03/31(水) 06:55:24スタートアップから int main() で call されるから、call 先の事情で void にかえるのはどうかと。
質問スレではこの話題で空前の荒れ模様になったので、やめときますね。
0015デフォルトの名無しさん
2010/03/31(水) 09:14:32それは処理系による。
例えば DOS や Windows 環境のでは void は認められている。
スタートアップでは戻り値がなくてもいいように設計されている。
これに準拠した(MS系をはじめとする)C言語では void は正規なので警告を出さない。
つまりそういう仕様。
逆に int main が必須な仕様においては、
void main と宣言すれば警告またはエラーが出るのが普通。
0016デフォルトの名無しさん
2010/03/31(水) 13:04:40ここ見ただけだから間違ってるかも知れんが。
http://www.kijineko.co.jp/tech/superstitions/void-main.html
0017デフォルトの名無しさん
2010/03/31(水) 13:07:580018デフォルトの名無しさん
2010/03/31(水) 13:21:38だから両方の規格があるという話だろ。それで完結だろ。
int main が必須の規格であり、それに準拠するのであれば、void main は正しくない。
けど世の中には void main が正規な規格もあるし、そこでは void main が正しいのは当然。
少し頭の中を整理した方がいいよ。
0019デフォルトの名無しさん
2010/03/31(水) 20:00:57それ"も"であってそれ以外を禁止するとは言ってないよな>規格
0020デフォルトの名無しさん
2010/03/31(水) 22:52:290021名無し さん
2010/03/31(水) 23:09:54main(void){} は int main(void){} と同値。(C言語)
main(void){} は規格違反、void main(void){} ならGCC以外OK。(C++言語)
0022デフォルトの名無しさん
2010/03/31(水) 23:10:34void main() が正規な処理系って、そんなに多いのですか?void main() でも表面上問題ないっていうだけではないですか?
void func() と int func() とではたまたまスタック構造が変わらない、というだけで、いわば void func() と int func() との差を自覚していないだけではないですか?
0023デフォルトの名無しさん
2010/04/01(木) 09:21:31>void main() が正規な処理系って、そんなに多いのですか?
DOS、Windows と Unix 系はそう。OS側では問題のあるOSの方が特殊。
ただしそれらで走るC言語においては、int main 必須な規約に準拠している言語もある。
そういう言語を使用していれば、void main が許されないのは当然。
DOS や Windows で一番利用されているであろう、
MS系のC言語であれば void main は正規。
>void main() でも表面上問題ないっていうだけではないですか?
正規に認めらている。だから警告もださない。
というか、どっからこいう発想が湧いてくるんだろう。
自分の知ってる規格が int main が必須だったとして、
どうしてそれが世の中すべての規格に共通だと思うんだ。
0024デフォルトの名無しさん
2010/04/01(木) 12:41:38DOS Windows Unix系において、void mainが正規であることのソースが出てくればみんな落ち着くんじゃない?
大抵問題ないという慣例じゃなくて。
0025デフォルトの名無しさん
2010/04/01(木) 15:43:53プログラミング言語CというCの教科書では main 関数に return など存在していない。
この本はC言語の設計者が書いたものであり、C言語の規約その物。
当然この本に書いてあるコードは Unix や DOS で動いたし、問題があるわけもない。
80年代のことではあるが、その頃の Unix や DOS はそのまま残っているんだから、
当然今も問題ない。
そもそも void main が不正だという奴の根拠はなんなんだ?
どっかのWEBサイトに書いてあったらとかだろ。そんなものが何の根拠になるんだ。
あるいは void main が不正な規格を持ち出して、そこで禁止されているとか。
当たり前だろ。そういう規格なんだから。ある規格があったらすべてのC言語がそうあるべきだとか。
もうアホかと。
0026デフォルトの名無しさん
2010/04/01(木) 15:55:40-- hello.c --
void main(){}
-------------
# gcc hello.c
hello.c: In function ‘main’:
hello.c:1: warning: return type of ‘main’ is not ‘int’
普通にint main()やint main(int,char**)でいいように思うな
void main()しか認めない環境でもない限り(あるのか知らんけど)
なんのメリットもないと思う
golfならmain(){}でいいんだしさ
0027デフォルトの名無しさん
2010/04/01(木) 16:04:28お前だけK&Rで書いてろよ
0028デフォルトの名無しさん
2010/04/01(木) 16:13:23理解力低いな。
DOS や Unix がK&Rのソースが動作するように設計されているという意味だ。
どうしてわからないんだ。
こういう OS では void main と書いても問題がないということ。
0029デフォルトの名無しさん
2010/04/01(木) 16:20:34だから gcc で駄目だったら、全部のC言語で駄目っていう話にするの?
gcc 使うときに int main って書くのは当然だろ。
けど void main が認められている処理系で、それが駄目だという理由にはならん。
そこで論理の飛躍があることにどうして自分で気付けないの?
0030デフォルトの名無しさん
2010/04/01(木) 16:28:38別にvoidでもintでもどっちでもいいじゃん
臨機応変に使い分ければいいことだし
0031デフォルトの名無しさん
2010/04/01(木) 16:37:13void mainでなければ通らない処理系を具体的に教えて。
0032デフォルトの名無しさん
2010/04/01(木) 16:42:17本来どっちもで良いことなのに、int main に洗脳された人たちが、
他人が自身の環境に準拠した void main を使うことにまで口出しをしている。
void main 肯定派は、 int main もどちらもありだし、使う人の環境や規約に従えばよいと考える。
void main 否定派は、自分の環境に世の中のC言語が自分が準拠する規約に従っていないと許せない。
0033デフォルトの名無しさん
2010/04/01(木) 16:45:10そういう処理系がないことを証明するのはそっちでしょ。
そもそもそういう処理系があるかもしれないのに、どうして void main を否定できるんだ。
あるかもしれないなんだろ?
そういう矛盾になぜ気づかない。int main に洗脳されているとしか思えない。
0034デフォルトの名無しさん
2010/04/01(木) 16:49:170035デフォルトの名無しさん
2010/04/01(木) 17:17:550036デフォルトの名無しさん
2010/04/01(木) 17:19:39処理系じゃないけど、商用アプリ作ってるところで、
「main は void で宣言して、リターンコードを返す場合は exit() を使うこと。」
という社内規約を作っているところはあるよ。
この規約に準拠したら、void main 使うのは当然だよね。
そうすると、この規約自体がどうなだってるんだってことになるけど、
それ言い出すと int main を定めているのも規約の一つでしかないわけだし。
少なくとも昔は int main を定めている規格なんかなかったし、
処理系もその時代からあるから int main には依存していない。
そういう状況で int main を定めた規格が後から作られた。まぁある程度は広まった。
だからといって、その規格に準拠していないC言語はすべて間違いなんてのはおかしいだろ。
その時点で一番メジャーな規格のみが唯一絶対正しいなんて滅茶苦茶だし、
MS のコンパイラだってそれなりにメジャーだよ。
0037デフォルトの名無しさん
2010/04/01(木) 17:23:36宿題回答に向けてくれればいいのになw
0038デフォルトの名無しさん
2010/04/01(木) 19:33:39#include <stdio.h>
void main() { }
上記コード、MSのコンパイラなら何も文句を言わないのかとあせったがちゃんと警告が出るね。
0039デフォルトの名無しさん
2010/04/01(木) 19:58:40リンクするスタートアップモジュールは返り値をレジスタにとっているので void main() であろうとも int main() であろうともスタック構造がかわならいので問題ないようにみえるだけでは?
0040デフォルトの名無しさん
2010/04/01(木) 20:04:43それは単に
main()
{
printf("Hello, world\n");
}
だったのでは。関数の返り値を指定しなかったら int だというだけでは。
そもそも、そのころに void というキーワードはあったのだろうか?
0041デフォルトの名無しさん
2010/04/01(木) 20:07:30言っても無駄。そんな処理系は存在しない、少なくとも DOS 上・UNIX上ではね。
0042デフォルトの名無しさん
2010/04/01(木) 20:29:52規格化、標準化されたものに対して
準拠するという言葉があるので
案件ごとに異なるローカルルールや
社内規約を持ち出して準拠するとは言わないよ
準拠という言葉の意味、成り立ちを考えれば分かると思うけど
C99準拠でなくMS準拠なんてもはやギャグだよ
環境依存しないよう規格化してるのに
わざわざ手間をかけてエラーや警告の出やすいものにする意味が分からん
0043デフォルトの名無しさん
2010/04/01(木) 22:46:15いつまでやってんだ
0044デフォルトの名無しさん
2010/04/02(金) 09:38:41MS-C, VisualStudio ともに警告はでない。
コンパイルオプションを変更せず、標準時の場合だよ。
>>39
ローカル変数が初期化されていないのと同じ状態。それが問題になるわけがない。
その値に依存した処理を行うときにはじめて問題になるだけ。
>>40
main 関数の中に return 文がないということがポイント。これは void main と同じ。
C言語の設計者が書いたコードであり、これこそC言語の規格。(もちろん昔の)
そしてこのコードが動くように Unix、DOS 等の処理系が設計された。
だから少なくとも Unix や DOS ではこういうコードの動作が保証されている。(これは今も)
>>42
君がMSのコンパイラ使わないのは勝手だけど、
世の中のWindowsアプリケーションの殆どはMS準拠で作成されてるんだよ。
C99準拠が唯一無二だという思想の方がよほどギャグだよ。
あと、とんでもなく勘違いしてるようだから言うけど、C99は処理系に対する規格じゃないんだよ。
こういうことも理解してないんだろうな。
0045デフォルトの名無しさん
2010/04/02(金) 10:29:26その意味不明な規格は脳内で作ったの?
それとも誰かから受け継いだの?
0046デフォルトの名無しさん
2010/04/02(金) 10:59:22「その」が何を指してるのか全くわからん。これでは答えようがない。
技術者ならもう少しマシな文章書けるようなった方がいいぞ。
0047デフォルトの名無しさん
2010/04/02(金) 13:55:07> コンパイルオプションを変更せず、標準時の場合だよ。
おいよいよ?
0048デフォルトの名無しさん
2010/04/02(金) 14:55:490049デフォルトの名無しさん
2010/04/02(金) 15:04:53void main() と書いても、警告は出ないよ。
念のため Visual Sutdio 2008 でコンパイルしたけどでないよ。
警告レベルを /W4 に引き上げても警告はでない。
MS系のコンパイラで警告の出るバージョンがあったと言いたいの?
それとも何か別のこと?
何を聞いてるのかよくわからないから、答えようがない。
0050デフォルトの名無しさん
2010/04/02(金) 16:56:55VS2008で警告でたよ。
というか、void派はvoid main()を否定すべきだろ
0051デフォルトの名無しさん
2010/04/02(金) 17:22:42どういう警告がでるの?
0052デフォルトの名無しさん
2010/04/02(金) 17:25:240053デフォルトの名無しさん
2010/04/02(金) 17:48:01BuildLog.htm に、そのように出力されてるのか?
0054デフォルトの名無しさん
2010/04/04(日) 15:58:52>>52
ためしてからものをいうこと。
0055デフォルトの名無しさん
2010/04/04(日) 16:11:02#include <stdio.h>
void main(void)
{
puts("TEST");
getchar();
}
エラー0、:警告0
規格で main() の型は int って決まってるんだから警告ぐらいは出すべきと思うけど。
0056デフォルトの名無しさん
2010/04/04(日) 16:13:440057デフォルトの名無しさん
2010/04/04(日) 16:29:23ありえないけど。
0058デフォルトの名無しさん
2010/04/04(日) 16:45:54エラー0、警告0
MS やる気あんのか
0059デフォルトの名無しさん
2010/04/04(日) 16:51:250060デフォルトの名無しさん
2010/04/04(日) 16:59:13http://msdn.microsoft.com/en-us/library/6wd819wh.aspx
> Alternatively, the main and wmain functions can be declared as returning void (no return value).
VC++2008EEで実験したが、0を返してるね。
void main()
{
}
00841000 xor eax,eax
00841002 ret
__tmainCRTStartup
:
00841167 call main (841000h)
0084116C add esp,0Ch
0084116F mov dword ptr [mainret (843030h)],eax
:
0061デフォルトの名無しさん
2010/04/04(日) 17:06:48>>55のコードを試してみてくれ。
0062デフォルトの名無しさん
2010/04/04(日) 17:07:59006361
2010/04/04(日) 17:08:53不定値を返してるのはVC6だった
0064デフォルトの名無しさん
2010/04/04(日) 17:14:43エラーも警告も出ず、MSの仕様通り。
暗黙的に0を返しており、動作上も問題ない。
#include <stdio.h>
void main(void)
{
puts("TEST");
003C1000 push offset ___xi_z+30h (3C20F4h)
003C1005 call dword ptr [__imp__puts (3C20A4h)]
003C100B add esp,4
getchar();
003C100E call dword ptr [__imp__getchar (3C209Ch)]
}
003C1014 xor eax,eax
003C1016 ret
0065デフォルトの名無しさん
2010/04/04(日) 22:49:020066デフォルトの名無しさん
2010/04/04(日) 23:04:08_main proc near
?live1@0:
;
; void main(){ }
;
push ebp
mov ebp,esp
@1:
@2:
pop ebp
ret
_main endp
_TEXT ends
eax にはなにも設定されていない。したがって、bcc32 (5.5.1) は不定値を返す。
0067デフォルトの名無しさん
2010/04/04(日) 23:28:10return無しでもコンパイルは通るが、システムに0は返らない(errnoの10はECHILD)。
void main()はNGという結果。
$ ls -l /bin/cc
-rwxrwxr-t 1 bin 6464 May 5 1979 /bin/cc
$ cat test0.c
#include <stdio.h>
int main() { puts("hello world!"); return 0; }
$ /bin/cc test0.c -o test0
$ ./test0; echo $?
hello world!
0
$ cat test1.c
#include <stdio.h>
int main() { puts("hello world!"); }
$ /bin/cc test1.c -o test1
$ ./test1; echo $?
hello world!
10
$ cat test2.c
#include <stdio.h>
void main() { puts("hello world!"); }
$ /bin/cc test2.c -o test2
test2.c:2: External definition syntax
$
0068デフォルトの名無しさん
2010/04/04(日) 23:28:56スレチ
0069デフォルトの名無しさん
2010/04/05(月) 00:19:480070デフォルトの名無しさん
2010/04/05(月) 00:46:20ということで、FAでは?
機種制限されるようなプログラムを組ませるようなキチガイな学校は帰れといういことで
マイコンなどは話は別だが
0071デフォルトの名無しさん
2010/04/05(月) 08:12:38学校のせいで帰れというのは生徒に酷ですね。
0072デフォルトの名無しさん
2010/04/05(月) 10:07:590073デフォルトの名無しさん
2010/04/05(月) 17:29:32>>52
void main 否定派は嘘ばっかりだよね。
他の発言もいい加減なことばっかり。
void main が駄目だとかデマを撒き散らして何のメリットがあるんだろう。
0074デフォルトの名無しさん
2010/04/05(月) 18:02:43試してるやつはコマンドラインさらしてみ?
ってか「void main()」ここだけで明らかにおかしい点があるだろよ
void main肯定派もっとがんばれよw
0075デフォルトの名無しさん
2010/04/05(月) 18:18:490076デフォルトの名無しさん
2010/04/05(月) 19:16:55>cat voidmain.c
void main() { }
>cl voidmain.c
voidmain.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
>cl voidmain.c /Wall
voidmain.c
voidmain.c(1) : warning C4255: 'main' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
>>73
リンクされるスタートアップの仮定と異なる宣言は間違っていると思います。
呼び出し元と呼び出し先で関数の宣言をあわせるのは、それがたとえ main() であっても同じことではないでしょうか。
007776
2010/04/05(月) 20:02:24$cat voidmain.c
void main() { }
$cl voidmain.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
voidmain.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
$cl voidmain.c /Wall
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
voidmain.c
voidmain.c(1) : warning C4255: 'main' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
0078デフォルトの名無しさん
2010/04/05(月) 21:23:01警告がでないからといって安心しているようでは‥‥‥。
モジュール別に分割してコンパイルするつくりで、かつちゃんとヘッダを書いていないときには、エラーがでなくてもはまります。
あと不定長引数の関数もはまれば結構難解です。
0079デフォルトの名無しさん
2010/04/05(月) 21:34:23> void main 否定派は嘘ばっかりだよね。
> 他の発言もいい加減なことばっかり。
理解できないのなら、そういってくだされば、噛み砕いてご説明いたしますが。
0080デフォルトの名無しさん
2010/04/05(月) 21:34:31MacOS 10.5.8上のgcc 4.0.1では警告ありだけど返り値は常に0。
0081デフォルトの名無しさん
2010/04/06(火) 00:11:28gcc 3/4 をみたんですけれども、___main 依存でよくわからない。___main ってなんでしょうか?
0082デフォルトの名無しさん
2010/04/06(火) 09:00:51Visual Studio 2008 で void main と定義したときに、
警告が出るというのが理解できません。
「警告が出る」というのはどういう意味かを噛み砕いて説明してください。
0083デフォルトの名無しさん
2010/04/06(火) 10:15:48いざ警告内容を目の当たりにしてもこの有様。
void main派から見てもvoid main()はありえん。とかいいなよ。
0084デフォルトの名無しさん
2010/04/06(火) 10:22:550085デフォルトの名無しさん
2010/04/06(火) 10:29:41VisualStudio2008では警告は出ないよ。
警告が出るというのは、void main否定派が、
都合が悪くなってデマカセを言ってるだけ。
0086デフォルトの名無しさん
2010/04/06(火) 10:32:22void main否定派が全ての環境で警告が出るとか、くだらん嘘つくからだろ。
0087デフォルトの名無しさん
2010/04/06(火) 10:35:28だよね。
>>85
clのバージョンを教えてくれないか。
>>86
でない環境は?
0088デフォルトの名無しさん
2010/04/06(火) 10:39:27# cl /Wall voidmain.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
voidmain.c
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE\stdio.h(381) : warning C4255: '_get_printf_count_output' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
voidmain.c(3) : warning C4255: 'main' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
0089デフォルトの名無しさん
2010/04/06(火) 10:42:43バージョン、内容ともに>>77と同じ
0090デフォルトの名無しさん
2010/04/06(火) 11:04:27それ、/Wall というオプションつけてるからだよ。
ヘルプ読めばわかるけど、推奨されているのは /W4 まで。
/Wall という特殊なオプションを付けて状態で警告がでても意味がない。
stdio.h に対しても警告出してるんだから、こんなオプションの実用性がないことは普通の人ならわかる。
更にこの状態であっても void main に対しての警告は出ていない。
つまり void main が認めらているということ。
0091デフォルトの名無しさん
2010/04/06(火) 11:07:52void main肯定派の中にvoid main()も肯定しているように見受けられる人が多いから。
ちなみに俺はvoid mainを否定したことはないよ。
0092デフォルトの名無しさん
2010/04/06(火) 11:09:430093デフォルトの名無しさん
2010/04/06(火) 12:20:27単に引数を指定しない宣言を void にしただけ。 func() を func(void) と読み替える、といってきている。
今回の話題には関係ない。いずれにせよ /Wall が特殊、というわけではない。stdio.h でエラーがでているのはご愛嬌というべきか。
MSのコンパイラでは、void main() にしても特に警告はでていない、ということは普通の人ならわかる。
ただ、私は void main() 否定派。リンクされるスタートアップモジュールでの仮定と異なる宣言はどうかと思う。
引数の宣言をあわせるのは main() も同じ。返り値をスタックにのせる場合もある現在の規格ではなおさら。
0094デフォルトの名無しさん
2010/04/06(火) 12:21:42規格では関数の定義において void func(void) と void func() は等価であることが保障されている。
プロトタイプのときは別。
時間があれば規格の場所を探しておく。
0095デフォルトの名無しさん
2010/04/06(火) 12:25:19それC++
>>88は拡張子Cでやってるからvoid func()はvoid func(...)と透過でかつ未定義
0096デフォルトの名無しさん
2010/04/06(火) 14:18:53アメリカだとint mainじゃないと、罰金取られたりするしね。
あと日本の規格は優秀だから海外でも通用するから、
void mainなんて阿呆がすることなんだよ。
あと実行速度がvoidにすると最大10倍ぐらい遅くなったりするからね。
逆にいうとintにしたら、10倍はやくなるだから、そうしなのはどあほだよ。
あとintの方が文字が少ないし実行速度が早くなるのは当然なんだよ。
0097デフォルトの名無しさん
2010/04/06(火) 14:23:38みんな実行速度のことを忘れたね。
そういう目で分析するとint mainで決着だ!!!!
10倍とかすごいね、頭のいい人がいるもんだわ。関心だわ。
0098デフォルトの名無しさん
2010/04/06(火) 14:31:550099デフォルトの名無しさん
2010/04/06(火) 14:45:250100デフォルトの名無しさん
2010/04/06(火) 15:41:27010194
2010/04/06(火) 22:01:34仕様書の該当場所をみつけた。
残念ながら TC2 (草案とみなしていいのかな?)なんだけれども
ISO/IEC 9899TC2
6.7.5.3 Function declarators (including prototypes)
14
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters.
とあり、関数の定義のときには、空のリストは no parameters だそうだ。
The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied.
関数定義の一部ではない場所での空リストはパラメータの内容について情報を示さないそうだ。
同文書では例として、
16
EXAMPLE 1 The declaration
int f(void), *fip(), (*pfi)();
declares a function f with no parameters returning an int, a function fip with no parameter specification
returning a pointer to an int, and a pointer pfi to a function with no parameter specification returning an
int.
があり、この例では関数定義での *fpi() は "no parameter" だそうだ。
ここで教えてもらった。つ http://pc12.2ch.net/test/read.cgi/tech/1246115922/
0102デフォルトの名無しさん
2010/04/06(火) 22:01:59まあこれは Microsoft 拡張であることも示してる
そして実は sizeof(T) <= sizeof(int) の整数型でも同じようになる
これからは unsigned short main なんて書くやつがいても叩くのやめようぜ
VC では認められてるもんな
010394
2010/04/06(火) 22:11:09だから、void main(void) と void main() は関数定義においては同一で、
「void main() はありえない」といっている意味がわからない。
私は int main()派、というよりは、コールする側とコールされる側で返り値の仮定は一緒にするのが妥当だと思っているだけだが。
0104デフォルトの名無しさん
2010/04/06(火) 22:21:57$cat voidmain.c
void main() { }
$cl voidmain.c /Za
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
voidmain.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
ん?別に警告はでないが?
cl /? によれば
/Za 拡張子を無効にする
だそうだが?
0105デフォルトの名無しさん
2010/04/06(火) 22:32:03http://msdn.microsoft.com/library/0k0w269d
あとC++での話ね
0106デフォルトの名無しさん
2010/04/06(火) 22:48:16誤訳かあ。
> Visual C++ コンパイラでは、ANSI C または ANSI C++ 規格以外の機能を多数用意しています。
> これらの機能はまとめて、C および C++ の Microsoft 拡張機能として知られています。これらの
> 拡張機能は、/Ze オプションを指定すると使用可能になり、/Za オプションを指定すると使用不能になります。
しかし、/Za だと拡張機能が使えなくなるのではないか?/Ze じゃないのか?
そして、/Ze を指定しても、
$ cat voidmain.c
void main() { }
$cl voidmain.c /Ze
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
cl : コマンド ライン warning D9035 : オプション 'Ze' の使用は現在推奨されていません。今後のバージョンからは削除されます。
voidmain.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
返り値が void であることを警告する内容じゃないんだが?
0107デフォルトの名無しさん
2010/04/06(火) 23:14:00warning C4326: 'main' の戻り値の型には、'int' を使用してください。'void' は使用できません
ttp://msdn.microsoft.com/library/1wk7h414
0108デフォルトの名無しさん
2010/04/06(火) 23:17:40そんなことは誰もいっていないと思う。
そもそも MS で警告がでないから void main() で問題ない、という void main 肯定派の発言が発端では?
ただ、int main() 派としては、void main() のアセンブル結果が面白い。MS で void main() でも 0 を返しているのは、MS嘘つきとしかいいようがない。
0109デフォルトの名無しさん
2010/04/06(火) 23:26:46コンパイラのバージョンが違うんだね、たぶん。
私のは VC2008EE なんだが、
$cl voidmain.c /Za /W1
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
voidmain.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:voidmain.exe
voidmain.obj
としかいわない。よかったらコンパイラの標準出力&標準エラー出力を貼ってくださいな。
0110デフォルトの名無しさん
2010/04/06(火) 23:33:130111デフォルトの名無しさん
2010/04/07(水) 01:24:29この2つと同等(型の再定義等)の方法、に加えて処理系定義の方法で行うということに
なっているもよう(JIS規格なら http://www.jisc.go.jp/ の「JIS検索」からX3010を
検索すれば閲覧可能)。
ということなので、(少なくともCでは)宿題の処理系に対応していればvoid mainでも可
という結論で良いのかな。
0112デフォルトの名無しさん
2010/04/07(水) 03:09:01てっきりANSI-Cの話かと。。。
0113デフォルトの名無しさん
2010/04/07(水) 09:17:43常識で考えればその通りで最初から答えは出ている。
なのに main 関数はどんな場合でも int で宣言しろという奴がいるんだよ。
0114*><
2010/04/07(水) 09:35:38{return 0:] と1行追加すればいいのに、なぜか void main(){} 。
void main()なのに、{return 0;} は変だ。int main(){return;} と書くようなもの。
void main(){} と書くのは、BCC、そう書かれて迷惑なのは GCCだけ、VC は蚊帳の外。
また、/* */ main(){} と書かれて警告が出るのは gcc -std=c99 と、cl /TP。
ほれ、リンク http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/955.zip
0115デフォルトの名無しさん
2010/04/07(水) 09:49:450116デフォルトの名無しさん
2010/04/07(水) 10:40:040117デフォルトの名無しさん
2010/04/07(水) 10:43:030118デフォルトの名無しさん
2010/04/07(水) 12:30:44しかし、最後の処理系定義の方法、というのが曲者で、VC にしろ、bcc にしろ、スタートアップルーチンは int の返り値を
受けるようにできているので、int main() とするとが妥当でしょう。これを、自分が作るプログラムは返り値を返さない、という
理由で void main() にするのはおかしいのではないでしょうか?
0119デフォルトの名無しさん
2010/04/07(水) 12:31:37なつかしいじゃありませんか。
0120デフォルトの名無しさん
2010/04/07(水) 12:38:57こういう基地外が後を絶たない
0121デフォルトの名無しさん
2010/04/07(水) 13:11:53そういうくだらん発言は、スレ読んでからにすれば。
0122デフォルトの名無しさん
2010/04/07(水) 13:28:21いやあの時は確かmalloc()&free()だったと思う
くだらん話題で何ヶ月も議論してたぞ
0123デフォルトの名無しさん
2010/04/07(水) 18:56:23>>121
>>111 の「処理系定義の方法で行う」というのを拡大解釈しているのではないですか。たとえば
double main()
が可能か不可能かは明白でしょうが、
void main()
でも同じことではないでしょうか?
処理系定義のリンクされるスタートアップが int main() を前提にかかれているのであれば、
int main()とかくべきなのではないでしょうか。
それとも MS-C Borland C は void main() を前提としたスタートアップなのでしょうか?
0124デフォルトの名無しさん
2010/04/07(水) 19:22:12おいおい確かめもせずにいい加減な事を書くな
Borland Cはvoid mianだと不定値を返すぞ
0125デフォルトの名無しさん
2010/04/07(水) 19:35:08まって、それは私が >>66 で書いています。
当然 bcc32 は void main() を前提としたスタートアップではありません。
実際 int の返り値はたいていの処理系ではレジスター経由でスタートアップにわたるので、 void main() と書こうが、int main() と書こうが
実害はないのは百も承知です。
その上で void main() と書くよりも int main() と書いたほうがいい理由を探しています。
0126デフォルトの名無しさん
2010/04/07(水) 19:51:54strdup() の返り値を free() するかしないかでしたっけ?
0127デフォルトの名無しさん
2010/04/07(水) 19:54:41「不定値を返すから void main を前提としたスタートアップではない」
本当にそうだろうか
「void main のときは不定値を返す」
という仕様である可能性はないのだろうか
0128デフォルトの名無しさん
2010/04/07(水) 19:55:18いや多分まだログは残っていると思うが、話の発端は
「malloc()で確保した領域をfree()すると何が起きるのでしょうか」
という一質問者の質問だった
これが堂々巡りでひどい話に膨れあがって
結局使ってるOSに言及しないとはっきりした事は言えないよという
結論に落ち着くまで半年かかった
Windowsではfree()したらシステムにメモリを返す事もあるが、unixや
Linuxではそのまま持っていたりとかとにかく読んでて眠くなった
0129デフォルトの名無しさん
2010/04/07(水) 20:00:57そのままもっているのは C の処理系のほうだったかと。OS レベルでも返さないとは驚き。
0130デフォルトの名無しさん
2010/04/07(水) 20:07:54ああそうか
でもこの話はよそうぜ(笑)
void main()で盛り上がってるのにここにmalloc&freeが加わったら
大変な事になるw
0131デフォルトの名無しさん
2010/04/07(水) 20:08:18んー、void main()は不定値を返す、という表現自体が、main() が返した先のモジュールで返り値を扱うことを意味しますね。
一連のアセンブリソースの検証でも、あくまで main() の返り先が返り値を扱う前提で調査していることになりますね。
たしかに「不定値を返すから void main() を前提としたスタートアップではない」とはいいきれませんね。
もうこれはスタートアップ自体を調べないことにはわかりませんね。
0132デフォルトの名無しさん
2010/04/08(木) 09:06:130133デフォルトの名無しさん
2010/04/08(木) 09:34:04>実害はないのは百も承知です。
>その上で void main() と書くよりも int main() と書いたほうがいい理由を探しています。
int main に洗脳されたキチガイが文句言ってくるので、そういう奴らの相手をしなく済むことだね。
そういうキチガイがいない環境では、使っても問題ない。
0134デフォルトの名無しさん
2010/04/08(木) 11:00:46規格で規定されてるからだろ
コンパイラのあるバージョンからを境にvoid main()が使えなくなる可能性は
十二分にある
0135デフォルトの名無しさん
2010/04/08(木) 11:15:33まさにこういう人がいるから、使った方がいいということだろね。
こういう人は規格の意味や内容を理解しておらず、
どっかの受け売りだから議論にもならない。
そのくせ「規格では」とか言いたがる。
もう面倒だから使ってればいいんだよ。
0136デフォルトの名無しさん
2010/04/08(木) 16:27:410137デフォルトの名無しさん
2010/04/08(木) 16:45:12まさにこういう人がいるから、使った方がいいということだろね。
こういう人は規格の意味や内容を理解しておらず、
どっかの受け売りだから議論にもならない。
そのくせ「理由ってなんなの」とか言いたがる。
もう面倒だから使ってればいいんだよ。
0138デフォルトの名無しさん
2010/04/08(木) 17:16:340139デフォルトの名無しさん
2010/04/08(木) 17:37:14かまってもらえるから
0140デフォルトの名無しさん
2010/04/08(木) 17:37:340141デフォルトの名無しさん
2010/04/08(木) 19:20:210142デフォルトの名無しさん
2010/04/08(木) 19:23:360143デフォルトの名無しさん
2010/04/08(木) 20:41:390144デフォルトの名無しさん
2010/04/08(木) 20:42:44構ってもらえる
0145デフォルトの名無しさん
2010/04/08(木) 22:23:450146デフォルトの名無しさん
2010/04/08(木) 23:50:32C++のint main()に限って省略可能だよ
0147デフォルトの名無しさん
2010/04/09(金) 01:37:52int main()
{
return 0;
}
void main()
{
}
0148デフォルトの名無しさん
2010/04/09(金) 04:04:43[1] 授業単元: ゼミ演習でのプログラミング
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10566.zip
[3] 環境
[3.1] OS: XP SP2
[3.2] Cpad for Borland C++Compiler Ver2.31
[3.3] 言語: C言語
[4] 期限: (2010年4月9日 13:00:00
[5] その他の制限: とくにありません
ゼミで明日までに提出な課題なんですが
休み中呆けてて全く解けませんでした・・・問題文には#include <stdio.h> void main(void)としか無くてイチからコードを書いて貰えると嬉しいです・・・。
0149デフォルトの名無しさん
2010/04/09(金) 04:12:531.ヒストグラム
0〜9の範囲内の整数を20個入力し、そのヒストグラムを求めて出力するプログラムを書きなさい
2.素数について
1〜30までの整数の中のすべての素数を求めて出力するプログラムを書きなさい
注:素数の求め方は色々考えられるが、まず効率を気にしなくてもよいのでプログラムを作りましょう
そして1〜50,1〜100の素数を求めるように実行して、実行時間を観察しましょう(少しでも範囲を広げるとかかる時間は極端に増えてしまう。)
3.二次方程式の解
ax2+bc+c=0の係数abcを入力し、解があるかどうかなどを判定し
「実数解無し」・「実数解は一つ」・「実数解は2つ」のどちらかを出力するプログラムを書きなさい
4.配列
成績処理
10人の学生の成績を配列に入力してから、平均成績と最高成績を求めて出力するプログラムを書きなさい
0150デフォルトの名無しさん
2010/04/09(金) 04:19:020151デフォルトの名無しさん
2010/04/09(金) 04:22:16int main(void)
{
int i, j, hist[10] = {0}, n;
for(i=0; i<20; i++) {
do { scanf("%d", &n); } while(n < 0 || 9 < n);
hist[n]++;
}
for(i=0; i<10; i++) {
printf("%d:", i);
for(j=0; j<hist[i]; j++) printf("*");
printf("\n");
}
return 0;
}
0152デフォルトの名無しさん
2010/04/09(金) 04:22:30わざわざ問題文を載せてもらいありがとうございます
そうです、提出は今日ですね・・・寝る前だったので間違えてしまいました
0153デフォルトの名無しさん
2010/04/09(金) 04:29:29int main(void)
{
int i, j;
char sieve[30+1] = {0, 0, 1};
for(i=3; i<=30; i+=2) sieve[i] = 1;
for(i=3; i*i<=30; i+=2) if(sieve[i]) for(j=i*i; j<=30; j+=i*2) sieve[j] = 0;
for(i=0; i<=30; i++) if(sieve[i]) printf("%d ", i);
return 0;
}
0154デフォルトの名無しさん
2010/04/09(金) 04:32:17int main(void)
{
double a, b, c, d;
scanf("%lf%lf%lf", &a, &b, &c);
d = b * b - 4 * a * c;
if(d < 0) printf("「実数解無し」");
else if(d > 0) printf("「実数解は2つ」");
else printf("「実数解は一つ」");
return 0;
}
0155デフォルトの名無しさん
2010/04/09(金) 04:35:09int main(void)
{
int i, score[10], max, total;
for(i=0; i<10; i++) scanf("%d", score + i);
for(max=total=score[0],i=1; i<10; i++) {
total += score[i];
if(max < score[i]) max = score[i];
}
printf("平均成績:%g\n最高成績:%d\n", total/10.0, max);
return 0;
}
0156148
2010/04/09(金) 04:45:56こんなに早く・・・ありがとうございます!助かりました
ただ素数の問題以外が実行しても結果が表示されないのはこちらの環境の問題なんでしょうか
0157デフォルトの名無しさん
2010/04/09(金) 04:49:520158デフォルトの名無しさん
2010/04/12(月) 21:16:460159デフォルトの名無しさん
2010/04/12(月) 22:41:570160デフォルトの名無しさん
2010/04/12(月) 23:02:410161デフォルトの名無しさん
2010/04/12(月) 23:33:570162デフォルトの名無しさん
2010/04/13(火) 08:01:07昔のミニコンとか。
0163remi ◆I1kj7ags4Q
2010/04/13(火) 11:52:45プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10568.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々)
linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)c
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
2010年4月15日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々
特にないです。
プログラミングが全く分からずこまっています。私なりにわかる部分はがんばっているんですが、この課題はまったくわかりませんでした。助けていただけたら嬉しいです。
みなさんどうかよろしくお願いします。
0164デフォルトの名無しさん
2010/04/13(火) 16:23:36#include <stdio.h>
#define N 3
int main(void){
double a[N][N], b[N], temp1, temp2;
int i, j, k;
for (i=0; i<N; i++) {
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);}
for (i=0; i<N; i++) {
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf("%7.2f \n", b[i]);}
for (i=0; i<N; i++) {
temp1 = a[i][i];
for (k=0; k<N; k++) a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1;
for (j=0; j<N; j++) {
if (i != j) {
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -= temp2*a[i][k];
b[j] -= temp2*b[i];}}
printf("(i = %d)\n", i);
for(j=0; j<N; j++) {
for(k=0; k<N; k++) printf("%7.2f", a[j][k]);
printf("%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n");
return 0;}
0165デフォルトの名無しさん
2010/04/13(火) 16:26:31#include <stdio.h>
#define N 3
int main(void){
double a[N][N], b[N], temp1, temp2;
int i, j, k, mc = 0, dc = 0;
for (i=0; i<N; i++) {
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);}
for (i=0; i<N; i++) {
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf("%7.2f \n", b[i]);}
for (i=0; i<N; i++) {
temp1 = a[i][i];
for (k=0; k<N; k++) a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1, dc += k + 1;
for (j=0; j<N; j++) {
if (i != j) {
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -= temp2*a[i][k];
b[j] -= temp2*b[i], mc+=k+1;}}
printf("(i = %d)\n", i);
for(j=0; j<N; j++) {
for(k=0; k<N; k++) printf("%7.2f", a[j][k]);
printf("%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n* : %d, / : %d, total: %d\n", mc, dc, mc + dc);
return 0;}
0166デフォルトの名無しさん
2010/04/13(火) 16:33:09#include <stdio.h>
#define N 3
int main(void){
double a[N][N], b[N], temp1, temp2;
int i, j, k, mc = 0, dc = 0;
for (i=0; i<N; i++) { for (j=0; j<N; j++) scanf("%lf", &a[i][j]); scanf("%lf", &b[i]);}
for (i=0; i<N; i++) { for (j=0; j<N; j++) printf("%7.2f", a[i][j]); printf("%7.2f \n", b[i]);}
for (i=0; i<N; i++) {
int m = i;
for(j=i+1; j<N; j++) if(a[i][i] < a[j][i]) m = j;
if(m!=i) {
for(j=0; j<N; j++) {temp1 = a[i][j]; a[i][j] = a[m][j]; a[m][j] = temp1;}
{temp1 = b[i]; b[i] = b[m]; b[m] = temp1;}
printf("Exchange row %d with row %d\n", m, i);
for(j=0; j<N; j++) {
for(k=0; k<N; k++) printf("%7.2f", a[j][k]);
printf("%7.2f\n", b[j]);}}
temp1 = a[i][i];
for (k=0; k<N; k++) a[i][k] /= temp1;
b[i] /= temp1, dc += k + 1;
for (j=0; j<N; j++) {
if (i != j) {
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -= temp2*a[i][k];
b[j] -= temp2*b[i], mc+=k+1;}}
printf("(i = %d)\n", i);
for(j=0; j<N; j++) { for(k=0; k<N; k++) printf("%7.2f", a[j][k]); printf("%7.2f\n", b[j]);}}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n* : %d, / : %d, total: %d\n", mc, dc, mc + dc);
return 0;}
0167デフォルトの名無しさん
2010/04/13(火) 18:44:57これでは読めません。
0168デフォルトの名無しさん
2010/04/13(火) 18:55:430169デフォルトの名無しさん
2010/04/13(火) 20:57:250170remi ◆I1kj7ags4Q
2010/04/13(火) 22:07:51もしやっていただけるのであれば嬉しいです。本当にすみませんでした。
0171デフォルトの名無しさん
2010/04/14(水) 01:24:58>>165が(a)と(b)両方満たすようにできてる
0172デフォルトの名無しさん
2010/04/14(水) 16:02:03実はまだもうひとつ問題があって、それは自力でやろうとおもってたんですが、わたしはとけませんでした。本当にもうしわけないのですがこちらも教えていただけませんか?よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10569.txt
0173デフォルトの名無しさん
2010/04/14(水) 16:30:57コンソール上で入力した文字によって、以下の出力をするプログラムを作成する。
入力が"a"→(^_^)
入力が"b"→(T_T)
入力が"c"→(≧∇≦)
入力が"A"→(≧Δ≦)
その他の入力→(?_?)
※追加: 繰り返し入力を待ち受け、zが入力されたときのみ終了すること。
というのが出ました。
まったく分からないので教えてください。
0174デフォルトの名無しさん
2010/04/14(水) 16:37:39何もできないだめな学生だとアピールする理由が分からない
0175デフォルトの名無しさん
2010/04/14(水) 16:38:02言語はC++でお願いします。
0176デフォルトの名無しさん
2010/04/14(水) 16:40:26while
入力内容を取得
switch入力文字
case a print (^_^)
case b print (T_T)
case c print (≧∇≦)
case A print (≧Δ≦)
case z 正常終了
default print (?_?)
0177デフォルトの名無しさん
2010/04/14(水) 16:47:26早速やってみます。
0178デフォルトの名無しさん
2010/04/14(水) 17:10:27int main() {
char c;
while((c = getch()) != 'z') {
switch (c) {
case 'a':
puts("(^_^)");
break;
case 'b':
puts("(T_T)");
break;
case 'c':
puts("(≧∇≦)");
break;
case 'A':
puts("(≧Δ≦)");
break;
default:
puts("(?_?)");
}
}
return 0;
}
0179デフォルトの名無しさん
2010/04/14(水) 17:23:180181デフォルトの名無しさん
2010/04/14(水) 21:28:52>>179は>>178へのレスで、あんたへのじゃねーよw
0182デフォルトの名無しさん
2010/04/14(水) 21:40:44int n; → int n, mc, dc;
にしてGauss()関数とSolution()関数をを下記のものと入れ替える
void Gauss(void) {
int i,j,k;
double ratio;
for(i=0; i<n-1; i++) {
for(j=i+1; j<n; j++) {
ratio = a[j][i]/a[i][i], dc++;
for(k=i; k<n; k++) a[j][k] -= a[i][k]*ratio, mc++;
b[j] -= b[i]*ratio, mc++;}}
b[n-1] = b[n-1]/a[n-1][n-1], dc++;
a[n-1][n-1] = 1.0;
for(i=n-2; i>=0; i--) {
for(j=i+1; j<n; j++) {
b[i]-=b[j]*a[i][j], mc++;
a[i][j]=0.0;
}
b[i]=b[i]/a[i][i], dc++;
a[i][i]=1.0;}}
void Solutions(void) {
int i,j;
for(i=0; i<n; i++){
for(j=0; j<n; j++)
printf("%7.2f ",a[i][j]);
printf("%7.2f\n",b[i]);}
printf("*:%d /:%d total:%d\n", mc, dc, mc + dc);}
0184デフォルトの名無しさん
2010/04/16(金) 00:40:04[2] キーボードから5つの整数を読み込み、その任意の2つの異なる数の
組み合わせについて和と差と積と商と剰余を出力するプログラム
[3] OS:Windows Vista コンパイラ:Visual Studio.NET 言語:C
[4] 5/1迄
[5] fgets,scanf,printf sprintf strlen strcpy strcat関数は使っても良い。
それ以外は極力使用しないこと
scanfで取得した整数が入力された整数を表す文字列と矛盾が無いことを
チェックすること。
整数計算の際に桁溢れが発生していないかチェックすること。
(特に除数が0であるかのチェック。剰余は除数の絶対値より小さい
0以上の整数とする。)
main関数以外にユーザー関数を定義しないこと(main関数だけで
構成)が制約条件だそうです。
よろしくお願いします
0185デフォルトの名無しさん
2010/04/16(金) 00:51:500186デフォルトの名無しさん
2010/04/16(金) 08:15:010187デフォルトの名無しさん
2010/04/16(金) 14:41:265つの整数を(正しく読めてるかチェックしながら)読む
同じ数が現れても正しく読めてる限りカウントする
2つの組み合わせ(1種類しか無い場合は出力無し?)を
すべて列挙し、それらについて加減乗除剰余の表を出力する
負数同士の剰余とかは単純に%で出せるとは限らないから
一度絶対値を取って%で計算してから調整する
これでおk?
0188デフォルトの名無しさん
2010/04/16(金) 14:51:460189デフォルトの名無しさん
2010/04/16(金) 15:25:34「任意の」って書いてあると
可能な組み合わせの中から(ユーザが)1つ選ぶってニュアンスが強いような気がするんだ
0190デフォルトの名無しさん
2010/04/16(金) 15:49:450191デフォルトの名無しさん
2010/04/16(金) 16:03:340192デフォルトの名無しさん
2010/04/16(金) 16:22:000193デフォルトの名無しさん
2010/04/16(金) 16:30:29>チェックすること。
これの意味がいまいちわからん。
0194デフォルトの名無しさん
2010/04/16(金) 16:32:35%d で受けるのではなく、
%s で受けて パースしつつ整数値を切り出せ ってことかねぇ
0195デフォルトの名無しさん
2010/04/16(金) 16:37:325個の数が全て同じなら、「2つの異なる数」は無いわけで、そのエラーメッセージが定義できないなら、
それなら20回同じ答えを出せばいい。
0196195
2010/04/16(金) 16:39:48#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#define N 5
int main(void){
char str[80] = {0}, pri[80] = {0};
int data[N], i, j;
for(i=0; i<N; i++){
fgets(str, 80, stdin);
str[strlen(str)-1] = '\0';
sscanf(str, "%d", &data[i]);
sprintf(pri, "%d", data[i]);
/**/printf("<%s><%s>\n", str, pri);
if(strcmp(str,pri)) i--;
}
for(i=0; i<N; i++) {
for(j=0; j<N; j++) {
if(i == j) printf("--- ---,");
else printf("%3d %3d,", data[i], data[j]);
}
printf("\n");
}
}
0197デフォルトの名無しさん
2010/04/16(金) 16:42:47ああ、そういう。。
fgetsが許可されてるけどsscanfがないし、scanfがあるわで意味分からんかった
0198デフォルトの名無しさん
2010/04/16(金) 16:43:39sscanf, sprintf 系列が許されていたとして
sscanf(buf, "%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5) == 5 かつ
sprintf(buf2, "%d %d %d %d %d", a1, a2, a3, a4, a5); strcmp(buf,buf2) == 0 ってことかね?
入力文字列を整数化した際 singned/unsigned の境界をまたいでて値が裏返るケースを検出しろ
ということかね?
0199195
2010/04/16(金) 17:30:11#include <stdio.h>
#define N 5
int main(void){
int data[N] = {1,2,-3,4,0}, i, j, k;
char name[6][20] = {"入力","和","差","積","商","剰余"};
for(k=0; k<=5; k++) {
puts(name[k]);
for(i=0; i<N; i++) {
for(j=0; j<N; j++) {
if(i == j) {
if(k==0) printf("--- ---,");
else printf("---, ");
}
else switch(k){
case 0: printf("%3d %3d, ", data[i], data[j]); break;
case 1: printf("%3d, ", data[i]+data[j]); break;
case 2: printf("%3d, ", data[i]-data[j]); break;
case 3: printf("%3d, ", data[i]*data[j]); break;
case 4: if(data[j] == 0) printf("DIV0 ");
else printf("%3d, ", data[i]/data[j]); break;
case 5: if(data[j] == 0) printf("DIV0 ");
else printf("%3d, ", data[i]%data[j]); break;
}
}
printf("\n");
}
}
}/* j <-- 釣り針 */
0200195
2010/04/16(金) 18:49:58#pragma warning(disable : 4996)
#include <stdio.h>
int main(void){
int aa[12]={3,3,-3,-3,2,2,-2,-2,1,1,-1,-1}, bb[12]={2,-2,2,-2,2,-2,2,-2,2,-2,2,-2};
int i, a, b, a1, d, m;
for(i=0; i<12; i++) {
a = aa[i], b = bb[i];
d = a/b, m = a%b;
/**/printf("d=%d m=%d, ", d, m);
if(m != 0 && a<0) {
if(b<0) d++;
else d--;
}
printf("%d / %d = %d ... %d\n", a, b, d, a-b*d);
}
}
0201195
2010/04/16(金) 20:49:40#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int main(void){
int a, aa[8]={0x3ff0ffff, 0x3ff0ffff,-0x3ff0ffff,-0x3ff0ffff,999,999,-999,-999};
int b, bb[8]={0x6fe0ffff,-0x6fe0ffff, 0x6fe0ffff,-0x6fe0ffff,888,-888,888,-888};
int c, i;
for(i=0; i<8; i++) {
a = aa[i], b = bb[i];
puts("");
/* 加算 */
printf("%d + %d = ", a, b);
c = a + b;
if(a>0 && b>0 && c<0) puts("ERR");
else if(a<0 && b<0 && c>0) puts("ERR");
else printf("%d\n", c);
/* 減算 */
printf("%d - %d = ", a, b);
c = a - b;
if(a>0 && b<0 && c<0) puts("ERR");
else if(a<0 && b>0 && c>0) puts("ERR");
else printf("%d\n", c);
/* 乗算 */
printf("%d * %d = ", a, b);
c = a * b;
if(c/a != b) puts("ERR");
else printf("%d\n", c);
}
} /* J <-- 釣り針終わり */
0202デフォルトの名無しさん
2010/04/16(金) 21:49:060203デフォルトの名無しさん
2010/04/16(金) 21:55:540204デフォルトの名無しさん
2010/04/16(金) 22:02:54問題の原文そのまま出してくれ
0205デフォルトの名無しさん
2010/04/16(金) 22:36:11普段使わないから存在を忘れてたけど、
goto使えってことじゃないか?
0206デフォルトの名無しさん
2010/04/17(土) 00:26:50[2] 問題文(含コード&リンク):
25×25マスの数独の解を求めるプログラムを作成せよ。
テキストファイルに入力した問題(数字マスは半角数字、空マスは半角スペースで入力)を引数から指定し
解を出力する。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語:C言語
[4] 期限: 4月23日中
[5] その他の制限:無制限
0207デフォルトの名無しさん
2010/04/17(土) 01:01:00無制限って処理速度とかメモリ効率も考えなくて良いのか?
簡単なアルゴリズムだと総当りで、メモリも大量に使用するけど、
25×25だと、空のマスの状態次第で結構な時間とメモリを消費しそうな気が…
まぁ、ちょっとした工夫でメモリはなんとでもなるが、
時間はアルゴリズムを考えないとならんが、数独の得意な奴じゃないと分からんと思うし…
あと、入力方法は、半角数字2桁(頭0詰)で、空マスは半角スペース2つでOKなのか?
正しいか確認するために、その問題自体も出して欲しいところだ。
0208デフォルトの名無しさん
2010/04/17(土) 01:53:30数独得意じゃなくてもできると思うよ
答えが複数あるとか検知できないし、効率もわるいけど。。
0209デフォルトの名無しさん
2010/04/17(土) 01:55:120210デフォルトの名無しさん
2010/04/17(土) 07:20:06斜め?
タテとヨコとブロックじゃないか?
0211デフォルトの名無しさん
2010/04/17(土) 07:50:38通常の9×9程度であれば、全数検索で問題ないが、
25×25なんて、相当量の投機実行が走る(いつまで立っても終わらないほどの)から、
どうすれば、無駄を省けるかアルゴリズムを考える必要があるんじゃないか?
まぁ、相当量ってのも、単なる直感だから充てにならんけど
空きマスの数に応じて指数的に増えていくからね…
0212デフォルトの名無しさん
2010/04/17(土) 12:01:060213デフォルトの名無しさん
2010/04/17(土) 13:41:32http://suudoku.blog26.fc2.com/blog-category-61.html
0214デフォルトの名無しさん
2010/04/17(土) 16:51:390215デフォルトの名無しさん
2010/04/17(土) 17:45:12普通のヒューリスティックな探索的解法しか知らないが
その方法による限りかなり言語を選ぶ問題じゃないかと
もちろんCでもできるだろうが、できればJavaせめてC++
で書いたほうがずっと見通しがよく書けるんじゃないかと...
(この手の問題は同じ構造のものを投機的に複製すること
ができるか否かで、コードの見通しがだいぶかわってくる。
メモリ自主管理を重視するカーネルサイドなC言語のステージだと
基本的にそういうアルゴリズムはタブーなんで
Cに慣れれば慣れるほど書きづらくなる)
なんでCで書けと指定する出題者は相当に意地悪
0216デフォルトの名無しさん
2010/04/17(土) 18:49:22ヒューリスティックな探索的解法ってどんな方法?
基本的には、問題の表を構造体にして、いくつかのパターンで
確定OKの数字や確定NGの数字を上書きし、ひとつのパターンでも上書きが発生した場合はループ、
全てのパターンで上書きが発生しなかった場合は、構造体を複製して、
未確定部分に適当な数字を入れて投機(再起)する位しか思いつかんが、
その投機の優先順位を動的に入れ替えるってこと?
0217デフォルトの名無しさん
2010/04/17(土) 19:08:11浅い段で簡単に枝狩りができるとも限らない
タイプだろから単純な深さ優先だけじゃ
なかなか見つからないだろうから
幅優先探索の要素も取り入れるってのは
よく行われるんじゃね?
0218デフォルトの名無しさん
2010/04/17(土) 19:29:50取り合えず思いついた構造体の定義をば…
#define MATH_ROW 3
#define MATH_COL 3
#define MIN_NUM 1
#define MAX_NUM MATH_ROW*MATH_COL
typedef enum enumCellStat { UNKNOWN, NG, OK } cellStat;
typedef struct structCellInfo {
cellStat stat;
cellStat allStat[MATH_ROW*MATH_COL];
} cellInfo;
typedef struct structMathInfo {
cellInfo math[MATH_ROW][MATH_COL];
struct structMathInfo *parent;
} mathInfo;
0219デフォルトの名無しさん
2010/04/17(土) 19:39:53#define MATH_ROW 5
#define MATH_COL 5
#define MIN_NUM 1
#define MAX_NUM MATH_ROW*MATH_COL
typedef enum enumCellStat { UNKNOWN, NG, OK } cellStat;
typedef struct structCellInfo {
cellStat stat;
int blockNo;
cellStat allStat[MAX_NUM];
} cellInfo;
typedef struct structMathInfo {
cellInfo math[MAX_NUM][MAX_NUM];
struct structMathInfo *parent;
} mathInfo;
0220デフォルトの名無しさん
2010/04/17(土) 20:40:420221デフォルトの名無しさん
2010/04/17(土) 20:51:05直感でいって、たぶんたいしたことにならないよ
100*100になったら何メガかは食いそうだけど
0222デフォルトの名無しさん
2010/04/17(土) 23:24:04>>213は解けた。
http://codepad.org/Ir78KXuh
テキストファイルから入力するのは、誰かやってくれ。
0223デフォルトの名無しさん
2010/04/18(日) 00:14:380224デフォルトの名無しさん
2010/04/18(日) 00:39:19ビットが2つ以上立ってるパターンの取り方上手いな。
後は、単純に解を得られないパターンの修正か…
0225デフォルトの名無しさん
2010/04/18(日) 00:54:57{ 0, 0, 0, 0, 0, 5, 9, 0, 0, },
{ 0, 9, 0, 0, 0, 4, 1, 0, 0, },
{ 0, 0, 4, 4, 0, 0, 0, 0, 0, },
{ 0, 6, 9, 0, 0, 0, 0, 0, 0, },
{ 8, 2, 0, 0, 0, 0, 0, 3, 5, },
{ 0, 0, 0, 0, 0, 0, 4, 8, 0, },
{ 0, 0, 0, 0, 0, 7, 2, 0, 0, },
{ 0, 0, 8, 1, 0, 0, 0, 4, 0, },
{ 0, 0, 5, 3, 0, 0, 0, 0, 0, },
0226デフォルトの名無しさん
2010/04/18(日) 00:55:37{ 7, 8, 3, 2, 1, 5, 9, 6, 4, },
{ 5, 9, 2, 8, 6, 4, 1, 7, 3, },
{ 6, 1, 4, 7, 9, 3, 5, 2, 8, },
{ 4, 6, 9, 5, 3, 8, 7, 1, 2, },
{ 8, 2, 7, 9, 4, 1, 6, 3, 5, },
{ 3, 5, 1, 6, 7, 2, 4, 8, 9, },
{ 9, 3, 6, 4, 8, 7, 2, 5, 1, },
{ 2, 7, 8, 1, 5, 9, 3, 4, 6, },
{ 1, 4, 5, 3, 2, 6, 8, 9, 7, },
0227デフォルトの名無しさん
2010/04/18(日) 00:56:33ナイーブな方法で解いた。
問題の配列は>>222から拝借した。入力した>>222に感謝!
テキストからの読み込みは誰かにまかせた。
0228デフォルトの名無しさん
2010/04/18(日) 00:56:480229デフォルトの名無しさん
2010/04/18(日) 01:11:19得られた解答、まぁ、明日だな。
0 0 0 0 0 5 9 0 0
0 9 0 0 0 4 1 0 0
0 0 4 4 0 0 0 0 0
0 6 9 0 0 0 7 0 0
8 2 0 0 0 0 6 3 5
0 0 0 0 0 0 4 8 0
0 0 0 0 0 7 2 0 0
0 0 8 1 0 0 0 4 0
0 0 5 3 0 0 8 0 0
0230デフォルトの名無しさん
2010/04/18(日) 01:16:583×3の難問
{ 0, 0, 0, 0, 0, 5, 9, 0, 0, },
{ 0, 9, 0, 0, 0, 4, 1, 0, 0, },
{ 0, 0, 4, 7, 0, 0, 0, 0, 0, },
{ 0, 6, 9, 0, 0, 0, 0, 0, 0, },
{ 8, 2, 0, 0, 0, 0, 0, 3, 5, },
{ 0, 0, 0, 0, 0, 0, 4, 8, 0, },
{ 0, 0, 0, 0, 0, 7, 2, 0, 0, },
{ 0, 0, 8, 1, 0, 0, 0, 4, 0, },
{ 0, 0, 5, 3, 0, 0, 0, 0, 0, },
>>227は正しい結果が得られる
0231デフォルトの名無しさん
2010/04/18(日) 01:35:110, 0, 0, 0, 0, 0, 0, 1, 0,
4, 0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 0, 4, 0, 7,
0, 0, 8, 0, 0, 0, 3, 0, 0,
0, 0, 1, 0, 9, 0, 0, 0, 0,
3, 0, 0, 4, 0, 0, 2, 0, 0,
0, 5, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 8, 0, 6, 0, 0, 0,
>>227だと40秒程度で解ける
ソースを細かく見てないから何とも言えんが
予想通り25×25は単純な方法じゃ終わらんな…
6 9 3 7 8 4 5 1 2
4 8 7 5 1 2 9 3 6
1 2 5 9 6 3 8 7 4
9 3 2 6 5 1 4 8 7
5 6 8 2 4 7 3 9 1
7 4 1 3 9 8 6 2 5
3 1 9 4 7 5 2 6 8
8 5 6 1 2 9 7 4 3
2 7 4 8 3 6 1 5 9
0232デフォルトの名無しさん
2010/04/18(日) 01:57:28http://codepad.org/f43RW5fW
0233デフォルトの名無しさん
2010/04/18(日) 01:58:19入力ファイルはタブ区切りで。
0234232
2010/04/18(日) 02:07:48>>231が6分くらいで解けたわ
>>230は10秒くらい。
25*25も一晩ぐらいかけたら解けるんじゃないの、という楽観的な。
0235デフォルトの名無しさん
2010/04/18(日) 05:52:43IsValidがあんまりなのでCanPutに変えた。
>>231が4秒くらい。
25*25は7秒くらい。
0236235
2010/04/18(日) 06:04:59>>227を使用
>>231 11秒
25*25 1秒以内
>>235を使用
>>231 4秒
25*25 7秒
0237デフォルトの名無しさん
2010/04/18(日) 06:43:29http://codepad.org/YQlNJ05t
しかし根本のアルゴリズムを変えないと、25*25の難問は終わらないな。
0238デフォルトの名無しさん
2010/04/18(日) 09:42:34>>227を改良。>>231を解いたときの実行時間が1/10程度になったけどcodepadだとタイムアウトする。
0239デフォルトの名無しさん
2010/04/18(日) 10:36:40矛盾してる
0240デフォルトの名無しさん
2010/04/18(日) 11:52:350241デフォルトの名無しさん
2010/04/18(日) 15:33:10失敗という論理が許されず、何らかの形で対処しなければ
ならないカーネルコードの世界で育ったCでは、失敗したら
潔く捨てるという考えとは対極を為すものかも知れないな
0242デフォルトの名無しさん
2010/04/19(月) 03:12:12これに書かれてる25*25はすぐ終わったけど、難問データってどんなのですか?
0243デフォルトの名無しさん
2010/04/19(月) 06:40:23[2] 問題文:下記
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005で動くもの
[3.3] 言語:どちらでも可
[4] 期限: 2010/04/21
[5] その他の制限: なし
学生番号、氏名、カナ、点数(少数第1位まで)、クラス(3桁)を入力しファイルに出力する。(カンマ区切り)
入力したファイルを読み取り、メニューを作成し次の処理を行えるようにする。
・ 学生番号で昇順、降順に並べ替えてファイルに出力する。
・ 氏名で昇順、降順に並び替えてファイルに出力する。
・ 点数で昇順、降順に並び替えてファイルに出力する。
・ 各項目について修正を行えるようにする。
・ 点数の平均を画面に出力する。
・ クラス別に学生番号で昇順、降順を指定してファイルに出力する。
【画面例】
<メニュー>
1 学生番号で並び替え 2.氏名で並び替え
3.点数で並び替え 4.修正
5.平均の出力 6.クラス別で出力
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
メニュー番号=>
【データ】
学生番号 8桁
氏名 12桁
カナ 12桁
点数 3桁(小数点第1まで)
クラス 3桁
12000001, 田中太郎, タナカタロウ, 40.5, 003
よろしくお願いします
0244デフォルトの名無しさん
2010/04/19(月) 21:29:52その25*25は>>213の問題だが、単純な方法ですぐに解ける易問。
一方、>>231レベルの難問で25*25ならどうだろう、ってことで。
ただ、盤面サイズn(9や25)に対して計算量はO(n^4)なので、
(25/9)^4=約60倍となり、終わらないってことはないか。
あと>>240が、候補の少ないマスの探索を先に行う方法で
高速化していたので、アイデアを使わせていただいたところ、
>>231が約5ミリ秒で解けるようになった。
http://codepad.org/iJVIhwMF
(速すぎるので64回繰り返し解いて、時間を計測している。)
これなら25*25の難問が来ても1秒以内でいけそう。
0245デフォルトの名無しさん
2010/04/20(火) 00:12:40なるほど。
枝刈りは重要だけど、枝刈りしなくてもそこそこ早く終わるという事例か
0246デフォルトの名無しさん
2010/04/20(火) 00:16:11しっかり枝狩りしてるじゃん
0247デフォルトの名無しさん
2010/04/20(火) 00:20:26終わらないという予測は外れたんだなぁと。
0248デフォルトの名無しさん
2010/04/20(火) 00:21:490249デフォルトの名無しさん
2010/04/20(火) 00:46:08フラグの倒し方と、データの持たせ方に目から鱗が落ちるばかりなんだけど、今回のために思いついた?
それとも何かで知ってた?
こういうセンスがすごくほしい
0250デフォルトの名無しさん
2010/04/20(火) 01:26:47一つの可能解の探索なら候補の少ないものを優先的に行う
ほうが幅優先探索性が高まるが、幅優先探索そのものでは
ないので、運が良くない限り速くはならない。
タチの悪い問題の場合は、25x25のケースで620個まで
埋まるが何故か解けなく結局それは最初のマスの投機的決定が
間違ってたという例もあり得る。経験上埋まるが何故か完全には
埋まらない場合はそういうのがその近傍にやたらと多い
ちゃんと木を作って枝狩りしながら深く延ばせる枝を絞り込んでいく
方法が最善なんだろうがメモリ容量の問題が..
あと解の一意性のチェックは大切でこれがないと問題を解いたことには
ならないんじゃね?
0251デフォルトの名無しさん
2010/04/20(火) 01:30:27ちょっとロジック書いてくれないか
高度なレスが多いから期待も高い
0252デフォルトの名無しさん
2010/04/20(火) 01:39:51高度かどうか知らんがプログラムが出来上がらない→金にならない
これがすべてだろ。
0253デフォルトの名無しさん
2010/04/20(火) 02:54:17できるだけ速く見つけたいというのであれば
選択枝が小さいものから順次とか随時矛盾チェックとか
いろいろと山の賭けかたにはノウハウはあるのかも知れないが
この問題の場合、列挙の途中で見つかる解を出力する
アルゴリズムだから、結局最終的には運だとしかいいようが
ないような感じ
0254デフォルトの名無しさん
2010/04/20(火) 03:02:49倍程度(裏を返せばビット変数を使うことにより処理時間が
半分になることが期待できる)
できればビット変数を使わないコードのほうが美しいような
気がする
0255デフォルトの名無しさん
2010/04/20(火) 03:36:200256デフォルトの名無しさん
2010/04/20(火) 09:36:06[2] 問題文(含コード&リンク): 配列をソートするために、クイックソートをMPIを用いて並列化せよ。
[3] 環境
[3.1] OS: Red Hat Linux
[3.2] コンパイラ名とバージョン: gcc 3.3.2
[3.3] 言語: C
[4] 期限: 2010年04月23日23:00まで
[5] その他の制限: OpenMPではなくMPIを使う
MPIです。すみません。
よろしくお願いします。
0257デフォルトの名無しさん
2010/04/20(火) 10:08:21全数とはいっても全てのマスが独立しているわけではなく
あるマスを決定した段階で他のマスの選択肢が減る訳だから
どこから始めるかは重要
ちなみに >>240 は解を全て列挙するが
選択肢の少ないマスから試行するのをやめると
100倍以上実行時間が変わる
0258デフォルトの名無しさん
2010/04/20(火) 11:11:25個数はあまり関係が無いみたいだから一筋縄じゃいかないし
そこが面白いといえば面白いんだが...
0259デフォルトの名無しさん
2010/04/20(火) 13:01:1512が一番多いなら、選択肢が少ないかつ12が置けるところにおいてみるっていう感じ
0260デフォルトの名無しさん
2010/04/20(火) 22:24:24何かしらの法則で解いていかないと100倍どころか一生終わらないんだが誰も気づかないのか?
0261デフォルトの名無しさん
2010/04/20(火) 22:26:220262デフォルトの名無しさん
2010/04/20(火) 22:31:170263デフォルトの名無しさん
2010/04/20(火) 22:32:43数字のマス(つまり制約)が減るということなので、
簡単に解けるようになり、解の数は多くなると予想。
空き具合がちょうどいいあたりに「難問」があるのでは?
0264デフォルトの名無しさん
2010/04/20(火) 22:36:29単純な方法だと>>230と>>231の差で>>234位の差がでるのに早くなると思うの?
0265デフォルトの名無しさん
2010/04/20(火) 22:38:28ちなみに、難問って言うのは、絶妙に数を減らし行って、
空きマスを増やしてるから、解は1つしかないよ。
0266デフォルトの名無しさん
2010/04/20(火) 23:19:43全部が空きマスの場合は簡単に解け、
そこから数字を置いていくと徐々に難しくなるので、
難易度のピークは両極端には無く、その間にあると思う。
>>265
つまり、解が1つのままで空きマスを最大どれだけ取れるか、
そしてその空きマスは>>231よりどれだけ多いか、ということね。
想像できん。
0267デフォルトの名無しさん
2010/04/21(水) 00:47:47選択肢最小を選ぶか否かだと速度は 20% 程度しか変わらなかった
>>231 の問題に対して試行したもの
1.選択肢最大のマスから埋めると 10回 解くのに 10〜11秒
2.左上から順にみて一番最初の空白マスから埋めると 1000回 解くのに 2.6〜2.8秒
3.選択肢最小のマスから埋めると 1000回 解くのに 2.2〜2.4秒
2.は左上から順に見ていくことによって左上周辺の選択肢が狭まり
結果的に3.の状況に近くなるものと思われる
1 と 3 の実行速度の差は約450倍にもなるため
仮置きするマスの決め方がとても重要であることは分かる
※ 但し >>231 の場合にうまくはまっただけの可能性もある
0268231
2010/04/21(水) 01:04:30そのまんまのコードで、リピート数を16回に減らして、100種類まわしてみたけど、
予想してたより、結構早い。
こら、出る幕ねーな…
http://codepad.org/9DInhVnz
0269デフォルトの名無しさん
2010/04/21(水) 02:09:39この系統の問題は最初からあんましコードをセキュア
に書くと後で非常に辛い思いをするだろな
0270デフォルトの名無しさん
2010/04/21(水) 02:48:11けれど、25*25が終わらないと予測するのはあまりにも今の時代にそぐわないのではないか?というところでしょ。
アルゴリズムにしろコードにしろ何の結果も出さないあなたが、見積もりもできないわけで、
じゃあ何ができるの?
0271デフォルトの名無しさん
2010/04/21(水) 02:51:21解答を導くプログラムにおいては1つの解答が得られれば問題ない。
問題が適切であるかどうかをチェックするプログラムなら複数の回答があるかどうかをチェックする必要がある。
0272デフォルトの名無しさん
2010/04/21(水) 23:05:18[2] 問題文(含コード&リンク):
整数の入った配列中の、各整数の個数を出力せよ。
例えば、P[4]={1, 2, 3, 1} ならば出力は
0 0
1 2
2 1
3 1
4 0
となる。配列の要素数までの各整数の個数を出力すれば良い。
[3] 環境
[3.1] OS: Windows7
[3.2] Visual C++ 2008 Express
[3.3] 言語: C
[4] 期限: 明後日まで
[5] その他の制限:冗長なプログラムにならないこと。
0273デフォルトの名無しさん
2010/04/21(水) 23:22:03Windows XP/cygwin(gcc 3.4.4) で確認
http://ideone.com/snoBo
0274デフォルトの名無しさん
2010/04/22(木) 00:06:39[2] 問題文:
unixのソケット通信を使ったTCP/IPの通信型プログラムで、まず認証の方法として
ユーザー名とパスワードを打ち込みサーバー側が認証され、その後サーバー側からは
クイズを出題する状態になっていて5問正解した場合(正解数はサーバー、クライアント
両方保持した状態)、暗証のメッセージを送信するということになっていて、
その場合のクライアント側のプログラムを作成せよ(書き方がおかしかったら
すいません)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:c
[4] 期限: 2010/04/22
[5] その他の制限: なし
0275デフォルトの名無しさん
2010/04/22(木) 00:09:33プロトコルの仕様は指示されてないの?
0276デフォルトの名無しさん
2010/04/22(木) 00:15:01特に指示はないです
0277デフォルトの名無しさん
2010/04/22(木) 01:12:40時代にそぐとか、もうアホじゃないかと。
この問題は、単純に決まらない空きマスが一つ増える度に、
計算量が数倍になっていくから、見積もるとか、それ以前の問題なのに…
本気で解くことを考えるなら、もっとアルゴリズムを見直すことが必要。
0278デフォルトの名無しさん
2010/04/22(木) 01:14:33宿題ならサーバー側のソースは渡されてるか、何かしら説明があるんじゃないの?
じゃないと作りようがない
0279デフォルトの名無しさん
2010/04/22(木) 02:50:56プロトコルも何も単に行区切りのテキストストリームでいいんじゃない?
そうすればechoサーバー見たいにtelnetクライアントでも繋がる。
0280デフォルトの名無しさん
2010/04/22(木) 06:23:41ソースは渡されています
後IPアドレスとポート番号が決まっています
0281デフォルトの名無しさん
2010/04/22(木) 07:03:46280で書いたこと勘違いで、ソースは渡されてませんでした
0282デフォルトの名無しさん
2010/04/22(木) 13:31:10やっぱ本気で解くことを考えるならサイズ制限入れちゃだめですよね。
それでかつ速度は予測できないけど、最速を目指すべきですよね。
0283デフォルトの名無しさん
2010/04/22(木) 13:48:03telnet がプロトコルだということを知らない馬鹿か?
teletで繋がるのはサーバー側がtelnetプロトコルに準拠しているからに他ならん
0284デフォルトの名無しさん
2010/04/22(木) 15:03:34telnetクライアントで80、25、110あたりにつないだことのない人?
0285デフォルトの名無しさん
2010/04/22(木) 15:59:25TCPについて調べておいた方がいいよ
0286デフォルトの名無しさん
2010/04/22(木) 17:55:04telnet のオプション交渉はサーバー側から始まるからそれを開始しない
echo サーバーやsmtp, httpに繋げるとtelnetクライアントはhalf duplex、
local echoモードのtcpクライアントとして使える.
>>274
あ、宿題はクライアントかw サーバー側かと勘違いしてたw
0287デフォルトの名無しさん
2010/04/22(木) 18:35:14そりゃサーバの仕様教えてもらえないとどうにもならない
0288デフォルトの名無しさん
2010/04/22(木) 19:42:52えええ、まじで telnet がプロトコルだって知らないのか????
常識知らずにも程があるぞ、当然RFCでも定義されてるけどな。
ttp://tools.ietf.org/html/rfc854
で、http, smtp, pop3 に telenet で接続できるから何なの?
後発のプロトコルが telnet と互換性があるように設計されるのは普通のことだろ。
>>285
TCPってwwwほんと無知だな。
今はTCPに乗っかってるけど、昔は IP 上動いてたこととか知らないんだろうな。
あ、もしかして、君たちはPと言う文字が入ってるものだけがプロトコルだと思ってるのか。
きっとそうだろうな、あ〜恥ずかしい。
0289デフォルトの名無しさん
2010/04/22(木) 19:59:14おかげさまでどうにか間に合いそうです。
どうもありがとうございました。
0290デフォルトの名無しさん
2010/04/22(木) 20:01:52http smtp pop3がtelnetプロトコルと互換性があると書かれているように読めるんだけど、
もちろん俺がすごい読み間違いをしてるんだよな?
もうちょっとちゃんと伝えてくれ。
0291デフォルトの名無しさん
2010/04/22(木) 20:55:440292デフォルトの名無しさん
2010/04/22(木) 21:03:300293279
2010/04/22(木) 21:47:18>>288
>後発のプロトコルが telnet と互換性があるように設計されるのは普通のことだろ。
互換ってcr/lfで分けた行がメッセージ単位って事? だから「行区切りのテキストストリーム」
と言ったのだが?
それから後発のテキストベースのプロトコルで互換があるってそれだけ.
telnetのコマンドを送られても大抵のサーバーは混乱するぞ.
試しに^Cを押してInterrupt Processコマンドを送るとsmtpサーバーなんて
混乱してコマンド受け付けなくなるよ。
ちなみに自分はtelnetクライアント、サーバーの保守をしばらくしてたから
プロトコルは分かってるつもり。
0294デフォルトの名無しさん
2010/04/22(木) 22:17:120295デフォルトの名無しさん
2010/04/22(木) 22:18:07[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10573.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10574.txt
番号 名前 取得資格(1,0で表記)という書式の
txtファイルをfscanfで読み込んで、取得資格文字列に1が1つでも含まれる行を出力する。
(省略しているが、このプログラムより上に出力されたものと文字を合わせるため、
取得資格文字列の出力は1文字づつ間にスペースを空ける)
上のソースファイルで実行すると、途中で止まってしまいますがどこが間違ってますか?
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:fscanfを用いる
0296デフォルトの名無しさん
2010/04/22(木) 22:36:17配列の大きさが足りないんじゃないかな
0297デフォルトの名無しさん
2010/04/22(木) 23:13:05no[5]にしたらちゃんと表示されました。ありがとうございました。
でもなんで足りなかったんでしょう?noは4ビットなのに。
0298デフォルトの名無しさん
2010/04/22(木) 23:27:12あと、バイトじゃね?
0299デフォルトの名無しさん
2010/04/22(木) 23:35:07文字列の終わりをあらわすんでしたっけ?\0
それだとsikaku[6]はなぜ足りてることになるんですか?
0300デフォルトの名無しさん
2010/04/22(木) 23:39:49動いてるのはたまたま。
7にしましょう。
0301デフォルトの名無しさん
2010/04/22(木) 23:42:33telnetクライアントを使ってtcp/ipでテキストストリームで通信するのは全く別の問題だろ?
シリアルポートや、tcp/ipオーバーで、ホストをリモート操作できるのは、
ホスト・クライアントが同じtelnetプロトコルで動いてるからだし、httpやpop3に接続できるのは、
telnetクライアントが、様々な環境に対応できるように最低限の
tcp/ipオーバーの機能を提供した結果が、テキストストリームで通信できるだけって話じゃないの?
何でリモート操作するためのtelnetプロトコルが、httpやpopと互換性があるって話になるの?
互換性があるのは、tcp/ipオーバーで通信をしているってことだけじゃないのか?
0302デフォルトの名無しさん
2010/04/22(木) 23:55:38ありがとうございました。
基本的なことでしたね。
0303デフォルトの名無しさん
2010/04/23(金) 00:13:38>telnetクライアントが、様々な環境に対応できるように最低限の
> tcp/ipオーバーの機能を提供した結果が
ちがう。 以下のRFCの文に続く定義により、telnetオプションが交渉される前には
ラインバーファーされたhalf duplexモードにクライアントがなるので「様々な環境で」
他のテキストベースのtcpサーバーと通信出来る。 別にわざわざ対応した訳ではない。
Although a TELNET connection through the network is intrinsically full duplex,
the NVT is to be viewed as a half-duplex device operating in a line-buffered mode.
That is, unless and until options are negotiated to the contrary, the following default
conditions pertain to the transmission of data over the TELNET connection:
0304デフォルトの名無しさん
2010/04/23(金) 01:36:51俺もRFC初めて見たけど、意味分かって書いてないだろ?
>ラインバーファーされたhalf duplexモードにクライアントがなるので
一行単位の処理だろうが、全二重だろうが半二重だろうが、
他のプロトコルと通信できる理由になってない。
ポイントを整理すると下記のような理由で通信できる。
1. telnetでは、必ずNVT(ネットワーク仮想端末)を通して通信するように定義されている。
2. NVT間では、変換されないことが保証されている
3. NVTの入出力はUSASCIIにて行う
4. USASCIIを使用するプロトコルであれば問題は発生しない
telnet通信イメージ→ クライアント <変換> クライアントNVT <未変換(over tcp/ip)> ホストNVT <変換> ホスト
他の通信イメージ→ クライアント <変換> クライアントNVT <未変換(over tcp/ip)> httpなど
0306デフォルトの名無しさん
2010/04/23(金) 03:33:350307デフォルトの名無しさん
2010/04/23(金) 09:25:160308デフォルトの名無しさん
2010/04/23(金) 10:20:10従ってプロトコルとは無縁、プロコトルなんて必要ねえ
英文だからわかりにくいけどさ、
ガチで読めばRFCにもtelnetはプロトコルではないと書いてあるぞ
0309えーご
2010/04/23(金) 11:02:23http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html
0310デフォルトの名無しさん
2010/04/23(金) 12:49:42そうだよね
そこにもtelnetがプロトコルでないことがはっきり書いてある
0311デフォルトの名無しさん
2010/04/23(金) 20:54:28RFC 854はtelnet protocolの仕様だから、過去の経緯は兎も角として
とりあえずtelnetプロトコルというものは存在すると思われる。
http://tools.ietf.org/html/rfc854
0312デフォルトの名無しさん
2010/04/24(土) 11:47:44[2] 問題文: ユーザーにサイズN(最大で100000)を入力させ、そのサイズのArrayを1〜100までのランダムな数字で埋めた後、N個のランダムな数字を数字1、数字2、数字3・・・という具合にカウントするプログラムを書きなさい
(元の文が英文なのですが、約した際に何かしら抜け落ちている点が在るかもしれないので一応原文も記載しておきます)
Write a program that asks user to enter a size, N. (The maximum is 100000). Write a
function that generates random numbers in range of 1 ~ 100 and fill an array of size N.
You also need to count how many 1’s, 2’s, 3’s,
4’s, 5’s, …, 100’s. If the random number function does it job perfectly, the distribution to
each number should be equal. But they might be slightly off.
3] 環境
[3.1] OS:Vista
[3.2] コンパイラ名とバージョン:Visual C++ 2008
[3.3] 言語:C++
[4] 期限: 2010/04/30
[5] その他の制限: なし
0313デフォルトの名無しさん
2010/04/24(土) 12:01:13#include <stdlib.h>
int myrand(void) { return (int)(rand() / (RAND_MAX + 1.0) * 100 + 1); }
int main(void)
{
int i, *array, N, cnt[101] = {0};
srand(time(NULL));
do {
printf("Enter a size(The maximum is 100000);");
scanf("%d", &N);
}while(N < 1 || 100000 < N);
array = malloc(N * sizeof(int));
for(i=0; i<N; i++) {
array[i] = myrand();
cnt[array[i]]++;
}
for(i=1; i<=100; i++) printf("%3d : %d\n", i, cnt[i]);
free(array);
return 0;
}
0314デフォルトの名無しさん
2010/04/24(土) 12:32:16If the random number function does it job perfectly, the distribution to
each number should be equal. But they might be slightly off.
全然関係ないが、数学的に言えば、ランダム関数が完全な仕事をすれば、
全ての数が一致する可能性はNが大きくなるにしたがって低くなる
(数を一致させるためには、数が偏らないように、ランダムを偏らせる必要がある)
int rand100(){
int r = rand();
while(true){
if(r >= randmax) continue;
return r/(RAND_MAX/100)+1;
}
}
0316デフォルトの名無しさん
2010/04/24(土) 13:43:04>int r = rand();
その位置はネタだよな?
const int randmax = (RAND_MAX / 100) * 100;
int rand100(){
while(true){
int r = rand();
if(r >= randmax) continue;
return r/(RAND_MAX/100)+1;
}
}
0318デフォルトの名無しさん
2010/04/24(土) 15:02:19このパズルを解くプログラム
0319デフォルトの名無しさん
2010/04/24(土) 15:48:200320デフォルトの名無しさん
2010/04/24(土) 16:00:430321デフォルトの名無しさん
2010/04/24(土) 17:00:15総当りの頭の悪い方法
#include <stdio.h>
int c[13];
int check(char *a) {
int add = a[0]+a[5]+a[6]+a[2], i;
for(i=1; i<5; i++) if(add!=a[i]+a[i+5]+a[(i+1)%5+5]+a[(i+2)%5]) return 0;
return 1; }
void f(int size, int pos, char *a) {
int i, j;
if(size == pos) {
if(check(a)) {
for(i=1; i<=12; i++) c[i] = 0;
for(i=0; i<10; i++) {
printf("%d ", a[i]);
c[a[i]] = 1;}
putchar('\n');
for(i=1; i<=12; i++) if(!c[i]) printf("%d ", i);
putchar('\n');}
return;}
for(i=4; i<=12; i++) {
for(j=3; j<pos; j++) if(i==a[j]) goto L;
a[pos] = i;
f(size, pos+1, a);
L:;}}
int main(void) {
char a[10] = {1,2,3};
f(10,3,a);
return 0;
}
0322デフォルトの名無しさん
2010/04/24(土) 18:01:58工夫ナシw 総当り。9!頑張る。
ttp://codepad.org/L9Wwyg8b
0324デフォルトの名無しさん
2010/04/24(土) 22:24:34配列に埋めるところまでが関数の仕様だと思うよ
0325デフォルトの名無しさん
2010/04/25(日) 02:28:390326デフォルトの名無しさん
2010/04/25(日) 02:32:58[2] 問題文: ttp://www1.axfc.net/uploader/He/so/274810
pass:1
100KB以上になってしまったので斧に上げました。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 2010年4月27日
[5] その他の制限:特になし
画像の読み込みと保存はsampleの流用で基本的におkだと思います。
ご助力お願いします。
0327デフォルトの名無しさん
2010/04/25(日) 03:22:56Write a function that generates random numbers in range of 1 ~ 100 and fill an array of size N.
functionは乱数生成にしかかかってないってこと?
0328デフォルトの名無しさん
2010/04/25(日) 03:32:240329デフォルトの名無しさん
2010/04/25(日) 03:55:190330デフォルトの名無しさん
2010/04/25(日) 04:32:490331/joyful/img/10576.cpp
2010/04/25(日) 08:50:17Write a function that generates random numbers in range of 1 ~ 100 and fill an array of size N.
これは、こうなるのは同意?
Write a function that generates random numbers and fill an array.
あとはGoogle翻訳にかけて。
http://translate.google.co.jp/
乱数を生成し、配列を埋める関数を書きなさい。
by the way.
乱数を生成する関数を書き、配列を埋めなさい。
Write a function to generate random numbers, please fill in the array.
0332デフォルトの名無しさん
2010/04/25(日) 09:14:03generetesはsがついて三単現だが、
fillにはついてないからfunctionにはかからねーんだよ、アホがw
おまけ
Yahoo翻訳
乱数を生み出す機能を記述して、配列を満たしてください。
エキサイト翻訳
乱数を生成する機能を書いてください、そして、配列をいっぱいにしてください。
0333デフォルトの名無しさん
2010/04/25(日) 09:25:16使えないとか変な翻訳で有名じゃねーかよ
なんでよりにもよってGoogle翻訳をもとにしちゃったんだw
0334デフォルトの名無しさん
2010/04/25(日) 09:50:57ユーザにサイズN(最大100000)を入力させるプログラムを作れ
1〜100までの範囲でランダム数を生成する関数を作れ。そしてサイズNの配列に埋めろ。
さらにお前は1の数、2の数、3の数、4の数、5の数、…、100の数が、幾つあるのが数える必要がある。
もしランダム数関数が完璧に仕事をこなせば、配分された全ての数は等しくなるはずだ。
まぁ、すこし位の誤差はあるかもしれんがなw
つーわけで、作るべきプログラムは、入力させるプログラムと
ランダム数を生成して配列に一杯にする関数だけで、
配列に埋めるのと、それぞの数が、いくつあるのか数えるのは>>312の仕事じゃないか?
0335デフォルトの名無しさん
2010/04/25(日) 09:55:320336デフォルトの名無しさん
2010/04/25(日) 09:55:36randの使い方を覚えさせる問題なのかで書くべき回答が違うなぁ
0337334
2010/04/25(日) 09:59:14ユーザにサイズN(最大100000)を入力させるプログラムを作れ
1〜100までの範囲でランダム数を生成する関数を作れ。そしてサイズNの配列に埋めろ。
さらにお前は1の数、2の数、3の数、4の数、5の数、…、100の数が、幾つあるのが数える必要がある。
もしランダム数関数が完璧に仕事をこなせば、配分された全ての数は等しくなるはずだ。
まぁ、すこし位の誤差はあるかもしれんがなw
つーわけで、作るべきプログラムは、入力させるプログラムと
ランダム数を生成する関数と配列に埋までで
それぞの数が、いくつあるのか数えるのは>>312の仕事じゃないか?
0338デフォルトの名無しさん
2010/04/25(日) 10:01:15でも、素直に読むと、お前が数えろって書いてない?
まぁ、数える手段を書いてないので、それをプログラムでやっても
問題はないと言うか、そういう主旨だとは思うが…
0339デフォルトの名無しさん
2010/04/25(日) 10:04:01乱数の偏りが気になるんなら関数を317のにして。
ってか、あんな中学レベルの英語に機械翻訳持ち出す奴がいるのが驚きだ。
0340デフォルトの名無しさん
2010/04/25(日) 10:22:37If the random number function does it job perfectly, the distribution to
each number should be equal. But they might be slightly off.
この部分をどう読む?
ここで求められている乱数発生関数が通常の乱数ではなく、
出来るだけ均等になるように(偏りを加えた)乱数発生関数の可能性もあるわけで…
0341デフォルトの名無しさん
2010/04/25(日) 10:25:170342デフォルトの名無しさん
2010/04/25(日) 10:29:16偏りを加えたら一様分布じゃなくなるんじゃねーの
線形合同法の偏りを打ち消す偏りって意味か?
0343デフォルトの名無しさん
2010/04/25(日) 10:31:17どう読んだから知らんが、それをもとにコード書けよw
0344デフォルトの名無しさん
2010/04/25(日) 10:40:36原文を読むと、配分された数が一致されることか前提にあって、
少し位の誤差はあるかも知れないって書かれている。
しかし、実際は、誤差があるのが大前提で、大体の範囲でおさまるのが正しい。
それとも、俺の翻訳がおかしい?
0345デフォルトの名無しさん
2010/04/25(日) 10:44:26そんな文に一々とらわれる必要はない。
0346デフォルトの名無しさん
2010/04/25(日) 10:49:36>そんな文に一々とらわれる必要はない。
おいコラw
んなことを言ったら、何を持って問題文に回答するんだw
0347デフォルトの名無しさん
2010/04/25(日) 10:55:160348デフォルトの名無しさん
2010/04/25(日) 11:07:02できれば中学生の英語からやり直して欲しいところだが、
いまさら手遅れなんだろうな。
0349331
2010/04/25(日) 11:18:27http://www.ocn.ne.jp/translation/
配列を、乱数と満たしを生成する機能に書いてください。
Write the function into which a random number is formed and bury arrangement.
0350デフォルトの名無しさん
2010/04/25(日) 11:30:07乱数を生成する機能を書いてください、そして、配列をいっぱいにしてください。
Infoseek マルチ翻訳
乱数を生み出す機能を記述して、配列を満たしてください。
FreeTranslation.com
乱数を産む機能を書いて、配列をいっぱいにしてください。
機械翻訳をもとに英語を語るなよ、頼むから
0351デフォルトの名無しさん
2010/04/25(日) 11:34:55翻訳は意味が分からない単語や使い回しの参考にする程度で
あんまり信じないほうが良いよ
0352デフォルトの名無しさん
2010/04/25(日) 11:41:09前でも言われてるように、こんなのは中学英語の範疇。
0354デフォルトの名無しさん
2010/04/25(日) 11:49:120355353
2010/04/25(日) 11:49:57その後、fillはプログラムの範囲なのか次の「You also …」と同じで
>>312がやるべき範疇なのか迷ったりしたけどね
0356デフォルトの名無しさん
2010/04/25(日) 11:54:14「You also …」以降は「Write a program」に掛かってねーよ
この場合、数える手段は自由であって、プログラムの出題の範囲じゃない
※これ以前に出力結果を数えるプログラムとか作ってるかも知れんだろ?
0357デフォルトの名無しさん
2010/04/25(日) 11:55:580358デフォルトの名無しさん
2010/04/25(日) 12:05:47いいからお前は10万個数えてろ、な?
0359デフォルトの名無しさん
2010/04/25(日) 12:27:30>>312を読んでるか?
>(元の文が英文なのですが、約した際に何かしら抜け落ちている点が在るかもしれないので一応原文も記載しておきます)
だから、間違えてる可能性を示唆してるだけなんだが?
0360デフォルトの名無しさん
2010/04/25(日) 12:35:460361デフォルトの名無しさん
2010/04/25(日) 12:50:42まぁ、お前とは話が合わんことだけは分かった。
0362デフォルトの名無しさん
2010/04/25(日) 12:55:48ここまでの流れを読んだ上で出題者の方に確認してみた所、カウントするのもプログラム上でやれとの事でした
If the random number function does it job perfectly, the distribution to each number should be equal. But they might be slightly off.
の部分は上で仰っていた方がいらした様に、問題文への補足説明の様です
回答結果がどの様な感じになるのかの具体的な説明も付記されていたのでコピペしておきます
For example, user entered N as 50. Then you are filling the array with 50 random values
and then sort. And the count how many 1’s, 2’s, 3’s, 4’s, 5’s, …, 100’s. and then print out
that info.
0363デフォルトの名無しさん
2010/04/25(日) 12:56:40数えるのも当然プログラム内でやる。
0364デフォルトの名無しさん
2010/04/25(日) 12:59:440365デフォルトの名無しさん
2010/04/25(日) 13:05:28カウント用の配列禁止ならソートして数えるしかないが。
0366デフォルトの名無しさん
2010/04/25(日) 13:06:03違くね?
その直後にIfなんたらかんたらで、補足っぽいもの直接続いてなければ、
それであってると思うが、全体の文章の流れを考えると、ここだけでは、どうとでも取れる。
って言うか、>>312が適当に切っただけのような気もするが…
0367デフォルトの名無しさん
2010/04/25(日) 13:07:35読解力のないバカは>>362を100000回読んでから出直してこい。
0368デフォルトの名無しさん
2010/04/25(日) 13:09:35Nが50であれば、50個の配列を用意して、ソートしてから数を数えろと…?
何か、他に情報を小出しにしてないか?
0369デフォルトの名無しさん
2010/04/25(日) 13:17:36>>312は問題文全文のコピペで、それ以外では>>362での記述が問題に関する情報が全てです
ソートに関しては、バブルソートとインサーションソートについてしかまだ教科書の方で習ってないので、恐らくはそれを使えという事なのかと
ですので、言語がC++で、Visual C++ 2008で動作する物であるという事以外の制限に関しては何も無いと思います
0370デフォルトの名無しさん
2010/04/25(日) 13:20:29for(i=1, j=0; i<=100; i++) {
for(k=j; array[k]==i; k++);
printf("%d's %d\n", i, k - j);
j = k;
}}
0371デフォルトの名無しさん
2010/04/25(日) 13:42:41100000個ソートすっと重いなあ
#include <iostream>
int myrand100(){ return (int)(rand() / (RAND_MAX + 1.0) * 100) + 1; }
void sort(int *a, int size)
{
int i, j, k;
for(i=size-1; i>0; i=k) {
for(j=k=0; j<i; j++) {
if(a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
k = j;}}}}
int main()
{
int i, j, k, N, *array;
srand(time(NULL));
std::cin >> N;
array = new int[N];
for(i=0; i<N; i++) array[i] = myrand100();
sort(array, N);
for(i=1,j=0; i<=100; i++, j=k) {
for(k=j; array[k] == i; k++);
std::cout << i << "'s " << k - j << std::endl;
}
delete[] array;}
0372デフォルトの名無しさん
2010/04/25(日) 13:56:14k<Nで止めないと駄目
0373デフォルトの名無しさん
2010/04/25(日) 14:00:300374デフォルトの名無しさん
2010/04/25(日) 14:09:32>array of size N.
って、しばりがありまっせ。
0375327
2010/04/25(日) 14:12:25逆に、乱数を発生し、かつ配列を埋める関数を作れ、というのはどう書くの?
fillをfillsにするだけ?なの?ごめん頭悪くてorz
0376デフォルトの名無しさん
2010/04/25(日) 14:14:06配列として利用してるサイズはNなんだよ!
まあ、すっかり忘れてたことをなんとか誤魔化そうとしてるだけなんだけどね。
0377デフォルトの名無しさん
2010/04/25(日) 14:16:19fillsにすれば、乱数を生成して配列を埋める関数って意味になる。
ちゃんと訳せてる翻訳サイトにfillsにした英文を入れても確認できる。
0379デフォルトの名無しさん
2010/04/25(日) 21:13:43[2] 問題文(含コード&リンク):10000未満の正の整数を考える(xとする)。このとき、ある2つの整数の3乗の和として表す表し方が2通りある数をすべて求めなさい。つまり、異なる2通りの数の組(a,b)と(c,d)があって、
x = a^3 + b^3
= c^3 + d^3
とできる数xを表示するプログラムを実行しなさい。例えば、1027は
1027 = 3^3 + 10^3
と表せますが、それ以外は表せません((3,10)と(10,3)は同じものと考える)。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2010年4月28日まで
[5] その他の制限:
ポインタなどは習っていません。よろしくお願いいたします。
0380デフォルトの名無しさん
2010/04/25(日) 21:23:560381デフォルトの名無しさん
2010/04/25(日) 21:34:15int main(void)
{
int a, b, c, d;
for(a=1; a*a*a<10000/2; a++) {
for(b=a+1; ; b++) {
int temp1 = a*a*a + b*b*b;
if(temp1 >= 10000) break;
for(c=a+1; c*c*c<10000/2; c++) {
for(d=c+1; ; d++) {
int temp2 = c*c*c + d*d*d;
if(temp2 >= 10000) break;
if(temp1 == temp2) printf("a=%d b=%d c=%d d=%d %d\n", a, b, c, d, temp1);
}}}}
return 0;
}
0382デフォルトの名無しさん
2010/04/25(日) 21:34:531*9 と 4*4 かな?
0383デフォルトの名無しさん
2010/04/25(日) 21:35:500384デフォルトの名無しさん
2010/04/25(日) 22:20:57http://ideone.com/xD5cv
0385デフォルトの名無しさん
2010/04/25(日) 22:22:140386デフォルトの名無しさん
2010/04/25(日) 22:29:46(167, 436), (228, 423), (255, 414)のペアを3通り表示してしまう
(3乗の和として表す表し方が"2通り"ある数でないといけない)
#include <stdio.h>
#define N 10000
#define C_SIZE 22 // ceil(pow(N,1.0/3))
int main(){
int i, j, x;
int cubic[C_SIZE];
int table[N]={0};
for(i=1; i<C_SIZE; i++) cubic[i]=i*i*i;
for(i=1; i<C_SIZE-1; i++){
for(j=i+1; j<C_SIZE; j++){
x = cubic[i] + cubic[j];
if(x > N) break;
table[x]++;
}
}
for(i=1; i<sizeof(table)/sizeof(table[0]); i++){
if(table[i]==2) printf("%d\n",i);
}
return 0;
}
0387デフォルトの名無しさん
2010/04/25(日) 22:32:32[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):
モンテカルロ法で円周率πの近似値を求めよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2010年4月28日まで
[5] その他の制限:
以下の疑似乱数発生方法を参考にする。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
double r;
srand(getpid());
r = (double)rand()/(RAND_MAX+1.0);
printf("%f\n", r);
return 0;
}
0388デフォルトの名無しさん
2010/04/25(日) 22:47:20#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 1000000
int main(void)
{
double x, y;
int i, j;
srand(getpid());
for( i=j=0; i<N; i++ ) {
x = (double)rand()/(RAND_MAX+1.0);
y = (double)rand()/(RAND_MAX+1.0);
if( x*x + y*y <= 1.0 ) j++;
}
printf("%f\n", (double) j / N * 4);
return 0;
}
0389デフォルトの名無しさん
2010/04/26(月) 13:17:37int main(int argc, char *argv[]) {
int32_t N;
std::cin >> N;
if (N > 100000 || N < 1)
exit(1);
char* array = new char[N];
int32_t counts[100] = {0};
srand(time(NULL));
int32_t i;
for(i = 0; i < N; i++) {
char value = myrand100();
array[i] = value;
counts[value - 1]++;
}
std::cout << int(array[0]);
for(i = 1; i < N; i++) {
std::cout << ", " << int(array[i]);
}
std::cout << "\n" << std::endl;
for(i = 0; i < 100; i++) {
std::cout << i+1 << "\t" << counts[i] << "\n";
}
std::cout << std::endl;
delete array;
return 0;
}
0390デフォルトの名無しさん
2010/04/26(月) 13:20:50ソートしない方がいいと思う。
つか、>>312には一言もソートしろって書いてないわけだし。
先生(?)が後で言ってるのはあくまでも例えなわけで、
答えを直接教えるわけにもいかんから、適当に言ってるだけだろう。
仮に、数え上げるプログラムが課題だったとしても、
ソートよりは普通に数えた方がいい。
0391デフォルトの名無しさん
2010/04/26(月) 14:16:40しなくていいなら>>313程度でいいし。
配列サイズを1個節約するためだけに、無意味な加算減算を繰り返すのは効率いいとは思えない。
0392デフォルトの名無しさん
2010/04/26(月) 15:14:26>delete array;
0393デフォルトの名無しさん
2010/04/26(月) 20:20:01[3] 環境
[3.1] OS:windows2000
[3.2] Microsoft Visual C++ 6
[3.3] C
[4] 期限:[無期限]
#include <stdio.h>
/MyC.c */
int main(void){
printf("My C program\n");
retun 0;
}
コンパイルしようとすると、エラー6 警告2が出てしまいます。
0394デフォルトの名無しさん
2010/04/26(月) 20:21:48retun
0395デフォルトの名無しさん
2010/04/26(月) 20:22:20/MyC.c */
を
/*MyC.c */
にする。
0396デフォルトの名無しさん
2010/04/26(月) 21:35:06http://www1.axfc.net/uploader/He/so/275025
pass:1
0397393
2010/04/27(火) 10:46:37結果
テスト2.exe - エラー 0、警告 0
これでできたことになるんでしょうか?
0398デフォルトの名無しさん
2010/04/27(火) 13:32:10コマンドラインに表示されてるはず
早すぎて見えないだけ
0399デフォルトの名無しさん
2010/04/27(火) 21:54:43引数2に目量数があったとして
目量の数に四捨五入するプログラムを作る。
例えば45,2なら結果は4、123,5なら10で125,5なら15という風にな
る-45,3なら-6、-44,3なら-3・・・
よろしくお願いします。
0400デフォルトの名無しさん
2010/04/27(火) 22:05:46#include<stdio.h>
#include<stdlib.h>
int func(int a, int b)
{
int abs_a, sign;
if(a<0) sign=-1;
else sign=1;
abs_a=abs(a);
abs_a+=b*5;
abs_a=abs_a/10/b*b;
return sign*abs_a;
}
int main(void)
{
printf("%d\n", func(45, 2));
printf("%d\n", func(123, 5));
printf("%d\n", func(125, 5));
printf("%d\n", func(-45, 3));
printf("%d\n", func(-44, 3));
return 0;
}
0401ノラ
2010/04/28(水) 23:58:29do-while文を使って
1+2+3・・・というように数値を加算して表示し、
加算結果が300を超えたら表示して
処理を終了するというプログラムを組みたいのですが、
普段から授業ついていけなくて、よくわかりません
どなたか教えてください。お願いします
0402デフォルトの名無しさん
2010/04/29(木) 01:04:42#include<stdio.h>
#include<math.h>
int main(void)
{
int suuti=0;
do
{
suuti++;
printf("%s%d", suuti!=1?"+":"", suuti);
}
while(suuti<=sqrt(300*2+0.25+1e-10)-0.5);
printf("\n加算結果が300を超えた\n");
return 0;
}
0403デフォルトの名無しさん
2010/04/29(木) 01:20:210404デフォルトの名無しさん
2010/04/29(木) 01:28:16[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10577.txt
[3] 環境
[3.1] OS:学校だとwinXP 自宅のはwin7
[3.2] コンパイラ名とバージョン: 学校だとVC6.0 自宅ではVC2008
[3.3] 言語: C
[4] 期限:明日4/30
[5] その他の制限: とくになし
学校のPCではこのソースファイルで実行できるんですが、自宅だとどうしてもできません。
0405デフォルトの名無しさん
2010/04/29(木) 01:31:031. C++ としてコンパイルする
2. 変数の宣言場所を変える
0406デフォルトの名無しさん
2010/04/29(木) 01:37:36変数の宣言場所を変えるとはどういうことですか?
0407406
2010/04/29(木) 02:31:590408デフォルトの名無しさん
2010/04/29(木) 22:03:59>>243とか何事もなかったかのように華麗にスルーされてるよなw
0409デフォルトの名無しさん
2010/04/30(金) 00:12:39この手の問題はいやというほどやったからなあ。
0410デフォルトの名無しさん
2010/04/30(金) 00:21:52「自分で考えないと、力付かない」なんて屁理屈こねだすのにねhw
0411C言語苦手
2010/04/30(金) 00:24:14[2] 問題文(含コード&リンク):
簡単なんですけど、C言語苦手でお願いします。
すべて関数の部分だけで大丈夫です。
�@3つの実数の掛け算をもとめよ。
�A整数nの階乗n!をもとめよ。
�B配列・実数・data[]の平均値を求めよ。
�C2つの実数 aとbの内容を入れ替えよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:4月30日の正午まで
お願いします。
0412デフォルトの名無しさん
2010/04/30(金) 00:27:45やりたければどうぞ
0413458
2010/04/30(金) 01:31:56#include <stdio.h>
int Kakezan(int a, int b, int c){
return a*b*c;
}
double Heikin(int* data,int x){
int i;
double sum=0;
for(i=0;i<x;++i)
{
sum += data[i];
}
return (double)(sum/x);
}
int Kaijo(int n){
if(n > 1)
return n * Kaijo(n-1);
else
return 1;
}
void Swap(int* a, int* b){
int* swap;
swap = a;
a=b;
b= swap;}
int main(){
int data[5] = {1,2,3,4,5};
int x = sizeof(data) / sizeof(data[0]);
printf("%d\n",Kaijo(4));
printf("%lf",Heikin(data,x));
}
0414デフォルトの名無しさん
2010/04/30(金) 01:38:49Kakezan(2147483647,2147483647,2147483647);
が計算できません
回答するなら、いいかげんな回答はやめてください。
0415デフォルトの名無しさん
2010/04/30(金) 02:23:20[2] 問題文(含コード&リンク):プログラム開始前に%だけの行が1つも無いときには,そのような行を追加し,2つ以上あるときには1つだけにするようなプログラムをC言語により作成する.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C
[4] 期限: 4月30日朝
[5] その他の制限: なし
お願いします
0416デフォルトの名無しさん
2010/04/30(金) 03:56:25指摘されたのはヒストグラムと素数のプログラムなのですが
ヒストグラムの問題はただ数字を20個入力するだけではなく値を1つ入れる度に1個目2個目と出力されるような形にするにはどこを弄ればいいんでしょうか・・・
また素数の問題で結果だけを求めるのではなくどのように素数を選んでるのかということを出力する形に変えたいです
そしてもう一つ数当てゲームのプログラムも課題に出されました ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10579.txt
こちらはウェブ上で似たような問題があったので手を加えてみて ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10580.cpp
という感じにしてみたのですが回数制限を付けるにはどうすればよいでしょうか
どちらも提出期限は今日の昼までです、押しつけがましい要望までしてしまい申しわけないのですがよろしくお願いします
0417デフォルトの名無しさん
2010/04/30(金) 03:56:47言うのが遅くないかい?
この時間は無理だろ。
0418デフォルトの名無しさん
2010/04/30(金) 04:28:57どこの行を指しているかも分からない"%"を判別しなければならないんだぞ
この時間じゃなくても無理
0419デフォルトの名無しさん
2010/04/30(金) 08:58:50そういう奴に限って実社会では役に立たないクズで、
しかも空気読めなくて周りから嫌われるタイプ。
0420デフォルトの名無しさん
2010/04/30(金) 09:57:35数あて
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int com_ans,man_ans;
com_ans = rand() % 100;
printf("数当てゲームです、好きな数字を入力してください\n");
while(1){
printf("数は?");
scanf("%d", &man_ans);
if(com_ans > man_ans){
printf("もっと大きいよ\n");
}
else if(com_ans < man_ans){
printf("もっと小さいよ\n");
}
else{
printf("正解。\n");
break;
}
}
}
0421デフォルトの名無しさん
2010/04/30(金) 10:03:43ヒストグラム
#include <stdio.h>
int main(void)
{
int i, j, hist[10] = {0}, n;
for(i=0; i<20; i++) {
do { printf("%d個目:",i+1); scanf("%d", &n); } while(n < 0 || 9 < n);
hist[n]++;
}
for(i=0; i<10; i++) {
printf("%d:", i);
for(j=0; j<hist[i]; j++) printf("*");
printf("\n");
}
return 0;
}
0422420
2010/04/30(金) 10:13:16#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int com_ans,man_ans,count=0;
com_ans = rand() % 100;
printf("数当てゲームです、好きな数字を入力してください\n");
while(1){
printf("数は?");
scanf("%d", &man_ans);
if(com_ans > man_ans){
printf("もっと大きいよ\n");
++count; if(count >=10){ printf("おしまい\n"); exit(1);}
}
else if(com_ans < man_ans){
printf("もっと小さいよ\n");
++count; if(count >=10) {printf("おしまい\n"); exit(1);}
}
else{
printf("正解。\n");
break;
}
}
}
0423デフォルトの名無しさん
2010/04/30(金) 11:05:19素数
#include <stdio.h>
int main(void)
{
int i, j;
char sieve[30+1] = {0, 0, 1}; //0と1は素数でない、2は素数なので探索リストに追加
for(i=3; i<=30; i+=2){
sieve[i] = 1; //3以上30以下かつ奇数であるものを探索リストに追加
}
printf("2及び3以上30以下かつ奇数であるものが現在の探索リスト\n");
for(i=0; i<=30; i++) if(sieve[i]) printf("%d ", i);
printf("\n");
for(i=3; i*i<=30; i+=2){ //30は7の平方より小さいので
if(sieve[i]) { //i==7になったときに探索リストに残っているものが素数。
for(j=i*i; j<=30; j+=i*2)
sieve[j] = 0; //iの平方の倍数にiの偶数倍を足したものが30以下であれば探索リストから外す。
} //奇数+奇数=偶数になるためj+=i*2として偶数倍のものを選んでいる。
} //ex...i=3のときj=9,j=12,j=15,j=18…と探索していくのは無駄である。
//それはj=12,j=18は探索リストからすでに外れているからである。
printf("先ほどの探索リストから3,5の平方の倍数\n");
printf("および3,5の平方の倍数に3,5の偶数倍を足したものを除いた残り\n");
for(i=0; i<=30; i++) if(sieve[i]) printf("%d ", i);
return 0;
}
0424デフォルトの名無しさん
2010/04/30(金) 12:28:08数当てはカウントさせて10に達するようにすればよかったんですね
素数とヒストグラムもわかりやすいものにしてもらい助かりました、本当にありがとうございます
0425デフォルトの名無しさん
2010/04/30(金) 14:42:19それむずかしいんじゃない、めんどくさいんや
0426デフォルトの名無しさん
2010/04/30(金) 23:20:04[2] 問題文(含コード&リンク):sample.txtを読み込み、データを身長の小さい人から順番に並び変えてans.txtに出力せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C
[4] 期限: 5月2日まで
[5] その他の制限: なし
sample.txtの中身はこんな感じです。
12 ヤマダタロウ 56.7 165.1
43 タナカハナコ 44.3 156.8
54 スズキイチロウ 70.3 179.2
左から番号、名前、体重、身長です
0427デフォルトの名無しさん
2010/04/30(金) 23:33:230428デフォルトの名無しさん
2010/04/30(金) 23:42:15大学行ったことないとわからないかもしれないけど
0429デフォルトの名無しさん
2010/04/30(金) 23:53:310430デフォルトの名無しさん
2010/04/30(金) 23:56:070431デフォルトの名無しさん
2010/04/30(金) 23:57:49まぁ、3流以下だろうけどなhw
0432デフォルトの名無しさん
2010/04/30(金) 23:59:454月から週一こま程度ならその程度でもおかしくはないだろ。
大学行ったことないとわからないかもしれないけど
0433デフォルトの名無しさん
2010/05/01(土) 00:00:29#include<stdlib.h>
#include<string.h>
typedef struct tag_data_t{
char *org;
double height;
}data_t;
int data_cmp(const data_t *pa, const data_t *pb){
if(pa->height<pb->height) return -1;
return (pa->height>pb->height);
}
int main(void){
FILE *fp_in, *fp_out;
char onelinebuf[1024], *p;
data_t *data=NULL;
int i, data_num;
if((fp_in=fopen("sample.txt", "r"))==NULL) exit(1);
for(data_num=0;fgets(onelinebuf, sizeof(onelinebuf), fp_in);data_num++){
if((p=strchr(onelinebuf, '\n'))) *p='\0';
if((data=realloc(data, sizeof(*data)*(data_num+1)))==NULL) exit(2);
data[data_num].org=strdup(onelinebuf);
if(sscanf(onelinebuf, "%*d %*s %*f %lf", &data[data_num].height)!=1) exit(4);
}
fclose(fp_in);
qsort(data, data_num, sizeof(*data), (int (*)(const void*,const void*))data_cmp);
if((fp_out=fopen("ans.txt", "w"))==NULL) exit(3);
for(i=0;i<data_num;i++) fprintf(fp_out, "%s\n", data[i].org);
fclose(fp_out);
for(i=0;i<data_num;i++) free(data[i].org);
free(data);
return 0;
}
0434デフォルトの名無しさん
2010/05/01(土) 00:06:18この程度も大学レベルですか?w
0435デフォルトの名無しさん
2010/05/01(土) 00:08:56コンプレックス強い奴だな
大学に行きたきゃ夜間でもなんでも方法あるだろ
0436デフォルトの名無しさん
2010/05/01(土) 00:14:590437デフォルトの名無しさん
2010/05/01(土) 00:18:45大学生ですってのもはげしくかっこ悪いのは事実
0438デフォルトの名無しさん
2010/05/01(土) 00:21:030439デフォルトの名無しさん
2010/05/01(土) 00:22:540440デフォルトの名無しさん
2010/05/01(土) 00:26:140441デフォルトの名無しさん
2010/05/01(土) 00:36:56十分大学レベルだよ
最近は高校でもプログラムやるのかな。それなら大学ではTMPとかやってもよさそうだけど。
0442デフォルトの名無しさん
2010/05/01(土) 00:40:380443デフォルトの名無しさん
2010/05/01(土) 00:42:150444デフォルトの名無しさん
2010/05/01(土) 00:43:08この程度で大学レベルならあまりのレベルの低さに笑っちまうよな
ところでお前はどんな美しいコードが書けるんだ?
0445デフォルトの名無しさん
2010/05/01(土) 00:47:350446デフォルトの名無しさん
2010/05/01(土) 00:49:22((void (*)())(0))();
0447デフォルトの名無しさん
2010/05/01(土) 02:10:460448デフォルトの名無しさん
2010/05/01(土) 02:24:55読めません、どういう意味ですか?
0449デフォルトの名無しさん
2010/05/01(土) 02:29:50メモリアドレス0を、引数を持たず値を返さない関数として呼び出す
つもりなんだろうけど、本当にメモリアドレス0になるかどうかは環境依存
0450デフォルトの名無しさん
2010/05/01(土) 05:59:230452デフォルトの名無しさん
2010/05/01(土) 12:04:090453デフォルトの名無しさん
2010/05/01(土) 12:15:32か、または
Ctrl+F5
0454デフォルトの名無しさん
2010/05/01(土) 14:02:21たしかに肝心のソートを qsort() にしているのは、出題者(学校の先生)からみると、手抜きにみえる、というか、そこを
がしがし書いてほしいというか。
0455393
2010/05/02(日) 11:55:06.exeファイルが生成されません。代わりに.plgファイルができます。
ビルドするかどうかの問いに「はい」答えると
「プログラムを実行できません」と
表示されてしまいます。
コンパイルしようとすると「コンパイルツールがない為できない」
と出てしまいます。
0456デフォルトの名無しさん
2010/05/02(日) 12:36:430457デフォルトの名無しさん
2010/05/02(日) 13:23:17・ユークリッドの互除法の拡張アルゴリズム
入力 f1,f2 (f1>f2>0でよい)に対して、
s*f1+t*f2=gcd(f1,f2)となる、s,tを求めよ。
ただし、gcd(f1,f2)はf1とf2の最大公約数である。また 配列を使わずに再現すること。
[3] 環境
[3.1] OS:vista
[3.2] コンパイラ名とバージョン: VC 2008
[3.3] 言語: C言語
[4] 期限: 5/5
よろしくお願いします。
0458デフォルトの名無しさん
2010/05/02(日) 13:27:250459デフォルトの名無しさん
2010/05/02(日) 13:38:04すいません。
s,tは整数で、一意でない場合も、一組求めればいいです。
0460393
2010/05/02(日) 13:38:35ビルドのログ
--------------------構成: テスト2 - Win32 Debug--------------------
コマンド ライン
結果
テスト2.exe - エラー 0、警告 0
以上ですけど何か分かりますか?
0461デフォルトの名無しさん
2010/05/02(日) 13:48:40条件は揃いましたよ
できますか?w
0462デフォルトの名無しさん
2010/05/02(日) 13:51:200463デフォルトの名無しさん
2010/05/02(日) 14:37:05#include <stdio.h>
int gcd(int a, int b) { return a % b ? gcd(b, a%b) : b; }
int func(int f1, int f2, int *s, int *t){
int a, b, m = f1 / f2, n = f1 % f2;
if(n == 1) {
*s = 1;
*t = -m;
return;}
func(f2, n, &a, &b);
*s = b;
*t = a - *s * m;
}
int main(void)
{
int f1, f2, g, s, t;
scanf("%d%d", &f1, &f2);
g = gcd(f1, f2);
if(g == f2) printf("s = 0, t = 1\n");
else {
func(f1/g, f2/g, &s, &t);
printf("s = %d, t = %d\n", s, t);
}
return 0;
}
0464デフォルトの名無しさん
2010/05/02(日) 14:41:110465デフォルトの名無しさん
2010/05/02(日) 14:58:01.plgの他に.dspファイルとDebugフォルダーは出来てる?
--------------------構成: テスト2 - Win32 Debug--------------------
コマンド ライン
一時ファイル
[〜]
一時ファイル
[〜]
アウトプット ウィンドウ
コンパイル中...
MyC.c
リンク中...
結果
テスト2.exe - エラー 0、警告 0
0466デフォルトの名無しさん
2010/05/02(日) 15:47:17関数一つにしてみた
#include <stdio.h>
void func(int f1, int f2, int *s, int *t)
{
int a, b, m = f1 / f2, n = f1 % f2;
if(n == 0) {
*s = 0;
*t = 1;}
else if(n == 1) {
*s = 1;
*t = -m;}
else {
func(f2, n, &a, &b);
*s = b;
*t = a - *s * m;
}}
int main(void)
{
int f1, f2, s, t;
scanf("%d%d", &f1, &f2);
func(f1, f2, &s, &t);
printf("s = %d t = %d\n", s, t);
return 0;
}
0467デフォルトの名無しさん
2010/05/02(日) 16:07:120468デフォルトの名無しさん
2010/05/02(日) 16:59:14#include <stdio.h>
int gcd(int f1, int f2, int *s, int *t)
{
int a, b, m = f1 / f2, n = f1 % f2, ret;
if(n == 0) *s = 0, *t = 1, ret = f2;
else {
ret = gcd(f2, n, &a, &b);
*s = b, *t = a - b * m;
}
return ret;
}
int main(void) {
int f1, f2, s, t, g;
scanf("%d%d", &f1, &f2);
g = gcd(f1, f2, &s, &t);
printf("gcd = %d, s = %d, t = %d\n", g, s, t);
printf("s * f1 = %d * %d = %d\n", f1, s, f1 * s);
printf("t * f2 = %d * %d = %d\n", f2, t, f2 * t);
return 0;
}
0469デフォルトの名無しさん
2010/05/02(日) 20:00:40[2]
fopen等から作成された既に開いているFILEと同じファイルを指す
独立したオープンのFILE*変数を作成するfreopen関数を作れ
関数ヘッダ:
FILE *freopen(FILE *,char *mode)
使用例:
FILE *f,*g;
int a,b,c;
f=fopen("./hoge.txt","w");
g=freopen(f,"r");
fprintf(f,"1+1=2¥n");
fscanf(g,"%d+%d=%d",&a,&b,&c);
........
[3] OS:Linux(FedraCore) Compiler :GCC4.2 Language:C言語
[4] 5/30迄
[5]よろしくお願いします
0470デフォルトの名無しさん
2010/05/02(日) 20:06:36同名の標準関数があるのにリンクできるのかな?
0471デフォルトの名無しさん
2010/05/02(日) 23:27:18Cは引数の型が違っても同名の関数は作れないのであります
C++なら出来るであります
0472デフォルトの名無しさん
2010/05/03(月) 02:22:05#include <stdio.h>
typedef struct{
int t0;
int t1;
}tuple2;
// s*f1 + t*f2 = gcd(f1,f2) (f1>f2>0)
tuple2 ex_gcd(int f1, int f2){
if(f2==0) {
tuple2 tup = {1, 0};
return tup;
}
{
int q = f1/f2;
int r = f1%f2;
tuple2 ret = ex_gcd(f2, r);
tuple2 res;
res.t0 = ret.t1;
res.t1 = ret.t0 - ret.t1*q;
return res;
}
}
int main(void){
int f1=12, f2=23;
tuple2 tup = ex_gcd(f1, f2);
printf("s = %d t = %d\n", tup.t0, tup.t1);
return 0;
}
自分で言うのもなんだがコードがキモ過ぎる
tuple2 res = {ret.t1, ret.t0 - ret.t1*q}; とできないとかC言語腐ってやがる
0473393
2010/05/03(月) 06:53:56レスありがとうございます。
そのように表示されたことはありません。
.dspとDebugフォルダともできてます。
何がいけないんでしょうか?
0474デフォルトの名無しさん
2010/05/03(月) 11:47:46http://www.kumei.ne.jp/c_lang/setvc.htm
第1章 ともかく作ってみよう
http://www.kumei.ne.jp/c_lang/intro/no_01.htm
第2章 動かしてみよう
http://www.kumei.ne.jp/c_lang/intro/no_02.htm
0475>>456 >>465
2010/05/03(月) 12:15:55プロジェクト メニュー⇒プロジェクトへ追加⇒ファイル⇒プロジェクトにファイルを追加
0476デフォルトの名無しさん
2010/05/03(月) 21:43:58while(n<0)でscanf文を囲みましたができません。
0477デフォルトの名無しさん
2010/05/03(月) 21:45:09scanf(
0478デフォルトの名無しさん
2010/05/03(月) 21:45:56while(1) {
scanf("%d", &n);
if(n < 0) break;
....
}
0479デフォルトの名無しさん
2010/05/03(月) 22:04:13本当助かりました。ありがとうございました。
0480デフォルトの名無しさん
2010/05/03(月) 22:05:58・2つの整数型の引数を持ち、そのうち小さい方を返す関数のプロトタイプ宣言と関数定義を書け.
0481デフォルトの名無しさん
2010/05/03(月) 22:07:17今でも、使ってるのかしらん?
0482デフォルトの名無しさん
2010/05/03(月) 22:11:55まず、君の年齢を教えてくれ。
10歳以下なら教えてあげる
0483デフォルトの名無しさん
2010/05/03(月) 22:31:14int f(int,int);
int f(int a, int b) { reutnr a > b ? b : a; }
0484デフォルトの名無しさん
2010/05/03(月) 22:46:10なに言語ですか?
0485デフォルトの名無しさん
2010/05/03(月) 22:51:250486デフォルトの名無しさん
2010/05/03(月) 23:15:25スレタイを声に出して100回呼んでこい
0487デフォルトの名無しさん
2010/05/03(月) 23:22:050489デフォルトの名無しさん
2010/05/05(水) 01:02:44下記のようにすると、ビルドは成功するのですが
実行時に"The variable 't' is being used without being defined"
というエラーメッセージが出ます。
関数test(t)で*tに文字列を入れるにはどうしたらいいでしょうか。
教えてください。
int main(int argc, char *argv[])
{
char *t;
test(t);
cout << t << endl;
return EXIT_SUCCESS;
}
void test(char *t)
{
t = new char[100];
int i = 0;
cout << "step1" << endl;
t[i++] = 'a';
t[i++] = '\0';
}
0490デフォルトの名無しさん
2010/05/05(水) 01:25:32{
char *t;
test(t);
cout << t << endl;
return EXIT_SUCCESS;
}
void test(char *&t)
{
t = new char[100];
int i = 0;
cout << "step1" << endl;
t[i++] = 'a';
t[i++] = '\0';
}
0491デフォルトの名無しさん
2010/05/05(水) 01:26:51読み方は 't is refference of pointer to char' となります
これはCでは使えません
0492デフォルトの名無しさん
2010/05/05(水) 01:49:13using namespace std;
void test(char *t) ;
int main(int argc, char *argv[])
{
char *t = new char[100];
test(t);
cout << t << endl;
return EXIT_SUCCESS;
}
void test(char *t)
{
int i = 0;
cout << "step1" << endl;
t[i++] = 'a';
t[i++] = '\0';
}
0493デフォルトの名無しさん
2010/05/05(水) 01:54:28コンパイル通って実行できました。
ありがとうございました。
0494デフォルトの名無しさん
2010/05/05(水) 02:06:44ありがとうございます。
0495デフォルトの名無しさん
2010/05/05(水) 03:52:540496デフォルトの名無しさん
2010/05/05(水) 08:17:220497デフォルトの名無しさん
2010/05/05(水) 09:38:45それ言うとまた「例外安全にしろ」とか言う馬鹿が出て来て困るんだよ(´・ω・`)
宿題にそこまで必要ないだろと言いたい
0498デフォルトの名無しさん
2010/05/05(水) 09:46:00考えるぐらいなら、可能な場合は全部例外安全にしといたほうがいい。
0499デフォルトの名無しさん
2010/05/05(水) 09:46:18・宿題の場合は特に題意に指定がない時は例外安全を考慮しない
・newしたものは必ずdelete、malloc()したものはfree()する
0500デフォルトの名無しさん
2010/05/05(水) 09:47:41お前さあ、boost::shared_ptrを使ったとして、教官に「これは何かね?」と
聞かれて答えられる奴ばかりだと思うか?宿題丸投げしてくるような奴ら
ばっかりだぞ
そこら辺の事情も考えてやれよ
0501デフォルトの名無しさん
2010/05/05(水) 09:50:48どうして宿題丸投げしてくるようなやつらの事情を優先して考えてやる必要があるの?
0502デフォルトの名無しさん
2010/05/05(水) 09:52:310503デフォルトの名無しさん
2010/05/05(水) 09:53:02わかったわかった自由にやってくれ
>>502
俺が楽をしたいから
0504デフォルトの名無しさん
2010/05/05(水) 09:53:380505デフォルトの名無しさん
2010/05/05(水) 10:04:09まあ>>499は無かった事に
0506デフォルトの名無しさん
2010/05/05(水) 12:28:570507デフォルトの名無しさん
2010/05/05(水) 12:41:13char[100]を1回newしてるのをdelete[]しないのは「リーク」じゃないから
実害ゼロだし
この程度のコードで例外安全とか正気かおまえら
0508デフォルトの名無しさん
2010/05/05(水) 12:50:06実際にリークにならないからと考えて delete [] しなかったのか、単に忘れたのか、
それが読み手にはわからない。
そんな突っ込みどころを残して人目に晒すからこんなことになる。
0509デフォルトの名無しさん
2010/05/05(水) 12:53:05リークにならないのはコードを「見れば」分かるだろ
>>492が「忘れた」かどうかなんて、何の意味がある?
tが不要のなるのはreturnでmain()からexitする直前で、
そこでdelete[]したところで
どうせexitすればCランタイムかOS自身が回収するんだから
無意味もいいとこじゃねえか
0510デフォルトの名無しさん
2010/05/05(水) 12:56:240511デフォルトの名無しさん
2010/05/05(水) 12:58:110512デフォルトの名無しさん
2010/05/05(水) 13:07:57無意味だから最後にfree()しないコードなんてlibcの層には普通にあるんだが
そんなことも知らんのか?
っていうか、宿題丸投げスレに来るような奴がプログラマになったとして
まともなプログラマになるわけないだろw
0513492
2010/05/05(水) 13:14:17>>495 承知しました
>>496 メモリ開放忘れるリスクがなさそうでよさげですね。承知しました。
>>497-499 try〜catchでしょうか
try {
char *t = new char[100];
test(t);
cout << t << endl;
return EXIT_SUCCESS;
} catch(Exception e
0514デフォルトの名無しさん
2010/05/05(水) 13:20:18おまえわざとやってるだろ。プログラム終了前の free() とか、何年前のフレームネタだよ。
0515492
2010/05/05(水) 13:22:15delete忘れてました。申し訳ありません。
>>495 承知しました
>>496 メモリ開放忘れるリスクがなさそうでよさげですね。承知しました。
>>497-499 try〜catchでしょうか。ごめ。これの意図は分からないです。
try {
char *t = new char[100];
test(t);
cout << t << endl;
return EXIT_SUCCESS;
} catch(Exception e) {}
>>500-512
deleteしないのは「メモリリーク」を発生させると思っていました。
お手数ですが、なぜ「メモリリーク」にならないのかご教授願えませんでしょうか。
>っていうか、宿題丸投げスレに来るような奴がプログラマになったとして
>まともなプログラマになるわけないだろw
ヽ(`Д´)ノウワァァン!!
0516デフォルトの名無しさん
2010/05/05(水) 13:25:35http://ja.lmgtfy.com/?q=%22%E4%BE%8B%E5%A4%96%E5%AE%89%E5%85%A8%22
http://ja.lmgtfy.com/?q=%22%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF%22
0517デフォルトの名無しさん
2010/05/05(水) 13:52:28メモリリークってのはプログラム実行時に使用メモリ量がどんどん増えていく
現象のこと
勿論deleteすべきものをしないことがメモリリークの主な原因だが、
定義により、>>592がメモリリークを発生させないのは、分かるだろ
使用メモリ量がどんどん増えはしなくとも、不要になったメモリをいつまでも
開放せず、本来使いまわせるメモリを使いまわさないのも良くないことだが、
>>592はそれにも該当しない
0518デフォルトの名無しさん
2010/05/05(水) 13:53:120519デフォルトの名無しさん
2010/05/05(水) 13:53:37>>515deleteしてないぞ
てか今回はvector<char>じゃなくてstring使えばよくね?-128から127までの整数を保存したいとかなら別だが
0520デフォルトの名無しさん
2010/05/05(水) 13:57:05質問が>>489で、その回答なのに
何でstringを持ち出すんだよ
本当にオナニー野郎ばかりだな
0521デフォルトの名無しさん
2010/05/05(水) 14:01:14とは一言も言っていないぞ
プログラマがfree()するのは、単にそうしないと困るからであって、
>>492でdeleteしなければならないと主張するなら、それで困る実例を
挙げてみろって話だ
、
0522デフォルトの名無しさん
2010/05/05(水) 14:11:000523492
2010/05/05(水) 14:16:55「例外安全」は理解しました。
>>517-518
分かりやすいご説明ありがとうございます。
今まで、プログラム終了後もWindows上のメモリを占有すると勘違いしていました。
(だったら、なおさらdelete忘れるなよって言うのはごかんべん)
>>519-522
いろいろな考え方がありますね。勉強になります。
0524デフォルトの名無しさん
2010/05/05(水) 15:28:52まっとうな先生なら原点するとおもう、10点満点の1点くらいで。それが困る。
0525デフォルトの名無しさん
2010/05/05(水) 15:51:510526デフォルトの名無しさん
2010/05/05(水) 18:38:08これでよくね?
0527デフォルトの名無しさん
2010/05/05(水) 22:14:45今の時代なら wchar_t t[100]
charでやるなんてどうかしているよ。
0528デフォルトの名無しさん
2010/05/05(水) 22:27:39いや、まえから不思議におもっていたんですけれども vector や list や deque は
どうして明示的に delete しなくてもいいんですか?デストラクタが自動に呼び出されるしくみはなんなのでしょうか?
独習C++ を解いたレヴェルで質問するのははばかられるんですが、よろしければ教えてください。
0529デフォルトの名無しさん
2010/05/05(水) 22:32:46C++ の規格で定められた動作だから。
仕組みが知りたければアセンブリ吐かせるとかコンパイラのソース見るとかしろ。
0530デフォルトの名無しさん
2010/05/05(水) 22:46:580531デフォルトの名無しさん
2010/05/05(水) 22:56:11vector や list や deque が明示的に delete しなくてもいいとはどういみ?
0532デフォルトの名無しさん
2010/05/05(水) 23:16:35ちょっと質問がおかしいぞ
コンテナのデストラクタが自動的に呼び出される仕組み云々よりも、
まず自作のクラスを作ってデストラクタがいつ呼び出されるかを
確認できたら自ずと答えは出るはずだが?
0533デフォルトの名無しさん
2010/05/05(水) 23:22:09for (i = 0; i < 16; i++) {
for (j = 0; j < 8; j++) {
if (i < 2) {putchar(' ');} else {putchar((i << 4) + j);}
}
putchar('\n');
}
0534デフォルトの名無しさん
2010/05/05(水) 23:39:49ありがとうございます。やってみます。
0535デフォルトの名無しさん
2010/05/06(木) 00:08:51意地悪だなあwww
> for (j = 0; j < 8; j++) {
for (j = 0; j < 16; j++) { でないかい?
0536528
2010/05/06(木) 00:18:42ん、
Myclass ob1(1), ob2(3)
とかはわかるんですが、
new とかを内部でつかっているとどうなるのかな、とか‥‥‥。
でも、もうちょっといろいろ書いてみます。レスありがとうございました。
0537デフォルトの名無しさん
2010/05/06(木) 00:18:440538デフォルトの名無しさん
2010/05/06(木) 00:19:240539デフォルトの名無しさん
2010/05/06(木) 01:03:22for (i = 0; i < 0x80; i++) {
printf("%X:%c\n", i, iscntrl(i) ? ' ' : i);
}
0540デフォルトの名無しさん
2010/05/06(木) 01:12:29改行
0541デフォルトの名無しさん
2010/05/07(金) 00:29:22[2]
キーボードより入力した4桁の数値を逆転させて表示せよ.例えば,「1234」
と入力した場合は,「4321」と表示され,「1」と入力した場合は,「1000」と
表示させ,「3210」と入力した場合は,「123」と表示するものとする.
faXXXXX<1> ./kadai02 ←プログラムの実行
数値を入力して下さい。
3210 ←キーボードより入力
数値を逆転させた結果は、123です。
faXXXXX<2>
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2010/5/7
よろしくお願いしますorz
0542デフォルトの名無しさん
2010/05/07(金) 00:44:18#include<stdio.h>
int main(void)
{
int x, y;
printf("数値を入力して下さい。\n");
scanf("%d", &x);
y=(x/1%10)*1000+(x/10%10)*100+(x/100%10)*10+(x/1000%10)*1;
printf("数値を逆転させた結果は、%dです。\n", y);
return 0;
}
0543デフォルトの名無しさん
2010/05/07(金) 23:25:48[2] 問題文(含コード&リンク):
コンソール上でキーボードから次のような標準入力を与えるとする。
10+2
すると、演算結果が出力するようなプログラムを記述せよ。
四則演算( +, -, *, / )に対応させること
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: 5/12
[5] その他の制限:
文字列をコピーする関数( strcpy, strncpy )
文字列を連結する関数( strcat, strncat )
文字列の比較を行う関数( strcmp, strncmp )
文字列の長さを調べる関数( strlen )
文字を検索する関数( strchr )
文字列を整数値に変換する関数( atoi )
を使用する
お願いします。
0544デフォルトの名無しさん
2010/05/07(金) 23:57:200545デフォルトの名無しさん
2010/05/07(金) 23:59:240546デフォルトの名無しさん
2010/05/08(土) 00:16:130547デフォルトの名無しさん
2010/05/08(土) 00:38:180548デフォルトの名無しさん
2010/05/08(土) 01:01:16あらかたはあってるとおもうのでてなおししてください。
http://ideone.com/7mklJ
0549デフォルトの名無しさん
2010/05/08(土) 02:42:12先生から回答貰えたら晒し希望
引数にchar *pathnameがないと実装量が多すぎる気がする
0550デフォルトの名無しさん
2010/05/08(土) 04:03:38ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1340447453
0551デフォルトの名無しさん
2010/05/08(土) 09:41:34ホワット・ア・ワンダフル・ワールド
C 言語で eval
ttp://alohakun.blog7.fc2.com/blog-entry-339.html
0553デフォルトの名無しさん
2010/05/09(日) 17:17:30[2]
0から9までの数字を2回ずつ使用し掛け算の筆算を表示させよ
図
□□□
×□□□
━━━━
□□□
□□□
□□□
━━━━━
□□□□□
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2010/5/9
よろしくお願いします
0554デフォルトの名無しさん
2010/05/09(日) 17:31:30ごめんなさい、私には難しくて出来ません
0555デフォルトの名無しさん
2010/05/09(日) 18:24:46http://codepad.org/jMlMQ5Iq
0556デフォルトの名無しさん
2010/05/09(日) 20:19:36たびたび申し訳ありませんが、よろしくお願いいたします。
0123456789ABCDEF
2SP!"#$%&'()*+,-./
・
省略
・
Cタチツテトナニヌネノハヒフヘホマ
Dミムメモヤユヨラリルレロワン゛
0557デフォルトの名無しさん
2010/05/09(日) 21:07:21あなたの思い描くアスキーコードは独自のモノなので
char *str[]={"0","1","2"....};
と地道に列挙するのがいいんじゃないかな
0558デフォルトの名無しさん
2010/05/09(日) 21:51:50できれば解説もお願いします。
0559デフォルトの名無しさん
2010/05/09(日) 22:06:02http://codepad.org/C8ujcgRC
0560デフォルトの名無しさん
2010/05/09(日) 22:18:368桁でも13桁でも求められるようにお願いします
あと解説もお願いできますか
0561デフォルトの名無しさん
2010/05/09(日) 22:20:09別に8桁でも13桁でも255桁でもいけると思うが
解説って何を解説すりゃいいんだ?
0562デフォルトの名無しさん
2010/05/09(日) 22:22:280563デフォルトの名無しさん
2010/05/09(日) 22:30:15ごめんよ気づかなかったよ(´・ω・`)
http://codepad.org/ua71XDW9
0564デフォルトの名無しさん
2010/05/09(日) 22:31:18回答ありがとうございます。
しかし、私、C言語を始めたばかりでしてsscanやfgetsがよくわかりません。
for文,printf,scanf、配列を使ってのソースコードを教えてほしいです。
0565デフォルトの名無しさん
2010/05/09(日) 22:32:47scanf("%s", buf); に読み替えて(書き換えて)おくれ
0566デフォルトの名無しさん
2010/05/09(日) 22:51:21k ^= 2; //3,1を交互に切り替える
というのはどのような処理なのでしょうか?
0567デフォルトの名無しさん
2010/05/09(日) 23:02:50ビット演算をまだ勉強してなければ
if (k == 3) { k = 1; }
else { k = 3; }
と考えてもらえれば。
0568デフォルトの名無しさん
2010/05/09(日) 23:46:05の、-'0'の処理は、
入力した数字を数値化し、mod 10 することによって
10以上の1桁目をtotalに加えるということでよろしいでしょうか?
0569デフォルトの名無しさん
2010/05/09(日) 23:49:560570デフォルトの名無しさん
2010/05/10(月) 00:01:45そうでしたか
ごめんなさい
0571デフォルトの名無しさん
2010/05/10(月) 00:08:16ありがとうございます
おかげさまで無事動かすことができました
0573デフォルトの名無しさん
2010/05/10(月) 17:10:420574デフォルトの名無しさん
2010/05/10(月) 17:11:01[2] 問題文(含コード&リンク):
ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求めよ。
但し、x(0)=1とし、反復回数を4とする
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日中
お願いします。
0575デフォルトの名無しさん
2010/05/10(月) 17:42:39それ以降の場合はレスしないかもしれません。
0576デフォルトの名無しさん
2010/05/10(月) 17:52:440577574
2010/05/10(月) 18:01:43自分でも作っているのですが、終了条件でメチャメチャになっています。
0578デフォルトの名無しさん
2010/05/10(月) 18:01:55http://codepad.org/SDGPDcsp
0579デフォルトの名無しさん
2010/05/10(月) 18:15:02ありがとうございます。
if (dy == 0) break;
この判定は問題ありますが、とりあえずはよしとしましょう。
0580デフォルトの名無しさん
2010/05/10(月) 18:16:420581デフォルトの名無しさん
2010/05/10(月) 18:19:14反復回数(最大反復回数ではなく)が4と指定されてるので、
終了条件は i == 4 とかでしょう?
0583デフォルトの名無しさん
2010/05/10(月) 19:44:13反復回数最大10回にして
収束判定まじめにやるならこんなんで
http://codepad.org/eKC9f5qt
0584デフォルトの名無しさん
2010/05/10(月) 19:50:31#include<stdio.h>
#include<math.h>
double f(double x)
{
return exp(-x)-x*x;
}
int main(void)
{
double x, d, delta=1.0e-10;
int i;
x=0.0;
for(i=0;i<=4;i++)
{
printf("%d x=%f f(x)=%f\n", i, x, f(x));
d=(f(x+delta)-f(x))/delta;
if(d==0.0) break;
x+=-f(x)/d;
}
return 0;
}
0585デフォルトの名無しさん
2010/05/10(月) 19:54:060586デフォルトの名無しさん
2010/05/10(月) 20:02:28トリップをつけたらいいですよ。ハンドル欄に#で始まる秘密の文字列を書けばいいんです。
たとえば
#abc ――�@
を名前欄に入力していますが、それが
GmgU93SCyE ――�A
と変換されています。�Aから�@を推測するのは、今のところ難しいようです。
0588デフォルトの名無しさん
2010/05/10(月) 20:59:34インターネットに投稿している者がいるとの連絡を受けました。
今回の課題は学生の理解を深める為に個別レポートとして出題されたものであり、
問題の解答そのものを丸投げすることは課題の趣旨に反する行為となります。
初回の講義でお話しましたように、ソースコードの書き方には個人差があり、
過去に提出したレポートなどから本人が書いたものかどうか判別することは十分可能です。
他人が書いたソースコードをレポートとして提出することは重大な不正行為に当たります。
提出されたレポートにおいて不正が確認された場合、本学の懲罰規程に従い厳しく処罰されます。
締切りは明日の17時とまだ時間もいくらか残されていますので、
この問題を投稿した、または参考に読んでいる学生には自分の力で
今回の課題に取り組んで頂けることを期待しています。
0589デフォルトの名無しさん
2010/05/10(月) 21:12:270590デフォルトの名無しさん
2010/05/10(月) 21:32:050591デフォルトの名無しさん
2010/05/10(月) 21:37:130593デフォルトの名無しさん
2010/05/10(月) 22:55:04http://codepad.org/9TL35R1Z
このようなコードを作ったのですが定数のNを#defineに変えたりいろいろやってもエラーが出てコンパイルできません
どうすればいいでしょうか?
0594デフォルトの名無しさん
2010/05/10(月) 23:20:54typedef struct 何かデータ名
{//何かメンバ
} Particle;
にしないと。
http://codepad.org/JtAm8YT3
0595デフォルトの名無しさん
2010/05/10(月) 23:31:57c++でなら通るのですが普通のc言語では同じエラーが出てしまいます
0596デフォルトの名無しさん
2010/05/10(月) 23:33:13C では const int としても配列の次数指定には使えないようですね。
#define がいやなら、enum { N = 32 } はいかが?
なお、C++ でコンパイルするとうまくいきました。
>>594
それは関係ないようですよ。無名の enum や struct は今はOKのはず。
規格に詳しい方のコメントをお待ちしております。
0597594
2010/05/10(月) 23:36:06原因はsqrtfみたい
0598デフォルトの名無しさん
2010/05/10(月) 23:37:42http://codepad.org/sI8wAIq0
0599デフォルトの名無しさん
2010/05/10(月) 23:40:460600デフォルトの名無しさん
2010/05/10(月) 23:42:23enumでも通ったのですが一概には決めれないでしょうがどちらを使ったほうがいいんですかね?
0601デフォルトの名無しさん
2010/05/10(月) 23:48:27最近のはやりは enum でしょうね。
#define は定義したところから最後まで見えてしまいますが、
enum ならば定義した場所によっては通用範囲を絞ることができますしね。
meyers 先生は enum や const int を使えとおっしゃっています―― C++ の教科書で、なんですけどね。
0602デフォルトの名無しさん
2010/05/10(月) 23:56:37ありがとうございます
0603デフォルトの名無しさん
2010/05/11(火) 15:37:52入力された整数の個数
平均値(小数点以下 1 桁まで表示)
最大値
最小値
を標準出力(ディスプレイ)に表示するプログラムを作成せよ。
ただし、9999が入力されたら入力を終了するものとし、9999は入力個数、平均値、最
大値、最小値には含めない。
また、最初に9999が入力された場合には、入力個数=0、平均値=0.0、最大値=0、
最小値=0が出力されるようにする。
0604デフォルトの名無しさん
2010/05/11(火) 15:53:53int main()
{
int n = 0, ma = 0, mi = 0; // 個数, 最大, 最小
double sum = 0; // 和
int x;
for (;;) {
scanf("%d", &x);
if (x == 9999) break;
if (n == 0 || x > ma) ma = x;
if (n == 0 || x < mi) mi = x;
n++;
sum += x;
}
printf("個数: %d\n", n);
printf("平均値: %.1f\n", n ? sum/n : 0.0);
printf("最大値: %d\n", ma);
printf("最小値: %d\n", mi);
return 0;
}
0605デフォルトの名無しさん
2010/05/11(火) 16:06:15ラムを作成せよ。
ただし、aに負の値が入力された場合には、再入力させるものとする。
実行例: () の部分が入力である。
Input a: (-4)
Input a: (-3)
Input a: (10)
a(decimal)=10
a(binary) =1010
0606デフォルトの名無しさん
2010/05/11(火) 16:36:23#include <stdio.h>
unsigned DtoB(int a)
{
unsigned x=1,ans=0,k=1;
while(a>0)
{
if(x & a) ans += k;
a = a >> 1;
k*=10;
}
return ans;
}
int main()
{
int a;
do{
scanf("%d",&a);
printf("Input a: (%d) \n",a);
}while(a < 0);
printf("a(decimal)=%d\n",a);
printf("a(binary)=%u\n",DtoB(a));
return 0;
}
0607よろしくお願いします
2010/05/11(火) 21:42:53[2] 問題文:
(1)\int_0^π/2 f(x^2cosx)dx
(0からπ/2までのf=x^2cosxの定積分)
(2)\int_1^e f(logx)^2dx
(1からeまでの(logx)の二乗の定積分)
(1),(2) の積分を実施する。
[3] 環境
[3.1] OS: Windows
[3.3] 言語:C
[5] その他の制限:無いです
0608デフォルトの名無しさん
2010/05/11(火) 22:12:27[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ランダムなアルファベットから成る、最大長255個の文字列を作成し、
文字配列char a[256]へ代入、putsで表示せよ。
作る文字列の長さははじめに入力すること。
[3] 環境
[3.1] OS:Windows7
[3.2] Visual C++ 2008 Express
[3.3] 言語: C
[4] 期限: 明日17時
[5] その他の制限:
なるべくシンプルに。乱数を利用するとよいと書いてありましたが
乱数とアルファベットがどう関連するのか分からないです…
0609デフォルトの名無しさん
2010/05/11(火) 23:20:07文字列長はコマンドライン引数から取るようにした。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LENGTH 255
int main(int argc, char **argv){
char a[MAX_LENGTH + 1];
int i, length;
srand((unsigned)time(NULL));
length = argc > 1 ? atoi(argv[1]) : MAX_LENGTH;
for(i=0; i < length; ++i){
a[i] = (char)( (rand() % 2) * 0x20 + (rand() % 26) + 0x41);
}
a[length] = '\0';
puts(a);
return 0;
}
0610デフォルトの名無しさん
2010/05/11(火) 23:20:29#include <iostream>
#include <boost/random.hpp>
#include <vector>
using namespace std;
int main()
{
char a[256]={0};
char alpha[('z'-'a'+1)*2];
for(int i=0;i<'z'-'a'+1;i++){
alpha[i]='a'+i;
alpha[i+26]='A'+i;
}
int len;
for(;;){
cout << "最大長255個の文字列の長さははじめに入力すること。" << endl;
cin >> len;
if(!cin.fail() && len>=0 && len<256)
break;
cin.clear();
cin.ignore(1024,'\n');
}
using namespace boost;
mt19937 gen(static_cast<unsigned long>(time(0)) );
uniform_smallint<> dst( 0, len-1 );
variate_generator<mt19937&, uniform_smallint<>> rand( gen, dst );
for( int i=0; i<len; ++i )
cout << alpha[rand()];
cout << endl;
return 0;
}
0611610
2010/05/11(火) 23:21:47スルーしてくれ
(1) http://ideone.com/ZkKUt
(2) http://ideone.com/YLCd3
単純な区分求積です。
0613デフォルトの名無しさん
2010/05/12(水) 01:10:43rand() % 2 (笑)
0614デフォルトの名無しさん
2010/05/12(水) 01:21:01コマンドライン引数に65535を渡してやる、うひゃひゃひゃひゃ
0615デフォルトの名無しさん
2010/05/12(水) 01:28:04>[3.3] 言語: C
(笑)
0616よろしくお願いします
2010/05/12(水) 08:43:38ありがとうございます!
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 255
int main(void){
char a[MAX_LENGTH + 1], r;
int i, length=0;
srand((unsigned)time(NULL));
printf("文字列の長さ:"); scanf("%d%*c", &length);
if(length < 0 || length > MAX_LENGTH)
length = MAX_LENGTH;
for( i=0; i < length; i++ ) {
r = rand()/(RAND_MAX/(26*2));
if(r<26) a[i] = r + 'A';
else a[i] = r - 26 + 'a';
}
a[length] = '\0';
puts(a);
}
0618デフォルトの名無しさん
2010/05/12(水) 18:19:53[2] 問題文:1.各自が自由に作成した画像のヒストグラ
ムを調べ、それぞれどのような形になるか画像として表示できるようにせよ。また、ヒストグラムから判断したし
きい値を用いて、2 値画像を作成せよ。
2.先の画像群に対して、平均化フィルタ(移動平均操作、重み付け移動平均操作など)、微分フィルタ(1
次微分、2 次微分など)をそれぞれ適用した画像を出力せよ。
http://www.dotup.org/uploda/www.dotup.org879740.txt
[3] 環境
[3.1] OS:Windows
[3.2] gcc 3.4 VC 6.0
[3.3] 言語:C/C++/
[4] 期限: 5月13日17:00まで
txtのソースのload_image_data();とsave_image_data(image, x_size, y_size);の間に付け加えるみたいです。
0619デフォルトの名無しさん
2010/05/12(水) 20:49:40[2] 問題文(含コード&リンク):
30個の要素を持つ配列に小数をキーボードから代入し,それらを小さい順にソートし,その結果をモニタに出力するプログラムを作成せよ
[3] 環境
[3.1] OS:vista
[3.2] コンパイラ名とバージョン: VC 2008
[3.3] 言語: C言語
[4] 期限: 5/13 7:00
よろしくお願いします。
0620デフォルトの名無しさん
2010/05/12(水) 20:59:10http://codepad.org/h0F6oJ2X
一番簡単なソートアルゴリズムでやってみた
0621デフォルトの名無しさん
2010/05/12(水) 21:00:320622デフォルトの名無しさん
2010/05/12(水) 21:03:12さすがにそれは手を抜きすぎ
というか質問の内容考えると、まださわりの方しかしてないような感じするし
余計ややこしくなるような気がする
0623デフォルトの名無しさん
2010/05/12(水) 21:54:21程度だと、回答が付かない可能性極めて高いw
0624デフォルトの名無しさん
2010/05/12(水) 22:23:51int f(int);
int main(void)
{
int no;
printf("整数を入力:");
scanf("%d",&no);
return 0;
}
void f(int n)
{
while (n-->0)
putchar('*');
putchar('\n');
}
入力したnの数だけ*を表示するプログラムなんですが、コンパイルできません。
どこがおかしいですか?
0625デフォルトの名無しさん
2010/05/12(水) 22:28:18矛盾してるから
int f(int);
void f(int n)
0626デフォルトの名無しさん
2010/05/12(水) 23:21:480627デフォルトの名無しさん
2010/05/13(木) 12:20:56[2] 問題文: 1〜9までの値の整数 n を入力として受け取り、実行例のように、その n を高さとした二等辺三角形を出力するプログラムを作成しなさい。
なお、10以上が入力されたら以下の実行例のようなエラーメッセージを発するようにしなさい。
実行例
1から9までの整数を入力:6
1
22
333
4444
55555
666666
55555
4444
333
22
1
1から9までの整数を入力:11
入力する数は1から9までです
0628デフォルトの名無しさん
2010/05/13(木) 12:44:19#include <stdio.h>
int main(void)
{
int i, j, n;
printf("1から9までの整数を入力:");
scanf("%d", &n);
if(n < 1 || 9 < n) printf("入力する数は1から9までです\n");
else {
for(i=1; i<=n; i++) {
for(j=0; j<i; j++) putchar('0'+i);
putchar('\n');
}
for(i=n-1; i>=1; i--) {
for(j=0; j<i; j++) putchar('0'+i);
putchar('\n');
}
}
return 0;
}
0629デフォルトの名無しさん
2010/05/13(木) 12:44:51http://codepad.org/XFEHNg3n
0630デフォルトの名無しさん
2010/05/13(木) 13:59:54[2] 画像ファイル情報を表す構造体hBitmapは次の定義を持つ。
typedef struct{
char signature[7];
int width,height;//縦横のピクセル数
int pixels; //ピクセル情報 (0,0)(0,1)..(0,width-1),(1,0),(1,1),...,(1,width-1),...という風に並ぶ。エンディアンはビッグエンディアンとする
}hBitmap;
sigunatureには文字列"hBitmap"が終端の¥0を含めて格納されるものとする
ピクセルは32ビットの色情報で上位8ビットは0 0~7ビットは赤
8~15ビットは青 16~23ビットは緑を表す。(各成分は256段階の色情報を
持つ)
2次元座標平面[-0.5,0.5]X[0.5,0.5]を大きさ600x600のビットマップに対応させ
そこで次の不等式が作る領域を指定された色で塗りつぶした画像ファイルを
上記構造体をファイルにバイナリ保存する形で作成するプログラムを作れ
(1)(x-0.25)^2+y^2<=0.5^2 (x+0.25)^2+y^2<=0.5^2
(2)x^2+(y-0.125)^2=0.01^2
(3)x^2+y^2=0.025^2
(4)x^2+(y+0.3)^2=0.03^2
(5)それ以外
(1)の塗りつぶし色 R=255 G=0 B=200
(2)の塗りつぶし色 R=255 G=0 B=180
(3)の塗りつぶし色 R=240 G=0 B=220
(4)の塗りつぶし色 R=180 G=180 B=180
(5)の塗りつぶし色 R=G=B=255
[3] OS:Windows Vista Home Edition IDE:Visual studio 2008 Express Edition 言語:C
[4] 2010/05/20迄
[5] 板書写し間違いがあるかも知れませんがよろしくお願いいたします。
0631デフォルトの名無しさん
2010/05/13(木) 14:17:13>sigunatureには文字列"hBitmap"が終端の\0を含めて格納されるものとする
なら
char signature[8];
でないと 終端の\0 分の器が足りない
0632デフォルトの名無しさん
2010/05/13(木) 14:29:34int pixels; も int *pixels; だよね。
0633デフォルトの名無しさん
2010/05/13(木) 14:44:39[2]
5匹の羊と5匹の狼を1匹ずつひとつの檻に入れる。
羊の数を狼の数が超えると羊が食べられるのでNG。
上の条件で羊と狼を全頭檻に入れられる順番の組み合わせを全通り出力するプログラム。
他に方法はないのでしょうか?
[3] WinXP / GCC / C
[4] 明日まで
[5] 標準入出力 / ループ / if / 配列 / ポインタ / 自作関数くらいまで習いました。
http://brunhild.sakura.ne.jp/up/src/up443431.txt
↑を繰り返すくらいしか思いつきません。
0634デフォルトの名無しさん
2010/05/13(木) 14:49:09問題文の意味が分かりません
0635デフォルトの名無しさん
2010/05/13(木) 14:53:51羊→狼→羊→狼→羊→狼→羊→狼→羊→狼
ですが、↓の順番だと狼の数が羊の数を上回ってしまうためNG
羊→狼→狼
最小の例のような常に狼の数が羊の数を上回らない順番を全て出力するプログラムです
0636デフォルトの名無しさん
2010/05/13(木) 14:57:56#include <stdio.h>
int is_ok(int value){
int i, sheep=0, wolf=0;
for(i=0;i<10;i++){
if((value>>i)&1) sheep++;
else wolf++;
if(wolf>sheep) return 0;
}
if(wolf!=5) return 0;
return 1;
}
void print_sequence(int value){
int i;
for(i=0;i<10;i++) printf("%s", ((value>>i)&1)?"羊":"狼");
printf("\n");
}
int main(void){
int i;
for(i=0;i<(1<<10);i++){
if(is_ok(i)){
print_sequence(i);
}
}
return 0;
}
0637デフォルトの名無しさん
2010/05/13(木) 15:42:30#include <stdio.h>
#define SHEEP_NUM 5
#define WOLF_NUM 5
#define WHOLE_NUM ((SHEEP_NUM)+(WOLF_NUM))
void hoge(int buf[], int sheep, int wolf){
int i, whole;
whole=sheep+wolf;
if(whole>=WHOLE_NUM){
for(i=0;i<WHOLE_NUM;i++) printf("%s", buf[i]?"羊":"狼");
printf("\n");
return;
}
if(sheep<SHEEP_NUM){
buf[whole]=1;
hoge(buf, sheep+1, wolf);
}
if(wolf<sheep){
buf[whole]=0;
hoge(buf, sheep, wolf+1);
}
}
int main(void){
int buf[WHOLE_NUM];
hoge(buf, 0, 0);
return 0;
}
0638デフォルトの名無しさん
2010/05/13(木) 15:47:04if(wolf<sheep){
↓
if(wolf<sheep && wolf<WOLF_NUM){
0640デフォルトの名無しさん
2010/05/13(木) 16:00:040641デフォルトの名無しさん
2010/05/13(木) 16:05:13場合の数を計算するときに、いわゆる「nCr」というものを使うことがある。これは、順番を特に決めない場合、n個のものからr個のものを取り出す場合をいい、
7C5 = 7! / (7-5)!5!
である。nCrであれば
nCr = n! / (n-r)!r! (但し、0≦r≦n)
この数を計算したい。
1. nとrを入力させる。
2. n!を計算させる
3. (n-r)!を計算させる
4. r!を計算させる
5. (2)/(3)/(4)を計算する
しかしn!と(n-r)!がかなりの部分まで重複することを利用すれば、かなり計算の手間を省くことができる
1から5の手順まで守ったプログラムと手間を省いたプログラムをそれぞれ作成しなさい
0642デフォルトの名無しさん
2010/05/13(木) 16:09:46[2] 問題文:
3次元空間座標(x,y,z)の数値を与えると、
ロボットの関節の角度(A,B,C)を計算するプログラムを作成する。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今週中にお願いします。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
L1,L2はロボットの腕の長さでL1:69.8/L2:77.35が与えられています。
また、それぞれの変換公式は
C= ±(プラスマイナス) arccos(((x^2+y^2+x^2)-(L1^2+L2^2))/(2*L1*L2))
B= arcsin(y/(L1+L2*cos(C)))
A= arctan(x/(-z)) ±(マイナスプラス) arccos(((L1+L2*cos(C))*cos(B))/root(x^2+y^2))
で、ABCは動作幅が制限されています。
Cの動作幅は-30<= C <=127 [deg]
Bの動作幅は-15<= B <=93 [deg]
Aの動作幅は-120<= A <=135 [deg]
最初にCを出すと値がプラスマイナスの2種類が出るため、
条件に当てはまる最適値を選んでradに変換した上でBに代入して計算、
Bの値をAに代入した上で、出てきた二つの値から最適値を選んで
結果を出力するのだと思うのですが、どのような条件式を書けばよいのでしょうか?
最適値の選び出し方の動作アルゴリズムだけでも結構ですのでお願いします。
0643640
2010/05/13(木) 16:58:03#include <stdio.h>
int main(void){
short ans[]={
0x01F,0x02F,0x037,0x03B,0x03D,0x04F,0x057,0x05B,
0x05D,0x067,0x06B,0x06D,0x073,0x075,0x08F,0x097,
0x09B,0x09D,0x0A7,0x0AB,0x0AD,0x0B3,0x0B5,0x0C7,
0x0CB,0x0CD,0x0D3,0x0D5,0x10F,0x117,0x11B,0x11D,
0x127,0x12B,0x12D,0x133,0x135,0x147,0x14B,0x14D,
0x153,0x155,0x20F,0x217,0x21B,0x21D,0x227,0x22B,
0x22D,0x233,0x235,0x247,0x24B,0x24D,0x253,0x255};
for(int i=sizeof(ans)/sizeof(ans[0]); i>0; i--){
for(int j=1; j<=10; j++)
printf("%s",ans[i]&(1<<(10-j))?"狼":"羊");
puts("");
}
}
0644デフォルトの名無しさん
2010/05/13(木) 17:07:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10597.c
0645デフォルトの名無しさん
2010/05/13(木) 17:14:01[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10598.txt[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4 )
[3.3] 言語: (C言語)
[4] 期限: (5月14日)
いい点が取りたいです。どうかよろしくお願いします。
0646デフォルトの名無しさん
2010/05/13(木) 17:15:41[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10598.txt
環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4 )
[3.3] 言語: (C言語)
[4] 期限: (5月14日)
いい点が取りたいです。どうかよろしくお願いします。
0647デフォルトの名無しさん
2010/05/13(木) 17:17:32URL間違えました。すみません
0649デフォルトの名無しさん
2010/05/13(木) 17:20:47最適値も何も答え自分で書いてるじゃん
0650デフォルトの名無しさん
2010/05/13(木) 17:32:59二個ある中のどっちか一つしか、次の式に入れられないので、
どちらか一つ正しいほうを選ぶ方法を教えてくれってことと解釈
まあ、数学嫌いなので関わる気はない。
0651デフォルトの名無しさん
2010/05/13(木) 18:01:47プログラミングの要素がない。すれちがい、ではないかしらん?
0652デフォルトの名無しさん
2010/05/13(木) 19:03:510653デフォルトの名無しさん
2010/05/13(木) 21:12:24見るだけができないってどうしちゃったの
0654630
2010/05/13(木) 21:21:01早々とやっていただけてありがとうございます。
ダウンロードしてテキストファイルに直して
コンパイルしたらエラーもなく動作しました。
hoge.datというファイルが出来ました。
どのような画像ファイルができているのか
見てみたいのですが、ダブルクリックしても
開けません。拡張子が対応していないみたいなので
拡張子を変えれば良いと思うのですが.bmpでは
駄目でした。どうすれば見れるのかも教えて
いただけるとうれしいです。
0655デフォルトの名無しさん
2010/05/13(木) 21:30:120656デフォルトの名無しさん
2010/05/13(木) 22:36:53int hBitmap_save2(const char *filename, hBitmap *bmp)
{
// fprintf(fp, "P3\n%ld %ld\n%d\n", bmp->width, bmp->height, 255);
fprintf(fp, "P6\n%ld %ld\n%d\n", bmp->width, bmp->height, 255);
// fprintf(fp, " %ld %ld %ld", RED(col), GREEN(col), BLUE(col));
fprintf(fp, " %c%c%c", RED(col), GREEN(col), BLUE(col));
}
// hBitmap_save2("hoge.ppm", bmp);
hBitmap_save2("hoge.ppm", bmp);
0658デフォルトの名無しさん
2010/05/13(木) 22:59:39fprintf(fp, "%c%c%c", RED(col), GREEN(col), BLUE(col));
0659デフォルトの名無しさん
2010/05/13(木) 22:59:44最近だと>>618かな
当方の環境は Windows/cygwin、処理系は gcc 3.4.4 です。
http://ideone.com/zrB3A
f1() は定義どおり、f2() は再帰関数(漸化式)を用いました。
0661デフォルトの名無しさん
2010/05/14(金) 00:17:440662デフォルトの名無しさん
2010/05/14(金) 00:31:13そですかね。掛け算を足し算に変えたんですけど、これってやっぱり「計算の手間を省いた」ことにはならないんですかね。
0663デフォルトの名無しさん
2010/05/14(金) 00:45:03この文章からどうして足し算が出てくるのか理解できない
>>663
じゃ、なおします。
http://ideone.com/ys6fN
0665デフォルトの名無しさん
2010/05/14(金) 02:00:43n! = 10*9*8*7*6*5*4*3*2*1
(n-r)! = 6*5*4*3*2*1
なので
n!/(n-r)! = 10*9*8*7
てことだろ
0667デフォルトの名無しさん
2010/05/14(金) 08:03:48>>665
なるほど。
http://codepad.org/XFavfdtT
0668デフォルトの名無しさん
2010/05/14(金) 08:27:20ソースを修正する。
0669デフォルトの名無しさん
2010/05/14(金) 08:33:13ん?なんか間違いがありますかね?
0670デフォルトの名無しさん
2010/05/14(金) 08:46:34>>666
ソースを修正する。
0672デフォルトの名無しさん
2010/05/14(金) 13:00:02#include <stdio.h>
int main() {
int i = 0xffffffff;
printf("%d\n%u\n%le\n",i,i,
0x3ff0000000000000);
return 0;
}
0xff・・・を「符号付整数の最小値(絶対値が最大の負の数)を表すビットパターン」
0x3f・・・を「絶対値が同じで符合の異なる倍精度実数」
に書き換え,結果を確かめよ。
これがわからない;;
もしよかったら回答求む!
0673デフォルトの名無しさん
2010/05/14(金) 13:11:59>0xff・・・を「符号付整数の最小値(絶対値が最大の負の数)を表すビットパターン」
0x80000000
>0x3f・・・を「絶対値が同じで符合の異なる倍精度実数」
0xbff0000000000000
0674デフォルトの名無しさん
2010/05/14(金) 13:16:170675デフォルトの名無しさん
2010/05/14(金) 13:16:55倍精度実数は IEEE 754
でよければ
#include <stdio.h>
int main() {
int i = 0x80000000; // <- ffffffff
printf("%d\n%u\n%le\n",i,i,
0xbff0000000000000); // <- 3ff0000000000000
return 0;
}
0676657
2010/05/14(金) 14:11:03@@ -90 +90 @@
- fprintf(fp, "P3\n%ld %ld\n%d\n", bmp->width, bmp->height, 255);
+ fprintf(fp, "P6\n%ld %ld\n%d\n", bmp->width, bmp->height, 255);
@@ -96 +96 @@
- fprintf(fp, " %ld %ld %ld", RED(col), GREEN(col), BLUE(col));
+ fprintf(fp, "%c%c%c", RED(col), GREEN(col), BLUE(col));
@@ -171 +171 @@
-// hBitmap_save2("hoge.ppm", bmp);
+ hBitmap_save2("hoge.ppm", bmp);
0677630
2010/05/14(金) 14:44:34案の定エラーがででてしまいました。
Line90:(が必要とか
Line90:,が必要とか
です。
これはなんとか直せそうなのですが
直したら別の場所で同じようなエラーが...
0678デフォルトの名無しさん
2010/05/14(金) 15:46:14いじったソース貼ってみ?
多分すごいことやってんでしょ
0679630
2010/05/14(金) 18:13:51出来上がりの画像をみてみたいのですが残念です。
0680 ◆UJgUFCVXlA
2010/05/14(金) 19:07:15[2] 問題文:dy/dx=(1-y)/15の微分方程式をルンゲクッタ法を用いてx=0〜100までの値を求めよ。
[3]
[3.1] OS:windouwsXP
[3.2] コンパイラ名とバージョン: Fujitsu Fortran & C Academic Package V3.0 L10
[3.3] 言語:C
[4] 期限: 5/19 17:00まで
[5] その他の制限:初期値は0で、刻み幅は任意です。
コード、計算結果をプリントして提出、また計算結果をグラフにして提出しなければならないので、ファイル形式で保存できるようにして欲しいです。
プログラミングの授業ではないのに急に出されて困っています。
よろしくお願い致します。
0681デフォルトの名無しさん
2010/05/14(金) 22:52:44[2] 問題文(含コード&リンク): 以下のようにプログラムを作成してください。バブルソートという名前です
0に34 1に3 2に11 3に28 4に17が入っています。
(1)0番と1番の値を比べ、0番が大きいなら、入れ替える→(2)順に1番と2番、2番と3番…と比べて、(1)と同様の処理を行う→(3)端まで行ったら0番に戻って、n-1番までで(1)と(2)を繰り返す(ここの例ではn=4)
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: [2010年5月14日まで]
[5] その他の制限:なるべく簡単にしてください。swap関数を使います。
最初は
#include <iostream>
using namespace std;で始まります
出力はcout 入力はcinです
0684デフォルトの名無しさん
2010/05/14(金) 23:38:08[2] 問題文(含コード&リンク):
次のプログラム(最小二乗法による直線近似)を配列を用いて書き換えなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10600.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年5月19日まで
[5] その他の制限:特になし
よろしくお願いします。
0685デフォルトの名無しさん
2010/05/14(金) 23:47:40[2] 問題文(含コード&リンク):
下記のような成績があった時、各科目の平均、各学生の合計点の偏差値、科目毎の相関係数を求めるプログラムを配列を用いて実装しなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10601.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年5月19日まで
[5] その他の制限:特になし
よろしくお願いします。
0686デフォルトの名無しさん
2010/05/14(金) 23:51:51[2] 問題文(含コード&リンク):
配列を用いて連立一次方程式を解くプログラムを実装し、以下の連立一次方程式の解を求めなさい。
a + 2b -5c + 4d = 2
2a - 4b + 2c + 3d = 18
4a + 15b - 32c + 3d = -116
5a + 15b - 32c + d = -129
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年5月19日まで
[5] その他の制限:特になし
よろしくお願いします。
0687デフォルトの名無しさん
2010/05/15(土) 00:37:120688デフォルトの名無しさん
2010/05/15(土) 01:33:33#include <stdio.h>
int main(void)
{
double array[4][5] = {{1,2,-5,4,2},{2,-4,2,3,18},{4,15,-32,3,-116},{5,15,-32,1,-129}};
int i, j, k;
for(i=0; i<4; i++) {
double r = array[i][i];
for(j=i; j<5; j++) array[i][j] /= r;
for(j=0; j<4; j++) {
if(i==j) continue;
r = array[j][i];
for(k=i; k<5; k++) array[j][k] -= r * array[i][k];
}}
for(i=0; i<4; i++) printf("%c = %f\n", 'a' + i, array[i][4]);
return 0;
}
0689デフォルトの名無しさん
2010/05/15(土) 01:41:48間違ってる
0690デフォルトの名無しさん
2010/05/15(土) 06:40:47[2] 問題文(含コード&リンク):
以下のプログラムについて,出力結果が 5 となってプログラムが動作するように穴を埋めなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10602.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2010年5月18日まで
[5] その他の制限:再帰の考えを使ってリストの長さを求めています
よろしくお願いします。
0691デフォルトの名無しさん
2010/05/15(土) 06:47:300692デフォルトの名無しさん
2010/05/15(土) 06:48:45return 1+list_size(head->next);
0694デフォルトの名無しさん
2010/05/15(土) 08:04:38バブルソートが何か理解してない
0695デフォルトの名無しさん
2010/05/15(土) 08:38:35処理時間を考えていない、効率。
#include <iostream>
using namespace std;
int main() {
int a[] = {34, 3, 11, 28, 17};
int N = sizeof(a) / sizeof(int) - 1;
unsigned int i, j;
for (i = 0; i < N; i++)
for (j = N - 1; j >= i ; j--)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
for (i = 0; i <= N; i++)
cout << a[i] << ", ";
cout << endl;
return 0;
}
0697デフォルトの名無しさん
2010/05/15(土) 10:23:48問題文をよく嫁
0698デフォルトの名無しさん
2010/05/15(土) 13:03:45ありがとうございます
0699デフォルトの名無しさん
2010/05/15(土) 14:48:40#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a[] = {34, 3, 11, 28, 17};
const int N = 5;
int i, j;
for (i=N;i>0;--i){
for (j = 0; j < N -1 ; ++j){
if (a[j] > a[j + 1]){
swap(a[j], a[j + 1]);
}
}
}
for (i = 0; i < N; i++) {
cout << a[i] << ", ";
}
cout << endl;
return 0;
}
//まずはじめに0番と1番を比べて…
0700681
2010/05/15(土) 15:30:580(N^2)
0(NlogN)とかを話していました
0701デフォルトの名無しさん
2010/05/15(土) 15:31:56前者は選択ソート
後者はマージソートもしくはクイックソート
0702デフォルトの名無しさん
2010/05/15(土) 16:24:53http://codepad.org/j5k8ezON
0703デフォルトの名無しさん
2010/05/15(土) 16:26:56for(j=0; j<i; j++) {
if(a[j] > a[j+1]) swap(a[j], a[j+1]);
}}
0704683
2010/05/15(土) 19:14:06>>681 を読む限り >>683 は問題文のとおりなんですが。
どの点が「ちゃんと読んでいない」のか教えてください。
>>695
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
を読む限りバブルソートとはそういうもの
0705683
2010/05/15(土) 19:16:59正確には
for (i = 0; i < N - 1; i++)
for (j = N - 1; j >= i ; j--)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
一回余分
0706デフォルトの名無しさん
2010/05/15(土) 19:17:560707デフォルトの名無しさん
2010/05/15(土) 19:18:23どこが「問題文をよくよめ」という判断になるのか plz
0708デフォルトの名無しさん
2010/05/15(土) 19:19:24>for (i=N;i>0;--i){
一回多い。
0709デフォルトの名無しさん
2010/05/15(土) 19:21:33比較の向きが逆じゃねーかよw
0710デフォルトの名無しさん
2010/05/15(土) 19:26:13若干改良がなされているが、それでもオーダーは Ο(N^2)
0711デフォルトの名無しさん
2010/05/15(土) 19:27:37http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
を読めばわかるが、別に短くならなくとも良い。
それに短くなるように書いたところで、計算量のオーダーはΟ(N^2) で変わらない。
0712681
2010/05/15(土) 19:29:280713デフォルトの名無しさん
2010/05/15(土) 19:31:35>>681
>0番と1番の値を比べ、0番が大きいなら、入れ替える
>>696
>if (a[j] > a[j + 1])
比較の向きはあっている。
0714デフォルトの名無しさん
2010/05/15(土) 19:33:37そこも読み違えてる気がする。
一つずつ短くなるのは必須で交換されなかった場合に一つ以上短くしなくてもいいってだけだろ
0715デフォルトの名無しさん
2010/05/15(土) 19:33:56まずはじめに3番と4番を比べてしまっているという意味で逆
0716デフォルトの名無しさん
2010/05/15(土) 19:34:24向きってのは0と1から比較して添え字の大きいほうに向かうって意味で使ってる。
0717683
2010/05/15(土) 19:34:39>>683 を書いた私としては、どうも根拠のない意味不明の物言いがはいってきている、とは感じているのですが、
最終的にはご自分で判断するしかないですね。
0718デフォルトの名無しさん
2010/05/15(土) 19:36:57あと、◆QZaw55cn4c
トリつけるんなら全部につけてくれ
0719デフォルトの名無しさん
2010/05/15(土) 19:37:24http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
>全ての要素に関して、隣接する要素と比較し順序が逆であれば入れ替える。これを要素数-1回繰り返すことでソートを行なう。
別に短くするようなことは一言も書かれていませんが。
無論短くするのは改良の一手段であることは認めますが、短くしようがしまいが計算量のオーダーはΟ(N^2)
0720デフォルトの名無しさん
2010/05/15(土) 19:38:04>「比較回数」は、高々n(n-1)/2回。
0721デフォルトの名無しさん
2010/05/15(土) 19:38:54ん、なるほど。それはそうですねえ。
0722デフォルトの名無しさん
2010/05/15(土) 19:39:56>確定していない部分について1つずつ減らしながら繰り返す。
0723デフォルトの名無しさん
2010/05/15(土) 19:43:27その1文しか読んでないの?
もう少し後まで読もうぜ
少なくともサンプルコードぐらいまではなw
>for each j in 2 to length(A) - i + 1 do:
なんでiを引いてるか理解できてるか?
0724696
2010/05/15(土) 20:07:27(1)0番と1番の値を比べ、0番が大きいなら、入れ替える
→(2)順に1番と2番、2番と3番…と比べて、(1)と同様の処理を行う
→(3)端まで行ったら0番に戻って、n-1番までで(1)と(2)を繰り返す(ここの例ではn=4)
>>683
→(3)端まで行ったら0番に戻って、"n"番までで(1)と(2)を繰り返す(ここの例ではn=4)
0725デフォルトの名無しさん
2010/05/15(土) 20:15:11unsigned int だと無限ループしないか?
0726デフォルトの名無しさん
2010/05/15(土) 20:15:20んー、たしかに短くしてますねえ。これは大変失礼いたしました。
0727デフォルトの名無しさん
2010/05/15(土) 20:16:10http://codepad.org/mgl1BcvL
0729デフォルトの名無しさん
2010/05/15(土) 20:24:12#include <iostream>
using namespace std;
int main() {
int a[] = {34, 3, 11, 28, 17};
unsigned int i, j;
for (i = 0; i < sizeof(a) / sizeof(int) - 1 - 1; i++)
for (j = 0; j < sizeof(a) / sizeof(int) - 1 - i; j++)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
for (i = 0; i < sizeof(a) / sizeof(int); i++)
cout << a[i] << ", ";
cout << endl;
return 0;
}
/* end */
0731デフォルトの名無しさん
2010/05/15(土) 20:29:39>>684解いてあげようぜ!
0732デフォルトの名無しさん
2010/05/15(土) 20:30:43見つけにくいバグ作るなよw
0735デフォルトの名無しさん
2010/05/15(土) 22:22:04n=sizeob(a)/sizeof(int)-1;
while (n)
{
for (i=0;i<n;i++)
if (a[i]>a[i+1])swap(a[i],a[i+1]);
n--;
}
0737デフォルトの名無しさん
2010/05/16(日) 02:56:300738デフォルトの名無しさん
2010/05/16(日) 03:55:50バブルソート様を使ってないだろ
0739デフォルトの名無しさん
2010/05/16(日) 09:07:07list_for_eachでごりごり探すコードしか見てないなあ
0740デフォルトの名無しさん
2010/05/16(日) 17:13:37[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10603.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月17日 21:00まで
[5] その他の制限:自分である程度の形まで作ったのですが・・・
コンパイル、実行すると先頭に余計な数字が出てきてしました。
(output:-16121856 90 40 30 50 70 60 40 90 80 10 30 20)
どこを直せばいいのでしょうか?教えてください。よろしくお願いします。
0741デフォルトの名無しさん
2010/05/16(日) 17:19:58uriage[0]~[11]で12個
0742デフォルトの名無しさん
2010/05/16(日) 17:20:30i=12-1
0743デフォルトの名無しさん
2010/05/16(日) 17:42:00[2] 問題文(含コード&リンク):http://www1.axfc.net/uploader/He/so/277932
pass:1
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] C言語
[4] 期限: 2010年06月18日12:00まで
[5] その他の制限:とくにありません
全くわからなくて困っています。どうかよろしくお願いします
0744デフォルトの名無しさん
2010/05/16(日) 17:46:54[2]asciiコード表を出力しなさい。(main関数、プロトタイプ宣言、関数定義を全て書くこと。)
[3]windowsでコンパイラはborland C++ 5.5.1、C言語です。
[4]火曜日まで
よろしくお願いします。
0745デフォルトの名無しさん
2010/05/16(日) 18:05:520746デフォルトの名無しさん
2010/05/16(日) 18:11:590747デフォルトの名無しさん
2010/05/16(日) 18:13:410748デフォルトの名無しさん
2010/05/16(日) 18:14:08これがモジュール化できた状態なんでしょうか?
配列を使うことが条件となっているのでよろしくお願いします
0749omi ◆SjLuktgpzQ
2010/05/16(日) 19:00:56[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 5月19日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはい 特にありません
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10604.txt
問題文はこちらになります。わたしなりに頑張ったのですが、できませんでした。どうかよろしくおねがいします。
0750デフォルトの名無しさん
2010/05/16(日) 20:54:22無駄な入れ替えとか、引数名がi,jとか、配列とnをグローバルにするっぽいとことか、
なんか気持ち悪くてやるきになれない。
0751681
2010/05/16(日) 21:03:42using namespace std;
void swap(int &a);
int main() {
int a[5]={34,3,11,28,17};
この続きからお願いできないでしょうか…
0752デフォルトの名無しさん
2010/05/16(日) 21:47:03[2] 問題文(含コード&リンク): 掃き出し法で下の連立方程式を解くプログラムを作成してください
3x+y+z=10
x+5y+2z=2
x+2y+5z=30
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: [2010年5月17日まで]
[5] その他の制限:なるべく簡単にしてください。swap関数とか配列とかその辺りを使います。
最初は
#include <iostream>
using namespace std;で始まります
出力はcout 入力はcinです
0753デフォルトの名無しさん
2010/05/16(日) 22:10:13そんなに制約が厳しいのか
わけのわからん宿題だな
0754デフォルトの名無しさん
2010/05/16(日) 22:19:05そのswap()は無理w
0755デフォルトの名無しさん
2010/05/16(日) 22:27:19一応 g++ (MinGW) ならこれで一つ後ろの要素と交換できた
void swap(int &a)
{
int *p=&a+1 ,temp;
temp=a;
a=*p;
*p=temp;
}
0757デフォルトの名無しさん
2010/05/16(日) 23:58:28ありがとうございます
0758デフォルトの名無しさん
2010/05/17(月) 00:30:00>>530 >>533-535>>537-540
0759デフォルトの名無しさん
2010/05/17(月) 00:46:08その発想はなかった
みんな面白いこと考えるなぁ
0760デフォルトの名無しさん
2010/05/17(月) 01:45:25[2] 問題文(含コード&リンク):
以下のプログラムについて,出力結果が 10 となってプログラムが動作するように穴を埋めなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10605.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2010年5月18日まで
[5] その他の制限:答えには,carとcdrが使われていること。
>>689ですが、こちらも分からなかったので
よろしくお願いします
0761デフォルトの名無しさん
2010/05/17(月) 01:48:14>>689ではなく>>690です。
0762デフォルトの名無しさん
2010/05/17(月) 01:59:42return car(head) + sum(cdr(head));
0763デフォルトの名無しさん
2010/05/17(月) 17:01:22ありがとうございます。
0764デフォルトの名無しさん
2010/05/17(月) 18:18:40いまどきlispをするんですかね
0765デフォルトの名無しさん
2010/05/17(月) 18:20:46[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10606.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc )
[3.3] 言語: (C言語)
[4] 期限: (5月18日)
[5] その他の制限: この課題で要求されていることは、一見しただけでは単に与えられた計算
式に従って計算することだけの様にも見えるが、E≠128の時は計算結果を保持した変数
の内部のビット列が入力したビット列と一致することも要求されている。この要求を満た
すためには、計算のために用意する変数のデータ型を適切に選ばなければならないし、ま
た、誤差が発生しない計算方法を選ばなければならない。例えば、数字関数は色々な引数
に対してある程度の精度の計算結果を保証してくれるものであるが、計算結果が内部で誤
差無しで表せる場合に実際に誤差無しの計算結果をもたらすことを保証するものではな
い.そういう理由で、計算にはpow(,)等の数学関数は使うべきではない。だそうです。
自分ではできませんでした。よろしくお願いいたします。
0766デフォルトの名無しさん
2010/05/17(月) 18:42:55[2]要素数nの実数型配列cの要素全てにaを入力する関数void value(double v,int n,double x);を定義せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windous
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限:19日
頼みます
0767デフォルトの名無しさん
2010/05/17(月) 20:24:110768デフォルトの名無しさん
2010/05/17(月) 21:26:01#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, d, x;
printf("長さが32の0と1の列を入力せよ.\n");
for (j = 0; j < 32; j++) {
scanf("%1d", &d);
if (d != 0 && d != 1) {
printf("0と1以外の文字があった.\n");
abort();
}
x = (x << 1) | d;
}
printf("16進表現: %08x\n", x);
printf("実数値: %g\n", *(float*)&x);
return 0;
}
0769デフォルトの名無しさん
2010/05/17(月) 21:30:14int main(void) {
union {
float dataf;
unsigned int datai;
} d;
int i;
char in[32+1+1];
while(1){
puts("1と0を32個入力してください。");
puts("SEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDD");
fgets(in, 32+1+1, stdin);
in[32] = '\0';
for(i=0; i<32; i++)
in[i] = (in[i] & 1) | '0';
/*12345678901234567890123456789012*/
puts(in);
d.datai = 0;
for(i=0; i<32; i++) {
d.datai = (d.datai << 1) | (in[i] & 1);
}
if( ((d.datai >> 23) & 0xFF) == 0xFF) { /* & で、符号を取る */
if( (d.datai & 0x7FFFFF) == 0)
puts("Inf");
else
puts("NaN");
} else
printf("%08X\n%.10e\n", d.datai, d.dataf);
}
}
0771デフォルトの名無しさん
2010/05/17(月) 23:44:35[2] n科目の点数を入力してGPAを出す(100~90が4,80~89は3,70~79は2,60~69は
1,60以下は0)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5月17日 27:00まで
[5] その他の制限:特に無し
0772デフォルトの名無しさん
2010/05/17(月) 23:49:23int main(void)
{
int i, n, temp;
double gpa = 0.0;
scanf("%d", &n);
for(i=0; i<n; i++) {
scanf("%d", &temp);
if(temp >= 90) gpa += 4;
else if(temp >= 80) gpa += 3;
else if(temp >= 70) gpa += 2;
else if(temp >= 60) gpa += 1;
}
printf("%.2f\n", gpa / n);
return 0;
}
0773デフォルトの名無しさん
2010/05/17(月) 23:54:55どうもありがとうございます。
0774デフォルトの名無しさん
2010/05/18(火) 01:26:52[2] 問題文(含コード&リンク):
入力した画像を3〜16値階調にする多値ディザ法のプログラムを作りなさい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: BCC5.5.1
[3.3] 言語: C言語
[4] 期限: 5月22日正午
[5] その他の制限:
グレースケールの画像をロードし、image_in[256][256]という配列に保存してあります。
これに多値ディザ法を適用し、image_out[256][256]に出力させたいです。
ロード部分は問題無いので、多値ディザ法を行う部分をお願いします。
[2] 問題文(含コード&リンク):http://water.eit.hirosaki-u.ac.jp/~slmizu/pa2010/
ハノイの塔を解くプログラムの時間計算量と空間計算量を調べる
* 時間計算量、空間計算量をそれぞれ、while ループの実行回数、プログラムが実際に使用するスタックのサイズとして求める。
* 上記二つの量を円盤の枚数毎に求め、横軸に円盤枚数(1-30)をとって図にプロットする。
[3] 環境
[3.1] linux
[3.2] gcc
[3.3] C言語
[4] 2010年5月24日(月)
[5]なし
よろしくお願いします
0776デフォルトの名無しさん
2010/05/18(火) 17:20:12[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10608.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 2010年5月19日午前中
[5] その他の制限:特になし
以前お世話になりました。
追加問題が出たのでご助力お願いします。
0777デフォルトの名無しさん
2010/05/18(火) 20:22:50サンプルのイメージファイル UP!
0778デフォルトの名無しさん
2010/05/18(火) 21:16:17ttp://www1.axfc.net/uploader/He/so/278200.zip
0779774
2010/05/18(火) 22:39:42サンプル画像・参考プログラム・課題を
http://www.age2.tv/rd05/src/up6027.zip.html pass:c
で用意しました。
お時間があれば、平均誤差最小法もお願いしたいです。
0780デフォルトの名無しさん
2010/05/19(水) 01:31:40とりあえず、それっぽいのを作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10609.c
KITでもまともなのやってるんだな
0781デフォルトの名無しさん
2010/05/19(水) 03:25:08誤差拡散
int x, y, a, b, c, d, level_num, max;
level_num=3; // 3値階調の場合 level_num=3
max=level_num-1;
for(y=0;y<256;y++)
{
d=255/2/max;
for(x=0;x<256;x++)
{
a=image_in[y][x]+d;
b=a*max/255;
c=b*255/max;
image_out[y][x]=c;
d=a-c;
}
}
0782774
2010/05/19(水) 07:39:02ありがとうございます。
これ、まともな内容ですか?
3年開講のこの科目でコンパイラのインストール方法からコンパイル・実行方法
を何周かにかけて説明するようなレベルですから。
0783デフォルトの名無しさん
2010/05/19(水) 13:16:30内容ほとんど見てないけど、ちゃんと作ってるにおいがするよ
授業のレベルは超えているかもね
0784デフォルトの名無しさん
2010/05/19(水) 20:12:50例えば13578という整数だと
a[0]=8,a[1]=7,・・・,a[4]=1という感じにしたいのです
よろしくお願いします
0785デフォルトの名無しさん
2010/05/19(水) 20:23:460786デフォルトの名無しさん
2010/05/19(水) 20:30:01for(i=0; i<5; i++, n/=10) a[i] = n % 10;
0787デフォルトの名無しさん
2010/05/19(水) 20:39:380788デフォルトの名無しさん
2010/05/19(水) 20:53:450789デフォルトの名無しさん
2010/05/19(水) 21:20:36#include <stdio.h>
int main()
{
int i, a[5], n = 13578;
char buf[6];
sprintf(buf, "%d", n);
sscanf(buf, "%1d%1d%1d%1d%1d", a+4, a+3, a+2, a+1, a);
for (i = 0; i < 5; i++)
printf("a[%d]=%d\n", i, a[i]);
return 0;
}
0790デフォルトの名無しさん
2010/05/19(水) 21:25:100791デフォルトの名無しさん
2010/05/19(水) 21:45:180792デフォルトの名無しさん
2010/05/19(水) 22:11:060793デフォルトの名無しさん
2010/05/19(水) 22:31:39リダイレクションを用いて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10610.txt
のデータを取り込み、配列を使って最小2乗法による近似を書いてください。
早急にお願いします。
0794デフォルトの名無しさん
2010/05/19(水) 22:36:270795デフォルトの名無しさん
2010/05/19(水) 22:36:48ポインタなどは習っていないため、できるだけ簡単に、もう一度お願いしたいです。
配列は使ってください。
急いでいますので、わがまま言ってすみませんが、よろしくお願いします。
0796デフォルトの名無しさん
2010/05/19(水) 23:06:060797デフォルトの名無しさん
2010/05/19(水) 23:10:15>>702見たけどポインタ使って無いじゃん
stdinから読み込むように直すだけ
0798デフォルトの名無しさん
2010/05/19(水) 23:21:12配列?
#include <stdio.h>
int main() {
int n = 0;
double a, b;
double x, y;
double sum_xy = 0.0, sum_x = 0.0, sum_y = 0.0, sum_x2 = 0.0;
for (;;) {
if (scanf("%lf %lf", &x, &y) != 2) break;
printf("%.2f %.3f\n", x, y);
sum_xy += x * y;
sum_x += x;
sum_y += y;
sum_x2 += x * x;
n++;
}
a = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x * sum_x);
b = (sum_x2 * sum_y - sum_xy * sum_x) / (n * sum_x2 - sum_x * sum_x);
printf("a = %f\n", a);
printf("b = %f\n", b);
return 0;
}
0799デフォルトの名無しさん
2010/05/19(水) 23:42:51こんな感じじゃないかな。
#include <stdio.h>
int main() {
int n = 0;
double a, b;
double x, y;
double sum_xy = 0.0, sum_x = 0.0, sum_y = 0.0, sum_x2 = 0.0;
char in_fmt[] = "%lf %lf";
char out_fmt[] = "%.2f %.3f\n";
for (;;) {
if (scanf(in_fmt, &x, &y) != 2) break;
printf(out_fmt, x, y);
sum_xy += x * y;
sum_x += x;
sum_y += y;
sum_x2 += x * x;
n++;
}
a = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x * sum_x);
b = (sum_x2 * sum_y - sum_xy * sum_x) / (n * sum_x2 - sum_x * sum_x);
printf("a = %f\n", a);
printf("b = %f\n", b);
return 0;
}
0800デフォルトの名無しさん
2010/05/20(木) 00:05:140801デフォルトの名無しさん
2010/05/20(木) 01:21:05[2] 問題文:
テストの点数を入力し合計点、平均点、受験者数、合格者数を表示するプログラムを作成しなさい。ただし、データの終わりの999(999点と表示しない)合格者は60点以上
実行例
84 <--キーボードから点数入力
84点 <--入力した点数を表示
95
95点
48
48点
66
66点
80
80点
999 <--データの終わり(999点とは表示しない)
合計点=373点
平均点=74.6点
受験者数=5名
合格者数=4名
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4]期限:20日8:10
突然ながらおねがいします。
0802デフォルトの名無しさん
2010/05/20(木) 02:12:04ttp://ideone.com/PMIt9
0803デフォルトの名無しさん
2010/05/20(木) 07:01:490804デフォルトの名無しさん
2010/05/20(木) 07:48:33ありがとうございます!!
0805デフォルトの名無しさん
2010/05/20(木) 08:43:13>>685 を提出して、先生に100点もらえばいいだけの話
0806805
2010/05/20(木) 10:07:48sd_t = sqrt(sum_tt/n);
for(i=0; i<n; i++) {
printf("%f\n", (data[T][i] - ave_t) / sd_t * 10 + 50);
}
0807デフォルトの名無しさん
2010/05/20(木) 11:27:58それCになってないぞ
C++になってる
Cは変数の宣言を文の途中に書けない
0808デフォルトの名無しさん
2010/05/20(木) 11:29:390809デフォルトの名無しさん
2010/05/20(木) 11:40:06×>>802
○>>702
0810デフォルトの名無しさん
2010/05/20(木) 11:47:440811デフォルトの名無しさん
2010/05/20(木) 11:55:29ローカルな話はどうでもいいだろ
普通のCでOKならそれでいいじゃん
0812デフォルトの名無しさん
2010/05/20(木) 12:44:54gcc -std=c89
0813デフォルトの名無しさん
2010/05/20(木) 12:59:280814812
2010/05/20(木) 14:29:22CL /TP にするしかない
0815デフォルトの名無しさん
2010/05/20(木) 18:06:35>>702を書き換えてみた
http://codepad.org/AfLUlPgb
昨日はレス番号混同したみたいだ
スマンwww
0817デフォルトの名無しさん
2010/05/20(木) 19:33:39http://codepad.org/jj6UHy0j
かな。標準偏差を求める式が違っていたようだ
0818デフォルトの名無しさん
2010/05/20(木) 19:49:45[2] 問題文(含コード&リンク):
直角三角形の3辺a,b,cのa,bの長さが与えられたときCの長さを返す関数のプログラム、
角度0〜180の値を与えるラジアンに変換した値、sinの値、cosの値を返す関数のプログラムをひとつのプログラムで行う。
π=3.141592
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: \C
[4] 期限: 月曜日まで
[5] その他の制限:値は標準入力から出力、関数からの戻り値を標準出力に出力
0819デフォルトの名無しさん
2010/05/20(木) 20:52:31斜辺は c ですか?
sinθ, cosθ のθはどの角ですか?
0820デフォルトの名無しさん
2010/05/20(木) 20:58:36#include <stdio.h>
#include <math.h>
int main(void) {
double a, b, c1, c2;
printf("直角三角形の2辺の長さを入力\nInput a b = ");
scanf("%lf %lf", &a, &b);
c1 = sqrt(a*a + b*b);
c2 = sqrt(fabs(a*a - b*b));
printf("直角三角形のもう1辺の長さ = %f, %f\n", c1, c2);
}
0821デフォルトの名無しさん
2010/05/20(木) 21:33:31Cは斜辺です。
どの角という指定はないです。
でも0〜180の指定はあります。
>>820
ありがとうございます。
0822デフォルトの名無しさん
2010/05/20(木) 21:43:17普通のCでコンパイル出来ないから言ってるんだが
>>817
直ってるね
0823デフォルトの名無しさん
2010/05/20(木) 21:56:57#define ROW 3
#define COLUMN 4
int main(void)
{
double a[ROW][COLUMN];
int i, j;
printf("%d行%d列の行列の各要素を入力してもらいます\n", ROW, COLUMN);
for ( i = 0 ; i < ROW ; i++)
{
printf("第%d行の要素を入力して下さい>>>", i+1);
for ( j = 0 ; j < COLUMN ; j++)
{
scanf("%lf", &a[i][j]);
}
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < ROW ; i++)
{
for ( j = 0 ; j < COLUMN ; j++)
{
printf("a[%d][%d]=%f\t", i+1, j+1, a[i][j]);
}
printf("\n");
}
return 0;
}
0824デフォルトの名無しさん
2010/05/20(木) 21:57:38#define ROW 3
#define COLUMN 3
int main(void)
{
double a[ROW][COLUMN]={ {1, 2, 3}, {5, 6, 7}, {9, 10, 11} };
double b[ROW][COLUMN]={ {1.1, 2.2, 3.3}, {5.5, 6.6, 7.7},
{10.1, 11.1, 12.2} };
double c[ROW][COLUMN];
int i, j;
printf("行列Aと行列Bの和は次の通りです\n");
for ( i = 0 ; i < ROW ; i++)
{
for ( j = 0 ; j < COLUMN ; j++)
{
c[i][j] = a[i][j] + b[i][j];
printf("%8.3f", c[i][j]);
}
printf("\n");
}
return 0;
}
***************************************************************
上の2つのプログラムを参考にして、N×N行列AとBをキーボードから入力し、行列A、行列B、及び行列AとBの積ABを出力するプログラムを作成する
よろしくお願いしますorz
0825820
2010/05/20(木) 22:44:50if(c1 != 0.0) {
printf("\n%f, %f, 斜辺=%f の時の\n", a, b, c1);
printf("sinθ, cosθ=%f, %f\n", a/c1, b/c1);
printf("角度=%f, %f [rad]\n", asin(a/c1), acos(a/c1));
}
if(a > b) {
if(a != 0.0) {
printf("\n斜辺=%f, %f, %f の時の\n", a, b, c2);
printf("sinθ, cosθ=%f, %f\n", b/a, c2/a);
printf("角度=%f, %f [rad]\n", asin(b/a), acos(b/a));
}
} else {
if(b != 0.0) {
printf("\n%f, 斜辺=%f, %f の時の\n", a, b, c2);
printf("sinθ, cosθ=%f, %f\n", c2/b, a/b);
printf("角度=%f, %f [rad]\n", asin(c2/b), acos(c2/b));
}
}
0826 ◆UJgUFCVXlA
2010/05/21(金) 03:24:31ありがとうございます。助かりました。
0827デフォルトの名無しさん
2010/05/21(金) 18:13:39f(x+y)=f(x)+f(y) と、x≠yならばf(x)≠f(y)を満たす関数で
ある4点 a,b,c,dを選べば f(a) < f(b) (a< b) かつ f(c) > f(d) (c< d)が成り立つ
関数って存在するのか。
0828デフォルトの名無しさん
2010/05/21(金) 18:36:59大雑把な議論だが
f(x + y) ≡ f(x) + f(y) ... (1)
の両辺を x で微分する。
f'(x + y) * 1 ≡ f'(x) (for any x and y)
すなわち、f'(x) は定数。ここで
f(x) = a * x + C
とおいて (1) に代入すると
C = 0
すなわち
f(x) = a * x (a ≠ 0)
ゆえに
f(a) < f(b) (a < b) (for any a , b)
だから、 >>827 のような関数は存在しない。
0829デフォルトの名無しさん
2010/05/21(金) 18:57:55順序も樹序の公理はみたす範囲で自由に付けられるとして。
0830デフォルトの名無しさん
2010/05/21(金) 19:05:03f(x+h)-f(h)=f(x)
lim(f(x+h)-f(h))/h =limf(x)/h
f'(x)=0
とした方がよさげ。
0831デフォルトの名無しさん
2010/05/21(金) 19:05:460832デフォルトの名無しさん
2010/05/21(金) 19:09:30f(x+h)-f(x)=f(h)
lim(f(x+h)-f(x))/h =limf(h)/h
f'(x) = ∞ ? or f(x)=0
へんなの出た。
0833デフォルトの名無しさん
2010/05/21(金) 19:55:200834デフォルトの名無しさん
2010/05/21(金) 20:21:02あるのかないのか。
微分可能ではない任意の群でも作れないの
0835デフォルトの名無しさん
2010/05/21(金) 20:25:120836デフォルトの名無しさん
2010/05/21(金) 20:44:460837デフォルトの名無しさん
2010/05/21(金) 20:53:15問題:キーボードから三個の値x[0]、x[1]、x[2]を入力する。 キーボードからyの値を入力する。
x[0]、x[1]、x[2]の中にyと同じ値があれば『○』と出力し、なければ『×』と表示する。
一応自分ではこんなプログラムコードを作ってみました。
#include<stdio.h>
int main(void){
int x[3];
int i;
for (i=0;i<=2;i=i+1){
printf("xを入力してください\n");
scanf("%d",&x[i]);
}
printf("yを入力してください\n");
scanf("%d",&y);
if(x[0]==y || x[1]==y || x[2]==y) then{
printf("○\n");}
else{
printf("×\n");
}
return 0;
}
0838デフォルトの名無しさん
2010/05/21(金) 20:53:46[2] 問題文(含コード&リンク):
・main関数で三つのint型変数a,b,cを宣言し、キーボードでから値を入力せよ。
・そして三つの変数を大きい順に入れ替える関数sortingを作成せよ。
・関数sortingは変数a,b,cのアドレスを引数として受け取ること。返却値は持たない。
・関数sorting内では、2つの変数の大きさを比べ、値を入れ替えるためのint型変数tmpを宣言すること。
・値の大きさの比較は,aとb、aとc、bとcの三回行う。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Microsoft Visual stadio 2008
[3.3] 言語:C言語
[4] 期限:明日の土曜日まで
[5] その他の制限:プログラミングを授業で受けて二年目です。ポインタの授業の宿題です。
0839デフォルトの名無しさん
2010/05/21(金) 20:59:52int y; の定義が抜けている。
then はいらないので、if(){ でよい。
0840デフォルトの名無しさん
2010/05/21(金) 21:03:16int y;
if ( ...) {
} else {
}
http://codepad.org/BJq0yo1K
0841デフォルトの名無しさん
2010/05/21(金) 21:05:50入力された値xを2から√xまで順番に割って全てにおいて余りが出たらxは素数
というところまではわかった
このとき√xは小数点以下切捨て
問題はルートをどうやって表現するか
for(i = 2 ; i <= √x ; i++)なんて書き方無いよな
どうすりゃいいの?
0842デフォルトの名無しさん
2010/05/21(金) 21:08:39[2] 問題文(含コード&リンク):擬似乱数を用いて大吉(excellent luck)中吉(good luck)吉(good luck)凶(bad luck)大凶(worst luck)を出力し
それぞれの項目のコード4,3,2,1,0を返す関数fortune()を作成せよ
ただしそれぞれの項目が現れる確立は順に5.0,20.0,50.0,20.0,5.0%とする。
またこの関数を用いて2000回のサンプリングを行ったときそれぞれの項目の出現割合を出力するプログラムを作成し上記の割合とほぼ同じ値が得られていることを検証せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6/1まで
[5] その他の制限 自学なのでコメントをつけていただけるとうれしいです。よろしくお願いします。
0843デフォルトの名無しさん
2010/05/21(金) 21:08:57>>840
コンパイルできました。ありがとうございます。
参考書などでは then を記載するように書かれているのですが。。
0844デフォルトの名無しさん
2010/05/21(金) 21:09:45sqrt
0845デフォルトの名無しさん
2010/05/21(金) 21:10:12i*i <= x
0846デフォルトの名無しさん
2010/05/21(金) 21:11:06http://codepad.org/6Sl3Qoro
0847デフォルトの名無しさん
2010/05/21(金) 21:11:320848デフォルトの名無しさん
2010/05/21(金) 21:12:17その教科書を晒してください。amazon の書評に書いておきます。
0849デフォルトの名無しさん
2010/05/21(金) 21:13:07�d
0850デフォルトの名無しさん
2010/05/21(金) 21:40:110851デフォルトの名無しさん
2010/05/21(金) 21:41:440852デフォルトの名無しさん
2010/05/21(金) 21:42:40[2] 問題文(含コード&リンク): 掃き出し法で下の連立方程式を解くプログラムを作成してください
3x+y+z=10
x+5y+2z=21
x+2y+5z=30
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: [2010年5月22日まで]
[5] その他の制限:なるべく簡単にしてください。関数に多次元配列を渡すとかその辺りを使います。
最初は
#include <iostream>
using namespace std;で始まります(もしかしたらdefineが入るかもしれません)
出力はcout 入力はcinです
0853デフォルトの名無しさん
2010/05/21(金) 21:44:48#include <stdio.h>
#include <stdlib.h>
int fortune(void){
int ran = rand()/(RAND_MAX/20);
if(ran<1) {puts("大吉(excellent luck)"); return 4;} /* 5% */
else if(ran<5) {puts("中吉(good luck)"); return 3;} /* 20% */
else if(ran<15) {puts("吉(good luck)"); return 2;} /* 50% */
else if(ran<19) {puts("凶(bad luck)"); return 1;} /* 20% */
else {puts("大凶(worst luck)"); return 0;} /* 5% */
}
#define N_MAX 2000
int main(void){
int i, data[5]={0};
srand(time(0));
for(i=0;i<N_MAX;i++)
data[fortune()]++;
for(i=0;i<5;i++)
printf("%d %d %.1f%%\n", i, data[i], 100.*data[i]/N_MAX );
return 0;
}
0854デフォルトの名無しさん
2010/05/21(金) 22:25:02二年目、、、ですか
0855デフォルトの名無しさん
2010/05/21(金) 23:00:41[2] 問題文(含コード&リンク): 2×2行列Aと二次元ベクトルxとの積Axを計算する関数linear_trans()を実装しなさい。ただし、関数linear_trans()は以下のような仕様とする。
void linear_trans(double matA [2][2], double vecx[2], double vecy[2])
{
/*matA × vecx = vecy を実装*/
}
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2010年5月25日まで]
[5] その他の制限:ポインタは習っていません。
0856デフォルトの名無しさん
2010/05/21(金) 23:06:03[2] 問題文(含コード&リンク): 三角形の三つの辺の長さを引数とし、内角の大きさを返す関数を実装しなさい。
さらに、その関数を用いて、三角形の三つの点の座標(x座標, y座標)を入力し、それらの点が作る三角形のすべての内角の角度を計算するプログラムを実装しなさい。
計算結果の角度の表示は必ずmain()関数の中で行われなければならないとする。
[3] 環境[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2010年5月25日まで]
[5] その他の制限:ポインタは習っていません。なるべく簡単にお願いします。
0857デフォルトの名無しさん
2010/05/21(金) 23:30:40行列の積ってよく覚えてないんだけど
y0 = matA00*x0 + matA10*x1;
y1 = matA01*x0 + matA11*x1;
こういう計算するんだっけ?
0858デフォルトの名無しさん
2010/05/21(金) 23:53:20#define COLUMN 2
int main(void) { int i, j, k;
double a[COLUMN][COLUMN], b[COLUMN], c[COLUMN];
printf("%d行%d列の行列Aの各要素を入力してもらいます\n", COLUMN, COLUMN );
for ( i = 0 ; i < COLUMN ; i++) {
printf("第%d行の要素を入力して下さい>>>", i+1);
for ( j = 0 ; j < COLUMN ; j++)
scanf("%lf", &a[i][j]);
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
for ( j = 0 ; j < COLUMN ; j++)
printf("A[%d][%d]=%f\t", i+1, j+1, a[i][j]);
printf("\n");
}
printf("%d行のベクトルBの各要素を入力してもらいます\n", COLUMN );
for ( i = 0 ; i < COLUMN ; i++) {
printf("第%d行の要素を入力して下さい>>>", i+1);
scanf("%lf", &b[i]);
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++)
printf("B[%d]=%f\n", i+1, b[i]);
printf("行列AとベクトルBの積は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
c[i] = 0.0;
for ( k = 0 ; k < COLUMN ; k++)
c[i] += a[i][k] * b[k];
printf("%8.3f\n", c[i]);
}
}
0859デフォルトの名無しさん
2010/05/21(金) 23:53:36double CalcAngleFromThreeEdges(double a, double b, double c)
{
return acos((b*b+c*c-a*a)/(2*b*c));
}
0860858
2010/05/21(金) 23:55:420861デフォルトの名無しさん
2010/05/21(金) 23:55:58void linear_trans(double matA [2][2], double vecx[2], double vecy[2])
{
vecy[0] = matA[0][0] * vecx[0] + matA[0][1] * vecx[1];
vecy[1] = matA[1][0] * vecx[0] + matA[1][1] * vecx[1];
}
0862デフォルトの名無しさん
2010/05/21(金) 23:58:11http://codepad.org/5iiR8vCR
鋭角三角形の場合だけ正しい値を出します。鈍角三角形はうまくいかない。
0864デフォルトの名無しさん
2010/05/22(土) 04:18:180865デフォルトの名無しさん
2010/05/22(土) 04:19:060866デフォルトの名無しさん
2010/05/22(土) 14:52:34問題:3人の成績を入力すると最高点を出力するプログラムを作りましょう。
自分ではこの辺まで分かったのですが、最高点というものをどう処理したらいいのでしょうか。
int score[5];
int i;
int max_score;
max_score = 0;
for(i=0; i<=4; i=i+1){
printf("成績を入力してください。\n");
scanf("%d",&score[i]);
}
0867デフォルトの名無しさん
2010/05/22(土) 15:07:280868デフォルトの名無しさん
2010/05/22(土) 15:15:30タイプミスです。すいません。。。
0869デフォルトの名無しさん
2010/05/22(土) 15:17:08:
if(max_score < score[i])
max_score = score[i];
:
0870デフォルトの名無しさん
2010/05/22(土) 15:17:18int main(void)
{
int score;
int i;
int max_score=0;
for(i=0; i<3; ++i){
printf("成績を入力してください。\n");
scanf("%d",&score);
if(max_score < score){
max_score = score;
}
}
printf("最高点:%d\n",max_score);
return 0;
}
//最高点出すだけなら配列使わなくて大丈夫
0871デフォルトの名無しさん
2010/05/22(土) 15:27:21問題:5個の値を入力してその中にひとつでも偶数があれば『偶』、奇数しかなければ『奇』と出力するプログラム
(※複数個の偶数があったとしても『偶』と表示するのは1回だけとする)
途中まではこんな風に書いてみたのですが
#include<stdio.h>
int main(void){
int x[5];
int i;
for(i=0;i<=4;i=i+1){
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
}
if (x[i] % 2 == 0){
printf("偶\n");
}
else{
printf("奇\n");
}
return 0;
}
0873デフォルトの名無しさん
2010/05/22(土) 15:35:03奇と表示する条件をif条件にすると良い
0874デフォルトの名無しさん
2010/05/22(土) 15:36:08どういう条件にすればいいのでしょうか?
0875デフォルトの名無しさん
2010/05/22(土) 15:39:07#include<stdio.h>
int main(void){
int x;
int i;
int flag = 0;
for(i=0;i<=4;i=i+1){
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x);
if (x % 2 == 0 && !flag){
flag = 1;
}
}
flag ? printf("偶\n") : printf("奇\n");
return 0;
}
0876デフォルトの名無しさん
2010/05/22(土) 15:45:40教育目的としてよいかも。
ひとつめのfor文の後に
for ( i = 0; i <= 4; i++ )
{
if ( x[i] % 2 == 0 ) {
printf("偶");
break;
}
}
if ( i == 5 ) printf("奇");
条件式、for文の構造と、ループ制御を理解していているかという課題かも。
レポートなら、コードだけじゃなく、説明も要求されるだろうし。
0877869
2010/05/22(土) 16:03:36x[5] = 1;
:
if (x[i] % 2 == 0){
x[5] = 0;
}
:
0878デフォルトの名無しさん
2010/05/22(土) 16:41:53問題:キーボードから10個の値(x[0]〜x[9])を入力し,2番目に大きい値を出力するプログラムを作成せよ.
2番目というのをどうしたらよいのでしょうか???
自分で途中まで書いたコードです。
int x[10];
int i;
int no1=0,no2=0;
for(i=0;i<=9;i=i+1){
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
}
for(i=0;i<=9;i=i+1){
if(
0879869
2010/05/22(土) 16:45:39の時の2番目に大きいのは?
0880デフォルトの名無しさん
2010/05/22(土) 16:56:060881デフォルトの名無しさん
2010/05/22(土) 17:00:090882デフォルトの名無しさん
2010/05/22(土) 17:09:39int main(void) {
int x[10];
int i;
int *max = NULL, *result = NULL;
for(i=0;i<=9;i=i+1) {
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
}
max = &x[0];
for(i=1;i<10;++i) {
if (*max < x[i]) {
result = max;
max = &x[i];
}
}
printf("答え:%d\n", *result);
return 0;
}
0883デフォルトの名無しさん
2010/05/22(土) 17:10:08降順にsortして2番目に高い数字を出力してる
http://codepad.org/nE2sCbUr
0884デフォルトの名無しさん
2010/05/22(土) 17:10:240885デフォルトの名無しさん
2010/05/22(土) 18:21:5910個すべて同じ値にすると落ちる。
printf("答え:%d\n", *result); → if (result) print("%d"), *result);
0886デフォルトの名無しさん
2010/05/22(土) 18:22:29{
int a;
printf("西暦年を入力してください ");
scanf("%d", &a);
if (a%400==0 || (a%4==0 && n%100 !=0))
printf("西暦%d年は,うるう年です \n" ,a );
else
printf("西暦%d年は,うるう年ではありません \n" ,a);
}
のプログラムを論理演算子(&&,||)無しでお願いします!!
0887デフォルトの名無しさん
2010/05/22(土) 18:35:06printf("西暦%d年は,うるう年です\n" ,a );
else if(a%100==0)
printf("西暦%d年は,うるう年ではありません\n" ,a );
else if(a%4==0)
printf("西暦%d年は,うるう年です\n" ,a );
else
printf("西暦%d年は,うるう年ではありません\n" ,a );
0888デフォルトの名無しさん
2010/05/22(土) 18:41:29おおおおおおお!!
ありがとうございます.
0890デフォルトの名無しさん
2010/05/22(土) 21:06:16txtファイルに書いた2進数(10011101)をchar配列に保存しているのですが、
これをint型10進数(10011101 → 157)に直すシンプルな方法は無いでしょうか?
現状atoiで整数にしてから
10ずつ割りながら、整数で1の論理積を確認し、
別途1..2..4..8..と数値を足し合わせ作り直す手しか思い付かないのですが・・。
0891デフォルトの名無しさん
2010/05/22(土) 21:13:33#include<stdio.h>
int main(void)
{
char buf[]="10011101";
int i, value=0;
for(i=0;buf[i];i++)
{
value=value*2+buf[i]-'0';
}
printf("%d\n", value);
return 0;
}
0892デフォルトの名無しさん
2010/05/22(土) 21:15:410893デフォルトの名無しさん
2010/05/22(土) 22:51:43拡張性なんか無視して書いたからなー
作りなおすしかない。
C++、STLありならこれで
#include <iostream>
#include <set>
int main(void) {
int order = 5; // 何番目に大きな数字を出力するか
int x[10];
for (int i = 0; i < 10; ++i) {
std::cout << "x[" << i << "]を入力してください。" << std::endl;
std::cin >> x[i];
}
std::set<int> s(&x[0], &x[10]);
std::set<int>::reverse_iterator result = s.rbegin();
for (int i = 0; i < order - 1 && result != s.rend(); ++i) {
++result;
}
if (result != s.rend()) {
std::cout << *result;
}
return 0;
}
0894879
2010/05/22(土) 23:40:03#include <stdio.h>
int main(void) {
int x[10];
int i;
int *max = NULL, *result = NULL;
for(i=0;i<=9;i=i+1) {
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
}
result = max = &x[0];
for(i=1;i<10;++i)
if(*max <= x[i])
max = &x[i];
else
result = &x[i];
for(i=1;i<10;++i)
if (*max != x[i])
if(*result < x[i])
result = &x[i];
printf("答え:%d\n", *result);
return 0;
}
0895デフォルトの名無しさん
2010/05/23(日) 07:51:21すべて同じ数字を入力した場合、その数字が答えとして出力されるが、
それは「2番目に大きい値を出力する」という要件に合致しているといえるの?
0896デフォルトの名無しさん
2010/05/23(日) 08:07:54if(*max != *result) /* 10個すべて同じ値にすると表示無し。 */
printf("答え:%d\n", *result);
0897デフォルトの名無しさん
2010/05/23(日) 09:25:45いやなにおいを感じて修正しそう。
0898デフォルトの名無しさん
2010/05/23(日) 09:46:130899863
2010/05/23(日) 11:30:20>> 863 は鈍角三角形でもうまくいくことがわかりました。
でも、 >>859 で示されているとおりの、余弦定理を使うのがいいでしょうね。こんな感じ。
http://codepad.org/mXXBpTFc
0900デフォルトの名無しさん
2010/05/23(日) 11:40:52問題:代表の生徒の名前、代表者の出席回数、グループメンバーの出席回数、グループの全体の出席回数の上位x番だけ出力するプログラムを作成せよ.
キーボードから代表者のID,個人のID,名前を入力するものとし、グループメンバーは代表者のIDでのみで関連付けされる
出席の記録はキーボードから個人のIDが呼び出された回数でされるものとする.
0901デフォルトの名無しさん
2010/05/23(日) 13:09:56こんな入力・出力例でいいの?
Input:
2
1,1,murayama
1,2,sugano
3,3,koizumi
3,4,abe
5,5,hatoyama
6,6,ozawa
Output:
#1
Rep. Name: murayama
Rep. Attendance: 1
Group: 001
Group Attendance: 2
#2
Rep. Name: koizumi
Rep. Attendance: 1
Group: 003
Group Attendance: 2
0902デフォルトの名無しさん
2010/05/23(日) 13:39:33名簿のほうはいつでも人が増やされる感じで
出席のほうは個人のIDが呼び出されると加算されていく感じです
0903デフォルトの名無しさん
2010/05/23(日) 13:54:14>in 1,2,yamada
>in 3,3,itao
>at 1
>at 2
>at 1
>in 1,4,yamada
>at 4
>at 3
>out
Rep. Name: sakata
Rep. Attendance: 2
Group Attendance: 4
Rep. Name: itao
Rep. Attendance: 1
Group Attendance: 1
みたいなイメージです
0904デフォルトの名無しさん
2010/05/23(日) 14:00:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10613.c
/*実行例
x[0]: 7
x[1]: 4
x[2]: 2
x[3]: 2
x[4]: 7
x[5]: 0
x[6]: 5
x[7]: 4
x[8]: 4
x[9]: 8
8番目に大きい数値は
x[3]: 2
*/
0905879
2010/05/23(日) 15:46:57#include <stdlib.h>
#include <time.h>
#define N 10 // int n = 10; is for C99 compiler.
int main(void)
{
int x[N], small[N], i, j, m = 1;
srand(time(NULL));
for (i = 0; i < N; i++) {
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
small[i] = 0;
// printf("x[%d]: %d\n", i, x[i] = rand() % 10);
}
// printf("%d番目に大きい数値は\n", (m = rand() % N) + 1);
for (i = 0; i < N; i++)
for (j = i + 1; j < N; j++) {
if (x[i] <= x[j])
small[i]++;
else
small[j]++;
}
for (j = 0; j < N; j++)
if (small[j] == m)
printf("答え:%d\n", x[j]);
return 0;
}
0906デフォルトの名無しさん
2010/05/23(日) 16:32:18ぴったりじゃないと余った分引き返す。
(|スタート◎| _ _ _ _ _ _ _ _ _ _ |ゴール|の表示をEnter押すごとに繰り返す)
というプログラムを作りたいのです。
#include <stdio.h>
#include <time.h>
int sa_(void);
int main(void)
{
srand((unsigned int)time(NULL));
return 0;
}
/*1〜6の値をランダムで返す*/
int sa_(void)
{
int sai,i;
for(i = 0; i < 10; i++)
{
sai = rand() % 6 + 1;
}
return sai;
}
これを使うように指示されています。よろしくお願いします。
0907デフォルトの名無しさん
2010/05/23(日) 17:05:48#include <time.h>
#include <stdlib.h>
int sa_(void);
int main(void)
{
int i,x=0,dx;
char course[10];
srand((unsigned int)time(NULL));
for(i=0;i<10;i++)
course[i] = '_';
while(1){
dx = sa_();
(x + dx > 9) ? x=9-((x+dx)%9) : x+=dx;
printf("サイコロ=%d",dx);
getchar();
course[x] = 'm';
printf("スタート◎|");
for(i=0;i<10;i++)
printf(" %c ",course[i]);
printf("|ゴール|\n");
course[x] = '_';
if(x == 9) {
printf("クリアだお!\n");
break;
}
}
return 0;
} //sa_(void)は変更してないので省略
0909デフォルトの名無しさん
2010/05/23(日) 18:19:28テンプレつかえよ
CかC++か?制限は?講義のレベルはどれくらいなんだよ。
問題文の各行のつながりもわかりにくい。1行目が>>903のout以降で、2行目がat、3行目がinの説明?
問題文の1行目は、すべて並列に書かれているように見えるけど、1行目はグループメンバ全員の出席数の合計が多い順に、各グループの代表者名、代表者の出席回数、メンバー全員の集積回数の合計を出力するって意味?
j上位x番のxはキーボードから入力するのかコード内に数字として埋め込んでいいのか。
好きなだけグループや生徒を登録できるのか?だとしたら可変長配列や可変長文字列を使うと便利だがライブラリを使用していいのか自作しなければいけないのか。
0910デフォルトの名無しさん
2010/05/23(日) 18:34:53出題者(つまり学校の先生)が手を抜いているのに、依頼者(つまり学生・生徒)を責めても無駄。
依頼者が仕様を正確に記述できないのも、出題者がへぼなだけ。
仕様を正確に記述する訓練はコーディングの訓練の後に来るべきなのに、それが逆になっているというのは、>>900 のせいというよりは、教育業界全体がおかしい。
そして、それを >>900 に八つ当たりして納得している我々にも問題があるだろう。
でも >>900 はテンプレートくらいは読もうね。
0911デフォルトの名無しさん
2010/05/23(日) 18:36:58[2] 数字を収納する
[3] 環境
[3.1] OS: XP
[3.2] gcc
[3.3] C
[4] 無期限
Cでお願いします。コンソールです
ある数字を一文字入力し、そしてenter。
次に、その前に打った数だけランダムな数字を空白をはさんで打ち込む。そしてエンター
例
6 (エンター
4 23 1 4 5 3 (エンター
みたいなかんじです
そしてこれを X[i] にi=1から順に空白を飛ばして入れていくってかんじです。
そんでX[1]=4 X[2]=23 ・・・
みたいに入ればいいです
文字列ではなく数字で収納したいです
お願いします
0912900
2010/05/23(日) 18:47:470913デフォルトの名無しさん
2010/05/23(日) 19:11:15#define LENGTH 128
int main()
{
unsigned int n, i;
int X[LENGTH];
printf("Generate random integer list (n elements)...");
printf("n ->"); scanf("%u", &n);
if ( n > LENGTH || n < 0 )
{
fprintf(stderr, "Error: n in range [0..%d]", LENGTH);
exit(1);
}
for ( i = 1; i <= n; i++ )
scanf("%d",&X[i]);
}
0914デフォルトの名無しさん
2010/05/23(日) 19:32:26とりあえず現状では問題がよくわからないのは事実ですので、 >>1 を読んで書き直してみてはいかがでしょうか。
0915900
2010/05/23(日) 19:34:36#include <time.h>
int sa_(void);
int main(void)
{
int i,x=-1,dx;
char course[10];
srand((unsigned int)time(NULL));
for(i=0;i<10;i++)
course[i] = '_';
while(1){
dx = sa_();
printf("サイコロ=%d",dx);
getchar();
x += dx;
if(x != 10){
x = x > 9 ? 10*2-x : x;
course[x] = 'm';
}
printf("スタート◎|");
for(i=0;i<10;i++)
printf(" %c ",course[i]);
printf("|ゴール|\n");
course[x] = '_';
if(x == 10) {
printf("クリアだお!\n");
break;
}
}
return 0;
} //sa_(void)は変更してないので省略
0917デフォルトの名無しさん
2010/05/23(日) 19:46:02なぜx[0]からでなくx[1]からなんだろう。
エラーチェックとかは省いてるんで適宜修正してくれ。
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUFFER_SIZE 256
void main() {
int i = 0, j = 1;
int num = 0;
char buffer[MAX_BUFFER_SIZE] = "";
int *x = NULL;
scanf("%d", &num);
if (0 < num || num < 9) {
printf("数字を”一文字”入力しろ。ただし0、てめーはダメだ\n");
}
++num;
rewind(stdin);
fgets(buffer, MAX_BUFFER_SIZE, stdin);
x = (int*)calloc(num, sizeof(int));
for (i = 0; i < MAX_BUFFER_SIZE; ++i) {
if (buffer[i] == '\n') {
break;
} else if (buffer[i] == ' ') {
++j;
} else {
x[j] = 10 * x[j] + buffer[i] - '0';
}
}
free(x);
}
if(x != 10)
course[x] = '_';
else [
printf("クリアだお!\n");
break;
}
0919917
2010/05/23(日) 20:13:13if (0 < num || num < 9) {
→ if (num < 0 || 9 < num) {
0920917
2010/05/23(日) 20:15:29if (0 < num || num < 9) {
→ if (num < 1 || 9 < num) {
0921デフォルトの名無しさん
2010/05/23(日) 20:54:00[2]問題文:(1)scanfにより3つの正の整数a,b,cの値を入力する。
(2)(i,j)要素がj+(a-1)*iであるa×b行列を定義する。
(3)(i,j)要素がj-(b-1)*iであるb×c行列を定義する。
(4)2つの行列の積を計算し、結果を表示する。
[3]環境:windows,C++
[4]期限:5月25日
[5]なし
よろしくおねがいします。
0922デフォルトの名無しさん
2010/05/23(日) 21:19:57>>917
ご丁寧にありがとうございました
解決しました
0923デフォルトの名無しさん
2010/05/23(日) 21:20:40[3]環境:windows,C言語
[4]期限:無期限
コンソールです。エンターキーを押せば次の処理に進めるにはどのようにすればいいのでしょうか?
scanf(" ");
gets(a);
a=getchar();
とかにしてもダメでした
すぐに次の動作に進んでしまいます
よろしくお願いします。
0924デフォルトの名無しさん
2010/05/23(日) 21:27:40>>852
http://codepad.org/hAVmxBO1
この手の問題は、意外に回答がつかない。
0926デフォルトの名無しさん
2010/05/23(日) 21:29:24多分ストリームに文字列が残ってるのが原因
getchar();
getchar();
と2つ書けば大丈夫のはず
0927デフォルトの名無しさん
2010/05/23(日) 21:33:05「最初は」の人はいつも
公式に当てはめるだけのつまらない問題だからでしょ
0928852
2010/05/23(日) 21:33:44>最初は
>#include <iostream>
>using namespace std;で始まります
>出力はcout 入力はcinです
これが読めないのかカス
0929デフォルトの名無しさん
2010/05/23(日) 21:35:16入力処理後に rewind(stdin)
0930デフォルトの名無しさん
2010/05/23(日) 21:42:10printf("1\n");
getchar();
printf("2\n");
これで1が表示されたあとエンターおせば2が表示される
printf("1\n");
getch();
printf("2\n");
こうするとgetchar()と違ってエンター入力したあと改行が入らない
0931デフォルトの名無しさん
2010/05/23(日) 21:43:49環境依存の命令使うな
0932デフォルトの名無しさん
2010/05/23(日) 21:44:27ありがとうございます。でもprintfとかstdio.hとかって使わないんですよね…
http://codepad.org/gXnNbzQx
なお、この方法では、最初に与える連立方程式によっては、解けない場合があります。
>>927
そんなもんですかね。公式に当てはめるだけの問題のほうが回答がつきやすい気がしますが。
代数の問題は回答がつきにくいのはどうしてでしょうかね。
>>928
ご指摘感謝。
0934デフォルトの名無しさん
2010/05/23(日) 21:57:22過去ログ2,3スレ読んでみ
0935デフォルトの名無しさん
2010/05/23(日) 21:58:56>>932
0936900
2010/05/23(日) 22:43:07[2] 問題文(含コード&リンク):
(図解だけの問いでした、説明がわかりにくくてごめんなさい)
代表の生徒の名前、代表の出席回数、グループメンバーの出席回数、グループの全体の出席回数の上位x番だけ出力するプログラムを作成せよ.
グループメンバーは代表者のIDでのみで関連付けされる.
出席は個人のIDを入力すると出席が加算されていく.
>グループメンバ全員の出席数の合計が多い順に、各グループの代表者名、代表者の出席回数、メンバー全員の集積回数の合計を出力する
>好きなだけ好きな時にグループや生徒を登録できる
>上位x番のxはキーボードから入力する
>>909のとおりです。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC2008
[3.3] 言語: C++
[4] 期限: [2010年05月26日13:10まで]
[5] その他の制限: なし 授業でSTL一通りやりました
0937828 ◆QZaw55cn4c
2010/05/23(日) 23:36:27いや、いいところまでいっている。
仮定より
f(0) = 0
がいえて、
>>832 の変形より
f'(x)≡f'(0) (∀x∈R)
もなりたつ。あとは x = 0 のまわりで f'(x) が存在するかどうかを、問題であたえられるか証明してしまうか、なんだが、
f'(0) が存在することを証明できないでいる。できるのかできないのか?
すれ違いですみませぬ。
0938デフォルトの名無しさん
2010/05/23(日) 23:36:51ありがとうございます
関数の渡しは何行目辺りで使われていますか?
0939デフォルトの名無しさん
2010/05/23(日) 23:55:58関数の渡しはつかっていません。使わなくてもできる問題なので。
どうしてもいりますか?
0940デフォルトの名無しさん
2010/05/24(月) 00:08:46何か、関数の渡しを習ったので使うと言われたんです…
swapとかそういうのですかね…?
0941デフォルトの名無しさん
2010/05/24(月) 00:44:08どうしてもいるんだったら、
http://codepad.org/E061iAYs
としておきますね。4行目と35行目でつかっています。
0942デフォルトの名無しさん
2010/05/24(月) 02:33:52[2] 1+2+3+…n≦1000となるように、nの最大値とそのときの合計を求め、表示するプログラムを作成せよ
注:「等差数列の和の公式は」ではなく、while文またはfor文を使用すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:VC2008
[3.3] 言語:C++
[4] 期限:[2010年5月26日10:00まで]
[5] その他の制限: なし
nの最大値が44、合計が990というのはわかったのですがそれをうまく表示できません。
よろしくお願いします。
0943デフォルトの名無しさん
2010/05/24(月) 02:55:10#include <iostream>
using namespace std;
int main()
{
int sum=0,n=0;
while(1){
if(sum+(n+1)>=1000)break;
sum+=++n;
}
cout << "max:" << n << ", sum:" << sum << endl;
}
0945デフォルトの名無しさん
2010/05/24(月) 10:08:17>>944
ありがとうございます
助かりました
0946デフォルトの名無しさん
2010/05/24(月) 17:21:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10615.txt
上位x番のxをどのタイミングで入力するのかからなかったからoutの引数につけた。
関数オブジェクト使ってみたけど、使い方がこれであっているのか自信ない。
正常系しかテストしてないし、エラーチェックとかも省いてるからそこらへんはご自分で。
アルゴリズムも改良の余地がありそう。
0947デフォルトの名無しさん
2010/05/24(月) 21:38:40すげえな。一体何年ぐらいC++やってるの?
0948デフォルトの名無しさん
2010/05/24(月) 21:52:220949900
2010/05/24(月) 22:33:000950946
2010/05/24(月) 22:43:09あとC++相談室スレも勉強になる。
>>946のソースをちょっと修正
「T strToVar (const std::string str) {」 → 「T strToVar (const std::string& str) {」
ActionInクラスの「int getGroupID() const { return groupID_;}」「int getMemberID() const { return memberID_;}」「std::string getMemberName() { return memberName_;}」はまったく使っていないので削除
0951946
2010/05/24(月) 22:55:51ParserOutクラスのoperator()定義内の最後の「return std::auto_ptr<Action>(new ActionError());」は
「return std::auto_ptr<Action>(NULL);」です。
あと、inとかの後ろにスペースいれなくても動いてしまうけど、もう直すの面倒くさいから後は適当にがんばってね>>900
0953デフォルトの名無しさん
2010/05/25(火) 02:54:060954デフォルトの名無しさん
2010/05/25(火) 09:41:31(1)4Byte machineでDouble PrecisionのReal Numberは何桁まであらわされるのかMemoryのStructureから計算せよ。
(2)4Byte machineでDouble PrecisionのReal Numberの計算でOverflow,Underflowのエラーが出た時,それぞれどのような大きさの計算でエラーが起こったのかMemoryのStructureから理論的に説明せよ。
お願いします。
0955デフォルトの名無しさん
2010/05/25(火) 12:31:040956デフォルトの名無しさん
2010/05/25(火) 12:45:25仮数部は 52ビット + 1 = 53 ビット相当で表現されるから
2^53 = 10^15.95すなわち 少なくとも10進16桁まで表現できる。
0957デフォルトの名無しさん
2010/05/25(火) 13:13:330958デフォルトの名無しさん
2010/05/25(火) 13:17:270959デフォルトの名無しさん
2010/05/25(火) 14:54:03関数を作れって問題なんだから>>861だけでいいだろ
0960デフォルトの名無しさん
2010/05/25(火) 15:48:0714
15 unsigned DtoB(int a)
16 {
17 unsigned x=1,ans=0,k=1;
18 while(a>0)
19 {
20 if(x & a) ans += k;
21 a = a >> 1;
22 k*=10;
23 }
24 return ans;
25 }
26
27 int main()
28 {
29 int a;
30
31 do{
32 scanf("%d",&a);
33 printf("Input a: (%d) \n",a);
34 }while(a < 0);
35
36 printf("a(decimal)=%d\n",a);
37 printf("a(binary)=%u\n",DtoB(a));
38
39 return 0;
40 }
このプログラムに注釈つけてください
0961デフォルトの名無しさん
2010/05/25(火) 16:14:46>>861全部のコードを書いていただけませんか?
>>958
>>858 をお忘れなく
[2] 問題文(含コード&リンク):キューを用いて木の幅優先探索を行うプログラムを作成する
ttp://water.eit.hirosaki-u.ac.jp/~slmizu/pa2010/queue_tree.png
ttp://water.eit.hirosaki-u.ac.jp/~slmizu/pa2010/kadai05.html
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:2010年5月31日まで
よろしくおねがいします
0963デフォルトの名無しさん
2010/05/25(火) 17:12:47http://codepad.org/o7Y8nJj2
水田先生にチクっちゃうぞ☆
0964「水田です」
2010/05/25(火) 17:23:50/* a を1/2する毎に、k を10倍の値にする */
/* a の最下位ビットが 1 の場合、ans に k を足す */
unsigned DtoB(int a) // 関数の入力仮引数は、整数の a である。
{
unsigned x=1,ans=0,k=1;
while(a>0) // a が正の数の間繰り返す
{
if(x & a) // a の最下位ビットが 1 の場合
ans += k; // ans に k を足す
a = a >> 1; // a を2で割る
k *= 10; // k を10倍する
}
return ans; // DtoB() の戻り値は ans
}
int main()
{
int a; // 整数型の変数 a を定義
do{
scanf("%d",&a); // a の入力
printf("Input a: (%d) \n",a); // 入力した a の出力
}while(a < 0); // a が負の数の間は繰り返す
printf("a(decimal)=%d\n",a); // 10進数での a の表示
printf("a(binary)=%u\n",DtoB(a)); // 2進数での a の表示
return 0; // main() の戻り値
}
0965デフォルトの名無しさん
2010/05/25(火) 18:12:15要件満たしてないからどうでもいい
0966「水田です」
2010/05/25(火) 18:59:44printf("行列AとベクトルBの積は次の通りです\n");
linear_trans(a, b, c);
for ( i = 0 ; i < COLUMN ; i++)
printf("%8.3f\n", c[i]);
0967デフォルトの名無しさん
2010/05/25(火) 19:03:38なんで質問者を刺戟する様な名前をわざわざ使うの?
質問しづらくなるだろ。
0968デフォルトの名無しさん
2010/05/25(火) 21:11:29それに回答する側としては質問しづらくなっても関係ないしなあ
0969デフォルトの名無しさん
2010/05/25(火) 21:14:37でも質問者ももう少しひねって出して…
0970デフォルトの名無しさん
2010/05/25(火) 21:48:34質問スレじゃないから。
0971954
2010/05/25(火) 22:31:54ありがとうございます。
いろいろな人に聞いたのですが,>>956がどうもあってるみたいです。
>>957はその10進法であらわした数字を超えたらoverflowってことですかね?
0973デフォルトの名無しさん
2010/05/25(火) 23:15:540974デフォルトの名無しさん
2010/05/25(火) 23:44:19この関数を使って正しく動作するものを作ってみなさい、とでも先生に言われたの?
0975デフォルトの名無しさん
2010/05/26(水) 00:06:01http://codepad.org/no01QoR0
0976デフォルトの名無しさん
2010/05/26(水) 00:09:54[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10619.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10620.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:cpad for borland c++compiler
[3.3] 言語:C
よろしくお願いします。
0977975 ◆QZaw55cn4c
2010/05/26(水) 00:26:36http://codepad.org/OVk5XcXl
便乗で質問なんですが、
コピーコンストラクタを
Matrix &Matrix::operator=(const Matrix &a) { }
とするとコンパイルできるのですが、教科書のとおりに
Matrix &Matrix::operator=(Matrix &a) { }
とすると、
Matrix::operator=(Matrix) に一致するものがみつからない(BCC32)
というエラーがでてコンパイルできません。
どうしてなのでしょうか
0978デフォルトの名無しさん
2010/05/26(水) 01:19:22それ、コピーコンストラクタじゃなくてコピー代入演算子。
で、エラーになるのはテンポラリで非 const 参照を初期化できないという規則があるから。
0979デフォルトの名無しさん
2010/05/26(水) 04:13:40はい、そうです…。よろしくお願いしますm(__)m
0980デフォルトの名無しさん
2010/05/26(水) 06:41:10#include<stdio.h>
void linear_trans(double matA [2][2], double vecx[2], double vecy[2])
{
vecy[0] = matA[0][0] * vecx[0] + matA[0][1] * vecx[1];
vecy[1] = matA[1][0] * vecx[0] + matA[1][1] * vecx[1];
}
int main()
{
double matA [2][2], vecx[2], vecy[2];
printf("input matA [0][0]:");
scanf("%lf",&matA[0][0]);
printf("input matA [0][1]:");
scanf("%lf",&matA[0][1]);
printf("input matA [1][0]:");
scanf("%lf",&matA[1][0]);
printf("input matA [1][1]:");
scanf("%lf",&matA[1][1]);
printf("input vecx [0]:");
scanf("%lf",&vecx[0]);
printf("input vecx [1]:");
scanf("%lf",&vecx[1]);
linear_trans(matA, vecx, vecy);
printf("vecy[0]=%lf\n",vecy[0]);
printf("vecy[1]=%lf\n",vecy[1]);
return 0;
}
0981デフォルトの名無しさん
2010/05/26(水) 07:44:36C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274827528/
0983デフォルトの名無しさん
2010/05/26(水) 07:50:27■■■■■■■■
■■■■■■■■
0984デフォルトの名無しさん
2010/05/26(水) 09:31:30[2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。
そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。
[3] 環境
[3.1] OS: Mac
[3.2] コンパイラ名とバージョン: cc
[3.3] 言語: C
[4] 期限: 5月27日
0985デフォルトの名無しさん
2010/05/26(水) 09:34:31その他の制限: do whileまでしか教えてもらってないのでそれでお願いできますか
0986デフォルトの名無しさん
2010/05/26(水) 11:21:08http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10622.c
0987デフォルトの名無しさん
2010/05/26(水) 12:48:52[1] 授業単元:プログラミング基礎
[2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。
そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。
From: [759] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:31:06
>>758
宿題スレでやれ
From: [760] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:59:31
宿題はスルーでお願いします
From: [761] デフォルトの名無しさん <sage>Date: 2010/05/26(水) 11:32:25
>>759
>>760
あ、わからないんだったら、無理して答えなくていいから
From: [762] デフォルトの名無しさん <sage>Date: 2010/05/26(水) 12:11:23
誰か答えられる賢い人いない?
>>759>>760は引き続き黙ってていいから
0988デフォルトの名無しさん
2010/05/26(水) 13:28:270989デフォルトの名無しさん
2010/05/26(水) 22:52:08[2] 問題文 :
1.テキストファイル(file,txt)を読み込み、 goodという単語すべてをbadに置換し、filea.txtに出力せよ
2.テキストファイル(file,txt)を読み込み、文字数の多い行から順に並べかえてfileb.txtに出力せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 5月27日
お願いします
0990デフォルトの名無しさん
2010/05/26(水) 23:39:28自分は以下のように書いたのですが、何度実行しても出力されてくる数字が間違っているのですが
どこがおかしいのでしょうか????
#include<stdio.h>
int main (void)
{ int i,j,k,n;
int a[10][10],b[10][10],c[10][10];
printf("n (n<=10) の値を入力して下さい。\n");
scanf("%d",&n);
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
printf("行列aの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&a[i-1][j-1]);}}
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
printf("行列bの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&b[i-1][j-1]);} }
for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { for(k=0;k<=n;k++){
c[i][j] += a[i][k] * b[k][j];}}}
for(i=0;i<=n;i++){for(j=0;j<=n;j++){
printf("c[%d][%d] = %d\n",i,j,c[i][j]);}}
return 0;
}
0991デフォルトの名無しさん
2010/05/26(水) 23:51:52へぇ。大変だね。
回答に加えていくつかツッコミ入れたけどそれに対してノーリアクションだったなぁ、と思うのと、
多分そのツッコミ部分を理解しているかどうかを確認する為にその出題されたんだろうね。
スルーせずに先生に突っ込みを先に入れていれば勝てた勝負なのにな。
0992デフォルトの名無しさん
2010/05/27(木) 00:01:15初期化してないのと添え字がオーバーしてた
http://codepad.org/ZsuxxDc6
0993デフォルトの名無しさん
2010/05/27(木) 01:00:47[2] 問題文(含コード&リンク):
・文字列 computer を、ポインタを用いて大文字で表示するプログラムを作成せよ
・文字列 ABCD を変数に代入し、ポインタを用いて次のように表示するプログラムを作れ
ABCD
BCD
CD
D
[3] 環境
[3.1] OS:win vista
[3.2] コンパイラ名とバージョン:VB 2008
[3.3] 言語:C
[4] 期限: [2010年5月28日まで]
[5] その他の制限:なし
よろしくお願いします
0994デフォルトの名無しさん
2010/05/27(木) 01:13:12http://ideone.com/5FxGH
0995デフォルトの名無しさん
2010/05/27(木) 01:17:171だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10623.txt
0997デフォルトの名無しさん
2010/05/27(木) 02:59:24ありがとうございます。
http://codepad.org/UubGjRqS
引数なしのコンストラクタを使えるようにしました。
0999デフォルトの名無しさん
2010/05/27(木) 10:15:28>>855
>>921
>>990
1000デフォルトの名無しさん
2010/05/27(木) 11:22:39C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274926862/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。