1 :
デフォルトの名無しさん :
2011/11/10(木) 22:55:06.15
,.;'‐、____,:-;';:、. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ. i;:;:;:;:;:/ノ-'-''"ヽ;:;:;ヽ'''-ヽ、;:;:;:;:;| {;:;:;:;:ノ■■■ ■■■ヽ;:;:;} ヽ;:;{ _ _ |;:;:{ };:;|三/ ●),. 、(● ヽ三 |〈 ヽ| " ゙='"/:::ヾ='"゙ | } __________ { |∫ ∴ (,.、::,. ) ∵ |/ / ゝ::●. ...:人:人:::..... ...! < そーですワタスが変なおじさんです {;;ヽ:.:.:.:.:.:.:.<Ξ>:.::.:.:.:.:.:.:/;} \ / ヽ:.:.:.:.::.:.:.:.:.:.:.:.:.:.:/ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / |ヽ:.:.:.:.:.:.:.:.:.:/| \ ヽ ̄ ̄ ̄ / ヽ___/
4 :
デフォルトの名無しさん :2011/11/11(金) 00:57:39.31
長文失礼します。 戻り値が構造体の関数を宣言し、構造体を戻り値として返したときに、 その構造体をポインタ変数へ代入したいのですが、うまくいきません。 p = tesFunc; (p:ポインタ変数、tesFunc:戻り値が構造体の関数) イメージとしては、こういう風にしたいのです。 いくつか、やり方を変えて試したのですが、エラーが出てしまいます。 私がやりたいことは、 ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。 なので、違う方法でもできるのなら、そちらの方法で試してみたいと思います。
構造体へのポインタを引数として関数に渡す
>>4 まぁ素人さんはポインタなんか使わずに構造体をそのまま受け取るようにした
方がいい。
構造体を戻り値とするんだから、受け取るにもポインタではなく構造体を指定す
ればいい。
ただのintなんかと同じに考えればいい。
7 :
デフォルトの名無しさん :2011/11/11(金) 01:16:22.78
>>5 その方法でやってみます!!
>>6 確かにポインタなんて使いたくはないんですが、
戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
というのが、ちょっと具合が悪くて。
tesFuncの中の構造体をstaticにしてその構造体のポインタ返すようにしてみれ グローバルに置いておきexternするみたいなことをちょっと隠蔽してみたりしたいんだよな?
765プロの事務所のトイレになりたい
>>4 です。
解決しました。
戻り値が構造体へのポインタの関数を使うことと、staticを使用することの2つがキーだったみたいです。
皆さん、ありがとうございました。
>>10 わけのわからんバグに悩まされると思うぞ?
元の変数に戻したければ素直に代入しとけ。intと同じに考えればいい。
>ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。
こういう目的なら、構造体を1個だけ確保しておいて、「色々な関数」へは、
その構造体を指すポインタを引数として渡すのがシンプルだと思うけどな。
構造体がごく小さいものであれば
>>11 の言うとおり。
struct A {int i;}; struct A* f(void) { struct A a = {.i = 9999999}; return &a } 先に予想しとくわ
14 :
デフォルトの名無しさん :2011/11/11(金) 05:23:01.80
ふーん
どうでもいいが、 -- 戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう というのが、ちょっと具合が悪くて。 -- これが何を言いたいのか誰か解説してくれ。
どうでもいいならどうでもいいじゃん。
mallocってなんなんですか??
bool型使って0と1だけのループ回したいんですけど for(boo=0 ;boo <=1 ;boo++){ みたいなループ作ったら warning: incrementing a bool value is deprecated っていう警告が出ます。 確かにbool型に足し上げることは推奨されないですが何か別の方法ありますか?
>>19 for( i=0; i < 2; ++i ){
boo=i;
わりとマジレス
func(); func(); でいいだろ
関数形式マクロの定義で、ある関数を呼び出すのはあまり良いコーディングとは言えないでしょうか 例えば、 int Function1(int x, int y) { int temp; temp = (x + y) / Function2(x, y); return temp; } こんな関数の代わりに、関数呼び出しのオーバーヘッドを考慮して、 #define Function1(x,y) (((x) + (y)) / Function2(x, y)) このようにマクロを定義するのってマズイですか?
callocってサイズ指定方法とゼロクリアの違い以外はmallocと同等の機能?
>>22 引数の評価に副作用がある場合はマズイ。
そうでないならおk。
>>23 大抵そう。極端な場合、内部でmalloc()とmemset()を呼んでいる。
>>22 C99/C++処理系ならインライン関数も検討したほうがいいと思う
>>20 ありがとう
やっぱそんな感じにしないとダメですね
マクロの中でリターンしてると後から読んだときに途中でリターンしてることに気付かないんだよな
確保されていないポインタをfreeに投げたらどうなるの?
ポインタにNULLを入れて何回でもfreeしてやる
ポインタに宇宙を入れて見たい
33 :
デフォルトの名無しさん :2011/11/11(金) 21:38:11.03
見てないけどヌルポで初期化してないと予言
35 :
デフォルトの名無しさん :2011/11/11(金) 21:52:55.76
>>34 ごめんなさい、わからないです。
リストを作るところまでは、合ってますか?
37 :
デフォルトの名無しさん :2011/11/11(金) 21:56:23.04
p=p->next; ←ココ
38 :
デフォルトの名無しさん :2011/11/11(金) 22:02:53.97
>>36 ありがとうございます!
>>37 p=p->nextじゃ、移れてないってことですか?
あと実行したときに、後ろから?表示されているのもよくわかりません。
39 :
デフォルトの名無しさん :2011/11/11(金) 22:14:01.85
うん、p->next初期化されてないも。
>>38 逆順になるのは、リンクリストの最初のほうにセルを挿入してるからだな。
地球どころか太陽系すべてが吹き飛ぶほどの気力がたまっているぞ
42 :
デフォルトの名無しさん :2011/11/11(金) 22:25:43.46
>>39 p->next = start->head;
start->head = p; で、セルをつなげてる?
>>40 わかった!ところてんみたいに入れてった感じですね!
いけーーーーーーー!! ところてんマグナム!!
そんなふにゃチンじゃいけんだろ。
何でコンピュータの基幹演算部分って十数桁までの計算しかできないのですか? 多倍桁の計算をするときは実装するほかないですよね? 大学の考察でこんな課題がでました。 教えてください。 どうしてでしょうか?
>>45 >どうしてでしょうか?
How を説明すればいいのでしょうか?それとも Why ?
>>45 つうか、それが分からない人間がなんで多倍桁なんて言葉を知ってるの?
>>46 両方お願いします。必然性があるのか、そもそもどういう仕組みになっているのか、
両方において曖昧な認識です。
プロフィール: 進研数学偏差値74.8
>>47 アルゴリズムとして知ってるから。
ちなみに、桁*桁の計算が4つあったら、桁*桁を3つと足し算といった感じで
計算量を大幅に減らす事もできるんですよね。
>>48 コンピュータの内部の事情って関係ありますかね?
普通に考えればわかることだよ 質問するほどのことではない
メモリの無駄が増えるからですよね? これでいいですか?
多倍長演算とかcpuでサポートしたらハードウエアが複雑になるからじゃないの? そこまでしてやる需要がないとか。 8086とか68000くらいのころはけっこう複雑な命令があったけど、その後RISCが流行って 単純な命令を高速実行する流れになって、またその後CISCががんばって効率化して RISCとかCISCって分類が無意味になって、みたいな流れだよね。 8086のころはBCD演算をサポートする命令があったから、RISCのトレンドがなかったら そっち方面に技術が発展して、もしかしたら多倍長演算がCPUでサポートされてる ような世界になってたかもしれない。それはないかな?
1 メモリが無駄になるから。 2 根幹演算を組み合わせて実装した方が効率の良いアルゴリズムが開発できるから。 3 ハードウェアが複雑になるから。 こういう認識でいいでしょうか?
結局は互換性がうんぬんじゃろ ハードに変更があると多大な範囲に影響が及ぶから 変えるに変えられネーってことでだらだらやってんだろ
CPUにメモリって何個入ってるんですか?
昔はメモリも少なかったし、必要だったら自分で作ればいいじゃん的な事
>>56 レジスタだったら何十個もあるんじゃないかな。
8086の系統は少ないかもしれないけど、内部的にはたくさんもってるみたいな
話を聞いたことがある。
59 :
デフォルトの名無しさん :2011/11/12(土) 00:25:22.04
CPUを自作ってできるのかな?
なんでできないと思う? 昔はみんな自作してた。
FPGAでなんちゃって自作じゃないの?
最近はFPGAで自作してる人とかいるね。
>>64 熱い‥‥‥。
>>61 電子系ならそうだったみたい。制御系ならせいぜい TTL ゲートでシリアル4bit 加算、というレベルでした、うちの大学は。
>>49 ふーん、今の若い子はそういう自己を表現することもあるんだ。
いや、別に否定するわけじゃあありません。私だったら‥‥これこれこうこうの本を読みました、って書くなあ(実のところ読めてなくて見たレベルなんでしょうけれども、それに気づくのはずっとあとの話)。
え?もうたくさんコメントがついているので、いまさら、じゃないですかね。
68 :
デフォルトの名無しさん :2011/11/12(土) 03:09:03.79
素直に「分からなかったので即答できませんでした」って言えよ
はい
基本的にそれぞれの桁は前の桁からの繰り上がりを待たないといけないから 桁数が増えると必然的に結果が出るのが遅くなるんだよね
>>70 キャリールックアヘッド、というのがあってキャリーの伝播を極力早くする方法があります。回路はその分多くなりますが。
証明は論理式の and と or の内外をいれかえるだけだったかと記憶しています。
繰り上がり待ち方式はリップルキャリーといいます。
>回路はその分多くなりますが。 ちょっと不正確。多入力ゲートが2入力ゲートのくみあわせよりも早いと期待できることがポイントだったかと。だから多入力ゲートの入力数の限界までは適用できますが、それ以上は実際どうなんでしょうね、よくわかんない。
そういえばどうして計算機工学の話になってるんだっけ?
>>73 知ったかしたいがために、
訊かれもしていないことをぺらぺらしゃべるやつが約1名いるようなんでね
じゃぁお前も喋ればいいじゃん。 気持ち悪いなお前
ああ、自覚はあるんだな 俺はお前のことだとはこれっぽっちも言ってないぜ(笑)
暇つぶしだと分かってるのにか?
80 :
◆jMy.vROSfw :2011/11/12(土) 04:33:29.82
ヒョードルやジョシュにとってハントは休憩みたいなもんだろ。
69で使ったばっかりのトリップなのに何でもうパクられてんだ!
こえぇぇ。(´・ω・`) 鳥変えた。
コテつけて暇をつぶすスレはここですか?
bool a(); bool b(); if (a() || b()) ... としたときに b() が呼ばれない可能性がある。。というのはいいんだけど、 bool x = false; x |= a() x |= b() こういう場合でも b() が呼ばれない可能性ってあるの?
a()でexitしてたら、駄目かな?
つーかそもそもコンパイル通らないから呼ばれない確率100%だよ
>>82 すぐバレる嘘つくな糞vipperがwww
お前の鳥でググってら一杯出てくる出てくるwwwwwwwwwwwww
なに、この基地外?
たぶん糞コテがVIPから呼び込んだ奴
全角二文字の一般的な単語じゃ被ってもおかしくないか。 しかし、1時間ちょいで同じコテ見つけて書き込めるかねぇ?
>全角二文字の一般的な単語
それが分かるのは糞コテ本人か解析者
レス内容からして
>>92 は糞コテ本人と推定
推定も糞も
>>69 ,83は俺だって。
最近のコテだと◆QZaw55cn4cと
>>80 は別人だが。
コテ付けてほしいのか?
今時コテ叩きして楽しいかい?
95 :
デフォルトの名無しさん :2011/11/12(土) 13:41:12.63
君の余計な一言
>最近のコテだと◆QZaw55cn4cと
>>80 は別人だが。
いや、君と◆QZaw55cn4cが同一人物の可能性なんてちっとも考えなかったよw
ちょっとはカンガエロヨ
>>86 下のは両方呼ばれるよ。
しかし、bool型にビット演算って違和感が。
警告とか出ないのだろうか。
重複順列に関してです。 A,B,C,...,G,Hという7個以上の要素から6つ取り出して並べたときの、全ての組み合わせを出したいのですが、うまくいきません。 例としては、 AAAAAA AAAAAB・・・ と出していくのですが、同じ要素を使っていても並び方が違えば別のパターンとして表示します。 長文申し訳ありませんが、手におえず、ご教授頂きたい次第です。 よろしくお願いします。
100 :
デフォルトの名無しさん :2011/11/12(土) 17:27:25.98
CでホームページのCGIを組んでいる人っているのかな?
>>100 そもそもこの2chのread.cgiはCだろ
103 :
デフォルトの名無しさん :2011/11/12(土) 18:11:40.61
2chもC言語で作られているのか。 それなら、Cを知っていれば、他の言語なんて そんなに勉強する必要は無いのかな?
>>103 CGIを作りたたいなら、他の言語も学んでおいて損はない。
Cとアセンブラがあれば全てができる。 場合によっては他の言語処理系を作ることも含めて。 そう思っていた時期が私にもありました。 でも、現実に多くの言語があるのは、それが必要だからだよ。 それぞれにメリットとデメリットがある。 結論を言えば「用途による」としか言いようがないなぁ。 とりあえず C で CGI を作るのはあまりオススメできない。
文字の扱いが面倒という程度
>>99 ありがとうございます。
ただ、もしよろしければですが、コードを教えていただけないでしょうか。
宿題スレ行け
うらかたに行け
縦5px横pxの画像があります どの位置が何色(RGB)なのかを調べたいのですが どのように調べるのでしょうか?
win32apiにGetPixelというのがあるからそれで
画像のフォーマットを調べてバイナリでファイルを読みこんで該当する位置のデータを調べる
115 :
デフォルトの名無しさん :2011/11/13(日) 13:47:41.59
そうですね
>>115 これ先頭にも入らないだろ?
while(p->next != NULL)
にして最後にp->nextに入れろ
もちろんslist->headがNULLだったらわかってんだろうな
あとループがむかつく、slistにtailとか入れて最後のを保存しとけ
質問させて下さい。 多次元配列でchar a[N][M]のNの部分をreallocで拡張した場合、 元々格納されていた文字列は新しく確保した領域にコピーされているのでしょうか?
>>119 回答ありがとうございます。
realloc出来ないんですか。。
ではこの場合Nを動的に拡張するには一般的にどういった方法があるんでしょうか?
>>121 char (*)[M]
という型の変数を用意します
動的に1次元配列を確保して二次元として扱えばいいよ
>>122-123 回答ありがとうございます。
char a[N][M]のNとMの両方を動的に作成しようとしていたので困っていました。
switch文についてなのですが,breakを入れないと下にある文も実行してしまうと思うのですが,逆に利用して switch (式){ case 値1: case 値2: 処理A break; case 値3: 処理B break; default: 処理C break; } とすることで,値1または値2の場合には処理Aを,値3で処理Bを,それ以外で処理Cを実行するといったことは出来るのでしょうか? また,こういった書き方って嫌わられるものなのでしょうか?値1のところにも値2と同じ処理をコピペしておいた方がいいのでしょうか?
もともとそういう使い方です
>>126 実際上、使う状況はかなり珍しいとは指摘しておく
しかもfall-throughがデフォルトなのは、珍しいどころかバグの元(breakの書き忘れ)なので
コメントで明示的にfall-throughだと書くぐらい
機械語の観点からすると自然な仕様なんだが、
最適化コンパイラが当たり前の現代ではC言語の欠陥
>>126 みたいにcaseが連続してる場合はいちいちコメントは入れないな。
処理があるのにbreakなしの時にはコメントを入れる。
処理があるのにbreakなしってことはめったにないけど、caseラベルが連続してるのは
ちょくちょくあるね。
皆さんありがとうございます。 参考書にbreak必ず入れろみたいなことが書いてあったのでこういう使い方すると慣例的にダメなのか気になったんですが 使っても大丈夫のようで安心しました。
133 :
デフォルトの名無しさん :2011/11/13(日) 21:51:28.37
個人的に嫌いなやつがだだこねるだけ goto アレルギーと全く同じ
必ず入れろというより、必要なところに入れ忘れるなって意味で書いてたんじゃないか?
caseからbreakまでを一行で書いてコロンとかセミコロンを縦でそろえるのが見やすいと思うんだけど職場が許してくれない
寧ろ神経質なコーディング規約だとこうなる。 switch (key) { case 0: { ...; } break; case 1: case 2: { ...; } break; default: break; }
>>126 case 値1: と case 値2: のあいだに何の処理も入れないなら、
意図も明白だし、なんの問題も無いような気がする。
switch (式){
case 値1:
処理A
case 値2:
処理B
break;
のような場合に、
「値1 の場合は、処理Aと処理Bを行い、値2の場合は処理Bのみを行う」という意味なのか、
「値1 の場合は、処理Aを行い、値2の場合は処理Bを行う、というつもりだったが、break を入れ忘れた」
のか判別しづらいってことが問題なのでは。
139 :
忍法帖【Lv=40,xxxPT】 :2011/11/14(月) 00:34:40.15
質問なんですけど、C++で強制的にadministrator権限で 実行をしたいんですが、どうすればいいのでしょうか? 質問なのでageさせてもらいました。
まず、服を脱ぎます。
141 :
忍法帖【Lv=40,xxxPT】 :2011/11/14(月) 00:35:50.23
ネタにネタでこたえただけちゃうんか?
残念ながらC言語スレだし
145 :
デフォルトの名無しさん :2011/11/14(月) 01:54:49.21
C言語を知っていれば、なんでもできるように思うよね。 作者がいなくなっても、発展は続くのだろうか
>>145 C言語は今の状態で固定されたほうがいい
変な拡張するなら色々なシガラミを切り捨てて別言語にしてしまうのが吉
148 :
片山博文MZ :2011/11/14(月) 16:30:35.88
ふふふ、諸君はわたくしに勝てるかな。。。
149 :
デフォルトの名無しさん :2011/11/14(月) 17:22:22.67
皆趣味でC言語のために使った費用どのくらい? CPU代金くらいだよね?プログラミングほど金のかからないものはないよね。 情報処理系の学科進んで本当によかった。
1997年くらい前まではパソコン何て金持ちしか持ってなかった。
今のスパコンもオモチャのようになる時代が来るのかな
>>149 言語オタクになると毎月の技術書代が・・・
何か一つの言語に集中した方が技術は身に付くし、金も掛からないんだろうな
そうは言っても情報系の技術書って、高くても1万円を越えるのは珍しいくらいだろ。 美術系の専門書とか無茶苦茶高いぞ。
図書館で頼んでコピーすればいいじゃん 本で購入なんて、お前さん情強のくせにアナログなことしてんじゃねーよ
>>154 満足できる品揃えじゃ無いんでね>図書館
>>154 まともな本を書いてる人に金を落とすのが情強だろ
>>155 だから品揃えは自分で注文して良くするんだよ
てか俺の学校では、図書館で勉学に関係する本を図書の本として 買ってくれる制度があるんだがww それで専門書頼めば買ってくれるかな。
学校じゃなくても普通の図書館なら注文ぐらい受け付けてるわ
>>161 まじで図書館って便利だよな。
俺今までにコンピュータ関連でハード以外金使ったことないわ。
市場経済は常にバカや弱者から搾取するためにあるんだぜ 金払わなくてもいいものに金払ったら負けだろ
時間の価値が低い人なら、そうやって金を払わないために手間をかけるのがいいんだろうな
書店で探すほうが手間だろwww
貯金
main関数を2つ作ることってできますか?
試してご覧
食費は大丈夫か?
エンゲル係数が50%以上とか
175 :
デフォルトの名無しさん :2011/11/14(月) 23:09:25.96
>>149 ハード・ソフト込みでゼロ
趣味で大金つかったのはアセンブラ
BASIC は親のすねが大部分で、自分の稼ぎで買ったのはほんの数十万
>>149 C言語のためというかプログラムのために新しいビデオカード買ったりUSBカメラ買ったり あーそういえばタブレットも買ったなぁ
あとかわいい表紙の技術書買ってみたりググって参考にしたサイトが参考にしたという技術書をあさってみたりしてるぜ
タッチディスプレイも買ったし、あぁHMZだっけか?ソニーのヘッドマウントディスプレイも欲しいな
>>178 合計金額のことなら聞かないでくれ、計算したくない
最近はHacker's Delightって本買ったのが趣味でのC言語のための出費かな
ってかC言語のためにっての難しいな、趣味(と仕事)のためのC言語だし
大学の学費くらいかな 卒業してからはLSIC-86試食版が手に入るまでC言語は使わなかったな。 C++もボーランドのフリー版が出るまでは使わなかったし・・・
趣味のC言語のために大学行くとは、世の中すごいやつがいるもんだな。
彼女を作るために大学いくやつほどすごくないと思うな。
あ、趣味でVisualStudio買ったんだった Vista以降にしてからそのバージョンだと起動時になんか言われるようになったから新しいの買おうかとも思ってるところ
趣味といっても、人生とか命とか全力でかけている奴もいる(というかむしろ多い)から 何?カジノで20億とか使ったという馬鹿は?こいつのせいで社員何人辞めることになるんだよ
主にCが絡んでる出費だと本が5万くらいで、ソフト(ライセンス)はMSDNぐらいかなぁ。 PC代は含めていいのか分からず。 最近は仮想化でいろいろ楽できるからいいなとおもう。 もしかすると本はもう少しかかってるかも。
>>183 管理者権限で起動しないとデバッガが動かない
大体趣味にいくら金をかけたかを計算したくないなんて思うようになったらそれはもう趣味じゃないよ。 興味がうせかけてる。
VSって10万ぐらいするんじゃありませんでした? 安く買える学生のうちに買っておいた方がいいですかね
VSも種類があるから一概に言えないんだけど、とりあえず5万くらいからで。 でもとりあえずはExpressから使えばいいと思うよ。
って、学生ならなんかもっと太っ腹なことやってなかったかな。 開発用OSライセンス含めて無料ってやつ。興味があるなら探してみ
「いくら金かけたか計算したくない」ってのは、そんだけ金かけちゃったんだぜーwっていう自慢含みだろ 文字通りにしか解釈できないとか、アスペもいいとこ
>>186 あれ?トレースデバッグとかできたような
>>187 ゲームにも結構な金突っ込んでるけどまだ飽きてないよ
そもそも金勘定嫌いな人なんで
総額?やめてくれよーwww いっぱい使ってるから計算したくないんだよーってか計算嫌いだしwいっぱい使ってるけどねw
C言語なら本4冊程度。 VCとなると・・・ソフト代+5000円超えの本が6冊ぐらいかな。
学生ライセンスって卒業しても使ったらFBIが来てライセンス違反だ金を払えってなるんでしょ
そういえば、VS2005 だけど事情により管理者権限で動かしてないんだよな 今のところ実害ないけど(デバッグも普通にできてる)、何が動かないんだろう?
趣味っていうか、道楽だろ
うん
int n;
>>195 卒業しても使用していいってMSが言ってたはず
あと昔は学校関係者じゃなくて、学生限定の激安(5000円弱)のもあった
でも今はタダで使えるExpressがあるからなぁ
ホビー用途ならこれで十分じゃね
あれ、デバッガのための権限だったように思うけど、流れみてるとどうも違うっぽいのかな ウソ情報すみませぬ
基本的に購入厨って仕事していて金持ちの人多いよな。 俺は学生で割厨だから、金かけてパソコン勉強してる人見るとリッチだなと思う。
C言語ってオブジェクト指向が理解できない人がやる初心者向けの言語ですか?
オブジェクト指向言語を使わなくてもオブジェクト指向プログラミングができる人が使う言語
工業高校出身でC言語習った奴っている?どんな感じだった?
卓球部だったけど、何で コンピュータ部=BASIC 学科の授業=C言語 がデフォなんだろ・・ 逆はない気がする。
いや、コンピュータ部で BASIC が全盛だった時期と、 学科で C が全盛だった時期にはタイムラグがあるだろ。
208 :
デフォルトの名無しさん :2011/11/15(火) 21:55:01.90
211 :
デフォルトの名無しさん :2011/11/15(火) 22:11:21.92
>>206 それは表面しか見ていない論評だ
コン部の BASIC はマシン語ランチャ
sinxの式をテーラー展開で実装するプログラム作ってください。 どうなりますか?出力は16桁のfloat型でお願いします。
>>205 ポケコンのリセットボタンを乗っ取って、
試験のとき押されてもダミーを表示する感じだった。
おまえらC言語でどのくらい稼いでるの?プログラミングのバイトとかあるんだろ?
Cでプログラミングのバイトってあんまなくね? web系ならたくさんあるけど
わざわざC言語を使うような仕事にバイトをあてるとか 金をドブに捨てるようなもんだ
>>216 そうなんだけど、中国に出しちゃったりするんだよね。あれもドブ
これからプログラミングを勉強しようと思って,今話題のC#から始めようと思ったんですが, 大学の友達に,C言語がまず基本だからCからやれというようなことを言われたんですけど,C言語からやった方がいいですかね? いきなりC#をやるのは算数やらずに数学やるようなもの?
どちらがいいともいえない。 とりあえず両方手を付けてみて、続けられそうなほうをがんばればいいよ。 とっかかりはどちらも覚えることが多くて大変だろうけどね。 ちなみに最後の例えは、 πを3.14と覚えればそれでいい算数(C#)と πをどうやって求めるかを学ぶ数学(C)の どちらから始めるかって言うこともできるので。
なるほど.より本質的な理解をするために,まずC言語をやる必要がある,ということですね. とりあえずC言語一通りやってからC#をやってみようと思います.ありがとうございます.
C#でやりたいことが決まってるなら、最初からそっちをやったほうがいい
どのくらいC言語できたらプログラマで食っていけるの?
一概にはいえない。他のスキルとかの兼ね合いしだい。 C言語のスキルだけで食っていけるという話なら、 自分でコンパイラ作っちゃえるぐらいのレベル。
>>224 コンパイラだって純粋なC言語のスキルだけじゃ作れないだろうがw
どっちを先に覚えても、他方を覚えるときに役に立つよ。
227 :
片山博文MZ :2011/11/16(水) 10:27:08.46
ふふふ、諸君はわたくしに勝てるかな。。。
ぐぐって出てくるほとんどのアルゴリズムなどのソースはC それらを書かなくても最低限のものが最初から用意されてるのがC#
基本を学んで色々な料理を上手に作れる料理人と チェーン店で定型レシピの料理を上手に作れる料理人 どちらも本人次第で運が良ければもうかる
福島汚染野菜を平気で人に食わせられる腐った根性を持ってれば料理が微妙でも儲かる
>>228 しかしC#で用意されていないものを作ろうとしたとき、Cで書かれたアルゴリズムを参照することになる
232 :
デフォルトの名無しさん :2011/11/16(水) 17:23:16.22
あるものを使えということ自体は間違っていないが もっといいものを作る気がないやつの来るところではない
コカコーラの秘伝の味に近づけるよう努力するのは無駄だということ
まずアセンブラから覚えないと 何をやっても砂上の楼閣だよ。
半田ごてからやり直せ
>>231 それが必要になるくらいC#を使えるなら、
Cのコードもなんとか読めるくらいにはなってると思う。
printf("%c\n",20,'*'); 上の文の20って、どういう意味があるんですか?
装置制御4
>>237 >上の文の20って、どういう意味があるんですか?
10進数の20です。
第一引数の%cに20が対応しているので、ASCIIコード20が表示されますね。
表示できるキャラクタかしら?
それより第3引数は対応する変換器号がないから、どこかコードがおかしくないかな?
printf("%*c",20,'*'); じゃないの?
>>240 そうです、書き間違えしてしまいスミマセン。
これを出力すると、20文字分スペースが開いて*が出力されるのですが、
出力桁数を変えるには、%cの部分に20を書かなければならないと習ったので、この20はどういう意味なのだろう?
と思い質問させていただきました。
追記申し訳ないです
>>242 なるほど、*を付けると次の引数分スペースを開けて出力という意味になるのですか
ありがとうございました。
えっ?
245 :
デフォルトの名無しさん :2011/11/16(水) 20:38:25.57
えっ?
246 :
デフォルトの名無しさん :2011/11/17(木) 01:12:11.38
247 :
デフォルトの名無しさん :2011/11/17(木) 01:16:08.82
デバッガ使ってないの?
>>246 >fscanf(fpr,"%d",d);
fscanf(fpr,"%d",&d);
これじゃね?
ぱっと見だけでまじめに読んでないけど。
249 :
デフォルトの名無しさん :2011/11/17(木) 01:35:04.82
>>247 gdbを使おうとしたのですが、まだ良く分かっていなくて…
>>248 それでした!完全に見落としてました。
ありがとうございました。
250 :
デフォルトの名無しさん :2011/11/17(木) 01:36:35.19
俺Cはよく知らないんだけど、double sin(),cos();ってどういう意味なの?
double型変数sinとcosを0で初期化する
252 :
デフォルトの名無しさん :2011/11/17(木) 02:24:03.14
ありがと。
いやいやいやいやw
プロトタイプ宣言
>>250 昔の流儀で、プロトタイプ宣言の代わりに自前で関数を宣言している。
今なら、#include <math.h>で事が足りる。
256 :
デフォルトの名無しさん :2011/11/17(木) 13:32:18.44
引数なしのsin cos関数ってこと?
古のK&Rではコール側がお掃除する前提だから引数プロトタイプなんて飾りなんだよ
259 :
デフォルトの名無しさん :2011/11/17(木) 18:06:48.93
すみません 関数の中にある、変数宣言や代入、他の関数の呼び出し、IF文など、まとめてなんと呼ぶんでしょうか? ステートメントと呼んでいる文献もありましたが入門書だと触れてないのが多くて困っています。 名前なんてどうでもいいという意見もあるかも知れませんが・・・。
>>258 cdecl なら今でも。あと、構造体をもらったり返したりするようになってからは、やっぱりいるんじゃないかな。
264 :
デフォルトの名無しさん :2011/11/17(木) 19:17:07.14
>>261 入門書にイラつけるようになったら規格票買え
265 :
デフォルトの名無しさん :2011/11/17(木) 19:41:24.36
実数型変数で、指数部を符号なし整数として オフセットを用いて表現するにはどうすればいいですか?
Cなら return 2; printf("d"); はOKだけど javaだと return 2; println(3); だとエラーがでる? これはプログラミング言語のコンパイラ及び実行マシンのどのような 性質によるものか? レポートの問題なんですが良く分かりません。
つまり何故Cではreturnの後に処理がかけるのかっていうことです。
無限ループの後に、returnがあってもいいよね?
269 :
デフォルトの名無しさん :2011/11/17(木) 20:42:23.13
本当に「レポートの」問題だな 「OKだけど」とあるが、そのあと二重質問で「エラーが出る」のはなぜかになっている
>>266 単純にそういう言語仕様だからってだけのような気がするけど、なんか深い理由でもあんのかね。
javaのほうが後発だからチェックが厳しくなってるとか。
271 :
266 :2011/11/17(木) 21:09:21.88
>>269 嘘ついてすいませんw
自分が疑問に思った質問ですww
レポートと言ったら皆はりきってやってくれるかとおもいましたw
Cなら警告だね。まぁgotoで飛べるし、構文上も問題ないし余計なことは しないっつーポリシーだからじゃね? Javaだとエラー扱いなのか?
javaだとエラーなの? 暫定的に処理を打ち切りたいときとかめんどくさそうだね
苦Cが書籍化されたの今日本屋で見つけた 内容はwebとまったく同じだった
unreachable statementってエラー
ひどいな。Java。
失礼します。 K&Rにしたがって以下のようなコードをコンパイルしました。 #include <stdio.h> main(){ int c; while( (c = getchar()) != EOF ) putchar(c); } 実行したところ、入力した文字列はコピーされたのですが、その後入力待ち状態になります。 いろいろと実験したところ、getchar関数で最後に読み込まれている文字は'\n'のようで、 while文の条件式を(c = getchar()) != '\n'に変えると文字列コピー後プログラムが終了しました。 どうしてこのようにテキストと違う結果になるのでしょうか? よろしくおねがいします。
>>277 君がそういう環境でやっているからだよ。
>>278 それはK&Rの想定するマシンでは最後に読み込まれるのはEOFだけれど、
自分のマシンでは\nになってしまっているためにwhile文が無限ループになっているという解釈で
良いのでしょうか?
>>277 DOSのときは、Ctrl-ZでEOFが入力できたから、windowsでも同じなんじゃないの?
unix系は知らないけどEOFを入力する方法があるはず。
RUBY参考書の文字列の所読んでたら、正則表現っていう言葉が出てきたんだけど 正規表現とか正則表現ってどういう意味ですか? プログラムではなく言語の一般的な概念らしいけどどういうことですか? 掻い摘んで教えてください。
>>277 unix系なら ^D で入力おしまい。
>>284 押してますが・・・
わざわざEOFを
>>280 >>282 のように手でEOFを入力しないといけなかったんですか?
てっきり自動的にEOFが最後に読み込まれるのかと思ってましたが・・・
>>285 標準入力から入ってくるものは改行も含めて全部読むんだよ。
だから改行を入力したらgetchar()は'\n'を返す。
何も読めるものがなくなったらEOFを返して終わりだって事を示すの。
だから標準入力なら自分でEOFを入力するんですね。 みなさん長々とありがとうございました。
EOFを入力するんじゃなくて、特定の操作で入力を終わりにするんだよ。 そうしたらgetchar()はもう終わりだよという意味でEOFを返すの。 標準入力がファイルに繋がってる場合なら、getchar()を繰り返せば ファイルの中身が「終わり」まで全部読めるわけ。 最初の1行だけとかじゃなくてね。
なるほど 上のCtrl+DなどはEOFという値ではなく、「入力終わり」を示してるってことですね? 理解が遅くて申し訳ないです。
いやいや、勘のいい方だと思うよ。 中には「EOFを入力する」なんて言い張るのもいるからね。
ファイルにEOFを入力したいんだけど、どうしたらいい?
閉じればいいと思うよ
ファイルにEOFを入力する方法はないの? UNIXの場合なら、^D、DOSの場合なら^Zを データとしてコンソールから入力したい時、 どうするの?
^Dや^Zを打てばいいだけだ。
scanf 関数で文字列を読み込む際、&が必要でない理由ってなに?
>>294 どうしても必要なら、unix系はsttyコマンドでeofを別の文字に割り当てられるけど、
エディタで予め作っておいた方がいいんじゃね?
>>294 ファイル内にEOFを書くためには
ファイルシステムから選びなおさないとダメだよ
FAT とか NTFS とか ext2 ext3 なんかはダメだね
>>296 配列の場合、随所でCが勝手にポインタ型に変換するから。
char s[]; の場合、sと書くと、ほとんどの場所で自動的に &s[0] に変換される。
wchar_tっていうのは文字列を対象としたアルゴリズムを書くのが楽だから存在してるんですか?
>>300 何も言わずにTCHARでググれ。
そして何も考えずに一番互換性のある文字型を使え。
TCHARなんてWindowsの世界に引きこもる時しか使えないし、 それが何なのか理解してないと混乱するばかりだと思うけど。
「ワイド文字」と「マルチバイト文字」でググった方が収穫が大きいと思う
>>296 scanf()が欲しいのはデータを格納する先であり、変数の中身ではない。
だから殆どのものは変数名に&をつけ、変数の中身ではなく、場所をscanf()に教えている。
(つけないとそれはただの「式」であり、結果として変数の「中身」を渡してしまうことになる)
でも、文字列を読み込むときに与えるのは配列名。
[添字]を後ろにつけずに配列名だけ書いた場合、
それが意味するのは配列の内容ではなく「配列のデータを格納している場所」そのものだからね。
場所を与えているのだから、書かなくて正解なのよ。
utf8のファイルを読み込んで そのまま出力したらバグるのはなんで?
環境を言わないと
308 :
デフォルトの名無しさん :2011/11/18(金) 21:08:26.05
char A[10]; for(i=0; i<10; i++) { for(j=0; j<10)A[j]= } ← forの中のforみたいに箱入り娘になってるA[]が 二重forを抜けたら元々のAに戻ってるのですが何故ですか? 二重forによって得られたAが欲しいのに二重forを抜けたら その得られたAじゃない。
何を言ってるかわからない
>>308 省略せずにソース全部書かないと、意味不明
311 :
308 :2011/11/18(金) 21:46:22.88
#include<stdio.h> #include<string.h> int main(void) { char C[10]; int i,j; for(i=0; i<10; i++) { char G[10]; sprintf(G,"%d",1234); for(j=0; j<10; j++){C[i]=G[j];printf("%c\n",C[i]);} } printf("C=%s",C); } 何故か配列の値がforを抜けると変わっているという・・・ わけがわかりません。
312 :
308 :2011/11/18(金) 21:48:44.60
#include<stdio.h> #include<string.h> int main(void) { char C[10]; int i,j; for(i=0; i<10; i++) { char G[10]; sprintf(G,"%d",1234); for(j=0; j<10; j++){C[i]=G[i];printf("%c\n",C[i]);} } printf("C=%s",C); } 訂正しました。 j→i 下から4行目
>>312 それ、Cに"1234"って文字列が入る動作だけど、どう動いて欲しいの?
意味が分からんな。j のループ内で j 使ってないし。 C[0]=G[0] を10回実行して何がしたいんだ 「どうなってほしいのに」「こうなってしまう」って具体的に書いてくれ
317 :
308 :2011/11/18(金) 22:26:27.93
それと、%cで一つずつ表示しようとすると、全部表示されるのに 例えば strが abc re tみたいなのだと、 %cで表示しようとすると abc re tと出ますが %s表示だと何も表示されません?何故ですか? for(i){printf("%c",str[i])};←表示される printf("%s",str);←表示されない
まあ、なんていやらしい><
>>317 えろいマーク書く前に落ちついて。
ちゃんとでるよ
320 :
308 :2011/11/18(金) 22:36:26.91
せめて日本語で書け。
323 :
308 :2011/11/18(金) 22:41:00.29
表示されないんですが・・・ 何故でしょう? forの二重の前にchar Aと宣言してるんです。 二重の中でAに文字が代入されて さぁprintf("A=%s",A);とするとA= となるんです。 でもfor(i=0; i<10; i++)printf("%c",A[i])とすると、 abc re とでます。 何故でしょう? string.hはちゃんとヘッダで読み込んでます。
K&R第二版以外の本で勉強するからそんなことになるんだよ。
325 :
308 :2011/11/18(金) 22:48:20.65
#include<stdio.h> #include<string.h> int main(void) { char A[10]; A[0]='S'; printf("%s",A); } の場合はちゃんとSがでました。\0を入れてないから文字化けした部分はありますが。
>>323 Aは初期化してるの?
変数は宣言したら初期化しておかないと変なバグを生み出す可能性があるよ。
いったい何がやりたいんだろう?
string.hいらない %sで文字列出力するとき、最後に改行入れてみ
末端が \0 で終わって無くて ごみ中の CR を受けて表示端末行頭に戻って (でも LF居ないので次の行にいかず) 続く文字が非表示可能文字かスペースで消された なんてことはないよな? リダイレクトしてファイルに出力:バイナリエディタで確認すりゃわかるかもしれないが
それが起こりうる状況を提示できるならその可能性があるといってもいいが、ないよね。
いったい何がしたいんだ? 表示されないと言っているが、どう表示してほしいんだ? デバッグしてやるからソース全文さらせ。
331 :
308 :2011/11/18(金) 23:06:32.17
>>328 あ、その可能性かもしれません。
ちょっと調べます。
>>290 遅くなりましたがありがとうございました
いろいろとつながりました
333 :
308 :2011/11/19(土) 13:08:41.13
>>308 その可能性ありでした。
ありがとうございました。
ダメだこりゃ。
基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat -n"の単純機能を実装しようとしています。 しかしバッファを1バイトずつ読んでいって"\n"があったらその場所に行番号をfprintfで追加していくようにしても、 ファイルの中身が最終行まで全部出力された後に、行番号がまとめて出力されてしまいます。。。 ファイルをreadした後は、writeとcloseが実行されるまで、fprintfの中身の出力は追加できないのでしょうか? どなたか詳しい方、教えていただけませんか?
337 :
335 :2011/11/19(土) 16:52:32.70
>>336 あんたが ネ申 ですか
すげぇ・・・すげぇよ・・・俺の10時間は何処へいった
>>335 >行番号をfprintfで追加して
行の本体も、その時に編集すればいいのに。
339 :
335 :2011/11/19(土) 17:42:58.92
>>338 それってバッファ自体を変更するってことですか?
そんなの可能なんでしょうか・・・?
#include <stdio.h> void print_array(int size,int *a[]); int main(void){ int b[3]; print_array(3,&b); printf("%d",b[0]); printf("%d",b[1]); return 0; } void print_array(int size,int *a[]){ int i; for(i=0;i<size; ++i){ *a[i]=1; } } ユーザ関数内で得たものを配列に入れて返したいのですが 上のプログラムだとコンパイルすると 警告 W8075 a.c 8: 問題のあるポインタの変換(関数 main ) と出て実行すると停止してしまいます。 どうすればよいのでしょうか?
>>341 &bをbにすれば良かったんですね!ありがとうございます。
ちなみにどうしてただの変数を返す時と違って配列では&を使ってはいけないのでしょうか?
343 :
デフォルトの名無しさん :2011/11/19(土) 18:28:03.54
344 :
デフォルトの名無しさん :2011/11/19(土) 18:32:45.83
>>342 配列の場合、配列名自体が先頭アドレスを指しているので
&b[0]と同じ意味を持つからです。
>>340 これで型の整合性は合うんじゃないかな?
可変長配列をサポートしていなければ、int (*a)[3]にしないといけないけどね。
#include <stdio.h>
void print_array(int size,int (*a)[size]){
int i;
for(i=0;i<size; ++i){
(*a)[i]=1;
}
}
int main(void){
int b[3];
print_array(3,&b);
printf("%d",b[0]);
printf("%d",b[1]);
return 0;
}
346 :
デフォルトの名無しさん :2011/11/19(土) 18:59:26.15
b を 3 で宣言してるのに可変長で渡す意味は皆無 しかもプロトタイプ逃げてるし 憶えたての厨二コードだな
>343 ちゃんと確認していないが、D()の中のwhile()の条件を関数外出しとかしてから、綺麗にしてみたら? パッと見、 Wが40の時に return (t(0),printf("func returning "),t(41)); Wが91 && t(0)==32 の時に return (printf("array[0..%d] of ",atoi(X)-1),t(0)); Wが91 && t(0)!=32 の時に return (printf("array of "),t(93)); それ以外 return 0; だろ?
int *a[]って何を渡すんですか?
349 :
335 :2011/11/19(土) 20:17:20.05
すいません、質問させて下さい。
先ほど同様、基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat"コマンドのように
ファイル名・開始行・終了行を指定してやると、ファイルの内容(行番号付き)が指定した開始行から終了行までのみ表示されるような
プログラムを実装しようとしています。
しかし行番号は指定した通りになるのですが、肝心のファイルの内容が指定した行の通りに出力されません。
どうしたらいいのでしょうか?どなたか教えて戴きたいです。
現時点のコードは以下の通りです.
http://codepad.org/U8HzseFI
肝心のファイルの内容 を printf なり汁w
つーか、ファイルの中身をwrite()で出力するのに行番号だけprintf()するってのが間抜けすぎるんだけど、 なぜ低レベルI/Oを使うの?
エディタのようなインタラクティブな動きをするんじゃなきゃ、 文字列出力に低レベル I/O を使う必要は無いと思うんだがな。
353 :
335 :2011/11/19(土) 21:08:51.86
>>350 いやもちろんwrite()やってるんで出力はされるんですが
たとえば
$ ./a.out test.txt 4 8
4 <01行目の内容>
5 <02行目の内容>
6 <03行目の内容>
7 <04行目の内容>
8 <05行目の内容>
みたいになるのです。
1バイトずつread()して、if文を使って指定行の範囲内でのみwrite()するようにしているのですが・・・。
readしたものをwriteしないまま再びreadをすると、次にwriteした時に、前回writeしなかったものもまとめてwriteされるという事でしょうか?
よく分からないのですが、これを解決するにはlseekとかを使えばいいのですか?
354 :
335 :2011/11/19(土) 21:09:34.04
>>351 低レベルIOでcat -nコマンドとその発展を実装するという課題だからです
>>354 じゃあ sprintf 使って作った文字列を write したほうが早くね?
356 :
335 :2011/11/19(土) 21:31:23.87
すいません知識不足でよく分かりません。どういう事ですか? read -> 改行を発見したらsprintfで行番号を追加 -> writeということでしょうか?
ってゆーか、指定の"4行目から"writeしてないだけじゃんw 行番号変数だけは指定の4から開始しているが、 無条件に1行目からwriteしてる (んで、行番号が指定に達したら停止しているけど)
sprintf(文字列格納領域, ...); write( ,文字列格納領域, ); って話だよw
問題点が三つある。 ・行番号の数え方が間違っている ・read(), write()を使う課題でprintf()を使っている ・改行文字のみならず復帰文字まで改行と扱っている
>>360 ・readしたものを全てwriteしないで該当行まで捨てるだけだな。
・本人がいいと思うのならいいんじゃね?
・本人が(ry
うぜえ
C言語の方からプロンプトの設定を指定することはできないんですか? UTF-8のchar配列を出力して文字化けしないようにしたいのですが そういうことはできなくて毎回shift-jisに変換しないとだめなのでしょうか?
環境による。 つまり、C言語は関係ない。
366 :
335 :2011/11/19(土) 22:12:27.43
>>358 oh... まさにその通りですね。。。
17行目でlinenumの初期値を1ではなく linenum = atoi(argv[2]);
としてしまっていたせいでファイルの中身が最初から表示されてしまっていました。
今思うと明らかに意味不明なのに自分じゃ気づかないものですね・・・ご指摘本当にありがとうございます。。助かりました、。。
367 :
335 :2011/11/19(土) 22:19:26.75
>>360 ・行番号の数え方が間違っている
→解決しました.ありがとうございます。
・read(), write()を使う課題でprintf()を使っている
→すいません、勉強不足なもので。。
fprintf(stdout, %d, x)でもやはりだめなのでしょうか?
・改行文字のみならず復帰文字まで改行と扱っている
→read()とwrite()で一文字ずつ読んでいった時の挙動が分からなかったのでとりあえず\rと\nと\r\nのどれが来ても改行
結果として改行が2回続いていても行番号が1つしか出力されないバグが出来ましたが・・・。
こちらもどうすればいいのかご存じでしたら教えて戴きたいです。
>>367 >361も書いているけど、仕様の問題だから教えるもへったくれもないよ。
もうすぐ年号が変わりそうだね 忙しい時期に仕事が増える
すんません こんな感じで配列に何度も数字を入れなおしたら メモリ消費とか酷くなりますか? int a[50] while(j=1000){ for(i=0;i<50;i++){ a[i]=i; } j++ }
いえ、気にしなくていいです
>>371 ならない。
メモリアロケーションは int a[50] の分だけ。
何度読み書きしようとメモリ消費量が変動したりはしない。
ただしエンドユーザーの神経がすり減り消費されます
>>373 アセンブラの前に、
アセンブラはCPUを設計出来るようになってからやるべき
コンピュータの基礎が全くない奴がプログラムなんて作れない
そんなことはない
いま学校でverilogでCPU設計をやっているが ようやくCPUが何をしているのか理解出来るようになった マになった奴って学校でCPUの設計やらされたんじゃないのか
まずは自作トランジスタからだな。
CASL IIで十分だよ とりあえずはね
>>379 学校でやるレベルだとストップウォッチを作ってみましょうで終わるんじゃないの?
HDL か RTL か C 記述かで変わるんだろうけど
研究者じゃあるまいし使えればいいじゃん
>>384 チャールズペゾルドのCODEって本読むといいよ
Segmentation faultについて教えてください。 linux上でアプリケーションを作成しました。 シェルがプログラムAとプログラムBを呼び出します。 プログラムAがプログラムCをSYSTEMで呼び出します。 暫く実行すると、プログラムCがSegmentation faultかabortで終了します。 ただし、シェルで呼び出しているプログラムBをコメント化すると、Cが落ちることはなくなります。 プログラムBは単純に内部でSYSTEMコールで外部プログラムを起動するだけのものです。 (呼び出す外部プログラムは計算を行うPGですが、数秒で終了します。) そもそも、Segmentation faultが、Cでのコードにより発生する要因として、 添え字の範囲外はmallocのfree忘れくらいしかないと思いますが、他になにかありますか?
>>386 プログラムCが悪い
プログラムBは無実
プログラムCが無効なアドレスを読み書きしようとしているのが原因
>>387 ところが、プログラムBの機能をプログラムAに入れると、
今度はプログラムAがSegmentation faultで落ちだします。
反面、Cが落ちることは何度か動かしましたが、確認していません。
Aに追加した場合、単純にSYSTEMコールを行うスレッドをループさせているだけなのですが。。。
>>388 ファイル操作はあります。
ただ、繰り返しでオープン、クローズを繰り返したりはないのですが。。。
書き込みファイルをオープンしたままで、プログラムCは書き込み続けます。
プログラムBはプロセスを大量に生成しますが、それは問題ないのでしょうか?
system()を使用し、同期させてますので、Bが同時に子プロセスを大量に作成することは無いし、
呼び出したプロセスが残ってる訳でもないのですが、
新しいプロセスを作るたびになにかしらの資源が消費されたりするのでしょうか?
前のプロセスは終了してるのもかかわらず。。。
>>389 それならプログラムBとプログラムCの共犯だな
>>385 petzold氏 って Windows 以外の本も書いてるんですねえ。(Programming Windows 3.1 以来ご無沙汰ですけどね)
でも、目次を見るかぎりは、CPU の作り方
http://www.amazon.co.jp/dp/4839909865/ のほうが面白そう。amazon の個人お勧めリストにもいろいろとあるようですけれども。
それはそうと、verlog でどのくらいの規模の cpu を書いてるんですか?kwsk! kwsk! kwsk!
調べるのに時間かかったか
>>343 9行目
:w("array of "),t(93) の解釈がおかしい
t(93)がカンマ演算子でくっついてるのは直前のw("array of ")ではなく
t(0)==32?からの三項演算子式だ
だから
>>343 のでいうとt(93);はif (t(0) == 32){..}else{..}の後になる
つうか、 Segmentation fault なら、 core 調べりゃどこで起きたかわかるっしょ。 それ調べずに憶測で話をしててもしょうがない。
397 :
308 :2011/11/20(日) 09:42:13.67
#include<stdio.h> int main(void){ char x[10]; char y[10]; int i;sprintf(x,"%d",123); for(i=0;i<10;i++)y[i]='\0';y[4]=x[0]; y[2]=x[1]; y[5]=x[2]; printf("%s",y);putchar('\n'); for(i=0; i<10; i++)printf("%c",y[i]);}
398 :
308 :2011/11/20(日) 09:44:40.59
実行結果 > 2 13 こうなります・・・何がまずいのでしょうか? 本当は >2 13 >2 13 こうなって欲しいのですが・・・
399 :
308 :2011/11/20(日) 09:46:55.04
3行目の空白埋めました。 #include<stdio.h> int main(void){ char x[10];char y[10];int i;sprintf(x,"%d",123); for(i=0;i<10;i++)y[i]='\0';y[4]=x[0]; y[2]=x[1]; y[5]=x[2]; printf("%s",y);putchar('\n'); for(i=0; i<10; i++)printf("%c",y[i]);} 訂正しました・・どこが悪いのでしょうか?
頭?
>>399 スレの上のほうを見るのが面倒だから見てなくて、なにをやりたいのかいまいちわからないけどこんな感じ?
#include <stdio.h>
int main()
{
char x[10];
char y[10];
sprintf(x, "%d", 123);
y[0] = x[0];
y[1] = x[1];
y[2] = x[2];
y[3] = x[3];
printf("%s\n", x);
printf("%s\n", y);
return 0;
}
すみません、初心者ですが int main() と int main(void) どちらでもいいんですか?
下にするべし
>>399 あのさぁ、printf("%s",y); ってしてるけど、y[0]に何が入ってるか理解してるよね?
y[0] == '\0' だからmainからprintfに入った時点で文字列は終端を迎えていると判断されるんだけど。
残りのy[1]からy[9]までは表示されないよ?
y[4]=x[0]; y[2]=x[1]; y[5]=x[2]; ではなく y[0]=x[1]; y[1]=x[0]; y[2]=x[2];
にしてみれば?
>>403 Cの場合、main() は、引数があるのかもしれない(引数の個数は不定)
C++の場合、main() は、main(void)とおなじ(引数がない)
・・・
意味がわかるまでは、省略しない書き方で覚えた方がいいと思った
411 :
308 :2011/11/20(日) 12:54:59.06
>>405 なるほど!!!'\0'の性質今やっと知りました・・
一応xとyの添え字の対応はランダムです。
ってことは,必要な所以外は' 'のスペースをいれておけばいいのですね。
ありがとうございます・・
とりあえず、いつも実行可能な一式のソースコードを提示しつつ説明するQZの姿勢には、素直に感心する。 あと、初心者の質問に、わざわざ実ソースコードを書いて親身に説明するところも感心するし、尊敬もする。普通はめんどくさくてやらない。 QZは、普通に良コテになれる素質は十分にある。 とりあえず演技でもいいから、「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。 それだけで印象は大分変わる。 反感買いそうな憎まれ口的な要素を含んだ発言は、コテ外してやった方がいい。いつもコテ付ける正直者もいいけど、 その辺は要領良く使い分けようぜ…orz
>>410 どうだろなあ。
CとC++の区別がハッキリ判るまでは省略形のが良い気がするけど。
教わる・覚えるのは、CとC++のどっちかなんだから、 その言語の規定に従って記述すべき。 省略は、意味が分かってからでもできる。
明示的に書くほうがどっちの言語にしろ良いんだからそれぐらいのタイプケチってどうする
>>416 いや、ケチるんじゃなくて
たまたま動く誤った記法になり得る記法を続けるよりは
一応どっちでも正しく通る記法を使ったほうがよくね?
auto i = begin( v ); よりも std::vector< int >::iterator i = v.begin(); の方が明示的なので良い、と。
>>407 それがC99 で変わった。
ISO/IEC 9899:1999 6.7.5.3.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. 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
つまり、int main() { ... } のように、part of definition of that funcsion ――関数宣言と同時に関数の内容も同時に定義している場合には、
int main() は no parameters、すなわち int main(void) と同じ。
すなわち
>>406 が厳密にあてはまって、どちらでもいい。
>>401 せめてここまで記述できるぐらいにまで成長してほしいものですが、百年一日なんにも変わらないのは、もう obsolete ―精神的に干上がった―なのでしょうか?
>>412 >「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。
そっかー。
身の丈でお話しているつもりで、そんな演出意図はぜんぜんないのですけれども、そうなってしまうのですか‥‥‥。
ちょっと考えていましたが、とりあえず
>>336 の方針でやっていこうと思っています。
C言語のコマンドプロンプトの実行結果を いちいち下に表示していくんじゃなくてアニメーションみたいにするにはどうすればいいですか?
>>421 アニメーションと言うわけにはいかないけれど、改行文字の代わりに復帰文字を使ってはどうだろう。
有償質問スレ立ててるのに良コテって
>>412 はバレバレの自作自演(ノ∀`)'`,、'`,、'`,、'`,、'`,、
小学生未満の理解力で良コテとかねーよw
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007 ここの>ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。
に対する、関数が宣言できずに困ってます。
とりあえず,int k[20]; でつくって提出しましたWrong Answerになってしました。
提出したソース
#include <stdio.h>
int main()
{
int i,j,count;
int k[20];
i = 0;
count = 0;
while(1){
scanf("%d",&k[i]);
if(k[i] == 0)break;
i++;
count++;
}
for(j=0;j<count;j++)
printf("Case %d: %d\n",j+1,k[j]);
return 0;
}
429 :
デフォルトの名無しさん :2011/11/20(日) 15:58:42.56
430 :
デフォルトの名無しさん :2011/11/20(日) 16:07:18.46
Cで指数関数を求めているのだが 小数第15位(double)くらいまで近時させるにはどういった計算をすべきだろう? おしえてエロい人。
>>429 一行単位で扱うようにして fgets
数値かどうか判定して sscanf
逐次出力 配列いらない
すればいいんじゃね?
433 :
デフォルトの名無しさん :2011/11/20(日) 16:15:22.31
>>432 すまんこ
説明不足だったライブラリ無しで作ってる
ちなみに今はe^x = 1 + Σ(x^n)/n!
これだと一つの項が大きくなりすぎて切り捨てられてしまう。
>>430 int a[20];
1.23456789なら
a[0]=1;
a[1]=2;
とかやって、n倍、桁上がりを自分で実装か?
>>433 これで
有効桁数15桁じゃなくて常に小数点以下15桁が必要なら多倍長演算しないとダメ
#include <stdio.h>
double myexp2(int x, int n, double x_n_n)
{
if(x_n_n<1.0e-16) return 0.0;
return myexp2(x, n+1, x_n_n*x/n)+x_n_n;
}
double myexp(int x)
{
return myexp2(x, 1, 1.0);
}
int main(void)
{
printf("%.20f\n", myexp(5));
return 0;
}
逐次出力でいけました。ありがとうございます。
>>433 積み残し誤差が問題なら後ろ側から足してけ
小さい方から足すと積み残し誤差は最小限に抑えられる
浮動小数点数の宿命だな
>>429 realloc()とか使ったらだめなん?
配列の大きさを決め打ちするとWrong Answerになるならvectorみたいな
コンテナがいいけど、頑張ればCでも書けない事もない
んふー。ラムダ式使ったら弾かれたw
topcoderって登録に大学名入力しないといけないの? 俺専門(笑)何だけど
それちがうとこ見てるだろ
複素数型の配列を用意して、 この配列の各要素に、10進数の各位の数をセットしたものを、多倍長型として定義して、 この多倍長型同士の掛け算関数も実装して、 多倍長型を使って適当に固定小数点数として扱ってA,Bを乗算すれば、仕組みがシンプルで簡単じゃね?
448 :
447 :2011/11/20(日) 20:04:39.47
まちがえた。 複素数じゃなくて、普通のchar型配列とかでいいですw
二進化十進?
失礼します。 引数を二つ持った再帰関数の問題なのですが、 停止条件がなぜ1ではなく(base)になるのか理解できません。 停止条件を1にしてみると27になり、1乗分足りないようです。 なぜなのでしょうか? 自分なりに調べましたが、引数を2つ持った再帰関数の情報が見つけられませんでした、 お手数とは思いますが、よろしくお願いします。 #include<stdio.h> int power (int ,int); int main (void){ printf("%d\n",power(3,4)); return(0); } int power (int base ,int exponent){ if(exponent == 1) return (base); else{ return(base * power(base,(exponent-1))); } }
xの1乗はxだからだ。 return 1にしたいならexponent==0だろ。
再帰やループで詰まったら一回一回手書きしてみるとだいらい原因がわかる。
453 :
450 :2011/11/21(月) 03:35:34.08
解りました!! if(exponent == 1) return (base); つまり、baseの1乗はbaseなので、1乗になったらbaseを返す。 if(exponent == 0) return (1); baseの0乗は1、0乗になったら1を返す。解ってしまえば当たり前な事でした。 再帰一回分余計になるからこうなっているのですね。 階乗の停止条件を形だけでしか見れていなかったようです。 return(base * power(base,(exponent-1))); ここの理解も曖昧だったのですが、 手書きでなぞってみたら return(base * 3); return(base * 9); return(base * 27); と帰っていく流れが掴めました。 (base * power(base,(exponent-1))) 停止条件のreturnからbaseを返してもらって、 (base * base) (base * (base * base)) (base * (base * base * base)) 最後にprintfに81を返すと。 良かったです、ありがとうございました。 つぎはハノイの塔に挑戦してきます。
do-whileの所を教えてください。 #include <stdio.h> int main(void) { int num = 0; int sum = 0; printf("計算したい数字を入力(0で終了)\n"); do{ scanf("%d", &num); sum += num; }while(num); printf("合計は%dです\n",sum); return 0; } @scanfして数字をnumへ Asumに加算する Bくり返しの条件はnumが0以外の時 while(num != 0)なら、0以外ならくり返し(=0入力で終了) と分かるのですが、 while(num) がなぜ0のとき終了できるのか分かりません。どういうことでしょうか(´;ω;`)
JISX3010より。 6.8.5 繰返し文 構文規則 繰り返し文: while (式) 文 do 文 while (式) for (式opt ; 式opt ; 式opt) 文 for (宣言 式opt ; 式opt) 文 (中略) 意味規則 繰返し文は、ループ本体 (loop body) と呼ばれる文を、 制御式が0と比較して等しくなるまでの間、繰り返して実行する。
>>454 確かに普通わかりやすく書くのであれば
do {...} while(num != 0)
で 「num が 0 でなければループ続行」。
これは != 演算子が「二つの項が等しくなければ 1、それ以外ならば 0 」を返す2項演算子と考えてよいから。
printf("%d\n", 1 != 0)
printf("%d\n", 1 != 1)
を実行させて値を調べてみよ。
do {...} while () 文は条件式が 0 以外のときループを続行する。
したがって、これを
do { ... } while (num)
と書いても同じ意味。
if 文でも同じことがいえる。
if (a != 0) { ... }
を
if (a) { ... }
と書くことができる。
>>454 難しく考えることはない。式の値は、0じゃなければ真となる。
でも、!=0を書くことは意味をはっきりさせることになるから必要が無ければ書かない癖はつけない方がいい。
>>455-457 おぉありがとうございました(´;ω;`)気が楽になりました モヤモヤすっ飛んだ
教えていただけないでしょうか? /*5件の体重データをキーボードから入力し体重の最大、最小、平均、合計を求めよ*/ #include<stdio.h> int main(void) { float weight,kei=0,heikin,max=0,min=1000; int n=1; //ここはint型にするべきなのか?float型にすべきか? while(1){ printf("%d件目のデータを入力してください: ",n); scanf("%f",&weight); if(n==0)break; kei = n; n++; if(n==1){ 不明; 不明; } if(weight>max) max=weight; if(min>weight) min=weight; } heikin=kei/n; printf("合計 %6.1f\n件数 %6.0f\n平均値 %6.1f\n最大値%6.1f\n最小値%6.1f\n",kei,n,heikin,max,min); return 0; }
>>459 論理的思考がきちんとできていない悪寒。
n は件数を数えるだけだから整数型でいい。
それ以外のことは、ロジックをきちんと考えて作り直してからだな。
インデントしない、変数名はローマ字読みだったりと… 指摘されないのかね?
keiって合計のことならweightを足すべきじゃないんかね。
kei→totalとかsum heikin→ave n→cnt などのようにして統一するべき それよりも型が不明ですとか ソースが埋められませんだと 勉強の仕方や手順に問題があるな
>461 重箱の隅
>>459 はコピペじゃなかったっけ?何年も前に見た記憶がある。
そのレベルの問題はどの本でもあるしな 似たような問題があっても可笑しくない
一寸前なら憶えちゃいるが 数年前だとチト判らねェなあ コピペ臭いソースだって? ここにゃ沢山あるからねェ
もう仕様何て変わらない言語だしな
仕様を変えてもC89のままのコンパイラーが多いし
C89とか何年後の話だよ
>>471 78年後だよ。どうしてそんなのも計算できないのにプログラムやってるのはなぜ?
78年後もCってあるのか
>>473 lisp と同じくらいに C も存在しているだろう。
「だろう」は仮定形 それにlispもCもあるか分からないが正解
50年もしたらなにかブレイクスルーがおきて、SFに出てくるような人工知能が開発されて、 プログラミングなんてなくなってるような気がする。 自然言語でおkみたいな。
>>472 ん??順当に考えれば2015年の冬じゃないか?
Lisp が登場してから 50年以上経つわけだが。
ネタってわかってやれよ
>>476 ビル・ゲイツはPowerPointみたいにプログラミング出来ないか?と社内で言い続けて、それでもVC/VB/VC#しか無いんだぞ
理想にいちばん近いのでもスクラッチが今の限界だ
文字列についてなんですが char str[] = "ABCDEFG"; と宣言するのと char *str = "ABCDEFG"; と宣言するのと char str[8]; と宣言してヌル文字含めて一文字ずつ代入するのとで出来上がるstrに違いってありますか? 出力したりサイズ測ったりSTRCMPで比べたりしてみた限りでは違いは無いみたいなのですが・・・
コミケの事だろ
なんか改行多いって怒られるので分けます スミマセン //ソースコード int main(void){ char str1[] = "ABCDEFG"; char *str2 = "ABCDEFG"; char str3[8]; str3[0] = 'A'; str3[1] = 'B'; str3[2] = 'C'; str3[3] = 'D'; str3[4] = 'E'; str3[5] = 'F'; str3[6] = 'G'; str3[7] = '\0'; printf("str1:%s, sizeof str1:%lx\n",str1, sizeof str1); printf("str2:%s, sizeof str2:%lx\n",str2, sizeof str2); printf("str3:%s, sizeof str3:%lx\n",str2, sizeof str3); printf("str1 = str2 :%d\n", strcmp(str1,str2)); printf("str2 = str3 :%d\n", strcmp(str2,str3)); printf("str3 = str1 :%d\n", strcmp(str3,str1)); }
//実行結果 str1:ABCDEFG, sizeof str1:8 str2:ABCDEFG, sizeof str2:8 str3:ABCDEFG, sizeof str3:8 str1 = str2 :0 str2 = str3 :0 str3 = str1 :0
配列の領域が確保されるか read onlyの文字列の領域が確保された後にそのアドレスをポインタで指すか
>>483 文字数変えても sizeof str2 の数値だけは変わらんよ
ポインタが 8byte ってことは 64bit でコンパイルしたのかな?
>>480 60年代とか、チェスで人間に勝つのは絶対無理とか言ってた学者がいたのに勝てたじゃん。
50年もしたらなにがおきるかわからん。
皆さん有難う御座います。
>>485 なるほど、str1とstr2は後から書き換えできないんですね。
書き換えるとしたら、別の文字列を用意してポインタの参照先変更ですか。
>>486 あー確かにこれだとポインタ変数のサイズになっちゃいますね
STRLEN使わないとダメですか。
Macでやってるので64bitになってるかも知れません・・・
32ビットだと4バイトになるのですか?
てか最後の出力のとこ間違ってstr2になってますね 正しくはstr3です
>>488 str1は配列の初期化、最後に\0ははいらない
なんてことはなく、入る str1とstr3は初期化と代入という違いはあるけどほぼ同じ
>>487 50年もしたら将棋で人間に勝てるようになってるかもね
10年後には人間は勝てなくなるよ
>>491 女流は負けた。将棋連盟会長も苦しいだろう。ここは光速の谷川さんに期待したい。
わざわざ年明け早々にやらなくてもいいのに
50年後には人間は生きていけなくなるよ
switch文の質問です。 下の(1)と(2)って意味が異なりますか? どちらも必ず処理を1つ行った後にbreakされると思っているのですが 結果が異なるようです。何か助言があればお願いします。 (1)breakを出した状態 switch (c) { case A: if(aa>bb){処理 A;} break; case B: if(aa>bb){処理 B;} break; default:処理 N; } --------------------------------------------------------- (2)breakを{}に含めた場合 switch (c) { case A: if(aa>bb) { 処理 A; break; } case B: if(aa>bb) { 処理 B; break; } default:処理 N; }
なるほど ってことはこうですかね パターン1:char str[(要素数)] (= 文字列リテラル); 要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない。 文字列リテラルで初期化した場合のみ、要素数を省略可能。その場合、文字列リテラルの文字数+1(ヌル文字分)の要素数の配列となる。 要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。 後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。 パターン2:char *str = 文字列リテラル; 書き換え不能な文字列リテラルがメモリ上に用意されたあと、文字列の先頭アドレスがstrに格納される。アドレスの参照先は変更可能だが、文字列の各要素に代入は出来ない。 それにしてもC言語の文字列の扱いは面倒ですねぇ なんかまだ落とし穴がありそう・・・
500 :
496 :2011/11/21(月) 23:22:58.86
>>497 >>498 case Aが必ず選択されて、aa>bbが真になる場合でも
処理が違うということでしょうか??
case Aが選択されてaa>bbが偽になる場合にcase Bが実行されるのは分かるんですが
間違えた ×文字列リテラルで初期化した場合のみ、 ↓ ○文字列または配列要素列挙で初期化した場合のみ、 または、 ○初期化した場合のみ、 てかリテラルじゃなくても初期化は出来ますな
>>500 何を聞きたいのか分からん
いつもそれが成り立つなら switch いらないよ
>>496 (2)だとcase A:で処理Aを行った時しかブレークしないじゃん
つまりcase Aかつ、 aa>bbでないとき、ブレークせずにcaseBの分岐に行っちゃう。
>>500 そこだけみれば一緒じゃないかな。
ただaa>bbが偽のときに処理Nに行くけどいいのか?
505 :
496 :2011/11/21(月) 23:30:21.50
>>488 >str1とstr2は後から書き換えできないんですね。
str1は書き換えられる。
str1とstr3は初期値付の宣言か、宣言後の代入かの違いで、
ほぼ同等といえる。
>>499 >要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
NULキャラ込で初期化されるぞ。
>要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。
今手元にK&Rが無いので調べられないが、配列サイズより文字列リテラルが大きい場合は、
未定義だったと思う。
>後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。
先に述べたように、NULキャラ込で初期化されるので、サイズだけ気にすれば良い。
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。 本でサイコロを作成し、 label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。 それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。 ■ Random suuji = new Random(); label1.Text= suuji.Next(1, 7).ToString();
>>507 マジですか!
てことは
char str = {'A','B','C','D','E','F','G'};
でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?
逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?
また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。 本でサイコロを作成し、 label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。 それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。 数字を表示させる行を少し改良し Random suuji = new Random(); label1.Text= suuji.Next(1, 7).ToString(); から Random suuji = new Random(); suuji.Next(1, 7).ToString(); if (suuji="1") label1.Text="●" とif文を入れてみたのですがうまくいきません・・・ 本の中に答えが無く、先に進めません・・・どうすればいいのですか?
label1.Text="●" ↓ label1.Text="●";
suuji.Next(1, 7).ToString(); if (suuji="1") ↓ if (suuji.Next(1, 7)=="1")
suuji.Next(1, 7).ToString(); if (suuji="1") ↓ if (suuji.Next(1, 7)==1)
515 :
507 :2011/11/22(火) 00:46:13.21
>>509 >char str = {'A','B','C','D','E','F','G'};
>でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?
ちがう。
>>499 自分で言っているように
char str[(要素数)] (= 文字列リテラル);
で初期化する場合はヌル文字込で初期化される。
「文字列リテラル」ってのは"でくくられたものだよ。わかっている?
char str[] = {'h', 'o', 'g', 'e', '\0'};
の簡易記法が
char str[] = "hoge";
と思っておけば良い。
>逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?
下記だね。
char str[] = {'h', 'o', 'g', 'e'};
>また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
もちろん、そんな気の利いたことはしてくれない。
>>515 えっと、つまり、やっぱり
文字列リテラル(ダブルクォーテーションで括られた文字の羅列)で初期化した場合と違って、
配列要素を列挙して初期化した場合ヌル文字は自動で追加されないから最後にヌル文字も列挙しないといけないってことですよね?
また、要素にアクセスしてヌル文字を上書きしてしまった場合、ヌル文字を自動で追加したりはしてくれないので、ヌル文字が無い配列にならないよう、
ヌル文字より前だけをいじるか、ヌル文字を上書きした場合、それより後ろにちゃんとヌル文字を自分で挿入しないといけないってことですよね。
>>499 はそういうつもりで書いたのですが・・・
>>516 は?
分かってるんだったら
>>509 みたいに揚げ足取りみたいな聞き方しないでそういうつもりで書きましたって最初から書けばいいじゃん。
わざわざ試すような聞き返し方して、どういうつもり?舐めてんのお前?立場分かってる?死ねば?
>>516 言いたいことをシンプルに伝えられるようにするか、規格読むのがいい。
>>507 は普通に間違えてるからびっくりする気持ちもわかるけどね。
> > 文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
> NULキャラ込で初期化されるぞ。
507がアホなのに逆ギレしてるw
無能な働き者
>無能な働き者 上司がよければそれなりに役に立つが 勝手に問題をばら撒く、もしくは勝手に悩んでつぶれるやつが多い
有能な怠け者は司令官に、 有能な働き者は参謀にせよ。 無能な怠け者は... そうだな、連絡将校ぐらいならできるだろう。 無能な働き者? それは処刑するしかあるまい。
char c = 'a'; printf("%c",c); としなくてはいけないところ、 int c = 'a'; printf("%c",c); でもちゃんとaと表示されるのはなぜですか?
>>523 'a'は97の別の書き方。(文字コードがASCIIの場合)
charもintも整数。
charをintにキャストしてprintfに渡されてるから。
ANSIの規格書たけーんだよ(#゚Д゚)ゴルァ!! って思ってるのは俺だけですか?
無料でダウンロードするのが真のハッカー
char cc='a'; int ic='b'; printf("%c %c\n",cc,ic); 逆アセンブル char cc='a'; 004113CE mov byte ptr [cc],61h int ic='b'; 004113D2 mov dword ptr [ic],62h printf("%c %c\n",cc,ic); 004113D9 mov esi,esp 004113DB mov eax,dword ptr [ic] ;/*int型変数icの値を32bitレジスタに読み込み*/ 004113DE push eax 004113DF movsx ecx,byte ptr [cc] ;/*char型変数ccの値を32bitレジスタに読み込み*/ 004113E3 push ecx 004113E4 push offset string "%c %c\n" (4157A0h) 004113E9 call dword ptr [__imp__printf (4182C8h)] 004113EF add esp,0Ch 004113F2 cmp esi,esp 004113F4 call @ILT+325(__RTC_CheckEsp) (41114Ah) charでも32ビットの数値として渡してる。
529 :
523 :2011/11/22(火) 12:36:45.59
みなさんありがとうです。 てことはintでも正解ということですか? やっぱりcharにしないとダメですか?
見やすくするためにcharにしとけ。
531 :
523 :2011/11/22(火) 13:12:07.48
はい。charんとわかりました。 ほintにありがとう。
531をあぼ〜んした。 後悔はしてない。
intptr_t ってポインタを格納するのに充分なサイズってだけで、 ポインタと同じサイズと定義されてるわけじゃないのか。 ポインタと同サイズと定義されてる整数型ある?
無い。
535 :
デフォルトの名無しさん :2011/11/22(火) 17:37:33.45
537 :
デフォルトの名無しさん :2011/11/22(火) 17:59:33.27
Cを知っていたら、なんでもできるような気分になれるよね
言語だけ知ってたって意味のある事は何にもできやしないよ。
日本語を知っているだけで素晴らしい文章が書ける訳じゃないしな
540 :
デフォルトの名無しさん :2011/11/22(火) 18:54:19.09
良い文を読んで其に習い自分で書く事が重要だね
其なんて背伸びして使ってみても場違いで下手な文章にしかならないしな
542 :
デフォルトの名無しさん :2011/11/22(火) 19:10:29.36
n=1;
故意に使ったのか?
546 :
デフォルトの名無しさん :2011/11/22(火) 21:38:17.57
>>527 その程度で「真」とか言ってるのはバッカー
もっと上のレベルで破壊活動する奴と開拓的なことをする人を区別する呼び名がある
547 :
510 :2011/11/22(火) 21:57:12.26
はじめはscanfでやってたんだけど、読み込む回数が指定より少なくて
ググってたら、scanfつかうな みたいなのがいくつかあって迷走しちゃいました(涙
つかったときのソース
http://codepad.org/sIqIrd29 これは前行の改行をよみこんじゃってるのかな?
>>523 printf() のような可変長引数関数の場合は、char 引数は int に格上げ(integral/integer promotion)される。
>>526 ISO/IEC 9899:1999 TC2ならいくらでも転がっている。
scanfの直後に,fgets+sscanfつかうと入力する前に改行が入ってしまうとおもうんですけど そういうときはどうしてますか? 混合させずにscanfはもう使わないほうがいいのかな
>>550 >int cards[4][13]={0};
厳密にはまずい。
>>555 参照。
>cards[0][d-1]=1;
さりげなくちゃんと訂正してますね。
void CMain::TP2(int left_in_x,int up_in_y,int right_in_x,int down_in_y,float *left_x,float *up_y,float *right_x,float *down_y){ *left_x=(1/16*(left_in_x-1)); *up_y=(1/16*(up_in_y-1)); *right_x=(1/16*right_in_x); *down_y=(1/16*down_in_y); } float Tx_Left_X, Tx_Right_X, Tx_Up_Y, Tx_Down_Y; TP2(1,1,1,1,&Tx_Left_X,&Tx_Up_Y,&Tx_Right_X,&Tx_Down_Y); うまく数字が返ってこないです ホントはTP2関数を使ったら Tx_Left_Xとかの値が変わってるはずなんですが…
詳しくソースコードまでありがとうございます すごく参考になりました。
C言語でCGIの勉強したいのですがおすすめのわかりやすい書籍を教えて下さい
>>558 整数同士の割り算の結果は整数になるので例えば1/16 = 0 となっている、と思う。
>558 1/16が整数のまま計算されて0になるんじゃね。 1.0/16.0とかやってみたら?
なるほど!試してみます!
出来ました、ありがとうございました x.0にしないと、floatとか小数点まで計算してくれないですね、勉強になりました
×2とか×4とか÷2、÷4などのビット演算で表すことが出来る計算はビット演算使ったほうが早いんですか?
>>565 CPUによるかもしれないが普通はそう
もっとも現代的なプログラミングだと、そういう命令レベルの選択は
最適化コンパイラに任せたほうがいいよねっていう流れ
下手に人間が頑張るより賢い結果を出すことも多い
567 :
デフォルトの名無しさん :2011/11/23(水) 02:30:42.88
char moji[100]; int a,b,c,d,i; a = b = c = d = i = 0; printf("文字列を入力せよ\n"); scanf("%s",moji); printf("結果:%s\n",moji); for(i=0 ; i <= 3 ; i++){ if(moji[i] == 'a') a =+ 1; else if(moji[i] == 'b') b =+ 1; else if(moji[i] == 'c') c =+ 1; else if(moji[i] == 'd') d =+ 1; } 文字列としてaaaaを入力してもループ2周目にてaの値が増えません。 文字の場合の比較の仕方が間違ってたりする?
>>567 複合代入演算子はa += 1
他の行も同様
有難うございます。 盲点でした。 =+ の場合はそのような演算子はないわけですが、どのように処理されているのでしょう?
a=1;
aに+1を代入してる。 -1のようなもん
なるほど a =+ 1; ⇒ a = +1 と見られるんですね。 それと区別するために+= 良くわかりました。有難うございます。
>>560 書籍じゃないが猫でもわかるのサイトで紹介してる
規格に厳密な話をすると 整数型a_typeとb_typeがあって bit幅がa_type > b_typeであっても 最大値がa_type > b_typeである保証はどこにもないですよね?
型毎にxxx_MAXってマクロがあるからそれで比較してみたら?
>>575 それがintやshortのことなら保証されてる。
BCDコード有効なら…
int・64ビット・最大値2147483647でshort・32ビット・最大値2147483647の処理系とかも規格上は許されるはずだ
一般的想定からかけ離れた仕様のコンパイラなんか使いたくない。
一般想定決め打ちして、なんかあると書き直さなきゃなんないような コードなんか書きたくない。
100行くらいのプログラムが3つあって、 その8割くらいは全く同じ記述になっている場合に、 3つのプログラムを一つにまとめて2割の異なっている部分だけを条件分岐で処理を分けた方がいいんでしょうか 前者だと冗長ですが分かりやすいと思います 後者は簡潔だけどさらに条件分岐が増えた場合などに段々可読性が落ちてくると思います どっちがいいんでしょうか
文面見る限り、ほぼ自分でもわかってると思うけど、 それは後々の変更の可能性によるんじゃね。
スレ違いだがそういう時こそ継承の出番なんだがな
というか、その8割方同じだというソースをライブラリとして分離すればいいだけなのでは? 物によるだろうけど、c++ならテンプレート関数使えば綺麗に書ける可能性もある。
>>582 「全く同じ記述」の部分が、プログラム中のあちこちに分散してるんだとエスパーしてみた。
Cでデスクトップに貼り付けるガジェットのようなものを作っているのですが、 ショートカットキーやクイック起動でデスクトップの表示を実行すると消えてしまいます。 これを常に表示させるようにできないでしょうか? また、デスクトップの表示は処理的に言うとすべてのウインドウを最小化しているのでしょうか? その辺もわかる方がいれば教えてください
マルチ(・A・)イクナイ!!
マルチってなんでダメなん?
飛んできてるメッセージ見りゃわかりそうなもんだけど、そうでもないの?
デスクトップメタファはwindowsに限った概念では無いわけだが
>>589 自分で適切な聞く場所すら見つけられませんでした。と言う、私馬鹿過ぎるんです宣言してるから、回答しても理解してもらう率は低い
>>593 >>587 がWinじゃないといった時点で誘導すれば良いだけの事
Unix系OSでもMacでも、デスクトップガジェットって使ってるの見たことない
(ググるガジェットとかは使えるの知ってるが)
こういうのは、大抵オタクが作りたがる類のもの
>これを常に表示させるようにできないでしょうか? 壁紙に書き込む
>>581 いまさらintが16bitの環境を想定して書きたくないっていうか。
>>599 って言って 32bit で決め打ちした連中は、
ちょっと前に UNIX 系が64bitに移行したときは、
必死になって64bit に書き直してたな。
601 :
デフォルトの名無しさん :2011/11/23(水) 23:14:12.86
結局、いまのintって何ビットなの?
32bitが普通
変数名でmax_numとmaxNumとどっちが良いかな? っていうかこういう二つの単語のときはどう付けたらいいんだ
どっちでもいいよ
lpszCmdLine みたいな変数の命名法ってハンガリアン記法っていうんだっけ。人によっては嫌われるらしいけど。 バッファのサイズとかにunsigned int szBuffer; とか データ受け取り用の変数に char *rcvData; とかは許して欲しいと思わなくもない。
プレフィックスに型情報を埋めたやつがハンガリアンだと思う。
>>606 システムハンガリアンとアプリケーションハンガリアンは違うよ
システムハンガリアン: 変数の型をプレフィックスに アプリケーションハンガリアン: 動作や大きさ等の変数の用途概要をプレフィックスに こういうこと?
2種類あるって初めて知った。
ポインタにpHogeだけは癖でやってしまう俺
>>608 それは知っているのだけれど、全部まとめて「ハンガリアンはクソ」って主張を見かけることがあるので・・・
>>609 そう。
>>611 それ、わかるわw
スコープでプレフィックスを付けたりはする。
c++ならプレフィックスより型を変えて安全策にするけどCは面倒臭いね
615 :
デフォルトの名無しさん :2011/11/24(木) 00:22:38.67
高級アセンブラに多くを求めすぎるアホどもが勢いだけはご立派で さすがの C もずいぶん汚染されたものだ
fgetsを利用して配列に入力した文字列を出力するプログラムを作成しているのですが 問題のあるポインタの変換(関数 main )というエラーがでてきて実行することができません。 おそらくfgetsの書き方がおかしいと思うのですがどなたか教えていただけませんか? 私が書いたソースコードは以下の通りです。 #include <stdio.h> main() { char str[3][20]; int i; printf( "3つの文字列を入力して下さい\n" ); for(i = 0; i < 3; i++ ) { //scanf( "%s",str); fgets(str,sizeof(str),stdin); printf( "入力した文字は%sです。\n" ,str); }
fgets(str[i],sizeof(str),stdin);
sizeof(str) はダメだろ。
fgets(str[i],sizeof(str[i]),stdin); printf( "入力した文字は%sです。\n" ,str[i]); ってしたかったんちゃうの?
fgetsで改行が入って変な表示になるけどね。
>618さん >619さん >620さん ありがとうございます。無事に動いたようです。 sizeof(str)で配列STRの要素数を取得するのだと思ってたのですが 違うのでしょうか? 配列を使うのでしたらやはり620さんみたいな形式で書くべきみたいですね。 ありがとうございます
sizeof(str)はstrのサイズであって要素数ではない。
>>622 sizeof(str)だと、str[3][20] のサイズ=60
>581 は全ての型が何bitでもよく、 文字コードはどれでもよく、 エンディアンがどちらでも稼働するようなソースを常に考えてソースを書いているのか。
626 :
デフォルトの名無しさん :2011/11/24(木) 01:06:44.94
ビットパターンからfloatの仮数部、指数部のビット数を類推することは出来ますか? また、出来るのならやり方を教えて下さい
カッコつけるなボケ
>>626 2^nを代入すると指数部だけが変化する
3 を代入すると仮数部の最上位ビットが1になる
かもしれない
llist_t clone(const llist_t ls){ //リストをコピーし新たなリストを返す関数 llist_t np; if(ls == NULL){ return ls; } else if(ls != NULL){ np = allocNode(); //ノード領域の確保 np->next = clone(ls->next); //ノードへのポインタ np->data = ls->data; //リストの要素 return np; } return np; } これを逆順にコピーしたいんですが、教えていただけないでしょうか。
もしかして文字列じゃなくても 配列の変数名を要素指定せずに書いたら 先頭要素へのポインタになるのですか?
>>629 双方向リストにするか再帰にする
>>630 文字列ってヌル終端であるような文字の配列だよ。さして特殊な配列ってわけじゃない
>>631 9行目で再帰をつかってるんですが逆順にできませんでした。
再帰をつかって逆順にするにはどうしたらいんでしょうか?
struct { char *buf; } hoge; の構造体をstaticで宣言して中のbufはmallocで動的に確保することって出来ますか?
static hoge h; void f(int s) { h.buf = malloc(s); }
635 :
632 :2011/11/24(木) 04:10:36.93
>>631 解決しました。ありがとうございました。
636 :
デフォルトの名無しさん :2011/11/24(木) 08:49:19.77
>>636 変数にだろ。
そもそもIEEE754のfloat/double以外のどんな存在を仮定して知りたいのかを説明しろ。
文章の各文字を指定した文字数だけ、ずらすシーザー暗号を作成せよ。と言う問題なのですが、解らなくて困っています。 例:文字列入力:Nobember 25th. ずらす文字:3 生成文字:Qryhpehu 25wk. よろ
↑予測変換を押さないで送信してしまいました…よろしくお願いします。
アルファベットの文字コードを3ずらすだけか? char型配列で変換テーブルつくるか、 以下のことを判断する処理で一字づつしょりする。 ・アルファベットか否か。 ・大文字か小文字か。 ・xyz/XYZか否か。
void f(char* s, int shift) { static const char* u = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static const char* l = "abcdefghijklmnopqrstuvwxyz"; while (*s) { if (isalpha(*s)) { const char* a = isupper(*s) ? u : l; *s = a[ ((*s - a[0]) + shift) % 26 ]; } s++; } }
void f(char* s, int shift) { while(*s) { if (isupper(*s)) { *s = 'A' + ((*s - 'A') + 26 + shift) % 26; } else if (islower(*s)) { *s = 'a' + ((*s - 'a') + 26 + shift) % 26; } s++; } }
よくわからんがその理屈だと日本語でも不正解じゃないのか
漢字が何文字あると思ってるんだ
>>644 は・・・・
日本語に対応したプログラム書いてみろや
漢字に対応するなら別に文字数関係ないだろ。 なんでテーブル持つ前提なんだよw
>581の出番だぞ。
ベトナムアルファベット:クオックグーでの正解実装例を頼む。
>>642 はASCII限定ならこれで十分かも。
と、
>>643 を見て思った。
void f(char* s, int shift)
{
while (*s) {
if (isalpha(*s)) {
char a = isupper(*s) ? 'A' : 'a';
*s = a + (*s - a + shift) % 26;
}
s++;
}
}
何小学生みたいなことやってんだよw
いい加減言語を統一するべきだよね 各文化圏の固有の言語は文化財として保存する目的のみで継承して日常や仕事では英語を使う これが世界にとってもっとも良い選択
UNICODEというのがあってだな。
>>654 それは文字コードを統一しただけだろ
言語そのものを統一するべき時代がもう来てるんだよ
個々の人間の活動領域に対して世界は狭くなりすぎた
学術文化知識蓄積の無い辺境言語はエー語でもシナ語でもなんでも適当に飲み込まれてしまえばいいと思うよ
エスペラントというのがあってだな。
肉体言語一択
なら日本語を選択するべきだな。 識字率から考えれば至極当然の結論となる。
>>655 熱心なキリスト教徒が許さんだろ
>>659 日本の日本語識字率が世界一であるかのような言い方だなぁ
音読出来るのと読み解くのは違うからねー 訓読みの概念が無い中華てよくもまぁ教育破綻せず過ごしてるもんだと思うわ 日本語が連想コンテナとすれば中華はベッタリswitch-caseで判別してる様なモンだろ?
またこういうくだらない話が低脳のレスで埋まっていくのか。
学校でc言語の課題でた たすけて
>>659 中国語をパクったパクリ言語を選択しなくても良いだろ
日本に伝わった漢字を作ったのは中国じゃなくて、漢な。 モンゴル帝国の時代を経て、今のチャイナが使っているものは漢字に似た何か。
>>665 それを言ったら日本も漢字に似た何かだよ。
台湾のほうがより漢字に近い
東アジアの言葉の起源は日本アルニダ 中国、朝鮮の言葉は日本の言葉のパクリ言語ニダアル
668 :
デフォルトの名無しさん :2011/11/24(木) 20:21:01.67
>>606 szとかしないで普通にbufferSizeとか書けばいいじゃん。
rcvも一文字省略してなにがうれしいの。
まあ、そりゃそうなんだけど、皆でよってたかってハンガリアン記法をいじめなくてもいいじゃん、と思いまして。
ハンガリアン記法を強いられて、いじめられた過去があるんじゃないの?
>>664 文字体系と言語体系の区別すらできないってどうよ?
szはサイズのプレフィックスじゃないだろ
>>669 commandLineBufferSizeとか長すぎるからだろ。
で、receiveのどこを1文字省略?
recvという伝統的な関数名からさらに一文字省略
>>674 それが長すぎるかどうかは状況によるな。
単語の数を減らせない状況ならcmdLneBuffSzとか省略するより、そのままのほうがいい。
buffとかlenとかは使うな。 sizeはもともと短いからあんまり略さない。 プレフィックスでszとかつけると文字列っぽくなるな。
ふと思ったけど、XXXの個数を表すのにcntXXXとかnumXXXとかするのはハンガリアン記法なんだろうか? それぞれ、CountOfXXXやNumberOfXXX (キャメルケース) を省略しただけ、とも取れるような気が。 あと、szはなんで文字列なんだろう? sz => string which terminates with zeroの略? ゼロ終端文字列なら zero-terminated string => zs じゃねーの?と、よく思う。
>>679 出典のないwikipなんて意味あるんだろうか。
お前の妄想よりはな。
>>678 szは昔のMSのコードで文字列のプレフィックスだった。
>>681 おれの妄想と同程度だと思われ。
アプリケーションハンガリアンとかシステムハンガリアンとか、最近言われだした言葉なのに
それすら出典が乗ってない。
じゃぁ編集しとけよ。
システム・モンゴリアン・チョップ
>>682 ほほう。慣習ってことですかね。
過去の資産を流用する場合等は別として、マイクロソフトでさえ非推奨なハンガリアン記法を、
あえて、いまさら使用することにメリットは見出しにくいんだけどね。
ハンガリアン記法を使ってる奴なんて、脳みそ膿んでるんじゃねーの、
とか言われると、好きにさせてくれ、と思わない訳でもないのですよ。
ここも雑魚スレだな
690 :
デフォルトの名無しさん :2011/11/24(木) 23:44:38.16
雑魚乙。
691 :
デフォルトの名無しさん :2011/11/25(金) 00:08:23.03
AIZU自動ジャッジな22番の問題に手こずる私…。 >与えられた整数の並び a1, a2, a3, , , an で、連続した項の和の最大値を出力して終了するプログラムを作成して下さい。 という問題なんだけど、 5 -1 3 -6 -3 11 という並びの最大値は 9 (全部の項の和)でしょうか、11(最後の一項のみ)でしょうか。 AIZU的な正解は 11 なんですが、連続してないように思うんですが。そういうものなのでしょうか? 高校生レベル未満の私にご教授(教示ではなく)ください。お願いします。
692 :
デフォルトの名無しさん :2011/11/25(金) 01:09:53.37
>>1 C言語最近始めたんだけど
C言語で金を稼ぎたいんだけど、主にC言語って何ができるの
>>691 につられてやってみたが22がクリアできないw
答えが間違ってるとだけ言われて何がおかしいのかわからずどうすればいいんだw
694 :
デフォルトの名無しさん :2011/11/25(金) 01:15:16.04
処理系によって、floatとdouble、またはfloatとdoubleとlong doubleの形式が同一のものがあるそうなんですが、そうすることのメリットについて具体的に教えて下さい
>692 この世にあるプログラムと同等なことすべて。
>>691 もしも最後の11 を 6にして、最初の手前に -100 を追加した場合は、答えは何になるのが正しいってことなの?
new new
-100 +5 -1 +3 -6 -3 +6
この場合は答えは7ってことなのか?
+5 -1 +3 = +7 の時が一番大きいから7ってことなの?
「任意の連続した区間の合計によって得られた、もっとも大きい数は? (要素1個だけでも連続した区間とみなす)」ってことなのか?
問題の意味が、いまいち分かりにくいんだが。
>>694 floatを実装する意味がない、long doubleのサポートがコストに見合わない、
などの理由だな。
つまり、処理系側の都合ってこと。
typedef struct CommandLineBufferSize_ { int value ; } CommandLineBufferSize ; CommandLineBufferSize n = { 100 } ; n.value = 200; printf("%d", n.value) ; これがベストな選択
>>691 その手の問題では一つの項も含むのが普通
>>699 どもです。数学的には「連続する」とはゼロでなければ
(1個であっても)連続していると考えてよいわけですね。
>>696 そういうことになりますね。
さらにこの手の問題では要素0個の区間も含むと思ったが。
>>700 数学かあ... どうなんだろ。
要素1個の区間が連続で「ない」として、矛盾はないだろうか。例えば任意の連続
する区間を1か所で分断してできる2つの区間は連続であると期待されるとか...
×連続する区間 ○連続な区間 ああ元の話だと区間でなくて項か
C言語で大富豪を作りたいです。とっかきりから教えてくれる方いませんか?
まず、服を脱ぎます。
外交官に話を持って行きます。
プルトニウムを飲んで健康になります
>>703 まずおまいのC言語のレベルはどんなもんだ
配列操作くらいは一通り知らんと何ともならんぞ
>>708 配列は何となくわかります。あとは構造体?とか if文?とかそのくらは授業でやったんですが。
まずトランプのシャッフルからだ。
>C言語で大富豪を作りたいです。 金持ちになりたいってこと?
>>711 自分がじゃなくて他人を金持ちにするってことだろ。
>>712 こき使われる側になりたいってことか
それ俺得意だぜ
こんなマゾな仕事してる人間はほとんど、こき使われることに関してはプロフェッショナルだろ
まずは4人対戦だとしたらランダムに13枚のトランプを用意するんだよね
イカサマありか無しかが問題だ
ローカルルールに採択について。
簡単なCPUのアルゴだったら出てる数字より大きい一番小さいトランプを選択させたら良いんだろうけど
アウトロー大富豪 場外乱闘がウリ。
C言語でbmp画像を作ったりする方法教えてください
>>721 bmpファイルを出力できるライブラリを使って作るのが無難。
BMPのファイル構造調べてそれに沿ってバイナリー書き込みすればいい。
725 :
デフォルトの名無しさん :2011/11/25(金) 15:39:42.18
結局、ライブラリを探せば、C言語だったらなんでもできてしまうんだよな
726 :
デフォルトの名無しさん :2011/11/25(金) 15:59:40.77
猫でもわかるC言語の内容は理解してだいたいプログラミング できるのですが もう少し高度なプログラムが組めるようになりたいのですが お勧めの本とかありますでしょうか? 宜しければ伝授お願いいたします
BMPもフルに実装すると色々気を付けないといけないんだよね 上下逆とかゴミが入ったりズレまくったりするソフトとかあったな
>>726 アルゴリズムの本でも読んだらどうだろう。
でもそれよりやりたいことをしたほうが良いと思うけどね
BMPは各行(行=横一列)のドット数が、何かの倍数じゃないといけなくて、(4byteだったか?) その制約のせいで、よく表示がズレるBMPローダーライブラリーなんてのが量産されてた。 24bit ランレングス圧縮無し のBMP画像専用に限定すれば、 BMP←→char配列 の変換を行う関数は、わりと短いコードで作れるはず。 BMP←→ベタ変換ライブラリーを超コンパクトなコードで作っておけば、 こういう所に張るような、ライブラリー非依存かつ1ファイル簡潔なコードを書くときに、printfのかわりにbmp出力で結果を示すコードを簡単に書けて便利かもな。
下手の考え、休むに似たり
何も考えないニート
732 :
デフォルトの名無しさん :2011/11/25(金) 22:36:18.31
復活
733 :
デフォルトの名無しさん :2011/11/25(金) 23:15:27.69
え?
C言語でビットマップを作ったり弄ったりする方法が載ってるサイトがなかなか見つからないんですけど 本とかサイトでいいところありますか?
質問です。 今、二次元の配列の中身をすべて出力する関数を作ろうと思っているのですが、つまずいています。 print_array( array, x, y ); のようにした場合に、x行y列分を出力できるようにしたいのですが… 関数に二次元配列を引数で渡す際、受け取る側では列の指定をしなければならないのですよね? (勉強中なのでいまいち良く分かっていません。) こういった場合、どうすればよいのでしょうか?
>>738 まさにこれでした。
ありがとうございます!
インストールせずに(コピーするだけ)でコンソールでのマニュアル作業する だけで実行できる32bit以上のコンパイラとかありますか? 少なくともDOS時代にはあった。
bccあたりはどうだい? って思ったけどググって2〜3ページ見たけどDLできなさそうだから試すのあきらめた
>>740 mingwか何かでインストーラ無しの、一式をzipで固めただけのが無かったっけなあと思うが自信がない
え? BCC、フツーにエンバカデロ先生からDLできたけど・・・
CD-ROMブート版Ubuntuならインストール要らないね。
コンパイル環境でインストール必要なんてあり得んわ ランタイムが関わってゴチャゴチャ過ぎて手動設定が苦しくなるのはあるけど
c言語の顔文字作ったよ (´・c・`)
(´+c+`)
(・c・#)
(^D^)
(JAVA)
('A')
天才プログラマーに慣れる方法教えてください
バカになることじゃないの?
Stay hungry, stay foolish.
>752 2chを見ない。
小学生の頃からプログラムを打つこと
いっぺん転生すること
使う言語で使う言語の再実装にチャレンジ
759 :
デフォルトの名無しさん :2011/11/26(土) 22:08:59.45
単純にCでやったほうが楽だよ
知り合いに天才プログラマいるけど、小学校のときからアセンブリとかやるようじゃなきゃダメだよ
ここも雑魚だらけだな
ようクズ。
全部を理解して細かい部分は覚えずに 調べながらやれば十分でしょ。
>>764 MinGW を入れてると衝突してヤな感じなんだけど、こっちだけで使うならそれはそれでアリなのか。 目から鱗。
>>760 今30才くらいのプログラマ (俺含む) の小学生時代はアセンブリが普通な感じだったよ。
だからといってその年代に天才プログラマが多いってわけでもない。
766 :
片山博文MZ ◆0lBZNi.Q7evd :2011/11/27(日) 12:00:45.39
libcurl使っています。 現在のURLと相対パスから絶対パスのURLを作る方法を教えてください。
TinyXMLとTinyXPathを使ってみることにします。
これはまた、低レベルなコテだな。
コマンド引数ってなんすか?
コマンドライン引数の方が正しいのかな? コマンドプロンプト(コマンドライン)から実行する時にアプリへ渡す引数 c:\>xxx.exe [引数1] [引数2] ...
このスレ的には、 int main( int argc, char *argv[] ) { ほげほげ ・・・ の、 argv[1] 〜argv[argc-1]に入ってる文字列のこと。 (argc が 1 の場合はコマンドライン引数無し)
iヽ /ヽ | ゙ヽ、 / ゙i | ゙''─‐'''" l /:::\::::::::<○ > `ヽ コマンド引数ってなんすか? (( / <○>::::::::::⌒ ) | ⌒(_人__) ノ | | ヽ )vvノ: / ノノ ヽ (__ン 人 人 \ /
コマンド引数www
そんなに笑うなよ(´;ω;`)
いつから一発ギャグスレになったんだw
779 :
デフォルトの名無しさん :2011/11/27(日) 17:11:18.80
みなさんC言語でどんな分野のプログラム作っているの? 自分はニューラルネット
int array[10]; この場合ゼロクリアは memset(&array, 0, sizeof(array)); でも大丈夫ですか?
だめ memset(&array[0], 0, sizeof(array)); または memset(array, 0, sizeof(array));
>>781 ありがとうございます
認識が曖昧だったので助かりました
いつのタイミングの話だ
{int zero[sizeof(array)]={0};memcopy(&array,zero,sizeof(array));}
memcopy
gets関数を使って、入力した文字列の文字数を表示するプログラムを教えていただきたいです。
(σ・∀・)σゲッツ!! (σ・∀・)σゲッツ!!三( ・)アンド三(σ・∀・)ターン三(・ )アンド(σ・∀・)σリバース!!
>785 sizeof()はバイト単位だろ。
>785 これだとzeroはスタックに詰まれるからzeroをクリアした後にarrayをクリアするから二度手間だよ。
遺伝的アルゴリズムの質問は、このスレでよろしいでしょうか?
遺伝的アルゴリズムの話でしたらJAVAスレが専門なのでそちらに行ってください
C言語で実装する話なら、いいんじゃないかな?
あれれと思って探してみたらアルゴリズムのスレってないんだな。
前はあった
遺伝的アルゴリズムって何ですか?
最適化手法です
おれもアルゴリズムで言えば遺伝と淘汰の違いがいまひとつ判らんな
http://codepad.org/ybqvVD39 ↑のような、コマンドライン引数で2つか3つの数字を
足し算引き算掛け算割り算するプログラムを作ったのですが、
コマンドプロンプトで数字と符号の間に半角スペースを入れずに
入力しても計算できるにはどうすればよいのでしょうか?
自分で数字と演算子を切り分ける処理を入れる。
strtokで文字列の分割処理
strtol(), strtod()などで数値を切り出して、次に数字が出現するまで記号を処理すればいいよ。 strtok()を使うよりもいろんな意味でお勧め。
つ yacc
つgcc
>>765 小学生時代って今から20年位前か? もうちゃんとした開発環境とかあったと思うが
すごいな。
オレは小学生のときなんてゲームしかしてなかったなw 真面目にプログラムとか
書いたのは大学に入ってからだなあ。アセンブリーはさらにその後。
でもまあそこそこのレベルにはなったかな。
>808 MON *■
>>807 計算式が書いてある文字列から結果を出すプログラムなら作ったけど公開する気はまったく無いよ
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int ac, char **av) { char buf[4096], cmd[4096]; while(1){ fprintf(stdout, "formula> "); fflush(stdout); fgets(buf, 4096, stdin); buf[strlen(buf) - 1] = '\0'; if(buf[0] == '\0') break; fprintf(stdout, "%s = ", buf); fflush(stdout); sprintf(cmd, "perl -e 'print eval \"%s\";'", buf); system(cmd); fprintf(stdout, "\n"); } return 0; }
コマンドライン引数よりコマンド引数の方がしっくり来る。 話をむし返してなんだが。
未来を指すポインタを宣言しました
仮想未来へのポインタですか?
NULLPTREXCEPTION
818 :
デフォルトの名無しさん :2011/11/28(月) 13:21:52.80
820 :
818 :2011/11/28(月) 13:38:58.56
返答ありがとうございます
猫でもわかるC言語プログラミングは既に持っていてひととおりやってます
>>818 のサイトのC言語編の丁半博打や石とりゲームなど
ある程度コードがながく発展的なプログラムが載っている本を
探しております
>>820 Amazonで同じ著者の本を探してみたけど、こういうのしかなかった。
http://www.amazon.co.jp/dp/4797355581/ 英語だけど、The C Programming Languageに逆ポーランド記法の電卓プログラム等、
少し発展的なプログラムが載ってる。C言語のバイブル的な本で評価高い。
あと、私は読んだことがないのですが、The Art of Computer Programming という本はアルゴリズムを学ぶのに最適らしいです。
822 :
818 :2011/11/28(月) 14:25:06.71
ご丁寧にありがとうございます 紹介して下さった3冊 参考にさせて頂きます
>ある程度コードがながく発展的なプログラム 自己満足に浸るにはもってこいの素材だね。
>>820 Code Compliteとinside Windows読んどけ
あとプログラミング作法とそれに書いてある本全部
825 :
デフォルトの名無しさん :2011/11/28(月) 18:57:37.52
エクセルの以下の関数をC言語で実装したいのですが、 エクセルのヘルプを見てもΣの解法がわかりません。 どなたか教えて頂けないでしょうか。 STEYX GROWTH FORECAST TREND LINEST エクセルのヘルプを見たのですが、STEYX の計算式の一部には nΣy^2 のようにΣが使われています。 通常シグマとは、 10 Σ 2i i=0 のように、上と下に条件がついているものだと思ってます。 上にも下にも数字の付いていないシグマはどのように計算したらよいでしょうか。
C関係ねえよ 上下限無ければ集合全体だよ
標準誤差を使いたい人は標準誤差の求め方を知っているだろうというのは無理があるのかな。
>>826 集合全体、というと?
-∞から∞ってこと?
指定範囲のセル全体
どうせベクトルの絶対値でしょ? ベクトルの要素全部を2乗して足してってるだけじゃね?
ここほんとに入門編でつか?チンプンです。
m=1;
>>831 多くの質問者は、どこまでいっても初心者って感覚だよ
実際プログラミングってのは上には上がいるから、そういう気分にもなるし
ある分野が得意な人も、それを一歩出れば、他の分野のことはサッパリってのは割とよくある
まあ、気にせずお前が入門だと思うなら質問すればいいんじゃね
あんまりぶっ飛んでたらツッコミ入るさ
10年前からhello worldしか書けない俺が居ます。
winapiとかDirectXとかなしでC言語でどこまでゲームを作れるんだろう?
ジグソー「ゲームをしよう」
標準準拠で入力がなければすぐ抜ける入力ってないよね と言うことはリアルタイムゲームは製作不可能だろう 非リアルタイムならばコンソールの面積をでかくするほど文字をドットに近似できるからほぼ何でも作れる
>>840 別途入力だけ受け付けるプログラムを作っておいて
入力されたらテキストファイルに書き込む
ゲーム側で永久ループでテキストファイルを読み込んで
書かれていた文字に関して処理をする(毎回オープン&クローズしないといけない)
でどうだろう
コンソール二つ開く必要があるが
C標準だけでなんとかしようとするのは構わないが それに拘り過ぎるのはどうかと思うよ 環境依存を減らしたきゃクロスプラットフォームなライブラリもあるし そういうの使って思い切り書く方がいいと思うが
843 :
デフォルトの名無しさん :2011/11/29(火) 11:36:27.87
どなたか教えて下さい。 マイコンのプログラムをgccで作成しています。 指定時間の遅延が欲しいのでusleep()を使おうと思いましたが、 そんな関数ないよとエラーが使用できません。 調べていったら、sleep()が_exfunというマクロ?で定義されているのですが、 これはどういう意味でしょうか? unsigned _EXFUN(usleep, (unsigned int __useconds));
>>843 unsigned usleep(unsigned int __useconds);
だと解釈しとけば問題ない。
そんな関数ないよっていうのは、実際にないのでは?
範囲内で2ループさせたいのですが変数を使わないで行えますか?
847 :
843 :2011/11/29(火) 11:54:55.85
>>845 様
ヘッダファイルに定義されているのだから、関数本体も当然ある物だと思っていました。
確認しましたら、usleep.c自体がありませんでした。
自分で相当の機能を作り込めって事ですね。
exfunの用途・意味を教えて頂けると助かります。
>>847 コンパイラによってプロトタイプの形式を変えるためにあるんじゃないの?
こんなの(↓)の中から適当な定義が有効になるようになってるでしょ。
#define _EXFUN(name, proto) __cdecl name proto
#define _EXFUN(name, proto) name proto
#define _EXFUN(name, proto) name()
つかヘッダファイル検索してまわればすぐわかるだろ。
>>848 ごめんなさい、ポートとはなんでしょうか?
てめえが使おうとしてる環境も出さずに質問とはたいした奴だな
範囲内って何の範囲?
指定した範囲だ。
コピペしろ。
ナニで指定した範囲だ?
ナニで指定した範囲だ。
VC++2008でグローバルフックの練習をしています。 やりたいことは、オンマウスでそのウインドウやコントロールのクラスIDやHWNDを 取得したいのですが、グローバルフックを行ってもどうもうまく処理されません。 フックプロシージャの中で if (wp == WM_MOUSEMOVE) { TCHAR cn[255]; int cnt; memset( cn, 0x00, 255 ); _stprintf( cn, _T("(%d %d)\n"), pmh->pt.x, pmh->pt.y ); SetWindowText( hWnd, cn ); return TRUE; } として、単純に大本となるEXEのキャプションに座標を表示しているのですが、 クライアント領域以外になると、処理されなくなるようなのです。 グローバルフックで全てのアプリケーションのボタンとかのHWNDを取得できる方法を知りたいのです。 最終的には、選んだコントロールのHDCを切り取って、画像を保存することなのですが、 どなたか、ご存知の方、お教え頂ければ幸いです。
>>847 sleepはハードのタイマーとかが絡んでくるから、自分で実装する
妄想だがexfunは標準では提供していないから自分で作れ関数ってことだろ
859 :
デフォルトの名無しさん :2011/11/29(火) 19:55:36.08
>>825 です。
おかげさまでシグマの関連は実装することができました。
ですが、どうしても GROWTH 関数だけ実装することが出来ません。
どう実装したらよいでしょうか。
お聞きしたいのですが文字列を名前の昇順にソートするにはどうすればいいのですか?
qsort()使えばいい。
>>861 「文字列を名前の昇順にソート」じゃ意味がさーっぱり解らんぞ
文字列は確かに配列とみなせるが、入ってるのは文字(コード)であって名前じゃない
ひとつの文字列の中の文字を、文字コード順に並べかえて別の文字列にするということか?
仕様が曖昧過ぎる
864 :
デフォルトの名無しさん :2011/11/29(火) 22:16:14.59
少し質問させてください C言語で512行以上書き出せないんですけどそういう仕様なんでしょうか? 追加書込みfopen("out.csv","a")で開いてるんだけど512行以降が出力されない…… コンパイラはMinGWでgccです
>862 構造体配列に氏名を入力し氏名の五十音順の昇順に並べ替えて 出力したいのですがさっぱりわからないのです。
866 :
デフォルトの名無しさん :2011/11/29(火) 22:21:03.36
>>864 ですけど自己解決しました
スレ汚し失礼しました
>>865 とりあえず、
>構造体配列に氏名を入力し
の部分を、Cのコードでどう書こうとしてるのか書いてみ?
C++なんですがこちらで質問です とあるクラスのOperator+を定義したところ CHoge CHoge::operator+( const CHoge& val ) { MNBigUint _obj(*this); _obj += val; return _obj; }
すみません、ミスって投稿してしまいました C++なんですがこちらで質問です とあるクラスのOperator+を定義したところ。 適切なコピーコンストラクタがありませんというエラーが発生してしまいます。 CHoge CHoge::operator+( const CHoge& val ) { CHoge _obj(*this); _obj += val; return _obj; } operator+=は定義済みで正常に動いています。 コピーコンストラクタ(CHoge ( const CHoge& ))も定義済みで正常に動いています。 何がまずいのかさっぱりわからないので助けて下さい。
#include <stdio.h> struct PIXEL {unsigned char r,g,b,e;}; void draw_sandstorm_fb(struct PIXEL* a,int w,int h) { int i = w*h; while (i-->0) {a[i].r=a[i].g=a[i].b=rand()&0xFF;} } void print_fb_scr(FILE* scr,struct PIXEL* a,int w,int h) { fseek(scr,0,SEEK_SET); fwrite(a,1,4*w*h,scr); } main() { FILE* scr=fopen("/dev/fb0","wb"); // または"my_fb0"など const int w=1920, h=1080; struct PIXEL fb[w*h]; while(1) { draw_sandstorm_fb(fb,w,h); print_fb_scr(scr,fb,w,h); } }
>867 for(i=0; i<3; i++ ){ printf( "%d番目の人の情報を入力してください\n",i+1 ); printf( "まず氏名を入力して下さい\n" ); fgets(linebuf,BUFSIZE,stdin); sscanf(linebuf,"%s",&Person1[i].name); printf( "住所を入力して下さい\n" ); fgets(linebuf,BUFSIZE,stdin); sscanf(linebuf,"%s",&Person1[i].address); printf( "年齢を入力して下さい\n" ); fgets(linebuf,BUFSIZE,stdin); sscanf(linebuf,"%s",&Person1[i].age); printf( "\n" ); } こんな感じで書いてます。
>>871 とりあえず、50音順にソートしたいなら、氏名だけでなく、
よみがなを入力させないと無理だろう。
873 :
870 :2011/11/29(火) 23:20:24.59
>>840 linuxの場合は標準的なC関数のみで、画面へのグラフィック描画が可能です。
標準C関数のみではprintfくらいしかできないという一般的なイメージはdos/windowsの影響が大きいのかもしれません。
ビルド方法:
ファイル名を a.c だとして
gcc a.c
実行方法:
sudo ./a.out
なぜ sudo (スーパーユーザー権限での実行)をするかというと、スペシャルファイル /dev/fb0 は、標準ユーザーでは直接読み書きできない設定にされてる場合があるからです。
そこで、フレームバッファーのスペシャルファイルを、/dev/fb0ではなく、自分用に標準ユーザー権限で作成すれば手軽に実験できて良いかもしれません。
(実行時に sudo しなくて済むように)
方法:
my_fb0という名前で作るとして
sudo mknod -m 666 my_fb0 c 29 0
sudo chown ユーザー名:ユーザー名 my_fb0
これで、my_fb0というファイル(スペシャルファイル)に対して、標準ユーザー状態で読み書きできます。
適当なプログラムで my_fb0 というファイルに対して数字を書き込むだけで、フレームバッファーに対応した画面の各ピクセルの発光度合いを調整できます。
874 :
870 :2011/11/29(火) 23:24:01.99
備考: xwindow上では動きません。 起動直後のdosっぽい黒い画面で動きます。 ( xwindow上で Alt+Ctrl+F1〜F6などで、その画面へと切り替えられるかもしれません。 xに戻る時はAlt+F7orF8かもしれません。 )
Windowsではどうするの?
>872 もしかしてよみがなを入力してそのよみがなを文字コードにして それを比較しないとできないってことですか?
>>876 火星
↑読みが「びーなす」かもしれないし「まあず」かもしれない。
読み仮名入力しないと分からない→比較できない→ソートできない
>>870 20年前のUNIXでそんなコード見たな。
進歩のないやつめ。
というか文字コード順番に並んでるのかな
文字コードは順番に並んでいると思います
>>882 もちろん知っているが、
>>876 の口ぶりからすると、文字コード順にソートすることが大変難しいことのように思っているのかとおもって。
EUCとかSJISとかなら大体音読み順になるでしょ。
885 :
876 :2011/11/30(水) 00:11:34.30
はい、文字コード順にソートするの難しく感じてます。 数値をソートするのは簡単なのですが・・・
なんかそういう読み方予想してくれるDLLかなんかあった気がする
strcmpを使うにしても比較したあとに どうすればいいかが分からないのです。 例えばstrcmpだと比較して文字が同じなら0で 違ったら−1を返すんですよね?
違うべ
>>888 strcmpは大小を返す。
文字列の大小が何をさすのかはその辺当たってもらうとして、
よみがなを入力するようにして、strcmpとqsortを使えば目的は達すると思われる。
よみがなをいれずとも、辞書順、たとえばWindowsのファイルの名前順でソートしたときと同じような結果は得られる。
そのときの順番は「ひらがな→カタカナ→漢字(大体音読み)」になる。
大体ってのは、常用外漢字とかがへんな位置に配置されてるため、ずいぶん後ろに追いやられる。
構造体に氏名・年齢・住所を入力するようになっていて 仕様によみがなを入力するようにはなっていないのですが この場合もqsortとstrcmpでできますか?
ああごめん、構造体の大小を比較する関数を作る必要がある。 内容は、受け取った2つの構造体の氏名のstrcmpの結果を返却するだけでいい。 んで、qsortの使い方がわかりにくいと思うけど、例などを見てやってみてください。 そのあと、よみがなに対応すればいいとおもう。
アドバイスありがとうございます。 少し分かったのでプログラム組んでみますね
>>868-869 CHoge ( CHoge& )を定義しなきゃ
それで分からないならC++相談室の方へ
int* p; int *p; int* func(void); int *func(void); int* Class::func(void); int *Class::func(void); どっちにすべきなんでしょうか
どっちでもいい。そんなことを気にしていたら永久にコード書けないよ
2番目が好き
int* p,q;
前者はC++の人の間で流行り始めた悪臭 古き良き正統派C利用者は後者一択
int * p ; が一番スタンダードかな
プロポーショナルに慣れるとコードの書式なんてどうでも良くなる めんどくさくなって改行すら真面目にしなくなるけど意外と読みやすいという不思議 この事実は有益なのでプロポーショナルフォントをもっと流行らせるべき
>>902 プロポーショナルでもコードの書式は重要だよ。
質問なのですが自分でヘッダファイルを作ろうと思うのですがグローバル変数は作らないほうがいいんでしょうか?
プログラムが分かりやすくなるならどんどん使うべき
グローバルでわかりやすくなることってほとんどないよね ウィンドウのクラス化する時とかに仕方なく使ったりはするけど
>>905-906 ありがとうございます。
後グローバル変数にはexternを付けるべきとか見たのですが何故なんでしょう?
後定義ファイルに#defineは使っていいですか?
質問ばかりですみません
externをつける意味を理解してるなら自ずと付けるべきかそうでないかの区別はつく わからないということはexternがなんだかよくわかってないということなんだろう 事故を起こす前にもう一度調べなおしたほうがいいよ まあ結論だけ言うとヘッダに書くときはつけるが正解なんだけどね
externが付いてるのは宣言・・・こういうのがありますよっていう宣言。 ついてないのは定義・・・実際にメモリを確保して実体を作る。 ヘッダに定義があったら、それを複数のファイルでインクルードした時に、 同じ名前の実体が複数できちゃうので、リンカが怒る。 ぶっちゃけるとだいたいそんな感じ。
>>909 初期化 int x = 0; という書き方さえしなければ、extern はいかなる場合も不要。
宣言時の初期化にメリットはあまりないので、実際の初期化はコードで行い extern を一切使わないやりかたもある。
>>911 それってたぶんC++だと怒られるよね。
まあ共用しないならいいけど。
サーバーに公開したSVNリポジトリをブラウザから閲覧したりコミットしたりコメント残したりできるツールないですかね RedmineとかTracみたいなやつでもっと簡素なやつないですかね
コンソールからが一番簡単
hgのhttpサーバが簡素
フォー!!
HGというとMELCOのHDDを思い出す
故障率 No.1
話がズレてるけど簡素なHTTPDならBusyBoxに勝る物無し
日本の全産業の雇用の調整便がIT技術者 昭和に作られた大手の時代遅れの雇用環境を守るため搾取され使い捨てにされるのがIT技術者 古い産業の既得権益を守るため新しい産業の人材が搾取されるのがこの国のシステム お客さんに素晴らしいサービスを届けたい 技術を蓄積して海外との競争に勝ちたい そんな純粋な気持ちは踏みにじって面倒なことは下請け丸投げで 楽して生活費を稼いで問題が起きたら知らん振りするのが日本人
921 :
デフォルトの名無しさん :2011/12/01(木) 17:25:51.09
クイックソートが一番早い言語ってどれ? ちなみに100億個の整数ソートです。
>>921 100億個だとオンメモリは厳しいね。
ちなみに、何のデータ?
>>924 メモ帳に書いた100億個の数字かなぁ。
10年前と比べてC言語の処理速さってどれくらいアップしたの?
10年前だと1GHzになったくらいだからまぁ10倍前後だな。
929 :
デフォルトの名無しさん :2011/12/01(木) 18:59:28.21
(´・ω・`)モワッ
>>921 おもしろいとでも思ったんだろうがとんだクソだったな。
雑魚スレだな ガチホモ兄貴いる?
ネットワークで分散ソート
マルチコアで分散でよくね?
935 :
デフォルトの名無しさん :2011/12/02(金) 02:42:09.65
ちょっと困った事があるんだ。聴いてくれる会? VC2008Expressでクラスのエクスポーツをしたいんですけど、 ビルドするとゴルァされるんだよ。 #define EXPORT __declspec( dllexport ) class EXPORT BASECLASS { public: BASECLASS()=0; virtual BASECLASS()=0; }; class CHOMECHOMECLASS { public: CHOMECHOMECLASS(); ~CHOMECHOMECLASS(); }; BASECLASSのコンストラクタにvirtualを付けないでビルドすると 「仮想関数が、純粋関数または抽象オーバーライド関数であると指定されています」で、 virtualを付けてビルドすると、↑のに更に付け加えて 「'inline' のみがコンストラクタの正しいストレージ クラスです」 って言われるんだわ。 nline BASECLASS()=0; でもダメみたいでね、 ググっても同じ事象が見つけられないし、参考書買う金も無い俺にはお手上げです。 誰か解決方法教えてくダサい。
936 :
デフォルトの名無しさん :2011/12/02(金) 02:44:16.08
ごめん、CHOMECHOMECLASS間違えてた。訂正ね。 class CHOMECHOMECLASS : public BASECLASS { public: CHOMECHOMECLASS(); ~CHOMECHOMECLASS(); };
937 :
デフォルトの名無しさん :2011/12/02(金) 03:04:48.27
BASECLASSのコンストラクタとデストラクタを定義しないと ビルドされるんだけど、それでいいのか? 連投すまぬ
virtual BASECLASS()=0; って virtual ~BASECLASS()=0; の間違い?
こうじゃないの? class EXPORT BASECLASS { public: virtual ~BASECLASS() {} };
940 :
デフォルトの名無しさん :2011/12/02(金) 03:46:54.05
そうです。 そこも間違えていましたね。スマッソ
941 :
デフォルトの名無しさん :2011/12/02(金) 04:39:16.34
あ〜、違うよ。 俺、視力弱いみたいで見間違えてた。 正しくは、↓こういう風にしたかったんだ。 #define EXPORT __declspec( dllexport ) class EXPORT BASECLASS { public: virtual BASECLASS()=0; virtual ~BASECLASS()=0; virtual bool Create(int)=0; virtual void Release()=0; }; class CHOMECHOMECLASS : public BASECLASS { public: CHOMECHOMECLASS(); ~CHOMECHOMECLASS(); bool Create(int); void Release(); }; でね、これだとBASECLASSのコンストラクタとデストラクタでエラーになるのね。 コンストラクタとデストラクタを削除するとエラーは0でビルドできるんですわ。 それで正解なのかもしれないけれど、腑に落ちないというか・・・ コンストラクタもデストラクタも記述したいな〜ってのが本音。
942 :
デフォルトの名無しさん :2011/12/02(金) 04:54:20.96
実体の無い物はエクスポートしようがない。 コンストラクタとデストラクタを削除すると、暗黙のデフォルトコンストラクタとデストラクタの実体が生まれるのでエクスポートできる。
と、書いたもののあまり自信はなく、C++スレで聞いてみてはいかがか。
コンストラクタにvirtualは必要ないだろ チョメチョメのほうが生成されるときに自動でベースのコンストラクタ→チョメチョメのコンストラクタって呼ばれるものだろうし デストラクタはvirtualつけてもチョメチョメ→ベースの順で呼ばれるものだから純粋仮想関数だとまずいとかなんじゃない? BASECLASS() {}; virtual ~BASECLASS() {}; としておけばいいんじゃね?
デストラクタを純粋仮想関数にするのはインスタンス生成を不可とするためにやるが
スレチの話題延々続けるチンカスは死んだほうがいいよね
CとC++を厳密に分ける必要ってある??
ある。
勘違いしている阿呆を排除できるのはメリットだな。
C++のクラスをDLLにしない方が良いって言われてるけど みんなどうしてんのかな
しない方が良い
Cのインターフェイスだけ外に見せるようにラップしてる。
馬鹿には無理
引数をたった1個節約するだけなのにスレッドじゃインスタンスじゃなんじゃと言語内で片付けられん要素が多すぎるからな
virtual f() =0 は純粋virtual関数。(関数定義の最後に =0 を付けると、純粋virtual関数としての宣言) 純粋仮想関数は、そのクラス内では内容を定義できない。 かつ、派生クラス内では「必ず、内容を定義しなくてはならない」のが純粋仮想関数。 たとえば class A { virtual f() = 0; } は、A::f() { printf("hello"); } として内容を定義することはできない。 かつ、 A から派生したクラスでは、f() を”必ず”定義しなくてはならない。(定義し忘れるとエラーになる) class B : A { virtual f(); } B::f() {printf("hello");} 全ての関数が純粋仮想関数の基底クラスを、とくに抽象基底クラスという。抽象クラスはインスタンスを生成できない。 しかし、定義としてなら使用できる。たとえば A->f() として任意の関数内等で利用するだけなら行える。(エラーにならない) void test(A* a) {a->f();} Aは抽象クラスなので a=new Aできないので、一見 test() は実際には利用できないように思えるが、 Aから派生したBなら、インスタンス生成できるので、b=new BをA型に型変換して渡すことはできる。 test((A*)b); つまりAから直接派生したクラスでは、それぞれが必ず独自に f() を再定義していることが、言語として保証される。 派生クラスBを作る際に、最低限自前で用意しなければならない関数名のリスト。雛形に相当するのがA。 なぜこんな仕組みが用意されているかというと、ポリモフィズムを言語的に保証するため。 f() を定義しわすれるとエラーになるという言語仕様は、将来的にAの派生クラスを増やしても、ポリモフィズム動作する関数test()が破綻しないという保証になる。 純粋仮想関数は、派生クラスを定義したなら、必ず派生クラス内で再定義されなくてはならないが、デストラクタを純粋仮想関数とした場合。 class A { virtual ~A() = 0; } の場合は、 class B : A { ~A() {} } と必ず ~A() を定義しなければならないことになる。しかし、 ~A() の名前(デストラクタ名)での関数定義は、クラスA内でしか許されない。クラスB内で~A()の名前での定義はエラーとなる。 最近のC++は知らないが、namespace登場以前のC++では、コンストラクタは特別で、通常のvirtualにさえできなかったはず。
もしかしてスレ違いなんじゃね?
>>957 > 純粋仮想関数は、そのクラス内では内容を定義できない。
> たとえば
> class A { virtual f() = 0; }
> は、A::f() { printf("hello"); } として内容を定義することはできない。
上記は正しくないかと…C++11のFDISで申し訳ないけど
10.4p2
A pure virtual function need be defined only if called with, or as if with (12.4), the qualified-id syntax (5.1).
実際にコンパイルすると通ります:
ttp://ideone.com/zIWSs ただ、クラス定義の中で純粋指定子と関数定義の両方を与えることはできません(10.4p2)
struct C {
virtual void f() = 0 { }; // ill-formed
};
あと、コンストラクタは、仮想関数にはなれません:
12.1p4
A constructor shall not be virtual (10.3) or static (9.4).
960 :
959 :2011/12/02(金) 21:19:23.12
ごめん
>>957 をよく読んでなかった
> 純粋仮想関数は、そのクラス内では内容を定義できない。
は、あってる
scanfなりgetcharなりのバッファに改行残す仕様って何なん? バグの要因にしかならん気がするんだが
例えばどういう動きの事?
次のscanfが改行のバッファを食ってしまうところ
よくわかんね。読まなきゃ残ってるに決まってるじゃんと思うけど。
入門編スレならではの話題だなw
C言語でQRコードを読み取るにはどうすればいいですか?
>>966 QRコードを読み込むライブラリがあった気がするからそれ使えばいいんじゃないか
>>967 標準のライブラリ以外は使用禁止されてるんで無理です^^;
>>968 標準ライブラリだけで全部やらとなるとけっこう大規模だよ。
画像のデコードやら認識やら全部手で書くはめになるじゃん。
まずスキャナを用意します
ここじゃとても扱いきれん 全部真面目にやったら本が一冊書ける……というか、もうありそうだ
>>972 冗談じゃないよ
課題なんだけどそう告げられた
撮影した画像を台形補正して二値化して使用に則って変換するだけだろ 特に難しいこととは思えないけど
>>976 例えばリードソロモン符号の復号コードをサクッと書いてくれと言われても
大抵の人は戸惑うと思うの
それよりは数倍簡単だな。
ここは雑魚しか居ないのか
981 :
デフォルトの名無しさん :2011/12/03(土) 01:12:58.72
自己紹介乙。
そもそも画像を撮影してるときに認識させるところから作るのか 保存されてる画像から情報を読み取る所から作るのかでだいぶ違うと思うんだけど どっから作ればいいんだ
テクスチャーマッピングの為の画像変形を標準関数だけでフルスクラッチで書くとこからはじめてみては?
>>982 なんだそこからか
画像認識がおもしろい所なのに
静止画対象でも画像認識には変わりないでしょ。 QRコードじゃトラッキングとか必要ないだろうし。
Webに貼られた画像データからの解析か、 デジカメで写した画像からの解析かでずいぶん処理が変わると思うが。 画像の形式は? QRコードの仕様書は?
すみません GOTOってそんなに使っちゃダメなんですか? また、普通の変数ではなくポインタを使うメリットとは??
人に聞かなきゃ使って良いか悪いか分からない間は、gotoは使わない方が無難
そうですかー。 どう考えてもGOTO使った方がスッキリすると思んだけどなぁ。
自分がgotoを使うのは、エラー処理と、状態遷移図のハードコードみたいな事をする時だけ。
>>991 >状態遷移
で goto を使うのか?まさか!
次スレ立てます
プログラムが分かりやすくなるならどんどんgoto文をつかうべき
>>987 画像はbmpからで、QRコードの仕様は何も聞いてません
QRコードの仕様はJIS X 0510:2004 です 本屋に行けば4,830円ほどで取り寄せてもらえるので購入してください お急ぎであればPDFとして購入できますのでJISのサイトから買ってください
無料で作ってください。 必要な資料は有料です。 自分で買ってください。
999 :
977 :2011/12/03(土) 10:59:13.48
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。