C言語なら俺に聞け 145
■ このスレッドは過去ログ倉庫に格納されています
ああ、int aとかじゃなくて配列要素に使うのね
納得ありがとう 配列要素やポインタにも使える。この入れ替えアルゴリズムを抽象化するとC++のstd::swapになる。 goto LABEL0;
{
int i = 1; /* 初期化 */
int j;
j = 1; /* 代入 */
LABEL0:
printf("%d %d\n", i, j);
} Mapみたいな連想配列使いたいんだが何使えばええんや switchのラベルって違うswitch(){}の中なら重複してても使えるやん?
それで goto HOGE; したらどっちに飛ぶ? >>694
>>678 のアルゴリズムには重大な欠陥がある、という点は頻繁に指摘されることですよ、知らないの?
https://ideone.com/uYFQRK if (a != b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
} >>695
ポインタ使って無いアルゴリズムをポインタ付きに移植して
欠陥とはこれ如何に。
只の移植失敗だろ。池沼か >>699
xor スワップがどこまで有効か、どうなると不適になるかをはっきりさせておかないと、嵌る、>>678 にはその指摘がない
C なんだからポインタの話は不可欠だ、それを指摘したのが >>681 wikiより
void xorSwap(int *x, int *y)
{
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
} bの実体がaなんてことが参照のないCで起こりうるのか?
#define b aなんてアホなことぬかすなよ >>700
ごたくはいいから
a ^= b;
b ^= a;
a ^= b;
のコードでaとbの実体が同じになる例をあげろよ
もちろんC言語の範疇でな >>702
その #define マクロでうっかり、xor スワップを書いてしまう、とかは、可能性としてあり得りますね
あと、C++ テンプレートで書いてしまったり、とかね
https://ideone.com/NEeCNr マクロで xor の入れ替えを書く
配列の操作で同じ要素の入れ替えも、都合上そのまま交換する方向で記述する
(配列を逆順に入れ替える時、要素数が奇数だと発生 >>705
> あと、C++ テンプレートで書いてしまったり、とかね
スレタイ100回音読してこい >>710
まあ、こういうのでは考えが足りずに負けることもあるし
>>709 は権利ですよ
マウント合戦、勝てば飯がうまいですなあ >>714
いや、さすがあれはメアド欄なんて見なくてもネタってわかるだろ w >>705
templateにする必要ないのに無理しちゃって
void aho(int& a, int& b)
{
if(&a == &b) throw system_error{error_code{1xZcLHDp0_category(), 709}, R"(
ハァ・・・ ハァ・・・ ハァ・・・
: ∧ ∧ :
: / ヽ / ヽ :
: / >__/∴ ヽ :
: / ;;# ,∴∵; ヽ ∴\ :
: / -==、 ' 、==-∴∵丶 : き、きょうはこれくらいで勘弁してやるニダ…
: / "" _┃_ "" * ∵∴\ :
: \ #;∴ l/ニニ| ∵ / ∴∵/ :
: ヽ∵//;;.;`ー‐' # ∴#∵ノ :
>;;;: _ _ ;, _ ;_<
: / # ;∴ ∴ # \ :
)"};
} >>678 メール欄
あれ、まあ?!‥‥‥自分<今どんな気持ち?どんな気持ち?
まあ鎬を削るのであれば、こっちが楽しいのではありまする
https://mevius.5ch.net/test/read.cgi/tech/1514772904/ >>695
それ xor を使ってることによる欠陥じゃなくて
同じポインタを渡してることが欠陥だろ >>695
18行目がこうなっているわけだが
myswap(&a, &a);
これでは参考にならんよな。
a, b を同じ値にしてから &a, &b で呼び出さないと。
まあでも myswap() 側で調べて同じなら何もしないように作っとけばいいだけではあるが。 つまりswap関数に必ず同じ変数orポインタアドレスを渡さないよう確認する人と
渡しても大丈夫な仕様にする人とが同じチームに居るとこうなると。 速度の問題あるから関数側でいちいち判定コード書くのは避けたいところ ちょっと聞きたいんだけど
char c = '5';
c -= '0';
int a = c*16;
こうゆうやり方ありなの? ありじゃね
unsigned char じゃいかんとか
unsigned char の方がいいとか
どうせ int になるんだしとか
ebcdic は?とか
↓ >>718
xor スワップは、xor: ^ が
a^(a^b) == b
b^(a^b) == a
で、つまるところ、a, b, a^b の三種類の値のうち一種類が欠けても、残りの二つから欠けた一つを再生できる(RAID5と同じ)ところに着目しているわけで、
xor や同様に exclusive-nor だからできること
ちゃんと二種類の値をずっとキープできておればスワップは成功するが、
そうでない場合は失敗する
上記のことを考えると@ xor/xnor であることと、A現れるオブジェクトが別であることを保証することの両方が必要だと思うよ
>>719
まあ値が等しいときは@オブジェクトが同じ可能性があるAそもそもスワップする必要がない
から値が同じかどうかのチェックをかませば OK ではあるね、それは同意するよ これなら安全じゃろ。
void xorSwap(int * restrict x, int * restrict y)
{ *x ^= *y;
*y ^= *x;
*x ^= *y;
}
無責任極まりないやり口だけどな。 改行乱れちゃった、てへ。
Cはフリーフォーマットだから…。 小さな処理なんだからマクロ化かインライン展開させようよ。 自己解決しました。
std::swapでいけました。 >>727
安全じゃない
restrictはコンパイラに対してx != yを前提とする最適化を許可するだけで
constのように違反を摘発する機能はない
int *a, *b;
scanf("%p%p", &a, &b); //実行してみなきゃわからんものを
xorSwap(a, b); //翻訳時に摘発できるわけねえだろ 「そういう仕様だから呼ぶ側は正しく使えよ」ってことだろ 「トラブルの原因になるものは絶対に使ってはいけない団 登場!!
scanfソード!!GOTO砲発射!!!」 >>733
これほんとくそ
せめてFortran のfcheckみたいな実行時診断機能をコンパイラにつければ良いのに 指導者は、ある程度育った選手に対して解決策を提示しない。
選手が自ら考えるように導く。
考える力に重点を置く。
選手が考えた解決策に、(少しでも)可能性がある場合、次のように対応する。
1.状況を整理する
2.挑戦してもらう
指導者の解決策を、押しつける・誘導するのは愚の骨頂。
選手の思考力の成長を阻害する。
言葉の上だけ、コーチング技法を使用する指導者は不要。
意識・無意識にかかわらず、非言語で指導者自身の方向に誘導するようであれば、指導者は迷惑な存在。
選手は指導者の気持ちを敏感に読み取り、指導者の思う解決策に乗っていく。
指導者が無自覚に自分の気持ち・感情を表出しているのであれば、指導者は害毒でしかない。
(但し、指導者としての方向を持っていなければダメ。) *“オレは知っている。選手は判っていない。”と思い込んでいる。
→「私が中心」(選手は不在)
→選手の変化が見えない。
*“あれもこれも伝えたい”と思っている。
→指導者の自己の存在証明をしたいだけ。
→選手の依存過多を喜んでいる。
→指導者の中身の無さを補償している。
→自分の目標と選手の目標がズレていることに気がつかない。
→成長のゴール設定が不明確。あるいは勝つことだけに目標を設定している。
(勝負までに何をやりきったらよいのか/何を発揮したら勝利か/勝った後どうするか、指導者ならば明確にもっておきたい。)
→優先順序が整理できていない。
→現状の把握すらできなくなっている。
*“言わないと相手のためにならない。”と信じている。
→根本的に選手を信頼していない。
→“指導”という名の自己満足。
*“今、言わないといけない。”という焦り
→指導計画の無さが露呈しただけ。
→日頃の怠慢のツケ。
(直ちに言わないければいけないことはあるが、そう頻発しない。)
*“自分の経験なら、具体的に伝えることができる”という自分の過去へのこだわり
→指導者自身の学習がストップしている。
→偏狭さの表出
→選手より、常に自分が上。
→自分のコピー以外のモデルがない。
→指導者自身の目標が低い。(悪い意味で、すぐに満足する。)
→自分の小ささに築かない哀れさ
解決策を提示する悪癖からの脱却は、選手を信頼することがキー。選手を信頼できるかどうかは、選手の問題ではなく、指導者自身の課題。 選手がある程度育っているにもかかわらず、解決策ばかりを提示してしまうとしたら……
指導者のサービス精神が、少々裏目に出ただけ。
やり方を、知らなかっただけ。
視線が、近い所に留まり過ぎただけ。
選手の考えと主体性に賭ければ良い。
「質問するだけ」「聞くだけ」で十分。他愛ない会話で済むかもしれない。
指導者としてのやり方を、ちょっと広げるだけ。
選手と一緒に成長すればよい。 C++の方が全然マシ。
C++で要求されるのは記憶力だが、Cはマジで実力が試される。 >>747
ほんそれ
>>748
C++はごちゃごちゃしすぎ
Objective-Cの方が良い Cライクな言語なら何でもこいだわ
(知らないのは新たに勉強せざるを得ないが)
1人で書くのは大抵C++ C++17かなり良くなってきたね
C++98での苦行が嘘のよう オールアセンブラで組んでた人が楽になるための言語。 STLを初めて見た頃は違和感ありありだったけど
それはテンプレートを使うからでも、見た目が悪いからでもなく、中途半端だったから
C++11から以後、そのへんの補完工事が始まったのがありがたい 結局テンプレートって、型をオブジェクト型に統一してしまえばいいだけで、あんまり意味無いよな。 Smalltalk風の継承モデルねえ
正直、俺も昔は盲信したことがあって今は恥じている
テンプレートならコンパイラがやってくれることを
自前でdynamic_castなんかやだよ
nested_exceptionとかは仕方ないけどね >>761
Javaなんかは内部でそうやって実現してるな。 printfの出力をマルチスレッドで行うことはできないのでしょうか
素人的には
スレッド1 printf("abcde");
スレッド2 printf("12345");
↓
出力 a1b23c4de5
となることを考えたのですが、WinAPIのCreateThreadやC++のThreadでも、CPU使用率はシングルスレッドのときと変わらず、出力もこのようにはなりませんでした
Windows VS2017 >>766
排他制御されていないCRTを探す方が難しい。 はじめまして。
大学でプログラミング関係の授業を受けるのですが、それの復習、応用などをrpgツクールmvですることは可能でしょうか?
ちょこっと調べた感じプログラミング要素もあるらしいのですが、c言語はあんまり使わないとかなんとかという記事も見られました。
どうせなら楽しく勉強したいので、ゲームを作りながら学習できないもんですかね...。 >>768
プログラミングを授業で受けるなら、ゲーム制作はツクールMVよりUnityのがいいと思うけど授業内容は進むに連れてむしろツクールMVやUnityのようなのの中身についてになるから復習がてらにはしにくい
モチベ維持にはとても良いと思います バリアント型は何ビットなん?って話になるのがC++。 >>766
目的はどっち??
文字単位で混ぜたい?
高速化したい? 同期ってのは、処理が終わるまで帰って来ないって話だ。
下手すっと何秒も帰って来ないから、そこら中が固まる。 数値計算手法の一つである陰解法って陽解法とどう違うんだろう?まったく理解が進まん
陰解法での次ステップの状態を計算するには陽解法と違って次ステップでの値が含まれてる関係で行列の方程式?を解かなければならないらしいけど、その方程式で導く値がどう答えに結びついていくのかがわからない
(最終的にはC言語のプログラムに落とし込みたい。陽解法のプログラムはもう作ってあるんで多少なりとも流用できると楽なんだけどそう簡単にはいかんよね?) 平たく言うと
100秒後の状態を得るのに途中の一つずつを100個全部求めなきゃいけないのが陽解法
10秒ごとの計算を10回、でいいのが陰解法
陰解法はかんたんに未来を得られる分、行列計算が面倒になる これなんですけど、printfのとこの"%2c"で、
" %2c"
" %2c "
など空白を入れることで配列が変わってくるのですが、前に空白と後ろに空白のときの規則性がわかりません。教えて欲しいです。
https://i.imgur.com/QI86not.jpg ■ このスレッドは過去ログ倉庫に格納されています