C言語なら俺に聞け(入門編)Part 70at TECH
C言語なら俺に聞け(入門編)Part 70 - 暇つぶし2ch1:デフォルトの名無しさん
10/09/26 17:36:51
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 69
スレリンク(tech板)
★過去スレ
URLリンク(makimo.to:8000)
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 140代目
スレリンク(tech板)
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2:デフォルトの名無しさん
10/09/26 17:39:40
                     __
                ,,r‐''"~~´:::::::::::::゙~''''‐-、,
              ,,r''´::::::::::::::::::::::::::::::::::::::::::::::::::゙丶、
            /:::::::::::::::::::::::::::::,r、::::::::::::::::::::::::::::::::\
           / ......::::::::::::ィ::::::::// ヽ:::::ト、::::::::::::::::........ヽ
           /:::::::::::,r::::::/ |:::::/ /  ゙、::l ヽ:::::::::、::::::::::::::゙、
           /:::::::::::/i::::/,,,,l:::/ /   ヽト‐-、:::::|',::::::::::::::::i
          i::::::i:::::/'|::/  |/  /     !  ヽ::|ヽ:::::i:::::::::l
         l:::::::|:::/ .i/              ヽ:| ゙、::::i:::::::::|
           |:::::::|/                 ゙'! ヽ,!:::::::::|
         |::::::;;;;i -‐''''''"""~~     ~~"""゙'''''''''‐ |;;;;::::::::|
          |::::::;;;;;|                        |;;;;:::::::::|
        |::::::::;;;;l                    l;;;;:::::::::|
         |:::::::;;;;;|                       |;;;;::::::::|
     _,,,r-┴、::;;;;ヽ、                   ノ;;;:::::-‐-、
    / 、  、 ヽヽ-,;;;゙ヽ、      ヽフ       ,,,イr/´/ ,r  ゙'ヽ、 聞いてやーー
 ̄ ̄\,,,ヽ、,,i、,,,i、ノ' ̄ ゙゙̄'''‐- ...,,,,,,,,,,,,,,,,,,.... -‐'''~  ̄(,,しL,/,,,r'~,,,-‐' ̄ ̄


3:デフォルトの名無しさん
10/09/26 18:13:47
VC++でC99を使う方法おしえて

4:デフォルトの名無しさん
10/09/26 18:18:54
VCにもいろいろあるでよ

5:デフォルトの名無しさん
10/09/26 18:20:34
wikipediaごときだと↓みたいになってる。
URLリンク(ja.wikipedia.org)
...Visual C++のコンパイラは、C, C++, C++/CLIのソースコードを入力に受け付ける。C言語規格に関しては、Visual C++ 9.0 (2008) SP1の時点でANSI C89 (ISO C90, ISO/IEC 9899:1990) 対応[1]であり、C99には対応していない。...

6:デフォルトの名無しさん
10/09/26 18:22:28
>>5
そこをなんとか対応できませんか?

7:デフォルトの名無しさん
10/09/26 18:23:48
おバカさんですか?バージョン聞かれてないかい?

8:デフォルトの名無しさん
10/09/26 18:27:02
>>7
すいませんでした
VC++ 2010 Express使ってます

9:デフォルトの名無しさん
10/09/26 18:30:50
こんなことかいてるところがあるね
URLリンク(d.hatena.ne.jp)

10:デフォルトの名無しさん
10/09/26 18:31:01
C99がCのスタンダードになることは永遠にない

11:デフォルトの名無しさん
10/09/26 18:31:48
VC++はC++専用、もっと言えばWindowsアプリ専用と考えた方がいいよ。
CコンパイラとしてはC95にもC99にも対応してない古臭い仕様だから。

12:デフォルトの名無しさん
10/09/26 18:33:32
C99対応だと何が嬉しいの

13:デフォルトの名無しさん
10/09/26 18:33:33
そうなんですか?CをコンパイルするときはBCCのほうがいいでしょうか?

14:デフォルトの名無しさん
10/09/26 18:36:45
BCCはもっと古いが、まあ準拠度で言えばC89だからVC++と同等ではある。

15:デフォルトの名無しさん
10/09/26 18:41:23
あした学校の授業でプログラミングあるのでC89あるか先生に聞いてみます

16:デフォルトの名無しさん
10/09/26 18:54:33
BCCって今でも無料版あるの?

17:デフォルトの名無しさん
10/09/26 18:59:10
URLリンク(blogs.msdn.com)
こっちのコメント欄でのやりとりでも、
C99欲しいって声はあんまりないからやらないんだって言っているね。

18:デフォルトの名無しさん
10/09/26 18:59:26
今は私立の小学校でもプログラミングの授業があるらしいな

19:デフォルトの名無しさん
10/09/26 19:01:05
プログラミングの仕事がしたいんですけど未経験で30歳はキツイですか?

20:デフォルトの名無しさん
10/09/26 19:02:59
26以上は実務経験ないとキツイっていうか無理

21:デフォルトの名無しさん
10/09/26 19:16:26
まあ会社によるけど厳しいよね
今の仕事があるなら無理に転職する必要はない

22:デフォルトの名無しさん
10/09/26 19:35:55
暗号化はこっち

■暗号技術【ROUNDsurea】■
スレリンク(tech板)

23:デフォルトの名無しさん
10/09/26 20:28:47
てすと

24:デフォルトの名無しさん
10/09/26 20:41:58
暗号は今一つ盛り上がりに欠ける

25:デフォルトの名無しさん
10/09/26 20:47:56
暗号に限らずアルゴリズム関連のスレは既存のものを使ってればいいだけだから
今更議論することも少ない

26:デフォルトの名無しさん
10/09/26 21:01:19
新型は要らない!という話?

27:デフォルトの名無しさん
10/09/26 21:08:46
いや新型は欲しい、
既存型の複製を作ってもなあ・・・って話

車輪の再発明は学習には必要だけども、
他人にとっては今更って思うから盛り上がりに欠ける

28:デフォルトの名無しさん
10/09/26 21:13:08
暗号化ならとりあえずカメリア使っとけ

29:デフォルトの名無しさん
10/09/26 21:18:06
わざわざNTTに特許料払うのか?

30:デフォルトの名無しさん
10/09/26 21:18:57
Code Based Cryptographyがいい!

31:デフォルトの名無しさん
10/09/26 21:45:06
ひゅ~ひゅ~

32:デフォルトの名無しさん
10/09/26 21:46:21
vc++限定の話です。
#pragma intrinsicっていうプリプロセッサ指令あるじゃないですか?

これって数学の関数の処理を最適化して高速化するもんですよね?
たとえば、sin,cos,atan2を高速化したければ、

#pragma intrinsic(sin,cos,atan2)ってかけばOKなんですか?

33:デフォルトの名無しさん
10/09/26 21:59:08
>>24
まともにレスできる者の絶対数が少ないのと
2ちゃんで発言するかどうかの関門でまた厳しいふるいがあるからな

34:デフォルトの名無しさん
10/09/26 21:59:09
>>32
>>1

35:デフォルトの名無しさん
10/09/26 22:04:10
C の「高級アセンブラ」としての使命が問われている、根本的な問題だと思うが

36:デフォルトの名無しさん
10/09/26 22:04:40
>>33
暗号化技術そのものは秘密でもなんでもないわけだから
べつに2ちゃんで話そうが駅のホームやスターバックスで話そうがどうってことないはず。
つまりはまさに暗号についてわかってる奴が少ないって事だろうね。

37:デフォルトの名無しさん
10/09/26 22:06:18
>>32

>>1
>★C++言語については避けてください。C++対応明記スレへどうぞ

38:デフォルトの名無しさん
10/09/26 22:13:46
>>36
理想論に異を唱えるつもりはないが
スターバックス怖いぞ

39:デフォルトの名無しさん
10/09/26 22:15:25
オリジナル暗号実装してて速度でGPGに勝ったんだけど、OpenSSLに負けてる。

40:デフォルトの名無しさん
10/09/26 22:19:09
問題は強度だ

41:デフォルトの名無しさん
10/09/26 22:25:35
早いより硬いほうが女性も喜ぶよね

42:デフォルトの名無しさん
10/09/26 22:40:43
勝ち負けを論じることができるレベルのアルゴリズムでも実装でもなかった。

43:デフォルトの名無しさん
10/09/26 22:44:47
>>38,39←ほらね、こういう暗号とはどういうものなのかという初歩を知らない奴はこういうリアクション。
2ちゃんのプログラムスレでもこのレベルだからまぁ、発展的な話なんて無理と言えば無理。

44:デフォルトの名無しさん
10/09/26 22:46:27
ニヨニヨ

45:デフォルトの名無しさん
10/09/26 22:49:54
>>38
暗号化のアルゴリズムってのは本来、秘密にするべきものではなく
世界中の暗号学者にそのアルゴリズムの詳細仕様をメールで送っても
ゴールデンタイムのTV放送で全国ネット、世界中継で読み上げてもおkなもんなのだよ。
そうやってアルゴリズムを誰もが知っていてもなお、
解読するのに実質不可能と思えるくらいの時間を要するものを
使用に耐えうる暗号と言う。

46:デフォルトの名無しさん
10/09/26 22:58:49
俺の理解では鍵交換した後は対称鍵で暗号化するもんだと思ってた。
gpgにせよopensslにせよその暗号化アルゴリズムは強度と速度から適切なものを選択
するものであり、どのアルゴリズムをどう使ったか含めて言わないあたり院生ってのも
ちょっと怪しいなと思った。

47:デフォルトの名無しさん
10/09/26 23:03:51
ぶっちゃけさJavaでアンドロイドアプリ開発したいんすよ
てゆーかiphoneがObjective-Cで開発みたいな?
だから初めての言語はC#かJavaかCどれを学習したらいいんですか?
ぶっちゃけトークでよろしく!

48:デフォルトの名無しさん
10/09/26 23:04:04
>>45
ケルクホフスの原理は必須ってわけでもない
そうあるべきって主張があるだけ

現代においてもなお、クローズドな仕様・実装のほうが
より機密性が高くなるとする立場は存在する
典型例がNSAで、国家機密に使われる非公開暗号を用意しているらしいし

49:デフォルトの名無しさん
10/09/26 23:05:09
>>47
アンドロイドはJAVAでいいでしょ

50:デフォルトの名無しさん
10/09/26 23:06:06
>>47
Javaでアンドロイドアプリ開発したいんなら、Javaだろう
他の言語を学習する理由がどこにある

51:デフォルトの名無しさん
10/09/26 23:08:16
おれまだ中1なんっすよ
やっぱり初めの言語は大事かなって思ってるわけっすよ


52:デフォルトの名無しさん
10/09/26 23:08:59
中一だと順番違うの?

53:デフォルトの名無しさん
10/09/26 23:13:49
黒客には陽と陰がいてそれは
自らの発見で名声を欲しがる者と
自らの発見そのものに満足する者がいる

暗号論において怖いのは後者だということは論を待つまい

54:デフォルトの名無しさん
10/09/26 23:15:00
>中一

なか はじめ


55:デフォルトの名無しさん
10/09/26 23:16:05
プログラミングの最初なんてfor とか 変数 とか 関数が理解できればどれも大して変わらないだろ。
俺はjavascriptから入ったから型が最初は無かった。そういや、JSやる前に授業でRやったけど、
さっぱり身につかなかったな。目標持って自発的にやれよ。

56:デフォルトの名無しさん
10/09/26 23:32:57





57:デフォルトの名無しさん
10/09/26 23:52:36
同じバイナリが違う環境で動作するときにアラインメントの取り方だけが違うっていう場合はあるの?

58:デフォルトの名無しさん
10/09/26 23:55:55
ないって保証が悪魔の証明なんだよ

59:デフォルトの名無しさん
10/09/27 00:00:11
ほっ
ほっ

60:デフォルトの名無しさん
10/09/27 01:35:11
300Mのファイルの読み書きだけで16秒もかかるんですが、OpenSSL
は暗号化の処理を入れても10秒位しかかかりません。
どうすればファイルIOを早く出来ますか?

61:デフォルトの名無しさん
10/09/27 01:37:28
もういい加減消えろ

62:デフォルトの名無しさん
10/09/27 01:47:41
つメモリマップドファイル

63:デフォルトの名無しさん
10/09/27 09:23:43
while((read_size=fread(buff,1,SIZE,fq)))を
while((read_size=fread(buff,4,SIZE,fq)))とするとファイルの4分の1
しか書き込めません。なぜですか?

64:デフォルトの名無しさん
10/09/27 09:31:05
>>63
fread()の戻り値は、第2パラメータで指定した単位で何個読み取れたか。
つまり、実際に読めたのは(戻り値*第2パラメータ)[bytes]になる。

65:デフォルトの名無しさん
10/09/27 09:53:41
>>63
そもそも読み込みしかしてないだろ

66:デフォルトの名無しさん
10/09/27 10:02:03
fwriteの書き込みバイト数が1のままだった。4バイトにすれば早く
なるかと思ったけどならなかった。

67:デフォルトの名無しさん
10/09/27 10:09:51
OpenSSL調べてるけど、特別なこと何もしてないみたいだし・・・
何であんなに早いの?

68:デフォルトの名無しさん
10/09/27 10:11:57
コツは、ファイルサイズを取得する関数でターゲットとなるファイルのサイズを取得し、
バッファのリミット定数と比較し、OKならファイルサイズ分がばっと一括で読んじゃうのが一番速い方法。
これならHDDへの読込みアクセスが一回で済む
内容を分割したけりゃその後に分割(こうすればメモリ上のアクセスなので数段速い)

69:デフォルトの名無しさん
10/09/27 10:13:00
具体的なソースがほしいです

70:デフォルトの名無しさん
10/09/27 10:13:44
>>69
甘ったれんな

71:デフォルトの名無しさん
10/09/27 10:20:58
バッファサイズと読み込み時間って関係あるんですか?
増やしてもあまり変わらなかったです。

72:デフォルトの名無しさん
10/09/27 10:28:47
ディスクアクセスを何回行なうか、が時間に大きく関わってくるとは思わね?
1回と10000回ディスクアクセスするんだととっちの方が時間がかかる?

73:デフォルトの名無しさん
10/09/27 10:29:37
頭でコード書いてるバカはほっとけ

74:デフォルトの名無しさん
10/09/27 11:05:17
またずいぶんレベルが下がったな。
前スレでは読み込みのブロッキング中に別スレッドで回せということだったと思うんだが。


75:デフォルトの名無しさん
10/09/27 11:05:29
女は子宮で書くのよ

76:デフォルトの名無しさん
10/09/27 11:05:38
高速化に拘るのは結構だが、せめてスレタイ読んでから書き込もうな。
高速化/効率化は明らかにスレ違いな話題だし、ここで聞いても有意な回答は望めないよ。

77:デフォルトの名無しさん
10/09/27 11:16:46
>読み込みのブロッキング中に別スレッドで回せ

それもうC++の領域じゃね?
Cの仕様そのものがもう時代遅れで300MBなんてファイルを読み込むことを想定していないわけだし。

78:デフォルトの名無しさん
10/09/27 11:31:47
ファイルサイズの取得

MFC CFileFindクラス
.net FileInfoクラスのLengthプロパティ

79:デフォルトの名無しさん
10/09/27 12:03:17
つまり、C++は標準規約でスレッドに対応してると、そう仰りたいわけか。

80:デフォルトの名無しさん
10/09/27 12:10:40
いいえ

81:デフォルトの名無しさん
10/09/27 12:29:02
>>74
Cで別スレッドで回すってどうやんの?

82:デフォルトの名無しさん
10/09/27 12:31:41
timidityやtmidi95やgrooveみたいにソフトウェアでMIDIエミュレートするにはどうやるんですか?難しいですか?

83:デフォルトの名無しさん
10/09/27 12:34:08
>>81
質問者がcygwinと言っているのだから、pthreadでも使えばいいんじゃない?

84:デフォルトの名無しさん
10/09/27 12:38:04
>>83
でも結局、数バイトづつ読むとなると、読み終わるまで親は待たないといけなくなるよね、という矛盾

85:デフォルトの名無しさん
10/09/27 12:48:21
ふっほっはっ

86:デフォルトの名無しさん
10/09/27 12:50:28
>>82
MIDIで指定された音階で、指定された楽器の音を
指定された強さで鳴らすだけ。楽器の音データは
楽器の音を録音して使用する。
同時に複数音を出さなくて良いなら、
プログラムとしては大変ではない。

データを用意するのが大変なのと、
実用的なスピードで音の合成するのが大変。


87:デフォルトの名無しさん
10/09/27 12:52:47
>>82
んっひっ

88:デフォルトの名無しさん
10/09/27 13:46:48
で?300MBのファイルを高速で読むにはどうすんの?>>83

89:デフォルトの名無しさん
10/09/27 13:50:29
別スレッドにしてもファイル読み終わるまで親スレッドが待つことになるだけでちっとも速くならないよー。

90:デフォルトの名無しさん
10/09/27 13:54:12
>>86
けっこうたいへんあんんですね
ソフトシンセサイザーで一発ぼろ儲けをしてる人はハッカー

91:デフォルトの名無しさん
10/09/27 14:04:29
>>87
けっこうたいへんあんんですね
ソフトシンセサイザーで一発ぼろ儲けをしてる人はハッカー

92:デフォルトの名無しさん
10/09/27 14:18:31
>>88
けっこうたいへんあんんですね
ソフトシンセサイザーで一発ぼろ儲けをしてる人はハッカー

93:デフォルトの名無しさん
10/09/27 15:08:18
ソフト側は素直に普通に作っとけ。
アクセスを早くとか、そういうのはハード側に求めるべきだ。


94:デフォルトの名無しさん
10/09/27 15:19:46
>>88>>89
前スレを全くみていないのね。
スレッドを使うと読み込みを速くできるなんて一言も言っていない。
読み込みのブロッキング中に別スレッドで暗号化できるという話をしている。

が、質問主はマルチスレッドが大変と分かったらしく、
とにかく読み込み時間を速くすることに絞ったようですな。

95:デフォルトの名無しさん
10/09/27 16:19:41
URLリンク(sky.geocities.jp)
だから私を見て!

96:デフォルトの名無しさん
10/09/27 16:45:44
>>95
URLリンク(codepad.org)
私のことも見て!


シングルスレッド
$ time ./a.exe -s DATA.bin S.bin
real 0m35.030s
user 0m19.155s
sys 0m0.624s

マルチスレッド
$ time ./a.exe -m DATA.bin M.bin
real 0m25.098s
user 0m18.906s
sys 0m0.562s

データは100MBのものを使用した。
注意:読み込みが速いわけではない。
ブロッキング中に別の処理をしているだけ。

昔遊んでたコードを元に適当に組んだ。
ちゃんとconditionとか使えばもっといい感じになると思う。

97:デフォルトの名無しさん
10/09/27 17:01:33
これはC言語?何してるのかよくわからない・・・
因みにバッファのサイズを262144にしたら最高速度になった。
$ time ./perm 3 3.perm

real 0m12.137s
user 0m0.015s
sys 0m0.016s

$ time ./perm 3 3.perm
real 0m6.006s
user 0m0.000s
sys 0m0.046s

かなりOpenSSLの性能に近づいた感じ。(気のせい)

98:デフォルトの名無しさん
10/09/27 17:15:07
こんな凄い事出来るのにプロじゃないなんて・・・

99:デフォルトの名無しさん
10/09/27 17:49:23
>>96
対して速くなってないね。

>>97
つまり>>68,72っぽい方法だってことだよね。
それが正解

100:デフォルトの名無しさん
10/09/27 18:11:27
>>96みたいな唯我独尊・自画自賛プログラマってほんと、プログラマなんてやめちゃえばいいのに。
どうせろくでもないコード乱造してるくせに「仕様です」とか言い張って改善する能力もない、世界のダニ。

101:デフォルトの名無しさん
10/09/27 18:28:29
setbuf使って、システムコールの回数を減らしてみるとか

102:デフォルトの名無しさん
10/09/27 18:29:30
setbufferのほうだった

103:デフォルトの名無しさん
10/09/27 18:38:14
>>101
フリーズしたようになる?

104:デフォルトの名無しさん
10/09/27 18:44:16
聞く前にまず自分で試行しろ

105:デフォルトの名無しさん
10/09/27 19:45:39
汗みたけど
for(i=0;i<16;i++)
u.m[i]=buff[i+k*16];
毎回、コピーしてるここがネックじゃないかな?

106:デフォルトの名無しさん
10/09/27 19:48:44
ぬっほっ


107:デフォルトの名無しさん
10/09/27 20:52:39
どうすればいい?

108:デフォルトの名無しさん
10/09/27 20:54:04
暗号くんの嫌いなポインタを使うんだよ

109:デフォルトの名無しさん
10/09/27 20:55:29
キャストでやる手もあるかな

110:デフォルトの名無しさん
10/09/27 20:55:47
早くなるの?

111:デフォルトの名無しさん
10/09/27 20:57:26
どう考えてもディスクから読み込む必要ないよな
聞いてるやつも教えてるやつも同一人物としか思えなくなった

112:デフォルトの名無しさん
10/09/27 20:58:18
SSE2命令でループをベクトル処理してくれる機能があるんだけど、
それよりも効果がありますか?

113:デフォルトの名無しさん
10/09/27 21:00:01
ひっふっ

114:デフォルトの名無しさん
10/09/27 21:00:10
別人です

115:デフォルトの名無しさん
10/09/27 21:06:03
書き方が悪くて、128ビットアクセスになってないみたいだからね

116:デフォルトの名無しさん
10/09/27 21:07:17
今日はもう寝るので明日までに解決しといてください

117:デフォルトの名無しさん
10/09/27 21:16:11
もうこいつに反応するやつは同一人物でいいよ。俺含めて。

118:デフォルトの名無しさん
10/09/27 21:26:43
昔のベーシックみたいな書き方してるからかな、反応しちゃうのは

119:デフォルトの名無しさん
10/09/27 21:31:48
いいですよ

120:デフォルトの名無しさん
10/09/27 21:32:41
工業高生なんだが
10 main()
20 {
30 printf("ハジメマシテ\n");
40 }
こんな行番号まで入れてポケコンで頑張ってるんだけど
今のところこんなことしかできないんだけどどこから頑張ればいいの?

121:デフォルトの名無しさん
10/09/27 21:34:14
嘘つきには教えない

122:デフォルトの名無しさん
10/09/27 21:34:31
ポケコンだと派手なコトできないから
数値計算系のやつでもがんばってみたら?

123:デフォルトの名無しさん
10/09/27 21:34:40
すいません、intも一応使えます。

124:デフォルトの名無しさん
10/09/27 21:35:31
工業高生ねえ。。。

125:デフォルトの名無しさん
10/09/27 21:35:50
連レスすまぬ。
>>122了解したぜよ!あとifとか覚えて情報技術3級狙ってくる!

126:デフォルトの名無しさん
10/09/27 21:43:53
情報技術って情報技術検定のこと?
あれ、1級以外だとジュニアマイスターの点数稼ぎにも使えないから
受ける意味はあまりないと思う

127:デフォルトの名無しさん
10/09/27 21:46:16
>>126
部活でとあるソーラーカーレースやらその他いろいろにでてるんだが
それにでるだけでジュニアマイスターの点数がたまって危険物取扱をとるだけで
シルバーか何かになれるんだ、ごめん。

128:デフォルトの名無しさん
10/09/27 21:46:51
>>120
SHARPのPCG-850とか?
懐かしいなおい。

129:デフォルトの名無しさん
10/09/27 21:50:16
てかポケコンって今でも売ってるのか。

130:デフォルトの名無しさん
10/09/27 21:59:37
>>127
別表2、3に参加だけでOKってやつなかった気がするんだが

131:デフォルトの名無しさん
10/09/27 22:21:06
>>130
一応、成績はある程度残さないと高い得点は入らないんだけどね。
ただ、そういう先輩もいただけだから自分は無理かな。
>>128
.SHARP PC-G850VS
処理速度が速くなったせいで処理速度固定させないと
持ってる雑誌のゲームとかできないんだよね。

132:デフォルトの名無しさん
10/09/27 23:09:14
>情報技術検定
受験料安すぎと思ったら高校生向け試験なのね
オラクルマスター受けたいけどxマソは学生にゃ高すぎる・・・

133:デフォルトの名無しさん
10/09/27 23:12:33
自演注意

134:デフォルトの名無しさん
10/09/27 23:16:11
基本情報も応用情報も5000円だろ

135:791
10/09/27 23:17:17
自演


136:デフォルトの名無しさん
10/09/27 23:21:02
>>134
それは情報技術"者"検定

137:デフォルトの名無しさん
10/09/27 23:24:47
>>134
情報技術検定 != 情報処理技術者試験
基本応用とったからベンダー資格にも手をだそうかと思案中

138:デフォルトの名無しさん
10/09/27 23:25:57
高速なファイルアクセスの書き方も知らんようなヘボどもが

139:デフォルトの名無しさん
10/09/27 23:32:03
>>136>>137
知ってるけど

140:デフォルトの名無しさん
10/09/27 23:37:56
分かってねえだろks

141:デフォルトの名無しさん
10/09/27 23:44:08
>>132が情報技術検定は安いとか、オラクルは高いとか言ってるから
それなら基本や応用を受ければいいと言ってるだけ

142:47
10/09/27 23:45:01
ども47です
俺的にはさ、とりあえず自分の好きに使えるPCが今ないからさ
お金貯めて買ってからJavaやりたいみたいな
つーことで報告乙りにきた

143:デフォルトの名無しさん
10/09/27 23:55:02
>>141
基本や応用は金にならない&就職に使えない
オラクルは金になる&就職に使える

だいたい、工業高校の学生なら
基本、応用の2つぐらい普通に持ってるだろ

144:デフォルトの名無しさん
10/09/28 00:01:23
それは誤解だよ

145:デフォルトの名無しさん
10/09/28 00:06:29
>>143
ダウト

146:デフォルトの名無しさん
10/09/28 00:08:32
>>144
応用って前のソフト開発のことだろ?
俺の出身高校だとほとんどのやつが持ってたぞ

147:デフォルトの名無しさん
10/09/28 00:08:57
#include "hoge.h" と #include <hoge.h> はどう違うんですか。

148:デフォルトの名無しさん
10/09/28 00:10:46
うちの会社はどんな資格取っても手当なんか一切出ないぜ!
基本とソフ開とテクネとテクデとテクエンベとテクセキュ持ってるけどオラクルもシスコも無い俺は世間一般ではどのくらいの価値があるんだろうか

149:デフォルトの名無しさん
10/09/28 00:11:05
>>146
簡単なのに合格率が低いのは工業高校の奴らが落ちまくってるからだろ

150:デフォルトの名無しさん
10/09/28 00:11:30
応用 = 旧ソフ開 + マネジメント + ストラテジ
範囲は広がっている

151:デフォルトの名無しさん
10/09/28 00:12:03
>>147
"hoge.h" はカレントディレクトリを探して、なければインクルードパスを探す
<hoge.h> はインクルードパスだけを探す

152:デフォルトの名無しさん
10/09/28 00:13:08
第ゼロ印象に影響はある
だが、その後に化けの皮が剥がれると詐欺呼ばわりで
人事部の人も始めからそれが頭にある

使えない奴がポイされるのは資格云々のせいじゃなく本人の中身
仮に実力があっても悪用されるとこれまた危険極まりないしな

153:デフォルトの名無しさん
10/09/28 00:13:12
まあね

154:デフォルトの名無しさん
10/09/28 00:13:12
>>147
ヘッダーファイルの検索の仕方が違う

155:デフォルトの名無しさん
10/09/28 00:26:52
暗号くんへ
#if 1
{
on *dd;
dd = &buff[k*16];
u = *dd;
}
#else
for(i=0;i<16;i++)
u.m[i]=buff[i+k*16];
#endif
8ビット毎のコピーが32ビット毎のコピーになったぐらい
s5関数にも似たこと出来るとこがあったな
早くなったかは微妙

156:デフォルトの名無しさん
10/09/28 00:33:54
OpenMPかTBB使いなされ

157:デフォルトの名無しさん
10/09/28 00:36:25
300MBをごっそり1回でHDDからメモリに読むってどうやんの?

158:デフォルトの名無しさん
10/09/28 00:38:42
freadで出来るでしょ

159:デフォルトの名無しさん
10/09/28 00:38:48
300メガのリニアメモリ確保してfreadで300メガ読み込む
こうですか

160:デフォルトの名無しさん
10/09/28 00:40:14
ファイルを1回でHDDから読んじまって後の操作はメモリ上だけでやった方が圧倒的に早くね?

161:デフォルトの名無しさん
10/09/28 00:41:57
ファイルサイズ調べて、読み込む

162:デフォルトの名無しさん
10/09/28 00:42:46
読む前に空きメモリサイズも調べとくこと

163:デフォルトの名無しさん
10/09/28 01:03:03
読み込んだデータを暗号化すれば、コピーの回数が減るけど
暗号君の腕じゃ、動かなくなりそう

164:デフォルトの名無しさん
10/09/28 01:05:59
>>149
会場にたどり着けない職業プログラマが多いからだよ。

165:デフォルトの名無しさん
10/09/28 01:21:08
欠席はたしかに多いが統計資料では欠席を除いた合格率が出てる

166:デフォルトの名無しさん
10/09/28 01:27:57
会場に行くのがそんなに大変なのか?
まるでハンター試験だな・・・

167:デフォルトの名無しさん
10/09/28 02:23:12
暗号くんへ
{
on *dd;
dd = &buff[k*16];
for(i=0;i<4;i++){
c1.cc[i]=((c1.cc[i]+dd->cc[i])&f2)^c1.cc[(i+1)&0x3];
c2.cc[i]=((c2.cc[i]+dd->cc[i])&f2)^c2.cc[(i+1)&0x3];
}
}
コピーをなくしてみた。
s5の入り口と出口のコピー処理の影響が大きいみたいだよ。計4回やってるからね。

168:デフォルトの名無しさん
10/09/28 02:46:08
暗号くんへ
s5で
cc->H->GGとコピーして、Hを使ってないじゃないか

169:デフォルトの名無しさん
10/09/28 03:00:53
やっぱり、無駄なコピーがネックになってる

170:デフォルトの名無しさん
10/09/28 03:18:31
勘違いしてたとこがあったけど、
for(i=0;i<16;i++)
GG.m[a[i]]=H.m[i];
ここの処理が重いみたいだ


171:暗号
10/09/28 05:22:25
URLリンク(sky.geocities.jp)
この処理も何とかしてください。
20秒もかかります。高速化よろしくお願いします。
ご指摘の結果2秒位改善しました。無駄な処理があったんですね。
on *ddのコンパイル時に以下の警告が出ます。


172:暗号
10/09/28 05:25:34
warning C4133 '=' : unsigned char * と 'on *'の間で型に互換性
がありません。

173:デフォルトの名無しさん
10/09/28 07:36:45
病院に帰れ

174:暗号
10/09/28 07:43:40
これって高速化出来ないですか?ポインタで。
でもポインタの使い方わかりません。
unsigned char *buf[32],buff[SIZE];

for(i=0;i<32;i++)
buf[i]=buff[i+32*k];

こんな感じで。
buf= &buff[32*k];


175:デフォルトの名無しさん
10/09/28 08:05:12
>>174
出来ますよ。こんな感じで。
memcpy(buf, &buff[32*k], 32);


176:暗号
10/09/28 08:13:12
bufからbuffにデータを戻す場合はどうすればいいですか?
for(i=0;i<32;i++)
buff[i+k*32]=buf[i];

177:暗号
10/09/28 08:16:17
さらにこれは?

for(i=0;i<16;i++){
buf[i]^=d1[i];
buf[i+16]^=d2[i];
}

178:デフォルトの名無しさん
10/09/28 09:32:41
高速化する価値がない。以上。

179:デフォルトの名無しさん
10/09/28 10:17:04
昔のベーシックみたいな書き方しかわかんないみたいだから
とりあえず、入門書を読み直すところからはじめたら
答えを聞くばっかりじゃなく、自分で考えないと

180:デフォルトの名無しさん
10/09/28 10:23:59
そろそろ専用スレ立ててくれ。いい加減鬱陶しい。

181:元経験者
10/09/28 11:40:45
TURBO Cプログラミング入門という参考書は非常にタメになる。
こんなスレで聞くより一度読んでみたほうが良いよ。

182:デフォルトの名無しさん
10/09/28 12:26:29
暗号化の簡単な例を教えてください。

183:デフォルトの名無しさん
10/09/28 12:29:41
aをbに変換
bをcに変換

helloを暗号化するとifmmpになる

184:183
10/09/28 12:30:39
続き
ifmmpをbase64でエンコード
エンコードした文字列もなんかの文字に変換
そして更にエンコード
そして更に(ry

185:デフォルトの名無しさん
10/09/28 12:47:41
自分なりに勉強してたつもりなんですが、今読むならどんな本がいいのでしょうね。
fread/fwriteでこんなに性能が変わるなんて知りませんでした。
環境によってスピードが変わるんでしょうか。キャッシュの性能を除いた
単一のベンチマークとかの性能比較の方法はあるのでしょうか。
プログラムはポインタとかドレスとか出てくるともうわかりません。
わかる範囲でプログラムしてます。目標はオリジナル暗号ソフトです。

186:デフォルトの名無しさん
10/09/28 12:49:18
>プログラムはポインタとかドレスとか出てくるともうわかりません。

性能とか言ってる場合かよ

187:デフォルトの名無しさん
10/09/28 12:55:10
ストリーム暗号は簡単ですよ。乱数を発生させてXORするだけ。
問題は周期が短くならないようにすること。統計的な分布も重要。
最近ではブロック暗号でAESが標準になってる。ブロック暗号からも
ストリーム暗号は作れますが、今目指してるのはストリーム暗号の方。


188:デフォルトの名無しさん
10/09/28 13:08:53
>fread/fwriteでこんなに性能が変わるなんて知りませんでした。
>プログラムはポインタとかドレスとか出てくるともうわかりません。

Cやる気ないなら暗号スレ行けよ…

■暗号技術【ROUNDsurea】■
スレリンク(tech板)

189:デフォルトの名無しさん
10/09/28 13:12:43
暗号アルゴリズムの開発じゃなくて、実装だからここでいいだろ。
Cが分らんと言ってる奴を暗号技術に誘導すんな。

190:デフォルトの名無しさん
10/09/28 13:13:01
>>185
>目標はオリジナル暗号ソフトです。

いや、だから、まず概念としての暗号の基礎を学べよ。
そうすりゃオリジナル暗号なんてどんだけバカげたことかわかるから。

191:デフォルトの名無しさん
10/09/28 13:13:50
Cやる気あります。参考書知ってたら教えてください。
300Mを6秒で処理できるようになりました。

192:デフォルトの名無しさん
10/09/28 13:16:35
>>189
開発しようとしてね?

193:デフォルトの名無しさん
10/09/28 13:21:41
なんだたったの6秒かしょぼいな

194:デフォルトの名無しさん
10/09/28 13:24:16
暗号は大学院で研究してました。楕円曲線とか誤り訂正符号を使った
暗号とか。でもまだ一度も自分で作ったアプリがないので挑戦して
いるところなのです。広く使われているアルゴリズムでないと意味が
ないかもしれないですが、とりあえずいいのです。
開発環境はCygwinのGCCとvisual Studio 2010ですがコマンドライン
だと使い方がわからなくなりそうなのでVC++みたいにウインドウズ
ソフトにしようかと考えてます。

195:デフォルトの名無しさん
10/09/28 13:26:36
もともと20秒かかってました。

196:デフォルトの名無しさん
10/09/28 13:28:06
ソース見ますか?

197:デフォルトの名無しさん
10/09/28 13:30:58
暗号のできる中学生くらいなのかとおもってた。

198:デフォルトの名無しさん
10/09/28 13:39:30
6秒ってのはキャッシュのせいかもしれない。

199:デフォルトの名無しさん
10/09/28 13:44:09
ひとつアドバイスさせてもらうと、今の段階でいたずらに高速化を目指すより
アルゴリズム上の無駄を推敲して正しい設計、正しい実装を目指した方がいいと思うぞ。
その方が結果的に速度が上がるように思う。

参考書
「UNIXという考え方―その設計思想と哲学 」
出版社: オーム社 (2001/02)
ISBN-10: 4274064069
ISBN-13: 978-4274064067


200:デフォルトの名無しさん
10/09/28 13:50:26
すいませんやっぱりソースはお見せできません。

201:デフォルトの名無しさん
10/09/28 13:54:29
アルゴリズムの基本構造は有限体上の行列演算です。
Goppa符号のシンドロームをOFBモードでフィードバックさせて
乱数を発生させます。安全性を実験的に確認している途中です。
演算が論理演算しか使わない単純なものなのに思ったほど速度が
出なかったのが気になりました。

202:デフォルトの名無しさん
10/09/28 13:56:02
>>201
コードの書き方だろJK

203:デフォルトの名無しさん
10/09/28 13:57:16
安全性を検証するのに速度は関係ないだろう
速度なんか気にしてるといつまでも検証の方が進まないぞ
やるべきことをやれよ

204:デフォルトの名無しさん
10/09/28 14:08:15
>>201
暗号化アルゴリズムとコーディング(のアルゴリズム)を混同していると思われ

205:デフォルトの名無しさん
10/09/28 14:19:10
ポインタも使ってねーで速度でないとか、笑う

206:デフォルトの名無しさん
10/09/28 15:24:46
プログラムをビルドした日時をプログラム内で取得したいんだけど
格好いい方法ありますか?

207:デフォルトの名無しさん
10/09/28 15:25:32



208:デフォルトの名無しさん
10/09/28 15:31:31
$ cat foo.c
const char * BuildDate = BUILD_DATE;

$ gcc -S foo.c -DBUILD_DATE='"'"`date`"'"'

$ cat foo.s
.file "foo.c"
.section .rdata,"dr"
LC0:
.ascii "Tue Sep 28 15:31:02 2010\0"
.globl _BuildDate
.data
.align 4
_BuildDate:
.long LC0

209:デフォルトの名無しさん
10/09/28 15:32:28
格好よくはないな

210:デフォルトの名無しさん
10/09/28 15:32:39
__DATE__と __FILE__じゃだめなのか?

211:デフォルトの名無しさん
10/09/28 15:33:22
__FILE__じゃねえ__TIME__だよ

212:デフォルトの名無しさん
10/09/28 16:46:22
行列の要素の入れ替えで質問です。
G[16][16][2]という行列があったとき、

*temp=G[0][2][0]
G[0][2][0]=G[9][5][0]
G[9][5][0]=*temp

で要素の入れ替えは出来ますか?

213:デフォルトの名無しさん
10/09/28 16:49:55
「temp」だけでできるとエスパー

214:デフォルトの名無しさん
10/09/28 16:50:01
Gとtempの型次第。

215:デフォルトの名無しさん
10/09/28 16:57:00
tempが有効なポインタを指していなければアウト

216:デフォルトの名無しさん
10/09/28 17:02:43
じかにやる方法しかわかりません。

temp[0]=G[0][2][0];
temp[1]=G[0][2][1];
G[0][2][0]=G[9][5][0];
G[0][2][1]=G[9][5][1];
G[9][5][0]=temp[0];
G[9][5][1]=temp[1];

何かいい方法があったら教えてください。

217:デフォルトの名無しさん
10/09/28 17:11:17
いやだから「G」と「temp」の型を書けっての

218:デフォルトの名無しさん
10/09/28 17:16:11
unsigned long long int です。

219:デフォルトの名無しさん
10/09/28 17:17:51
unsigned long long int G;
unsigned long long int temp;
だというのか?なわけないだろ


220:デフォルトの名無しさん
10/09/28 17:20:04
行単位、列単位でコピーしたいってことだろ

221:デフォルトの名無しさん
10/09/28 17:24:28
そうです。

unsigned long long int G[16][16][2],temp[2];

ポインタが使えると思うのですがよくわかりません。

222:デフォルトの名無しさん
10/09/28 17:34:12
>>216みたいに直にやるか、ループで回すか、memcpy使うか

223:デフォルトの名無しさん
10/09/28 17:35:51
一番早い方法が知りたいです。

224:デフォルトの名無しさん
10/09/28 17:36:45
swap 関数作ってインライン指定だけでいいだろ

225:デフォルトの名無しさん
10/09/28 17:38:46
memcpy()使うほどのサイズじゃないし、>216で充分だよ。
C++ならstd::swapを使えって話になるけどCだから作るまでもない。

226:デフォルトの名無しさん
10/09/28 17:42:39
void swapUnsigndLongLong2(unsigned long long * a, unsigned long long * b)
{
struct {unsigned long long x, y;} tmp;
tmp.x = a[0];
tmp.y = a[1];
a[0] = b[0];
a[1] = b[1];
b[0] = tmp.x;
b[1] = tmp.y;
}
swap(& G[0][2], & G[9][5]);

227:デフォルトの名無しさん
10/09/28 17:45:53
// さっきはstaticを付け忘れたけど、今時のコンパイラならstaticをつけておけばinline展開してくれるし
// 他のソースに悪影響を及ぼさないためにもつけたほうがいい。
static void swapUnsigndLongLong2(unsigned long long * a, unsigned long long * b)
{
// c89だとエラーが出るからその場合は>226で
struct {unsigned long long x, y;} tmp = {a[0], a[1]};
a[0] = b[0];
a[1] = b[1];
b[0] = tmp.x;
b[1] = tmp.y;
}
// ついでに関数名も間違えてやんのw
swapUnsignedLongLong2(& G[0][2], & G[9][5]);

228:デフォルトの名無しさん
10/09/28 17:55:50
じかにやってみます。

229:デフォルトの名無しさん
10/09/28 18:33:34
途中までの書き直したソース貼ってくれれば更にアドバイスしやすいかも

230:デフォルトの名無しさん
10/09/28 18:45:13
[0]を何度もコピーしてるのが無駄ね

231:デフォルトの名無しさん
10/09/28 18:50:16
誰のソースですか?

232:デフォルトの名無しさん
10/09/28 19:08:17
ストリーム暗号の周期を測定しようとしたらすごいバグが見つかった!
直して今のところ2^32までの周期はない事がわかったのですがどの位
なら安全といえますか?

233:デフォルトの名無しさん
10/09/28 19:10:20
>>232
10^39

234:デフォルトの名無しさん
10/09/28 19:14:17
実験的な確かめ方がわかりません。2^128位ですか。
どなたかアドバイスお願いします。

235:デフォルトの名無しさん
10/09/28 19:17:06


236:デフォルトの名無しさん
10/09/28 19:17:18
??

237:デフォルトの名無しさん
10/09/28 19:19:00
とりあえず暗号野郎はトリ付けろ

238:デフォルトの名無しさん
10/09/28 19:23:33
>>234
周期のあるのは予想可能性という点で問題あるので暗号には使えない。

239:デフォルトの名無しさん
10/09/28 19:26:52
実験では実際に計算させて周期がないかどうかをしらべています。
しかし大きな周期は無理なので確認方法がわかる人がいたらお願いします。
計算量的な安全性は証明できても実装した場合に安全かどうかは別なので。

240:デフォルトの名無しさん
10/09/28 19:30:01
>>239
ほんとに知りたいの?
この人に直接問い合わせりゃいいじゃん。

【数学】円周率5兆ケタまで計算 パソコンを百数十万円かけて自作/長野の会社員
スレリンク(scienceplus板)

241:デフォルトの名無しさん
10/09/28 19:38:51
メルセンヌツイスターは安全じゃないんですか?

242:デフォルトの名無しさん
10/09/28 19:46:00
MTは暗号学的には安全じゃないので
暗号に使うなら暗号学的に安全な別なの使ってね、
って公式にアナウンスされとるがな

243:デフォルトの名無しさん
10/09/28 19:46:21
>>239
一周期回らせようとしたら膨大なデータをやりとりしない限り無理じゃないの

244:デフォルトの名無しさん
10/09/28 19:50:51
>>243
はいはい、基礎がわかってないやつはすっこんでろや

245:デフォルトの名無しさん
10/09/28 19:56:47
>>241
2,3桁見たらもう次は予測可能じゃん、暗号学的には。

246:デフォルトの名無しさん
10/09/28 19:59:49
実計算で確認するのは無理だと思います。
アルゴリズム的に周期がない事を証明しないといけないかもしれません。
ブロック暗号のOFBモードに似ているのでそういう方法で安全性を
保障するのかもしれません。OFBモードでも周期はあるはずなんですけどもね。

247:デフォルトの名無しさん
10/09/28 20:03:11
計算量的には次ビット予測不可能性っていいますね。
公開鍵暗号の場合ですけど。鍵をかませれば出力から単純には
次の値がわからなくすることができると思います。

248:デフォルトの名無しさん
10/09/28 20:04:39
>>246
乱数発生させたいならカウンタ値をハッシュしてもいいじゃね?
その代わり種となるカウンタ値はばれたら大変。

249:デフォルトの名無しさん
10/09/28 20:05:24
値の出現確率が一様になるようにダミーを混ぜる
乱数でスワップを繰り返してシャッフル
実はこれだけで完全な暗号になる

250:デフォルトの名無しさん
10/09/28 20:09:41
統計的テストでは一様分布になってます。バイト単位の出現率ですが。
CTRモードのことですかね>カウンタ

251:デフォルトの名無しさん
10/09/28 20:15:03
でも結局突きつめてくとAESとかRSAの劣化コピーみたいなアルゴリズムに落ち着くんだよね。
で、結局、既存のアルゴリズムがどんだけよく考えられているかを知る、と。

252:デフォルトの名無しさん
10/09/28 20:23:29
一応数論とは違う問題に基づいてはいるんですが。新型暗号

253:デフォルトの名無しさん
10/09/28 20:26:42
ポインタすら分からない奴がスレチもほどほどにしろよ

254:デフォルトの名無しさん
10/09/28 20:29:38
>>252
新たな暗号アルゴリズムを作りたいのか?
プログラムのコーディングが上達したいのか?

新たな暗号アルゴリズムを作りたいのならこのスレの住人じゃ検証する力もないし、話の内容がそもそもスレ違い。
それに実証コードを書きたいなら自分でやらずともコーディングのプロに頼めばいい(OpenSSHのメンバーなど)
プログラムのコーディングが上達したいのなら暗号のことは一旦脇に置いてコーディングの勉強をするべき。

255:デフォルトの名無しさん
10/09/28 20:30:35
暗号数学とプログラムはへつもんだから互いにいちゃモンつけてもしゃあないでしょ。

256:デフォルトの名無しさん
10/09/28 20:33:21
新型を質の良いプログラムで実装したいです。
資金がないのでプロには頼めません。
コーディングの勉強をします。

257:デフォルトの名無しさん
10/09/28 20:41:55
>>256
バカなの?
質の悪い手製の新型暗号を、たとえ質のいい実装したってクズはクズだろ。
ゴミをきれいなラッピングでプレゼント包装するようなもんだ。

ホントに手製の新型暗号に自信があるなら論文でも書いて学会に送りなよ。
どんだけ強力な暗号なのか世界中の数学者、暗号学者が検証してくれるから。
実装はその暗号の有用性が実証された後で充分。
有効な暗号だと認定されりゃ、世界のだれかオープンソースの住人(実装の達人)が実装してくれるよ、タダで。
もしくは企業が権利を買い上げてくれるかもな。


結局、「新型暗号」なんて適当なこと言って、
スレをひっかきまわしたいだけだろ?

258:デフォルトの名無しさん
10/09/28 20:46:43
研究段階なら質が悪かろうがとりあえず動けば良いんだよ
質の良いプログラムとか考えるのは後の話

259:デフォルトの名無しさん
10/09/28 20:47:42
>>257
おいおい、暗号さんの才能に嫉妬すんなよw

260:デフォルトの名無しさん
10/09/28 20:50:23
アルゴリズムが完成してるなら、それがプロにも解読出来ないか検証すればいい。今使われてる暗号のように。
プログラムに使おうとすんな

261:デフォルトの名無しさん
10/09/28 21:00:11
趣味で実装してんじゃないの?
そんなにピリピリする必要はないだろうに

262:デフォルトの名無しさん
10/09/28 21:00:32
入れ食い状態の釣り堀か、それとも自分で餌撒いて自分で食い付いてんのか

263:デフォルトの名無しさん
10/09/28 21:07:58
趣味ですw
もう寝ます

264:デフォルトの名無しさん
10/09/28 21:08:58
C使ってるのにデータをレジストリに使う奴は情弱

265:デフォルトの名無しさん
10/09/28 21:14:54
ぷぷ

266:デフォルトの名無しさん
10/09/28 21:37:05
>>264
巣に戻れ

267:デフォルトの名無しさん
10/09/28 21:48:57
いいよ

268:デフォルトの名無しさん
10/09/28 23:11:43
>>258
研究段階(暗号の)ならプログラムで実際に動かす必要なんてないけどな。

269:デフォルトの名無しさん
10/09/28 23:23:04
それはない

270:デフォルトの名無しさん
10/09/28 23:25:33
何のスレだっけ?思い出せ低脳。

271:デフォルトの名無しさん
10/09/28 23:29:24
僕高脳。

272:デフォルトの名無しさん
10/09/28 23:46:53
experimentは一応必要じゃないの

273:デフォルトの名無しさん
10/09/28 23:48:26
lain

274:デフォルトの名無しさん
10/09/28 23:48:46
違うなw

275:デフォルトの名無しさん
10/09/28 23:50:33
int main(void)
{

276:デフォルトの名無しさん
10/09/28 23:53:11
ん?

277:デフォルトの名無しさん
10/09/28 23:54:46
return 0;
}

278:デフォルトの名無しさん
10/09/28 23:55:50
return -1;

279:デフォルトの名無しさん
10/09/29 01:04:12
エラーがでるらしいよ

280:デフォルトの名無しさん
10/09/29 01:05:57
エラーが出るなら仕方ない

281:デフォルトの名無しさん
10/09/29 01:55:52
ここでffmpegの質問してよいですか?

282:デフォルトの名無しさん
10/09/29 02:07:54
いいえ

283:デフォルトの名無しさん
10/09/29 03:19:18
メモリクリーナーみたいにタスクマネージャで表示されるメモリにゴミがあったら開放するやり方ってどうすればいい?
calloc失敗するまで読み込んで失敗したら終了したら一応はその動作するけど外道だし

int *p;
while (1) {
p = calloc
失敗したらbreak
}

これだとexe終了処理で開放されてるけどfreeしてないし
freeするにしてもwhileの中でやったら無限ループになるし
外でやっても最後のpしかfreeされないしで思いつかない

int i, count, **p
*p = calloc
while (1) {
p = calloc
失敗したらbreak
count++;
}
for(i=0;i<count;i++) {
free(p)
}
free(*p)

こんな感じに出来ない?


284:デフォルトの名無しさん
10/09/29 03:25:15
ひどすぎる

285:デフォルトの名無しさん
10/09/29 04:12:23
p[0]を確保してp[0][count]を確保
p[0][i]を開放してp[0]を開放って感じか?


286:デフォルトの名無しさん
10/09/29 04:29:15
ソースコードで発見した奇妙なコメント集
URLリンク(www.webcreatorbox.com)

287:デフォルトの名無しさん
10/09/29 06:24:16
以下のコードを実行するとiが66を超えたところで、lにマイナスの値が代入されるのはなぜですか?

int i = 0;
for (; i <= 100; i++) {
long l = i * 33000000;
LOGI("i=%d l=%d", i, l);
}


288:デフォルトの名無しさん
10/09/29 06:34:58
>>287
オーバーフロー
32bit環境ではlongは4Byte(-2147483648~2147483647)

289:デフォルトの名無しさん
10/09/29 06:37:46
オーバーフローが疑わしい

log2(65 * 33000000) ≒ 30.998
log2(66 * 33000000) ≒ 31.020

290:デフォルトの名無しさん
10/09/29 08:12:24
C言語の本で

配列内の文字は、終端ナル文字の直前まで出力される、精度が指定されない
場合や、精度が配列の大きさより大きい場合、配列は必ずナル文字を含んで
なければならない。
 ↑
とあるけどこれの意味がわかりません・・どういうことですか?


291:デフォルトの名無しさん
10/09/29 08:13:40
指定の精度が配列より小さい場合、ナル文字は含まなくてもいいのですか?
ナル文字0はかならず終端に容量をとって含まれるものでしょう?

292:デフォルトの名無しさん
10/09/29 08:26:14
>>290
それはprintf()系の話だと思うが、説明がやや的外れだと思う。
例えばフォーマット指定で%.10sなどとした場合、10バイトを超えて出力されることがないことが保証されているに過ぎない。
従って、通常は必ずナルターミネートされていないといけない。

293:デフォルトの名無しさん
10/09/29 08:42:44
// まぁ、こういうことだ。
char buf[] = "abcdefghijklmn";
printf("%s\n", buf);
// 10バイトしか出力されない(%10sとの違いに注意)
printf("%.10s\n", buf):
// 長さはナル文字を含まないが、配列のサイズには含まれる。
printf("%u, %u\n", (unsigned) strlen(buf), (unsigned) sizeof(buf));

294:デフォルトの名無しさん
10/09/29 08:59:30
ところでおまいらプリプロセッサなに使ってる?
stdio.h使ってるんだけどそろそろ変えようかなって思ってるんだよね。
あれ?プリプロセスだっけ
まぁなんでめいいや

295:デフォルトの名無しさん
10/09/29 09:03:49
Visual Studioの最適化オプションって何が一番いいですか?

296:デフォルトの名無しさん
10/09/29 09:07:15
>>294
邪道は入門篇の対象外です。

>>295
VisualStudioのスレへどうぞ。

297:デフォルトの名無しさん
10/09/29 09:19:04
>>292
C言語の入門書読んでるけど3Pに一か所くらい、どういう意味?って
感じの説明があるんだが・・・

298:デフォルトの名無しさん
10/09/29 09:20:47
>>292
ナルは必ず要領を食うってことですか?


299:デフォルトの名無しさん
10/09/29 10:52:17
>>297
その塵本は捨てて、別な本を買った方がよい。


300:デフォルトの名無しさん
10/09/29 11:34:53
クラス内の関数ポインタの動的確保ってどうするの?
例えば
int (A::*test)();
っていう関数ポインタがあったとして、こいつを動的確保する方法です。

newに渡しても、コンパイルエラーになったり、
typedefしようとしても、戻り値の後ろの空白のせいでコンパイルエラーになったり
してしまいます。

正しいtypedefと動的確保について教えてください。

301:デフォルトの名無しさん
10/09/29 12:31:14
いやまて何を動的確保する気だよwwww

typedefは普通に
typedef int (A::*test)();
だが

302:デフォルトの名無しさん
10/09/29 12:35:19
>>300,301
消えろ


303:デフォルトの名無しさん
10/09/29 12:40:06
>>301
ありがとうございます。
途中で関数ポインタの配列を用意しないといけない状況になってるんですが、
動的確保できないんですかねぇ。

304:デフォルトの名無しさん
10/09/29 12:52:08
>>292
strncpy() の指示数と被代入変数の器の大きさとか?

上限5文字で切りたい場合 器は \0 を含めて 6個必要
(strncpyでは、さらに上限いっぱいの場合には 明示的に \0 代入が欲しい)

char buf[6];
strncpy(buf, 5, "123456789abcd");

 buf[0] = '1'
 buf[1] = '2'
 buf[2] = '3'
 buf[3] = '4'
 buf[4] = '5'
 buf[5] = <不定>

305:デフォルトの名無しさん
10/09/29 12:53:25
不定(笑)

306:デフォルトの名無しさん
10/09/29 12:58:52
>>302
ごめんCスレだと気付かなかった
これで終わると思うので勘弁してください
次は最初から誘導しようと思います

>>303
ならそういえ
typedef int (A::*test)();
test *p2 = new test[10];


307:デフォルトの名無しさん
10/09/29 13:06:40
>>306
ありがとうございます!出来ました!
C++スレ別にあったんですね。次からは気をつけます!

308:デフォルトの名無しさん
10/09/29 13:29:19
>>306
なんでこのスレで答えるの?
死ねば!

309:デフォルトの名無しさん
10/09/29 13:34:31
CとC++スレの区別もつかないヤツって、コード書いててもミスばっかりなんだろうな

310:デフォルトの名無しさん
10/09/29 13:43:12
GCCとVisualStudioでアセンブラのソースを見たんですが、小さい方が
早いですか?

311:デフォルトの名無しさん
10/09/29 13:44:35
>>310
どうしてそのような思考に至ったのか書け。
かかねえなら死ね。

312:デフォルトの名無しさん
10/09/29 13:49:34
ステップ数が少ない方が実行速度が速いのかなと思ったので。
後いろいろ最適化かけてみて平均的に早い(どちらも大して変わらない)
方を選ぼうと思ったので聞いてみることにしました。

313:デフォルトの名無しさん
10/09/29 13:59:58
ファイルから複素行列を読み込んで
complex A[N][N];
で宣言した2次元配列に格納したいと考えてます。
例えば、N=3のとき、
ファイルには実部と虚部がスペース区切りで以下のように並んでいる場合、
(実部と虚部で1要素)
どのようにして読み込めばいいでしょうか。

実部 虚部 実部 虚部 実部 虚部
実部 虚部 実部 虚部 実部 虚部
実部 虚部 実部 虚部 実部 虚部

もちろんエラーが出るのですが、
感覚的には以下のようにして読み込みたいです。

for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fscanf(fp, "%lf %lf", creal(matrix[i][j]), cimag(matrix[i][j]));
}
}

314:デフォルトの名無しさん
10/09/29 14:01:16
ベンチマークをひとにやらせるな。


315:デフォルトの名無しさん
10/09/29 14:04:31
>>313
double x, y;
fscanf(fp, "%lf %lf", &x, &y);
matrix[i][j] = complex(x, y);

316:デフォルトの名無しさん
10/09/29 14:08:04
ここの先生方の力で初心者向けC言語講座サイトを作成していただけませんか?
もちろんアフィリエイトは踏ませていただきます

317:デフォルトの名無しさん
10/09/29 14:17:51
>>312
感覚的には悪くない発想だが、そうでない例もあるので保証にはならない
例えばループアンロールは命令量を増大させるが、
適切に使用すれば性能は上がる

318:デフォルトの名無しさん
10/09/29 14:29:58
>>315
ありがとうございます。

double x, y;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fscanf(fp, "%lf %lf", x, y);
matrix[i][j] = complex(x, y);
}
}

とすると
error: expected expression before ‘__complex__’
と出てしまったので、

complex x, y;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fscanf(fp, "%lf %lf", x, y);
matrix[i][j] = x + y * I;
}
}

とすると、コンパイルは通るのですが
セグメントエラーになってしまいました;

どうすればいいでしょうか?

319:デフォルトの名無しさん
10/09/29 15:31:35
>>318
&x, &y

320:デフォルトの名無しさん
10/09/29 15:47:27
>>318
*x,*y

321:デフォルトの名無しさん
10/09/29 15:52:15
>>318
scanfの使い方を間違っている。%lfならdoubleへのポインタを渡す。

とにかくなんでもまずはhelpを読むんだ。unix系ならman、WinならMSDN。
次にgoogle先生でコードを探してそれをパクる。
他人が書いたライブラリを使おうってのに説明なしなんてあまりにも無茶すぎる。

で、complexってstd::complex?ならそれはC++。

322:デフォルトの名無しさん
10/09/29 15:55:37
Cで必要最低限の機能を持った簡単なシューティングを作る場合、
コードは何行で収まりますか?

323:デフォルトの名無しさん
10/09/29 15:56:22
>>322
改行しなきゃ一行だろ

324:デフォルトの名無しさん
10/09/29 15:58:53
>>323
ぷぷぷ、だよなw

325:デフォルトの名無しさん
10/09/29 16:04:56
Cで必要最低限の機能を持った簡単なシューティングを作る場合、 コードは何行で収まりますか?

326:デフォルトの名無しさん
10/09/29 16:04:58
規格上、一行あたりの文字数には制限があったはずだが
C89で511文字とかだっけ?

327:デフォルトの名無しさん
10/09/29 16:06:01
つまんね

328:デフォルトの名無しさん
10/09/29 16:07:40
>>323=>>324自演乙

329:デフォルトの名無しさん
10/09/29 16:10:09
>>325その質問には意味がない。
それと二度と書きこまないように。

330:デフォルトの名無しさん
10/09/29 16:28:47
またおまえかC#スレに変えれ

331:デフォルトの名無しさん
10/09/29 16:33:42
※このスレは中級者見習いが初心者を罵倒するスレです

332:デフォルトの名無しさん
10/09/29 16:47:53
左辺値って何ですか
ググッてもよくわからないんですが

333:デフォルトの名無しさん
10/09/29 16:52:00
>>210
駄目だが、ヒントにはなった。ありがとう。

334:デフォルトの名無しさん
10/09/29 16:56:01
>>332
代入演算子の左辺に現れることのできる値のことです
例えば x = 3 の x のことです

335:デフォルトの名無しさん
10/09/29 18:28:20
OpenSSLのファイル暗号化の秘密鍵ってどうやって生成されてるの?
ファイルごとに毎回変わってるの?

336:デフォルトの名無しさん
10/09/29 18:31:52
コイツいつまで粘着するの?

337:デフォルトの名無しさん
10/09/29 18:33:41
>>336
お前が粘着してんだろ

338:デフォルトの名無しさん
10/09/29 18:41:17
公開鍵の生成は確率的暗号化してるってわかるけど、(OAEP)
秘密鍵暗号の場合は鍵をどう使っているのか不思議。
まさかパスワード?

339:デフォルトの名無しさん
10/09/29 18:54:36
スレ違い

340:デフォルトの名無しさん
10/09/29 18:56:24
>>338は、発言によりLinuxもTeraTermを使ったこともないことがバレたようです。

341:332
10/09/29 19:02:25
>>334
ありがとうございます
もう一つ質問なんですが(x=y)=6はなぜだめなんでしょうか


342:デフォルトの名無しさん
10/09/29 19:14:24
>>341
代入式は左辺値ではないからです
左辺値でないので x=y は = の左側に来ることはできません

343:デフォルトの名無しさん
10/09/29 19:15:14
>>338
このスレは馬鹿ばっかりだから、聞くだけ無駄

344:デフォルトの名無しさん
10/09/29 19:16:03
(x = y) はyを代入したxの値として評価されるから

345:デフォルトの名無しさん
10/09/29 19:17:17
>>343
だな。

346:デフォルトの名無しさん
10/09/29 19:17:26
両方に代入したきゃ()つけないで、x=y=6でいいじゃん

347:デフォルトの名無しさん
10/09/29 19:18:37
>>342
それは違うx=yは左辺値だよ、人に教える前に自分が勉強しろ

348:デフォルトの名無しさん
10/09/29 19:18:45
追い払おうとしてるのか自演なのかよく分からん

349:デフォルトの名無しさん
10/09/29 19:20:09
”代入演算子の左辺に現れること”が出来ないから左辺値じゃないんじゃねw

350:デフォルトの名無しさん
10/09/29 19:20:23
>>347
そだね、()で囲むのが問題、それによって左辺値でなくなる。

351:デフォルトの名無しさん
10/09/29 19:20:32
>>347
わざわざ調べて書いたから間違いない
An assignment expression has the value of the left operand after the assignment, but is not an lvalue.
って書いてあった

352:デフォルトの名無しさん
10/09/29 19:21:06
普通に考えて分解すると
x=y;
x=1;
の順で計算されてるから

353:デフォルトの名無しさん
10/09/29 19:21:17
>>349
馬鹿はどっかいけ!

354:デフォルトの名無しさん
10/09/29 19:34:35
>>350
では (x) = 6; はダメなのか?

# 左辺値という言葉の「左」は確かに代入に由来するようだが
# 今となっては左辺値であっても代入はできないものがゴロゴロある

355:デフォルトの名無しさん
10/09/29 19:35:30
あげんな

356:デフォルトの名無しさん
10/09/29 19:40:43
x=yという式の値は右辺値だろw

357:デフォルトの名無しさん
10/09/29 19:59:09
3秒間に何回暗号化できるかの実験をしたいのですが、時間を制限して
プログラムを実行するいい方法はありませんか。因みにOpenSSLでは、

openssl speed des aes camellia

で3秒間に処理できるブロック数が表示されます。

358:デフォルトの名無しさん
10/09/29 20:01:16
3秒あたり何回回ったかがわかればいいんじゃないの?

359:デフォルトの名無しさん
10/09/29 20:03:25
暗号くんのレスをすべてつなげてある復号化アルゴリズムにかけると徳川埋蔵金の在処を示す文字列になる

360:デフォルトの名無しさん
10/09/29 20:05:13
暗号中学生はいつになったら消えるの?

361:デフォルトの名無しさん
10/09/29 20:11:42
スルー徹底すればすぐにでも

362:デフォルトの名無しさん
10/09/29 20:14:50
3秒でプログラムを停止させる方法が知りたいです。

363:デフォルトの名無しさん
10/09/29 20:16:09
alarm(3);

364:デフォルトの名無しさん
10/09/29 20:21:09
エラーが出ます。

未解決のシンボルalarmが関数mainで参照されました。

manで調べても出てきません。何回ループしたかも表示させたいです。

365:デフォルトの名無しさん
10/09/29 20:23:42
1万回処理するのにどんくらい時間がかかるか調べろよ

366:デフォルトの名無しさん
10/09/29 20:24:11
暗号の前にCの基礎を勉強しろ馬鹿。やる気ないならやめちまえ

367:デフォルトの名無しさん
10/09/29 20:26:05
#include <time.h>

int main(void)
{
  time_t start_time, now_time;
  time(&start_time);
  while(1)
  {
    time(&now_time);
    if((now_time - start_time) >= 3){ break; }
  }
  return 0;
}

368:デフォルトの名無しさん
10/09/29 20:27:58
9000000回で13秒。
カメリアは3秒。

369:デフォルトの名無しさん
10/09/29 20:28:35
それだと、timeの実行時間が付加されるような

370:デフォルトの名無しさん
10/09/29 20:35:18
それは仕方なくね。
while内を2倍にすれば差でタイムがわかるとおもう

371:デフォルトの名無しさん
10/09/29 20:38:42
> 9000000回で13秒
?=9000000*3/13

372:低脳基地
10/09/29 21:01:53
お前ら何を、右辺値とか左辺値とか分け解らん言葉使っているんだ
正しく右辺オブジェクト、左辺オブジェクトと使えよw
(x=y)=6の (x=y)の結果が名前付の左辺オブジェクトを返さないからだろ
何が帰ってくるのかって?
x=0、y=1
した場合(x=y)で戻ってくるのは名前付オブジェクトxではなく,xが管理しているの数字の1
お前ら1=6って平気でやって何でだって大騒ぎしてるんだろw
int a,b
a=bとした時にオブジェクトaとオブジェクトbが同一になるのかよ。それが管理していの値が同じになるだけだろ
管理しているもの値は同じになるが、オブジェクトが同じになるわけじゃない。同じになるならアドレスも同じになるよな。
よくあるパターンのif( (c = Fxxx()) == XXX ){}の(c = xxx())でもそう
で==の右左の条件って何か教えて
struct neko{};、struct neko a、 struct neko b、a == b、何を比較してるんだこれ

373:デフォルトの名無しさん
10/09/29 21:03:58
memcpy?

374:デフォルトの名無しさん
10/09/29 21:07:31
memcmp?の方だった

375:デフォルトの名無しさん
10/09/29 21:34:46
実際にtime()程度の精度のタイマーで時間を測りたいなら、
>367のwhileの前に一旦変化点を見定めておかないと誤差が平均0.5secに拡大してしまうよ。

376:デフォルトの名無しさん
10/09/29 22:21:51
memcpyってどう使うの?

377:デフォルトの名無しさん
10/09/29 22:28:33
struct neko{};、struct neko a、 struct neko b、a = b

378:デフォルトの名無しさん
10/09/29 23:11:45
>>376
代入演算子=の関数版がmemcpy
struct neko{};、struct neko a、 struct neko b、a = b
ならmemcpy( &a, &b, sizeof(a) )

379:デフォルトの名無しさん
10/09/29 23:26:54
>>376
>378の説明では不充分だけど、使わなければならないケースは入門レベルを超えるので使えなくても大丈夫。

380:デフォルトの名無しさん
10/09/30 02:54:26
>>319-321
double x, y;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fscanf(fp, "%lf %lf", &x, &y);
matrix[i][j] = x + y * I;
}
}

遅くなりましたが、これでできました。
本当にありがとうございました

381:デフォルトの名無しさん
10/09/30 03:05:22
CygwinのGCCで作ったバイナリをWINのコンソールで実行させるにはどうしたら
いいですか?GCCで作ったバイナリの方が早かったのでWIN上での動作確認を
したいです。どなたか教えてください。

382:デフォルトの名無しさん
10/09/30 03:19:35
>>381
MinGWを入れるべし

383:デフォルトの名無しさん
10/09/30 04:09:24
インストールしてる間にフリーズして出来ない。
CygwinはDOSのプロンプトから実行できないけどMinGWは出来るんですか?

384:デフォルトの名無しさん
10/09/30 04:13:27
できます
というかMSVCRT.DLLを使ってるからWindowsでそのまま実行できるはず

385:デフォルトの名無しさん
10/09/30 04:14:22
入れるんだったらここのwebdlがいいよ

URLリンク(tdm-gcc.tdragon.net)

386:デフォルトの名無しさん
10/09/30 04:28:00
emmintrin.h
がないってエラーが出ます。

387:デフォルトの名無しさん
10/09/30 05:05:06
c:\mingw32\bin\../lib/gcc/mingw32/4.5.1/include/emmintrin.h:32:3: error: #error
"SSE2 instruction set not enabled"

388:デフォルトの名無しさん
10/09/30 07:26:55
ふはぁ

389:デフォルトの名無しさん
10/09/30 07:49:20
mingw32のコンパイラのバージョンは4.5.1だけどCygwinのバージョン
は4.3.4です。GCCのオプションで
gcc -O3 -ftree-vectorize を付けたとき、Cygwinのときはループの
ベクトル化をしてくれますがmingw32のときは失敗してベクトル化
してくれません。どうすればいいですか。

390:デフォルトの名無しさん
10/09/30 08:03:20
>>389
cygwinで-fno-cygwinだとどう?

つーか、入門篇で扱う内容じゃないから後はCygwin/Mingwスレで。

391:デフォルトの名無しさん
10/09/30 08:16:29
-fno-cygwin
GCCでそんなオプションありませんでした。
Cygwinスレも見つかりません。

392:デフォルトの名無しさん
10/09/30 08:29:03
>GCCでそんなオプションありませんでした。
どんなエラーが出た? それと、gcc --versionした結果は?

>Cygwinスレも見つかりません。
どこ探しているの? 馬鹿なの?
Cygwin + MinGW + GCC 相談室 Part 5
スレリンク(tech板)

393:デフォルトの名無しさん
10/09/30 08:35:52
cc1.exe: error: unrecognized command line option "-fno-cygwin"
gcc (tdm-1) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

394:デフォルトの名無しさん
10/09/30 09:01:37
fno-cygwinに似たオプションがあるからそれだね

395:デフォルトの名無しさん
10/09/30 10:06:13
暗号くんは難しい?計算式は理解できるけど
簡単なことは理解できないんだね。
英語のエラーメッセージもまともに読まないって感じか?

396:デフォルトの名無しさん
10/09/30 10:15:50
>>395
そうです

397:デフォルトの名無しさん
10/09/30 12:12:21
URLリンク(codepad.org)
数独を解答するプログラムを作りましたがなぜかうまくいきません
原因を教えていただけないでしょうか?
0 0 3 0 0 0 0 0 0
0 9 0 0 0 0 2 0 0
4 0 0 5 7 8 0 1 0
0 8 2 9 0 0 4 0 3
0 0 5 0 0 0 0 0 7
0 0 1 0 0 0 0 0 8
8 0 0 6 2 5 0 9 0
0 0 0 4 0 0 0 0 0
0 6 0 0 0 0 8 0 0


398:デフォルトの名無しさん
10/09/30 12:24:05
>>394
-mno-cygwin ではどうでしょうかね。

399:デフォルトの名無しさん
10/09/30 12:37:06
>>398
移動したようだから相手にすんな。

>>397
コード追うのが面倒なんだけど、再帰を使わずにどうやってバックトラックしているの?

400:397
10/09/30 12:48:23
もしブロック内または縦横に同じ数がなければmasu[x]を確定しnext(y,x+1)に進み
先で不具合があったらmasu[x]まで戻って次の数に進むようにしようとしたのですが
うまくいきません

401:デフォルトの名無しさん
10/09/30 14:24:04
>>400
コード汚すぎ
どうして再帰呼び出しでやらないの?
配列に2次元にすりゃいいのに。。。

402:397
10/09/30 14:41:58
>>401
今月の頭から覚え始めたばかりなのでコードの汚さはご容赦ください
再帰呼び出しについて調べてみることにします

403:デフォルトの名無しさん
10/09/30 14:49:53
数独ってどうやんのが一番効率いいんかね
力任せに再帰していったらいつ終わるかわからんぜ

404:デフォルトの名無しさん
10/09/30 14:52:07
一番穴の少ない行または列から探し始めれば少しはマシなんじゃないかな

405:デフォルトの名無しさん
10/09/30 14:54:16
>>403
最近のCPUを舐めちゃいかんよ。真面目にアルゴリズムを考えるなくても、
単純なバックトラックだけで実装しても充分実用的な時間で解ける。

406:デフォルトの名無しさん
10/09/30 15:11:45
すみません。

char*型の文字列をTCHAR*型の文字列に変換する関数を作成したのですが、
少なくともUNICORD実装環境では4文字('\0'含む)までしか正しく変換出来ません。

問題点について考察したのですが、良く分からないのでご教授頂けたらと思います。

TCHAR* char_to_tchar(const char *pszChar){
long nLen;

TCHAR *pszTchar;

/*入力がNULLだった場合*/
if(pszChar==NULL){
return NULL;
}

/*文字数の取得*/
for(nLen=0;pszChar[nLen]!='\0' && nLen>=0;nLen++);
nLen++;

/*メモリの確保*/
pszTchar=(TCHAR*)malloc(sizeof(TCHAR)*(nLen+1));

/*メモリの確保に失敗した場合*/
if(pszTchar==NULL){
return NULL;
}

続く

407:デフォルトの名無しさん
10/09/30 15:14:08
>>406の続き

#ifdef UNICODE
/*char型からwchar_t型に変換*/
::MultiByteToWideChar(CP_THREAD_ACP,0,pszChar,strlen(pszChar)+1,(LPWSTR)pszTchar,sizeof(pszTchar));

#else
/*文字列のコピー*/
strcpy(pszTchar,pszChar);

#endif

return pszTchar; //処理が終わったらfree
}



正しく変換できるの最初の4文字までで、以降は文字化けします。

知識のある方、是非お願い致します。

408:デフォルトの名無しさん
10/09/30 15:15:12
sizeof(pszTchar) == 4

409:397
10/09/30 15:29:39
ネットを見ながら書いてみた結果さらに悪化したのですが何ででしょうorz
URLリンク(codepad.org)

410:デフォルトの名無しさん
10/09/30 15:33:58
なぁ、そもそも数独って何?

411:デフォルトの名無しさん
10/09/30 15:40:30
>>410
めんどくさいから検索してくれ。簡単に言えば、9x9升に1から9の数字を縦横ブロック毎にユニークになるように並べるパズルだ。

412:デフォルトの名無しさん
10/09/30 15:40:31
・同じ列で同じ数字を2つ以上使ってはいけない
・同じ行で同じ数字を2つ以上使ってはいけない
・3x3ブロック内で同じ数字を2つ以上使ってはいけない
以上の条件を満たすように空欄を1~9の数字で埋めるゲーム

413:397
10/09/30 15:40:46
>>410
3×3のブロックに区切られた 9×9 の正方形の枠内に1~9までの数字を入れるパズル
ナンプレ

414:デフォルトの名無しさん
10/09/30 15:49:35
>>405
試しに作ってみた。雑に作ったら結構時間掛かったぞ。
--
$ time ./a < foo
0 0 3 0 0 0 0 0 0
0 9 0 0 0 0 2 0 0
4 0 0 5 7 8 0 1 0
0 8 2 9 0 0 4 0 3
0 0 5 0 0 0 0 0 7
0 0 1 0 0 0 0 0 8
8 0 0 6 2 5 0 9 0
0 0 0 4 0 0 0 0 0
0 6 0 0 0 0 8 0 0

7 5 3 1 9 2 6 8 4
1 9 8 3 4 6 2 7 5
4 2 6 5 7 8 3 1 9
6 8 2 9 1 7 4 5 3
9 4 5 8 6 3 1 2 7
3 7 1 2 5 4 9 6 8
8 3 4 6 2 5 7 9 1
2 1 7 4 8 9 5 3 6
5 6 9 7 3 1 8 4 2


real 0m32.131s
user 0m30.733s
sys 0m0.030s

415:デフォルトの名無しさん
10/09/30 15:59:15
規格で保証されてんのは再帰17(?)回だっけ
それ以下で解けないとだめだよなJK

416:デフォルトの名無しさん
10/09/30 16:06:11
規格に制限なんかあったか?
スタックさえ気をつければ平気だと思ったが

417:397
10/09/30 16:07:20
ミスが見つけられないorz
0 0 3 0 0 0 0 0 0
0 9 0 0 0 0 2 0 0
4 0 0 5 7 8 0 1 0
0 8 2 9 0 0 4 0 3
0 0 5 0 0 0 0 0 7
0 0 1 0 0 0 0 0 8
8 0 0 6 2 5 0 9 0
0 0 0 4 0 0 0 0 0
0 6 0 0 0 0 8 0 0

1 1 3 1 1 1 5 4 4
1 9 6 1 1 1 2 3 4
4 2 6 5 7 8 3 1 6
6 8 2 9 1 1 4 5 3
3 3 5 1 1 1 1 2 7
3 3 1 2 3 2 5 2 8
8 1 4 6 2 5 1 9 1
1 1 7 4 1 1 1 2 1
1 6 4 1 1 1 8 2 1

418:デフォルトの名無しさん
10/09/30 16:34:11
>>417
動くように直してみたよ
見比べて参考にしてみてくれ
URLリンク(codepad.org)

419:デフォルトの名無しさん
10/09/30 16:42:04
>>415
何の規格だyp
ちなみに、>414はPen4 2.2GHzでの時間ね。

って書いているうちに>418を見たのでそれも試した。
--
$ time ./a < foo

7 5 3 1 9 2 6 8 4
1 9 8 3 4 6 2 7 5
4 2 6 5 7 8 3 1 9
6 8 2 9 1 7 4 5 3
9 4 5 8 6 3 1 2 7
3 7 1 2 5 4 9 6 8
8 3 4 6 2 5 7 9 1
2 1 7 4 8 9 5 3 6
5 6 9 7 3 1 8 4 2
real 0m0.057s
user 0m0.046s
sys 0m0.030s
--
冗談じゃねぇw

420:デフォルトの名無しさん
10/09/30 16:53:44
>>414=>>419 涙目w

例の「最も難しい」とされる問題でどの位掛かるんだ?
隙間が多かろうが論理的に解くには複雑だろうが総当りなら関係ないと思うんだが。

421:デフォルトの名無しさん
10/09/30 16:55:05
>>415
main() { a(17); }
a(b)
{
char c[2147483647];
if(b) a(b-1);
}

422:デフォルトの名無しさん
10/09/30 17:07:30
>>420
これ?
--
. . 5 3 . . . . .
8 . . . . . . 2 .
. 7 . . 1 . 5 . .

4 . . . . 5 3 . .
. 1 . . 7 . . . 6
. . 3 2 . . . 8 .

. 6 . 5 . . . . 9
. . 4 . . . . 3 .
. . . . . 9 7 . .
--
ほらよ。Cygwinだから所要時間は誤差の範疇。
--
$ time ./a < most

1 4 5 3 2 7 6 9 8
8 3 9 6 5 4 1 2 7
6 7 2 9 1 8 5 4 3
4 9 6 1 8 5 3 7 2
2 1 8 4 7 3 9 5 6
7 5 3 2 9 6 4 8 1
3 6 7 5 4 2 8 1 9
9 8 4 7 6 1 2 3 5
5 2 1 8 3 9 7 6 4
real 0m0.056s
user 0m0.030s
sys 0m0.062s

423:デフォルトの名無しさん
10/09/30 17:28:26
9x9を9枚のレイヤーみたいに扱って
9X9X9のビット列で比較したら速くならないかな

424:414=419=422
10/09/30 17:45:31
>>423
これ以上早くしてどうすんのw

というわけで、自分のも計測誤差の領域まで速くなった。
既にある数字まで無駄にチェックしちゃっていたよ。

425:デフォルトの名無しさん
10/09/30 17:48:58
小手先の技で高速化しようとするな。
素直にシンプルに書け。
高速化の要求はハード側にしろ。


426:>>406-407
10/09/30 19:22:15
>>408
無事解決いたしました。
ありがとうございました。

427:デフォルトの名無しさん
10/09/30 19:34:35
>>414
遅すぎワロタ

428:デフォルトの名無しさん
10/09/30 19:40:14
>>427
sysでは勝ってるだろバカ

429:デフォルトの名無しさん
10/09/30 20:09:34
VC++2010
なぜかelseの中まで実行していく・・・助けてクリ

DWORD dBuf;
MENUITEMINFO info;
GetMenuItemInfo( hSubMenu, IDM_TOPMOST, FALSE, &info );

if( info.fState == MFS_CHECKED )
{
dBuf = MFS_UNCHECKED;
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
} else {
dBuf = MFS_CHECKED;
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
}

430:デフォルトの名無しさん
10/09/30 20:10:49
(info.fState & MFS_CHECKED) == MFS_CHECKED

431:デフォルトの名無しさん
10/09/30 20:11:36
言葉足らずだった;
条件が真の場合でもelseの中実行してしまう

432:デフォルトの名無しさん
10/09/30 20:16:23
>>430
アリガトンでもまだ実行してしまう;;

if((info.fState & MFS_CHECKED) == MFS_CHECKED){
dBuf = MFS_UNCHECKED;
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
} else {
dBuf = MFS_CHECKED;
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
}

433:デフォルトの名無しさん
10/09/30 20:18:25
実行するわきゃねーだろ。全部コード晒せ。

434:デフォルトの名無しさん
10/09/30 20:20:36
>>432
それでだめならそもそもinfo.fStateにフラグが立ってない
そこのコード以外の部分の問題だ

435:デフォルトの名無しさん
10/09/30 20:26:38
とりあえず前後だけ。ほんとにナゾ・・・
これでもダメだったら恥ずかしい部分(コード的にじゃなくて)修正してうpします。

static HMENU hMenu,hSubMenu;
MENUITEMINFO info;
ZeroMemory(&info,sizeof(MENUITEMINFO));
static DWORD dBuf;
/*メッセージ分岐*/
case IDM_TOPMOST: //システムトレイアイコン右クリック時ポップアップメニューの中にある最前面表示切替
info.cbSize = sizeof(info);
info.fMask = MIIM_STATE;
hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));
hSubMenu = GetSubMenu( hMenu, 0 );

GetMenuItemInfo( hSubMenu, IDM_TOPMOST, FALSE, &info ); //チェック状態取得

if((info.fState & MFS_CHECKED) == MFS_CHECKED){
dBuf = MFS_UNCHECKED;
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
} else {
dBuf = MFS_CHECKED;
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
}

info.fState=dBuf;

hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1));
hSubMenu = GetSubMenu( hMenu, 0 );
SetMenuItemInfo( hSubMenu, IDM_TOPMOST, FALSE, &info );
break;

436:デフォルトの名無しさん
10/09/30 20:28:01
info.fStateは8が入ってます。うーむ??

437:デフォルトの名無しさん
10/09/30 20:29:26
関数自体が2回呼び出されてるんじゃないの?

438:デフォルトの名無しさん
10/09/30 20:29:58
elseブロックの中に入ってるって根拠はもちろんデバッガなんだよな?

439:デフォルトの名無しさん
10/09/30 20:30:27
>>435
本当に両方実行されているってどう確認した?

440:デフォルトの名無しさん
10/09/30 20:31:26
俺も static が気になるなあ

441:デフォルトの名無しさん
10/09/30 20:32:38
も、ってお前しか気にしてない

442:デフォルトの名無しさん
10/09/30 20:32:39
VC++で両方にブレークポイントはってるんですがそこが実行されてるんです。。。

443:デフォルトの名無しさん
10/09/30 20:35:03
紛らわしいので追記ステップで実行しました・・・

444:デフォルトの名無しさん
10/09/30 20:35:45
両方だけじゃなくてif文の前後にも置いて、1回の実行で両方実行されてるか調べて

445:デフォルトの名無しさん
10/09/30 20:36:05
なんで毎回LoadMenuしてんだ

446:デフォルトの名無しさん
10/09/30 20:42:18
>>444
elseの中のブレークポイントふみませんでした;;;
凡ミスかもしれませんつってk(

んでもステップオーバーだと踏んでいくんです
>>445
ハンドルがしょっちゅう変わるんで。これも謎なんです・・・

447:デフォルトの名無しさん
10/09/30 20:43:55
もしかして: リリースビルド

448:デフォルトの名無しさん
10/09/30 20:44:19
LoadMenu の段階で menu-state は初期化される

LoadMenu(初期状態) → 条件分岐 → LoadMenu(初期状態) → state セット
2回目の以降の呼び出しも同じように
LoadMenu(初期状態) → 条件分岐 → LoadMenu(初期状態) → state セット

LoadMenu を1回だけ呼ぶようにして 状態を保持したまま分岐できるようにしないとマズイ

449:デフォルトの名無しさん
10/09/30 20:47:33
>>447
そのようでした。お手数かけました。さよならありがとちきゅうすれ汚しゴメンネあふうううう

450:397
10/09/30 20:48:40
解決しました
>>418
ありがとうございます

451:デフォルトの名無しさん
10/09/30 20:49:59
>>448
MSDNちゃんと読んでませんでした。んで結果ちゃんと動きました。
レス下さった皆様、本当にありがとうございました。

452:デフォルトの名無しさん
10/10/01 07:22:58
ふっほっはっ

453:デフォルトの名無しさん
10/10/01 08:15:24
警告が出て気になります。何が原因でしょうか。

#if 1
{
dd= &buff[k*16];
u= *dd;
}
#else
memcpy(u.m,&buff[16*k],16);
#endif

memcpy(dd,&buff[16*k],16);

hash.c:230:11: warning: assignment from incompatible pointer type
hash.c:237:7: warning: incompatible implicit declaration of built-in function 'm
emcpy'

454:デフォルトの名無しさん
10/10/01 08:39:12
incompatible pointer type って書いてあるのに。
implicit declarationは、適切なheader fileをincludeしていないから。
incompatibleっていってるからincludeすると別の警告が出るだろうけど。

455:デフォルトの名無しさん
10/10/01 11:28:00
string.hを追加すれば、消えるでしょ

456:デフォルトの名無しさん
10/10/01 11:33:53
エラーメッセージが解読できない暗号くんでした

457:デフォルトの名無しさん
10/10/01 12:03:36
なぜこんなにも妬ましいのだろう

458:デフォルトの名無しさん
10/10/01 13:43:06
incompatible pointer type って書いてあるのに。
implicit declarationは、適切なheader fileをincludeしていないから。
incompatibleっていってるからincludeすると別の警告が出るだろうけど。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch