探検
0からの、超初心者C++相談室
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr 何にも知らない0からの出発、超初心者のためのC++相談室
166デフォルトの名無しさん
2020/09/21(月) 21:53:00.21ID:GP+Uv9qA >>165
すいません、そういうことです。
usingについてはおかげさまで意味が分かりました。ありがとうございます。
namespace名前空間?と言うもののメリットと言葉の意味がいまいち分からないのですが、
どっからどの部分までが名前空間なのでしょうか
すいません、そういうことです。
usingについてはおかげさまで意味が分かりました。ありがとうございます。
namespace名前空間?と言うもののメリットと言葉の意味がいまいち分からないのですが、
どっからどの部分までが名前空間なのでしょうか
167デフォルトの名無しさん
2020/09/21(月) 23:03:56.25ID:IzAwgxqY >>166
namespaceがなかったら
たとえば自分でなにか作ってるときとか、そこには自作のメソッドの定義があるわけで
さらに公開されてるライブラリを使いたくなって、いざそこに組み込んだとき、
自作のメソッドと同名のメソッド名がライブラリ内で定義されてたらコンパイルエラーが発生する
(重複定義された場合はコンパイラからすればどちらを呼び出していいかわからない)
みたいな事態が発生してしまう
さっきの例だと同名のメソッド(Console.WriteLine)を定義してても
System名前空間とMyNS名前空間で分けたからコンパイルが通る
System.Console.WriteLine(s); // Console.WriteLineはSystemに属するもの
MyNS.Console.WriteLine(s); // Console.WriteLineはMyNSに属するもの
namespace Hoge {
// {}内はHoge名前空間に属する
}
namespaceがなかったら
たとえば自分でなにか作ってるときとか、そこには自作のメソッドの定義があるわけで
さらに公開されてるライブラリを使いたくなって、いざそこに組み込んだとき、
自作のメソッドと同名のメソッド名がライブラリ内で定義されてたらコンパイルエラーが発生する
(重複定義された場合はコンパイラからすればどちらを呼び出していいかわからない)
みたいな事態が発生してしまう
さっきの例だと同名のメソッド(Console.WriteLine)を定義してても
System名前空間とMyNS名前空間で分けたからコンパイルが通る
System.Console.WriteLine(s); // Console.WriteLineはSystemに属するもの
MyNS.Console.WriteLine(s); // Console.WriteLineはMyNSに属するもの
namespace Hoge {
// {}内はHoge名前空間に属する
}
168デフォルトの名無しさん
2020/09/22(火) 06:36:29.84ID:ZtayyY2i 完全にC++の感覚でしか説明できんけど、
あるライブラリを開発する上で、そのライブラリ全体がnamespaceで囲われていると、
ライブラリ作者は大抵その名前空間内でコードを書くから、いちいち名前空間を指定する必要は無い
さらに>>164の言うように、名前空間がライブラリや機能を表しているから、その中のコードは短い命名に出来る
ライブラリ利用者側からすると打鍵数は変わらない(か、下手すると増える)けど、その名前をよく使うソースコードなら、usingで取り込むことも出来るし、あまり使わないなら取り込まず毎回指定してもいい(その場合名前重複の心配もない)
こういう取捨選択は、関数・クラス名に全部ライブラリ名や機能名のプレフィックスが付くような命名だと出来ないこと
あと_privateみたいな名前空間に関数を書けば、ユーザーが触る必要の無い関数を隔離出来る(使用を禁止までは出来ないけど、補完の候補に出てこないのは便利
あるライブラリを開発する上で、そのライブラリ全体がnamespaceで囲われていると、
ライブラリ作者は大抵その名前空間内でコードを書くから、いちいち名前空間を指定する必要は無い
さらに>>164の言うように、名前空間がライブラリや機能を表しているから、その中のコードは短い命名に出来る
ライブラリ利用者側からすると打鍵数は変わらない(か、下手すると増える)けど、その名前をよく使うソースコードなら、usingで取り込むことも出来るし、あまり使わないなら取り込まず毎回指定してもいい(その場合名前重複の心配もない)
こういう取捨選択は、関数・クラス名に全部ライブラリ名や機能名のプレフィックスが付くような命名だと出来ないこと
あと_privateみたいな名前空間に関数を書けば、ユーザーが触る必要の無い関数を隔離出来る(使用を禁止までは出来ないけど、補完の候補に出てこないのは便利
169デフォルトの名無しさん
2020/09/22(火) 13:09:23.63ID:iGBGeTHm 名前空間を使うと検索性が最悪になる
(別の名前空間の同一名称が引っ掛かりまくる)
みんなどう対処しているんだろう
(別の名前空間の同一名称が引っ掛かりまくる)
みんなどう対処しているんだろう
170デフォルトの名無しさん
2020/09/22(火) 17:08:47.15ID:QYfnOwKH >>169
using namespaceするのが問題じゃない?
using namespaceするのが問題じゃない?
171デフォルトの名無しさん
2020/09/22(火) 17:49:49.66ID:ZtayyY2i いやusingに限らず、例えば>>168で言ったライブラリ作る側(名前空間内で作業する側)はいちいちhoge内なのにhoge::とか書かんでしょ
確かに検索で困ることはたまにある・・
確かに検索で困ることはたまにある・・
172デフォルトの名無しさん
2020/09/22(火) 19:24:25.17ID:Xh0fS725 namespace で絞り込んで、識別名をハイライトして、あとは気合
173デフォルトの名無しさん
2020/10/20(火) 13:37:38.41ID:Mso39Itu C++とVisual C++の違いについてです。
C++はプログラミング言語であり、
VC++は統合開発環境であるという説明があります。
でも私にはVC++がC++++のように見えます。
VC++はC++の文法に新たな流儀を付け加えるか置き換えていて
言語そのものの使用を若干変えているように見えます。
C++のキーワードが別のものに置き換わっていたりするからです。
そのため、C++を勉強したあとにVC++を学ぶと違う言語を学んでいるように感じます。
この理解は正しいでしょうか。
C++はプログラミング言語であり、
VC++は統合開発環境であるという説明があります。
でも私にはVC++がC++++のように見えます。
VC++はC++の文法に新たな流儀を付け加えるか置き換えていて
言語そのものの使用を若干変えているように見えます。
C++のキーワードが別のものに置き換わっていたりするからです。
そのため、C++を勉強したあとにVC++を学ぶと違う言語を学んでいるように感じます。
この理解は正しいでしょうか。
174デフォルトの名無しさん
2020/10/20(火) 13:38:19.99ID:Mso39Itu 使用改め仕様
175デフォルトの名無しさん
2020/10/20(火) 14:39:40.58ID:C+6cO9mm 多少違うのは
#pragma くらいだろ
勝手に仕様なんて変えない
統合環境とか API とかはもちろん関係無い話
#pragma くらいだろ
勝手に仕様なんて変えない
統合環境とか API とかはもちろん関係無い話
176デフォルトの名無しさん
2020/10/20(火) 20:36:08.28ID:3YoHPXFg IDEはVisual Studio
VC++はMSのC++商品名
C++/CLIとかを混同してね?
これはC++を独自拡張したものだよ
VC++はMSのC++商品名
C++/CLIとかを混同してね?
これはC++を独自拡張したものだよ
177デフォルトの名無しさん
2020/10/20(火) 22:21:46.71ID:qSDH25Or __declspec(dllimport)とかアホみたいに書かされたあの時代のmsvc拡張c++のことでしょ
178デフォルトの名無しさん
2020/10/21(水) 11:12:14.17ID:xBgAWF1Y 描かずに済むけどな
179デフォルトの名無しさん
2020/10/21(水) 13:51:50.76ID:WStrtR1y C++/CLIは拡張ですか?
いくつかの流儀を置き換えていますよね?
ポインタをハンドルと読んだり?
いくつかの流儀を置き換えていますよね?
ポインタをハンドルと読んだり?
180デフォルトの名無しさん
2020/10/21(水) 14:12:49.21ID:xLl2qqDk MS拡張にしろC++/CLIにしろ既存のコードの挙動を変えるようなことはしてないんでは?
拡張でいいんじゃね
拡張でいいんじゃね
181デフォルトの名無しさん
2020/10/21(水) 18:58:32.20ID:VaRlK94m ポインタはポインタとしか言わんよ
ハンドルは
ハンドルは
182デフォルトの名無しさん
2020/11/24(火) 23:02:59.67ID:uO0ONWsd Visual Studio 2019をインストールしました
Windowsスタートボタン→Visual Studio 2019を起動しました
プロジェクト名を入れて下さい→test001
保存フォルダの場所を決めて下さい→Y:\_source\repos
何かのウインドウが開きました(おそらく開発の統合画面?)
さっそく1行目から入力しようとしましたが、キー入力を受け付けてくれません
左の縦に、ツールボックスと表示しています
このままでは進まないので、エクスプローラーでreposフォルダの下に
samp01.txtを新しく作りました
何かのウインドウに戻り、samp01.txtを開くと文字入力が可能になりました
進め方が間違っているように思えますが、samp01.txtに#define...から
描き始めてよいでしょうか?
統合環境が苦手で、フォルダにテキストファイルを作りテキストエディタで
ソースを書いて保存
コマンドラインでコンパイル、エラーがなければリンク...をしてきました
何かの画面には難しそうなソリューションエクスプローラー、その下には
プロパティウインドウが表示されています。
このウインドウにも慣れないといけないので進め方を教えてください
Windowsスタートボタン→Visual Studio 2019を起動しました
プロジェクト名を入れて下さい→test001
保存フォルダの場所を決めて下さい→Y:\_source\repos
何かのウインドウが開きました(おそらく開発の統合画面?)
さっそく1行目から入力しようとしましたが、キー入力を受け付けてくれません
左の縦に、ツールボックスと表示しています
このままでは進まないので、エクスプローラーでreposフォルダの下に
samp01.txtを新しく作りました
何かのウインドウに戻り、samp01.txtを開くと文字入力が可能になりました
進め方が間違っているように思えますが、samp01.txtに#define...から
描き始めてよいでしょうか?
統合環境が苦手で、フォルダにテキストファイルを作りテキストエディタで
ソースを書いて保存
コマンドラインでコンパイル、エラーがなければリンク...をしてきました
何かの画面には難しそうなソリューションエクスプローラー、その下には
プロパティウインドウが表示されています。
このウインドウにも慣れないといけないので進め方を教えてください
183デフォルトの名無しさん
2020/11/25(水) 07:42:29.85ID:+VuDDc3z184デフォルトの名無しさん
2020/11/25(水) 08:12:43.79ID:1cagBqIs185デフォルトの名無しさん
2020/11/27(金) 09:48:07.00ID:sDMv6Edh186デフォルトの名無しさん
2020/11/27(金) 15:09:19.88ID:8PW9KReU ソリューションエクスプローラーのヘッダーファイル、ソースファイルのとこを右クリックで新規選べばまっさらなファイル作れるし
メニューのファイル→追加?(うろ覚え)でも作れる
メニューのファイル→追加?(うろ覚え)でも作れる
187デフォルトの名無しさん
2020/12/06(日) 23:34:56.54ID:TL07p8cG 手順書のページのURLありがとうございます。
Microsoft Visual Studio Community 2019
Version 16.8.2を使用中。
テキストで#include<stdio.h>から入力しましたが煮詰まりました。ソースはネットを検索してコピペなので、
コロンやセミコロンの間違いはないと思われます。
#include<stdio.h>
int main( void )
{
printf( "ようこそC(++)言語の世界へ\n" );
return 0;
}
タスクバー?にファイル(F)編集(E)表示(V)Git(G)プロジェクト(P)デバッグ(D)テスト(S)・・・があります。
手順書では[プロジェクトをビルドするには、 [ビルド] メニューの [ソリューションのビルド] を選択します。]とあります。
が、ビルドメニューがありません。
プルダウンのデバッグ(D)からデバッグ無しで開始したいですが
デバッグ無しで開始が薄い文字になっており、クリックできません。
統合開発環境って皆さんが使用して使いやすいはずですよね。
何から順番にクリックしていくのかさっぱりわかりません。
手順通りにしようとして「ここをクリック」のところはたいていその「ここ」の項目が画面になくて
ソースを書いてコンパイルすらできない、ありません。ありません状態。
同じバージョンでもメニューの項目が違っていたら次に何をするかお手上げです。
お助け下さい。
Microsoft Visual Studio Community 2019
Version 16.8.2を使用中。
テキストで#include<stdio.h>から入力しましたが煮詰まりました。ソースはネットを検索してコピペなので、
コロンやセミコロンの間違いはないと思われます。
#include<stdio.h>
int main( void )
{
printf( "ようこそC(++)言語の世界へ\n" );
return 0;
}
タスクバー?にファイル(F)編集(E)表示(V)Git(G)プロジェクト(P)デバッグ(D)テスト(S)・・・があります。
手順書では[プロジェクトをビルドするには、 [ビルド] メニューの [ソリューションのビルド] を選択します。]とあります。
が、ビルドメニューがありません。
プルダウンのデバッグ(D)からデバッグ無しで開始したいですが
デバッグ無しで開始が薄い文字になっており、クリックできません。
統合開発環境って皆さんが使用して使いやすいはずですよね。
何から順番にクリックしていくのかさっぱりわかりません。
手順通りにしようとして「ここをクリック」のところはたいていその「ここ」の項目が画面になくて
ソースを書いてコンパイルすらできない、ありません。ありません状態。
同じバージョンでもメニューの項目が違っていたら次に何をするかお手上げです。
お助け下さい。
189デフォルトの名無しさん
2020/12/07(月) 00:14:40.22ID:MnyC2DM9 アドバイスありがとうございます。
ソリューションエクスプローラー フォルダービューを右側に開いています
そこにhello_.cppが表示されています。いま、開いているファイルです。
#includeからreturnまでペーストしています。
ソリューションエクスプローラーでhello_.cppを右クリックしますと[追加]があります。
[追加]->新しいファイル
新しい項目の追加(W)
新しいフォルダー
この3つを表示します。ソリューションエクスプローラーにhello_.cppが表示されているだけでは不足でしょうか
hello_.cppを右クリック新しいファイルを選ぶと名前を入力になりました
aaaと入力するとツールボックスに新しくテキスト入力タブが表示
#includeからreturnまで貼り付けました
デバッグ無しで開始の文字は薄いままです
ビルドメニューはありません
編集や表示、Git、プロジェクトのメニューを色々クリックしています
変わりません…
何か、こんな不自由な統合開発環境を使うのは苦痛しか感じず、しかし
全世界のプログラマの人たちも使っているものですし、なんとか
ビルドメニューを出したいです
ソリューションエクスプローラー フォルダービューを右側に開いています
そこにhello_.cppが表示されています。いま、開いているファイルです。
#includeからreturnまでペーストしています。
ソリューションエクスプローラーでhello_.cppを右クリックしますと[追加]があります。
[追加]->新しいファイル
新しい項目の追加(W)
新しいフォルダー
この3つを表示します。ソリューションエクスプローラーにhello_.cppが表示されているだけでは不足でしょうか
hello_.cppを右クリック新しいファイルを選ぶと名前を入力になりました
aaaと入力するとツールボックスに新しくテキスト入力タブが表示
#includeからreturnまで貼り付けました
デバッグ無しで開始の文字は薄いままです
ビルドメニューはありません
編集や表示、Git、プロジェクトのメニューを色々クリックしています
変わりません…
何か、こんな不自由な統合開発環境を使うのは苦痛しか感じず、しかし
全世界のプログラマの人たちも使っているものですし、なんとか
ビルドメニューを出したいです
190デフォルトの名無しさん
2020/12/07(月) 00:18:03.60ID:MnyC2DM9 あちこちクリックしていますと、画面の上に
プロジェクト、ビルド、デバッグの文字が出てきました
ビルド->ソリューションでコード分析を実行を選びます
デバッグ->デバッグ無しで開始は薄い文字でクリックできません
何か手順が不足しているようです
プロジェクト、ビルド、デバッグの文字が出てきました
ビルド->ソリューションでコード分析を実行を選びます
デバッグ->デバッグ無しで開始は薄い文字でクリックできません
何か手順が不足しているようです
191蟻人間 ◆T6xkBnTXz7B0
2020/12/07(月) 00:18:08.82ID:LcHpzYm6 ファイルとフォルダの違い
ソリューションの種類が違う
だろうな
ソリューションの種類が違う
だろうな
192デフォルトの名無しさん
2020/12/07(月) 00:59:54.04ID:MnyC2DM9 不慣れでごめんなさい
デバッグ無しで開始は薄い文字でクリックできず変わらず
本日はそろそろ寝ます
後は明日、使い方と用語を調べます
デバッグ無しで開始は薄い文字でクリックできず変わらず
本日はそろそろ寝ます
後は明日、使い方と用語を調べます
193蟻人間 ◆T6xkBnTXz7B0
2020/12/07(月) 01:04:11.74ID:LcHpzYm6 初心者は素直にチュートリアルの手順に従ってればいいんだよ。
194デフォルトの名無しさん
2020/12/09(水) 03:22:01.70ID:WuZTb4kZ 濡れちゃうう!
195デフォルトの名無しさん
2020/12/12(土) 02:59:14.21ID:a7AUwK+L なにからすればいいの
目標がない
目標がない
196デフォルトの名無しさん
2020/12/12(土) 13:02:07.54ID:A7m2fOl0 「何かしたい」というものが無いならば、しなくてどうぞ。
「何かしたい」というものが有る人は、自分で行動する。
「何かしたい」というものが有る人は、自分で行動する。
197はちみつ餃子 ◆8X2XSCHEME
2020/12/12(土) 13:39:37.52ID:UUApGKPR 質問サイトにある質問に (根拠になる一次資料 (主に仕様書の具体的な項目) と共に) 回答するのを繰り返せば
特定のプログラミング言語に詳しくなることは出来るよ。
それでプログラミングを出来るようになるかどうかはわからんけど。
特定のプログラミング言語に詳しくなることは出来るよ。
それでプログラミングを出来るようになるかどうかはわからんけど。
198デフォルトの名無しさん
2020/12/12(土) 13:47:09.92ID:k8hTa554 「人工知能搭載の人型アンドロイドが作りたい」
という目標を持つ者が
「printfで文字列を表示したい」
という目標を持つのはとてもつらい
という目標を持つ者が
「printfで文字列を表示したい」
という目標を持つのはとてもつらい
199デフォルトの名無しさん
2020/12/12(土) 18:31:18.09ID:KTyXxWQ0 今日は国会図書館に行ってきたわ。
200デフォルトの名無しさん
2020/12/12(土) 18:34:21.54ID:KTyXxWQ0 国会図書館は国会議事堂内に分室があって資料を取り寄せて閲覧できるんですよ。
でも、ほとんど利用実績が無いらしいんですね。
でも、ほとんど利用実績が無いらしいんですね。
201デフォルトの名無しさん
2020/12/12(土) 19:52:44.57ID:KTyXxWQ0 国会図書館は若い女性と、男性は老人が多かったです。
土曜日だからかもしれません。
資料のコピーは長蛇の列が出来ていました。
あの列で感染するんでしょうね。
女性のメガネ率は8割超えてました。
おそらくドクター持ちでしょうね。
土曜日だからかもしれません。
資料のコピーは長蛇の列が出来ていました。
あの列で感染するんでしょうね。
女性のメガネ率は8割超えてました。
おそらくドクター持ちでしょうね。
202デフォルトの名無しさん
2021/02/08(月) 19:09:45.85ID:UEWD7mIf m1 macbookでc言語始めるのには何が必要ですか?
c言語を始めるパッケージとかって売ってるんですか?
それともフリーソフトでダウンロード出来るんですか?
学校ではコマンドを打つところから始めたので、導入に関しては全く解りません。
c言語を始めるパッケージとかって売ってるんですか?
それともフリーソフトでダウンロード出来るんですか?
学校ではコマンドを打つところから始めたので、導入に関しては全く解りません。
203デフォルトの名無しさん
2021/02/08(月) 19:14:35.93ID:XD2vlsgg 0からのって感じ
良いねえ
良いねえ
205デフォルトの名無しさん
2021/02/08(月) 20:13:50.11ID:UEWD7mIf >>204
レスどうもです
gccほかググってみました
@エディタで入力
Aコンパイラで2進数へ変換(ここでgcc使用)
Bコマンドプロンプトで実行
これで合ってますか?
合ってるとすれば、エディタは何がいいんでしょうか?
レスどうもです
gccほかググってみました
@エディタで入力
Aコンパイラで2進数へ変換(ここでgcc使用)
Bコマンドプロンプトで実行
これで合ってますか?
合ってるとすれば、エディタは何がいいんでしょうか?
206蟻人間 ◆T6xkBnTXz7B0
2021/02/08(月) 20:21:45.01ID:ifT1d8uh207デフォルトの名無しさん
2021/02/08(月) 20:44:41.11ID:0fSH6U0R Linux なら、build-essential で、Ruby のRake でコンパイルする。
VSCode も使える
mruby の本も出た
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11
宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応
人工衛星イザナギ・イザナミで、使っている
VSCode も使える
mruby の本も出た
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11
宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応
人工衛星イザナギ・イザナミで、使っている
208デフォルトの名無しさん
2021/02/08(月) 21:24:52.07ID:mOpGK7eJ MacでもVSCode、gcc、terminalでええやんけ
209デフォルトの名無しさん
2021/02/08(月) 22:16:35.01ID:UEWD7mIf >>208
ありがとー
ありがとー
210デフォルトの名無しさん
2021/02/08(月) 22:35:42.15ID:UEWD7mIf 色々教えてもらってありがとう
でもなんかrubyから始める方が良さそうなのでそうします
でもなんかrubyから始める方が良さそうなのでそうします
211デフォルトの名無しさん
2021/02/08(月) 22:48:15.05ID:0fSH6U0R Mac で、Cをやる人なんているのか?
たいてい、Linux だろ
Macの機械語をもらっても、誰も動かせないw
たいてい、Linux だろ
Macの機械語をもらっても、誰も動かせないw
212デフォルトの名無しさん
2021/02/08(月) 22:48:56.13ID:YmxwiogA 一応Visual Studio Community for Mac
何てものもあるけどね
MacユーザーじゃないのでWindowsと同じように使えるのかどうかは知らんけどw
何てものもあるけどね
MacユーザーじゃないのでWindowsと同じように使えるのかどうかは知らんけどw
213デフォルトの名無しさん
2021/02/08(月) 22:52:50.26ID:ObgPii2R m1ではxcodeはだめなのかなあ
214デフォルトの名無しさん
2021/02/08(月) 23:04:19.24ID:WYlwG+td 大昔のmacbookの話だがxcodeなる10GBくらいの開発環境を入れないとほとんど何も弄れなかった記憶
今のストレージ容量ならmacbookでも行けそう
今のストレージ容量ならmacbookでも行けそう
215デフォルトの名無しさん
2021/02/08(月) 23:11:34.64ID:WYlwG+td winは仮想環境も充実してるし色々コンパイラ試せるからいいよね
ネイティブサポートもintel mklやVCで結局一番手厚いし
ネイティブサポートもintel mklやVCで結局一番手厚いし
216デフォルトの名無しさん
2021/02/08(月) 23:18:46.61ID:nKLqWVxG >>207
F-15はAda、F-35はC++で書かれてる。
F-15はAda、F-35はC++で書かれてる。
217デフォルトの名無しさん
2021/02/08(月) 23:37:09.64ID:0fSH6U0R Linux には、strace という神ツールもある
218デフォルトの名無しさん
2021/02/09(火) 00:44:38.89ID:OoGqnNNo219デフォルトの名無しさん
2021/02/09(火) 09:28:59.64ID:aKFUc8iT220デフォルトの名無しさん
2021/02/09(火) 12:16:11.15ID:To5JxTyF macを選ぶこと自体が正しく無い
221デフォルトの名無しさん
2021/02/18(木) 19:54:34.90ID:clnw43k0 M1 macbook買ってruby でうっほっほーしてますわ
222デフォルトの名無しさん
2021/02/18(木) 21:38:45.66ID:sRdwF113 最近コード読まなきゃならん機会増えてきて教養として読めるようにはなりたい
規格に沿ってなくても勉強にいい感じのインタプリタってないかな?
規格に沿ってなくても勉強にいい感じのインタプリタってないかな?
223デフォルトの名無しさん
2021/02/18(木) 21:59:26.94ID:UlBwu06v プロになりたい香具師は、YouTube で有名な雑食系エンジニア・KENTA のサロンに入って、
16〜32GB メモリのMac で、Ruby on Rails でポートフォリオを作る
もっと、すごい人は、Windows 10, WSL2, Docker, Ubuntu, mruby で、
C99/Ruby 併用で、人工衛星など宇宙開発してるw
mrubyの本も出たし
16〜32GB メモリのMac で、Ruby on Rails でポートフォリオを作る
もっと、すごい人は、Windows 10, WSL2, Docker, Ubuntu, mruby で、
C99/Ruby 併用で、人工衛星など宇宙開発してるw
mrubyの本も出たし
224デフォルトの名無しさん
2021/02/19(金) 15:37:54.68ID:LoU7pdW5 猛烈にNG率高いレス
225デフォルトの名無しさん
2021/02/20(土) 03:42:06.46ID:1WE5qKPk みんなRubyとかCでなにしてるの
226デフォルトの名無しさん
2021/05/17(月) 11:52:26.06ID:094+MbId srand((unsigned)time(0UL));
int r=rand()%100-1;
ってコードがあるのですが返ってくる値がランダムじゃなくて規則性があってモヤモヤしてます
参考書によるとsrandの文が起動時に別の値に毎回変えるための文らしいんだけど
返される値が8,18,28,28,38,48.......と10ずつ繰り上がっていってランダムになってません
何を追加すれば規則性が消えるでしょうか?
int r=rand()%100-1;
ってコードがあるのですが返ってくる値がランダムじゃなくて規則性があってモヤモヤしてます
参考書によるとsrandの文が起動時に別の値に毎回変えるための文らしいんだけど
返される値が8,18,28,28,38,48.......と10ずつ繰り上がっていってランダムになってません
何を追加すれば規則性が消えるでしょうか?
227デフォルトの名無しさん
2021/05/17(月) 12:50:25.63ID:ZeUb3kXE >>226
0 以上 99 以下 の乱数を取得したいなら、
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 );
0 以上 98 以下 の乱数を取得したいなら、
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 99.0 );
0 以上 99 以下 の乱数を取得したいなら、
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 );
0 以上 98 以下 の乱数を取得したいなら、
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 99.0 );
228デフォルトの名無しさん
2021/05/17(月) 13:21:28.15ID:giSQx4b2229デフォルトの名無しさん
2021/05/17(月) 19:09:43.71ID:lfAH/Fki230デフォルトの名無しさん
2021/05/18(火) 02:31:27.98ID:+SAIeHDc >>226
疑似乱数は一定の規則に従って生成されるんだから規則的なのは当たり前。
それがどのくらいわかり難いのかという程度問題に過ぎないし、
どういった系を選ぶのが適切なのかは用途次第。
そしてよくある失敗だがランダムシードに時刻を使うなら時刻から予測できる可能性がある。
rand がどういうアルゴリズムで乱数生成するのかは言語仕様では規定していないけれど、
(乱数がとりうる範囲や、同じシードからは同じ乱数列が得られるという性質は規定している。)
伝統的に線形合同法で実装されることが多くて、
パラメータの選定や用途によっては露骨に規則的に見えることもある。
C++ では >>229 の言う通りメルセンヌツイスタが標準ライブラリとして提供されているのだから
それを使うのは妥当な解決方法である可能性は高い。
とはいえメルセンヌツイスタは簡単な物理シミュレーションなどにはおおよそ十分であるにしても
暗号用途には使い物にならないし速度はやや遅いので乱数が大量に必要な場合には
適切とは言えない。
かといって本物の乱数 (環境ノイズなどから生成される乱数) は再現性がないし、
これもまた遅すぎるので大量の乱数が必要な場合には向かない。
繰り返すけが乱数は用途に適しているかどうかであってあらゆる場面で万能な方法はない。
用途次第、状況次第。
疑似乱数は一定の規則に従って生成されるんだから規則的なのは当たり前。
それがどのくらいわかり難いのかという程度問題に過ぎないし、
どういった系を選ぶのが適切なのかは用途次第。
そしてよくある失敗だがランダムシードに時刻を使うなら時刻から予測できる可能性がある。
rand がどういうアルゴリズムで乱数生成するのかは言語仕様では規定していないけれど、
(乱数がとりうる範囲や、同じシードからは同じ乱数列が得られるという性質は規定している。)
伝統的に線形合同法で実装されることが多くて、
パラメータの選定や用途によっては露骨に規則的に見えることもある。
C++ では >>229 の言う通りメルセンヌツイスタが標準ライブラリとして提供されているのだから
それを使うのは妥当な解決方法である可能性は高い。
とはいえメルセンヌツイスタは簡単な物理シミュレーションなどにはおおよそ十分であるにしても
暗号用途には使い物にならないし速度はやや遅いので乱数が大量に必要な場合には
適切とは言えない。
かといって本物の乱数 (環境ノイズなどから生成される乱数) は再現性がないし、
これもまた遅すぎるので大量の乱数が必要な場合には向かない。
繰り返すけが乱数は用途に適しているかどうかであってあらゆる場面で万能な方法はない。
用途次第、状況次第。
231デフォルトの名無しさん
2021/05/18(火) 08:10:11.28ID:ysWtxNVs232226
2021/05/18(火) 22:58:17.77ID:wt3ZqlEf 今C言語を学習してるのですがC++じゃないと完全ランダムは無理なのですね…。
RAND_MAXは関数なのでしょうか?Cだと使えなかったです。
教えてくださってありがとうございました。
RAND_MAXは関数なのでしょうか?Cだと使えなかったです。
教えてくださってありがとうございました。
234デフォルトの名無しさん
2021/05/19(水) 00:55:55.90ID:g9DnnU6R せっかくなのでC++を勉強してみては?
235デフォルトの名無しさん
2021/05/19(水) 01:16:05.73ID:OYngDuIu 何をやりたい目的があるから、何々を勉強するだと、速いですよ。
236はちみつ餃子 ◆8X2XSCHEME
2021/05/19(水) 01:17:09.90ID:ONEwpJm5 このスレは C++ スレだからな。
C++ は C との互換性のために残している機能はあるが C++ 的にあまり好ましくない場合もあるし、
完全な互換性が維持されているわけでもない。
C++ は C との互換性のために残している機能はあるが C++ 的にあまり好ましくない場合もあるし、
完全な互換性が維持されているわけでもない。
237デフォルトの名無しさん
2021/05/19(水) 01:36:10.61ID:OYngDuIu238デフォルトの名無しさん
2021/05/19(水) 01:52:35.92ID:yT7tFlzp >>232
RAND_MAXは、古くから有るマクロ定数で、stdlib.h で例えば次のように定義されている:
#define RAND_MAX 32767
説明によれば:
「rand関数が返す最大値。処理系によって異なるが、最低でも 32767以上である。」
rand()は偏りが強いには強いが、それでも 227 のように書けば 226 のように
下一桁がいつも8になるようなほどではない。
RAND_MAXは、古くから有るマクロ定数で、stdlib.h で例えば次のように定義されている:
#define RAND_MAX 32767
説明によれば:
「rand関数が返す最大値。処理系によって異なるが、最低でも 32767以上である。」
rand()は偏りが強いには強いが、それでも 227 のように書けば 226 のように
下一桁がいつも8になるようなほどではない。
239デフォルトの名無しさん
2021/05/19(水) 01:54:51.13ID:yT7tFlzp240デフォルトの名無しさん
2021/05/19(水) 10:58:56.45ID:G7N6xM6g 0から7の整数が均等確率で出る乱数をrとした場合、
x = r % 3;
とすると、xは0〜2までの整数が出るが、均等確率ではない。
それはすべてのパターンを書いてみると分かる:(r,x)を書いてみると、
(0,0)
(1,1)
(2,2)
(3,0)
(4,1)
(5,2)
(6,0)
(7,1)
x= 0 となっているのは、3回。
x= 1 となっているのは、3回。
x= 2 となっているのは、2回。
なので、
P(x=0)=3/8
P(x=1)=3/8
P(x=2)=2/8=1/4
となり、x=2が出る確率だけが小さくなってしまう。
これと同様に、rが0〜32767を均等確率で出す乱数の場合、x=r % 100の値は0〜99までだが
xが0〜99になる確率は均等ではない。
x = r % 3;
とすると、xは0〜2までの整数が出るが、均等確率ではない。
それはすべてのパターンを書いてみると分かる:(r,x)を書いてみると、
(0,0)
(1,1)
(2,2)
(3,0)
(4,1)
(5,2)
(6,0)
(7,1)
x= 0 となっているのは、3回。
x= 1 となっているのは、3回。
x= 2 となっているのは、2回。
なので、
P(x=0)=3/8
P(x=1)=3/8
P(x=2)=2/8=1/4
となり、x=2が出る確率だけが小さくなってしまう。
これと同様に、rが0〜32767を均等確率で出す乱数の場合、x=r % 100の値は0〜99までだが
xが0〜99になる確率は均等ではない。
241デフォルトの名無しさん
2021/05/19(水) 12:10:26.94ID:G7N6xM6g242デフォルトの名無しさん
2021/05/19(水) 13:29:25.47ID:G7N6xM6g ちなみに、rand()は、出力範囲内の整数を全て出力し終わってから元の値に
戻る様になっているので周期も RAND_MAX + 1 に等しく、出力値は
均等確率で生じる。
>>226だと10で割った時の余りが必ず8になっておりそれは、出力が
10n + 8 になっているということ。これだと、今言った法則に当てはまって
ないので矛盾し、何かがおかしい。
戻る様になっているので周期も RAND_MAX + 1 に等しく、出力値は
均等確率で生じる。
>>226だと10で割った時の余りが必ず8になっておりそれは、出力が
10n + 8 になっているということ。これだと、今言った法則に当てはまって
ないので矛盾し、何かがおかしい。
243デフォルトの名無しさん
2021/05/19(水) 15:03:30.63ID:SQApMI36 C言語でのサーバー構築のやり方わかる方いますか?
244デフォルトの名無しさん
2021/05/19(水) 15:05:53.17ID:G7N6xM6g >>243
HTTP サーバーのことかな?
HTTP サーバーのことかな?
>>243
バークレーソケットをオープンしてリスンして、接続してきたのなら fork() だのスレッドで処理だの、というのを昔したことがありますが、すっかりわすれてしまいました…
どんなサーバーが欲しいのですか?簡単なサーバーならご要望に応えてテキトーに書く準備はありますよ
バークレーソケットをオープンしてリスンして、接続してきたのなら fork() だのスレッドで処理だの、というのを昔したことがありますが、すっかりわすれてしまいました…
どんなサーバーが欲しいのですか?簡単なサーバーならご要望に応えてテキトーに書く準備はありますよ
246はちみつ餃子 ◆8X2XSCHEME
2021/05/19(水) 23:06:46.13ID:ONEwpJm5247デフォルトの名無しさん
2021/05/19(水) 23:56:26.10ID:l+JWTKLH248デフォルトの名無しさん
2021/05/20(木) 00:27:22.67ID:qlUu+R49 >>246
uniform_real_distributionの時は?
uniform_real_distributionの時は?
249デフォルトの名無しさん
2021/05/20(木) 02:25:38.74ID:Dz+v3/+O250デフォルトの名無しさん
2021/05/20(木) 02:28:22.34ID:UJvm/t/I251デフォルトの名無しさん
2021/05/20(木) 02:52:09.51ID:onv6EMq1 >>246
剰余を取って特定範囲の乱数を生成することができるのは、元の乱数が MT 並に性質がよいときだけかと、つまり >>246 はちみつ氏のやりかたは、元の乱数が優れたものだからできる方法
MT が発明されるまでは、最悪の方法「線形合同法」でもなんとか我慢できる部分範囲の乱酔生成法しか推奨されなかった
C FAQ をみてもそれがわかりますね
http://www.kouno.jp/home/c_faq/c13.html#16
13.16:
A:ある範囲の整数からなる乱数はどうやったら生成することができるか。
Q:すぐに思い付く、
rand() % N
(これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜな ら乱数発生器の多くで下位のビットは悲惨なほどランダムでない。よりよい方法は以下のようなものである。
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
剰余を取って特定範囲の乱数を生成することができるのは、元の乱数が MT 並に性質がよいときだけかと、つまり >>246 はちみつ氏のやりかたは、元の乱数が優れたものだからできる方法
MT が発明されるまでは、最悪の方法「線形合同法」でもなんとか我慢できる部分範囲の乱酔生成法しか推奨されなかった
C FAQ をみてもそれがわかりますね
http://www.kouno.jp/home/c_faq/c13.html#16
13.16:
A:ある範囲の整数からなる乱数はどうやったら生成することができるか。
Q:すぐに思い付く、
rand() % N
(これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜな ら乱数発生器の多くで下位のビットは悲惨なほどランダムでない。よりよい方法は以下のようなものである。
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
253はちみつ餃子 ◆8X2XSCHEME
2021/05/20(木) 23:50:59.51ID:qkpZwp6c254デフォルトの名無しさん
2021/05/21(金) 00:17:02.51ID:Q+lecBxK QZからはキムチの匂いがする
255デフォルトの名無しさん
2021/05/21(金) 10:19:44.69ID:pMLUvwAV いずれにせよ >>226 は、まともな標準ライブラリで試すと 226 のような結果に
はならないはず。理由:
226では、rand()%100の下一桁が常に9だが、それだとrand()は常に奇数という
ことになるが、実際のrand()は全て奇数ということはないから。
現象的には、偶数と奇数が交互に来るという不具合が知られていたりするが、
全部奇数ということはない。
はならないはず。理由:
226では、rand()%100の下一桁が常に9だが、それだとrand()は常に奇数という
ことになるが、実際のrand()は全て奇数ということはないから。
現象的には、偶数と奇数が交互に来るという不具合が知られていたりするが、
全部奇数ということはない。
256デフォルトの名無しさん
2021/05/21(金) 10:27:54.72ID:b4MjZLXj 超初心者スレであることを考えると >>226 の srand() がプログラム起動時一度だけとも限らないのでは。
257はちみつ餃子 ◆8X2XSCHEME
2021/05/21(金) 13:18:40.70ID:JT5uzYpW Windows の (msvcrt の) rand は線形合同法だが下位バイトを豪快に捨ててる。
そのせいか (下位バイトを捨てない線形合同法よりは) 乱数としての質は多少良いが
初期値の違いに鈍感で、初期値が似ていれば最初の乱数も近いということが起こる。
>>256 の指摘は妥当かもしれない。
そのせいか (下位バイトを捨てない線形合同法よりは) 乱数としての質は多少良いが
初期値の違いに鈍感で、初期値が似ていれば最初の乱数も近いということが起こる。
>>256 の指摘は妥当かもしれない。
258デフォルトの名無しさん
2021/05/21(金) 17:16:26.14ID:qriMwFf7259デフォルトの名無しさん
2021/05/21(金) 17:24:43.18ID:qriMwFf7 なるほど。
質問者は、だから>>227でも快い返事をしてくれなかったのか。
彼は例えば、以下の様に書いていたようだね:
(1)
for ( int i = 0; i < 20; i++ ) {
srand((unsigned)time(0UL));
int r=rand()%100-1;
printf( "r=%d, ", r );
}
本来は、こう書くか、
(2)
srand((unsigned)time(0UL));
for ( int i = 0; i < 20; i++ ) {
int r=rand()%100-1;
printf( "r=%d, ", r );
}
こう書く:
(3)
srand((unsigned)time(0UL));
for ( int i = 0; i < 20; i++ ) {
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 );
printf( "r=%d, ", r );
}
この中で(1)はダメ。(2)も余り良くない。(3)はplain Cでの簡単な書き方では
標準。しかし、わずかに均等確率からはズれる。
質問者は、だから>>227でも快い返事をしてくれなかったのか。
彼は例えば、以下の様に書いていたようだね:
(1)
for ( int i = 0; i < 20; i++ ) {
srand((unsigned)time(0UL));
int r=rand()%100-1;
printf( "r=%d, ", r );
}
本来は、こう書くか、
(2)
srand((unsigned)time(0UL));
for ( int i = 0; i < 20; i++ ) {
int r=rand()%100-1;
printf( "r=%d, ", r );
}
こう書く:
(3)
srand((unsigned)time(0UL));
for ( int i = 0; i < 20; i++ ) {
int r = (int) ( ((double)rand()) / ((double)RAND_MAX + 1.0)) * 100.0 );
printf( "r=%d, ", r );
}
この中で(1)はダメ。(2)も余り良くない。(3)はplain Cでの簡単な書き方では
標準。しかし、わずかに均等確率からはズれる。
260デフォルトの名無しさん
2021/05/21(金) 18:35:20.74ID:ojw3YA/u261デフォルトの名無しさん
2021/05/21(金) 19:25:04.91ID:UZ6lwfzX Cはよくわからんのだけど(3)のやつわざわざdoubleにキャストする必要あるの?
262デフォルトの名無しさん
2021/05/21(金) 20:07:22.28ID:ojw3YA/u RAND_MAX + 1 でオーバーフローするとか
263デフォルトの名無しさん
2021/05/21(金) 20:19:47.95ID:UZ6lwfzX 最低でも32767以上だからINT_MAXのときもあるのか…
ありがとうございます。
ありがとうございます。
264デフォルトの名無しさん
2021/05/21(金) 20:22:18.98ID:UZ6lwfzX と思ったけどRAND_MAX+1.0した時点でdoubleになるんじゃ?
265デフォルトの名無しさん
2021/05/21(金) 20:30:15.34ID:ojw3YA/u■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 20代の3割が「テレビ見ない」現実…そして静かに広がる「究極のテレビ離れ」とは [muffin★]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- んなっしょい🍬禁止🈲のお🏡
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】ガラパゴス島国ジャップ、自分達の容姿が優れてると錯覚してしまう [383063292]
