引用
学生の時からVC++でM_PIを使おうとしたら「M_PIが定義されてない」
ってエラーが出るんだろう? と思ってはいたものの,スルーして
#define M_PI 3.1415926535897932384626433832795
とか定義してだましだましやってたんですが,
(特にM_PIについて調べたわけじゃないけど)たまたま読んだblogにて
#define _USE_MATH_DEFINES
#include <math.h>
と定義してやると,うまくいくらしいということで
やってみたらうまくいった.でも,理由がわからないと
なんだか気持ち悪いので,math.hを読んでみると
#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)
#endif
の間に
#define M_PI 3.14159265358979323846
って記述してあるので,M_PIを使うようなプログラムでは,
#include <math.h>
でmath.hをインクルードする前に
#define _USE_MATH_DEFINES
としなきゃ、そりゃあ「M_PIが定義されてない」ってエラーも出るよなと納得.
長年つっかえてたものが取れてちょっとスッキリ.
引用終わり
#include <stdafx.h>
using namespace std;
void start_msg();
void setcolor(int n);
int maxdt (int a, int b);
int main()
{
int m;
start_msg();
setcolor(2);
m = maxdt(100, 200);
cout << "max=" << m << '\n';
setcolor(7);
return 0;
}
void start_msg()
{
cout << "program start\n";
}
//文字色変更関数 n=0~7:黒赤緑黄青紫水白
void setcolor(int n)
{
if (n<0 || 7<n)
return;
cout << "\33[3" << n << "m";
}
int maxdt(int a, int b)
{
if (a > b)
return a;
else
return b;
}
*****
文字色変更ができない。
多分
cout << "\33[3" << n << "m";
ここがおかしいんだと思うんだが、どう直せばいいのかわからない。
本にはこう書いてあるんだが、さっぱりだ。
ぐぐってみても、どうすればいいかなんてないみたい。
にやそー、教えてくれー。
プログラミングで作りたいものを考えておこう。
何かしらの目的がないと、
何も作れないし、
何も学んだことにならない。
具体的なものでなくてもいいから、書いておく。
サイン波生成ソフト。
三角波生成ソフト。
矩形波生成ソフト。
のこぎり波生成ソフト。
とりあえず音を作るソフトか。簡単そうなの。難しいかもだが。
他はいまは思いつかないので、思いついたら書き足す。
iostreamについて
iostreamとは?
<iostream>ライブラリはいくつかの標準オブジェクトを自動的に定義する。
cin
標準入力
cout
標準出力
cerr
標準エラー出力
clog
バッファを使うcerr
抽出子(入出力演算子)
>>
入力演算子
例)cin >> 変数
※>>を使用するのはcinのみっぽい。他は<<でOK。
<<
出力演算子
例)cout << 変数
*****
using namespace std; について
***
namespace
プログラム要素(関数やクラスなど)を一纏めにするためのもの。
「名前空間」と訳されてる。
いまはまだよくわからんが、例
名前としてこの OKWeb /教えて! goo のカテゴリーを参考にすると、
次のようになります。
namespace education {
class economy;
void literature();
}
namespace society {
class economy;
double energy ();
}
すると、名前は上から順に、
education::economy
education::literature
society::economy
society::energy
になります。
効用としては、名前の衝突が避けられます。たとえば、
education::economy
society::economy
は全く別のものてす。
***
std
C++標準ライブラリ用の名前空間名。
名前空間を使うと、正式な名前は長くなり、
プログラムの読みやすさを損なうことがあります。
これを避けるために、using 宣言と using ディレクティブがあります。
***
using
using 宣言をすると、それ以後そのスコープでは
名前空間名を省略することができます。
例えば、using 宣言がなければ、
std::string str;
std::cout << "Hellow, world! << std::endl;
と書かなければ、標準準拠のコンパイラではエラーになりますが、
( endl を実行すると、改行してフラッシュする)
(A)using std::string
(A)using std::cout
(A)using std::endl
と宣言すると、std:: を省略して、
(B)string str;
(B)cout << "Hellow, world! << endl;
と使えるようになります。
using ディレクティブを使うと、その名前空間のプログラム要素は、
全て名前空間名を省略することができるようになります。例えば、
using namespace std;
と宣言すると、いちいち(A)を全て書かなくても(B)が書ける
(コンパイル・エラーにならない)ようになります。
using ディレクティブを使うと名前が衝突する可能性が増えるので、
新たにコーディングする場合は使うべきではないそうです。
名前空間がなかった昔の C++ のソースを標準準拠のコンパイラに
かけるときなどに、限定して使うことが推奨されています。
以上の説明は、概略のものです。
特に、名前空間名をいつ省略できるか、
省略した場合どのように解釈されるかについては注意が必要です。
*****
using namespace std;
これが名前空間のstdを使うって宣言なのはわかった。
でも、stdの名前空間内に入ってるものって何なのかがよくわからない。
まだわからなくてもいいのかな。いいということにしとこう。
間違ってるとことかあったら、教えてください。
基本データ型
関数や変数などを定義する際は、すべてデータ型を指定する必要がある。
既存の関数もすべてデータ型が指定されている。
データ型は大まかには、論理型、整数型、浮動小数点型、文字型などに分類される。
論理型
bool
二者択一の表現をする論理型。boolean type
定数として、true,falseが使える。
前者は値1(真)に相当。後者は値0(偽)に相当。
整数型/文字型
int
整数を表現する型。整数型。integer type
表現範囲はマシン環境に依存。
long int
longと略記できる。32ビット環境ではlong型変数を使う場面は多くない。
なので、そんなに重要じゃない?
char
ASCII文字ひとつを表現できる型。文字型。(整数型)
特別に文字を扱うための便利な機能を持っているわけではない。
int型と機能上は同じ性質を持つ。表現する範囲が異なっているだけ。
文字列の最後には文字コード0が置かれる。
unsigned
整数型の変数の頭に"unsigned"を付けることで、
表現範囲の符号をなくす。
つまり、負の数の表現ができなくなるが、
正の数の表現範囲が倍に増えるということ。
unsigned char/unsigned intなど
浮動小数点型
float,double
小数の表現が可能な型
floatは7桁までの小数に有効。
doubleは15桁までの小数に有効。
*****
string
文字列処理のできる型。
基本データ型ではなくユーザー定義型ということに注意のようだ。
*****
その他の型
ビギナー編には載ってないので後々理解していけばいいのかな?
これより下は後回しで!
***
列挙型
列挙型は、表意的な文字を整数値で表す特殊な型です。enum キーワードを使って宣言し、要素(定数)は{}で囲んで定義します。
書式: enum 型名 { 要素リスト } 変数1, 変数2, ... ;
enum primarycolor {red, green, blue} ; // 宣言の基本形
enum primarycolor {red, green, blue} pricolor1; // 宣言と同時に変数を宣言
enum {red, green, blue} procolor1, pricolor2; // 列挙体名を省略
上記の様にすると、最初の要素から順に、0( = red), 1( = green), 2( = blue) の整数値が当てられます。
*****
複合型
複数のデータ型を持った特殊なデータ型も利用できます。これには、構造体、共用体などがあります。構造体は struct 、共用体は union を使って宣言します。なお、これらの内容については 別章「構造体篇」を参照してください。
// 構造体
/* 複数のデータ型のデータを
一つのデータとしてまとめる */
struct Member {
int id ;
char name[64] ;
} ;
// 共用体
/* 同じメモリ領域にあるデータを
別のデータ型として認識させる */
union MojiData {
char moji[4] ;
int numeric ;
} ;
また、クラスを使うとより応用範囲が広がります。変数や定数、関数など、データ型や異なるスコープの様々なデータを一箇所に集めて処理することができます。なお、この内容については別章「クラス篇」を参照してください。
// クラス : 様々なデータや関数をひとまとめにする
class Card {
char name[10] ; // 変数
int figure ; // 変数
void setprop() ; // 関数
} ;
******
typedef
typedef キーワードを使って新しい型を定義することができます。
下記の例では、unsigned char 型の uchar 型を定義しています。
以降、uchar 型として変数や関数を定義することが可能になります。
書式: typedef データ型 型名 ;
typedef unsigned char uchar ; // uchar型の作成
構造体なども同様に新しい型として定義することができます。
struct tagPoint {
int X;
int Y;
} ;
typedef struct tagPoint Point ; // Point型の作成
VC++での話。
//1-1
//文字列を出力する
#include <stdafx.h>
using namespace std;
int main()
{
cout << "Hello, C++\n";
return 0;
}
*****
たとえばこれをデバッグしようとするときに、しておくこと。
#include <stdafx.h>の<stdafx.h>の中に、予め
#include <iostream>を入れておくこと。
ヘッダーファイルをちゃんと編集しとくこと、だな。
何か、林晴比古さんの書いたソース例そのままの写しではちゃんとコンパイルされない。
ヘッダの部分は別に手を加えないと、できないっぽい。
ちょっと、VC++の扱い方がよくわかってないっぽい。
数値定数
8進数 0(ゼロ)を先頭に付ける
011, 0345
16進数 0xまたは0Xを先頭に付ける
0xab,0X2BCD
10進数 上記以外の整数値
6800,8086
指数 eまたはEを付ける
5e2(=500),6E3(=6000)
小数値 小数点を用いる
1.34,25.89
*****
文字定数
' 'で1文字囲むと文字定数になる。
エスケープ文字
\a 警報音(alert)
\t タブコード(tab)
\n 改行(new line)
\ooo 8進数ooo
\xhh 16進数hh
\0 文字コード0
*****
文字列定数
" "で文字列を囲って、定数として表現する。
記号定数
#defineを用いて、数字を意味のある名前で扱うようにするための仕組み。
例)
#define DTSIZE 1240
#define MAXDATA 4802
#define basedt 3.45
const定数
C++では「プログラムの安全性を高める」という目的から、#define記号定数をあまり用いなくなっている。代わりにC++ではconst型変数を「名前付き定数」として用いることが多い。
例)
const int maxdata = 4802
const double basedt = 3.45
表示に関するコントロール
Label
文字の表示
WebBrowsser
htmlファイルをはじめさまざまなファイルを表示できる
数あるコントロールの中でも文字を表示することが専門のコントロールはラベルだけです。表示だけが目的の場合はまずラベルの使用を検討します。
また、ラベルを細くすることによって線を表現したり、文字を表示させないで四角形を表現させることもできます。最もよく使うコントロールの一つです。
WebBrowserコントロールはVB2005以降で使用可能ですが、VB.NET2002, VB.NET2003でもActiveXに参照設定することにより同様の機能を使うことができます。この詳細については今回は説明しません。
*****
入力に関するコントロール
TextBox
文字の入力
RichTextBox
書式付での文字の入力
MaskedTextBox
自動入力制限つきで文字を入力できる
ユーザーがキーボードから自由に入力できるコントロールはテキストボックスとリッチテキストボックスです。ほとんどの場合テキストボックスを使用しますが、ワープロのように部分的に色を変えたり、フォントを変えたりなど豊富な表現力が必要な場合はリッチテキストボックスを使用します。
*****
ユーザーの選択を受け取るコントロール
Button
よくある「ボタン」
CheckBox
複数選択可能
DomainUpDown
複数の候補の中から文字列を選択させる
LinkLabel
インターネットによくある「リンク」のような機能
NumericUpDown
数字を選択させる
RadioButton
複数の中から1つを選択させる場合に使う
*****
一覧形式で表示するためのコントロール
CheckedListBox
チェックボックスつきの一覧表示
ComboBox
ドロップダウン可能な一覧表示。入力も可能
DateGrid
一覧表形式での表示・入力が可能。データベースとの連動が得意
ListBox
単純な文字の一覧表
ListView
4つの表示モードが選べる多機能な一覧表示
PropertyGrid
プロパティウィンドウ。実際のプロパティと連動可能
TreeView
ツリー形式での表示。フォルダツリーの表示などに最適。
*****
画像を表示するためのコントロール
PictureBox
画像を表示する
*****
コントロールをまとめるためのコントロール
FlowLayoutPanel
隅から順にコントロールを自動配置する
GroupBox
RadioButtonをグループ化するのによく使う
Panel
単純なコンテナ。Splitterとともに使われることが多い
SplitContainer
領域サイズ変更機能付きコンテナ
TabControl
タブページ切り替え機能付きコンテナ
TableLayoutPanel
表形式にコントロールを自動配置するコンテナ
ToolBar
ツールバーのためのコンテナ
*****
メニューに関するコントロール
ContextMenu
右クリックしたときのメニューを表示するためのコントロール
MainMenu
画面上部によくある[ファイル]や[編集]、[表示]のようなメニューを表示するためのコントロール
*****
ヘルプに関するコントロール
HelpProvider
F1キーが押されたときに自動的にヘルプを表示してくれる
ToolTip
マウスを移動したときに自動的にツールチップを表示してくれる
*****
日付
DateTimePicker
日付を入力・選択するためのコントロール
MonthCalendar
日付を選択するためのコントロール
*****
量を調節するコントロール
HScrollBar
横方向の量を調節。スクロールによく使用される
ProgressBar
進行状況表示によく使用される。表示専用
TrackBar
一般的な量の調整に使用される。目盛りつき
VScrollBar
縦方向の量を調節。スクロールによく使用される
*****
印刷
PageSetupDialog
PrintDialog
PrintDocument
PrintPreviewControl
PrintPreviewDialog
*****
ColorDialog
色の選択ダイアログを制御する
FolderBrowserDialog
フォルダ選択ダイアログを制御する
FontDialog
フォントの選択ダイアログを制御する
OpenFileDialog
ファイルを開くダイアログを制御する
SaveFileDialog
名前を付けてファイルを保存するダイアログを制御する
*****
その他
ErrorProvider
エラーのある箇所にアイコンとメッセージを表示します
ImageList
TreeViewやListViewと連動して画像を管理する
NotifyIcon
タスクトレイにアイコンを表示し、制御する
SoundPlayer
wavファイルの再生を制御する
Splitter
ユーザーがマウスで表示領域の大きさを変更できるようにする
StatusBar
ステータスバーを制御する
Timer
一定時間ごとにイベントを発生させる
簡単な電卓のプログラムを作ることができるようになった。
論理的な思考というのは、ある意味、具体的な設計する力が試されてるのかなと思った。
設計が具体的であれば、あとはそれに従って構築していくだけ。
プログラム言語で考える力より、ひとつひとつの定義を漏れなく行うことができるかが、俺にとっては注意しないといけないかなと思う。それと、その定義の順番を間違えずに考えることができるか。
そして、ひとつひとつの定義をプログラム言語で打ち込んでいくという感じか。
いまは、知識と体験をしていきながら、VBで作ってみたいソフトを考えていこうと思う。
なるほど、確かに初心者向けかも。
箱が用意されてて、それを配置して、中身を詰め込んでいくという感じか。
オブジェクト名、メソッド名、プロパティ名をそれぞれ区別して覚えて、文法を理解すれば何とかなるかな。
最初のそれぞれのオブジェクトのプロパティは、プロパティウィンドウから変えることができる。
オブジェクト:箱の作り
メソッド:仕掛け・命令
プロパティ:箱の状態
メソッドを使う場合
文法はオブジェクト名.メソッド名()
※()は引数(ひきすう)
例:TextBox1.Clear()
プロパティを使う場合
文法はオブジェクト名.プロパティ名 = 値
例:TextBox.Text = "こんにちわ"
プロパティの定数を使う場合
文法はオブジェクト名.プロパティ名 = 定数
例:TextBox1.TextAlign = HorizontalAlignment.Right
※ちょっと間違ってるかも。例に使ったのは正確には列挙体というらしい。列挙体の場合は入力候補が一覧形式で表示されるのが普通の定数との最大の違いらしいが、まだよくわからん。
""で囲めば文字列を作成
&は文字列をつなぐ
単なる数値は""で囲まなくていい。
+は足す。-は引く。*は掛ける。/は割る。^は累乗。
=は等しいか調べる。
\は「あまり」を無視して割る。
modは「あまり」を返す。
##で囲めば年月日表示。##の中は月/日/年の順に書く。
書式指定を使って、お好みの年月日表示にできる。
他には
・VBでは基本的 Class ~ End Class の間にプログラムを書く。
・アウトライン機能でコードを折りたたんだり開いたりできる。
・#Regionを使って自分でアウトラインを作ることができる。
・記号「 ' 」を使ってプログラム中にコメントを埋め込むことができる。
・作ったプログラムを他のパソコンで動かすことができる。
明日、もっかい復習しよう。