楽しいなでしこ講座

なでなでしこしこ

変数宣言

  • なでしこで変数の型を宣言する
    (変数名)とは(型)。
  • 型には以下のものがあります。「変数」にしとけばメモリ大量消費しますが何にでも使えます。
    • 文字列
    • 数値
    • 整数
    • 配列
    • 実数
    • ハッシュ
    • 変数
  • メモリのでかさ
    • 変数>文字列>数値>実数>整数
  • 別次元
    • 配列 ・ハッシュ

配列

  • 配列を扱う
    • 文字列変数で使うとインデックスのところが行数になります。
       配列変数名¥インデックス
       配列変数名[インデックス]
  • 二次元配列を扱う
    配列変数名¥行,列
    配列変数名[行,列]

ハッシュ

  • ハッシュを扱う
    ハッシュ変数名@「ハッシュ文字列」
  • 多次元ハッシュを使う
    ハッシュ変数名@「ハッシュ文字列1」@「ハッシュ文字列2」@......

条件分岐構文

  • 簡単な条件分岐
    もし、(条件式)ならば
      (真の処理)
    違えば
      (偽の処理)
  • 複雑な条件分岐
    (条件式)で条件分岐
      (条件)ならば
      (条件)ならば
      違えば

共に「違えば」はあっても無くてもいい

繰り返し構文

  • 処理をCNT回繰り返す
    (CNT)回
      回数を表示。//繰り返しが何回目か表示される
  • 配列Sの要素分繰り返す //文字列ならば毎行分繰り返す
    (配列S)を反復
      回数を表示。
      それを表示。//データの要素が表示される
      対象を表示。//同上
  • 数値変数をAからBまで1ずつ増やしながら繰り返す。「(数値変数)で」を省略すると、変数「それ」に番号が代入される
    (数値変数)でAからBまで繰り返す
      回数を表示。
  • 条件式が真の時、処理を繰り返し実行する
    //(条件式)のループ でも同じである
    //1の間 とすると常に条件式が真となるので、無限ループになる
    (条件式)の間
      回数を表示。

中断続行

繰り返し構文内での中断続行処理の解説。 全て「1の間」、つまり無限ループの繰り返し構文で説明する。

  • 繰り返しから「抜ける」
    1の間
      回数を表示。
      抜ける。
  • 出力 
    1
  • 繰り返しの途中で、繰り返しの先頭に戻って「続ける」。
    1の間
      回数を表示。
      続ける。
      『「続ける」が途中で入ったため、表示されない』と表示。
  • 出力
    1
    2
    3
    4
    5
    ....

関数の定義

  • 書式
    ●関数名(引数リスト)
      定義内容
    //●は*で代用できる
      
  • 例:関数を使い、引数三つを表示させる
    三表示("撫子に",「かかる涙や」,『楠の露』)。
    ●三表示(A,B,C)
      Aを表示。Bを表示。Cを表示。

引数を日本語らしく助詞で区切ることもできる

  • 助詞リスト
    • 助詞を変数名などに使うと処理がうまくいかない
      とは、は、について、ならば、なら、でなければ、から、まで、
      までを、までの、で、を、の、が、に、へ、と、して、だけ、
      くらい、なのか、として、より、ほど、など、って、では、て、
  • 「撫子の」と『暑さ忘るる』と"野菊かな"で俳句表示。
    ●俳句表示(上句と中句と下句で)
      上句と表示。中句と表示。下句と表示。

変数の展開

展開ありのカッコ内で{...}の内部は展開されます。

  • 展開あり
    A=「あいうえお」。
    「AAA{A}AAA」と表示。
    表示("AAA{A}AAA")。
  • 出力結果
    AAAあいうえおAAA
  • 展開無し
    A=「あいうえお」
    『AAA{A}AAA』を表示。
    表示(`AAA{A}AAA`)。
  • 出力結果
    AAA{A}AAA
  • 展開ありで、内部に「 」や{ }や『 』を使いたいときは、下を入れて展開させます
    「 {カッコ}
    」 {カッコ閉じ}
    { {波カッコ}
    } {波カッコ閉じ}
    『 {二重カッコ}
    』 {二重カッコ閉じ}

関数の定義part2

注意:
関数内で宣言された変数は、その関数内だけのローカル変数となります。
その他のグローバル変数と変数名被った場合は問答無用でグローバル変数にされます。

  • 引数リストは省略することができます。
    A表示。
    
    ●A表示
      「A」と表示。
  • Sで戻る で戻り値を設定することができます
    • 「Sで」を省略した場合、「それ」が戻り値になります
      A=「あああ」。
      A=Aの値変更。
      Aを表示。   //いいい
      
      ●値変更(Sの)
        S=「いいい」。Sで戻る。

関数の定義part3

  • 引数リスト内の引数型を宣言することができます
    • 「区切る」は特定の文字列で区切って文字列を配列で返します
    • 配列合計は、配列の各要素を合計して返します(つまり、これならわざわざ関数を使う必要はありません)
      S=「10|100|1000」を"|"で区切る。
      Sの配列合計値を表示。 //1110
      
      ●配列合計値({配列}Sの)
        Sの配列合計で戻る。
  • 引数を省略した場合、普通はエラーがでるのですが、{=?}と入れておくと省略した場合その?の部分が勝手に代入されます。
    • ここでは上との合わせ技を使っていますが、{=10}だけでも動きます
      「10
      100
      1000」の配列合計値を表示。//1110
      
      配列合計値を表示。//10
      
      ●配列合計値({配列=10}Sの)
        Sの配列合計で戻る。

サンプル

  • ゲーム
    • 数当てゲーム(cnakoモード用)
       1の間
         答え=(10000の乱数)を4でゼロ埋め。
         答え1=答えの1から1バイト抜き出す。
         答え2=答えの2から1バイト抜き出す。
         答え3=答えの3から1バイト抜き出す。
         答え4=答えの4から1バイト抜き出す。
         
         「数値当てゲームを始めます。」と表示。
         「-【開始!】-------------------------{改行}」と表示。
         1の間
           「-【{回数}回目!】-------------------------」と表示。
           1の間
             解答=「答えだと思う4桁の数値を入力して下さい{改行}」と入力。
             もし、(解答が数列か判定)=いいえならば、「【エラー!】数値を入力して下さい」と表示して続ける。
             もし、(解答のバイト数)≠4ならば、「【エラー!】4桁の数値を入力して下さい」と表示して続ける。
             抜ける。
             
           解答1=解答の1から1バイト抜き出す。
           解答2=解答の2から1バイト抜き出す。
           解答3=解答の3から1バイト抜き出す。
           解答4=解答の4から1バイト抜き出す。
           
           判定=0。ズレ判定=0。
           
           もし、答え1=解答1ならば、判定=判定+1。
           もし、答え2=解答2ならば、判定=判定+1。
           もし、答え3=解答3ならば、判定=判定+1。
           もし、答え4=解答4ならば、判定=判定+1。
         
           それ=答え。もし、((それの1から1文字削除)で1から解答1を文字検索)>0ならば、ズレ判定=ズレ判定+1。
           それ=答え。もし、((それの2から1文字削除)で1から解答2を文字検索)>0ならば、ズレ判定=ズレ判定+1。
           それ=答え。もし、((それの3から1文字削除)で1から解答3を文字検索)>0ならば、ズレ判定=ズレ判定+1。
           それ=答え。もし、((それの4から1文字削除)で1から解答4を文字検索)>0ならば、ズレ判定=ズレ判定+1。
           
           もし、判定=4ならば
             「【{回数}回目で成功!】おめでとう!正解は{答え}でした。{改行}」と表示して抜ける。
           「位置も数値もあっている数字が{判定}個。位置だけズレている数字が{ズレ判定}個あるよ!{改行}」と表示。
         
         「-【終了!】-------------------------{改行}{改行}」と表示。