C言語構造体で昨日の新型コロナ感染者数

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!うにゃうにゃエンジニアの猫です(=^・^=)
構造体について学んだので早速アウトプットするにゃっ!
学んでいくうちにこのプログラムをちょっとずつ改良出来ると思います。

この記事を書いているのは令和3年1月21日なので、昨日の新型コロナの感染者数を、
場所と人数と言った構造体を使ってプログラミングをしてみました。

感染者数はNHK新型コロナウイルス特設サイトから引用しました。

早速実行します。

こんな感じで実行できました。

ではプログラムです。

#include <stdio.h>

struct corona{
char city[20];
int people;
};


int main(void){

struct corona tokyo={“東京”,1274};
struct corona hokkaido={“北海道”,164};
struct corona osaka={“大阪”,506};

printf(“2021年1月20日の感染者数\n”);

printf(“%sの感染者数は%d人です。\n”,tokyo.city,tokyo.people);
printf(“%sの感染者数は%d人です。\n”,hokkaido.city,hokkaido.people);
printf(“%sの感染者数は%d人です。\n”,osaka.city,osaka.people);

}

ご覧になって分かるように、printf関数を3回も使っているので、ここは学んでいく過程で近いうちに改良できそうです。

追記
構造体配列について学んだので、要素数を追加してプログラミングして見ました。
実行結果です。

プログラムです。

#include <stdio.h>

//構造体の宣言 typedefで[struct corona]を「CORO」に省略
typedef struct{
char city[20];
int people;
}CORO;


int main(void){

CORO tokyo={“東京都”,1471};
CORO hokkaido={“北海道”,130};
CORO osaka={“大阪府”,501};
CORO saitama={“埼玉県”,436};
CORO kanagawa={“神奈川県”,731};

//構造体配列の要素
CORO corona[5];
corona[0]=tokyo;
corona[1]=hokkaido;
corona[2]=osaka;
corona[3]=saitama;
corona[4]=kanagawa;

printf(“2021年1月21日の感染者数\n”);

//ループで各都市における感染者数を取り出す
for(int i=0;i<5;i++){
printf(“%sの感染者数は%d人です。\n”,corona[i].city,corona[i].people);
}
}

ご精読ありがとうございました!

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語のポインタって怖いの?怖くないの?

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!うにゃうにゃエンジニアの猫です(=^・^=)
ITの先輩方からC言語にはポインタっていうものがあって、それがラスボス?か大ボスみたいに大変だと聞きました。
なので、ゆっくり基礎から覚えたことを復習します。

※超超超初心者の備忘録な為、厳密には正確では無いかもしれませんが、
そういう風に理解しているんだなぁと、あたたかい目で見て下さい。

変数aというint型の変数があって、その値が5だとします。
その例を考えてみます。この図を書きました。


右側に変数aを用意しました。値は5です。

変数aは主記憶に格納されていて、変数aがある主記憶の場所には東京都新宿区何丁目…みたいな住所のような物があります。
その住所みたいなものをアドレスって言います。
仮にそのアドレスを100番地とします。


左側には変数aのアドレスを値として持つポインタpがあります。

また、p自体にも北海道稚内市何丁目…みたいなアドレスがあります。
そのアドレスを300番地とします。

ポインタpが見ているアドレスの中身(住人)はaの値で5です。
これをポインタが見ているというのを表す表記として*pを使います。
*p=5になります。

…と、文章と図だけだとイマイチ分かりづらいので、それをプログラミングしてうちのパソコンではどんな感じになるのか調べてみたいと思います。

実行結果です。

プロうグラムはこちらになります。

#include <stdio.h>
int main(void){
int a=5;
int p;    //ポインタ宣言

p=&a;   //ポインタpはaのアドレスを格納

//これらは等しい。aの値を示す
printf(“aの値…a=%d\n”,a);
printf(“pが見ている値…p=%d\n\n”,*p);

//これらは等しい。aのアドレスを示す。
printf(“aのアドレス…&a=%p\n”,&a);
printf(“ポインタpの値…p=%p\n\n”,p);

//これはpが格納されているアドレス。
printf(“ポインタpのアドレス…&p=%p\n”,&p);
}

これで私のアタマはスッキリしました。
ご精読ありがとうございました(=^・^=)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語で「ねこ」おみくじを作ってみた

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!うにゃうにゃエンジニアの猫です(=^・^=)
今日は、ねこみくじなるものを作りました。
おみくじの猫版です。

・ホワッツマイケル
・ナメネコ
・うちのタマ知りませんか
・ねこあつめ
・にゃんこ大戦争

といった猫にまつわる作品をランダムに表示させます。
といった、猫好きさんの猫ツボを刺激する以外は、
何の役にも立たない乱数プログラムを作りました。

配列 nekoretsuの各要素、要素番号の先頭を[0]として、
[0]ホワッツマイケル
[1]ナメネコ
[2]うちのタマ知りませんか
[3]ねこあつめ
[4]にゃんこ大戦争

という配列を用意します。
その要素番号をランダムな数にすると、猫のおみくじが出来上がります。
乱数を発生させてその乱数を配列の添え字にして、配列の中身の文字列を取り出します。

配列の要素数は5なので、ランダムな数の5で割った余りは、余り0~4になりますので、
各要素番号が乱数になる仕組みです。

では、何が出るかな…。

1回目は
「ナメネコ」

2回目は
「ねこあつめ」

これは猫好きな方にしか分からないかもしれませんが、猫の作品の名前をみるだけで、
うにゃ~~~~~つ(=^・^=)ってなるんです。

コードはこちらになります。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(void){

srand((unsigned int)time(NULL)); //現在の時刻で乱数の初期化

char *nekoretsu[5]={“ホワッツマイケル”,”うちのタマ知りませんか”,”ナメネコ”,”ねこあつめ”,”にゃんこ大戦争”};

int num=rand()%5;
printf(“%s”,nekoretsu[num]);

}

ではでは、ご精読ありがとうございました、にゃん!

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語で和暦と干支を求める+追加で閏(うるう)年判定

おはこんばんにちは、うにゃうにゃエンジニアの猫です(=^・^=)
年賀状を書く時期にはちょっと使えるかもしれないプログラムを作りました。

年号を入れると令和何年とか干支は何だとか求められるプログラムです。
例えばこの記事を書いているのは2021年です。西暦に2021と入力して見ます。


このように「令和3年、うし年」と求まりました。
干支を文字列の配列で初期化して、西暦年を12で割った余りを配列の要素として求めています。
12で割り切れる(割った時の余りが0になる)のが直近だと2016年さる年です。
なので、要素番号は0から始まり、配列の先頭の[0]をさる年、[1]をとり年…としています。

昭和、平成、令和をwareki年として、昭和だったら西暦マイナス1925、平成だったら西暦マイナス1988、令和は西暦-2018と
計算しています。この辺はIFとElse ifなどの分岐を使っています。

至ってシンプルですが、どなたかのお役に立てるのかなぁ…。

では、動作確認で他の年も調べてみます。
1995年は当時高校生の私にとって、阪神淡路大震災や地下鉄サリン事件などのとても重いことがあった年でした。
1995を入力して見ます。

あと、昭和では自分の生まれた年で動作確認して見ます。

プログラムはこちらになります。


#include <stdio.h>
int etosirabe(int nen){
return nen%12;
}
int main(void){
char *jyunisi[12]={“さる”,”とり”,”いぬ”,”いのしし”,”ね”,”うし”,”とら”,”うさぎ”,”たつ”,”へび”,”うま”,”ひつじ”};
char *gengo;
int year,eto,wareki;
printf(“調べる年を西暦で入力=”);
scanf(“%d”,&year);
eto=etosirabe(year);
if(year>=1989 && year<=2018){ gengo=”平成”; wareki=year-1988; }else if(year>=2019){
gengo=”令和”;
wareki=year-2018;
}else{
gengo=”昭和”;
wareki=year-1925;
}
printf(“%d年は%s%d年で干支は「%s年」です。”,year,gengo,wareki,jyunisi[eto]);
}

あとは、このプログラムをちょっとずつ改良していきたいと思います。
基本情報技術者試験を勉強して、プログラムはどんどん改良していくことで自分の力になることを学びました。

追記 2021年1月19日
このプログラムにうるう年を求める処理を追加しました。
コメントの所が追加変更した所です。
画像では赤枠でくくっています。

#include
int etosirabe(int nen){
return nen%12;
}
//ここを追加。うるう年を求める関数
int isLeapYear(int uruyear){
if((uruyear%4==0 && uruyear%100!=0) || uruyear%400==0){
return 1;
}else{
return 0;
}
}
int main(void){
char *jyunisi[12]={“さる”,”とり”,”いぬ”,”いのしし”,”ね”,”うし”,”とら”,”うさぎ”,”たつ”,”へび”,”うま”,”ひつじ”};
char *gengo;
char *uruJadge;
int year,eto,wareki;
int uruFlug;
printf(“調べる年を西暦で入力=”);
scanf(“%d”,&year);
eto=etosirabe(year);
if(year>=1989 && year<=2018){ gengo=”平成”; wareki=year-1988; }else if(year>=2019){
gengo=”令和”;
wareki=year-2018;
}else{
gengo=”昭和”;
wareki=year-1925;
}
//ここでうるう年を調べる関数を呼び出す
uruFlug=isLeapYear(year);
if(uruFlug==1){
uruJadge=”うるう年です。”;
}else{
uruJadge=”うるう年ではありません。”;
}
//表示を変更
printf(“%d年は%s%d年で干支は「%s年」です。\n%s\n”,year,gengo,wareki,jyunisi[eto],uruJadge);
}

では、実行結果を見てみます。
私が高校生の頃にとても重いことのあった1995年の実行結果です。

次に2100年を見てみます。
うるう年は4で割り切れ且つ100で割れない、または400で割れる年です。
なので2100年はうるう年にはならないです。

令和82年とか、まぁ、私はいないです。

最後に400で割れる2000年を見てみます。

ご精読ありがとうございました。

C言語、カンタン関数引数戻り値で嫌なヤツの寿命のカウントダウン(^^♪

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

関数とか引数とか習ったので、早速使ってみます。
このプログラムは、発達障害(特にASD)の方でフラッシュバックがある方におススメです。

キライなヤツの名前を入れて、そいつの寿命をカウントダウンしていくプログラムです。5,4,3,2,1とループカウンタiがカウントダウンして2飛びでカウントダウンするので、iと2を引数にして関数が呼び出され、そこでi*2を計算します。

簡単にトレースすると、

i=5のとき 寿命i×2=10
i=4のとき 寿命i×2=8
i=3のとき 寿命i×2=6
i=2のとき 寿命i×2=4
i=1のとき 寿命i×2=2
i=0のとき 寿命i×2=0
はい、ご臨終(^^♪

となります。

縁起でもないトレースですが、簡単な掛け算アルゴリズムのトレースをしながら、
憎たらしいヤツに復讐しながらプログラミングの復習も出来るので、
なんか楽しくなってきた!!
(ヤバいヤツですね( ´艸`))

実行して見ます。
キライなヤツな以前の会社で働いていた時の年下の男性上司で、
仮名を「五木不利太郎」として入力します。

ただのカウントダウンにた方がシンプルかもしれませんが、せっかく覚えた引数戻り値関数を使って見たかったので、簡単なプログラミングをしてみました。

では、こちらがプログラムです。

‘#include <stdio.h>
int attack(int a,int b){
return a*b;
}
int main(void){
char buf[100];
char *yatsu;
//名前入力
printf(“やっつけたいヤツの名前=”);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, “%s”, yatsu);
printf(“%sの寿命のカウントダウン\n”,yatsu);
for(int i=5;i>=0;i–){
int j=2;
int hour=attack(i,j);
printf(“残り:%d時間\n”,hour);
}
printf(“%sは、ご臨終で~~~す。ちーん(^^♪”,yatsu);
return 0;
}

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

もう転職して3年経つし、大丈夫そうですが、心の痛みは完全にはぬぐい切れていないです。でも、大丈夫。こうして前向いて勉強しているのだから。

ではでは、楽しい11月を(^^♪

C言語 文字コードで相性占い

子どもの頃、電卓を使って好きな子との相性を占いする遊びをしました。
「あ」が「1」、「い」が「2」・・・・というふうに50音と対応する数字を割り当てて、それを2り続けて行って、最初に100以下になった所が好きな人と自分との相性という、相性占いの遊びです。

これ、やったことある人いますか??

では、それをC言語を使って、文字コードでやってみたいと思います。
太郎さんの「T」、花子さんの「H」でやってみます。
標準入力する時は、「T,H」と入力します。
シフトJISコードの文字コードは、「A」を41、「B」を42・・・・として16進数で割り当てていきます。
太郎さんの「T」は「54」、花子さんの「H」は「48」です。
それを足すと「9C」になり、それを10進数で表すと「156」です。
この数字を2で割って行って、最初に100%以下になる所の数字を相性診断に使います。

こちらが太郎さんと花子さんの相性です。

では、プログラムになります。

#include <stdio.h>
int main(){


//イニシャルの文字コード用
char yourname;
char oaite;
int sum;
double aishou;

//あなたのイニシャルの文字コード
printf(“あなたのイニシャルとお相手のイニシャルを\n[,]で区切って入力してください\n例:A,B—>”);
scanf(“%c,%c”,&yourname,&oaite);

//あなたのイニシャルの文字と文字コードを表示する
printf(“あなたのイニシャル[%c]の文字コードは[%02X]です。\n\n”,yourname,yourname);

//お相手のイニシャルの文字と文字コードを表示する
printf(“お相手のイニシャル[%c]の文字コードは[%02X]です。\n\n”,oaite,oaite);

//2人のイニシャルの文字コードの合計
sum=yourname+oaite;
printf(“合算値は16進数で[%02X]で、10進数で[%d]です。\n”,sum,sum);

//相性診断
printf(“2人の相性を計算します。\n”);
aishou=sum;
while(aishou>100){
aishou/=2;
}
printf(“2人の相性は、[%.2f]パーセントです!!お幸せに!\n”,aishou);
return 0;
}

このプログラムを作るのに参考にした本です。

C言語で芸能人の結婚について心の準備をしておく

石原さとみさんが一般男性の方と結婚しましたね。
私はそのことを知って、「おめでとう」、「お幸せに!!」って思います。

すみません、完全に他人ごとですよね。
もしも私が応援している推しが結婚したらどうしよう、って思ってファンとして心の準備することにいたしました。

早速、C言語を使って心の準備を致します。

配列jyunbiは5個の要素を持つchar型配列です。
要素は[0]-[4]です。この5つの中に、推しがもしも結婚したらファンとしてどうやって心の準備をしようか、
そのストックを入れます。

そして、ループで要素0から5未満(4まで)を取り出して表示させました。

実行結果です。

プログラムです。

#include <stdio.h>
int main(){


char *jyunbi[5]; //心の準備のストック用配列
//配列に準備しておくことを格納する
jyunbi[0]=”そのお相手にはプレッシャーがかかる”;
jyunbi[1]=”ファンを敵に回すかも!?”;
jyunbi[2]=”家にある推しの写真はワガハイのものにゃ”;
jyunbi[3]=”その写真を使って妄想できる”;
jyunbi[4]=”妄想をこれでもかってぐらいに爆発させる!!”;

//ループで配列の要素を取り出して表示させる
for(int i=0;i<5;i++){
printf(“%d.%s\n”,i+1,jyunbi[i]);
}

}

C言語を学んでいる方にはお子さまもいるので表現はだいぶ気を付けました。
というか抑えました。
う~~~~ん、これぐらいだったら大丈夫かな??

推しの方、いつもお世話になっております。
本当にありがとうございます。
具体的に何でお世話になっているかと申しますと、仕事しながらプログラミングや資格の勉強は、好きでやっていることとは言え集中力がぐらつくことがあります。
そういう時に好きな芸能人の方って本当に支えになるなって思うんです。

今まで体調を崩したりで勉強しか取り柄が無い私が勉強出来ずに困っていたこともあるので、自分の人生の残りの時間を全て投じてでも後れを取り戻します!!
何かお礼出来ることがあれば良いのですが、色々可能性を考えながら恩返ししたいです。

C言語メモ(設定編)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語のエディタで、Visual Studio Codeを入れたのですが、字が小さくて、老眼が入っている身にはシンドイとおもっていました。
どこでズーム出来るんだろうと悩んでいた所、左下の歯車マークをクリックして、
Setting、Commonly Usedの真ん中へんでFont Sizeの所を20にした所、老眼でも読める様になりました( ;∀;)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語メモ(エラー編)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語を始めて早速エラーのお祭りが到来しましたので、それを書き留めておこうと思います。

エディタ、コンパイラ、パスを通すといった設定を終えて初めてのhello world。
しかしdirコマンドでファイルはあるのに何故かコンパイラする時にエラーになってしまう…。
ファイルが無い?無いはずないじゃん( ;∀;)と思って、パスを通すのが出来て無かったのかも…。などと悩んでいたら、

は!!
英語力!!
の問題でした。

皆さん、間違い探しです。

Hello World
Hallo World

そりゃ、ファイルも無い訳だ。

C言語と言えば#include
これも間違い探しです。

#include <stdio.h>
#include <studio.h>

あとは、IF文の文法ミス。
もしもフラグが1の時
if(flg==1){
処理
}
とすべきところを
if(flg=1){
処理
}
としてしまいました。
なんでflgが2の時の処理が出来ないの!!って、そりゃそうだ。

代入じゃん!!
これじゃあ永遠に2の時の処理にならないって。

この記事では私がやらかした、マヌケなエラーについて書き留めます。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語コロナ詐欺師をループでやっつけろ!!

この記事を読むことによって、

・標準入力
・IFによる分岐
・Whileループ
・Forループ
・代入演算子-=


の理解が深まります。
また、C言語でのコードの後に、 Pythonのコードも追記致しました。
最後に参考書(C言語とPython)の紹介をさせて頂きます。

サイトマップはこちらから

C言語自作サンプル集へ
Python自作サンプル集へ
これからプログラミングを学ぶ方へ
基本情報技術者試験トップへ
自己紹介

新型コロナに便乗した詐欺師をやっつけるプログラムを作って行きます。
詐欺師の最初のHPは300です。
まずは、プレイヤーの勇者が詐欺師と戦う為に、武器を選ぶプログラムを書いて行きます。

勇者は武器を下記の2つの内から1つ選んで攻撃します。
1:「バズーカ砲」 2:「うんこ」
【バズーカ砲】の攻撃力は【20】で、【うんこ】の攻撃力は【40】です。

#include <stdio.h>

int main()
{

    //武器の番号
    int weapon_no;

    //武器の名称
    char *weapon;
    
    //武器の破壊力
    int attack;

    //武器を選択するコード
    printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
    scanf("%d",&weapon_no);
    
    if(weapon_no==1){
        weapon="バズーカ砲";
        attack=20;
    }else{
        weapon="うんこ";
        attack=40;
    }
    
    printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。",weapon,attack);
    
}


ここでは勇者が武器に「2」の:【うんこ】を選んで、1回の戦闘で詐欺師に【40】のダメージを与えられるという設定で進めて行きます。

ループのコードです。

#include <stdio.h>

int main()
{

    //武器の番号
    int weapon_no;

    //武器の名称
    char *weapon;
    
    //武器の破壊力
    int attack;

    //武器を選択するコード
    printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
    scanf("%d",&weapon_no);
    
    if(weapon_no==1){
        weapon="バズーカ砲";
        attack=20;
    }else{
        weapon="うんこ";
        attack=40;
    }
    
    printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
    
    
    //詐欺師の初期のHP
    int SAGI_HP=300;
    
    //whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
    while(SAGI_HP>=150){
        printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
        printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
        SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
    }
    
}

詐欺師の残りHPが180になって、ループ内で40のダメージを受けてHPが140になるとwhileループの条件を満たさなくなって、ループを抜けます。
そこで勇者はお腹が減ったので、もぐもぐタイムで食事を摂ります。

もぐもぐタイムで食べられるのは、「1:もしもバーガー」で勇者の攻撃力が【50】になり、「2:ばななっとうパン」で攻撃力が【75】になります。

コードはこの様に追記します。

#include <stdio.h>

int main()
{

    //武器の番号
    int weapon_no;

    //武器の名称
    char *weapon;
    
    //武器の破壊力
    int attack;

    //武器を選択するコード
    printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
    scanf("%d",&weapon_no);
    
    if(weapon_no==1){
        weapon="バズーカ砲";
        attack=20;
    }else{
        weapon="うんこ";
        attack=40;
    }
    
    printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
    
    
    //詐欺師の初期のHP
    int SAGI_HP=300;
    
    //whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
    while(SAGI_HP>=150){
        printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
        printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
        SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
    }
    printf("詐欺師は瀕死です!!でも、勇者も腹が減ったのでちょっと休む\n\n");
    printf("何食べる??--->1:もしもバーガー 2:ばななっとうパン\n");
    
    int food_no;//食べ物の番号
    char *food;//食べ物
    int powerup;//もぐもぐタイム後の勇者の攻撃力
    
    scanf("%d",&food_no);
    
    if(food_no==1){
        food="もしもバーガー";
        powerup=50;
    }else{
        food="ばななっとうパン";
        powerup=75;
    }
    
    printf("勇者は【%s】を食べて、攻撃力が【%d】にUPした!!",food,powerup);   
}

ここでは、勇者が「もしもバーガー」を選んで攻撃力が増したという設定で進めます。
勇者が休んでいた間、詐欺師も休んでいたので、HPが140から150に回復してしまいました。

では、戦闘再開です。今度はForループで詐欺師HPの初期値が150で、HPが0以上をループの条件にして、詐欺師をやっつけて世界に平和が戻るコードと実行結果を掲載します。

#include <stdio.h>

int main()
{

    //武器の番号
    int weapon_no;

    //武器の名称
    char *weapon;
    
    //武器の破壊力
    int attack;

    //武器を選択するコード
    printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
    scanf("%d",&weapon_no);
    
    if(weapon_no==1){
        weapon="バズーカ砲";
        attack=20;
    }else{
        weapon="うんこ";
        attack=40;
    }
    
    printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
    
    
    //詐欺師の初期のHP
    int SAGI_HP=300;
    
    //whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
    while(SAGI_HP>=150){
        printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
        printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
        SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
    }
    printf("詐欺師は瀕死です!!でも、勇者も腹が減ったのでちょっと休む\n\n");
    printf("何食べる??--->1:もしもバーガー 2:ばななっとうパン\n");
    
    int food_no;//食べ物の番号
    char *food;//食べ物
    int powerup;//もぐもぐタイム後の勇者の攻撃力
    
    scanf("%d",&food_no);
    
    if(food_no==1){
        food="もしもバーガー";
        powerup=50;
    }else{
        food="ばななっとうパン";
        powerup=75;
    }
    
    printf("勇者は【%s】を食べて、攻撃力が【%d】にUPした!!\n\n",food,powerup);
    
    for(SAGI_HP=150;SAGI_HP>0;SAGI_HP-=powerup){
        printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
        printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",powerup);
    }
    
    printf("\n詐欺師の残りHP:【%d】\n",SAGI_HP);
    printf("勇者は詐欺師をやっつけた!!世界が平和になった!!");
      
}

勇者が「もしもバーガー」を食べたことにより、攻撃力が50にパワーアップします。
今度は瀕死の詐欺師に50ずつダメージを与えます。
そしてついに!勇者は詐欺師をやっつけて、世界を救いました。

<<Python>>

では、Pythonでも同様にコードを書いて行きます。
Pythonでは、ワクチンがwhileループでデルタ株をやっつけた後、Forループでオミクロンと戦うという設定です。

※ プログラミングの練習の為の例題であり、医学的根拠は全くございません ※

デルタ株が現れ、あなたのワクチン接種済みの回数を標準入力を使って入力するコードと結果です。

print('デルタ株が現れた!!')
delta_hp=300 #デルタ株のHP

#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目  2:2回目--->',end='')
num=int(input())

#1回目と2回目のパワー
if num==1:
    msg='1回目接種済み'
elif num==2:
    msg='2回目接種済み'
else:
    print('[1]か[2]を入力して下さい。')

if num==1 or num==2:
    print('あなたはワクチン【'+msg+'です。】')

「1」を入力した場合

「2」を入力した場合

「テキトーな数」を入力した場合

この様に分岐が出来ました。
ここからwhileループで「デルタ株」をやっつけます。

ワクチン1回目の攻撃力を50、2回目接種では攻撃力70でデルタ株と戦います。
whileループを使う点での注意点は、初期値(デルタ株のHP=300)を設定することと、無限ループにならないために、ループを抜ける様演算を行うことです。

今回は、whileループの条件がデルタ株のHPが0より大きかったらループを回すので、その条件を満たしている間はループを繰り返し、HPが0またはマイナスになったらループを抜けます。

しかし、デルタ株のHPの減算を行わなければ永遠にループを抜けられない無限ループになってしまいます。

これらを踏まえてコードを掲載します。

print('\nデルタ株が現れた!!')
delta_hp=300 #←デルタ株のHPの初期値を設定

#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目  2:2回目--->',end='')
num=int(input())

#1回目と2回目のパワー
if num==1:
    attack=50
    msg='1回目接種済み'
elif num==2:
    attack=70
    msg='2回目接種済み'
else:
    print('[1]か[2]を入力して下さい。')

if num==1 or num==2:
    print('あなたはワクチン【'+msg+'です。】\n')
    
    while delta_hp>0:
        print('現在のデルタ株のHP:'+str(delta_hp))
        delta_hp-=attack  #←ここで代入演算子を使って減算しているので無限ループを避けられる。
        print('--------------------')

    print('\n<<ループを抜けた>>')
    print('現在のデルタ株のHP:【'+str(delta_hp)+'】')
    print('デルタ株をやっつけた!!\n')

ワクチンの接種回数が1回の場合の実行結果

デルタ株のHPが50ずつ減って、ループの継続条件である「>0」を満たさなくなり、ループを抜けてデルタ株をやっつけました。

ワクチンの接種回数が2回の場合の実行結果

デルタ株のHPが70ずつ減って、ループの継続条件である「>0」を満たさなくなり、ループを抜けてデルタ株をやっつけました。

次にラスボス「オミクロン」が現れます。
今度はForループで戦います。
オミクロンのHPの初期値を1000とします。
ワクチン3回目を接種する場合は攻撃力200で、接種しない場合は攻撃力30でオミクロンと戦います。

コード及び、私は3回目も接種予定なので、打つと選択した実行結果を掲載します。

print('\nデルタ株が現れた!!')
delta_hp=300 #←デルタ株のHPの初期値を設定

#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目  2:2回目--->',end='')
num=int(input())

#1回目と2回目のパワー
if num==1:
    attack=50
    msg='1回目接種済み'
elif num==2:
    attack=70
    msg='2回目接種済み'
else:
    print('[1]か[2]を入力して下さい。')

if num==1 or num==2:
    print('あなたはワクチン【'+msg+'です。】\n')

    #whileループでデルタ株と戦う
    while delta_hp>0:
        print('現在のデルタ株のHP:'+str(delta_hp))
        delta_hp-=attack  #←ここで代入演算子を使って減算しているので無限ループを避けられる。
        print('--------------------')

    print('\n<<ループを抜けた>>')
    print('現在のデルタ株のHP:【'+str(delta_hp)+'】')
    print('デルタ株をやっつけた!!\n')

#オミクロンとの戦いの幕開け。標準入力
print('\nオミクロンが現れた!!')
print('3回目接種は? 1:打つ予定  2:打たない--->',end='')
num2=int(input())

#3回目接種の分岐
if num2==1:
    attack2=200
    msg2='あなたは3回目接種予定です。'
elif num2==2:
    attack2=30
    msg2='あなたは3回目は打たない予定です。'
else:
    print('[1]または[2]を入力して下さい。')


if num2==1 or num2==2:
    print('【'+msg2+'】\n')
    #Forループでオミクロンと戦う
    for omicron_HP in range(1000,-100,-attack2):
        print('現在のオミクロンHP:【'+str(omicron_HP)+'】')
        print('--------------------')
        if omicron_HP<0:
            break

    print('\n<<<ループを抜けた>>>')
    print('現在のオミクロンHP:【'+str(omicron_HP)+'】')
    print('オミクロンをやっつけた!!\n')

このプログラミングみたいにコロナ詐欺もデルタ株もオミクロンもやっつけられたらなぁ・・・。

新型コロナに便乗した詐欺師が各地で多発しています。
金銭や個人情報を盗み出したり、なんでそんな詐欺をするような人間がのうのうと生きているのかと思うと、非常に腹立たしいです。
また、デルタ株やオミクロンもです。

そこで、何かできないかと思い、C言語とPythonのループを使って詐欺師・オミクロンをやっつけることにしました。

警視庁のホームページです。
デルタ株についてと、オミクロンについてです。

■ C言語使用参考書 ■

C言語でコンピュータの仕組みを理解する実験プログラムを作りながら、目で見て納得出来る本です。実際に手を動かしながらC言語でのプログラミングを通してコンピュータの仕組みが学べました。
2進数や演算など、50個のそれぞれ独立した実験があり、どこから始めても良いので、興味のある実験から作って行けます。特に面白かったのは8章の実行時間に関する実験でした。

基本情報技術者試験の範囲のユークリッドの互除法・線形探索・二分探索・ループ・挿入法・連結リスト・二分木・再帰・ハッシュによる探索・クイックソートなどの基本のアルゴリズムをトレースしながら実際に作って学べます。C言語とJavaに対応しています。書籍ではJavaで多くが記載されていますが、C言語のコードはダウンロードサービスから入手して使いました。
私は電子書籍、Kindle版で購入したので、「検索」から「ダウンロード」とキーワードを入力して、C言語のコードを入手して勉強しました。

基本情報技術者試験のアルゴリズムで使う疑似言語はC言語に近いので、この本で紹介されているアルゴリズムを実際に作って自分の環境で動かして学びました。
そのお陰もあって、基本情報技術者試験の配点の上がったアルゴリズムは88%の正答率を取得し、事務職のプログラミング未経験ながら、FEに一発合格致しました。
ご興味のある方は、当ブログの基本情報技術者試験トップページも併せてご覧下さい。

■ Python使用参考書 ■

じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。
Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

C言語自作サンプル集へ
Python自作サンプル集へ
これからプログラミングを学ぶ方へ
基本情報技術者試験トップへ
自己紹介

(=^x^=) 

モバイルバージョンを終了