プログラム概論.Link

[wakkii(行有).home]に戻る


目次

URLリンク

参考本

wakkii(行有)解説





URLリンク


pdate.txt

cname.py

cname.txt

Console_swap_Application.txt

ProgramCsharp.txt

ProgramAreaCalc.txt

ConsoleSwapApplication.txt

//20190715
ConsoleSwapApplication.txt<<---このソースC言語に直して分割コンパイルと一括コンパイルしてみた。
Makefile作ったのでgccでコンパイル出来る。
%make clean
%make
%./blackjack
%cd all
%make clean
%make
%./prog

ソースコード

ソースコードはtgzで圧縮した。
//20190715(終わり)

//20191005
ConsoleSwapApplication.txt<<---このソースC言語に直して分割コンパイルと一括コンパイルしてみた。
Makefile作ったのでgccでコンパイル出来る。

//追記部分
分割コンパイル第二弾を作ってみた。
分割コンパイルを複雑化した。東芝テックの子会社で経験した分割コンパイルをやってみた。
動作は同じだけど関数実装をx1y10.cとxy0.cに変えてx1y1.cやxy.cから呼び出してみた。
私も忘れそうなので作ってみる事にした。

発想は東芝テックの子会社の時の分割コンパイルである。
今のでヘッダが最大二段になっているけど最大三段ぐらいヘッダがあった。
二段も三段も似たようなものだが頭で考えるとたらい回しが増える。
//追記部分

%make clean
%make
%./blackjack
%cd all
%make clean
%make
%./prog

ソースコード

ソースコードはtgzで圧縮した。
//20191005(終わり)

//20191006
ConsoleSwapApplication.txt<<---このソースC言語に直して分割コンパイルと一括コンパイルしてみた。
Makefile作ったのでgccでコンパイル出来る。

//追記部分
昨日はxy.cとx1y1.cでヘッダの二段構えだったのをmain.cでヘッダの最大三段構えにしてみた。
午前中に富士市で歩きながら考えた。
私としてはFortranだったらMakefileをどうやって作るぐらいが私の疑問である。
そんな機会は私には今の所存在しない。コンパイラー自体が高すぎるためである。
ともかくここにあるMakefileを参考に作れば作れそうなぐらいである。
//追記部分

%make clean
%make
%./blackjack
%cd all
%make clean
%make
%./prog

ソースコード

ソースコードはtgzで圧縮した。
//20191006(終わり)

とりあえずgdbが使える。↓↓↓
https://sites.google.com/site/skillprogress/debaggu





目次へ

参考本


------------------------------------------------------------------------------------
達人に学ぶ SQL徹底指南書 Kindle版
(達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ Kindle版)
達人に学ぶDB設計 徹底指南書 Kindle版
------------------------------------------------------------------------------------




目次へ

wakkii(行有)解説

2019年5月22日(水) 雑記_take3



<<追記20190522
今日は市役所に寄った。そのため一本遅れてバスに乗った。
今日からプログラムの話をする予定である。
どこまで書けるかわからんけど出来るだけ自分にあるものをはき出そうと思っている。

まずは初期化が今日のテーマである。
何で初期化する必要があるのかというとプログラムを複数起動する時とか
関数を複数起動する時とか初期化しないと同じ計算が出来無くなるからである。
つまりデータが残ったまま計算して誤動作する。
そのため一回初期化して計算出来るようにすると複数回起動してもちゃんと計算する。

int i = 0;

と宣言しておくとその後の起動もちゃんと0になる。
この0が無いと複数回起動後値が変化して同じ計算が出来無くなる。
GOTO文というのがあってプログラムが飛ぶようなコードの場合
どこで初期化しているかわかりづらくなる原因である。
なのでオブジェクト指向のプログラムだと
コンストラクタで初期化を必ずするコーディング規約にする場合がある。

int i = 0;
i = i +1;

これはi=1になった計算である。これをインクリメントと言う。また上から複数起動されてもi=1になる。
それが初期化の重要性である。

int i =0;int j =0;int k =0;
j = ++i;
k = i++;

++iは先にインクリメントして代入。
i++は代入してからあとにインクリメントという意味である。
なのでj=1,k=1となる。
for文の場合++iもi++も同じ意味である。

char chapter_1[11] = "HelloWorld";

文字列の場合C言語だと配列をつかって初期化する。
これは配列の最後がヌル文字になる。
chapter_1[0]=H;
chapter_1[1]=e;
chapter_1[2]=l;
chapter_1[3]=l;
chapter_1[4]=o;
chapter_1[5]=W;
chapter_1[6]=o;
chapter_1[7]=r;
chapter_1[8]=l;
chapter_1[9]=d;
chapter_1[10]=\0;<---ヌル文字
これをポインタを使って文字列を変更出来る。アドレスを変更するのである。
c言語の文字列はヌル文字が最後に来て最後だと判断する。
chaper_1[5]=\0;
とするとHelloと言う文字列になる。
今日はこの辺にしとく。明日もボチボチやりたい。
<<追記20190522end

<<追伸20190522の小言
今晩は少し遅れて帰ったのもあって
日課が進まなかった。明日明後日に吸収出来るように頑張りたい。

今日のプログラムの話から多次元配列の初期化をすると
以下のようになる。

int matrix[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};

int matrix_change[4][4];
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
matrix_change[i][j]=0;
}
}

matrixタイプかmatrix_changeタイプとかになる。
これを計算の前にしておけば
何度呼び込んでも同じ計算をしてくれる。
繰り返し文はまた後日取り上げる。
大事なのは初期化が大事という事である。

明日は何を書き込むか計画立てて作戦をねりたい。
今の所データ型にしようかと思ったりするけど計画を変更するかもしれない。
散々悩んで決めたい。
明日の仕事もボチボチである。
<<追伸20190522の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年5月23日(木) 雑記_take5



<<追記20190523
今日は定刻通り帰れた。何とか夕食までに電子書籍を済ませたい。
それで平日の日課は終える。まだチョコチョコと読書するぐらいである。

今日はデータ型について述べようと思う。
昨日はint型とchar型がもうすでに出ている。
int型は符号尽き整数型でマイナスの整数も表現出来る。
なのでデクリメントも出来る。--iとかi--である。
先にマイナス1加算して代入と代入してからマイナス1加算する。

ここでint型は十進数なのだけど計算器は二進数である。
オンとオフで1と0になる。32bitがintだと
32bitとは1と0のどちらかが32個あるのである。
そしてintの範囲は-2147483648 から +2147483647となる。
二進数範囲だと
‭1000,0000,0000,0000,0000,0000,0000,0001
から
‭0111,1111,1111,1111,1111,1111,1111,1111‬

ここで二の補数とは
ある数とある数の二の補数足して0になるものがある数の二の補数なのである。
なので上の二進数の範囲がちょうど二の補数になっている。
二つの二進数を足すと一番上の桁を無視してすべて0になる。
それが二の補数である。一番上の1がマイナス符号である。

10の補数も求められる。
02147483647の十の補数は97852516353で一番上の9がマイナス符号ちょうど足すと1000,0000,0000になり
0と計上する。

何でこんな事するのかというとマイナスの概念が足し算で表現出来るからである。
ひたすら計算器は足して計算出来る。
人間が引き算をあきらめたら十の補数を求めてひたすら足せば良い。
多分そんな事は人間はやらなく計算器は二の補数はやると言う事である。

話は脱線した。何かこれはこれで情報処理の試験に出てくる。
andとorとnotで計算器は出来ている。
0と1をかけ算と足し算と反転で計算器は計算する。

他にはfloat型とdouble型がある。小数点をあらわす型で
floatが単精度double型が倍精度である。
結局計算器は0と1の有効範囲しか表現出来ないので
有効数字がfloat型とdouble型で違ってくる。
その範囲におさまるように計算しなければいけない。
それ以上だとint型と同じく自分で数値計算するようなプログラムを作る必要が出てくる。

文字列はCString型とかstring型とか他にも色々プログラムで異なっている。
時間に関する型とか他にもたくさんのプログラムの型がある。

今日はこの辺にしとく。なんか色々書く必要が出ているような気がして
今後も前途多難だなあというのが今日の実感である。
ボチボチやりたい。
<<追記20190523end

<<追伸20190523の小言
今晩も電子書籍読めなかった。明日に持ち越しである。

今日の話はデータ型であったが
データ型の値を違うデータ型に変えたい場合が出てくる。

例えば標準入力の時文字で入れた数字をint型にしたいとか
フォームで入力しか数字の文字をfloat型にしたいとか
double型で計算したものをフォームの文字で表示したいとか
標準出力でfloat型を文字で表示したいとか
ファイルにあるデータをfloat型にしたいとか
float型のデータをファイルにしたいとか

様々にデータを違った型にしたくなるケースが出てくる。
それは素直な発想である。
それがプログラムごとに対応が違ってくる。
みんな同じでは無い。なのでそれで立ち止まったら調べるぐらいしかない。
他には初期化した値がデータ型というのもある。

どちらにしてもデータ型には有効範囲がある。
なので全部正確というよりは小数点何桁まで有効とか整数は最小最大ここまでとか制限がある。

明日は十進数と二進数と八進数と十六進数について述べようと思う。
何かここまでする必要も無いけど情報処理の試験には出てくる。
そんな事を計算器がやっているぐらいと人間がそれを理解するにはこんな方法があると言う事だろうと思う。
明日もボチボチやりたい。
<<追伸20190523の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年5月24日(金) 雑記_take3


<<追記20190524
今日は診察日だった。一応報告だけして薬買って帰った。
今日は十進法と二進法と八進法と十六進法がテーマである。
何で二進法を考えるかと言うとオンとオフ
つまり1と0で計算器は成立しているからである。
それで八進法とか十六進法が出てくるのは
2の累乗なので二進法を考えると変換しやすくて表現しやすいからである。


1478.5678という十進法は以下に表現出来る。
1*(10**3)+4*(10**2)+7*(10**1)+8*(10**0).5*(10**-1)+6*(10**-2)+7*(10**-3)+8*(10**-4)

そして二進法と八進法と十六進法というのは自然数を四桁小数部を四桁とすると
二進法--->>?*(2**3)+?*(2**2)+?*(2**1)+?*(2**0).?*(2**-1)+?*(2**-2)+?*(2**-3)+?*(2**-4)
八進法--->>?*(8**3)+?*(8**2)+?*(8**1)+?*(8**0).?*(8**-1)+?*(8**-2)+?*(8**-3)+?*(8**-4)
十六進法->>?*(16**3)+?*(16**2)+?*(16**1)+?*(16**0).?*(16**-1)+?*(16**-2)+?*(16**-3)+?*(16**-4)

ここで八進法の?*(8**1)の項が二進法の?*(2**3)が同じになる。
小数部では?*(8**-1)が?*(2**-3)と同じである。
なので二進法から八進法にするには二進法の小数点から三桁ずつ八進法の桁に変換出来る。
十六進法は同じように八進法の倍だから二進法から考えると
一桁増えて二進法の小数点から四桁ずつ十六進法の桁に変換出来る。
ちなみに十六進法の表記は以下になる。
0123456789ABCDEF

我々は十進法の計算になれている。
二の倍数の桁と八の倍数の桁と十六の倍数の桁を求めるのは

上の桁から小数点まで
十進数から二を順次割ったあまり
十進数から八を順次割ったあまり
十進数から十六を順次割ったあまりである。

小数部は

小数点から末尾まで
十進数から逆に二か八か十六を順次かけた整数部が
それぞれの二進法と八進法と十六進法の小数部の桁になる。

なので二進法を扱うのに人間には見た目にも覚えるのも
八進法か十六進法の方が扱いやすいので
二進法を表現するのに八進法とか十六進法が出てくる。
計算器上は二進法で出来ている。アルファベットも日本語も二進法である。
実際出てくる画面では二進法は出てこないけどデータとしては二進法なのである。
なのでネットワークもデーターベースもデータとしては二進法である。
<<追記20190524end

<<追伸20190524の小言
一応平日の日課は今日吸収した。
思考の整理学 (ちくま文庫)は読み終えた。
何かブログのネタが無くなってプログラムぐらいしかない。
しばらくプログラムネタで頑張ってみる。

今日は十進法と二進法と八進法と十六進法だった。
ところで
プログラムでもandとorとnotが表現出来る。
なので二進法か八進法か十六進法も表現出来る。
なので計算器を作らなくても
プログラムで試せる。

私の昔はコンポの配線を説明書でつなげるぐらいだった。
その他は電車の切符を買うぐらいである。
ワープロがやってきたのが高校生の時である。
大学になってコンピュータを使った。

今の時代スマホがあって便利だけど
私としては色んな機械とつなげるような経験が機械に慣れる原因のように思う。
あんまり大人が何でもやるべきじゃあないように思う。
ある程度の歳になったら色々やらせてみるのも経験のように思う。
それはそれでプログラムも何か配線をつなげるような似た感じが私にある。

土日はさわやかウォーキングがある。
そのためプログラムの話は中断する。
それでもあんまりネタが無い。悩んで考えたい。
ボチボチである。
<<追伸20190524の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年5月27日(月) 雑記_take6



<<追記20190527
今日も三島駅で用を足した。一本遅れてバスに乗った。
先週の反省はもっと少しずつプログラムの話をする事である。
あまりに短い時間でやる事のように思わなかった。
それなりに修正に修正を重ねた。
今週は短い時間に合った話に短くしたい。

標準出力と標準入力についてのべる。
標準出力を標準入力にするのには
ls -a | less
|というパイプを使う。
ls -a はファイル表示であり標準出力し
less は標準入力したものを全画面分割表示である。
プログラムを標準出力と標準入力を同じ行にする事も出来る。

0:?????
1:?????
Please select 0〜1-->>(標準入力)

なのでftpもtelnetもただの標準出力と標準入力で
telnetは
コマンド実行やプログラム実行
ftpは
ファイルのダウンロードとアップロードをするコマンド
ファイルの属性も変えれる。
であるが
両方ともパスワードはファイルにしない方が良い。

標準出力をファイル化する方法もある。
新規作成の場合

ls -a > ls2019.txt
追加作成の場合とか
ls -a >> ls2019.txt

標準入力をファイルで行う方法もある。
catは全表示コマンドである。

cat < ls2019.txt

こんな標準入力の方法もある。

cat << EOF
a
b
c
EOF

(全表示)
a
b
c

この方法がCshellの方法でBashだとまた違う似たやり方である。

ftpサーバーにアクセスしてanonymousでログインしてパスワードはメールアドレスか
無記名のリターンでファイルをアップロードしたりダウンロードしたり出来る。
telnetではホームページサーバーにアクセスしたり
POP3サーバーにアクセスしたりも出来る。

ドメインネームかIPアドレスを明記するとサーバーにアクセス出来る。
www.yahoo.co.jpのサーバーはjpサーバーのcoサーバーのyahooサーバーの
wwwサーバーにアクセスするという意味であり
/のあとはwwwサーバーのディレクトリサービスに準拠する。
これがドメインネームサービスでIPアドレスと対応している。
端末はドメインネームサービスには対応していないけど
IPアドレスには対応している。
だからこっちからサーバーにアクセス出来るという事は
サーバーからもこっちにアクセス出来るという事である。
pingと言うコマンドがあって

ping www.yahoo.co.jp

とやるとつながるか標準出力される。
他にもpingでIPアドレスでも確認出来る。

今日はこの辺にしとく。
明日もボチボチやりたい。
<<追記20190527end

<<追伸20190527の小言
今日も何だか書き込みに時間がかかってしまった。
もっと時間をうまく使いたい。
それが出だしの苦労である。

ftpとtelnetのサーバー指定はIPアドレスかドメイン名である。
引数にしてコマンド起動するか

ftpドメイン名かIPアドレス
telnetドメイン名かIPアドレス

それかftpかtelnetコマンド後の
openコマンドの引数にする。

openドメイン名かIPアドレス

その後標準出力と標準入力になる。
強制終了はCtrl+Cであり
終了は

exitかquitかbye

ftpの
画像ファイルなどのバイナリモードは

bin

ftpの
テキストモードのアスキーモードは

ascii

ftpの
アップロードは

put ファイル名

ftpの
ダウンロードは

get ファイル名

ftpコマンドの属性値変更は
例として実行ファイル化として

chmod u+x ファイル名

明日はどんな話をするか作戦を練りたい。
何事もボチボチやりたい。
明日もよろしく。
<<追伸20190527の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年5月28日(火) 雑記_take4



<<追記20190528
コマンドと引数のあとのエンターキーや標準入力後のエンターキーについてや
述べるのを忘れてた。
telnetでホームページサーバーにアクセスして標準入力方法や
telnetでpop3サーバーのコマンドについて
疑問は満載である。
私としてはそんな機会を増やすのが主眼なので疑問満載で行きたい。

あとはコマンドやプログラムはフォアグラウンドとバッググラウンドで起動する。
昨日の書き込みはフォアグラウンドであり
うしろに
&をつけるとバックグランドになる。

時々プロセスが残ったまま終了しない事もある。
プロセスの表示は

ps -u ユーザー名

で表示されidを指定してプロセスを切る。

kill -9 id名

あとはエラー出力というものがある。
エラーが起こった場合の表示とか
うまくいった場合の表示とかできる。

コマンド && echo "OK!!!"
コマンド || echo "NG!!!"

今日の本題はエディタである。大体emacs系かvi系が大半ではある。
私は大学にいる時emacsで設定ファイルを真っ白にして暗くなった経験がある。
それで設定ファイルにはviを使うように大学出てから覚えるようになった。
大学にいる時は冷静になれずviを覚えられなかった。
落ち着きを取り戻せないとviは覚えられなかった。
東芝テックの子会社でもLinuxの設定ファイルにviを使った。やっぱり失敗しなかった。
そんな手前emacsよりviのようなvimを使った方が良い気がする。

もうコマンドは忘れたけどこんなコマンドを使った。

行連結
アンドゥ
一文字削除
行削除
カーソル右
カーソル左
カーソル上
カーソル下
全画面NEXT
全画面BACK
一行コピー
ペースト
検索
置換
セーブ
強制終了
終了
行ナンバーの表示
Escのコマンドモード
aかiかoの文字入力モード

vimだと画面分割コマンド<---縦か横、画面遷移コマンドとかある。
他にもエディタのように使えるコンソールモードとかある。

あとはftpのftpとか
telnetのtelnetとか
それをやってどうなのかftpのftpで東芝テックの子会社で混乱してしまった。
ホワイトハッカーとかハッカーぐらいしか使わない気もする。
同じファイルを違うサーバーにアップロードぐらいのように思う。
そんな事も出来無くは無い程度である。

あとはファイルのパスやコマンドの補完にTABキーを使うとか
過去の履歴にキーボードの矢印キーで選択するとかある。

今日はこの辺にしとく。
明日もボチボチやりたい。
<<追記20190528end

<<追伸20190528の小言
ちなみにunixのXwindowだと
端末からサーバーのXwindowがtelnet上で実行出来る。
そのとき端末にもXwindowの環境が必要である。

東芝テックの子会社でWindows Serverにも同じようなサービスがあるらしいのを知った。
でも私にはお金がかかり過ぎて使う気にならない。
windowsもunixも同じネットワークサービスエリア内で使わないと乗っ取られて悪用される気もする。
www.yahoo.co.jpというサービスエリア内だとyahoo.co.jpのサービスネットワーク内みたいに
同じネットワーク内で使う。
そしてtelnet自体がそういう同じネットワーク内で使うべきらしい。
それに対してftpぐらいがネットワーク越しに使えるらしい。
なので暗号化してネットワーク越しに使ったら安全ではある。
それは私はやった事が無い。サーバーの設定も必要だし端末の方も設定が必要だからである。

そして端末とサーバーの違いとは何なのか述べる。
基本的にサーバーはつけっぱなしである。
あんまり再起動とかしない。
そのため安定したシステムが要求される。
不安定だとサーバーにならない。
端末はサーバーがあって利用出来るものがある。
ホームページとかメールとかftpサーバーとか他にもたくさんのサービスがある。
それをリアルタイムにサービスしているのがサーバーである。

そんな感じが私の大学にいた頃のプログラムの全体像かなと思う。
他にはFortranとかコアファイルの削除とか
漢字コードと改行コードの変換とか
htmlの勉強とか
そんなこんなでプログラムに関して二年間が過ぎた。

明日はどうしようかまた考えたい。
何事もボチボチやりたい。
<<追伸20190528の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年5月29日(水) 雑記_take3



<<追記20190529
今日も定刻通り帰れた。
もうちょっとunixの話をしようと思う。

ftpのアップデートファイルととダウンロード目的のディレクトリ下で
ftpコマンドを起動する。それもなく起動すると!cd ~/bin とかでPathを指定して移動する。

大体設定ファイルはログインしたときのホームディレクトリにあって
ドット--->.ではじまる。そのためls -aでオプションをつけないと表示しない。
ルートはスーパーユーザーの設定ファイルがある。
一番大事なのはPathである。Pathの変数に独自のディレクトリを追加する。
そうする事でコマンドのパスが通る。
ホームディレクトリにmkdirで./binを作ってPathを通せば
作ったプログラムはbinディレクトリに移せばどこでも使える。

export PATH="$PATH:/home/wakita/bin"

あとはaliasである。引数が覚えられない場合
以下のようにしてコマンド名を変える。

alias tare='tar -zcvf'
alias tard='tar -xzvf'
alias lhae='lha c'
alias lhad='lha x'
alias nkfs='nkf -s -Lw --overwrite'
alias nkfu='nkf -w -Lw --overwrite'
alias nkfe='nkf -e -Lw --overwrite'
alias wnum='wc -m'
alias wlist='wc -l -m'

この設定はbashの.profileで指定している。
CshellとかtcshとかだとPathの指定方法が異なるし設定ファイルも違う。
だけど考え方は同じである。

あとは0からインクルメントしてある数字になったら0になる数字の文字コマンド
日時を文字表示するコマンド
とかあったらファイル名に困らない気がする。
そんなコマンドをbinフォルダに突っ込んでPathを通せば良い。

今日の小言は大学出たあとどんな展開で進んだか明記したい。
明日はオブジェクト指向でもやろうかなと思う。
大学にいた頃もJavaの本を読んでたけどそんなに理解は進まなかった。
本格的にやったのは大学出たあとである。

明日も仕事である。
一歩一歩でボチボチやりたい。
<<追記20190529end

<<追伸20190529の小言
大体三つぐらいに時期をわけた。
東芝テックの子会社入社するまで親戚の叔母のところで
アルバイトをやった。それで色々プログラムは作った。
その時が一番しんどかった気はする。
それぐらい時代の進歩があったという事のように思う。
--------------------------------------------------------------------------------
大学出て25歳から
東芝テック子会社入社まで
オブジェクト指向とポインタと
データベースとCSVファイルとバッチファイルとshellとftpサーバーと情報処理資格

東芝テック子会社六年一ヶ月
windowsとlinuxとandroidとUMLと
テスト技術者試験foundation取得と
デバッグとテスト学ぶ。

みちしる沼津で六年目
関数型言語とデータサイエンスと人工知能と量子コンピューター
Go言語とPythonとR言語
UMLも継続中
-------------------------------------------------------------------------------
あんまり東芝テックの子会社にいても色々やらしてくれるわけで無かった。
それなりに需要のある仕事が求められた気はする。
なので近道は何なのか複雑である。
それでいて中年以降のプログラムの仕事をやれる自信が無かった。
24時間プログラムを考える気力が無い気がした。
何か競争も度が過ぎる気はする。
もっと人間を有効活用した方が良い。それが私の実感だった。
それなのにあんまり仕事をする人が少ない気がした。
もっとプログラムをする人口を増やした方が良いのに教育は遅れている気はする。
あまりに排除の論理が幅をきかせている気はする。
大学に期待出来るのか私の大学だとあまりに昔過ぎて
そんな教育で良いのかというのが実感である。
そんな進歩が大学にあるのか私には知り得ない情報である。
そんなこんなで私だけでも抵抗してみようというのが私の書き込みである。
本当は本でも作って入念に査読してたくさんの人の力を得る必要があるように思うが
いつまでも私は一人で戦う事になってしまう。
それが私の書き込みである。少々の間違いも気にせず一歩一歩前進したい。

あんまり全部やる気はしない。進行中というのもあるし
でも出来るだけプログラムをやってみたいと思えるようにはしたい。
詳細でも無くても考え方ぐらいは書き込んで良い気はする。

それが私の生きている証拠である。
明日もよろしく。
<<追伸20190529の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年5月30日(木) 雑記_take8



<<追記20190530
昨日はオブジェクト指向の話を考えたがまだ早いと思った。
しばらくプログラムの事を書かなければいけないと思った。
とりあえず今日は関数と繰り返し文とif文と再起関数にチャレンジしようと思う。

絶対値を求める関数を書くとりあえずintで読み取ってintで返す関数を書く

int abs_func(int value) {
if(value <0) {
return value*-1;
} else {
return value;
}
}

関数の使い方はこうである。
int i = -55;
i = abs_func(i);
とか
int i = abs_func(-55);

基本的に関数は宣言出来る変数は何でも指定して返せる。
関数の頭にある宣言名でreturnで返せば関数は終了する。
valueがマイナスならvalueに-1かけて戻り値にする。
そうでなければそのままvalueを戻り値にする。


階乗の関数を書いてみると絶対値の関数も使って

int factorial_func(int value, int UpperLimit) {
value = abs_func(value);//絶対値で階乗計算
int answer=1;
while(value > 0) {
if (answer > (UpperLimit/value)) {
return -1;//オーバーフローでエラー
}
answer=answer*vlaue;
value--;
}
return answer;
}

これをfor文で書くと

int factorial_func(int value, int UpperLimit) {
value = abs_func(value);//絶対値で階乗計算
int answer=1;
for(int i = value;i >0;i--)
if (answer > (UpperLimit/i)) {
return -1;//オーバーフローでエラー
}
answer=answer*i;
}
return answer;
}

使い方は
int a = factorial_func(10,2147483647);
繰り返し文で
1*10*9*8*7*6*5*4*3*2*1のような計算をする。

今日はこの辺にしとく
今日の小言は再帰関数にする。
明日はまた作戦を練りたい。
明日もよろしく。
<<追記20190530end

<<追伸20190530の小言
階乗の計算に再帰関数を使うとこのようになる。
judgmentにvalueが掛け合わされて関数の最後にjudgmentを戻り値にして完成である。
else ifでオーバーフローじゃあ無ければvalueが1になったところでjudgmentを戻り値にしている。
なので戻り値は最後の一回だけである。

int abs_func(int value) {
if(value <0) {
return value*-1;
} else {
return value;
}
}

int factorial_func(int value,int judgment, int UpperLimit) {
value = abs_func(value);//絶対値で階乗計算
if (judgment > (UpperLimit/value)) {
return -1;//オーバーフローでエラー
} else if (value ==1) {
return judgment;
}
judgment = judgment*value;
return factorial_func(--value,judgment,UpperLimit);
}

使い方は
int a = factorial_func(10,1,2147483647);
再帰関数により
1*10*9*8*7*6*5*4*3*2のような計算をする。

土曜日はcase文に挑戦したい。
明日は階乗を使って組み合わせと順列を作りたい。
日曜日はウォーキングである。
また今日も時間のオーバーである。
明日もよろしく。
<<追伸20190530の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年5月31日(金) ツイッターより+8 雑記_take2



<<追記20190531
夕食の買物して帰った。そのため一本遅れてバスに乗った。
何となく最近は時間に追われている。
無理に無理を重ねている気はする。それでも通らないと気が済まない。
あまりに無駄な競争が多過ぎる。それが私のオープンマインドである。

組み合わせの数と順列の数のプログラムを載せる。
nPrだとn個からr個選んで順列に並べる場合の数と
nCrだとn個からr個の組み合わせの場合の数の関数である。
r個の順列がr!だからnCr=nPr/r!が成立する。
私は順列は小学校で出てくるけど組み合わせの場合の数は高校だった。

int abs_func(int value) {
if(value <0) {
return value*-1;
} else {
return value;
}
}

int factorial_func(int value,int judgment, int UpperLimit) {
value = abs_func(value);//絶対値で階乗計算
if (judgment > (UpperLimit/value)) {
return -1;//オーバーフローでエラー
} else if (value ==1) {
return judgment;
}
judgment = judgment*value;
return factorial_func(--value,judgment,UpperLimit);
}


int nPr_func(int n, int r) {
n = abs_func(n);
r = abs_func(r);
int n = factorial_func(n,1,2147483647);
int n_r = factorial_func(n-r,1,2147483647);
if ( n < 0 || n_r < 0 ) {
return -1
}
return n/n_r;
}

int nCr_func(int n, int r) {
n = abs_func(n);
r = abs_func(r);
int nPr = nPr_func(n,r);
int r = factorial_func(r,1,2147483647);
if ( nPr < 0 || r < 0 ) {
return -1
}
return nPr/r;
}

明日の朝はゆっくり起きてcase文のコードを使って
標準入力と標準出力の簡単なプログラムでも作ってみようと思っている。
何の言語を使おうか迷っている。明日までには決断したい。
何事もボチボチである。
<<追記20190531end

<<追伸20190531の小言
仕事の時間は有効なのか
半信半疑
もっと大事な事があるように思う。
それが仕事に出ている罪悪は
ただ生きていくのに必死で
結果なんてどうでも良いのである。
そんな仕事をしているように見える。
大事な事が欠落したまま
仕事しているから結果が出ない。
それが日本の最悪な所である。
仕事の大事が失われている。
それが私一人で突っ走る原因である。
もうちょっと勉強するぐらいの余裕も無い。
落ち着いて考える暇が無い。
冷静にものを見る機会が無い。
ひたすら消化試合である。
あしたは土曜日で
case文のコードを作って動かしてみたい。
明日もよろしく。
<<追伸20190531の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年6月1日(土) 雑記_take8



<<追記20190601
結局PythonにはSwitch文が無くてcase文も書けなかった。
IF文と同じように使えるから無いらしい。
それでもPythonにしたのは今までPythonのプログラムを書いた事が無かったためである。

ソースは以下にあるので参考にしてみて下さい。
ソースコード

以下はソースの中身です。
#!/bin/python

from datetime import datetime
import calendar
from dateutil.relativedelta import relativedelta



def init_print():
print('0:日付と現在時間')
print('1:今月のカレンダー')
print('2:先月のカレンダー')
print('3:来月のカレンダー')
print('4:終了')
print('please input 0〜4.--->',end='')

calendar=calendar.TextCalendar()

while True:
try:
init_print()
select=input()
if select == '0':
print()
print('0を入力しました。')
print()
now = datetime.now()
print(now.strftime('%Y-%m-%d %H:%m:%S'))
print()
continue
if select == '1':
print()
print('1を入力しました。')
print()
now2=datetime.now()
print(calendar.formatmonth(now2.year,now2.month))
print()
continue
if select == '2':
print()
print('2を入力しました。')
print()
date2=datetime.now() + relativedelta(months=-1)
print(calendar.formatmonth(date2.year,date2.month))
print()
continue
if select == '3':
print()
print('3を入力しました。')
print()
date3=datetime.now() + relativedelta(months=1)
print(calendar.formatmonth(date3.year,date3.month))
print()
continue
if select == '4':
print()
print('終了を選択しました。終了')
print()
break
else:
print()
print('入力判定不能再び入力して下さい。')
print()
continue
except Exception as e:
print(e)
break


例外処理を追加しました。あとは標準入力と標準出力をやってみて下さい。
ファイルにするも良しファイルから入力も良し
設定ファイルでaliasするも良し
ものは試しですがそんな事出来るんだぐらいです。
※※
一応漢字コードの説明をします。ShiftJisコード、Jisコード、EUCコード、UTF8コード
があります。英語はそんなの気にしなくても認識するのですが
日本語はコードを選んで変換する必要があります。
改行コードもMacタイプWindowsタイプUnixタイプの三種類があります。
\r、\n、\r\nみたいな改行コードがあります。
それをaliasの時にnkfコマンドでnkfsとかnkfuとかnkfeとかでwindows改行に
オーバーライトするコマンド名を作ったりしてました。
なのでその辺に気をつけてコードを変換してやって下さい。
一応ファイルの方はShiftJisのWindows改行コードになっていると思います。
※※※
あとは属性も気にする必要があります。
chmod u+x pdate.txt
とかして
which python
であとはコマンドパスが表示するので
#!/bin/pythonのパスを変更すると
コマンドとして使えます。
これはshellもperlもrubyも同じです。


continue文はまたwhile文の頭からと言う意味です。
break文はWhile文を抜けると言う意味でこのプログラムだと行末で終了です。
このwhile文の中のif文使ってるのをSwitch文〜case文が他のプログラムで書けます。
一応このコードはpython3で動作を確認しました。
明日はウォーキングです。
それでも今日は疲れました。
またボチボチやります。明日もよろしく。
<<追記20190601end

<<追伸20190601の小言
とりあえず来週月曜からオブジェクト指向とポインタかなと思う。
ポインタはオブジェクト指向のあとの方が良さそうである。
Javaの参照が配列とクラスだからである。
関数の引数で配列とクラスを呼び込めば
関数の中で書き込むと
それ自身の配列とクラスも書きかわってしまう。
オブジェクト指向が何なのかわからずクラスがわからないためである。
ftpのftpもPOSがftpサーバーだからPOSごとにftpのftpが出来る。
telnetサーバーだからtelnetのtelnet出来る。
そんなように色々オブジェクト指向も難問ではある。

その他に例外処理もあった。
春先のC#のコードに例外処理書いたけどC++のエラーまで例外処理が効かなかった。
なので何でもエラーをキャッチするわけでないらしい。
あんまりアテにならない気もした。
C#では

try
{
//実行文

}
catch (IOException e)//エラー内容を限定して複数指定可能
{
//エラーの時の処理

}
catch (Exception e)//エラー内容を限定して複数指定可能
{
//エラーの時の処理

}
finally
{
//例外処理の有無にかかわらず最後の最終処理

}

のように書く。明日は気分を変えてウォーキングである。
今日も疲れた。ゆっくり休みたい。
明日もよろしく。
<<追伸20190601の小言end

Blogger

Facebook

スマホのブログ

三島SNSのブログ

2019年6月2日(日) 草薙駅からJRさわやかウォーキング



<<追記20190602
今日は草薙駅から狐ヶ崎駅までだった。途中日本平まで登山だった。
山道を登って日本平の展望台まで歩いた。
幸い富士山が顔を出していた。
何か頭も体も疲れた。大場駅で少し休憩出来た。

それで今日の宿題はファイル名を作る文字列コマンドである。

ソースはこちらにあります。
cname.py

cname.txt

#!/bin/python

from datetime import datetime


count = "0"
with open("/bin/cname.txt","r") as f:
count = f.read()

wdate = datetime.now()
wnow = wdate.strftime('%Y-%m-%d')
wnow = wnow + "__No_" + count
print(wnow,end='')
cname = int(count)

if cname > 10000:
cname = 0

cname = cname + 1

with open("/bin/cname.txt","w") as f:
f.write(str(cname))

※行頭のpythonのパスとopen関数のcname.txtのパスは変更すべきである。
適当な場所見つけてパスを通して下さい。

現在のディレクトリはpwdコマンドで表示。
ディレクトリ移動はcdコマンドです。
相対パスと絶対パスがあります。
ある程度打ったらTABキーで補完してくれます。
履歴も矢印キーでコマンドの履歴が表示します。

mvコマンドでファイルのリネームと
ファイルのディレクトリ移動。
cpコマンドでファイルのコピーが出来ます。

明日からまたプログラムの話作るのはそれなりにハードである。
あまり時間が無いというのが本音である。
それでも何となく避けて通れない気はする。
今朝の日経新聞は人工知能がトップ記事だった。
そんなに人工知能が大事なのか半信半疑だけど
私が閉ざされた世界にいるからかもしれない。

ともかく明日もボチボチやりたい。
<<追記20190602end

<<追伸20190602のウォーキング
ウォーキングのあとの帰宅後に
プログラムを作った。
昨日の知識で簡単に作れるなと思ったので作った。

cname.pyというコマンドを今日作った。
どんなコマンドかというと

2019-06-02__No_1

というような文字列を作るコマンドである。

cat << EOF > $(cname.py)$(echo "testfile.txt")
0
1
2
3
4
EOF

という風にファイルが重複しないファイル名を作れる。

まあとりあえず今日の夜はゆっくりしたい。
録画でも見てゴロゴロしてようと思う。
明日もよろしく。
<<追伸20190602のウォーキングend

三島SNS

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年6月3日(月) 雑記_take2



<<追記20190603
今まで扱ってきた関数は内部で閉じてた。
それがグローバル変数が登場する。
voidは何にも返さない宣言名である。
なのでreturn値も指定しないで終了する。

int x = 5;//グローバル変数1
int y = 10;//グローバル変数2

void swap() {
int x_save = 0;
x_save = x;
x = y;
y = x_save;
return;
}

こんな事がC言語で出来る。
それがclassの領域でグローバルクラス変数を用いるのがオブジェクトなのである。
なのでグローバルクラス変数を含むのがオブジェクト指向である。
それにコンストラクタをつけるとこんな感じになる。
コンストラクタとはnewした時に実行される関数である。
なので関数名はクラス名と同じである。
this.xとは自分自身のクラスのxという意味である。
this.yも同じである。
それで上のC言語をC#のクラスで表現するとこうなる。

class sw_class
{
private int x;//グローバルクラス変数1
private int y;//グローバルクラス変数2

public sw_class(int x1, int y1)
{
this.x = x1;
this.y = y1;
}

public void swap()
{
int x_save = 0;
x_save = this.x;
this.x = this.y;
this.y = x_save;
return;
}

public void sw_show()
{
Console.WriteLine("(x={0},y={1})を表示します。", x, y);
return;
}
}

C言語はC++で表現した。
ソースは以下からどうぞ
Console_swap_Application.txt

C#のソースは以下からどうぞ
ProgramCsharp.txt

何かC#のコンソールはdllが生成される。

dotnet プログジェクト名.dll

みたいにしないとコマンド表示されなかった。

明日もボチボチやりたい。
よろしく。
<<追記20190603end

<<追伸20190603の小言
オブジェクト指向はCSVファイルやデータベースに親和性がある。
列はいろいろな変数の型で表現され
行は一行一データである。
その列はクラスでグローバルクラス変数の型で代入され
オブジェクトの数が行に置き換わる。
オブジェクトの数は配列で表現しても良いのだが
普通はコレクションを使う。場合によってはソートも出来る。
でも普通ソートはデーターベースでやった方が早い。
なのでCSVファイルを扱うときはデータベースに入力してソートした方がいい。

そしてC++言語にはコンストラクタの他にデストラクタがある。
クラスがdeleteされた時に最後に起動する関数である。
デストラクタは~クラス名()で書かれ引数も戻り値もない。
コンストラクタはクラス名()で書かれ引数はつけれるけど戻り値はない。

publicとprivateについて説明するの忘れてた。
これはアクセス制限である。
ほかにも別のアクセス制限がある。
明日それを説明したい。
一応今日のところはこのアクセス制限で
プログラムは動いた。
関数とグローバルクラス変数にアクセス制限がつく。
今のところ保留である。

あとはオブジェクト指向のコードを読む機会が無い人は
デザインパターンのコードを読むと良い。
それでもわからなければそのコードをUMLにして絵にしてみて下さい。
シーケンス図かアクティビティ図にしてみて下さい。

明日は継承をやってみようと思う。
どんなコードにするかまた作戦会議である。
明日もよろしく。
<<追伸20190603の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年6月4日(火) 雑記



<<追記20190604
今日C#で作ったら
overrideしたものをoverride
出来なかった。
なので多重継承は想定してないように思った。
とりあえず基本クラスがAreaクラスで
サブクラスがSquareとTriangleとTrapezoidである。
サブクラスの面積を計算する。

ソースはこちらです。
ProgramAreaCalc.txt

基本クラスでprotectedというアクセス制限をかけている。
自クラスとサブクラスでアクセス出来る。
privateは自クラスのみであり
publicはどこでもアクセス出来る。

基本クラスの変数にサブクラスのnewをしている。
それでサブクラスのオーバーライド関数が使える。

基本クラスのアクセスにbaseを使っている。
他のプログラムだとsuperという場合もある。
ちなみに自クラスはthisである。

やっぱり多重継承はGOTO文と
同じものなのかな?
そんな事してるうちに
たらいまわして初期化を忘れる。
そんなこんなでわかりやすいコードの方が良い。

今日も疲れた。
明日は無理の無いようにしたい。
よろしく。
<<追記20190604end

<<追伸20190604の小言end
折角なのでC#のコレクションを使って
今日のプログラムを修正すると
こうなる。

static void Main(string[] args)
{
/*
Area a1 = new Square(5.0F, 10.0F);
a1.areaShow();
Area a2 = new Triangle(5.0F, 10.0F);
a2.areaShow();
Area a3 = new Trapezoid(5.0F,5.0F,10.0F);
a3.areaShow();
*/
List<Area> a = new List<Area>();
a.Add(new Square(5.0F, 10.0F));
a.Add(new Triangle(5.0F, 10.0F));
a.Add(new Trapezoid(5.0F, 5.0F, 10.0F));

foreach (Area s in a)
{
s.areaShow();
}

return;
}

今日のプログラムのソースは

ProgramAreaCalc.txt

にあります。
これがデーターベースやCSVのデータにも
読み込みに使えます。
明日はポインタを説明する気ですが段々しんどくなってます。
ソースコード作っているからというのもある。
これでも作戦立ててるけど
峠を過ぎるまで辛抱のように思う。
明日もよろしく。
<<追伸20190604の小言end


Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年6月5日(水) 雑記_take3



<<追記20190605
今日はSwap関数のポインタ渡しと参照渡しをやってみた。
文字列も配列で初期化してポインタに渡してみた。
Swap関数の中で変更した引数がSwap関数の外部にも影響している。
それがJavaの配列とクラスも引数で参照渡しになるとそんな影響が起こる。
関数の中で書き換えると
外部の配列やクラスにも影響する。

最後はポインタの確認をして表示してみた。

ソースは以下のURLにある。
ConsoleSwapApplication.txt

今日は昨日より落ち着いて過ごせた。
大体予想してた通りではある。

今日の小話はデーターベースにしようと思う。

明日はshellとバッチファイルの話をしようと思う。
明日はコードより話をするぐらいにしようと思う。
多分遅れてバスに乗る計画なのであんまり明日は時間が無い。
明日のこの辺で大体東芝テックの子会社入社前ぐらいかなと思う。

説明するとしたら
あとはWindowsとかAndroidとかぐらいであり
テストとかデバッグとかUMLとかぐらい。

退社後は関数型言語とかディープラーニングぐらいかなと思う。

あんまりここまでやる気ない。
あんまりいっぺんにやる事無い。
気が向いたらで良い気がする。

スキル向上
上のURLでも説明している。
それでもこれまでの説明と比べても
一長一短かなと思う。

明日からもっとどうするか考えたい。
明日もよろしく。
<<追記20190605end

<<追伸20190605の小言
今日はデータベースの話をする。

列が右に向かって横方向でデータ名とデータの型を指定する。
行が下に向かって縦方向で一行一データ。

主キーで一データが決まる
一つまたは複数の列のキーであり
それと他のテーブルの列を参照する外部キーと
列名と列の型をcreate tableで定義する。

データの操作は
SQL文で操作する。

ER図でSELECT文が作れる。
データベースを作る時も参考になる。
冗長なデータを避けるため
第一正規形から第二正規形へそして第三正規形へtableを変える。

詳しい話は本でも読んでください。
一応本を紹介します。
------------------------------------------------------------------------------------
達人に学ぶ SQL徹底指南書 Kindle版
(達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ Kindle版)
達人に学ぶDB設計 徹底指南書 Kindle版
------------------------------------------------------------------------------------
明日はバッチファイルとshellに
ついて述べたいと思う。
<<追伸20190605の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし

2019年6月6日(木) 雑記_take2



<<追記20190606
バッチファイルもshellスクリプトも標準入力と標準出力と引数と
エラー出力が使える。コマンド入力出来るものは
バッチファイルもshellスクリプトも同じように使える。
条件分岐や繰り返し文も使える。

mfcのメッセージ駆動とc#とvisual basicのフォームのイベント駆動で
関数を指定出来る。
なので動作は関数ありきである。

AndroidはGoogleのサンプルを使ってコードを読めば使えるようになる。
それでも何のプログラムを作ったら良いかそれはそれで問題である。
結局発想はパソコンと同じという事だろうと思う。

一応今日で完成のため今日の小言は数学とhtmlと並列処理と
ディープラーニングと関数型言語をむりやり押し込めた。
私がこのホームページに書き込んで
良かったのはPythonのソースを書いた事だった。

以外と使えた。
結構苦労するかと思った。
それはそれでやってみないとわからなかった。

明日からまた通常モードである。二週間ぐらい日課が進まなかった。
未だに幻聴は叫び続けている。私には意味不明である。
どうしてそれがまともなのか私にはチンプンカンプンである。
もっと中身のある女いないのか文句タラタラである。やる事は他にたくさんある。
私だけの問題に思えない。努力が垣間見れない。無駄に無駄である。
それでお高くとまっている。それをどうやって修正するのかわからない。
誰も偉そうな奴いない。それが女なんだぐらいしか思いつかない。
ただの役立たずである。苦労のわかる奴がいない。
ただのあまのじゃくである。私にそれをどうしろというのか
私にはわからない。どうしようもないねえぐらいしかない。
会話が成立しない。ここまで来ると末期的である。
私には終末思想としか思えない。女版教祖様である。
それを信じるわけにいかない。それが私のスタンスである。

明日もボチボチやりたい。
よろしく。
<<追記20190606end

<<追伸20190606の小言
プログラムで
何をやるにも数学は必要である。
そういう意味で基礎学力は問われる。
基本的にプログラムも上から下に読むので
数学に近い。それはそれで勉強になる。
数学を避けた割に数学に近くなるのは
私の場合プログラムのおかげだと思う。

残る課題はhtml
あんまりやりたい課題じゃあない。
html5に対応していないから
気になると言えば気になる。
画像のやりとりとテキスト処理がメインである。

Go言語のgo func 関数の名前()の並行処理とチャネルが気になる。
並行関数でreturnするとプロセスがきれるらしい。
チャネルは並行処理のやりとりに使える。
並行関数で無限ループ使ってsleep関数でチャネルを受信して
色んな処理を条件下して
最後はリターンでプロセスがきれる。

ディープラーニングにも
偏微分が出てくる。
偏微分以外の方法もある。

関数型言語はmapのような配列みたいな処理が
便利のように思う。
例えば全要素に何かの処理をするような事が便利である。
まあ行列計算すれば良いだけかもしれない。
あとは再帰関数はデバッグが難しいように思った。
関数型言語には再帰関数が頻繁に出てくる。

明日はまたいつものペースでやりたい。
明日もよろしく。
<<追伸20190606の小言end

Blogger

Facebook

スマホのブログ<---つけたし

三島SNSのブログ<---つけたし


目次へ

[wakkii.home(行有)]に戻る