【初心者歓迎】C/C++室 Ver.105【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
2020/02/03(月) 17:07:19.92ID:Exvuz9nd
>>599
計算量でなく計算オーダー
知らずにしゃしゃり出てくるとか
2020/02/03(月) 17:13:32.87ID:Si1aHG26
ビッグオーが変わるようなのはアルゴリズムの違いだろうけど
ビッグオーがそのままで計算量だけが変わるのはどっちとも言いがたい
2020/02/03(月) 17:33:31.72ID:MWPuXKWI
>>600
より除算回数の少ないアルゴリズムを選択することは現状のCPUは除算が遅いことに対応するわけだからHW依存と言えなくもない
この主張に対してそういった選択はアルゴリズムでもなければオーダーもかわらないと反論しているのですか?
2020/02/03(月) 23:27:39.99ID:Ns1a0i+O
特異な例を持ち出しても一般論を否定できないっての
2020/02/03(月) 23:33:51.85ID:e9E2NTEb
計算量のオーダーが変わらないアルゴリズム的最適化なんていくらでもあるよ
2020/02/04(火) 00:20:58.43ID:mQynHgib
有限の並列度の並列化ってオーダー変わらないけどワザワザ並列化可能なアルゴリズム使うよね
2020/02/04(火) 00:29:54.04ID:A8BeWHVj
どうせO(n)だから配列丸コピしても問題なしっていう馬鹿を思い出したわ。
2020/02/04(火) 00:37:14.93ID:mQynHgib
と言うか最適なオーダーのアルゴリズムなんて殆んど既知だから、オーダー変わるような最適化ってあんまりないよね
608デフォルトの名無しさん
垢版 |
2020/02/04(火) 12:35:39.06ID:SyKO2BA6
車輪の再発明は良く批判されるけど
素数を列挙するプログラムなんて
既に判ってる素数はテーブル参照するのが最適なのに
なんで毎回計算して地球環境破壊に貢献してる訳?
2020/02/04(火) 12:47:30.21ID:GNpMFwh2
ROM容量にはテーブル化は最適ではない
2020/02/04(火) 12:48:27.46ID:t2uF8z+f
競技ルール的なアレじゃね
2020/02/04(火) 13:48:07.39ID:4xoSX3tu
「ROM容量にはテーブル化は最適ではない」
典型的な論点ずらし
2020/02/04(火) 16:52:46.33ID:t6zt27Qb
>>608
素数の話はどっから出てきた?
アルゴリズムの例として挙げたのかも知れんが、
別のスレッドで最近見た気のする話題なので投稿する場を間違えたのかと。

実用プログラムでは「車輪の再発明」は上手いやり方じゃないけど、
低レベルの部分から組み上げたほうが理解が深まるって面はあるでしょ。
2020/02/04(火) 16:53:25.40ID:GNpMFwh2
お前が何を論じたいかとか
知るか
2020/02/04(火) 17:26:23.15ID:MKouw6om
車輪の再発明は学習に最適
2020/02/05(水) 00:16:57.41ID:GCTF3gV7
>>611
>>608が最適と豪語したから反例挙げてるだけだろ
お前のほうが論点ずらしだよw
2020/02/05(水) 01:36:02.88ID:RkJ0eyiK
>>615
悔しそうですねw
2020/02/05(水) 04:53:06.88ID:GCTF3gV7
夜中まで大変だなw
2020/02/05(水) 13:53:11.70ID:rzfrqein
バイナリデータを、文字列に変換して保持しようとした場合、素直に16進数表記にするのがよい?
データ量倍になるけど
2020/02/05(水) 14:09:47.25ID:ox5K4d9e
おまえがやりたいようにやればいいとおもう
2020/02/05(水) 14:22:22.31ID:ElBlpF/h
Base64
2020/02/05(水) 14:32:42.49ID:rzfrqein
>>620
あーそんなのありましたな
ちょっとググったらライブラリも出てきたしよさそう
ありがとうございます
2020/02/05(水) 15:41:12.41ID:zWcxLf4u
それでいいんだw
2020/02/05(水) 16:07:18.33ID:ImPcpEtv
それでいいなら%Xで出力するのでも良い気がするね
base64にすると単純な16進表記よりデータ量増えるし、%Xなら余分なライブラリもいらないし
まぁどっちでもいいんだろうけど
2020/02/05(水) 16:08:34.43ID:ImPcpEtv
嘘言ったわ、base64は6ビットごとに1文字だからデータはこっちのほうが小さいか
625デフォルトの名無しさん
垢版 |
2020/02/05(水) 16:54:58.67ID:2rKdW1Ec
8bit→HEX2桁→2倍
8bit→Base64→4/3倍
やろ
一定数以上桁が必要なのでpaddingとかあるし100%ではないが
2020/02/05(水) 18:52:50.41ID:hYuejzNd
base64なんかビットシフトとテーブルだけで簡単に実装できるし依存ライブラリ増やす必要もないのでは
2020/02/05(水) 19:13:05.48ID:PZ/5vknB
16進数派
628デフォルトの名無しさん
垢版 |
2020/02/05(水) 19:23:50.17ID:2rKdW1Ec
データ量にもよるけど
"\x00\x00\x00\x00..." が一番楽じゃね
2020/02/05(水) 19:35:11.50ID:hYuejzNd
何のためにテキストに変換したいのかがわからんとなんとも言えんな
目的によって使える文字種も違うからな
2020/02/05(水) 19:41:08.83ID:PZ/5vknB
Base64で良いって言ってるんだから
終了
2020/02/05(水) 23:15:38.55ID:NEouxGwD
Base64 は、HTML でもよく使う

Base64の文字列で、PNG/JPEG画像を、HTMLファイルに直接埋め込める

<img src="data:image/png;base64,xxxxx..." />
2020/02/06(木) 00:01:41.26ID:7WdfZf7H
base64って7bit通信路通すためのもんでしょ?
textにするならヒューマンリーダブルにするのが無難だと思うけど
そうじゃなけりゃバイナリでいいじゃん
と思った
まぁ好きにしなよ
2020/02/06(木) 00:07:14.11ID:/W9iMVJD
ヒューマンリーダブル
2020/02/06(木) 01:02:03.98ID:jSrTrJa0
ish みたいなやつで UTF-8 を利用したのをどっかで見たことある
2020/02/06(木) 06:43:09.85ID:bk3hpXlE
>>632は一体何を主張してるんだろう…
2020/02/06(木) 06:44:20.62ID:bk3hpXlE
>>634
ishなつい
パソコン通信の時代に使ってたけどもう30年近く前なんだな
2020/02/06(木) 10:19:44.96ID:s0z6ZqT0
テキストファイルを結合してishでデコードしてえっちなMAGファイルを見てた人は手をあげなさい
638デフォルトの名無しさん
垢版 |
2020/02/06(木) 13:08:45.50ID:sNihMBVC
ishはBase64と違って誤り訂正あるやん?
2020/02/06(木) 13:22:34.72ID:euRWcwLl
ソーセージのだけ覚えてる
2020/02/07(金) 02:44:46.72ID:FDFOp562
boost::serializationがお手軽にシリアライズできて便利だなと使いまくってたら、
map系コンテナがあると一気に性能落ちるっぽいんですが、これって当たり前ですかね?
protocol buffersなどの他のシリアライザに替えて解決するものでもなさそうだし、どうしたもんかな…
641デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:04:33.34ID:j3f+aFgv
>>637
here!
642デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:15:10.05ID:0A6dyGR7
独学で組み込みやりたいんだが…
643デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:40:38.84ID:PWhN+bN7
圧縮してからBase64すればbitチェックも出来てサイズも減って一石二鳥
2020/02/07(金) 12:16:58.36ID:qwopp/ku
>>642
やればいいんじゃないかな
2020/02/07(金) 12:29:23.66ID:/AlUflk/
>>642
やればいいんじゃね?
やれない理由があるならそれ書かないとわからんし
2020/02/07(金) 12:30:00.98ID:VWyX2qgb
今の組み込みは環境整いすぎてハード触ってる感ないよね
2020/02/07(金) 12:35:41.88ID:8FC0VQS8
小規模CPUなら全て自力のコードで書けるよ
648デフォルトの名無しさん
垢版 |
2020/02/07(金) 12:47:59.75ID:0A6dyGR7
Arduinoでいい?
2020/02/07(金) 13:15:59.26ID:j+3lGBli
いいんじゃない?なんでわざわざ聞くのかわからんが
2020/02/07(金) 13:20:18.59ID:8FC0VQS8
自力が好きならまずは
PICフルアセンブラ
651デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:31:27.53ID:0A6dyGR7
制御的な知識は多少あるから今更Lチカやってもなぁって感じだ
2020/02/07(金) 13:47:41.14ID:8FC0VQS8
PIC=Lチカ
かよ
653デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:51:42.69ID:PWhN+bN7
条件後出しするなとあれほど
板チ
654デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:39:32.66ID:aI41PDC9
>>642
SPRESENSE、Arduinoよりスペックが高いからあまり制約を考えずに触れるからいいよ
2020/02/07(金) 18:25:14.52ID:tbpxydmI
組み込みって難しそうなのに年収は総じて低めだよね
オラオラ系Webプログラマとかのほうがマシだったりするし
なんか世知辛い
656デフォルトの名無しさん
垢版 |
2020/02/07(金) 20:39:09.61ID:Dpv8aBJv
組み込みで出来る人は多分大企業メーカーのR&Dに転職してっちゃうんじゃないかな。
なんとなくのイメージだけど、組み込みプログラミングが必要な製品の品質管理を考えると、
請負組み込みの会社に開発を頼める範囲ってごく簡単な部分に限られそうだから、
単価が低い仕事が多くなっちゃうのかも。
2020/02/07(金) 22:46:17.85ID:k+IYFIKh
まあコスト削減のために低スペックハード使うわけだしな。
2020/02/08(土) 00:46:23.22ID:Q7LgS8OA
オラオラ系というよりウェーイ系というほうが表現が適切だろう
ホームページ見ただけでウェーイって叫びながら意識高い開発してる姿が容易に想像できる
2020/02/08(土) 03:53:19.54ID:/OouxCiy
いわゆるロクロ回してる系やな
660デフォルトの名無しさん
垢版 |
2020/02/08(土) 13:16:27.70ID:v1IBJgnW
京セラも陶器だったんやな
661デフォルトの名無しさん
垢版 |
2020/02/11(火) 18:11:48.90ID:poOKFhcK
そもそもここで質問するのが適切か分からないのですが
とりあえずC++っぽいので分かる方がいたら教えてください。

とあるライブラリのビルドスクリプトを叩いたところ以下のようなエラーが出ました。

```
略/filesystem.hpp:784:13: error: no member named 'make_absolute' in 'std::__1::__fs::filesystem::path'


```

ファイル名からC++のコンパイルに失敗しているようなのでした。
普段は別の言語を触っておりC++は触ったことがありません。
調べた限り、ヘッダの二重読み込みでエラーになっているとのことでしたが
該当の `filesystem.hpp` には #pragma once が宣言されています。

環境はMacOS 10.15.3で、とりあえず途中でgccを入れ直したりしましたがやはり同じところでコケます。
Mac上で #pragma once が機能するように環境を設定するにはどうしたら良いでしょうか。

よろしくお願い致します。
662661
垢版 |
2020/02/11(火) 18:13:22.88ID:poOKFhcK
貼り付けるエラー文言間違い得ました。

```
略/filesystem.hpp:52:9: error: redefinition of 'path'


```

です。
2020/02/11(火) 18:30:48.12ID:GpQNLMm4
>>661-662
とあるライブラリとか言わずにそのライブラリを示して。
初心者はどんな情報が必要か判断する能力がないので、情報を選別してはいかん。
情報を小出しにされるとイライラゲージが上昇しやすいから、
状況を再現可能な情報を提示することを心掛けて。
664デフォルトの名無しさん
垢版 |
2020/02/11(火) 18:38:14.46ID:poOKFhcK
>> 663

すみません、おっしゃる通りですね。
このライブラリのインストールになります。

github.com/WonderMediaProductions/Maya2glTF
2020/02/26(水) 08:41:15.23ID:PiyizPRV
アンカもマトモに撃てないってアホじぇねえのコイツ
666デフォルトの名無しさん
垢版 |
2020/02/26(水) 11:09:35.39ID:wiEfavJ1
見ないで答えるけど
include path の順番がまずいんじゃね
2020/02/27(木) 10:57:15.88ID:RXnANkEf
-----sample.h (classAは変更不可)
class A
{ private: virtual void funcX(void) = 0;
 public: void funcY(void);
 public: void funcZ(void);
};
class B : private A {・・・};
-----

このような関係性で
classBでfuncXとfuncY(内部でfuncXを使用)が不要、funcZが必要な場合
funcXをclassBに追加せずに済む方法があればいいのですが
funcXもclassBに追加するしかないですか?
2020/02/27(木) 11:17:47.73ID:R9m18Hk4
追加ってのがvtblに追加って意味ならそうだよ
2020/02/27(木) 11:55:46.48ID:RX8iJBd3
継承しなければいい
2020/02/27(木) 13:04:34.75ID:RXnANkEf
>>668
ありがとうございます

>>669
純粋仮想関数が含まれているので継承しないと使用できません
671デフォルトの名無しさん
垢版 |
2020/02/27(木) 15:19:56.24ID:G6pyHvdg
Icon とか継承したクラス造ろうとしたら protected 観たいなエラー出るのですが
無理やり継承する方法はありますか?
2020/02/27(木) 21:56:32.66ID:nCyLO+2A
Ruby では、Forwardable モジュールで、
継承ではなく、包含を使って、インスタンス変数に委譲できる

使えるメソッドも、限定できる。
配列のメソッド中、指定した2つのメソッドだけが使える

@ary = [ ]
def_delegators( :@ary, :push, :pop )
673デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:15:25.36ID:IR/jNZBp
組み込みプログラマになりたいんだけどオススメの本とかあったら教えてください
2020/02/27(木) 22:20:30.25ID:dsi+r0l9
組み込みって言っちゃうと範囲が相当広いと思うんだけど具体的に何か目指してるのとかあるの?
675デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:22:34.36ID:IR/jNZBp
機械メーカーで製造やってるんどけどいつか組み込みシステムの部署に行きたいのです
676デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:28:28.18ID:IR/jNZBp
C言語は学生の頃少しやった程度ですが、苦Cや新明解C言語などの本で勉強し直しているところ
2020/02/27(木) 22:31:05.04ID:nCyLO+2A
組み込みは、C

情報処理資格・エンベデッドの教科書を読めば?
678デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:33:26.60ID:IR/jNZBp
>>677
いきなり難易度が高そうだ…
2020/02/27(木) 22:44:47.37ID:R9m18Hk4
>>675
先に異動してしまってそこで学ぶ方がいいのでは?
若いなら可能だよ
おっさんならそもそも実務経験なしのスキルは評価されないと思う
680デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:05:06.65ID:IR/jNZBp
>>679
29歳は若手ですか?
2020/02/27(木) 23:12:49.02ID:R9m18Hk4
>>680
転職で考えればまだポテンシャルで採ってもらえる年齢
まぁ30前半までだと思うけど
企業文化にもよるけど可能性はあるんじゃない?
だめもとでいってみて、ダメでもそれが将来のコネになるかもしれないのだから
情熱あるなら動いてみるのが正解だと思うよ
682デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:19:52.21ID:IR/jNZBp
>>681
ありがとう。
上司にはいつかは異動したいとは言ってる。後は組み込みやってるところにアピールする必要もあると思うんだ。
だから基礎でもいいから勉強しときたい。
2020/02/27(木) 23:24:42.92ID:dsi+r0l9
異動先の想定があるなら異動先の人間に聞くのが一番良いんじゃないかな?
話できる機会を作ってもらえるならポテンシャルやモチベーションを見せるチャンスにもなるし
組み込みって業種や企業で文化がだいぶ違うイメージだから自社内異動想定なら自社に目標合わせるのが一番だと思う
684デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:29:18.61ID:IR/jNZBp
>>683
聞いたことあるんだけど、プログラミングできなくても設計書読めたらなんとかなりますよーって言われたなぁ。
2020/02/27(木) 23:30:08.12ID:DhCS2IXf
>>680
29ならもうおっさん
その歳で経験無いなら組み込み系は絶望的
2020/02/27(木) 23:43:07.61ID:dsi+r0l9
>>684
個人的にはプログラミング的なことなんざ実務やってりゃ嫌でも身につくんでそんな気にしない
素養とか基礎知識はあったほうがそりゃいいけどね
どれくらい部署間の関係性が強いかわからんが他部署出身者はその部門のことをケアした提案とかができるからむしろ重宝するくらい
やる気ある人間にやらせたほうが結果的に効率上がるからそういうのは積極的に対応する

まぁとは言っても企業文化次第ではあるけどねー
2020/02/28(金) 00:06:09.61ID:bgqQewMR
>>682
勉強するのはもちろん構わない
でもしっかり勉強してから異動とか思ってたら機を逃すから注意ね

上でも言ってるとおり組み込みといっても千差万別で幅広い
組み込みlinuxかRTOSかぐらいは絞らないと
2020/02/28(金) 10:20:28.68ID:OpAeM4nJ
PLC も組み込み系かな?
2020/02/28(金) 23:31:02.28ID:KhVuQUrV
float型からdouble型にキャストした際に値が変わってしまうのですが、一般にどうやって対処するのでしょうか。
float f4_sample_t =0.0002;
double f8_sample_t = (double)f4_sample_t;
とすると、0.0002を期待するのですが0.000199****となります。

↓のように、してみましたが0.00199**となってしまいました。
f8_sample_t=(double)((uint)(f4_sample_t*10000))/10000;
2020/02/28(金) 23:53:01.56ID:bgqQewMR
>>689
簡単に言うと浮動小数の中身は2進数の小数
なのでもともと0.0002を正確に表せない
表示する際に人にわかりやすくするために10進数の小数に変換するが
そのとき何桁まで計算するかで変わってるように見える
2020/02/29(土) 00:56:43.52ID:WzbNfV7+
0.0002 は循環小数だなぁ。
十進数ではキリのよい小数でも二進数では正確に表せないのはよくあること。
誤差はあるものだという考えで扱わないといけない。

一般には double の仮数部は 52bit の精度だから、この精度の範囲を超えるような (浮動小数点の) 計算は諦めるしかない。
https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
そんでもって計算の内容次第では精度が失われることがあるから、そこらへんも注意が必要。
https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E8%A8%88%E7%AE%97%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%A8%AE%E9%A1%9E
どうやれば出来るという簡単なものではないのでちゃんとした専門書で学ばないといけないと思う。

浮動小数点で計算するのは諦めて速度も諦めるなら
十進小数ライブラリを作るか導入してもいいだろうし、
計算の内容によっては有理数型を導入するとか
まあ出来ることは色々とあるよ。
2020/02/29(土) 02:50:21.96ID:/KNqnMc5
固定小数点数や十進表現の選択肢もある。
2020/02/29(土) 07:16:56.84ID:a4Xwg1lT
floatからdoubleへの変換では値は変わらない
2020/02/29(土) 08:19:49.16ID:WjxTYPok
>>690-693
ありがとうございます。
現時点では理解できてないのですが、厳密に表現出来ない値があるという認識で良いでしょうか。
宣言時にdoubleで0.0002とする場合はその後の積和演算の誤差が問題にならないのですが、こちらの制約上でfloat入力しかできないのでキャストしています。
2020/02/29(土) 08:23:33.95ID:a4Xwg1lT
厳密に表現出来ない値があるのは当たり前
floatやdoubleで表現出来る値は有限通りなんだから
2020/02/29(土) 08:32:37.79ID:a4Xwg1lT
floatの中身が元々10進数で簡単に表せる数という事がわかってるなら
doubleにするときに単純なキャストではなく
そういう補正を加えれば良い
10進7桁までならdouble精度に復元出来る
697デフォルトの名無しさん
垢版 |
2020/02/29(土) 14:00:46.61ID:3sltTQiA
>>693
>>689 のは既にfloatの時点で0.0002じゃないんだよなω
2020/02/29(土) 17:13:36.11ID:VpO1O9GW
>>694
許容できる誤差の閾値がどうやって決まってんのか謎だけど
0.0002を救いたいなら例えば入力は10000倍しておくという運用にして
doubleにするときに10000で割るとかね
2020/02/29(土) 23:21:10.14ID:6IdZMwnf
浮動小数点は、非連続・飛び飛び。
数値の間が、ものすごく小さいこともあるし、大きい事もある

よく起こるバグは、ソフト・サーバーなどは、連続して3日しか動かないというもの

float に、1ずつ足していくと、3日後には数値間が、1以上になって足せなくなる。
組み込みプログラマーは、こういう基礎的なことを、知らない香具師が多いw

しかも発見するのに、3日も掛かるから、テストで発見できないので、こういう製品が多いw
■ このスレッドは過去ログ倉庫に格納されています