見出し画像

プログラミング学習記録【8日目】

断捨離

大学に入ってから、ものを買う機会は増えたが、増えたものを減らす努力を怠って来た。結果、必要が物がどこにあるかもわからない始末である。必要なときにないからまた買ってしまい、またものが増えてしまう。つい先日、ホッチキスの替芯を探していてふと思ったのだ。探しものもできないこんな世の中じゃ、と。
そして今日、色々調べて断捨離(もどき)をやってみた。やってみると、本当に必要なものは両手で数えるくらいしかなくて、逆に捨てる方法に迷ってしまう始末だ。世の中が便利になり、新しいものが出るたびに物を増やしてしまっては、自分の周りを煩雑にしてしまうだけだと気付かされた。
本当に必要なものを必要なだけ持っているのは、こだわりが強い人みたいで、どことなくかっこいい。

2.01.ループの書き方と範囲for文

ループの書き方は以下の手順でプログラムを書くと良い。
1. ループを使わないで書く
2. パターンを見つける
3. ループで書き直す

C++には配列の要素に対する処理を完結に書くことができる範囲for文という構文が用意されている。

for (配列の要素の型 変数名 : 配列変数) {
 // 各要素に対する処理
}

例えば

  for (int x : a) {
   cout << x << endl;
 }

というソースコードの場合、
配列関数aから1つ取り出してxという変数にコピー → xの値を出力 →次の要素をxにコピー → xの値を出力 → … 
というループとなり、すべての要素を取り出し終わるとループを抜ける。
この範囲for文はコンテナと呼ばれるデータ型に対して使うことができる。他にも文字列string型はコンテナの一種なので、範囲for文を用いることができる。

EX16.隣り合う同じ値を探す

5つの要素が与えられ、同じ値の要素が隣り合っていれば”Yes”を、なければ”No”を出力するプログラムを作る。
存在する場合としない場合でifの場合分けをして、その時の判定としてjudgeを用意、これにtrueかfalseがはいって

if(judge)

とすれば出力の場合分けが楽なのでこれを用いる。
judge=falseとしておいて、隣り合う要素があったときだけjudge=trueとすればif文が減らせるので、定義の際

bool  judge = false 

としておく。
この問題でループするのは、判定する要素と判定で、判定回数は5この要素の隣同士を判定するので4回。よってループ文は

for(int i = 0; i < 4; i++){
    if(data.at(i) = data.at(i + 1)){
        judge = true;
        }
}

とすれば良い。これを組み込みつつ、最後の出力まで作ったプログラムがこちら。

#include <bits/stdc++.h>
   using namespace std;
    
   int main() {
     vector<int> data(5);
     for (int i = 0; i < 5; i++) {
       cin >> data.at(i);
     }
    
     // dataの中で隣り合う等しい要素が存在するなら"YES"を出力し、そうでなければ"NO"を出力する
     bool judge = false;
     for (int i = 0; i < 4; i++)
     
         if (data.at(i) = data.at(i + 1)){
             judge = true;
         }
     }
     if(judge){
         cout << "Yes" << endl;
     }
     else{
         cout << "No" << endl;
     }
     
   }

無事コンパイルできたので提出。

画像1

できてない…
どこができてないのか見ようと思い詳細を確認。

画像2

全部やん。
なにかおかしいところはないかコードを眺めながらぽちぽち実行もしてみて考えること数分。
…あ!最初のifのところ、data.at(i) = data.at(i + 1) になってる!そりゃ全部正解になっちゃうな笑。==に書き直して再提出。

画像3

また…
そもそも、全部WAになっちゃうのはおかしくないか?

…はい。問題は最後まで確認しましょう。
YesではなくYES。
NoではなくNO。

画像4

明日はもっと早い時間から始めようと思う。あと問題文は最後まで読む。

この記事が気に入ったらサポートをしてみませんか?