ブログトップ

電子工作やってみたよ

プログラムコンテストとは関係ないけど、kusakaさんが送ってきたプログラムです。

以下 kusaka さんのプログラム  3時休みの10分間で作ってしまったそうです。
若いですね、うらやましいなー

***********************

1~1000までの素数を見つけて合計するっていうのはどうですか?簡単かな

三時休みでできちゃった。難しい問題ないかなー

全プログラムリスト 

number of prime = 169
sum of prime = 76128
#include <stdio.h>

void main()
{
    int i;
    int a;
    int num_ans = 0;
    int sum_ans = 0;
    int prime = 0;
    for(i = 1; i <= 1000; i++){
        prime = 1;
        for(a = 2; a < i; a++){
            if(i % a == 0)
                prime = 0;
        }
        if(prime){
            printf("%d\r\n", i);
            num_ans++;
            sum_ans += i;
        }
    }
    printf("number of prime = %d\r\n", num_ans);
    printf("sum of prime = %d\r\n", sum_ans);
}


これで終わりです。

kusakaさんのC言語 シンプルですね。


c0335218_13073923.jpg

以下わたしが HP32S で組んだものです。
私の答えは 
素数の数   168
素数の加算値 76127

kusakaさんの値より、なぜかどちらも 1つ小さいです。
演算時間は丁度30分かかりました。
えーと ソフトを作った時間は、ないしょ
フローチャートなど事前に作らないとソフトを組むことできないですね。

全プログラムリスト (HP32S を使用)

変数名
A:   調査する数      初期値1として+2づつ増やし 奇数のみ調査する。
B: 調査する数を割る数  初期値1として+2づつ増やす、奇数でのみ調査する。
C: 素数を加算した合計  最初の素数2は初期値として置いておく
D: 素数の累積の数    1を最初とする。(素数2を置いてあるから)



A01 LBL A   *******

A02 3
A03 STO A   調査する数 素数2は既知とし3から調べる
A04 STO B   調査する数を割る数
A05 2
A06 STO C   素数を加算した合計 最初の2のみ手で入れておく
A07 1
A08 STO D   素数

B01 LBL B   *******
B02 RCL A   調査する数
B03 RCL B   調査する数を割る数
B04 X=Y
B05 GTO F   値が一致していれば素数なので G へ行く

C01 LBL C   *******
C02 ÷     調査する数を順次割って割り切れるかチェックする
C03 FP   (少数以下を取り出す)
C04 X=0
C05 GTO G   少数以下ゼロ、(り切れた)なら素数ではないので次の数値を調べに行く
C06 2
C07 STO +B  割る数を2増やしてチェックし直す 
C08 GTO B

F01 LBL F   ********
F02 RCL A   素数だったので今の値を素数の積算値の足す
F03 STO +C
F04 1
F05 STO +D  素数だったのでカウンターに1を足す 

G01 LBL G   *******
G02 3
G03 STO B   割る数を出発点の3に戻す
G04 2
G05 STO +A  調べる数を2増やす。
G06 1000   上限値の1000
G07 RCL A   調べる数を読み込む
G08 X>Y    調べる数が上限値を越えたか調べる
G09 GTO H   上限値を越えたのでHへ行く
G10 GTO B   まだ上限値でないのでさらにチェックを続ける

H01 LBL H   *******
H02 RCL C   素数積算値を表示する
H03 STOP   停止して終わり

これで終わりです。



C言語だとフローチャートなどなくてもリストだけで全体の動きが見られますね。
これ 図形としてプログラムの形も表現されているからでしょうか。

HP電卓の方は、コメントがあったとしても、一つづつの動作を追っていかなければ理解が難しいですね。
ましてや コメントのないリストは知恵の輪を解くようなものですか。 
これが 結構楽しいのですけけれどね。


追記
プログラムを作っていて頭が混乱してきたのでフローチャートを作りました。
これ 最初にやるべきでしたね。

c0335218_20210497.jpg

素数かいなか調査するときの数値を追って考えました。
この絵を書いたことにより頭がスッキリしました。
やはり絵で表現すると脳が理解しやすいのでしょうか。


c0335218_20213508.jpg

上の続きです。


c0335218_20221011.jpg


by telmic-gunma | 2017-10-23 14:56 | HP電卓 | Trackback | Comments(4)

HP電卓の演算速度 HP35S, HP41CV を計測しました。
HP35SはHP15C_LEよりも十倍以上遅いのは不思議です。
測定プログラムは前回使用し他の機種に使ったものと同じです。
そもそもこういう仕様なのか、私の計測ミスなのか、もし原因判ったら教えてください。

HP41CVのプログラムはカウント終了比較のところが Xキ0 から X=0でやるために
ループのステップ数が6から7に増えています。

HP41CVのテストプログラムです。

LBL ”AA"
200
STO 00
LBL "BB"
1
STO -00
RCL 00
X=0?
R/S
GTO "BB"


HP35Sはしまっておくだけで電池がなくなるので、消費電流計ろうとしたのですが、まだ上手くいってません。
c0335218_19010913.jpg














c0335218_18081020.jpg
































by telmic-gunma | 2016-11-24 19:00 | 基板製作 | Trackback | Comments(0)

人間コンパイラでHP電卓

前回思いついた人間コンパイラ手順書を作ってみました。
最初はBASICで考えて、あとは機械的に置き換えていくだけです。
構造化のループ処理のみですが、これさえあれば、楽になるのでないですか。
使い込んでいくうちに良くなると思います。
最初 BASICで書いてあります。
次に 同等のものを HP電卓の逆ポーランド法でかきました。

*************************************
if  ~ then ~ endif

if X=0 then ----------- Xがゼロならば以下を実行
A = 1 -------------- Xがゼロの時実行する
endif ------------------ エンド


X キ 0 ------------Xをチェック
GTO 5 ------------Xがゼロならば以下を実行
1 ------------------ループ内処理
STO 1 -------------ループ内処理
LBL 5 -------------エンド

*************************************
For ~ Next

for i = 1 to 3
  print i
next



3 ---------ループ回数の3をセット
STO 0 ----同上
LBL 5 ------ループ処理ルーチンの先頭
RCL 0------ループ内処理
PAUSE------ループ内処理
DSZ---------カウンターを1減算してゼロでないならLBL 5へ戻る
GTO 5 -----処理のエンド

*************************************
while ~ wend

a=0 ---------------初期値をゼロとする
while( a<7) -------aが7以下の時ループを回す
a=a+1 ------------aを1つインクリメントする
print a -------------aをプリントする
wend --------------ループの終わり



STO 3
LBL 1 --------------ループの先頭
1
STO +3 ------------カウンターを1つインクリメント
----------------------ここにループ内処理を置く
RCL 3 --------------カウンターを表示する
PAUSE --------------カウンターを表示する
7 --------------------比較する数値をセット
X > Y ---------------比較する
GTO 1 --------------未到達なら LBL 1 へ行く





c0335218_06050533.jpg

















by telmic-gunma | 2016-10-30 17:46 | HP電卓 | Trackback | Comments(2)

HP電卓の逆ポーランド法はプログラム言語ではないと思います。
HP電卓は、そろばんや計算尺と同じで、あくまでも主体は人間にあり人間の技量や技術、習熟度が計算スピードや精度を決めるのでないかと思います。
今から50年以上昔は、大型コンピュータがようやくできたけれど電卓やパソコンなど存在せず、一般の人達はみなそろばんを使用していました。町には、そろばん塾があり商業関係に進む人たちはみなそこに通ってそろばんを習っていました。
私の同級生のなかでも何人も通っていましたね。
残念ながら私は習っていませんでした。
そろばんで計算する場合、操作は、考えて行うものでなく、スポーツのように訓練を重ねて、無意識で指を動かしていると思います。
HP電卓もまさに同じだとおもいます。
だから数式から逆ポーランド法のキー操作はすぐできても、逆ポーランド法のキーリストから元の数式が復元できなくても何ら不都合は無いと考えてよいと思います。(これを言いたかったのです)
関数電卓のいいところは、電卓以前の計算では必ず必要だった対数表や三角関数表を調べなくても一瞬で値が出てくることでしょうか。

これ 今ちょっと思いついたことです。 後になれば、また違う考えになっているかもしれません。



c0335218_20563901.jpg







by telmic-gunma | 2016-09-26 21:08 | HP電卓 | Trackback | Comments(0)

カッコのない国

HP電卓の元となっている逆ポーランド法(RPN電卓)について子供向けに楽しく説明した絵本です。

終わりのほうに「大人のためのあとがき」がありますので、一部要約してみます。

******************************************
「コンピュータが理解しやすい言語は、人間には理解しにくく、間違えやすいのです。
そこで、まず人間が理解しやすい言語で手順を書き、それをコンピュータの理解できる言語に直すという方式が考え出されました。この翻訳プログラムがコンパイラです。
この本で取り上げた問題は、算術式や文を表す記法の間の翻訳の問題です。
演算子や動詞を最初に持ってくる記法を前置記法。
最後にもってくる記法を後置記法と呼びます。
これに対し、ふつうわたしたちが式を表すのに使っている記法は、数と数の間に演算子を持ってくるため、中置記法と呼びます。
地球上のいろいろな言語について調査した言語学者によると、動詞、主語、目的語の並べ方で存在するパターンは、次の3通りのみだったそうです。

動詞  主語  目的語    (前置記法)
主語  動詞  目的語    (中置記法)
主語  目的語 動詞     (後置記法)

これら 3つのパターンは、なんとそれぞれ前置記法、中置記法、後置記法となっています。
算術式や論理式の前置記法、と後置記法は20世紀になって、ポーランドの論理学者ルカーシェビッツからだんだんと使われるようにになりました。これに対し、日本の人々は、ずいぶん昔から後置記法的言語である日本語を話ししていたことになります。(例 2 と 3 を足す )

逆ポーランド法である後置記法 => 「何にたいしてどうする」が厳密であり解りやすい。

通常の表現方法である中置記法 => 計算記号の優先順位規則、
                  左から右への計算順番規則、
                  カッコによる優先順位の変更規則
                  上記規則があるため、とても複雑。
*******************************************
以上です。
われわれ HP電卓病に感染した人間は、いまではコンピュータが自動でやってくれるコンパイルという仕事を「何としても自分でやるぞ」と頑張る ガンコじじいかもしれませんね。
この本の本文のなかに中置記法から後置記法へ自動的に変換する方法を機関車の操車場を使った上手な説明があるのでうまい絵が書けたらあとで説明してみます。

c0335218_10522854.jpg






















「はじめて出会うコンピュータ科学」シリーズとして以下の8冊があります。
いまは絶版になりましたが、中古では購入できます。
1、 1と0の世界      ハードウエア編
2、 あいまいな文      自然言語編
3、 こわれている電卓    情報構造編
4、 カッコのない国     コンパイラ編
5、 どんどん出てくる絵   図形処理編
6、 山の背くらべ      アルゴリズム編
7、 終わりのない仕事    ネットワーク編
8、 人気のあるレストラン  オペレーティングシステム編

作 徳田雄洋  絵 村井宗二  岩波書店







by telmic-gunma | 2016-09-03 14:14 | HP電卓 | Trackback | Comments(0)

40年ぶりに初恋の人に再会しました。
と言っても HP電卓です。 HP29Cを手にいれました。
初めてプログラム電卓を手にしたのはHP25ミニですが、姿かたちはこのHP29Cと全く同じです。
HP25ミニのあとしばらくして発売されました。 マイコンやパソコンが世の中にでてくる直前だったと思います。
その後発売されたHP15CやHP32Sと比べると厚みはありますがサイズは若干小さく、片手の中にスッポリと収まります。
HP電卓を形容する言葉はいろいろ言われています。
「電卓の宝石だ」 「俺の電卓は芸術品だ」 「珠玉の電卓」などなど
私はいろいろあるHP電卓の中でこのHP25,HP29が「いちばんかわいい」と思います。
電卓を説明するのに「かわいい」なんて言葉をつかうなと言われるかもしれません。
当然、後継機種はメモリーが増えたり関数が増えたりグラフ表示できたりと機能がどんどん増えています。
しかし通常の技術計算や数学の問題をやるのにこのHP29Cの機能で十分と思っています。
とにかく 持っていてうれしく、使っていてたのしくて、わくわくしてくるのは最高です。
やっぱり理屈じゃありません 初恋のひとがいちばんです。??????

c0335218_16110014.jpg




c0335218_16113649.jpg





c0335218_16120891.jpg


























































29Cになって変更されたところは
メモリーステップ   49 ⇒ 98ステップ
メモリーレジスタ   8  ⇒ 29
GTO GSBにラベルが使える 10個
電源をOFFしてもプログラムとデータが保持されているなどです。
私のHP25ミニは、つぎのHP97を購入したとき、不要と思って友達にあげてしまいました。



by telmic-gunma | 2016-08-16 15:34 | HP電卓 | Trackback | Comments(4)

2014-10-02
むかし電子計算機のプログラムというものにずっとあこがれていたけれど 
なかなか いじくれるチャンスがありませんでした。
まだ マイコンやパソコンが世の中に出てくる前です。
そんな時 YHPから HP25ミニ プログラム電卓が発売されました。
当時 東京池袋駅のそばにあった三越デパートの文房具売り場で購入した覚えがあります。
確か7万円ぐらいだったかな 月給が10万円にも満たないころだと思います。
49ステップ 電源OFFにするとプログラムは消えてしまうものでした。
プログラムは手計算と同じ手順で 逆ポーランド法で入力します。
データメモリは4段のスタックと呼ばれるところに入り 少ないメモリーで
大きな計算ができるということでした。
今思えば、このわずかなメモリ空間でゲームを楽しんだり仕事に使ってました。
そんなことで 皆さんがかかるという”HP電卓病”になってしまいました。
それ以来 HP97、HP48GX、HP42S、HP15Cなど使ってきました。
最近になってHP15Cの復刻版が出てきて 非常に高速ということなので
さっそく購入して比較してみました。
テストプログラムは 掛け算を900回繰り返すというものです。
結果は
  旧HP15C  430秒
  新HP15C  3秒  
約 150倍でした 
瞬間に結果が出るので通常の使い方ならプログラムが動いているという感覚は無いですね。
ただし "PSE" 命令(演算の途中経過を1秒ほど表示する機能)もそのまま高速化されてしまい
目で確認できず使えません。

写真は左からHP48GX、HP35s、上 新HP15C 下 旧HP15C
c0335218_15263858.jpg
by telmic-gunma | 2014-10-02 08:28 | HP電卓 | Trackback(1) | Comments(6)