2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C/C++の宿題片付けます 135代目

1 :デフォルトの名無しさん:2010/03/24(水) 22:41:38 ?S★(518000)
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[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/

2 :デフォルトの名無しさん:2010/03/24(水) 23:21:55
2

3 :デフォルトの名無しさん:2010/03/25(木) 23:29:19
3

4 :デフォルトの名無しさん:2010/03/25(木) 23:46:56
4

5 :デフォルトの名無しさん:2010/03/26(金) 00:23:01
5

6 :デフォルトの名無しさん:2010/03/26(金) 17:22:22
ときどき void main って書くやついるよね。
なんなんだろうね。馬鹿じゃないかと思うよね。

7 :デフォルトの名無しさん:2010/03/26(金) 17:23:13
>>6
どうして馬鹿だと思うのかね?

8 :デフォルトの名無しさん:2010/03/26(金) 17:25:28
質問スレでやれ


・・・ってすでにやってたのねorz

9 :デフォルトの名無しさん:2010/03/27(土) 13:25:52
オリジナルな人を宿題スレにお誘いしました。仲良くしてね。

10 :デフォルトの名無しさん:2010/03/28(日) 18:15:09
>>6
昔、そのように指導していた入門書があったような気がする。

11 :デフォルトの名無しさん:2010/03/29(月) 00:34:38
>>6
サンプル作るときはreturn省略できるから書いたりする。
まぁ今は昔と違って、void mainも仕様に沿ってるよね

12 :デフォルトの名無しさん:2010/03/29(月) 01:10:18
> void mainも仕様に沿ってる

(゚Д゚)ハァ?

13 :デフォルトの名無しさん:2010/03/29(月) 13:36:15
      _______                     __
    // ̄~`i ゝ                    `l |
    / /        ,______   ,_____    ________  | |  ____ TM
   | |     ___ // ̄ヽヽ // ̄ヽヽ (( ̄))   | | // ̄_>>
   \ヽ、   |l | |    | | | |    | |  ``( (.  .| | | | ~~
      `、二===-'  ` ===' '  ` ===' '  // ̄ヽヽ |__ゝ ヽ二=''
                         ヽヽ___//   日本
  _____ _____  ______  _______
  |  ウェブ  | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ._________________
      |                       │・検索オプション
      └────────────────┘・表示設定
         | Google検索 | I'm Feeling Lucky |  ・言語ツール
          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ○ウェブ全体から検索 ◎日本語のページを検索


14 :デフォルトの名無しさん:2010/03/31(水) 06:55:24
>>11
スタートアップから int main() で call されるから、call 先の事情で void にかえるのはどうかと。
質問スレではこの話題で空前の荒れ模様になったので、やめときますね。

15 :デフォルトの名無しさん:2010/03/31(水) 09:14:32
>>14
それは処理系による。

例えば DOS や Windows 環境のでは void は認められている。
スタートアップでは戻り値がなくてもいいように設計されている。
これに準拠した(MS系をはじめとする)C言語では void は正規なので警告を出さない。
つまりそういう仕様。

逆に int main が必須な仕様においては、
void main と宣言すれば警告またはエラーが出るのが普通。

16 :デフォルトの名無しさん:2010/03/31(水) 13:04:40
でも、それってC99だけで、厳密にいえばC++じゃアウトなんじゃないの?
ここ見ただけだから間違ってるかも知れんが。
http://www.kijineko.co.jp/tech/superstitions/void-main.html

17 :デフォルトの名無しさん:2010/03/31(水) 13:07:58
voidの話は質問スレでやれ

18 :デフォルトの名無しさん:2010/03/31(水) 13:21:38
>>16
だから両方の規格があるという話だろ。それで完結だろ。

int main が必須の規格であり、それに準拠するのであれば、void main は正しくない。
けど世の中には void main が正規な規格もあるし、そこでは void main が正しいのは当然。

少し頭の中を整理した方がいいよ。

19 :デフォルトの名無しさん:2010/03/31(水) 20:00:57
>>16
それ"も"であってそれ以外を禁止するとは言ってないよな>規格

20 :デフォルトの名無しさん:2010/03/31(水) 22:52:29
return を省略できるのは void main と関係ない話だろ

21 :名無し さん:2010/03/31(水) 23:09:54
>>10
main(void){} は int main(void){} と同値。(C言語)
main(void){} は規格違反、void main(void){} ならGCC以外OK。(C++言語)

22 :デフォルトの名無しさん:2010/03/31(水) 23:10:34
>>18
void main() が正規な処理系って、そんなに多いのですか?void main() でも表面上問題ないっていうだけではないですか?
void func() と int func() とではたまたまスタック構造が変わらない、というだけで、いわば void func() と int func() との差を自覚していないだけではないですか?

23 :デフォルトの名無しさん:2010/04/01(木) 09:21:31
>>22
>void main() が正規な処理系って、そんなに多いのですか?
DOS、Windows と Unix 系はそう。OS側では問題のあるOSの方が特殊。
ただしそれらで走るC言語においては、int main 必須な規約に準拠している言語もある。
そういう言語を使用していれば、void main が許されないのは当然。

DOS や Windows で一番利用されているであろう、
MS系のC言語であれば void main は正規。

>void main() でも表面上問題ないっていうだけではないですか?
正規に認めらている。だから警告もださない。

というか、どっからこいう発想が湧いてくるんだろう。
自分の知ってる規格が int main が必須だったとして、
どうしてそれが世の中すべての規格に共通だと思うんだ。

24 :デフォルトの名無しさん:2010/04/01(木) 12:41:38
>>23
DOS Windows Unix系において、void mainが正規であることのソースが出てくればみんな落ち着くんじゃない?
大抵問題ないという慣例じゃなくて。

25 :デフォルトの名無しさん:2010/04/01(木) 15:43:53
>>24
プログラミング言語CというCの教科書では main 関数に return など存在していない。
この本はC言語の設計者が書いたものであり、C言語の規約その物。
当然この本に書いてあるコードは Unix や DOS で動いたし、問題があるわけもない。

80年代のことではあるが、その頃の Unix や DOS はそのまま残っているんだから、
当然今も問題ない。

そもそも void main が不正だという奴の根拠はなんなんだ?
どっかのWEBサイトに書いてあったらとかだろ。そんなものが何の根拠になるんだ。

あるいは void main が不正な規格を持ち出して、そこで禁止されているとか。
当たり前だろ。そういう規格なんだから。ある規格があったらすべてのC言語がそうあるべきだとか。
もうアホかと。

26 :デフォルトの名無しさん:2010/04/01(木) 15:55:40
gcc version 4.2.2
-- 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(){}でいいんだしさ


27 :デフォルトの名無しさん:2010/04/01(木) 16:04:28
>>25
お前だけK&Rで書いてろよ

28 :デフォルトの名無しさん:2010/04/01(木) 16:13:23
>>27
理解力低いな。

DOS や Unix がK&Rのソースが動作するように設計されているという意味だ。
どうしてわからないんだ。

こういう OS では void main と書いても問題がないということ。

29 :デフォルトの名無しさん:2010/04/01(木) 16:20:34
>>26
だから gcc で駄目だったら、全部のC言語で駄目っていう話にするの?

gcc 使うときに int main って書くのは当然だろ。
けど void main が認められている処理系で、それが駄目だという理由にはならん。

そこで論理の飛躍があることにどうして自分で気付けないの?

30 :デフォルトの名無しさん:2010/04/01(木) 16:28:38
なんでvoidにこだわるかなぁ
別にvoidでもintでもどっちでもいいじゃん
臨機応変に使い分ければいいことだし

31 :デフォルトの名無しさん:2010/04/01(木) 16:37:13
>>29
void mainでなければ通らない処理系を具体的に教えて。





32 :デフォルトの名無しさん:2010/04/01(木) 16:42:17
>>30
本来どっちもで良いことなのに、int main に洗脳された人たちが、
他人が自身の環境に準拠した void main を使うことにまで口出しをしている。

void main 肯定派は、 int main もどちらもありだし、使う人の環境や規約に従えばよいと考える。

void main 否定派は、自分の環境に世の中のC言語が自分が準拠する規約に従っていないと許せない。

33 :デフォルトの名無しさん:2010/04/01(木) 16:45:10
>>31
そういう処理系がないことを証明するのはそっちでしょ。

そもそもそういう処理系があるかもしれないのに、どうして void main を否定できるんだ。
あるかもしれないなんだろ?

そういう矛盾になぜ気づかない。int main に洗脳されているとしか思えない。

34 :デフォルトの名無しさん:2010/04/01(木) 16:49:17
ないことを証明するのは「悪魔の証明」だろw

35 :デフォルトの名無しさん:2010/04/01(木) 17:17:55
エイプリルフールと関係あるのかどうか

36 :デフォルトの名無しさん:2010/04/01(木) 17:19:39
>>31
処理系じゃないけど、商用アプリ作ってるところで、
「main は void で宣言して、リターンコードを返す場合は exit() を使うこと。」
という社内規約を作っているところはあるよ。

この規約に準拠したら、void main 使うのは当然だよね。

そうすると、この規約自体がどうなだってるんだってことになるけど、
それ言い出すと int main を定めているのも規約の一つでしかないわけだし。

少なくとも昔は int main を定めている規格なんかなかったし、
処理系もその時代からあるから int main には依存していない。

そういう状況で int main を定めた規格が後から作られた。まぁある程度は広まった。

だからといって、その規格に準拠していないC言語はすべて間違いなんてのはおかしいだろ。
その時点で一番メジャーな規格のみが唯一絶対正しいなんて滅茶苦茶だし、
MS のコンパイラだってそれなりにメジャーだよ。

37 :デフォルトの名無しさん:2010/04/01(木) 17:23:36
こういう無駄な議論にかける情熱の、せめて1/100でも
宿題回答に向けてくれればいいのになw

38 :デフォルトの名無しさん:2010/04/01(木) 19:33:39
>>36
#include <stdio.h>
void main() { }
上記コード、MSのコンパイラなら何も文句を言わないのかとあせったがちゃんと警告が出るね。

39 :デフォルトの名無しさん:2010/04/01(木) 19:58:40
DOS で void main() が正規だって?まさか!
リンクするスタートアップモジュールは返り値をレジスタにとっているので void main() であろうとも int main() であろうともスタック構造がかわならいので問題ないようにみえるだけでは?

40 :デフォルトの名無しさん:2010/04/01(木) 20:04:43
>>25
それは単に
main()
{
printf("Hello, world\n");
}

だったのでは。関数の返り値を指定しなかったら int だというだけでは。
そもそも、そのころに void というキーワードはあったのだろうか?

41 :デフォルトの名無しさん:2010/04/01(木) 20:07:30
>>31
言っても無駄。そんな処理系は存在しない、少なくとも DOS 上・UNIX上ではね。


42 :デフォルトの名無しさん:2010/04/01(木) 20:29:52
>>36
規格化、標準化されたものに対して
準拠するという言葉があるので
案件ごとに異なるローカルルールや
社内規約を持ち出して準拠するとは言わないよ

準拠という言葉の意味、成り立ちを考えれば分かると思うけど
C99準拠でなくMS準拠なんてもはやギャグだよ
環境依存しないよう規格化してるのに
わざわざ手間をかけてエラーや警告の出やすいものにする意味が分からん

43 :デフォルトの名無しさん:2010/04/01(木) 22:46:15
またかよ
いつまでやってんだ

44 :デフォルトの名無しさん:2010/04/02(金) 09:38:41
>>38
MS-C, VisualStudio ともに警告はでない。
コンパイルオプションを変更せず、標準時の場合だよ。

>>39
ローカル変数が初期化されていないのと同じ状態。それが問題になるわけがない。
その値に依存した処理を行うときにはじめて問題になるだけ。

>>40
main 関数の中に return 文がないということがポイント。これは void main と同じ。
C言語の設計者が書いたコードであり、これこそC言語の規格。(もちろん昔の)
そしてこのコードが動くように Unix、DOS 等の処理系が設計された。
だから少なくとも Unix や DOS ではこういうコードの動作が保証されている。(これは今も)

>>42
君がMSのコンパイラ使わないのは勝手だけど、
世の中のWindowsアプリケーションの殆どはMS準拠で作成されてるんだよ。
C99準拠が唯一無二だという思想の方がよほどギャグだよ。

あと、とんでもなく勘違いしてるようだから言うけど、C99は処理系に対する規格じゃないんだよ。
こういうことも理解してないんだろうな。

45 :デフォルトの名無しさん:2010/04/02(金) 10:29:26
>>44
その意味不明な規格は脳内で作ったの?
それとも誰かから受け継いだの?

46 :デフォルトの名無しさん:2010/04/02(金) 10:59:22
>>45
「その」が何を指してるのか全くわからん。これでは答えようがない。
技術者ならもう少しマシな文章書けるようなった方がいいぞ。

47 :デフォルトの名無しさん:2010/04/02(金) 13:55:07
>>44
> コンパイルオプションを変更せず、標準時の場合だよ。
おいよいよ?

48 :デフォルトの名無しさん:2010/04/02(金) 14:55:49
そうか 春休みだから宿題うpがないのか


49 :デフォルトの名無しさん:2010/04/02(金) 15:04:53
>>47
void main() と書いても、警告は出ないよ。
念のため Visual Sutdio 2008 でコンパイルしたけどでないよ。
警告レベルを /W4 に引き上げても警告はでない。

MS系のコンパイラで警告の出るバージョンがあったと言いたいの?
それとも何か別のこと?

何を聞いてるのかよくわからないから、答えようがない。

50 :デフォルトの名無しさん:2010/04/02(金) 16:56:55
>>49
VS2008で警告でたよ。
というか、void派はvoid main()を否定すべきだろ

51 :デフォルトの名無しさん:2010/04/02(金) 17:22:42
>>50
どういう警告がでるの?

52 :デフォルトの名無しさん:2010/04/02(金) 17:25:24
void main()という記述はよくないよという警告

53 :デフォルトの名無しさん:2010/04/02(金) 17:48:01
こんばんわ。
BuildLog.htm に、そのように出力されてるのか?

54 :デフォルトの名無しさん:2010/04/04(日) 15:58:52
コマンドプロンプト cl では警告は一切でない。
>>52
ためしてからものをいうこと。

55 :デフォルトの名無しさん:2010/04/04(日) 16:11:02
@VC++2008EE

#include <stdio.h>

void main(void)
{
puts("TEST");
getchar();
}

エラー0、:警告0
規格で main() の型は int って決まってるんだから警告ぐらいは出すべきと思うけど。

56 :デフォルトの名無しさん:2010/04/04(日) 16:13:44
まぁ、MSだから仕方がない

57 :デフォルトの名無しさん:2010/04/04(日) 16:29:23
スタートアップモジュールが void main() 用に切り替わる、とか?
ありえないけど。

58 :デフォルトの名無しさん:2010/04/04(日) 16:45:54
@VC++2010β2
エラー0、警告0
MS やる気あんのか

59 :デフォルトの名無しさん:2010/04/04(日) 16:51:25
あー、void main() 実行できるけど、まともな終了値を返してないね

60 :デフォルトの名無しさん:2010/04/04(日) 16:59:13
VCでのvoid main()はMSの仕様で許されています。

http://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
 :

61 :デフォルトの名無しさん:2010/04/04(日) 17:06:48
>>60
>>55のコードを試してみてくれ。

62 :デフォルトの名無しさん:2010/04/04(日) 17:07:59
特に断りがなければvoidは正常終了でいいと思うけどなぁ

63 :61:2010/04/04(日) 17:08:53
すまん、0だったね
不定値を返してるのはVC6だった

64 :デフォルトの名無しさん:2010/04/04(日) 17:14:43
>>61
エラーも警告も出ず、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

65 :デフォルトの名無しさん:2010/04/04(日) 22:49:02
EmbarcaderoのECC6.2.1はvoid main(void)では不定値を返す

66 :デフォルトの名無しさん:2010/04/04(日) 23:04:08
_TEXT segment dword public use32 'CODE'
_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) は不定値を返す。

67 :デフォルトの名無しさん:2010/04/04(日) 23:28:10
なんだか妙な流れ… でも面白そうなのでunix 7th editionで確認。
return無しでもコンパイルは通るが、システムに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
$


68 :デフォルトの名無しさん:2010/04/04(日) 23:28:56
とりあえず宿題すれで議論すんな
スレチ

69 :デフォルトの名無しさん:2010/04/05(月) 00:19:48
とりあえず春休みの宿題はvoid mainについてということで


70 :デフォルトの名無しさん:2010/04/05(月) 00:46:20
汎用性を重視してプログラムを作成せよ。
ということで、FAでは?

機種制限されるようなプログラムを組ませるようなキチガイな学校は帰れといういことで
マイコンなどは話は別だが

71 :デフォルトの名無しさん:2010/04/05(月) 08:12:38
>>70
学校のせいで帰れというのは生徒に酷ですね。

72 :デフォルトの名無しさん:2010/04/05(月) 10:07:59
学校は帰れって言ってんのに

73 :デフォルトの名無しさん:2010/04/05(月) 17:29:32
>>50
>>52
void main 否定派は嘘ばっかりだよね。
他の発言もいい加減なことばっかり。

void main が駄目だとかデマを撒き散らして何のメリットがあるんだろう。

74 :デフォルトの名無しさん:2010/04/05(月) 18:02:43
だから警告でるって。
試してるやつはコマンドラインさらしてみ?
ってか「void main()」ここだけで明らかにおかしい点があるだろよ

void main肯定派もっとがんばれよw

75 :デフォルトの名無しさん:2010/04/05(月) 18:18:49
うちのコンパイラーは無警告なので void main おk

76 :デフォルトの名無しさん:2010/04/05(月) 19:16:55
>>74
>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() であっても同じことではないでしょうか。

77 :76:2010/04/05(月) 20:02:24
>76 は不完全ですね。bash を起動させて標準出力と標準エラー出力の両方を取っておきましょうか。
$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


78 :デフォルトの名無しさん:2010/04/05(月) 21:23:01
>>75
警告がでないからといって安心しているようでは‥‥‥。
モジュール別に分割してコンパイルするつくりで、かつちゃんとヘッダを書いていないときには、エラーがでなくてもはまります。
あと不定長引数の関数もはまれば結構難解です。

79 :デフォルトの名無しさん:2010/04/05(月) 21:34:23
>>73
> void main 否定派は嘘ばっかりだよね。
> 他の発言もいい加減なことばっかり。
理解できないのなら、そういってくだされば、噛み砕いてご説明いたしますが。

80 :デフォルトの名無しさん:2010/04/05(月) 21:34:31
面白いな。 Red Hat EL5.4上のgcc 4.1.2では警告ありで返り値はランダム.
MacOS 10.5.8上のgcc 4.0.1では警告ありだけど返り値は常に0。

81 :デフォルトの名無しさん:2010/04/06(火) 00:11:28
>>80
gcc 3/4 をみたんですけれども、___main 依存でよくわからない。___main ってなんでしょうか?

82 :デフォルトの名無しさん:2010/04/06(火) 09:00:51
>>79
Visual Studio 2008 で void main と定義したときに、
警告が出るというのが理解できません。
「警告が出る」というのはどういう意味かを噛み砕いて説明してください。

83 :デフォルトの名無しさん:2010/04/06(火) 10:15:48
なんでvoid main派はこんな頭悪いレスばかりするんだ?
いざ警告内容を目の当たりにしてもこの有様。
void main派から見てもvoid main()はありえん。とかいいなよ。

84 :デフォルトの名無しさん:2010/04/06(火) 10:22:55
void main派から見てもvoid main()はありえん。

85 :デフォルトの名無しさん:2010/04/06(火) 10:29:41
>>82
VisualStudio2008では警告は出ないよ。
警告が出るというのは、void main否定派が、
都合が悪くなってデマカセを言ってるだけ。

86 :デフォルトの名無しさん:2010/04/06(火) 10:32:22
>>83
void main否定派が全ての環境で警告が出るとか、くだらん嘘つくからだろ。

87 :デフォルトの名無しさん:2010/04/06(火) 10:35:28
>>84
だよね。
>>85
clのバージョンを教えてくれないか。
>>86
でない環境は?

88 :デフォルトの名無しさん:2010/04/06(火) 10:39:27
VS2008の出力

# 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

89 :デフォルトの名無しさん:2010/04/06(火) 10:42:43
必要もないのにincludeしたのはごめんなさい。
バージョン、内容ともに>>77と同じ

90 :デフォルトの名無しさん:2010/04/06(火) 11:04:27
>>88
それ、/Wall というオプションつけてるからだよ。
ヘルプ読めばわかるけど、推奨されているのは /W4 まで。
/Wall という特殊なオプションを付けて状態で警告がでても意味がない。
stdio.h に対しても警告出してるんだから、こんなオプションの実用性がないことは普通の人ならわかる。

更にこの状態であっても void main に対しての警告は出ていない。
つまり void main が認めらているということ。

91 :デフォルトの名無しさん:2010/04/06(火) 11:07:52
だからこそしきりに、void main()はありえんと言っている。
void main肯定派の中にvoid main()も肯定しているように見受けられる人が多いから。
ちなみに俺はvoid mainを否定したことはないよ。

92 :デフォルトの名無しさん:2010/04/06(火) 11:09:43
pedanticをディスってると聞いて

93 :デフォルトの名無しさん:2010/04/06(火) 12:20:27
>>90
単に引数を指定しない宣言を void にしただけ。 func() を func(void) と読み替える、といってきている。
今回の話題には関係ない。いずれにせよ /Wall が特殊、というわけではない。stdio.h でエラーがでているのはご愛嬌というべきか。
MSのコンパイラでは、void main() にしても特に警告はでていない、ということは普通の人ならわかる。

ただ、私は void main() 否定派。リンクされるスタートアップモジュールでの仮定と異なる宣言はどうかと思う。
引数の宣言をあわせるのは main() も同じ。返り値をスタックにのせる場合もある現在の規格ではなおさら。

94 :デフォルトの名無しさん:2010/04/06(火) 12:21:42
>>91
規格では関数の定義において void func(void) と void func() は等価であることが保障されている。
プロトタイプのときは別。
時間があれば規格の場所を探しておく。

95 :デフォルトの名無しさん:2010/04/06(火) 12:25:19
>>94
それC++
>>88は拡張子Cでやってるからvoid func()はvoid func(...)と透過でかつ未定義

96 :デフォルトの名無しさん:2010/04/06(火) 14:18:53
void mainと書くのは日本だけの風習だから、外国では笑われるよ。
アメリカだとint mainじゃないと、罰金取られたりするしね。
あと日本の規格は優秀だから海外でも通用するから、
void mainなんて阿呆がすることなんだよ。
あと実行速度がvoidにすると最大10倍ぐらい遅くなったりするからね。
逆にいうとintにしたら、10倍はやくなるだから、そうしなのはどあほだよ。
あとintの方が文字が少ないし実行速度が早くなるのは当然なんだよ。

97 :デフォルトの名無しさん:2010/04/06(火) 14:23:38
あああそうか!!!
みんな実行速度のことを忘れたね。
そういう目で分析するとint mainで決着だ!!!!
10倍とかすごいね、頭のいい人がいるもんだわ。関心だわ。

98 :デフォルトの名無しさん:2010/04/06(火) 14:31:55
クマー。

99 :デフォルトの名無しさん:2010/04/06(火) 14:45:25
どこを横読みすればいいですか?

100 :デフォルトの名無しさん:2010/04/06(火) 15:41:27
void main 否定派は嘘つきで更に頭も相当悪いな。。。

101 :94:2010/04/06(火) 22:01:34
>>95
仕様書の該当場所をみつけた。
残念ながら 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/

102 :デフォルトの名無しさん:2010/04/06(火) 22:01:59
VC で void main に警告出すには /Za オプション
まあこれは Microsoft 拡張であることも示してる
そして実は sizeof(T) <= sizeof(int) の整数型でも同じようになる

これからは unsigned short main なんて書くやつがいても叩くのやめようぜ
VC では認められてるもんな

103 :94:2010/04/06(火) 22:11:09
>>91
だから、void main(void) と void main() は関数定義においては同一で、
「void main() はありえない」といっている意味がわからない。

私は int main()派、というよりは、コールする側とコールされる側で返り値の仮定は一緒にするのが妥当だと思っているだけだが。

104 :デフォルトの名無しさん:2010/04/06(火) 22:21:57
>>102
$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 拡張子を無効にする

だそうだが?

105 :デフォルトの名無しさん:2010/04/06(火) 22:32:03
それは誤訳なんだ
http://msdn.microsoft.com/library/0k0w269d

あとC++での話ね

106 :デフォルトの名無しさん:2010/04/06(火) 22:48:16
>>105
誤訳かあ。

> 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 であることを警告する内容じゃないんだが?

107 :デフォルトの名無しさん:2010/04/06(火) 23:14:00
/Za オプションを付けるとこうなるよ (/Ze は既定)

warning C4326: 'main' の戻り値の型には、'int' を使用してください。'void' は使用できません
ttp://msdn.microsoft.com/library/1wk7h414

108 :デフォルトの名無しさん:2010/04/06(火) 23:17:40
>>86
そんなことは誰もいっていないと思う。
そもそも MS で警告がでないから void main() で問題ない、という void main 肯定派の発言が発端では?
ただ、int main() 派としては、void main() のアセンブル結果が面白い。MS で void main() でも 0 を返しているのは、MS嘘つきとしかいいようがない。

109 :デフォルトの名無しさん:2010/04/06(火) 23:26:46
>>107
コンパイラのバージョンが違うんだね、たぶん。
私のは 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

としかいわない。よかったらコンパイラの標準出力&標準エラー出力を貼ってくださいな。


110 :デフォルトの名無しさん:2010/04/06(火) 23:33:13
C++の話だから拡張子をcppにするか/TPオプション使おうね

111 :デフォルトの名無しさん:2010/04/07(水) 01:24:29
C99規格でmainの定義はint main(void){...}、int main(int argc,char * argv[]){...}、
この2つと同等(型の再定義等)の方法、に加えて処理系定義の方法で行うということに
なっているもよう(JIS規格なら http://www.jisc.go.jp/ の「JIS検索」からX3010を
検索すれば閲覧可能)。
ということなので、(少なくともCでは)宿題の処理系に対応していればvoid mainでも可
という結論で良いのかな。


112 :デフォルトの名無しさん:2010/04/07(水) 03:09:01
ええ、C++とかC99とかの話になってんの?
てっきりANSI-Cの話かと。。。

113 :デフォルトの名無しさん:2010/04/07(水) 09:17:43
>>111
常識で考えればその通りで最初から答えは出ている。
なのに main 関数はどんな場合でも int で宣言しろという奴がいるんだよ。

114 :*><:2010/04/07(水) 09:35:38
Borland が、/* */ main(){} や、int main(){} で変な警告だすのがそもそもの原因。
{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

115 :デフォルトの名無しさん:2010/04/07(水) 09:49:45
もはや、宿題スレじゃなくなってるwww

116 :デフォルトの名無しさん:2010/04/07(水) 10:40:04
昔のfj.comp.lang.cを彷彿とさせるな

117 :デフォルトの名無しさん:2010/04/07(水) 10:43:03
fjでもこの話題あがってたの?

118 :デフォルトの名無しさん:2010/04/07(水) 12:30:44
>>111
しかし、最後の処理系定義の方法、というのが曲者で、VC にしろ、bcc にしろ、スタートアップルーチンは int の返り値を
受けるようにできているので、int main() とするとが妥当でしょう。これを、自分が作るプログラムは返り値を返さない、という
理由で void main() にするのはおかしいのではないでしょうか?

119 :デフォルトの名無しさん:2010/04/07(水) 12:31:37
>>116
なつかしいじゃありませんか。

120 :デフォルトの名無しさん:2010/04/07(水) 12:38:57
>>118
こういう基地外が後を絶たない

121 :デフォルトの名無しさん:2010/04/07(水) 13:11:53
>>118
そういうくだらん発言は、スレ読んでからにすれば。

122 :デフォルトの名無しさん:2010/04/07(水) 13:28:21
>>119
いやあの時は確かmalloc()&free()だったと思う
くだらん話題で何ヶ月も議論してたぞ

123 :デフォルトの名無しさん:2010/04/07(水) 18:56:23
>>120
>>121

>>111 の「処理系定義の方法で行う」というのを拡大解釈しているのではないですか。たとえば
double main()
が可能か不可能かは明白でしょうが、
void main()
でも同じことではないでしょうか?
処理系定義のリンクされるスタートアップが int main() を前提にかかれているのであれば、
int main()とかくべきなのではないでしょうか。
それとも MS-C Borland C は void main() を前提としたスタートアップなのでしょうか?

124 :デフォルトの名無しさん:2010/04/07(水) 19:22:12
>>123
おいおい確かめもせずにいい加減な事を書くな
Borland Cはvoid mianだと不定値を返すぞ

125 :デフォルトの名無しさん:2010/04/07(水) 19:35:08
>>124
まって、それは私が >>66 で書いています。
当然 bcc32 は void main() を前提としたスタートアップではありません。

実際 int の返り値はたいていの処理系ではレジスター経由でスタートアップにわたるので、 void main() と書こうが、int main() と書こうが
実害はないのは百も承知です。
その上で void main() と書くよりも int main() と書いたほうがいい理由を探しています。

126 :デフォルトの名無しさん:2010/04/07(水) 19:51:54
>>122
strdup() の返り値を free() するかしないかでしたっけ?

127 :デフォルトの名無しさん:2010/04/07(水) 19:54:41
だがちょっと待って欲しい
「不定値を返すから void main を前提としたスタートアップではない」
本当にそうだろうか
「void main のときは不定値を返す」
という仕様である可能性はないのだろうか

128 :デフォルトの名無しさん:2010/04/07(水) 19:55:18
>>126
いや多分まだログは残っていると思うが、話の発端は
「malloc()で確保した領域をfree()すると何が起きるのでしょうか」
という一質問者の質問だった

これが堂々巡りでひどい話に膨れあがって
結局使ってるOSに言及しないとはっきりした事は言えないよという
結論に落ち着くまで半年かかった

Windowsではfree()したらシステムにメモリを返す事もあるが、unixや
Linuxではそのまま持っていたりとかとにかく読んでて眠くなった

129 :デフォルトの名無しさん:2010/04/07(水) 20:00:57
>>128
そのままもっているのは C の処理系のほうだったかと。OS レベルでも返さないとは驚き。

130 :デフォルトの名無しさん:2010/04/07(水) 20:07:54
>>129
ああそうか
でもこの話はよそうぜ(笑)
void main()で盛り上がってるのにここにmalloc&freeが加わったら
大変な事になるw

131 :デフォルトの名無しさん:2010/04/07(水) 20:08:18
>>127
んー、void main()は不定値を返す、という表現自体が、main() が返した先のモジュールで返り値を扱うことを意味しますね。
一連のアセンブリソースの検証でも、あくまで main() の返り先が返り値を扱う前提で調査していることになりますね。

たしかに「不定値を返すから void main() を前提としたスタートアップではない」とはいいきれませんね。
もうこれはスタートアップ自体を調べないことにはわかりませんね。

132 :デフォルトの名無しさん:2010/04/08(木) 09:06:13
テンプレ書け

133 :デフォルトの名無しさん:2010/04/08(木) 09:34:04
>>125
>実害はないのは百も承知です。
>その上で void main() と書くよりも int main() と書いたほうがいい理由を探しています。

int main に洗脳されたキチガイが文句言ってくるので、そういう奴らの相手をしなく済むことだね。
そういうキチガイがいない環境では、使っても問題ない。

134 :デフォルトの名無しさん:2010/04/08(木) 11:00:46
> void main() と書くよりも int main() と書いたほうがいい理由

規格で規定されてるからだろ
コンパイラのあるバージョンからを境にvoid main()が使えなくなる可能性は
十二分にある

135 :デフォルトの名無しさん:2010/04/08(木) 11:15:33
>>134
まさにこういう人がいるから、使った方がいいということだろね。

こういう人は規格の意味や内容を理解しておらず、
どっかの受け売りだから議論にもならない。
そのくせ「規格では」とか言いたがる。

もう面倒だから使ってればいいんだよ。

136 :デフォルトの名無しさん:2010/04/08(木) 16:27:41
int main() と書くよりも void main() と書いたほうがいい理由ってなんなの

137 :デフォルトの名無しさん:2010/04/08(木) 16:45:12
>>136
まさにこういう人がいるから、使った方がいいということだろね。

こういう人は規格の意味や内容を理解しておらず、
どっかの受け売りだから議論にもならない。
そのくせ「理由ってなんなの」とか言いたがる。

もう面倒だから使ってればいいんだよ。

138 :デフォルトの名無しさん:2010/04/08(木) 17:16:34
int main()よりもvoid main()と書いた方がいいらしいですが、どうしてですか?

139 :デフォルトの名無しさん:2010/04/08(木) 17:37:14
>>138
かまってもらえるから

140 :デフォルトの名無しさん:2010/04/08(木) 17:37:34
return 0; を書かなくても怒られないからとかじゃないの

141 :デフォルトの名無しさん:2010/04/08(木) 19:20:21
おまえらには「臨機応変」という言葉は通用しないのか

142 :デフォルトの名無しさん:2010/04/08(木) 19:23:36
宿題がないから暴れてるだけです。

143 :デフォルトの名無しさん:2010/04/08(木) 20:41:39
臨機応変、、、適材適所だと思うんだけど、void mainの適所はどこですかっていう

144 :デフォルトの名無しさん:2010/04/08(木) 20:42:44
>>143
構ってもらえる

145 :デフォルトの名無しさん:2010/04/08(木) 22:23:45
ここれす

146 :デフォルトの名無しさん:2010/04/08(木) 23:50:32
>>140
C++のint main()に限って省略可能だよ

147 :デフォルトの名無しさん:2010/04/09(金) 01:37:52
>>136
int main()
{
return 0;
}

void main()
{
}

148 :デフォルトの名無しさん: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)としか無くてイチからコードを書いて貰えると嬉しいです・・・。

149 :デフォルトの名無しさん:2010/04/09(金) 04:12:53
今日だよ。int main(void){return 0;}
1.ヒストグラム
0〜9の範囲内の整数を20個入力し、そのヒストグラムを求めて出力するプログラムを書きなさい

2.素数について
1〜30までの整数の中のすべての素数を求めて出力するプログラムを書きなさい
注:素数の求め方は色々考えられるが、まず効率を気にしなくてもよいのでプログラムを作りましょう
そして1〜50,1〜100の素数を求めるように実行して、実行時間を観察しましょう(少しでも範囲を広げるとかかる時間は極端に増えてしまう。)

3.二次方程式の解
ax2+bc+c=0の係数abcを入力し、解があるかどうかなどを判定し
「実数解無し」・「実数解は一つ」・「実数解は2つ」のどちらかを出力するプログラムを書きなさい

4.配列
成績処理
10人の学生の成績を配列に入力してから、平均成績と最高成績を求めて出力するプログラムを書きなさい


150 :デフォルトの名無しさん:2010/04/09(金) 04:19:02
ちゃんと流れに乗ってるじゃないかwww

151 :デフォルトの名無しさん:2010/04/09(金) 04:22:16
#include <stdio.h>
int 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;
}

152 :デフォルトの名無しさん:2010/04/09(金) 04:22:30
>>149
わざわざ問題文を載せてもらいありがとうございます
そうです、提出は今日ですね・・・寝る前だったので間違えてしまいました

153 :デフォルトの名無しさん:2010/04/09(金) 04:29:29
#include <stdio.h>
int 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;
}

154 :デフォルトの名無しさん:2010/04/09(金) 04:32:17
#include <stdio.h>

int 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;
}

155 :デフォルトの名無しさん:2010/04/09(金) 04:35:09
#include <stdio.h>

int 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;
}

156 :148:2010/04/09(金) 04:45:56
>>151>>153>>154>>155
こんなに早く・・・ありがとうございます!助かりました
ただ素数の問題以外が実行しても結果が表示されないのはこちらの環境の問題なんでしょうか

157 :デフォルトの名無しさん:2010/04/09(金) 04:49:52
入力しろよw

158 :デフォルトの名無しさん:2010/04/12(月) 21:16:46
1バイトが8bitじゃない環境なんて俺は認めない

159 :デフォルトの名無しさん:2010/04/12(月) 22:41:57
認めないのは自由だけど、人に押し付けないでね

160 :デフォルトの名無しさん:2010/04/12(月) 23:02:41
1バイト=8ビットじゃない環境ってどんなのだ?

161 :デフォルトの名無しさん:2010/04/12(月) 23:33:57
何バイトかではなく何オクテットなのかで表現しているドキュメント結構あるよね

162 :デフォルトの名無しさん:2010/04/13(火) 08:01:07
>>160
昔のミニコンとか。

163 :remi ◆I1kj7ags4Q :2010/04/13(火) 11:52:45
[1] 授業単元:
プログラミング演習
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々
特にないです。


プログラミングが全く分からずこまっています。私なりにわかる部分はがんばっているんですが、この課題はまったくわかりませんでした。助けていただけたら嬉しいです。
みなさんどうかよろしくお願いします。

164 :デフォルトの名無しさん:2010/04/13(火) 16:23:36
(a)
#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;}

165 :デフォルトの名無しさん:2010/04/13(火) 16:26:31
(b)
#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;}

166 :デフォルトの名無しさん:2010/04/13(火) 16:33:09
(c)
#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;}

167 :デフォルトの名無しさん:2010/04/13(火) 18:44:57
すみませんが、インデントぐらいしてくださいよ。
これでは読めません。

168 :デフォルトの名無しさん:2010/04/13(火) 18:55:43
お前は読まなくてもいいよ

169 :デフォルトの名無しさん:2010/04/13(火) 20:57:25
ソースはインデントしてあるじゃん

170 :remi ◆I1kj7ags4Q :2010/04/13(火) 22:07:51
>>>164本当にありがとうございます!しかし、わたしの問題文の書き方がわるかったみたいです。問題1は(a)と(b)を同時に満たすということみたいです。本当に申し訳ありません。
もしやっていただけるのであれば嬉しいです。本当にすみませんでした。

171 :デフォルトの名無しさん:2010/04/14(水) 01:24:58
>>170
>>165が(a)と(b)両方満たすようにできてる


172 :デフォルトの名無しさん:2010/04/14(水) 16:02:03
>>171 気づきませんでした。すみません。本当に助かりました。ありがとうございます。
実はまだもうひとつ問題があって、それは自力でやろうとおもってたんですが、わたしはとけませんでした。本当にもうしわけないのですがこちらも教えていただけませんか?よろしくお願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10569.txt

173 :デフォルトの名無しさん:2010/04/14(水) 16:30:57
宿題で
コンソール上で入力した文字によって、以下の出力をするプログラムを作成する。

入力が"a"→(^_^)
入力が"b"→(T_T)
入力が"c"→(≧∇≦)
入力が"A"→(≧Δ≦)
その他の入力→(?_?)

※追加: 繰り返し入力を待ち受け、zが入力されたときのみ終了すること。
というのが出ました。
まったく分からないので教えてください。

174 :デフォルトの名無しさん:2010/04/14(水) 16:37:39
> 自力でやろうとおもってたんですが、わたしはとけませんでした。
何もできないだめな学生だとアピールする理由が分からない

175 :デフォルトの名無しさん:2010/04/14(水) 16:38:02
先ほどのものです。
言語はC++でお願いします。


176 :デフォルトの名無しさん:2010/04/14(水) 16:40:26
>>173
while
 入力内容を取得
 switch入力文字
  case a print (^_^)
  case b print (T_T)
  case c print (≧∇≦)
  case A print (≧Δ≦)
  case z 正常終了
  default print (?_?)

177 :デフォルトの名無しさん:2010/04/14(水) 16:47:26
>>176さんありがとうございます。
早速やってみます。

178 :デフォルトの名無しさん:2010/04/14(水) 17:10:27
#include <stdio.h>
int 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;
}

179 :デフォルトの名無しさん:2010/04/14(水) 17:23:18
conio.hはインクルードしなくていいの?

180 :remi ◆I1kj7ags4Q :2010/04/14(水) 19:51:37
>>179 しなくていいと思います。よろしくお願いします

>>174 すみません。本当にわからなくて…

181 :デフォルトの名無しさん:2010/04/14(水) 21:28:52
>>180
>>179>>178へのレスで、あんたへのじゃねーよw

182 :デフォルトの名無しさん:2010/04/14(水) 21:40:44
>>172
int 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);}


183 :remi ◆I1kj7ags4Q :2010/04/16(金) 00:17:39
>>182
本当にありがとうございました。助かりました。ありがとうございます

184 :デフォルトの名無しさん:2010/04/16(金) 00:40:04
[1]C言語(初心者コース)
[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関数だけで
構成)が制約条件だそうです。

よろしくお願いします

185 :デフォルトの名無しさん:2010/04/16(金) 00:51:50
ちょっと意味が分からない

186 :デフォルトの名無しさん:2010/04/16(金) 08:15:01
意味ならな分かるがなあ、、。

187 :デフォルトの名無しさん:2010/04/16(金) 14:41:26
>>184
5つの整数を(正しく読めてるかチェックしながら)読む
同じ数が現れても正しく読めてる限りカウントする
2つの組み合わせ(1種類しか無い場合は出力無し?)を
すべて列挙し、それらについて加減乗除剰余の表を出力する
負数同士の剰余とかは単純に%で出せるとは限らないから
一度絶対値を取って%で計算してから調整する
これでおk?

188 :デフォルトの名無しさん:2010/04/16(金) 14:51:46
問題文がこのまま出されてるとしたら出題者はアレだな・・・

189 :デフォルトの名無しさん:2010/04/16(金) 15:25:34
>>187
「任意の」って書いてあると
可能な組み合わせの中から(ユーザが)1つ選ぶってニュアンスが強いような気がするんだ

190 :デフォルトの名無しさん:2010/04/16(金) 15:49:45
そういう学校に入学した生徒も相当何と言うか・・・

191 :デフォルトの名無しさん:2010/04/16(金) 16:03:34
どんなレベルの授業がなされるか、理解したうえで選択する生徒がいるのかね

192 :デフォルトの名無しさん:2010/04/16(金) 16:22:00
[2]は入力された5つの整数から2つチョイスするって意味かと思ったけど違うん?

193 :デフォルトの名無しさん:2010/04/16(金) 16:30:29
>scanfで取得した整数が入力された整数を表す文字列と矛盾が無いことを
>チェックすること。
これの意味がいまいちわからん。

194 :デフォルトの名無しさん:2010/04/16(金) 16:32:35
>>193
%d で受けるのではなく、
%s で受けて パースしつつ整数値を切り出せ ってことかねぇ

195 :デフォルトの名無しさん:2010/04/16(金) 16:37:32
>>187
5個の数が全て同じなら、「2つの異なる数」は無いわけで、そのエラーメッセージが定義できないなら、
それなら20回同じ答えを出せばいい。

196 :195:2010/04/16(金) 16:39:48
>>193
#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");
  }
}

197 :デフォルトの名無しさん:2010/04/16(金) 16:42:47
>>194
ああ、そういう。。
fgetsが許可されてるけどsscanfがないし、scanfがあるわで意味分からんかった

198 :デフォルトの名無しさん:2010/04/16(金) 16:43:39
# scanf 時のセパレータと一致させて printf するのも難儀な話だが
sscanf, 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 の境界をまたいでて値が裏返るケースを検出しろ
ということかね?

199 :195:2010/04/16(金) 17:30:11
#define _CRT_SECURE_NO_DEPRECATE
#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 <-- 釣り針 */

200 :195: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);
  }
}

201 :195: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 <-- 釣り針終わり */

202 :デフォルトの名無しさん:2010/04/16(金) 21:49:06
ユーザ関数を作るなってことは、過去に多倍長でも作った奴がいたのか?


203 :デフォルトの名無しさん:2010/04/16(金) 21:55:54
関数化するメリットを教えるためにわざわざ面倒なことをしているとか。

204 :デフォルトの名無しさん:2010/04/16(金) 22:02:54
>>184
問題の原文そのまま出してくれ

205 :デフォルトの名無しさん:2010/04/16(金) 22:36:11
分かった
普段使わないから存在を忘れてたけど、
goto使えってことじゃないか?

206 :デフォルトの名無しさん:2010/04/17(土) 00:26:50
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
25×25マスの数独の解を求めるプログラムを作成せよ。
テキストファイルに入力した問題(数字マスは半角数字、空マスは半角スペースで入力)を引数から指定し
解を出力する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語:C言語
[4] 期限: 4月23日中
[5] その他の制限:無制限

207 :デフォルトの名無しさん:2010/04/17(土) 01:01:00
>>206
無制限って処理速度とかメモリ効率も考えなくて良いのか?
簡単なアルゴリズムだと総当りで、メモリも大量に使用するけど、
25×25だと、空のマスの状態次第で結構な時間とメモリを消費しそうな気が…
まぁ、ちょっとした工夫でメモリはなんとでもなるが、
時間はアルゴリズムを考えないとならんが、数独の得意な奴じゃないと分からんと思うし…
あと、入力方法は、半角数字2桁(頭0詰)で、空マスは半角スペース2つでOKなのか?
正しいか確認するために、その問題自体も出して欲しいところだ。

208 :デフォルトの名無しさん:2010/04/17(土) 01:53:30
縦横斜めに同じ数字があってはならないという条件だけでバックトラックしちゃえば
数独得意じゃなくてもできると思うよ
答えが複数あるとか検知できないし、効率もわるいけど。。

209 :デフォルトの名無しさん:2010/04/17(土) 01:55:12
あ、小マス?というの?に重複数字がないことというのも条件だた

210 :デフォルトの名無しさん:2010/04/17(土) 07:20:06
>>208
斜め?
タテとヨコとブロックじゃないか?

211 :デフォルトの名無しさん:2010/04/17(土) 07:50:38
>>208
通常の9×9程度であれば、全数検索で問題ないが、
25×25なんて、相当量の投機実行が走る(いつまで立っても終わらないほどの)から、
どうすれば、無駄を省けるかアルゴリズムを考える必要があるんじゃないか?
まぁ、相当量ってのも、単なる直感だから充てにならんけど
空きマスの数に応じて指数的に増えていくからね…

212 :デフォルトの名無しさん:2010/04/17(土) 12:01:06
25x25数独は仮定無しで解ける問題なら一瞬で答えを出せる

213 :デフォルトの名無しさん:2010/04/17(土) 13:41:32
問題見つけてきたけど、まず入力が面倒くさい
http://suudoku.blog26.fc2.com/blog-category-61.html

214 :デフォルトの名無しさん:2010/04/17(土) 16:51:39
じゃあ、とりあえず文字認識するプログラム組んで入力させるか

215 :デフォルトの名無しさん:2010/04/17(土) 17:45:12
>>206
普通のヒューリスティックな探索的解法しか知らないが
その方法による限りかなり言語を選ぶ問題じゃないかと
もちろんCでもできるだろうが、できればJavaせめてC++
で書いたほうがずっと見通しがよく書けるんじゃないかと...
(この手の問題は同じ構造のものを投機的に複製すること
ができるか否かで、コードの見通しがだいぶかわってくる。
メモリ自主管理を重視するカーネルサイドなC言語のステージだと
基本的にそういうアルゴリズムはタブーなんで
Cに慣れれば慣れるほど書きづらくなる)
なんでCで書けと指定する出題者は相当に意地悪

216 :デフォルトの名無しさん:2010/04/17(土) 18:49:22
>>215
ヒューリスティックな探索的解法ってどんな方法?
基本的には、問題の表を構造体にして、いくつかのパターンで
確定OKの数字や確定NGの数字を上書きし、ひとつのパターンでも上書きが発生した場合はループ、
全てのパターンで上書きが発生しなかった場合は、構造体を複製して、
未確定部分に適当な数字を入れて投機(再起)する位しか思いつかんが、
その投機の優先順位を動的に入れ替えるってこと?

217 :デフォルトの名無しさん:2010/04/17(土) 19:08:11
深さ優先探索で押していくしかないのだが
浅い段で簡単に枝狩りができるとも限らない
タイプだろから単純な深さ優先だけじゃ
なかなか見つからないだろうから
幅優先探索の要素も取り入れるってのは
よく行われるんじゃね?

218 :デフォルトの名無しさん:2010/04/17(土) 19:29:50
3×3から始めても、解き方の本質は大してかわらんじゃないか?
取り合えず思いついた構造体の定義をば…

#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;


219 :デフォルトの名無しさん:2010/04/17(土) 19:39:53
いきなりミスってたな…orz

#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;

220 :デフォルトの名無しさん:2010/04/17(土) 20:40:42
富豪的ですね

221 :デフォルトの名無しさん:2010/04/17(土) 20:51:05
>>211
直感でいって、たぶんたいしたことにならないよ
100*100になったら何メガかは食いそうだけど

222 :デフォルトの名無しさん:2010/04/17(土) 23:24:04
>>206
>>213は解けた。
http://codepad.org/Ir78KXuh

テキストファイルから入力するのは、誰かやってくれ。

223 :デフォルトの名無しさん:2010/04/18(日) 00:14:38
節約的ですね

224 :デフォルトの名無しさん:2010/04/18(日) 00:39:19
>>222
ビットが2つ以上立ってるパターンの取り方上手いな。
後は、単純に解を得られないパターンの修正か…

225 :デフォルトの名無しさん:2010/04/18(日) 00:54:57
適当にググって見つけた3×3の問題

{ 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, },


226 :デフォルトの名無しさん: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, },


227 :デフォルトの名無しさん:2010/04/18(日) 00:56:33
http://codepad.org/T2rYhOYF
ナイーブな方法で解いた。
問題の配列は>>222から拝借した。入力した>>222に感謝!
テキストからの読み込みは誰かにまかせた。

228 :デフォルトの名無しさん:2010/04/18(日) 00:56:48
明日、暇だったら、やってみるかな…

229 :デフォルトの名無しさん:2010/04/18(日) 01:11:19
>>222>>227も本質的に単純解のようですね。
得られた解答、まぁ、明日だな。

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

230 :デフォルトの名無しさん:2010/04/18(日) 01:16:58
ごめん。入力ミスってた

3×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は正しい結果が得られる

231 :デフォルトの名無しさん:2010/04/18(日) 01:35:11
多分3×3の中でも超難問。
0, 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


232 :デフォルトの名無しさん:2010/04/18(日) 01:57:28
愚直なやつ
http://codepad.org/f43RW5fW

233 :デフォルトの名無しさん:2010/04/18(日) 01:58:19
かきわすれ。
入力ファイルはタブ区切りで。

234 :232:2010/04/18(日) 02:07:48
なんかバグってるのかと心配したけど
>>231が6分くらいで解けたわ
>>230は10秒くらい。

25*25も一晩ぐらいかけたら解けるんじゃないの、という楽観的な。

235 :デフォルトの名無しさん:2010/04/18(日) 05:52:43
http://codepad.org/DsB0KM1b
IsValidがあんまりなのでCanPutに変えた。
>>231が4秒くらい。

25*25は7秒くらい。

236 :235:2010/04/18(日) 06:04:59
他の速度も書かないと分からんか。

>>227を使用
 >>231 11秒
 25*25 1秒以内

>>235を使用
 >>231 4秒
 25*25 7秒

237 :デフォルトの名無しさん:2010/04/18(日) 06:43:29
>>231を1秒以内
http://codepad.org/YQlNJ05t

しかし根本のアルゴリズムを変えないと、25*25の難問は終わらないな。

238 :デフォルトの名無しさん:2010/04/18(日) 09:42:34
http://codepad.org/uuclKdQw
>>227を改良。>>231を解いたときの実行時間が1/10程度になったけどcodepadだとタイムアウトする。

239 :デフォルトの名無しさん:2010/04/18(日) 10:36:40
>>238
矛盾してる

240 :デフォルトの名無しさん:2010/04/18(日) 11:52:35
http://codepad.org/zLAFp3yB

241 :デフォルトの名無しさん:2010/04/18(日) 15:33:10
>>215
失敗という論理が許されず、何らかの形で対処しなければ
ならないカーネルコードの世界で育ったCでは、失敗したら
潔く捨てるという考えとは対極を為すものかも知れないな

242 :デフォルトの名無しさん:2010/04/19(月) 03:12:12
>>237
これに書かれてる25*25はすぐ終わったけど、難問データってどんなのですか?

243 :デフォルトの名無しさん:2010/04/19(月) 06:40:23
[1] 授業単元: 3DGAME
[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
よろしくお願いします

244 :デフォルトの名無しさん:2010/04/19(月) 21:29:52
>>242
その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秒以内でいけそう。

245 :デフォルトの名無しさん:2010/04/20(火) 00:12:40
>>244
なるほど。
枝刈りは重要だけど、枝刈りしなくてもそこそこ早く終わるという事例か

246 :デフォルトの名無しさん:2010/04/20(火) 00:16:11
>>245
しっかり枝狩りしてるじゃん

247 :デフォルトの名無しさん:2010/04/20(火) 00:20:26
あいや、>>236みて、ぼちぼちはやいんだなっていう。
終わらないという予測は外れたんだなぁと。

248 :デフォルトの名無しさん:2010/04/20(火) 00:21:49
36*36になったらどうなるんだろね

249 :デフォルトの名無しさん:2010/04/20(火) 00:46:08
>>244
フラグの倒し方と、データの持たせ方に目から鱗が落ちるばかりなんだけど、今回のために思いついた?
それとも何かで知ってた?

こういうセンスがすごくほしい

250 :デフォルトの名無しさん:2010/04/20(火) 01:26:47
>>244
一つの可能解の探索なら候補の少ないものを優先的に行う
ほうが幅優先探索性が高まるが、幅優先探索そのものでは
ないので、運が良くない限り速くはならない。
タチの悪い問題の場合は、25x25のケースで620個まで
埋まるが何故か解けなく結局それは最初のマスの投機的決定が
間違ってたという例もあり得る。経験上埋まるが何故か完全には
埋まらない場合はそういうのがその近傍にやたらと多い
ちゃんと木を作って枝狩りしながら深く延ばせる枝を絞り込んでいく
方法が最善なんだろうがメモリ容量の問題が..
あと解の一意性のチェックは大切でこれがないと問題を解いたことには
ならないんじゃね?

251 :デフォルトの名無しさん:2010/04/20(火) 01:30:27
>>250
ちょっとロジック書いてくれないか
高度なレスが多いから期待も高い

252 :デフォルトの名無しさん:2010/04/20(火) 01:39:51
遅いが答えの出るプログラムぶん回す→金になる
高度かどうか知らんがプログラムが出来上がらない→金にならない
これがすべてだろ。

253 :デフォルトの名無しさん:2010/04/20(火) 02:54:17
一意性までとなると全数列挙しかないから、解の一つを
できるだけ速く見つけたいというのであれば
選択枝が小さいものから順次とか随時矛盾チェックとか
いろいろと山の賭けかたにはノウハウはあるのかも知れないが
この問題の場合、列挙の途中で見つかる解を出力する
アルゴリズムだから、結局最終的には運だとしかいいようが
ないような感じ

254 :デフォルトの名無しさん:2010/04/20(火) 03:02:49
ビット変数を利用しないことによる処理時間の伸びは高々
倍程度(裏を返せばビット変数を使うことにより処理時間が
半分になることが期待できる)
できればビット変数を使わないコードのほうが美しいような
気がする

255 :デフォルトの名無しさん:2010/04/20(火) 03:36:20
いいぞもっとやれ

256 :デフォルトの名無しさん:2010/04/20(火) 09:36:06
[1] 授業単元: 並列プログラミング
[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です。すみません。
よろしくお願いします。

257 :デフォルトの名無しさん:2010/04/20(火) 10:08:21
>>253
全数とはいっても全てのマスが独立しているわけではなく
あるマスを決定した段階で他のマスの選択肢が減る訳だから
どこから始めるかは重要

ちなみに >>240 は解を全て列挙するが
選択肢の少ないマスから試行するのをやめると
100倍以上実行時間が変わる

258 :デフォルトの名無しさん:2010/04/20(火) 11:11:25
行き詰まるか解けるまでに現れる選択枝の総数と最初の選択枝の
個数はあまり関係が無いみたいだから一筋縄じゃいかないし
そこが面白いといえば面白いんだが...

259 :デフォルトの名無しさん:2010/04/20(火) 13:01:15
選択肢が少なくかつ、盤面におかれている数が多い数字から仮定をはじめたらどうだろう
12が一番多いなら、選択肢が少ないかつ12が置けるところにおいてみるっていう感じ

260 :デフォルトの名無しさん:2010/04/20(火) 22:24:24
この問題は空きマスが増える度に指数的に選択肢が増えていくから
何かしらの法則で解いていかないと100倍どころか一生終わらないんだが誰も気づかないのか?

261 :デフォルトの名無しさん:2010/04/20(火) 22:26:22
指数的に増える ≠ 無限大

262 :デフォルトの名無しさん:2010/04/20(火) 22:31:17
何万年とか寿命のある人はいいですね

263 :デフォルトの名無しさん:2010/04/20(火) 22:32:43
空きマスが極端に増えると、
数字のマス(つまり制約)が減るということなので、
簡単に解けるようになり、解の数は多くなると予想。

空き具合がちょうどいいあたりに「難問」があるのでは?

264 :デフォルトの名無しさん:2010/04/20(火) 22:36:29
>>263
単純な方法だと>>230>>231の差で>>234位の差がでるのに早くなると思うの?


265 :デフォルトの名無しさん:2010/04/20(火) 22:38:28
>>263
ちなみに、難問って言うのは、絶妙に数を減らし行って、
空きマスを増やしてるから、解は1つしかないよ。

266 :デフォルトの名無しさん:2010/04/20(火) 23:19:43
>>264
全部が空きマスの場合は簡単に解け、
そこから数字を置いていくと徐々に難しくなるので、
難易度のピークは両極端には無く、その間にあると思う。

>>265
つまり、解が1つのままで空きマスを最大どれだけ取れるか、
そしてその空きマスは>>231よりどれだけ多いか、ということね。
想像できん。

267 :デフォルトの名無しさん:2010/04/21(水) 00:47:47
>>257
選択肢最小を選ぶか否かだと速度は 20% 程度しか変わらなかった

>>231 の問題に対して試行したもの
1.選択肢最大のマスから埋めると 10回 解くのに 10〜11秒
2.左上から順にみて一番最初の空白マスから埋めると 1000回 解くのに 2.6〜2.8秒
3.選択肢最小のマスから埋めると 1000回 解くのに 2.2〜2.4秒

2.は左上から順に見ていくことによって左上周辺の選択肢が狭まり
結果的に3.の状況に近くなるものと思われる

1 と 3 の実行速度の差は約450倍にもなるため
仮置きするマスの決め方がとても重要であることは分かる

※ 但し >>231 の場合にうまくはまっただけの可能性もある

268 :231:2010/04/21(水) 01:04:30
>>244すげーな
そのまんまのコードで、リピート数を16回に減らして、100種類まわしてみたけど、
予想してたより、結構早い。
こら、出る幕ねーな…
http://codepad.org/9DInhVnz


269 :デフォルトの名無しさん:2010/04/21(水) 02:09:39
CはCPUや環境に依存しにくいセキュアなコードが書けるが、
この系統の問題は最初からあんましコードをセキュア
に書くと後で非常に辛い思いをするだろな

270 :デフォルトの名無しさん:2010/04/21(水) 02:48:11
そりゃあ全体サイズが増えれば時間がかかるようになることは分かる。
けれど、25*25が終わらないと予測するのはあまりにも今の時代にそぐわないのではないか?というところでしょ。

アルゴリズムにしろコードにしろ何の結果も出さないあなたが、見積もりもできないわけで、
じゃあ何ができるの?

271 :デフォルトの名無しさん:2010/04/21(水) 02:51:21
解答が複数あった場合どうすんの?というのはこのパズルのルールにおいて本来誤った問題であるから、
解答を導くプログラムにおいては1つの解答が得られれば問題ない。
問題が適切であるかどうかをチェックするプログラムなら複数の回答があるかどうかをチェックする必要がある。

272 :デフォルトの名無しさん:2010/04/21(水) 23:05:18
[1] 授業単元:プログラミング
[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] その他の制限:冗長なプログラムにならないこと。

273 :デフォルトの名無しさん:2010/04/21(水) 23:22:03
>>272
Windows XP/cygwin(gcc 3.4.4) で確認
http://ideone.com/snoBo

274 :デフォルトの名無しさん:2010/04/22(木) 00:06:39
[1]授業単元: プログラミング
[2] 問題文:
unixのソケット通信を使ったTCP/IPの通信型プログラムで、まず認証の方法として
ユーザー名とパスワードを打ち込みサーバー側が認証され、その後サーバー側からは
クイズを出題する状態になっていて5問正解した場合(正解数はサーバー、クライアント
両方保持した状態)、暗証のメッセージを送信するということになっていて、
その場合のクライアント側のプログラムを作成せよ(書き方がおかしかったら
すいません)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:c
[4] 期限: 2010/04/22
[5] その他の制限: なし


275 :デフォルトの名無しさん:2010/04/22(木) 00:09:33
>>274
プロトコルの仕様は指示されてないの?

276 :デフォルトの名無しさん:2010/04/22(木) 00:15:01
>>275
特に指示はないです

277 :デフォルトの名無しさん:2010/04/22(木) 01:12:40
>>270
時代にそぐとか、もうアホじゃないかと。
この問題は、単純に決まらない空きマスが一つ増える度に、
計算量が数倍になっていくから、見積もるとか、それ以前の問題なのに…
本気で解くことを考えるなら、もっとアルゴリズムを見直すことが必要。

278 :デフォルトの名無しさん:2010/04/22(木) 01:14:33
>>274
宿題ならサーバー側のソースは渡されてるか、何かしら説明があるんじゃないの?
じゃないと作りようがない

279 :デフォルトの名無しさん:2010/04/22(木) 02:50:56
>>275
プロトコルも何も単に行区切りのテキストストリームでいいんじゃない?
そうすればechoサーバー見たいにtelnetクライアントでも繋がる。


280 :デフォルトの名無しさん:2010/04/22(木) 06:23:41
>>278
ソースは渡されています
後IPアドレスとポート番号が決まっています

281 :デフォルトの名無しさん:2010/04/22(木) 07:03:46
すいません、274です。
280で書いたこと勘違いで、ソースは渡されてませんでした

282 :デフォルトの名無しさん:2010/04/22(木) 13:31:10
>>277
やっぱ本気で解くことを考えるならサイズ制限入れちゃだめですよね。
それでかつ速度は予測できないけど、最速を目指すべきですよね。

283 :デフォルトの名無しさん:2010/04/22(木) 13:48:03
>>279
telnet がプロトコルだということを知らない馬鹿か?
teletで繋がるのはサーバー側がtelnetプロトコルに準拠しているからに他ならん

284 :デフォルトの名無しさん:2010/04/22(木) 15:03:34
>>283
telnetクライアントで80、25、110あたりにつないだことのない人?

285 :デフォルトの名無しさん:2010/04/22(木) 15:59:25
>>283
TCPについて調べておいた方がいいよ

286 :デフォルトの名無しさん:2010/04/22(木) 17:55:04
>>283
telnet のオプション交渉はサーバー側から始まるからそれを開始しない
echo サーバーやsmtp, httpに繋げるとtelnetクライアントはhalf duplex、
local echoモードのtcpクライアントとして使える.

>>274
あ、宿題はクライアントかw サーバー側かと勘違いしてたw


287 :デフォルトの名無しさん:2010/04/22(木) 18:35:14
あ、俺クライアントとサーバを両方実装するもんだと思ってた
そりゃサーバの仕様教えてもらえないとどうにもならない

288 :デフォルトの名無しさん:2010/04/22(木) 19:42:52
>>284
えええ、まじで telnet がプロトコルだって知らないのか????
常識知らずにも程があるぞ、当然RFCでも定義されてるけどな。
ttp://tools.ietf.org/html/rfc854

で、http, smtp, pop3 に telenet で接続できるから何なの?
後発のプロトコルが telnet と互換性があるように設計されるのは普通のことだろ。

>>285
TCPってwwwほんと無知だな。
今はTCPに乗っかってるけど、昔は IP 上動いてたこととか知らないんだろうな。


あ、もしかして、君たちはPと言う文字が入ってるものだけがプロトコルだと思ってるのか。
きっとそうだろうな、あ〜恥ずかしい。

289 :デフォルトの名無しさん:2010/04/22(木) 19:59:14
>>273
おかげさまでどうにか間に合いそうです。
どうもありがとうございました。

290 :デフォルトの名無しさん:2010/04/22(木) 20:01:52
>>288
http smtp pop3がtelnetプロトコルと互換性があると書かれているように読めるんだけど、
もちろん俺がすごい読み間違いをしてるんだよな?
もうちょっとちゃんと伝えてくれ。

291 :デフォルトの名無しさん:2010/04/22(木) 20:55:44
telnet(ソフト)とtelnet(プロトコル)がごっちゃになってるな

292 :デフォルトの名無しさん:2010/04/22(木) 21:03:30
これはw

293 :279:2010/04/22(木) 21:47:18
>>283 
>>288
>後発のプロトコルが telnet と互換性があるように設計されるのは普通のことだろ。

互換ってcr/lfで分けた行がメッセージ単位って事? だから「行区切りのテキストストリーム」
と言ったのだが? 

それから後発のテキストベースのプロトコルで互換があるってそれだけ.
telnetのコマンドを送られても大抵のサーバーは混乱するぞ.
試しに^Cを押してInterrupt Processコマンドを送るとsmtpサーバーなんて
混乱してコマンド受け付けなくなるよ。

ちなみに自分はtelnetクライアント、サーバーの保守をしばらくしてたから
プロトコルは分かってるつもり。

294 :デフォルトの名無しさん:2010/04/22(木) 22:17:12
まあ>>274の宿題は解決しなかったわけだが

295 :デフォルトの名無しさん:2010/04/22(木) 22:18:07
[1] 授業単元: プログラミング
[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を用いる


296 :デフォルトの名無しさん:2010/04/22(木) 22:36:17
>>295
配列の大きさが足りないんじゃないかな

297 :デフォルトの名無しさん:2010/04/22(木) 23:13:05
あれ、ほんとだ。
no[5]にしたらちゃんと表示されました。ありがとうございました。
でもなんで足りなかったんでしょう?noは4ビットなのに。

298 :デフォルトの名無しさん:2010/04/22(木) 23:27:12
文字列で'\0'を勝手に入れるから。
あと、バイトじゃね?

299 :デフォルトの名無しさん:2010/04/22(木) 23:35:07
バイトでした。
文字列の終わりをあらわすんでしたっけ?\0
それだとsikaku[6]はなぜ足りてることになるんですか?

300 :デフォルトの名無しさん:2010/04/22(木) 23:39:49
足りてないですよ。
動いてるのはたまたま。
7にしましょう。

301 :デフォルトの名無しさん:2010/04/22(木) 23:42:33
リモートでホストを操作するために必要なtelnetプロトコルと
telnetクライアントを使ってtcp/ipでテキストストリームで通信するのは全く別の問題だろ?
シリアルポートや、tcp/ipオーバーで、ホストをリモート操作できるのは、
ホスト・クライアントが同じtelnetプロトコルで動いてるからだし、httpやpop3に接続できるのは、
telnetクライアントが、様々な環境に対応できるように最低限の
tcp/ipオーバーの機能を提供した結果が、テキストストリームで通信できるだけって話じゃないの?
何でリモート操作するためのtelnetプロトコルが、httpやpopと互換性があるって話になるの?
互換性があるのは、tcp/ipオーバーで通信をしているってことだけじゃないのか?

302 :デフォルトの名無しさん:2010/04/22(木) 23:55:38
>>300
ありがとうございました。
基本的なことでしたね。

303 :デフォルトの名無しさん:2010/04/23(金) 00:13:38
>>301
>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:


304 :デフォルトの名無しさん:2010/04/23(金) 01:36:51
>>303
俺もRFC初めて見たけど、意味分かって書いてないだろ?
>ラインバーファーされたhalf duplexモードにクライアントがなるので
一行単位の処理だろうが、全二重だろうが半二重だろうが、
他のプロトコルと通信できる理由になってない。
ポイントを整理すると下記のような理由で通信できる。

1. telnetでは、必ずNVT(ネットワーク仮想端末)を通して通信するように定義されている。
2. NVT間では、変換されないことが保証されている
3. NVTの入出力はUSASCIIにて行う
4. USASCIIを使用するプロトコルであれば問題は発生しない

telnet通信イメージ→ クライアント <変換> クライアントNVT <未変換(over tcp/ip)> ホストNVT <変換> ホスト
他の通信イメージ→ クライアント <変換> クライアントNVT <未変換(over tcp/ip)> httpなど

305 :303:2010/04/23(金) 02:31:12
>>304
そーいわれりゃそうだな。 すまん。

306 :デフォルトの名無しさん:2010/04/23(金) 03:33:35
main() 笑

307 :デフォルトの名無しさん:2010/04/23(金) 09:25:16
Telnetがプロトコルだというのは流石に常識だと思うぞ。

308 :デフォルトの名無しさん:2010/04/23(金) 10:20:10
telnetはどんな端末とでも通信できんだよ
従ってプロトコルとは無縁、プロコトルなんて必要ねえ
英文だからわかりにくいけどさ、
ガチで読めばRFCにもtelnetはプロトコルではないと書いてあるぞ

309 :えーご:2010/04/23(金) 11:02:23
プロトコル  【protocol】
http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html

310 :デフォルトの名無しさん:2010/04/23(金) 12:49:42
>>309
そうだよね
そこにもtelnetがプロトコルでないことがはっきり書いてある

311 :デフォルトの名無しさん:2010/04/23(金) 20:54:28
>308
RFC 854はtelnet protocolの仕様だから、過去の経緯は兎も角として
とりあえずtelnetプロトコルというものは存在すると思われる。
http://tools.ietf.org/html/rfc854


312 :デフォルトの名無しさん:2010/04/24(土) 11:47:44
[1] 授業単元: Introduction to C++
[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] その他の制限: なし


313 :デフォルトの名無しさん:2010/04/24(土) 12:01:13
#include <stdio.h>
#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;
}

314 :デフォルトの名無しさん:2010/04/24(土) 12:32:16
>>312
If the random number function does it job perfectly, the distribution to
each number should be equal. But they might be slightly off.
全然関係ないが、数学的に言えば、ランダム関数が完全な仕事をすれば、
全ての数が一致する可能性はNが大きくなるにしたがって低くなる
(数を一致させるためには、数が偏らないように、ランダムを偏らせる必要がある)

315 : ◆/91kCCQXBo :2010/04/24(土) 12:40:14
const int randmax = (RAND_MAX / 100) * 100;
int rand100(){
  int r = rand();
  while(true){
    if(r >= randmax) continue;
    return r/(RAND_MAX/100)+1;
  }
}

316 :デフォルトの名無しさん:2010/04/24(土) 13:43:04
>>315
>int r = rand();
その位置はネタだよな?

317 : ◆/91kCCQXBo :2010/04/24(土) 13:57:05
オーケーオーケー
const int randmax = (RAND_MAX / 100) * 100;
int rand100(){
  while(true){
    int r = rand();
    if(r >= randmax) continue;
    return r/(RAND_MAX/100)+1;
  }
}

318 :デフォルトの名無しさん:2010/04/24(土) 15:02:19
http://www2.ezbbs.net/24/techside/img/1266584278_1.jpg

このパズルを解くプログラム


319 :デフォルトの名無しさん:2010/04/24(土) 15:48:20
いい気分

320 :デフォルトの名無しさん:2010/04/24(土) 16:00:43
答えは1種類だけど、並べ方は2通りあるんだな

321 :デフォルトの名無しさん:2010/04/24(土) 17:00:15
>>318
総当りの頭の悪い方法
#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;
}

322 :デフォルトの名無しさん:2010/04/24(土) 18:01:58
>>318
工夫ナシw 総当り。9!頑張る。
ttp://codepad.org/L9Wwyg8b

323 :322:2010/04/24(土) 18:06:22
失礼、>>322は思いっきり完全にバグってました。

324 :デフォルトの名無しさん:2010/04/24(土) 22:24:34
>>317
配列に埋めるところまでが関数の仕様だと思うよ

325 :デフォルトの名無しさん:2010/04/25(日) 02:28:39
英語苦手なんだねw

326 :デフォルトの名無しさん:2010/04/25(日) 02:32:58
[1] 授業単元:プログラミング(画像処理)
[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だと思います。
ご助力お願いします。

327 :デフォルトの名無しさん:2010/04/25(日) 03:22:56
>>325
Write a function that generates random numbers in range of 1 ~ 100 and fill an array of size N.
functionは乱数生成にしかかかってないってこと?

328 :デフォルトの名無しさん:2010/04/25(日) 03:32:24
それ中学生レベルじゃね?

329 :デフォルトの名無しさん:2010/04/25(日) 03:55:19
だよなぁ

330 :デフォルトの名無しさん:2010/04/25(日) 04:32:49
generatesはfunctionにかかるが、fillはWriteと同じく命令

331 :/joyful/img/10576.cpp:2010/04/25(日) 08:50:17
>>330
Write 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.

332 :デフォルトの名無しさん:2010/04/25(日) 09:14:03
Google翻訳w
generetesはsがついて三単現だが、
fillにはついてないからfunctionにはかからねーんだよ、アホがw

おまけ
Yahoo翻訳
乱数を生み出す機能を記述して、配列を満たしてください。
エキサイト翻訳
乱数を生成する機能を書いてください、そして、配列をいっぱいにしてください。

333 :デフォルトの名無しさん:2010/04/25(日) 09:25:16
Google翻訳使ったことなかったからちょっとネット見てみたら、
使えないとか変な翻訳で有名じゃねーかよ

なんでよりにもよってGoogle翻訳をもとにしちゃったんだw

334 :デフォルトの名無しさん:2010/04/25(日) 09:50:57
>>312を俺的に翻訳してみた
ユーザにサイズN(最大100000)を入力させるプログラムを作れ
1〜100までの範囲でランダム数を生成する関数を作れ。そしてサイズNの配列に埋めろ。
さらにお前は1の数、2の数、3の数、4の数、5の数、…、100の数が、幾つあるのが数える必要がある。
もしランダム数関数が完璧に仕事をこなせば、配分された全ての数は等しくなるはずだ。
まぁ、すこし位の誤差はあるかもしれんがなw

つーわけで、作るべきプログラムは、入力させるプログラムと
ランダム数を生成して配列に一杯にする関数だけで、
配列に埋めるのと、それぞの数が、いくつあるのか数えるのは>>312の仕事じゃないか?


335 :デフォルトの名無しさん:2010/04/25(日) 09:55:32
プログラム内でやらせないでどうすんだよw

336 :デフォルトの名無しさん:2010/04/25(日) 09:55:36
一様分布の乱数生成の手法を考えさせる問題なのか
randの使い方を覚えさせる問題なのかで書くべき回答が違うなぁ

337 :334:2010/04/25(日) 09:59:14
修正しながら変なまま送ってしまった…orz

ユーザにサイズN(最大100000)を入力させるプログラムを作れ
1〜100までの範囲でランダム数を生成する関数を作れ。そしてサイズNの配列に埋めろ。
さらにお前は1の数、2の数、3の数、4の数、5の数、…、100の数が、幾つあるのが数える必要がある。
もしランダム数関数が完璧に仕事をこなせば、配分された全ての数は等しくなるはずだ。
まぁ、すこし位の誤差はあるかもしれんがなw

つーわけで、作るべきプログラムは、入力させるプログラムと
ランダム数を生成する関数と配列に埋までで
それぞの数が、いくつあるのか数えるのは>>312の仕事じゃないか?

338 :デフォルトの名無しさん:2010/04/25(日) 10:01:15
>>335
でも、素直に読むと、お前が数えろって書いてない?
まぁ、数える手段を書いてないので、それをプログラムでやっても
問題はないと言うか、そういう主旨だとは思うが…

339 :デフォルトの名無しさん:2010/04/25(日) 10:04:01
313でいいだろ。
乱数の偏りが気になるんなら関数を317のにして。

ってか、あんな中学レベルの英語に機械翻訳持ち出す奴がいるのが驚きだ。

340 :デフォルトの名無しさん:2010/04/25(日) 10:22:37
>>339
If the random number function does it job perfectly, the distribution to
each number should be equal. But they might be slightly off.
この部分をどう読む?
ここで求められている乱数発生関数が通常の乱数ではなく、
出来るだけ均等になるように(偏りを加えた)乱数発生関数の可能性もあるわけで…

341 :デフォルトの名無しさん:2010/04/25(日) 10:25:17
>>324=>>327=>>331がスレを流したくて必死なようにしか見えないw

342 :デフォルトの名無しさん:2010/04/25(日) 10:29:16
>>340
偏りを加えたら一様分布じゃなくなるんじゃねーの
線形合同法の偏りを打ち消す偏りって意味か?

343 :デフォルトの名無しさん:2010/04/25(日) 10:31:17
>>340
どう読んだから知らんが、それをもとにコード書けよw

344 :デフォルトの名無しさん:2010/04/25(日) 10:40:36
>>342-343
原文を読むと、配分された数が一致されることか前提にあって、
少し位の誤差はあるかも知れないって書かれている。
しかし、実際は、誤差があるのが大前提で、大体の範囲でおさまるのが正しい。
それとも、俺の翻訳がおかしい?

345 :デフォルトの名無しさん:2010/04/25(日) 10:44:26
そもそも乱数が完璧でも結果は等しくなる確率の方が低いんだから、
そんな文に一々とらわれる必要はない。

346 :デフォルトの名無しさん:2010/04/25(日) 10:49:36
>>345
>そんな文に一々とらわれる必要はない。
おいコラw
んなことを言ったら、何を持って問題文に回答するんだw

347 :デフォルトの名無しさん:2010/04/25(日) 10:55:16
そこは問題部分じゃなくて単なる補足説明みたいなもんだし。

348 :デフォルトの名無しさん:2010/04/25(日) 11:07:02
Google翻訳wは使うなよってことで、いい勉強になったろ?

できれば中学生の英語からやり直して欲しいところだが、
いまさら手遅れなんだろうな。

349 :331:2010/04/25(日) 11:18:27
OCN翻訳 もそれと同じだな。1対Nでなくなったぞ。
http://www.ocn.ne.jp/translation/
配列を、乱数と満たしを生成する機能に書いてください。
Write the function into which a random number is formed and bury arrangement.

350 :デフォルトの名無しさん:2010/04/25(日) 11:30:07
@nifty翻訳
乱数を生成する機能を書いてください、そして、配列をいっぱいにしてください。

Infoseek マルチ翻訳
乱数を生み出す機能を記述して、配列を満たしてください。

FreeTranslation.com
乱数を産む機能を書いて、配列をいっぱいにしてください。

機械翻訳をもとに英語を語るなよ、頼むから

351 :デフォルトの名無しさん:2010/04/25(日) 11:34:55
>>349
翻訳は意味が分からない単語や使い回しの参考にする程度で
あんまり信じないほうが良いよ

352 :デフォルトの名無しさん:2010/04/25(日) 11:41:09
配列を埋めるのも関数内でやるなら、fillじゃなくてfillsになってなければならない。
前でも言われてるように、こんなのは中学英語の範疇。

353 :デフォルトの名無しさん:2010/04/25(日) 11:46:49
なんか変な流れになってるが
>>334 >>337 >>340 >>344>>331 じゃないよ

354 :デフォルトの名無しさん:2010/04/25(日) 11:49:12
別人だとしても、最大100000個を人間に数えさせるとか、似たようなバカっぷりだなw


355 :353:2010/04/25(日) 11:49:57
まぁ、おれも最初fillがどこにかかってるのか勘違いしたり、
その後、fillはプログラムの範囲なのか次の「You also …」と同じで
>>312がやるべき範疇なのか迷ったりしたけどね

356 :デフォルトの名無しさん:2010/04/25(日) 11:54:14
>>354
「You also …」以降は「Write a program」に掛かってねーよ
この場合、数える手段は自由であって、プログラムの出題の範囲じゃない
※これ以前に出力結果を数えるプログラムとか作ってるかも知れんだろ?

357 :デフォルトの名無しさん:2010/04/25(日) 11:55:58
不毛な議論はもういいよ

358 :デフォルトの名無しさん:2010/04/25(日) 12:05:47
>>356
いいからお前は10万個数えてろ、な?

359 :デフォルトの名無しさん:2010/04/25(日) 12:27:30
>>358
>>312を読んでるか?
>(元の文が英文なのですが、約した際に何かしら抜け落ちている点が在るかもしれないので一応原文も記載しておきます)
だから、間違えてる可能性を示唆してるだけなんだが?

360 :デフォルトの名無しさん:2010/04/25(日) 12:35:46
さすがに中学英語もわからないバカは考えることが違うな。

361 :デフォルトの名無しさん:2010/04/25(日) 12:50:42
>>360
まぁ、お前とは話が合わんことだけは分かった。

362 :デフォルトの名無しさん:2010/04/25(日) 12:55:48
>>312です
ここまでの流れを読んだ上で出題者の方に確認してみた所、カウントするのもプログラム上でやれとの事でした
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.


363 :デフォルトの名無しさん:2010/04/25(日) 12:56:40
マジレスするとalsoはプログラム内でなすべきことについての追記だから、
数えるのも当然プログラム内でやる。

364 :デフォルトの名無しさん:2010/04/25(日) 12:59:44
おっと、書いてる間に新情報が。

365 :デフォルトの名無しさん:2010/04/25(日) 13:05:28
ソートするよりカウント用の配列使うほうがいいんだがなあ。
カウント用の配列禁止ならソートして数えるしかないが。

366 :デフォルトの名無しさん:2010/04/25(日) 13:06:03
>>363
違くね?
その直後にIfなんたらかんたらで、補足っぽいもの直接続いてなければ、
それであってると思うが、全体の文章の流れを考えると、ここだけでは、どうとでも取れる。
って言うか、>>312が適当に切っただけのような気もするが…

367 :デフォルトの名無しさん:2010/04/25(日) 13:07:35
>>366
読解力のないバカは>>362を100000回読んでから出直してこい。

368 :デフォルトの名無しさん:2010/04/25(日) 13:09:35
>>362
Nが50であれば、50個の配列を用意して、ソートしてから数を数えろと…?
何か、他に情報を小出しにしてないか?

369 :デフォルトの名無しさん:2010/04/25(日) 13:17:36
>>368
>>312は問題文全文のコピペで、それ以外では>>362での記述が問題に関する情報が全てです
ソートに関しては、バブルソートとインサーションソートについてしかまだ教科書の方で習ってないので、恐らくはそれを使えという事なのかと
ですので、言語がC++で、Visual C++ 2008で動作する物であるという事以外の制限に関しては何も無いと思います

370 :デフォルトの名無しさん:2010/04/25(日) 13:20:29
sort(array, N);

for(i=1, j=0; i<=100; i++) {
for(k=j; array[k]==i; k++);
printf("%d's %d\n", i, k - j);
j = k;
}}

371 :デフォルトの名無しさん:2010/04/25(日) 13:42:41
>>362
100000個ソートすっと重いなあ
#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;}

372 :デフォルトの名無しさん:2010/04/25(日) 13:56:14
>>371と言うか>>370
k<Nで止めないと駄目

373 :デフォルトの名無しさん:2010/04/25(日) 14:00:30
calloc(N+1, sizeof(int))にでもしとくか

374 :デフォルトの名無しさん:2010/04/25(日) 14:09:32
>>373
>array of size N.
って、しばりがありまっせ。

375 :327:2010/04/25(日) 14:12:25
andで切れることを理解しました。
逆に、乱数を発生し、かつ配列を埋める関数を作れ、というのはどう書くの?
fillをfillsにするだけ?なの?ごめん頭悪くてorz

376 :デフォルトの名無しさん:2010/04/25(日) 14:14:06
ターミネーターは別枠扱いなんだよ!
配列として利用してるサイズはNなんだよ!

まあ、すっかり忘れてたことをなんとか誤魔化そうとしてるだけなんだけどね。

377 :デフォルトの名無しさん:2010/04/25(日) 14:16:19
>>375
fillsにすれば、乱数を生成して配列を埋める関数って意味になる。
ちゃんと訳せてる翻訳サイトにfillsにした英文を入れても確認できる。

378 :327:2010/04/25(日) 14:21:33
>>377
ありがとう。次から気をつけます。

379 :デフォルトの名無しさん:2010/04/25(日) 21:13:43
[1] 授業単元: プログラム演習
[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] その他の制限:
ポインタなどは習っていません。よろしくお願いいたします。



380 :デフォルトの名無しさん:2010/04/25(日) 21:23:56
2個しかみつからん

381 :デフォルトの名無しさん:2010/04/25(日) 21:34:15
#include <stdio.h>

int 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;
}

382 :デフォルトの名無しさん:2010/04/25(日) 21:34:53
>>380
1*9 と 4*4 かな?

383 :デフォルトの名無しさん:2010/04/25(日) 21:35:50
if(temp2 >= 10000) → if(temp2 > temp1)

384 :デフォルトの名無しさん:2010/04/25(日) 22:20:57
1729(ラマヌジャン数)と 4104 ですねえ。
http://ideone.com/xD5cv

385 :デフォルトの名無しさん:2010/04/25(日) 22:22:14
簡単な問題はすぐレスがつきますねw

386 :デフォルトの名無しさん:2010/04/25(日) 22:29:46
>>381今回はそれで問題ないけど、範囲が100000000未満になったときに
(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;
}

387 :デフォルトの名無しさん:2010/04/25(日) 22:32:32
379です。もうひとつお願いいたします。

[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;
}



388 :デフォルトの名無しさん:2010/04/25(日) 22:47:20
>>387

#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;
}


389 :デフォルトの名無しさん:2010/04/26(月) 13:17:37
>>371
int 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;
}

390 :デフォルトの名無しさん:2010/04/26(月) 13:20:50
>>371
ソートしない方がいいと思う。
つか、>>312には一言もソートしろって書いてないわけだし。
先生(?)が後で言ってるのはあくまでも例えなわけで、
答えを直接教えるわけにもいかんから、適当に言ってるだけだろう。

仮に、数え上げるプログラムが課題だったとしても、
ソートよりは普通に数えた方がいい。

391 :デフォルトの名無しさん:2010/04/26(月) 14:16:40
>>362にsortって書いてあるからそうしただけ。
しなくていいなら>>313程度でいいし。

配列サイズを1個節約するためだけに、無意味な加算減算を繰り返すのは効率いいとは思えない。

392 :デフォルトの名無しさん:2010/04/26(月) 15:14:26
>>389
>delete array;

393 :デフォルトの名無しさん:2010/04/26(月) 20:20:01
[2] 実行して表示
[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が出てしまいます。

394 :デフォルトの名無しさん:2010/04/26(月) 20:21:48
>>393
retun

395 :デフォルトの名無しさん:2010/04/26(月) 20:22:20
>>393
/MyC.c */

/*MyC.c */
にする。

396 :デフォルトの名無しさん:2010/04/26(月) 21:35:06
>>326
http://www1.axfc.net/uploader/He/so/275025
pass:1

397 :393:2010/04/27(火) 10:46:37
.plgファイルが作られコマンドラインには何も表示されません。

結果
テスト2.exe - エラー 0、警告 0

これでできたことになるんでしょうか?

398 :デフォルトの名無しさん:2010/04/27(火) 13:32:10
>>397
コマンドラインに表示されてるはず

早すぎて見えないだけ

399 :デフォルトの名無しさん:2010/04/27(火) 21:54:43
引数1に10進の1/10の位までの値(例えば45なら4.5という意味です)、
引数2に目量数があったとして
目量の数に四捨五入するプログラムを作る。
例えば45,2なら結果は4、123,5なら10で125,5なら15という風にな
る-45,3なら-6、-44,3なら-3・・・
よろしくお願いします。

400 :デフォルトの名無しさん:2010/04/27(火) 22:05:46
>>399
#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;
}

401 :ノラ:2010/04/28(水) 23:58:29
いま学校の課題で
do-while文を使って
1+2+3・・・というように数値を加算して表示し、
加算結果が300を超えたら表示して
処理を終了するというプログラムを組みたいのですが、
普段から授業ついていけなくて、よくわかりません
どなたか教えてください。お願いします


402 :デフォルトの名無しさん:2010/04/29(木) 01:04:42
>>401
#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;
}

403 :デフォルトの名無しさん:2010/04/29(木) 01:20:21
簡単な問題だと、すぐにレスが付くんですねw

404 :デフォルトの名無しさん:2010/04/29(木) 01:28:16
[1] 授業単元:画像処理
[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ではこのソースファイルで実行できるんですが、自宅だとどうしてもできません。

405 :デフォルトの名無しさん:2010/04/29(木) 01:31:03
>>404
1. C++ としてコンパイルする
2. 変数の宣言場所を変える

406 :デフォルトの名無しさん:2010/04/29(木) 01:37:36
>>405
変数の宣言場所を変えるとはどういうことですか?

407 :406:2010/04/29(木) 02:31:59
ごめんなさい解決しました。 pow関数のところでひっかかってたみたいですお騒がせしました。

408 :デフォルトの名無しさん:2010/04/29(木) 22:03:59
>>403

>>243とか何事もなかったかのように華麗にスルーされてるよなw

409 :デフォルトの名無しさん:2010/04/30(金) 00:12:39
>>408
この手の問題はいやというほどやったからなあ。

410 :デフォルトの名無しさん:2010/04/30(金) 00:21:52
ちょっと難しくなると、”片付けます”なんて銘打ってるスレなのに
「自分で考えないと、力付かない」なんて屁理屈こねだすのにねhw

411 :C言語苦手: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日の正午まで

お願いします。

412 :デフォルトの名無しさん:2010/04/30(金) 00:27:45
>>410
やりたければどうぞ

413 :458:2010/04/30(金) 01:31:56
>>411
#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));
}

414 :デフォルトの名無しさん:2010/04/30(金) 01:38:49
>>413
Kakezan(2147483647,2147483647,2147483647);

が計算できません

回答するなら、いいかげんな回答はやめてください。

415 :デフォルトの名無しさん:2010/04/30(金) 02:23:20
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):プログラム開始前に%だけの行が1つも無いときには,そのような行を追加し,2つ以上あるときには1つだけにするようなプログラムをC言語により作成する.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C
[4] 期限: 4月30日朝
[5] その他の制限: なし

お願いします

416 :デフォルトの名無しさん:2010/04/30(金) 03:56:25
すいません、以前宿題を片付けてもらった>>148なのですが、プログラムが的確すぎるというか何というか、途中の結果が出てないのでわかりにくいと言われ改善してこいと言われました・・・
指摘されたのはヒストグラムと素数のプログラムなのですが
ヒストグラムの問題はただ数字を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
という感じにしてみたのですが回数制限を付けるにはどうすればよいでしょうか

どちらも提出期限は今日の昼までです、押しつけがましい要望までしてしまい申しわけないのですがよろしくお願いします

417 :デフォルトの名無しさん:2010/04/30(金) 03:56:47
>>415
言うのが遅くないかい?
この時間は無理だろ。

418 :デフォルトの名無しさん:2010/04/30(金) 04:28:57
プログラムを開始する事なく
どこの行を指しているかも分からない"%"を判別しなければならないんだぞ

この時間じゃなくても無理

419 :デフォルトの名無しさん:2010/04/30(金) 08:58:50
こういう状況で張り切って答える馬鹿がいるんだよな。

そういう奴に限って実社会では役に立たないクズで、
しかも空気読めなくて周りから嫌われるタイプ。

420 :デフォルトの名無しさん:2010/04/30(金) 09:57:35
>>416
数あて

#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;
}
}
}

421 :デフォルトの名無しさん:2010/04/30(金) 10:03:43
>>416
ヒストグラム
#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;
}


422 :420: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;
}
}
}

423 :デフォルトの名無しさん:2010/04/30(金) 11:05:19
>>416
素数
#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;
}


424 :デフォルトの名無しさん:2010/04/30(金) 12:28:08
>>420-423
数当てはカウントさせて10に達するようにすればよかったんですね
素数とヒストグラムもわかりやすいものにしてもらい助かりました、本当にありがとうございます

425 :デフォルトの名無しさん:2010/04/30(金) 14:42:19
>>408
それむずかしいんじゃない、めんどくさいんや

426 :デフォルトの名無しさん:2010/04/30(金) 23:20:04
[1] 授業単元:プログラム
[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
左から番号、名前、体重、身長です

427 :デフォルトの名無しさん:2010/04/30(金) 23:33:23
いまどきそんなプログラム書いて何になるの?

428 :デフォルトの名無しさん:2010/04/30(金) 23:42:15
単位になるんだよ
大学行ったことないとわからないかもしれないけど

429 :デフォルトの名無しさん:2010/04/30(金) 23:53:31
大学でのその程度のプログラムかけないだw

430 :デフォルトの名無しさん:2010/04/30(金) 23:56:07
日本語で頼む

431 :デフォルトの名無しさん:2010/04/30(金) 23:57:49
大学にもよるんじゃないの?
まぁ、3流以下だろうけどなhw

432 :デフォルトの名無しさん:2010/04/30(金) 23:59:45
文系の教養科目としてプログラムがある大学もあるし、
4月から週一こま程度ならその程度でもおかしくはないだろ。
大学行ったことないとわからないかもしれないけど

433 :デフォルトの名無しさん:2010/05/01(土) 00:00:29
>>426 #include<stdio.h>
#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;
}

434 :デフォルトの名無しさん:2010/05/01(土) 00:06:18
>>433
この程度も大学レベルですか?w

435 :デフォルトの名無しさん:2010/05/01(土) 00:08:56
>>434
コンプレックス強い奴だな
大学に行きたきゃ夜間でもなんでも方法あるだろ

436 :デフォルトの名無しさん:2010/05/01(土) 00:14:59
そんなことより誰か>>429を解読してくれよ

437 :デフォルトの名無しさん:2010/05/01(土) 00:18:45
まぁ、小学生でもかけるようなものを質問して、
大学生ですってのもはげしくかっこ悪いのは事実

438 :デフォルトの名無しさん:2010/05/01(土) 00:21:03
お前いつも口だけで、コード何も書いてないじゃんw

439 :デフォルトの名無しさん:2010/05/01(土) 00:22:54
そんなに大学が妬ましいのかw

440 :デフォルトの名無しさん:2010/05/01(土) 00:26:14
3流大は妬ましくはないですよ

441 :デフォルトの名無しさん:2010/05/01(土) 00:36:56
>>434
十分大学レベルだよ

最近は高校でもプログラムやるのかな。それなら大学ではTMPとかやってもよさそうだけど。

442 :デフォルトの名無しさん:2010/05/01(土) 00:40:38
最近いる文句つけてるだけのヤツはコード読めないし書けもしないただの煽りだろ。

443 :デフォルトの名無しさん:2010/05/01(土) 00:42:15
例によって授業についていけず、ここでも救われなかった自業自得な生徒が喚いているのでは

444 :デフォルトの名無しさん:2010/05/01(土) 00:43:08
>>434
この程度で大学レベルならあまりのレベルの低さに笑っちまうよな

ところでお前はどんな美しいコードが書けるんだ?

445 :デフォルトの名無しさん:2010/05/01(土) 00:47:35
>>433は嫌がらせコードだろw

446 :デフォルトの名無しさん:2010/05/01(土) 00:49:22
>>444
((void (*)())(0))();

447 :デフォルトの名無しさん:2010/05/01(土) 02:10:46
ダメダメ全然イケてないよ

448 :デフォルトの名無しさん:2010/05/01(土) 02:24:55
>>446
読めません、どういう意味ですか?


449 :デフォルトの名無しさん:2010/05/01(土) 02:29:50
>>448
メモリアドレス0を、引数を持たず値を返さない関数として呼び出す


つもりなんだろうけど、本当にメモリアドレス0になるかどうかは環境依存

450 :デフォルトの名無しさん:2010/05/01(土) 05:59:23
>>426の問題と全然関係ないじゃん

451 :393:2010/05/01(土) 11:13:44
>>398
遅レス申し訳ないんですが、
どうすれば表示されたものを
目で確認できるんでしょうか?

452 :デフォルトの名無しさん:2010/05/01(土) 12:04:09
コマンドプロンプトから実行

453 :デフォルトの名無しさん:2010/05/01(土) 12:15:32
MyC.EXEを、コマンドプロンプトから実行しましょう。
か、または
Ctrl+F5

454 :デフォルトの名無しさん:2010/05/01(土) 14:02:21
>>445
たしかに肝心のソートを qsort() にしているのは、出題者(学校の先生)からみると、手抜きにみえる、というか、そこを
がしがし書いてほしいというか。

455 :393:2010/05/02(日) 11:55:06
>>453
.exeファイルが生成されません。代わりに.plgファイルができます。
ビルドするかどうかの問いに「はい」答えると
「プログラムを実行できません」と
表示されてしまいます。
コンパイルしようとすると「コンパイルツールがない為できない」
と出てしまいます。

456 :デフォルトの名無しさん:2010/05/02(日) 12:36:43
とりあえず、その テスト2.plg の表示画面を此処にコピペして見て。

457 :デフォルトの名無しさん:2010/05/02(日) 13:23:17
[2] 問題文(含コード&リンク):
・ユークリッドの互除法の拡張アルゴリズム
入力 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



よろしくお願いします。

458 :デフォルトの名無しさん:2010/05/02(日) 13:27:25
s,tの条件が足りない

459 :デフォルトの名無しさん:2010/05/02(日) 13:38:04
>>458
すいません。
s,tは整数で、一意でない場合も、一組求めればいいです。

460 :393:2010/05/02(日) 13:38:35
>>456
ビルドのログ

--------------------構成: テスト2 - Win32 Debug--------------------

コマンド ライン



結果
テスト2.exe - エラー 0、警告 0

以上ですけど何か分かりますか?

461 :デフォルトの名無しさん:2010/05/02(日) 13:48:40
>>458
条件は揃いましたよ
できますか?w

462 :デフォルトの名無しさん:2010/05/02(日) 13:51:20
できたよ

463 :デフォルトの名無しさん:2010/05/02(日) 14:37:05
>>457
#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;
}


464 :デフォルトの名無しさん:2010/05/02(日) 14:41:11
int func()じゃなくてvoid func()だな

465 :デフォルトの名無しさん:2010/05/02(日) 14:58:01
>>460 こんなのが正常。
.plgの他に.dspファイルとDebugフォルダーは出来てる?
--------------------構成: テスト2 - Win32 Debug--------------------
コマンド ライン
 一時ファイル
 [〜]
 一時ファイル
 [〜]

アウトプット ウィンドウ
 コンパイル中...
 MyC.c
 リンク中...

結果
 テスト2.exe - エラー 0、警告 0

466 :デフォルトの名無しさん:2010/05/02(日) 15:47:17
>>457
関数一つにしてみた
#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;
}

467 :デフォルトの名無しさん:2010/05/02(日) 16:07:12
よく考えたら一つにしたらn==1のときはいらねーな

468 :デフォルトの名無しさん: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;
}

469 :デフォルトの名無しさん:2010/05/02(日) 20:00:40
[1]C言語課題
[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]よろしくお願いします

470 :デフォルトの名無しさん:2010/05/02(日) 20:06:36
>>469
同名の標準関数があるのにリンクできるのかな?

471 :デフォルトの名無しさん:2010/05/02(日) 23:27:18
>>469
Cは引数の型が違っても同名の関数は作れないのであります
C++なら出来るであります

472 :デフォルトの名無しさん:2010/05/03(月) 02:22:05
>>457
#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言語腐ってやがる

473 :393:2010/05/03(月) 06:53:56
>>465
レスありがとうございます。
そのように表示されたことはありません。
.dspとDebugフォルダともできてます。
何がいけないんでしょうか?

474 :デフォルトの名無しさん:2010/05/03(月) 11:47:46
VC++6.0でうまくビルドできない時は
http://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


475 :>>456 >>465:2010/05/03(月) 12:15:55
分かったかも。礼は要らない。
プロジェクト メニュー⇒プロジェクトへ追加⇒ファイル⇒プロジェクトにファイルを追加

476 :デフォルトの名無しさん:2010/05/03(月) 21:43:58
「負の値が入力されるまで繰り返す」ってどういう条件にすれば良いですか?
while(n<0)でscanf文を囲みましたができません。

477 :デフォルトの名無しさん:2010/05/03(月) 21:45:09
while(1) {
scanf(

478 :デフォルトの名無しさん:2010/05/03(月) 21:45:56
手が滑った
while(1) {
scanf("%d", &n);
if(n < 0) break;
....
}

479 :デフォルトの名無しさん:2010/05/03(月) 22:04:13
>>478
本当助かりました。ありがとうございました。

480 :デフォルトの名無しさん:2010/05/03(月) 22:05:58
関数初心者です。以下の問題お願いします。

・2つの整数型の引数を持ち、そのうち小さい方を返す関数のプロトタイプ宣言と関数定義を書け.

481 :デフォルトの名無しさん:2010/05/03(月) 22:07:17
scanfなんて20年ぶり位に見た
今でも、使ってるのかしらん?

482 :デフォルトの名無しさん:2010/05/03(月) 22:11:55
>>480
まず、君の年齢を教えてくれ。

10歳以下なら教えてあげる

483 :デフォルトの名無しさん:2010/05/03(月) 22:31:14
>>480
int f(int,int);
int f(int a, int b) { reutnr a > b ? b : a; }


484 :デフォルトの名無しさん:2010/05/03(月) 22:46:10

なに言語ですか?

485 :デフォルトの名無しさん:2010/05/03(月) 22:51:25
reutnrってw

486 :デフォルトの名無しさん:2010/05/03(月) 23:15:25
>>484
スレタイを声に出して100回呼んでこい

487 :デフォルトの名無しさん:2010/05/03(月) 23:22:05
>>484はreutnrに突っ込んでるんだろw

488 :457:2010/05/04(火) 01:04:29
>>467 >>472
ありがとうございました。


489 :デフォルトの名無しさん:2010/05/05(水) 01:02:44
ポインタについて、*tに文字列を関数内で入れたいのですが、
下記のようにすると、ビルドは成功するのですが
実行時に"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';
}



490 :デフォルトの名無しさん:2010/05/05(水) 01:25:32
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';
}

491 :デフォルトの名無しさん:2010/05/05(水) 01:26:51
C++ではこの *&t という書き方に慣れましょう。
読み方は 't is refference of pointer to char' となります
これはCでは使えません

492 :デフォルトの名無しさん:2010/05/05(水) 01:49:13
#include <iostream>
using 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';
}

493 :デフォルトの名無しさん:2010/05/05(水) 01:54:28
>>491
コンパイル通って実行できました。
ありがとうございました。


494 :デフォルトの名無しさん:2010/05/05(水) 02:06:44
>>492
ありがとうございます。

495 :デフォルトの名無しさん:2010/05/05(水) 03:52:54
newしたらちゃんとdelete[]してあげて下さい><

496 :デフォルトの名無しさん:2010/05/05(水) 08:17:22
配列 new なんかしないで std::vector 使ってください。

497 :デフォルトの名無しさん:2010/05/05(水) 09:38:45
>>495
それ言うとまた「例外安全にしろ」とか言う馬鹿が出て来て困るんだよ(´・ω・`)
宿題にそこまで必要ないだろと言いたい

498 :デフォルトの名無しさん:2010/05/05(水) 09:46:00
宿題だからとかいうわけのわからない理由で例外安全にしないでいい場合の線引きを
考えるぐらいなら、可能な場合は全部例外安全にしといたほうがいい。

499 :デフォルトの名無しさん:2010/05/05(水) 09:46:18
勝手にガイドラインを作ってみた

・宿題の場合は特に題意に指定がない時は例外安全を考慮しない
・newしたものは必ずdelete、malloc()したものはfree()する

500 :デフォルトの名無しさん:2010/05/05(水) 09:47:41
>>498
お前さあ、boost::shared_ptrを使ったとして、教官に「これは何かね?」と
聞かれて答えられる奴ばかりだと思うか?宿題丸投げしてくるような奴ら
ばっかりだぞ

そこら辺の事情も考えてやれよ

501 :デフォルトの名無しさん:2010/05/05(水) 09:50:48
>>500
どうして宿題丸投げしてくるようなやつらの事情を優先して考えてやる必要があるの?

502 :デフォルトの名無しさん:2010/05/05(水) 09:52:31
>>499 何がしたいのかわからんガイドラインだな。

503 :デフォルトの名無しさん:2010/05/05(水) 09:53:02
>>501
わかったわかった自由にやってくれ
>>502
俺が楽をしたいから

504 :デフォルトの名無しさん:2010/05/05(水) 09:53:38
>>503 楽をしたいんなら new/delete の対応なんかも無いほうがいいんじゃないの?

505 :デフォルトの名無しさん:2010/05/05(水) 10:04:09
だな
まあ>>499は無かった事に

506 :デフォルトの名無しさん:2010/05/05(水) 12:28:57
教育現場では malloc() したものを free() しない、new したものを delete しないのは減点対象かと。

507 :デフォルトの名無しさん:2010/05/05(水) 12:41:13
>>492の何が悪いか分からん
char[100]を1回newしてるのをdelete[]しないのは「リーク」じゃないから
実害ゼロだし
この程度のコードで例外安全とか正気かおまえら

508 :デフォルトの名無しさん:2010/05/05(水) 12:50:06
>>507
実際にリークにならないからと考えて delete [] しなかったのか、単に忘れたのか、
それが読み手にはわからない。

そんな突っ込みどころを残して人目に晒すからこんなことになる。

509 :デフォルトの名無しさん:2010/05/05(水) 12:53:05
>>507
リークにならないのはコードを「見れば」分かるだろ
>>492が「忘れた」かどうかなんて、何の意味がある?

tが不要のなるのはreturnでmain()からexitする直前で、
そこでdelete[]したところで
どうせexitすればCランタイムかOS自身が回収するんだから
無意味もいいとこじゃねえか


510 :デフォルトの名無しさん:2010/05/05(水) 12:56:24
new して delete を忘れるようなゴミプログラマは一人でも減って欲しいと思うだろjk

511 :デフォルトの名無しさん:2010/05/05(水) 12:58:11
うむ。delete しないなら、いっそのこと static にしてくれた方が気持ちいい

512 :デフォルトの名無しさん:2010/05/05(水) 13:07:57
>>510
無意味だから最後にfree()しないコードなんてlibcの層には普通にあるんだが
そんなことも知らんのか?

っていうか、宿題丸投げスレに来るような奴がプログラマになったとして
まともなプログラマになるわけないだろw

513 :492:2010/05/05(水) 13:14:17
delete忘れてました。申し訳ありません。

>>495 承知しました
>>496 メモリ開放忘れるリスクがなさそうでよさげですね。承知しました。
>>497-499 try〜catchでしょうか
try {
  char *t = new char[100];
  test(t);
  cout << t << endl;
  return EXIT_SUCCESS;
} catch(Exception e

514 :デフォルトの名無しさん:2010/05/05(水) 13:20:18
>>512
おまえわざとやってるだろ。プログラム終了前の free() とか、何年前のフレームネタだよ。

515 :492:2010/05/05(水) 13:22:15
※途中で書いて島田orz

delete忘れてました。申し訳ありません。

>>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

ヽ(`Д´)ノウワァァン!!

516 :デフォルトの名無しさん:2010/05/05(水) 13:25:35
>>515
http://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

517 :デフォルトの名無しさん:2010/05/05(水) 13:52:28
>>515
メモリリークってのはプログラム実行時に使用メモリ量がどんどん増えていく
現象のこと
勿論deleteすべきものをしないことがメモリリークの主な原因だが、
定義により、>>592がメモリリークを発生させないのは、分かるだろ

使用メモリ量がどんどん増えはしなくとも、不要になったメモリをいつまでも
開放せず、本来使いまわせるメモリを使いまわさないのも良くないことだが、
>>592はそれにも該当しない

518 :デフォルトの名無しさん:2010/05/05(水) 13:53:12
ああ>>592じゃなくて>>492

519 :デフォルトの名無しさん:2010/05/05(水) 13:53:37
>>509それって規格で決まってるの?
>>515deleteしてないぞ
てか今回はvector<char>じゃなくてstring使えばよくね?-128から127までの整数を保存したいとかなら別だが

520 :デフォルトの名無しさん:2010/05/05(水) 13:57:05
>>519
質問が>>489で、その回答なのに
何でstringを持ち出すんだよ

本当にオナニー野郎ばかりだな

521 :デフォルトの名無しさん:2010/05/05(水) 14:01:14
規格の話をすると、C/C++の規格は、malloc()したものをfree()しなければならない
とは一言も言っていないぞ

プログラマがfree()するのは、単にそうしないと困るからであって、
>>492でdeleteしなければならないと主張するなら、それで困る実例を
挙げてみろって話だ


522 :デフォルトの名無しさん:2010/05/05(水) 14:11:00
なんだかバカがひとりでがんばってるな。

523 :492:2010/05/05(水) 14:16:55
>>516
「例外安全」は理解しました。

>>517-518
分かりやすいご説明ありがとうございます。
今まで、プログラム終了後もWindows上のメモリを占有すると勘違いしていました。
(だったら、なおさらdelete忘れるなよって言うのはごかんべん)

>>519-522
いろいろな考え方がありますね。勉強になります。

524 :デフォルトの名無しさん:2010/05/05(水) 15:28:52
>>521
まっとうな先生なら原点するとおもう、10点満点の1点くらいで。それが困る。

525 :デフォルトの名無しさん:2010/05/05(水) 15:51:51
>>521 こういうくだらない議論のきっかけになるというだけでも十分困る。

526 :デフォルトの名無しさん:2010/05/05(水) 18:38:08
char t[100];
これでよくね?

527 :デフォルトの名無しさん:2010/05/05(水) 22:14:45
>>526
今の時代なら wchar_t t[100]
charでやるなんてどうかしているよ。

528 :デフォルトの名無しさん:2010/05/05(水) 22:27:39
>>496
いや、まえから不思議におもっていたんですけれども vector や list や deque は
どうして明示的に delete しなくてもいいんですか?デストラクタが自動に呼び出されるしくみはなんなのでしょうか?
独習C++ を解いたレヴェルで質問するのははばかられるんですが、よろしければ教えてください。

529 :デフォルトの名無しさん:2010/05/05(水) 22:32:46
>>528
C++ の規格で定められた動作だから。
仕組みが知りたければアセンブリ吐かせるとかコンパイラのソース見るとかしろ。

530 :デフォルトの名無しさん:2010/05/05(水) 22:46:58
Cでアスキーコード表ってどうやって作ればいいんですか?(>_<)

531 :デフォルトの名無しさん:2010/05/05(水) 22:56:11
>>528
vector や list や deque が明示的に delete しなくてもいいとはどういみ?


532 :デフォルトの名無しさん:2010/05/05(水) 23:16:35
>>528
ちょっと質問がおかしいぞ
コンテナのデストラクタが自動的に呼び出される仕組み云々よりも、
まず自作のクラスを作ってデストラクタがいつ呼び出されるかを
確認できたら自ずと答えは出るはずだが?

533 :デフォルトの名無しさん:2010/05/05(水) 23:22:09
>>530
for (i = 0; i < 16; i++) {
for (j = 0; j < 8; j++) {
if (i < 2) {putchar(' ');} else {putchar((i << 4) + j);}
}
putchar('\n');
}

534 :デフォルトの名無しさん:2010/05/05(水) 23:39:49
>>533

ありがとうございます。やってみます。

535 :デフォルトの名無しさん:2010/05/06(木) 00:08:51
>>533
意地悪だなあwww

> for (j = 0; j < 8; j++) {

for (j = 0; j < 16; j++) { でないかい?

536 :528:2010/05/06(木) 00:18:42
>>532
ん、
Myclass ob1(1), ob2(3)
とかはわかるんですが、
new とかを内部でつかっているとどうなるのかな、とか‥‥‥。
でも、もうちょっといろいろ書いてみます。レスありがとうございました。

537 :デフォルトの名無しさん:2010/05/06(木) 00:18:44
asciiコードは00-7fまでしか定義されてないから>>533であってるお

538 :デフォルトの名無しさん:2010/05/06(木) 00:19:24
i と j がごっちゃになってるなw

539 :デフォルトの名無しさん:2010/05/06(木) 01:03:22
もっと素直に書けよ
for (i = 0; i < 0x80; i++) {
printf("%X:%c\n", i, iscntrl(i) ? ' ' : i);
}

540 :デフォルトの名無しさん:2010/05/06(木) 01:12:29
>>539
改行

541 :デフォルトの名無しさん:2010/05/07(金) 00:29:22
[1]プログラミング言語C
[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

542 :デフォルトの名無しさん:2010/05/07(金) 00:44:18
>>541
#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;
}

543 :デフォルトの名無しさん:2010/05/07(金) 23:25:48
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
コンソール上でキーボードから次のような標準入力を与えるとする。
10+2
すると、演算結果が出力するようなプログラムを記述せよ。
四則演算( +, -, *, / )に対応させること
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 5/12
[5] その他の制限:
文字列をコピーする関数( strcpy, strncpy )
文字列を連結する関数( strcat, strncat )
文字列の比較を行う関数( strcmp, strncmp )
文字列の長さを調べる関数( strlen )
文字を検索する関数( strchr )
文字列を整数値に変換する関数( atoi )
を使用する

お願いします。

544 :デフォルトの名無しさん:2010/05/07(金) 23:57:20
回答レスが無い可能性99.9%w

545 :デフォルトの名無しさん:2010/05/07(金) 23:59:24
過去に何度も出てるから飽きたって問題はある

546 :デフォルトの名無しさん:2010/05/08(土) 00:16:13
理由はそれだけかしらんw

547 :デフォルトの名無しさん:2010/05/08(土) 00:38:18
ぶっちゃけた話、その手の宿題が出る環境にいるのにそのレベルの問題が解決出来ないのはおかしい……

548 :デフォルトの名無しさん:2010/05/08(土) 01:01:16
>>543
あらかたはあってるとおもうのでてなおししてください。
http://ideone.com/7mklJ

549 :デフォルトの名無しさん:2010/05/08(土) 02:42:12
>>469
先生から回答貰えたら晒し希望
引数にchar *pathnameがないと実装量が多すぎる気がする

550 :デフォルトの名無しさん:2010/05/08(土) 04:03:38
うーむ
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1340447453


551 :デフォルトの名無しさん:2010/05/08(土) 09:41:34
>>543
ホワット・ア・ワンダフル・ワールド
C 言語で eval
ttp://alohakun.blog7.fc2.com/blog-entry-339.html

552 :デフォルトの名無しさん:2010/05/08(土) 18:58:18
>>544-547
素直に「難しくて私にはできません」と言え。
>>548
GJ

553 :デフォルトの名無しさん:2010/05/09(日) 17:17:30
[1]Cプログラミング
[2]
0から9までの数字を2回ずつ使用し掛け算の筆算を表示させよ

    □□□
  ×□□□
  ━━━━
   □□□
  □□□
□□□
 ━━━━━
□□□□□

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2010/5/9
よろしくお願いします

554 :デフォルトの名無しさん:2010/05/09(日) 17:31:30
>>553
ごめんなさい、私には難しくて出来ません

555 :デフォルトの名無しさん:2010/05/09(日) 18:24:46
>>553
http://codepad.org/jMlMQ5Iq

556 :デフォルトの名無しさん:2010/05/09(日) 20:19:36
forとprintfを使って以下のようなアスキーコード表を作りたいです。
たびたび申し訳ありませんが、よろしくお願いいたします。

0123456789ABCDEF
2SP!"#$%&'()*+,-./

 省略
 ・
Cタチツテトナニヌネノハヒフヘホマ
Dミムメモヤユヨラリルレロワン゛



557 :デフォルトの名無しさん:2010/05/09(日) 21:07:21
>>556
あなたの思い描くアスキーコードは独自のモノなので
char *str[]={"0","1","2"....};
と地道に列挙するのがいいんじゃないかな

558 :デフォルトの名無しさん:2010/05/09(日) 21:51:50
C言語でモジュラス10ウェイト3のソースコードを教えてください。
できれば解説もお願いします。

559 :デフォルトの名無しさん:2010/05/09(日) 22:06:02
>>558
http://codepad.org/C8ujcgRC

560 :デフォルトの名無しさん:2010/05/09(日) 22:18:36
>>558です

8桁でも13桁でも求められるようにお願いします
あと解説もお願いできますか

561 :デフォルトの名無しさん:2010/05/09(日) 22:20:09
>>560
別に8桁でも13桁でも255桁でもいけると思うが
解説って何を解説すりゃいいんだ?

562 :デフォルトの名無しさん:2010/05/09(日) 22:22:28
オーバーフローするだろ

563 :デフォルトの名無しさん:2010/05/09(日) 22:30:15
>>560, 562
ごめんよ気づかなかったよ(´・ω・`)
http://codepad.org/ua71XDW9

564 :デフォルトの名無しさん:2010/05/09(日) 22:31:18
>>561
回答ありがとうございます。
しかし、私、C言語を始めたばかりでしてsscanやfgetsがよくわかりません。
for文,printf,scanf、配列を使ってのソースコードを教えてほしいです。

565 :デフォルトの名無しさん:2010/05/09(日) 22:32:47
fgets(buf, sizeof(buf), stdin); を
scanf("%s", buf); に読み替えて(書き換えて)おくれ

566 :デフォルトの名無しさん:2010/05/09(日) 22:51:21
>>565
k ^= 2; //3,1を交互に切り替える

というのはどのような処理なのでしょうか?

567 :デフォルトの名無しさん:2010/05/09(日) 23:02:50
>>566
ビット演算をまだ勉強してなければ
if (k == 3) { k = 1; }
else { k = 3; }

と考えてもらえれば。

568 :デフォルトの名無しさん:2010/05/09(日) 23:46:05
total += ((data[cnt] - '0') % 10) * k;

の、-'0'の処理は、
入力した数字を数値化し、mod 10 することによって
10以上の1桁目をtotalに加えるということでよろしいでしょうか?

569 :デフォルトの名無しさん:2010/05/09(日) 23:49:56
10以下のじゃね?

570 :デフォルトの名無しさん:2010/05/10(月) 00:01:45
>>569
そうでしたか
ごめんなさい

571 :デフォルトの名無しさん:2010/05/10(月) 00:08:16
>>567
ありがとうございます
おかげさまで無事動かすことができました

572 :393:2010/05/10(月) 16:56:17
>>474
一応ノーエラーはできましたが、
>>460のようにはならないようです。

573 :デフォルトの名無しさん:2010/05/10(月) 17:10:42
まだやってたの?

574 :デフォルトの名無しさん:2010/05/10(月) 17:11:01
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):
ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求めよ。
但し、x(0)=1とし、反復回数を4とする

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日中

お願いします。

575 :デフォルトの名無しさん:2010/05/10(月) 17:42:39
本日中と書きましたが、夜10時までに回答していただけると助かります。
それ以降の場合はレスしないかもしれません。

576 :デフォルトの名無しさん:2010/05/10(月) 17:52:44
回答が無い可能性は極めて高いw

577 :574:2010/05/10(月) 18:01:43
>>575は私ではありません。
自分でも作っているのですが、終了条件でメチャメチャになっています。

578 :デフォルトの名無しさん:2010/05/10(月) 18:01:55
>>574
http://codepad.org/SDGPDcsp

579 :デフォルトの名無しさん:2010/05/10(月) 18:15:02
>>578
ありがとうございます。

if (dy == 0) break;
この判定は問題ありますが、とりあえずはよしとしましょう。

580 :デフォルトの名無しさん:2010/05/10(月) 18:16:42
とりあえずはよしとしましょう。

581 :デフォルトの名無しさん:2010/05/10(月) 18:19:14
それは判定じゃなくて、0 じゃ割れないのでどうしようもない場合。
反復回数(最大反復回数ではなく)が4と指定されてるので、
終了条件は i == 4 とかでしょう?

582 :574:2010/05/10(月) 19:15:53
>>579
お前いい加減にしてくれ
こっちは本気で切羽詰まっているんだ。

583 :デフォルトの名無しさん:2010/05/10(月) 19:44:13
だめなのけ?

反復回数最大10回にして
収束判定まじめにやるならこんなんで
http://codepad.org/eKC9f5qt

584 :デフォルトの名無しさん:2010/05/10(月) 19:50:31
>>574
#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;
}

585 :デフォルトの名無しさん:2010/05/10(月) 19:54:06
お前らどうして、演算結果のダブル値を0と比較したがるの?

586 :デフォルトの名無しさん:2010/05/10(月) 20:02:28
実務だったらバグだけど、所詮は宿題だからいいんじゃね。

587 : ◆GmgU93SCyE :2010/05/10(月) 20:42:18
>>582
トリップをつけたらいいですよ。ハンドル欄に#で始まる秘密の文字列を書けばいいんです。
たとえば
#abc ――@
を名前欄に入力していますが、それが
GmgU93SCyE ――A
と変換されています。Aから@を推測するのは、今のところ難しいようです。

588 :デフォルトの名無しさん:2010/05/10(月) 20:59:34
本科目の受講生より、こちらにて4月28日出題の課題を
インターネットに投稿している者がいるとの連絡を受けました。
今回の課題は学生の理解を深める為に個別レポートとして出題されたものであり、
問題の解答そのものを丸投げすることは課題の趣旨に反する行為となります。

初回の講義でお話しましたように、ソースコードの書き方には個人差があり、
過去に提出したレポートなどから本人が書いたものかどうか判別することは十分可能です。

他人が書いたソースコードをレポートとして提出することは重大な不正行為に当たります。
提出されたレポートにおいて不正が確認された場合、本学の懲罰規程に従い厳しく処罰されます。

締切りは明日の17時とまだ時間もいくらか残されていますので、
この問題を投稿した、または参考に読んでいる学生には自分の力で
今回の課題に取り組んで頂けることを期待しています。

589 :デフォルトの名無しさん:2010/05/10(月) 21:12:27
またか

590 :デフォルトの名無しさん:2010/05/10(月) 21:32:05
0じゃなくても小さすぎるとオーバーフローするのか

591 :デフォルトの名無しさん:2010/05/10(月) 21:37:13
INFになるだけ

592 :474:2010/05/10(月) 21:58:18
>>460を貼り付けたのは、>>393の君。なのに、そうならないとは?

593 :デフォルトの名無しさん:2010/05/10(月) 22:55:04
テンプレどうりじゃありませんが
http://codepad.org/9TL35R1Z
このようなコードを作ったのですが定数のNを#defineに変えたりいろいろやってもエラーが出てコンパイルできません
どうすればいいでしょうか?

594 :デフォルトの名無しさん:2010/05/10(月) 23:20:54
>>593
typedef struct 何かデータ名
{//何かメンバ
} Particle;
にしないと。

http://codepad.org/JtAm8YT3

595 :デフォルトの名無しさん:2010/05/10(月) 23:31:57
>>594
c++でなら通るのですが普通のc言語では同じエラーが出てしまいます

596 :デフォルトの名無しさん:2010/05/10(月) 23:33:13
>>593
C では const int としても配列の次数指定には使えないようですね。
#define がいやなら、enum { N = 32 } はいかが?
なお、C++ でコンパイルするとうまくいきました。

>>594
それは関係ないようですよ。無名の enum や struct は今はOKのはず。

規格に詳しい方のコメントをお待ちしております。

597 :594:2010/05/10(月) 23:36:06
さっきの無かったことに
原因はsqrtfみたい


598 :デフォルトの名無しさん:2010/05/10(月) 23:37:42
これで通った
http://codepad.org/sI8wAIq0

599 :デフォルトの名無しさん:2010/05/10(月) 23:40:46
なんで勝手にfになるんだろうな

600 :デフォルトの名無しさん:2010/05/10(月) 23:42:23
なんか#defineで通らないと思っていたら行末に ; つけてただけでした
enumでも通ったのですが一概には決めれないでしょうがどちらを使ったほうがいいんですかね?

601 :デフォルトの名無しさん:2010/05/10(月) 23:48:27
>>600
最近のはやりは enum でしょうね。
#define は定義したところから最後まで見えてしまいますが、
enum ならば定義した場所によっては通用範囲を絞ることができますしね。

meyers 先生は enum や const int を使えとおっしゃっています―― C++ の教科書で、なんですけどね。

602 :デフォルトの名無しさん:2010/05/10(月) 23:56:37
>>601
ありがとうございます

603 :デフォルトの名無しさん:2010/05/11(火) 15:37:52
意個数の整数を標準入力(キーボード)から入力し、
入力された整数の個数
平均値(小数点以下 1 桁まで表示)
最大値
最小値
を標準出力(ディスプレイ)に表示するプログラムを作成せよ。
ただし、9999が入力されたら入力を終了するものとし、9999は入力個数、平均値、最
大値、最小値には含めない。
また、最初に9999が入力された場合には、入力個数=0、平均値=0.0、最大値=0、
最小値=0が出力されるようにする。


604 :デフォルトの名無しさん:2010/05/11(火) 15:53:53
#include <stdio.h>
int 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;
}

605 :デフォルトの名無しさん:2010/05/11(火) 16:06:15
キーボードから int 型変数aに値を入力し、aの値を 2 進数に変換して画面に表示するプログ
ラムを作成せよ。
ただし、aに負の値が入力された場合には、再入力させるものとする。
実行例: () の部分が入力である。
Input a: (-4)
Input a: (-3)
Input a: (10)
a(decimal)=10
a(binary) =1010


606 :デフォルトの名無しさん:2010/05/11(火) 16:36:23
>>605
#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;
}

607 :よろしくお願いします:2010/05/11(火) 21:42:53
[1] 授業単元: C言語
[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] その他の制限:無いです


608 :デフォルトの名無しさん: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] その他の制限:
なるべくシンプルに。乱数を利用するとよいと書いてありましたが
乱数とアルファベットがどう関連するのか分からないです…

609 :デフォルトの名無しさん:2010/05/11(火) 23:20:07
>>608
文字列長はコマンドライン引数から取るようにした。

#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;
}


610 :デフォルトの名無しさん:2010/05/11(火) 23:20:29
#include <ctime>
#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;
}

611 :610:2010/05/11(火) 23:21:47
あ、配列への代入とputs使ってないわ
スルーしてくれ

612 : ◆QZaw55cn4c :2010/05/12(水) 01:06:06
>>607
(1) http://ideone.com/ZkKUt
(2) http://ideone.com/YLCd3
単純な区分求積です。

613 :デフォルトの名無しさん:2010/05/12(水) 01:10:43
>>609
rand() % 2 (笑)

614 :デフォルトの名無しさん:2010/05/12(水) 01:21:01
>609
コマンドライン引数に65535を渡してやる、うひゃひゃひゃひゃ

615 :デフォルトの名無しさん:2010/05/12(水) 01:28:04
>>610
>[3.3] 言語: C
(笑)

616 :よろしくお願いします:2010/05/12(水) 08:43:38
>>612
ありがとうございます!

617 : ◆/91kCCQXBo :2010/05/12(水) 14:39:23
>>608
#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);
}

618 :デフォルトの名無しさん:2010/05/12(水) 18:19:53
[1] 授業単元: 画像処理
[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);の間に付け加えるみたいです。


619 :デフォルトの名無しさん:2010/05/12(水) 20:49:40
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
30個の要素を持つ配列に小数をキーボードから代入し,それらを小さい順にソートし,その結果をモニタに出力するプログラムを作成せよ

[3] 環境
 [3.1] OS:vista
 [3.2] コンパイラ名とバージョン: VC 2008
 [3.3] 言語: C言語
[4] 期限: 5/13 7:00

よろしくお願いします。

620 :デフォルトの名無しさん:2010/05/12(水) 20:59:10
>>619
http://codepad.org/h0F6oJ2X
一番簡単なソートアルゴリズムでやってみた

621 :デフォルトの名無しさん:2010/05/12(水) 21:00:32
qsort使ったら怒られるのかな

622 :デフォルトの名無しさん:2010/05/12(水) 21:03:12
>>621
さすがにそれは手を抜きすぎ

というか質問の内容考えると、まださわりの方しかしてないような感じするし
余計ややこしくなるような気がする

623 :デフォルトの名無しさん:2010/05/12(水) 21:54:21
>>618
程度だと、回答が付かない可能性極めて高いw

624 :デフォルトの名無しさん:2010/05/12(水) 22:23:51
#include <stdio.h>

int f(int);

int main(void)
{
int no;

printf("整数を入力:");
scanf("%d",&no);

return 0;
}


void f(int n)
{
while (n-->0)
putchar('*');
putchar('\n');
}


入力したnの数だけ*を表示するプログラムなんですが、コンパイルできません。
どこがおかしいですか?

625 :デフォルトの名無しさん:2010/05/12(水) 22:28:18
>>624
矛盾してるから
int f(int);
void f(int n)


626 :デフォルトの名無しさん:2010/05/12(水) 23:21:48
まぁそもそもmain()からf()を使っていない時点でお菓子い

627 :デフォルトの名無しさん:2010/05/13(木) 12:20:56
[1] 授業単元: C言語
[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までです


628 :デフォルトの名無しさん:2010/05/13(木) 12:44:19
>>627
#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;
}

629 :デフォルトの名無しさん:2010/05/13(木) 12:44:51
>>627
http://codepad.org/XFEHNg3n

630 :デフォルトの名無しさん:2010/05/13(木) 13:59:54
[1] プログラミング演習課題
[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] 板書写し間違いがあるかも知れませんがよろしくお願いいたします。

631 :デフォルトの名無しさん:2010/05/13(木) 14:17:13
>>630
>sigunatureには文字列"hBitmap"が終端の\0を含めて格納されるものとする
なら

char signature[8];
でないと 終端の\0 分の器が足りない

632 :デフォルトの名無しさん:2010/05/13(木) 14:29:34
>>630
int pixels; も int *pixels; だよね。

633 :デフォルトの名無しさん:2010/05/13(木) 14:44:39
[1] プログラミング演習
[2]
5匹の羊と5匹の狼を1匹ずつひとつの檻に入れる。
羊の数を狼の数が超えると羊が食べられるのでNG。
上の条件で羊と狼を全頭檻に入れられる順番の組み合わせを全通り出力するプログラム。
他に方法はないのでしょうか?

[3] WinXP / GCC / C
[4] 明日まで
[5] 標準入出力 / ループ / if / 配列 / ポインタ / 自作関数くらいまで習いました。
http://brunhild.sakura.ne.jp/up/src/up443431.txt
↑を繰り返すくらいしか思いつきません。

634 :デフォルトの名無しさん:2010/05/13(木) 14:49:09
>>633
問題文の意味が分かりません

635 :デフォルトの名無しさん:2010/05/13(木) 14:53:51
例えば↓の順番に羊狼を檻に入れると常に狼の数が羊の数を上回らないからオッケー
羊→狼→羊→狼→羊→狼→羊→狼→羊→狼

ですが、↓の順番だと狼の数が羊の数を上回ってしまうためNG
羊→狼→狼

最小の例のような常に狼の数が羊の数を上回らない順番を全て出力するプログラムです

636 :デフォルトの名無しさん:2010/05/13(木) 14:57:56
>>633
#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;
}


637 :デフォルトの名無しさん:2010/05/13(木) 15:42:30
>>633
#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;
}

638 :デフォルトの名無しさん:2010/05/13(木) 15:47:04
>>637 修正
if(wolf<sheep){

if(wolf<sheep && wolf<WOLF_NUM){


639 : ◆/91kCCQXBo :2010/05/13(木) 15:49:31
>>636 >>637
羊狼俺俺俺俺俺俺俺俺

640 :デフォルトの名無しさん:2010/05/13(木) 16:00:04
狼羊貴貴貴貴貴貴貴貴

641 :デフォルトの名無しさん: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の手順まで守ったプログラムと手間を省いたプログラムをそれぞれ作成しなさい

642 :デフォルトの名無しさん:2010/05/13(木) 16:09:46
[1] 授業単元:ロボット制御

[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に代入した上で、出てきた二つの値から最適値を選んで
結果を出力するのだと思うのですが、どのような条件式を書けばよいのでしょうか?

最適値の選び出し方の動作アルゴリズムだけでも結構ですのでお願いします。

643 :640:2010/05/13(木) 16:58:03
// gcc -std=c99 >>633
#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("");
  }
}

644 :デフォルトの名無しさん:2010/05/13(木) 17:07:49
>>630
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10597.c

645 :デフォルトの名無しさん:2010/05/13(木) 17:14:01
[1] 授業単元:プログラミング実習
[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日)

いい点が取りたいです。どうかよろしくお願いします。


646 :デフォルトの名無しさん:2010/05/13(木) 17:15:41
[1] 授業単元:プログラミング実習
[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日)

いい点が取りたいです。どうかよろしくお願いします。


647 :デフォルトの名無しさん:2010/05/13(木) 17:17:32
>>654

URL間違えました。すみません

648 :640:2010/05/13(木) 17:19:01
>>643 修正
printf("%s",ans[i]&(1<<(10-j))?"狼":"羊");

     ans[i-1]

649 :デフォルトの名無しさん:2010/05/13(木) 17:20:47
>>642
最適値も何も答え自分で書いてるじゃん

650 :デフォルトの名無しさん:2010/05/13(木) 17:32:59
>>649
二個ある中のどっちか一つしか、次の式に入れられないので、
どちらか一つ正しいほうを選ぶ方法を教えてくれってことと解釈
まあ、数学嫌いなので関わる気はない。

651 :デフォルトの名無しさん:2010/05/13(木) 18:01:47
>>646
プログラミングの要素がない。すれちがい、ではないかしらん?

652 :デフォルトの名無しさん:2010/05/13(木) 19:03:51
>>651すみません。でもやっていただけると嬉しいです。

653 :デフォルトの名無しさん:2010/05/13(木) 21:12:24
>>652
見るだけができないってどうしちゃったの

654 :630:2010/05/13(木) 21:21:01
>>644
早々とやっていただけてありがとうございます。
ダウンロードしてテキストファイルに直して
コンパイルしたらエラーもなく動作しました。
hoge.datというファイルが出来ました。
どのような画像ファイルができているのか
見てみたいのですが、ダブルクリックしても
開けません。拡張子が対応していないみたいなので
拡張子を変えれば良いと思うのですが.bmpでは
駄目でした。どうすれば見れるのかも教えて
いただけるとうれしいです。

655 :デフォルトの名無しさん:2010/05/13(木) 21:30:12
初等算数の問題にか回答が付かないw

656 :デフォルトの名無しさん:2010/05/13(木) 22:36:53
ん?レスついてない問題あるか?

657 : ◆/91kCCQXBo :2010/05/13(木) 22:56:21
>>654
int 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);

658 :デフォルトの名無しさん:2010/05/13(木) 22:59:39
// fprintf(fp, " %ld %ld %ld", RED(col), GREEN(col), BLUE(col));
fprintf(fp, "%c%c%c", RED(col), GREEN(col), BLUE(col));


659 :デフォルトの名無しさん:2010/05/13(木) 22:59:44
>>656
最近だと>>618かな

660 : ◆QZaw55cn4c :2010/05/14(金) 00:11:21
>>641
当方の環境は Windows/cygwin、処理系は gcc 3.4.4 です。
http://ideone.com/zrB3A
f1() は定義どおり、f2() は再帰関数(漸化式)を用いました。

661 :デフォルトの名無しさん:2010/05/14(金) 00:17:44
題意を把握していないw

662 :デフォルトの名無しさん:2010/05/14(金) 00:31:13
>>661
そですかね。掛け算を足し算に変えたんですけど、これってやっぱり「計算の手間を省いた」ことにはならないんですかね。

663 :デフォルトの名無しさん:2010/05/14(金) 00:45:03
>しかしn!と(n-r)!がかなりの部分まで重複することを利用すれば、かなり計算の手間を省くことができる
この文章からどうして足し算が出てくるのか理解できない

664 : ◆QZaw55cn4c :2010/05/14(金) 00:59:37
>>641

>>663
じゃ、なおします。
http://ideone.com/ys6fN

665 :デフォルトの名無しさん:2010/05/14(金) 02:00:43
たとえば n=10, r=4 のとき

n! = 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

てことだろ

666 :630:2010/05/14(金) 07:57:08
>>657,658
ありがとうございます。
ただ意図が私にはよくわかりませんでしたので
解説して頂ければ幸いです

667 :デフォルトの名無しさん:2010/05/14(金) 08:03:48
>>641

>>665
なるほど。
http://codepad.org/XFavfdtT

668 :デフォルトの名無しさん:2010/05/14(金) 08:27:20
>>667
ソースを修正する。

669 :デフォルトの名無しさん:2010/05/14(金) 08:33:13
>>668
ん?なんか間違いがありますかね?

670 :デフォルトの名無しさん:2010/05/14(金) 08:46:34
ok
>>666
ソースを修正する。

671 :630:2010/05/14(金) 12:11:44
>>670
頂いたソースコードに//をつけてから追加記入でよろしいでしょうか?

672 :デフォルトの名無しさん: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・・・を「絶対値が同じで符合の異なる倍精度実数」

に書き換え,結果を確かめよ。

これがわからない;;
もしよかったら回答求む!

673 :デフォルトの名無しさん:2010/05/14(金) 13:11:59
>>672
>0xff・・・を「符号付整数の最小値(絶対値が最大の負の数)を表すビットパターン」
0x80000000

>0x3f・・・を「絶対値が同じで符合の異なる倍精度実数」
0xbff0000000000000

674 :デフォルトの名無しさん:2010/05/14(金) 13:16:17
>>673 ありがとう!!!

675 :デフォルトの名無しさん:2010/05/14(金) 13:16:55
符号付整数は2の補数表現
倍精度実数は IEEE 754
でよければ

#include <stdio.h>

int main() {
int i = 0x80000000; // <- ffffffff
printf("%d\n%u\n%le\n",i,i,
0xbff0000000000000); // <- 3ff0000000000000
return 0;
}

676 :657:2010/05/14(金) 14:11:03
diff してみた。
@@ -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);

677 :630:2010/05/14(金) 14:44:34
ソースをいじってみたのですが
案の定エラーがででてしまいました。
Line90:(が必要とか
Line90:,が必要とか
です。
これはなんとか直せそうなのですが
直したら別の場所で同じようなエラーが...

678 :デフォルトの名無しさん:2010/05/14(金) 15:46:14
>>677
いじったソース貼ってみ?
多分すごいことやってんでしょ

679 :630:2010/05/14(金) 18:13:51
今日のところは時間切れなので帰ります。
出来上がりの画像をみてみたいのですが残念です。

680 : ◆UJgUFCVXlA :2010/05/14(金) 19:07:15
[1] 制御工学
[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で、刻み幅は任意です。
コード、計算結果をプリントして提出、また計算結果をグラフにして提出しなければならないので、ファイル形式で保存できるようにして欲しいです。

プログラミングの授業ではないのに急に出されて困っています。
よろしくお願い致します。


681 :デフォルトの名無しさん:2010/05/14(金) 22:52:44
[1] 授業単元: プログラム
[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です

682 : ◆QZaw55cn4c :2010/05/14(金) 23:02:59
>>680
http://codepad.org/PW2a9CmW

683 : ◆QZaw55cn4c :2010/05/14(金) 23:11:01
>>681
http://codepad.org/ePn82aPQ

684 :デフォルトの名無しさん:2010/05/14(金) 23:38:08
[1] 授業単元: プログラム演習
[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] その他の制限:特になし

よろしくお願いします。



685 :デフォルトの名無しさん:2010/05/14(金) 23:47:40
1] 授業単元: プログラム演習
[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] その他の制限:特になし

よろしくお願いします。



686 :デフォルトの名無しさん:2010/05/14(金) 23:51:51
[1] 授業単元: プログラム演習
[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] その他の制限:特になし

よろしくお願いします。


687 :デフォルトの名無しさん:2010/05/15(土) 00:37:12
ポインタの中身を見るほうの*演算子(?)ってオーバーロードできまするか?

688 :デフォルトの名無しさん:2010/05/15(土) 01:33:33
>>686
#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;
}

689 :デフォルトの名無しさん:2010/05/15(土) 01:41:48
>>683
間違ってる

690 :デフォルトの名無しさん:2010/05/15(土) 06:40:47
[1] 授業単元:プログラム演習
[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] その他の制限:再帰の考えを使ってリストの長さを求めています
よろしくお願いします。

691 :デフォルトの名無しさん:2010/05/15(土) 06:47:30
return list_size(head->next) + 1;

692 :デフォルトの名無しさん:2010/05/15(土) 06:48:45
>>690
return 1+list_size(head->next);

693 :683:2010/05/15(土) 07:48:48
>>689
どこがまずいのかよくわかりません。plz kwsk


694 :デフォルトの名無しさん:2010/05/15(土) 08:04:38
ちゃんと問題文を読んでない
バブルソートが何か理解してない

695 :デフォルトの名無しさん:2010/05/15(土) 08:38:35
>>693
処理時間を考えていない、効率。

696 : ◆/91kCCQXBo :2010/05/15(土) 09:48:15
どこがまずいのかよくわかりません。plz kwsk
#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;
}

697 :デフォルトの名無しさん:2010/05/15(土) 10:23:48
>>696
問題文をよく嫁

698 :デフォルトの名無しさん:2010/05/15(土) 13:03:45
>>692
ありがとうございます

699 :デフォルトの名無しさん:2010/05/15(土) 14:48:40
>>696
#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番を比べて…

700 :681:2010/05/15(土) 15:30:58
なんか計算時間の話で
0(N^2)
0(NlogN)とかを話していました

701 :デフォルトの名無しさん:2010/05/15(土) 15:31:56
>>700
前者は選択ソート
後者はマージソートもしくはクイックソート

702 :デフォルトの名無しさん:2010/05/15(土) 16:24:53
>>685
http://codepad.org/j5k8ezON

703 :デフォルトの名無しさん:2010/05/15(土) 16:26:56
for(i=n-1; i > 0; i--) {
for(j=0; j<i; j++) {
if(a[j] > a[j+1]) swap(a[j], a[j+1]);
}}

704 :683:2010/05/15(土) 19:14:06
>>694
>>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
を読む限りバブルソートとはそういうもの

705 :683:2010/05/15(土) 19:16:59
>>696
正確には
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]);
一回余分


706 :デフォルトの名無しさん:2010/05/15(土) 19:17:56
バブルソートはループするごとに比較する列が短くなってくんだよw

707 :デフォルトの名無しさん:2010/05/15(土) 19:18:23
>>697
どこが「問題文をよくよめ」という判断になるのか plz

708 :デフォルトの名無しさん:2010/05/15(土) 19:19:24
>>699
>for (i=N;i>0;--i){
一回多い。

709 :デフォルトの名無しさん:2010/05/15(土) 19:21:33
>>707
比較の向きが逆じゃねーかよw

710 :デフォルトの名無しさん:2010/05/15(土) 19:26:13
>>703
若干改良がなされているが、それでもオーダーは Ο(N^2)

711 :デフォルトの名無しさん:2010/05/15(土) 19:27:37
>>706
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
を読めばわかるが、別に短くならなくとも良い。
それに短くなるように書いたところで、計算量のオーダーはΟ(N^2) で変わらない。

712 :681:2010/05/15(土) 19:29:28
結果的にどれが正解なんでしょうか…

713 :デフォルトの名無しさん:2010/05/15(土) 19:31:35
>>709

>>681
>0番と1番の値を比べ、0番が大きいなら、入れ替える
>>696
>if (a[j] > a[j + 1])
比較の向きはあっている。

714 :デフォルトの名無しさん:2010/05/15(土) 19:33:37
>>711
そこも読み違えてる気がする。
一つずつ短くなるのは必須で交換されなかった場合に一つ以上短くしなくてもいいってだけだろ

715 :デフォルトの名無しさん:2010/05/15(土) 19:33:56
>>713
まずはじめに3番と4番を比べてしまっているという意味で逆

716 :デフォルトの名無しさん:2010/05/15(土) 19:34:24
>>713
向きってのは0と1から比較して添え字の大きいほうに向かうって意味で使ってる。

717 :683:2010/05/15(土) 19:34:39
>>712
>>683 を書いた私としては、どうも根拠のない意味不明の物言いがはいってきている、とは感じているのですが、
最終的にはご自分で判断するしかないですね。

718 :デフォルトの名無しさん:2010/05/15(土) 19:36:57
>>683提出して減点されればいいと思うよw

あと、◆QZaw55cn4c
トリつけるんなら全部につけてくれ

719 :デフォルトの名無しさん:2010/05/15(土) 19:37:24
>>714
http://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)

720 :デフォルトの名無しさん:2010/05/15(土) 19:38:04
>>719
>「比較回数」は、高々n(n-1)/2回。

721 :デフォルトの名無しさん:2010/05/15(土) 19:38:54
>>715
ん、なるほど。それはそうですねえ。

722 :デフォルトの名無しさん:2010/05/15(土) 19:39:56
>>719
>確定していない部分について1つずつ減らしながら繰り返す。

723 :デフォルトの名無しさん:2010/05/15(土) 19:43:27
>>719
その1文しか読んでないの?
もう少し後まで読もうぜ
少なくともサンプルコードぐらいまではなw

>for each j in 2 to length(A) - i + 1 do:
なんでiを引いてるか理解できてるか?

724 :696:2010/05/15(土) 20:07:27
>>705 サンクス

(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)

725 :デフォルトの名無しさん:2010/05/15(土) 20:15:11
>>724
unsigned int だと無限ループしないか?

726 :デフォルトの名無しさん:2010/05/15(土) 20:15:20
>>723
んー、たしかに短くしてますねえ。これは大変失礼いたしました。

727 :デフォルトの名無しさん:2010/05/15(土) 20:16:10
お前は二度とくるな

728 : ◆QZaw55cn4c :2010/05/15(土) 20:18:42
修正版をあげておきます。
http://codepad.org/mgl1BcvL

729 :デフォルトの名無しさん:2010/05/15(土) 20:24:12
wikiすらまともに読めないヤツが他人の宿題を解こうなんて無茶すぎるw

730 : ◆/91kCCQXBo :2010/05/15(土) 20:26:27
>>728
#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 */

731 :デフォルトの名無しさん:2010/05/15(土) 20:29:39
そんなことより
>>684解いてあげようぜ!

732 :デフォルトの名無しさん:2010/05/15(土) 20:30:43
>>730
見つけにくいバグ作るなよw

733 : ◆/91kCCQXBo :2010/05/15(土) 20:46:34
>>732 すみません
>>705 合ってるのじゃ? N=サイズ - 1

734 : ◆QZaw55cn4c :2010/05/15(土) 20:53:37
>>731
>>684
http://codepad.org/EJsRpvsN

735 :デフォルトの名無しさん:2010/05/15(土) 22:22:04
forだとややこしくなるからこれは?
n=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--;
}

736 : ◆/91kCCQXBo :2010/05/16(日) 02:07:25
スレ嫁これと同じ。>>735

>>703
n=sizeob(a)/sizeof(*a)-1;

737 :デフォルトの名無しさん:2010/05/16(日) 02:56:30
なんでバブルソートでこんなに伸びてんだよw

738 :デフォルトの名無しさん:2010/05/16(日) 03:55:50
お前ら、普段からqsort()やstd::sort()に頼ってばっかりで
バブルソート様を使ってないだろ

739 :デフォルトの名無しさん:2010/05/16(日) 09:07:07
ソートすら使ってない
list_for_eachでごりごり探すコードしか見てないなあ

740 :デフォルトの名無しさん:2010/05/16(日) 17:13:37
[1] 授業単元:繰り返し+条件分岐+一次元配列 処理
[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)
どこを直せばいいのでしょうか?教えてください。よろしくお願いします。


741 :デフォルトの名無しさん:2010/05/16(日) 17:19:58
>>740
uriage[0]~[11]で12個

742 :デフォルトの名無しさん:2010/05/16(日) 17:20:30
>>740
i=12-1

743 :デフォルトの名無しさん:2010/05/16(日) 17:42:00
[1] 授業単元:プログラム演習
[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] その他の制限:とくにありません

全くわからなくて困っています。どうかよろしくお願いします

744 :デフォルトの名無しさん:2010/05/16(日) 17:46:54
[1]プログラミング演習
[2]asciiコード表を出力しなさい。(main関数、プロトタイプ宣言、関数定義を全て書くこと。)
[3]windowsでコンパイラはborland C++ 5.5.1、C言語です。
[4]火曜日まで

よろしくお願いします。

745 :デフォルトの名無しさん:2010/05/16(日) 18:05:52
http://codepad.org/0N5ZtdS2

746 :デフォルトの名無しさん:2010/05/16(日) 18:11:59
>>745

747 :デフォルトの名無しさん:2010/05/16(日) 18:13:41
//n!の階乗を出力

748 :デフォルトの名無しさん:2010/05/16(日) 18:14:08
>>745
これがモジュール化できた状態なんでしょうか?
配列を使うことが条件となっているのでよろしくお願いします


749 :omi ◆SjLuktgpzQ :2010/05/16(日) 19:00:56
[1] 授業単元:プログラミング演習
[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
問題文はこちらになります。わたしなりに頑張ったのですが、できませんでした。どうかよろしくおねがいします。

750 :デフォルトの名無しさん:2010/05/16(日) 20:54:22
>>749
無駄な入れ替えとか、引数名がi,jとか、配列とnをグローバルにするっぽいとことか、
なんか気持ち悪くてやるきになれない。

751 :681:2010/05/16(日) 21:03:42
#include <iostream>
using namespace std;

void swap(int &a);

int main() {

int a[5]={34,3,11,28,17};

この続きからお願いできないでしょうか…

752 :デフォルトの名無しさん:2010/05/16(日) 21:47:03
[1] 授業単元: プログラム
[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です


753 :デフォルトの名無しさん:2010/05/16(日) 22:10:13
>>751
そんなに制約が厳しいのか
わけのわからん宿題だな

754 :デフォルトの名無しさん:2010/05/16(日) 22:19:05
>>751
そのswap()は無理w

755 :デフォルトの名無しさん:2010/05/16(日) 22:27:19
>>754
一応 g++ (MinGW) ならこれで一つ後ろの要素と交換できた
void swap(int &a)
{
int *p=&a+1 ,temp;

temp=a;
a=*p;
*p=temp;
}

756 : ◆/91kCCQXBo :2010/05/16(日) 23:42:45
>>751
http://codepad.org/u3TfO98c

757 :デフォルトの名無しさん:2010/05/16(日) 23:58:28
>>756
ありがとうございます

758 :デフォルトの名無しさん:2010/05/17(月) 00:30:00
>>744 アスキーコード表
>>530 >>533-535>>537-540

759 :デフォルトの名無しさん:2010/05/17(月) 00:46:08
>>756
その発想はなかった
みんな面白いこと考えるなぁ

760 :デフォルトの名無しさん:2010/05/17(月) 01:45:25
[1] 授業単元:プログラム演習
[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ですが、こちらも分からなかったので
よろしくお願いします

761 :デフォルトの名無しさん:2010/05/17(月) 01:48:14
↑すみません
>>689ではなく>>690です。

762 :デフォルトの名無しさん:2010/05/17(月) 01:59:42
>>760
return car(head) + sum(cdr(head));

763 :デフォルトの名無しさん:2010/05/17(月) 17:01:22
>>762
ありがとうございます。

764 :デフォルトの名無しさん:2010/05/17(月) 18:18:40
>>760
いまどきlispをするんですかね

765 :デフォルトの名無しさん:2010/05/17(月) 18:20:46
[1] 授業単元: プログラミング実習2
[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(,)等の数学関数は使うべきではない。だそうです。

自分ではできませんでした。よろしくお願いいたします。

766 :デフォルトの名無しさん:2010/05/17(月) 18:42:55
[1]プログラムU
[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日

頼みます

767 :デフォルトの名無しさん:2010/05/17(月) 20:24:11
void value(double *c, int n, double a) { while(n--) *c++ = a; }

768 :デフォルトの名無しさん:2010/05/17(月) 21:26:01
>>765
#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;
}

769 :デフォルトの名無しさん:2010/05/17(月) 21:30:14
あ i 使ってないやw

770 : ◆/91kCCQXBo :2010/05/17(月) 22:36:46
#include <stdio.h>
int 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);
}
}

771 :デフォルトの名無しさん:2010/05/17(月) 23:44:35
[1] C言語演習
[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] その他の制限:特に無し

772 :デフォルトの名無しさん:2010/05/17(月) 23:49:23
#include <stdio.h>

int 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;
}

773 :デフォルトの名無しさん:2010/05/17(月) 23:54:55
>>772
どうもありがとうございます。

774 :デフォルトの名無しさん:2010/05/18(火) 01:26:52
[1] 授業単元: 映像メディア処理
[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]に出力させたいです。
ロード部分は問題無いので、多値ディザ法を行う部分をお願いします。

775 : ◆dHgBvcqH3c :2010/05/18(火) 16:53:11
[1] プログラミング応用1
[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]なし


よろしくお願いします

776 :デフォルトの名無しさん:2010/05/18(火) 17:20:12
[1] 授業単元:プログラミング
[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] その他の制限:特になし
以前お世話になりました。
追加問題が出たのでご助力お願いします。

777 :デフォルトの名無しさん:2010/05/18(火) 20:22:50
>>774
サンプルのイメージファイル UP!

778 :デフォルトの名無しさん:2010/05/18(火) 21:16:17
>>776
ttp://www1.axfc.net/uploader/He/so/278200.zip

779 :774:2010/05/18(火) 22:39:42
>>777
サンプル画像・参考プログラム・課題を
http://www.age2.tv/rd05/src/up6027.zip.html pass:c
で用意しました。
お時間があれば、平均誤差最小法もお願いしたいです。

780 :デフォルトの名無しさん:2010/05/19(水) 01:31:40
>774, 779
とりあえず、それっぽいのを作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10609.c
KITでもまともなのやってるんだな

781 :デフォルトの名無しさん:2010/05/19(水) 03:25:08
>>774
誤差拡散
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;
}
}

782 :774:2010/05/19(水) 07:39:02
>>780
ありがとうございます。
これ、まともな内容ですか?
3年開講のこの科目でコンパイラのインストール方法からコンパイル・実行方法
を何周かにかけて説明するようなレベルですから。

783 :デフォルトの名無しさん:2010/05/19(水) 13:16:30
>>782
内容ほとんど見てないけど、ちゃんと作ってるにおいがするよ
授業のレベルは超えているかもね

784 :デフォルトの名無しさん:2010/05/19(水) 20:12:50
5桁の整数のそれぞれの桁の数を配列にいれるにはどうすればいいんでしょう
例えば13578という整数だと
a[0]=8,a[1]=7,・・・,a[4]=1という感じにしたいのです
よろしくお願いします

785 :デフォルトの名無しさん:2010/05/19(水) 20:23:46
>>1を先ず読む

786 :デフォルトの名無しさん:2010/05/19(水) 20:30:01
int n = 13578;
for(i=0; i<5; i++, n/=10) a[i] = n % 10;

787 :デフォルトの名無しさん:2010/05/19(水) 20:39:38
sprintf

788 :デフォルトの名無しさん:2010/05/19(水) 20:53:45
へぇ、sprintfだけで逆順にすることできるんだ

789 :デフォルトの名無しさん:2010/05/19(水) 21:20:36
sprintf 使って無理やりやるとこんな感じかね

#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;
}

790 :デフォルトの名無しさん:2010/05/19(水) 21:25:10
ああ、逆順かすまん

791 :デフォルトの名無しさん:2010/05/19(水) 21:45:18
reverse(a, a+5);

792 :デフォルトの名無しさん:2010/05/19(水) 22:11:06
おえええええ

793 :デフォルトの名無しさん:2010/05/19(水) 22:31:39
>>684です。もう一度お願いします。
リダイレクションを用いて、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10610.txt
のデータを取り込み、配列を使って最小2乗法による近似を書いてください。
早急にお願いします。


794 :デフォルトの名無しさん:2010/05/19(水) 22:36:27
早急にって書かれるとやる気無くすなあ

795 :デフォルトの名無しさん:2010/05/19(水) 22:36:48
>>685です。
ポインタなどは習っていないため、できるだけ簡単に、もう一度お願いしたいです。
配列は使ってください。
急いでいますので、わがまま言ってすみませんが、よろしくお願いします。

796 :デフォルトの名無しさん:2010/05/19(水) 23:06:06
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

797 :デフォルトの名無しさん:2010/05/19(水) 23:10:15
>>795
>>702見たけどポインタ使って無いじゃん
stdinから読み込むように直すだけ

798 :デフォルトの名無しさん: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;
}

799 :デフォルトの名無しさん:2010/05/19(水) 23:42:51
>>798
こんな感じじゃないかな。

#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;
}

800 :デフォルトの名無しさん:2010/05/20(木) 00:05:14
ワロタ

801 :デフォルトの名無しさん:2010/05/20(木) 01:21:05
[1] 授業単元:プログラミング演習
[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
突然ながらおねがいします。

802 :デフォルトの名無しさん:2010/05/20(木) 02:12:04
>>801
ttp://ideone.com/PMIt9

803 :デフォルトの名無しさん:2010/05/20(木) 07:01:49
すみません、>>685お願いします。なるべく簡単にお願いします。

804 :デフォルトの名無しさん:2010/05/20(木) 07:48:33
>>802
ありがとうございます!!


805 :デフォルトの名無しさん:2010/05/20(木) 08:43:13
>>702
>>685 を提出して、先生に100点もらえばいいだけの話

806 :805:2010/05/20(木) 10:07:48
偏差値はこうだろ
sd_t = sqrt(sum_tt/n);
for(i=0; i<n; i++) {
  printf("%f\n", (data[T][i] - ave_t) / sd_t * 10 + 50);
}

807 :デフォルトの名無しさん:2010/05/20(木) 11:27:58
>>802
それCになってないぞ
C++になってる
Cは変数の宣言を文の途中に書けない

808 :デフォルトの名無しさん:2010/05/20(木) 11:29:39
お前は何を言ってるんだ?

809 :デフォルトの名無しさん:2010/05/20(木) 11:40:06
悪い
×>>802
>>702

810 :デフォルトの名無しさん:2010/05/20(木) 11:47:44
C99

811 :デフォルトの名無しさん:2010/05/20(木) 11:55:29
>>807
ローカルな話はどうでもいいだろ
普通のCでOKならそれでいいじゃん

812 :デフォルトの名無しさん:2010/05/20(木) 12:44:54
Mingw
gcc -std=c89


813 :デフォルトの名無しさん:2010/05/20(木) 12:59:28
ブロックの途中かな

814 :812:2010/05/20(木) 14:29:22
Microsoft VC++
CL /TP にするしかない

815 :デフォルトの名無しさん:2010/05/20(木) 18:06:35
>>803
>>702を書き換えてみた
http://codepad.org/AfLUlPgb

昨日はレス番号混同したみたいだ
スマンwww

816 :805:2010/05/20(木) 18:47:29
>>702
h+=sqrt(pow(avr-k,2.0));
 ↓
h+=(avr-k)*(avr-k);


817 :デフォルトの名無しさん:2010/05/20(木) 19:33:39
>>685
http://codepad.org/jj6UHy0j
かな。標準偏差を求める式が違っていたようだ

818 :デフォルトの名無しさん:2010/05/20(木) 19:49:45
[1] 授業単元:ソフトウェア演習
[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] その他の制限:値は標準入力から出力、関数からの戻り値を標準出力に出力



819 :デフォルトの名無しさん:2010/05/20(木) 20:52:31
>>818
斜辺は c ですか?
sinθ, cosθ のθはどの角ですか?

820 :デフォルトの名無しさん:2010/05/20(木) 20:58:36
¥Cは角度
#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);
}

821 :デフォルトの名無しさん:2010/05/20(木) 21:33:31
>>819
Cは斜辺です。
どの角という指定はないです。
でも0〜180の指定はあります。
>>820
ありがとうございます。

822 :デフォルトの名無しさん:2010/05/20(木) 21:43:17
>>811
普通のCでコンパイル出来ないから言ってるんだが

>>817
直ってるね

823 :デフォルトの名無しさん:2010/05/20(木) 21:56:57
#include <stdio.h>

#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;
}

824 :デフォルトの名無しさん:2010/05/20(木) 21:57:38
#include <stdio.h>

#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

825 :820:2010/05/20(木) 22:44:50
 前の続き
if(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));
  }
}

826 : ◆UJgUFCVXlA :2010/05/21(金) 03:24:31
>>682
ありがとうございます。助かりました。

827 :デフォルトの名無しさん:2010/05/21(金) 18:13:39

f(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)が成り立つ
関数って存在するのか。

828 :デフォルトの名無しさん:2010/05/21(金) 18:36:59
>>827
大雑把な議論だが
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 のような関数は存在しない。



829 :デフォルトの名無しさん:2010/05/21(金) 18:57:55
どんな構造の群でも無理なの?
順序も樹序の公理はみたす範囲で自由に付けられるとして。


830 :デフォルトの名無しさん:2010/05/21(金) 19:05:03
f(x+h)=f(x)+f(h) 

f(x+h)-f(h)=f(x) 

lim(f(x+h)-f(h))/h =limf(x)/h

f'(x)=0

とした方がよさげ。

831 :デフォルトの名無しさん:2010/05/21(金) 19:05:46
まちがえました。

832 :デフォルトの名無しさん:2010/05/21(金) 19:09:30
f(x+h)=f(x)+f(h) 

f(x+h)-f(x)=f(h) 

lim(f(x+h)-f(x))/h =limf(h)/h

f'(x) = ∞ ? or f(x)=0

へんなの出た。 

833 :デフォルトの名無しさん:2010/05/21(金) 19:55:20
作れるのだがハメルーンの笛吹き

834 :デフォルトの名無しさん:2010/05/21(金) 20:21:02
で正解は?
あるのかないのか。
微分可能ではない任意の群でも作れないの

835 :デフォルトの名無しさん:2010/05/21(金) 20:25:12
Z/(n)にしとけばよさげ。順序が成立しているのかは不明だが。

836 :デフォルトの名無しさん:2010/05/21(金) 20:44:46
ACを使う世界は完全にスレ違い

837 :デフォルトの名無しさん: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;
}

838 :デフォルトの名無しさん:2010/05/21(金) 20:53:46
[1] 授業単元:応用情報プログラミング
[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] その他の制限:プログラミングを授業で受けて二年目です。ポインタの授業の宿題です。

839 :デフォルトの名無しさん:2010/05/21(金) 20:59:52
>>837
int y; の定義が抜けている。
then はいらないので、if(){ でよい。

840 :デフォルトの名無しさん:2010/05/21(金) 21:03:16
>>837
int y;

if ( ...) {
} else {
}

http://codepad.org/BJq0yo1K

841 :デフォルトの名無しさん:2010/05/21(金) 21:05:50
入力された値が素数かどうかを調べるプログラムを作りたい
入力された値xを2から√xまで順番に割って全てにおいて余りが出たらxは素数
というところまではわかった
このとき√xは小数点以下切捨て

問題はルートをどうやって表現するか
for(i = 2 ; i <= √x ; i++)なんて書き方無いよな
どうすりゃいいの?

842 :デフォルトの名無しさん:2010/05/21(金) 21:08:39
[1] 授業単元:自学
[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] その他の制限 自学なのでコメントをつけていただけるとうれしいです。よろしくお願いします。

843 :デフォルトの名無しさん:2010/05/21(金) 21:08:57
>>839
>>840
コンパイルできました。ありがとうございます。

参考書などでは then を記載するように書かれているのですが。。

844 :デフォルトの名無しさん:2010/05/21(金) 21:09:45
>>841
sqrt

845 :デフォルトの名無しさん:2010/05/21(金) 21:10:12
>>841
i*i <= x

846 :デフォルトの名無しさん:2010/05/21(金) 21:11:06
>>838
http://codepad.org/6Sl3Qoro

847 :デフォルトの名無しさん:2010/05/21(金) 21:11:32
何の参考書だそりゃw

848 :デフォルトの名無しさん:2010/05/21(金) 21:12:17
>>843
その教科書を晒してください。amazon の書評に書いておきます。

849 :デフォルトの名無しさん:2010/05/21(金) 21:13:07
>>844のやり方はまだ習ってないので>>845でやります
d

850 :デフォルトの名無しさん:2010/05/21(金) 21:40:11
thenって、禅問答でもするつもりかあ

851 :デフォルトの名無しさん:2010/05/21(金) 21:41:44
#define then

852 :デフォルトの名無しさん:2010/05/21(金) 21:42:40
[1] 授業単元: プログラム
[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です


853 :デフォルトの名無しさん:2010/05/21(金) 21:44:48
>>842
#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;
}

854 :デフォルトの名無しさん:2010/05/21(金) 22:25:02
>>838
二年目、、、ですか

855 :デフォルトの名無しさん:2010/05/21(金) 23:00:41
[1] 授業単元: プログラム演習
[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] その他の制限:ポインタは習っていません。


856 :デフォルトの名無しさん:2010/05/21(金) 23:06:03
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク): 三角形の三つの辺の長さを引数とし、内角の大きさを返す関数を実装しなさい。
さらに、その関数を用いて、三角形の三つの点の座標(x座標, y座標)を入力し、それらの点が作る三角形のすべての内角の角度を計算するプログラムを実装しなさい。
計算結果の角度の表示は必ずmain()関数の中で行われなければならないとする。
[3] 環境[3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2010年5月25日まで]
[5] その他の制限:ポインタは習っていません。なるべく簡単にお願いします。



857 :デフォルトの名無しさん:2010/05/21(金) 23:30:40
>>855
行列の積ってよく覚えてないんだけど
y0 = matA00*x0 + matA10*x1;
y1 = matA01*x0 + matA11*x1;
こういう計算するんだっけ?

858 :デフォルトの名無しさん:2010/05/21(金) 23:53:20
>>855 #include <stdio.h>
#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]);
  }
}

859 :デフォルトの名無しさん:2010/05/21(金) 23:53:36
>>856
double CalcAngleFromThreeEdges(double a, double b, double c)
{
return acos((b*b+c*c-a*a)/(2*b*c));
}

860 :858:2010/05/21(金) 23:55:42
よく見たら関数だった

861 :デフォルトの名無しさん:2010/05/21(金) 23:55:58
>>855
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];
}

862 :デフォルトの名無しさん:2010/05/21(金) 23:58:11
行と列がどっちにはいってるかわからないと解けなくね

863 : ◆QZaw55cn4c :2010/05/22(土) 00:17:16
>>856
http://codepad.org/5iiR8vCR
鋭角三角形の場合だけ正しい値を出します。鈍角三角形はうまくいかない。

864 :デフォルトの名無しさん:2010/05/22(土) 04:18:18
最後の角は2PIから引けばいーのに

865 :デフォルトの名無しさん:2010/05/22(土) 04:19:06
2PIじゃないPIだな

866 :デフォルトの名無しさん:2010/05/22(土) 14:52:34
大学のC言語の課題です。教えてください。
問題: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]);
}


867 :デフォルトの名無しさん:2010/05/22(土) 15:07:28
なんで3人なのに5個入力するの?

868 :デフォルトの名無しさん:2010/05/22(土) 15:15:30
>>867
タイプミスです。すいません。。。


869 :デフォルトの名無しさん:2010/05/22(土) 15:17:08
int max_score = 0;
 :
if(max_score < score[i])
max_score = score[i];
 :

870 :デフォルトの名無しさん:2010/05/22(土) 15:17:18
#include <stdio.h>
int 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;
}

//最高点出すだけなら配列使わなくて大丈夫

871 :デフォルトの名無しさん:2010/05/22(土) 15:27:21
学校のC言語のレポート課題なんですが、少し知恵を分けてください。
問題: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;
}

872 :866:2010/05/22(土) 15:28:29
>>869
>>870
ありがとうございます。できました!!!


873 :デフォルトの名無しさん:2010/05/22(土) 15:35:03
>>871
奇と表示する条件をif条件にすると良い

874 :デフォルトの名無しさん:2010/05/22(土) 15:36:08
>>873
どういう条件にすればいいのでしょうか?

875 :デフォルトの名無しさん:2010/05/22(土) 15:39:07
>>871
#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;
}

876 :デフォルトの名無しさん: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文の構造と、ループ制御を理解していているかという課題かも。
レポートなら、コードだけじゃなく、説明も要求されるだろうし。

877 :869:2010/05/22(土) 16:03:36
int x[5+1];
x[5] = 1;
 :
if (x[i] % 2 == 0){
x[5] = 0;
}
 :

878 :デフォルトの名無しさん: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(

879 :869:2010/05/22(土) 16:45:39
10 10 9 8 7 6 5 4 3 2
の時の2番目に大きいのは?

880 :デフォルトの名無しさん:2010/05/22(土) 16:56:06
どう考えても9だろ

881 :デフォルトの名無しさん:2010/05/22(土) 17:00:09
ちなみにどこの大学だ

882 :デフォルトの名無しさん:2010/05/22(土) 17:09:39
>> 878

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]);
}
max = &x[0];
for(i=1;i<10;++i) {
if (*max < x[i]) {
result = max;
max = &x[i];
}
}
printf("答え:%d\n", *result);
return 0;
}

883 :デフォルトの名無しさん:2010/05/22(土) 17:10:08
>>878
降順にsortして2番目に高い数字を出力してる
http://codepad.org/nE2sCbUr

884 :デフォルトの名無しさん:2010/05/22(土) 17:10:24
書いた後にバグがあることに気づいた。

885 :デフォルトの名無しさん:2010/05/22(土) 18:21:59
>>882
10個すべて同じ値にすると落ちる。
printf("答え:%d\n", *result); → if (result) print("%d"), *result);


886 :デフォルトの名無しさん: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);
}
のプログラムを論理演算子(&&,||)無しでお願いします!!


887 :デフォルトの名無しさん:2010/05/22(土) 18:35:06
if(a%400==0)
  printf("西暦%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 );

888 :デフォルトの名無しさん:2010/05/22(土) 18:41:29
>>887
おおおおおおお!!
ありがとうございます.

889 :879:2010/05/22(土) 20:41:58
つりだけど、5番目に大きな数は?>>882

890 :デフォルトの名無しさん:2010/05/22(土) 21:06:16
すみません、
txtファイルに書いた2進数(10011101)をchar配列に保存しているのですが、
これをint型10進数(10011101 → 157)に直すシンプルな方法は無いでしょうか?

現状atoiで整数にしてから
10ずつ割りながら、整数で1の論理積を確認し、
別途1..2..4..8..と数値を足し合わせ作り直す手しか思い付かないのですが・・。

891 :デフォルトの名無しさん:2010/05/22(土) 21:13:33
>>890
#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;
}

892 :デフォルトの名無しさん:2010/05/22(土) 21:15:41
>>890 strtol

893 :デフォルトの名無しさん:2010/05/22(土) 22:51:43
>>889
拡張性なんか無視して書いたからなー
作りなおすしかない。

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;
}

894 :879:2010/05/22(土) 23:40:03
>>878
#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;
}

895 :デフォルトの名無しさん:2010/05/23(日) 07:51:21
>>894
すべて同じ数字を入力した場合、その数字が答えとして出力されるが、
それは「2番目に大きい値を出力する」という要件に合致しているといえるの?

896 :デフォルトの名無しさん:2010/05/23(日) 08:07:54
出題者いるよ、そっちにきいてくれ。
if(*max != *result) /* 10個すべて同じ値にすると表示無し。 */
printf("答え:%d\n", *result);

897 :デフォルトの名無しさん:2010/05/23(日) 09:25:45
あんま関係ないけど、そのコメントはコードの意図を直接的にあらわしていないので
いやなにおいを感じて修正しそう。

898 :デフォルトの名無しさん:2010/05/23(日) 09:46:13
洗濯しました

899 :863:2010/05/23(日) 11:30:20
>>856
>> 863 は鈍角三角形でもうまくいくことがわかりました。
でも、 >>859 で示されているとおりの、余弦定理を使うのがいいでしょうね。こんな感じ。
http://codepad.org/mXXBpTFc

900 :デフォルトの名無しさん:2010/05/23(日) 11:40:52
お助けください。

問題:代表の生徒の名前、代表者の出席回数、グループメンバーの出席回数、グループの全体の出席回数の上位x番だけ出力するプログラムを作成せよ.
   キーボードから代表者のID,個人のID,名前を入力するものとし、グループメンバーは代表者のIDでのみで関連付けされる
出席の記録はキーボードから個人のIDが呼び出された回数でされるものとする.
   

901 :デフォルトの名無しさん:2010/05/23(日) 13:09:56
>>900
こんな入力・出力例でいいの?

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




902 :デフォルトの名無しさん:2010/05/23(日) 13:39:33
はい
名簿のほうはいつでも人が増やされる感じで
出席のほうは個人のIDが呼び出されると加算されていく感じです

903 :デフォルトの名無しさん:2010/05/23(日) 13:54:14
>in 1,1,sakata
>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

みたいなイメージです

904 :デフォルトの名無しさん:2010/05/23(日) 14:00:23
>>878
http://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

*/



905 :879:2010/05/23(日) 15:46:57
#include <stdio.h>
#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;
}

906 :デフォルトの名無しさん:2010/05/23(日) 16:32:18
10マスある双六で1〜6のランダムの値だけ進むのを繰り返してゴールを目指す。
ぴったりじゃないと余った分引き返す。
(|スタート◎| _ _ _ _ _ _ _ _ _ _ |ゴール|の表示を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;
}

これを使うように指示されています。よろしくお願いします。

907 :デフォルトの名無しさん:2010/05/23(日) 17:05:48
#include <stdio.h>
#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)は変更してないので省略

908 :900:2010/05/23(日) 17:27:46
>>900
>>902
>>903

909 :デフォルトの名無しさん:2010/05/23(日) 18:19:28
>>900
テンプレつかえよ
CかC++か?制限は?講義のレベルはどれくらいなんだよ。
問題文の各行のつながりもわかりにくい。1行目が>>903のout以降で、2行目がat、3行目がinの説明?
問題文の1行目は、すべて並列に書かれているように見えるけど、1行目はグループメンバ全員の出席数の合計が多い順に、各グループの代表者名、代表者の出席回数、メンバー全員の集積回数の合計を出力するって意味?
j上位x番のxはキーボードから入力するのかコード内に数字として埋め込んでいいのか。
好きなだけグループや生徒を登録できるのか?だとしたら可変長配列や可変長文字列を使うと便利だがライブラリを使用していいのか自作しなければいけないのか。

910 :デフォルトの名無しさん:2010/05/23(日) 18:34:53
>>909
出題者(つまり学校の先生)が手を抜いているのに、依頼者(つまり学生・生徒)を責めても無駄。
依頼者が仕様を正確に記述できないのも、出題者がへぼなだけ。
仕様を正確に記述する訓練はコーディングの訓練の後に来るべきなのに、それが逆になっているというのは、>>900 のせいというよりは、教育業界全体がおかしい。
そして、それを >>900 に八つ当たりして納得している我々にも問題があるだろう。

でも >>900 はテンプレートくらいは読もうね。

911 :デフォルトの名無しさん:2010/05/23(日) 18:36:58
[1] プログラミング
[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 ・・・ 
みたいに入ればいいです
文字列ではなく数字で収納したいです

お願いします

912 :900:2010/05/23(日) 18:47:47
すみません、次から気おつけます

913 :デフォルトの名無しさん:2010/05/23(日) 19:11:15
#include <stdio.h>
#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]);
}



914 :デフォルトの名無しさん:2010/05/23(日) 19:32:26
>>912
とりあえず現状では問題がよくわからないのは事実ですので、 >>1 を読んで書き直してみてはいかがでしょうか。

915 :900:2010/05/23(日) 19:34:36
はい

916 : ◆/91kCCQXBo :2010/05/23(日) 19:38:24
>>907 #include <stdio.h>
#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)は変更してないので省略

917 :デフォルトの名無しさん:2010/05/23(日) 19:46:02
>>911

なぜ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);
}

918 : ◆/91kCCQXBo :2010/05/23(日) 19:46:14
// スタートとゴールは枡に含めない場合。あと、バグ修正。
if(x != 10)
course[x] = '_';
else [
printf("クリアだお!\n");
break;
}

919 :917:2010/05/23(日) 20:13:13
if文間違ってたので修正

if (0 < num || num < 9) {
→ if (num < 0 || 9 < num) {

920 :917:2010/05/23(日) 20:15:29
修正したのも間違ってるし(´д`)

if (0 < num || num < 9) {
→ if (num < 1 || 9 < num) {

921 :デフォルトの名無しさん:2010/05/23(日) 20:54:00
[1]授業単元:プログラミング
[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]なし

よろしくおねがいします。

922 :デフォルトの名無しさん:2010/05/23(日) 21:19:57
>>913
>>917

ご丁寧にありがとうございました
解決しました

923 :デフォルトの名無しさん:2010/05/23(日) 21:20:40
[1]授業単元:プログラミング
[3]環境:windows,C言語
[4]期限:無期限

コンソールです。エンターキーを押せば次の処理に進めるにはどのようにすればいいのでしょうか?

scanf(" ");
gets(a);
a=getchar();

とかにしてもダメでした
すぐに次の動作に進んでしまいます

よろしくお願いします。

924 :デフォルトの名無しさん:2010/05/23(日) 21:27:40
getchar();

925 : ◆QZaw55cn4c :2010/05/23(日) 21:27:52
>>752
>>852
http://codepad.org/hAVmxBO1
この手の問題は、意外に回答がつかない。

926 :デフォルトの名無しさん:2010/05/23(日) 21:29:24
>>923
多分ストリームに文字列が残ってるのが原因
getchar();
getchar();
と2つ書けば大丈夫のはず

927 :デフォルトの名無しさん:2010/05/23(日) 21:33:05
>>925
「最初は」の人はいつも
公式に当てはめるだけのつまらない問題だからでしょ

928 :852:2010/05/23(日) 21:33:44
>>925

>最初は
>#include <iostream>
>using namespace std;で始まります
>出力はcout 入力はcinです

これが読めないのかカス

929 :デフォルトの名無しさん:2010/05/23(日) 21:35:16
>>923
入力処理後に rewind(stdin)

930 :デフォルトの名無しさん:2010/05/23(日) 21:42:10
>>923
printf("1\n");
getchar();
printf("2\n");
これで1が表示されたあとエンターおせば2が表示される

printf("1\n");
getch();
printf("2\n");
こうするとgetchar()と違ってエンター入力したあと改行が入らない

931 :デフォルトの名無しさん:2010/05/23(日) 21:43:49
>>929
環境依存の命令使うな

932 :デフォルトの名無しさん:2010/05/23(日) 21:44:27
>>925
ありがとうございます。でもprintfとかstdio.hとかって使わないんですよね…

933 : ◆QZaw55cn4c :2010/05/23(日) 21:45:36
>>852
http://codepad.org/gXnNbzQx
なお、この方法では、最初に与える連立方程式によっては、解けない場合があります。

>>927
そんなもんですかね。公式に当てはめるだけの問題のほうが回答がつきやすい気がしますが。
代数の問題は回答がつきにくいのはどうしてでしょうかね。

>>928
ご指摘感謝。

934 :デフォルトの名無しさん:2010/05/23(日) 21:57:22
>>928
過去ログ2,3スレ読んでみ


935 :デフォルトの名無しさん:2010/05/23(日) 21:58:56
>>934
>>932

936 :900:2010/05/23(日) 22:43:07
[1] 情理工 補
[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一通りやりました
  

937 :828 ◆QZaw55cn4c :2010/05/23(日) 23:36:27
>>832
いや、いいところまでいっている。
仮定より
f(0) = 0
がいえて、
>>832 の変形より
f'(x)≡f'(0) (∀x∈R)
もなりたつ。あとは x = 0 のまわりで f'(x) が存在するかどうかを、問題であたえられるか証明してしまうか、なんだが、
f'(0) が存在することを証明できないでいる。できるのかできないのか?
すれ違いですみませぬ。

938 :デフォルトの名無しさん:2010/05/23(日) 23:36:51
>>933
ありがとうございます
関数の渡しは何行目辺りで使われていますか?

939 :デフォルトの名無しさん:2010/05/23(日) 23:55:58
>>938
関数の渡しはつかっていません。使わなくてもできる問題なので。
どうしてもいりますか?

940 :デフォルトの名無しさん:2010/05/24(月) 00:08:46
>>939
何か、関数の渡しを習ったので使うと言われたんです…
swapとかそういうのですかね…?

941 :デフォルトの名無しさん:2010/05/24(月) 00:44:08
>>940
どうしてもいるんだったら、
http://codepad.org/E061iAYs
としておきますね。4行目と35行目でつかっています。

942 :デフォルトの名無しさん:2010/05/24(月) 02:33:52
[1] プログラミング入門
[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というのはわかったのですがそれをうまく表示できません。
よろしくお願いします。

943 :デフォルトの名無しさん:2010/05/24(月) 02:55:10
>>942

#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;
}


944 : ◆QZaw55cn4c :2010/05/24(月) 03:03:33
>>942
http://codepad.org/izYkyrrm

945 :デフォルトの名無しさん:2010/05/24(月) 10:08:17
>>943
>>944
ありがとうございます
助かりました

946 :デフォルトの名無しさん:2010/05/24(月) 17:21:49
>>900
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10615.txt

上位x番のxをどのタイミングで入力するのかからなかったからoutの引数につけた。
関数オブジェクト使ってみたけど、使い方がこれであっているのか自信ない。
正常系しかテストしてないし、エラーチェックとかも省いてるからそこらへんはご自分で。
アルゴリズムも改良の余地がありそう。

947 :デフォルトの名無しさん:2010/05/24(月) 21:38:40
>>946
すげえな。一体何年ぐらいC++やってるの?

948 :デフォルトの名無しさん:2010/05/24(月) 21:52:22
Cっぽい書き方しかできないんで、参考になる++

949 :900:2010/05/24(月) 22:33:00
ありがとうございます〜

950 :946:2010/05/24(月) 22:43:09
C++は4年くらい、STLはここ1年くらいで「標準テンプレートライブラリによるC++プログラミング」とかで覚えた。
あと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_;}」はまったく使っていないので削除

951 :946:2010/05/24(月) 22:55:51
まだあった…
ParserOutクラスのoperator()定義内の最後の「return std::auto_ptr<Action>(new ActionError());」は
「return std::auto_ptr<Action>(NULL);」です。

あと、inとかの後ろにスペースいれなくても動いてしまうけど、もう直すの面倒くさいから後は適当にがんばってね>>900

952 :947:2010/05/24(月) 23:19:13
>>950
thx しかし専門書は高いな

953 :デフォルトの名無しさん:2010/05/25(火) 02:54:06
しかし、お疲れ様。

954 :デフォルトの名無しさん: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から理論的に説明せよ。

お願いします。

955 :デフォルトの名無しさん:2010/05/25(火) 12:31:04
"4Byte machine" から意味がわからん。 "MemoryのStructureから" っていうのも謎。

956 :デフォルトの名無しさん:2010/05/25(火) 12:45:25
倍精度は 64 ビットでいいですかね。(IEEE754)
仮数部は 52ビット + 1 = 53 ビット相当で表現されるから
2^53 = 10^15.95すなわち 少なくとも10進16桁まで表現できる。

957 :デフォルトの名無しさん:2010/05/25(火) 13:13:33
最大数を10進数表示したときの桁数を聞かれてるんじゃないのかなあ

958 :デフォルトの名無しさん:2010/05/25(火) 13:17:27
>>861全部のコードを書いていただけませんか?

959 :デフォルトの名無しさん:2010/05/25(火) 14:54:03
>>958
関数を作れって問題なんだから>>861だけでいいだろ

960 :デフォルトの名無しさん:2010/05/25(火) 15:48:07
#include <stdio.h>
14
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 }
このプログラムに注釈つけてください

961 :デフォルトの名無しさん:2010/05/25(火) 16:14:46
958 :デフォルトの名無しさん :2010/05/25(火) 13:17:27
>>861全部のコードを書いていただけませんか?
>>958
>>858 をお忘れなく

962 : ◆dHgBvcqH3c :2010/05/25(火) 16:39:34
[1] 授業単元:プログラミング応用
[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日まで


よろしくおねがいします

963 :デフォルトの名無しさん:2010/05/25(火) 17:12:47
>>962
http://codepad.org/o7Y8nJj2

水田先生にチクっちゃうぞ☆

964 :「水田です」:2010/05/25(火) 17:23:50
#include <stdio.h>

/* 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() の戻り値
}

965 :デフォルトの名無しさん:2010/05/25(火) 18:12:15
>>961
要件満たしてないからどうでもいい

966 :「水田です」:2010/05/25(火) 18:59:44
条件
printf("行列AとベクトルBの積は次の通りです\n");
linear_trans(a, b, c);
for ( i = 0 ; i < COLUMN ; i++)
  printf("%8.3f\n", c[i]);

967 :デフォルトの名無しさん:2010/05/25(火) 19:03:38
>>966
なんで質問者を刺戟する様な名前をわざわざ使うの?
質問しづらくなるだろ。

968 :デフォルトの名無しさん:2010/05/25(火) 21:11:29
>>962が無防備すぎてつい
それに回答する側としては質問しづらくなっても関係ないしなあ

969 :デフォルトの名無しさん:2010/05/25(火) 21:14:37
なんという自分勝手

でも質問者ももう少しひねって出して…

970 :デフォルトの名無しさん:2010/05/25(火) 21:48:34
>>967
質問スレじゃないから。

971 :954:2010/05/25(火) 22:31:54
>>956>>957
ありがとうございます。
いろいろな人に聞いたのですが,>>956がどうもあってるみたいです。
>>957はその10進法であらわした数字を超えたらoverflowってことですかね?

972 :デフォルトの名無しさん:2010/05/25(火) 22:58:19
>>959
すみません、全部のコードを知りたいのです。もちろん、>>855の条件を使って…

973 :デフォルトの名無しさん:2010/05/25(火) 23:15:54
スレを最初から最後まで読めば全部だと思う。

974 :デフォルトの名無しさん:2010/05/25(火) 23:44:19
>>972
この関数を使って正しく動作するものを作ってみなさい、とでも先生に言われたの?

975 :デフォルトの名無しさん:2010/05/26(水) 00:06:01
>>921
http://codepad.org/no01QoR0

976 :デフォルトの名無しさん:2010/05/26(水) 00:09:54
[1] 授業単元:情報処理
[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

よろしくお願いします。

977 :975 ◆QZaw55cn4c :2010/05/26(水) 00:26:36
>>921
http://codepad.org/OVk5XcXl
便乗で質問なんですが、
コピーコンストラクタを
Matrix &Matrix::operator=(const Matrix &a) { }
とするとコンパイルできるのですが、教科書のとおりに
Matrix &Matrix::operator=(Matrix &a) { }
とすると、
Matrix::operator=(Matrix) に一致するものがみつからない(BCC32)
というエラーがでてコンパイルできません。
どうしてなのでしょうか

978 :デフォルトの名無しさん:2010/05/26(水) 01:19:22
>>977
それ、コピーコンストラクタじゃなくてコピー代入演算子。
で、エラーになるのはテンポラリで非 const 参照を初期化できないという規則があるから。

979 :デフォルトの名無しさん:2010/05/26(水) 04:13:40
>>974
はい、そうです…。よろしくお願いしますm(__)m

980 :デフォルトの名無しさん: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;
}

981 :デフォルトの名無しさん:2010/05/26(水) 07:44:36
次スレ立てます

982 :デフォルトの名無しさん:2010/05/26(水) 07:45:46 ?S★(522522)
次スレ立てました
C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274827528/

983 :デフォルトの名無しさん:2010/05/26(水) 07:50:27
■■■■■■■■
 ■■■■■■■■
■■■■■■■■


984 :デフォルトの名無しさん:2010/05/26(水) 09:31:30
[1] 授業単元:
[2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。
そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。


[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: cc
 [3.3] 言語: C
[4] 期限: 5月27日 


985 :デフォルトの名無しさん:2010/05/26(水) 09:34:31
984の者です。 間違えて送信してしまったので追記します。
その他の制限: do whileまでしか教えてもらってないのでそれでお願いできますか

986 :デフォルトの名無しさん:2010/05/26(水) 11:21:08
>>984
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10622.c

987 :デフォルトの名無しさん:2010/05/26(水) 12:48:52
From: [758] デフォルトの名無しさん <sage> Date: 2010/05/26(水) 09:29:56
[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は引き続き黙ってていいから


988 :デフォルトの名無しさん:2010/05/26(水) 13:28:27
あらあら。向こうで時間みてびっくりしたの俺だけど、転載乙

989 :デフォルトの名無しさん:2010/05/26(水) 22:52:08
[1] 授業単元:プログラミング演習
[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日 

お願いします

990 :デフォルトの名無しさん: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;
}

991 :デフォルトの名無しさん:2010/05/26(水) 23:51:52
>>979
へぇ。大変だね。
回答に加えていくつかツッコミ入れたけどそれに対してノーリアクションだったなぁ、と思うのと、
多分そのツッコミ部分を理解しているかどうかを確認する為にその出題されたんだろうね。

スルーせずに先生に突っ込みを先に入れていれば勝てた勝負なのにな。

992 :デフォルトの名無しさん:2010/05/27(木) 00:01:15
>>990
初期化してないのと添え字がオーバーしてた
http://codepad.org/ZsuxxDc6

993 :デフォルトの名無しさん:2010/05/27(木) 01:00:47
[1] 授業単元:Cプログラミング演習
[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] その他の制限:なし

よろしくお願いします

994 :デフォルトの名無しさん:2010/05/27(木) 01:13:12
>>993
http://ideone.com/5FxGH

995 :デフォルトの名無しさん:2010/05/27(木) 01:17:17
>>989
1だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10623.txt

996 : ◆QZaw55cn4c :2010/05/27(木) 02:08:50
>>989
2だけ
http://codepad.org/cuj3eeQe

997 :デフォルトの名無しさん:2010/05/27(木) 02:59:24
>>978
ありがとうございます。

998 : ◆QZaw55cn4c :2010/05/27(木) 04:03:07
>>921
http://codepad.org/UubGjRqS
引数なしのコンストラクタを使えるようにしました。

999 :デフォルトの名無しさん:2010/05/27(木) 10:15:28
行列の積 最近はやってるのか。
>>855
>>921
>>990

1000 :デフォルトの名無しさん:2010/05/27(木) 11:22:39
続く

C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274926862/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

320 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)