*楽しいなでしこ講座 [#mee6023c]

なでなでしこしこ

#contents

**変数宣言 [#of0521ec]
-なでしこで変数の型を宣言する
 (変数名)とは(型)。

-型には以下のものがあります。「変数」にしとけばメモリ大量消費しますが何にでも使えます。
--文字列
-- 数値
-- 整数
-- 配列
-- 実数
-- ハッシュ
-- 変数

-メモリのでかさ
--変数>文字列>数値>実数>整数

-別次元
--配列 ・ハッシュ

**配列 [#g1405d1b]
-配列を扱う
--文字列変数で使うとインデックスのところが行数になります。
  配列変数名¥インデックス
  配列変数名[インデックス]

-二次元配列を扱う
 配列変数名¥行,列
 配列変数名[行,列]

**ハッシュ [#j2ec5058]
-ハッシュを扱う
 ハッシュ変数名@「ハッシュ文字列」

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

**条件分岐構文 [#n9ec7126]

-簡単な条件分岐
//---------------
 もし、(条件式)ならば
   (真の処理)
 違えば
   (偽の処理)
//---------------

-複雑な条件分岐
//---------------
 (条件式)で条件分岐
   (条件)ならば
   (条件)ならば
   違えば
//---------------

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

**繰り返し構文 [#y392ed1b]

-処理をCNT回繰り返す
 (CNT)回
   回数を表示。//繰り返しが何回目か表示される

-配列Sの要素分繰り返す //文字列ならば毎行分繰り返す
 (配列S)を反復
   回数を表示。
   それを表示。//データの要素が表示される
   対象を表示。//同上

-数値変数をAからBまで1ずつ増やしながら繰り返す。「(数値変数)で」を省略すると、変数「それ」に番号が代入される
 (数値変数)でAからBまで繰り返す
   回数を表示。

-条件式が真の時、処理を繰り返し実行する
 //(条件式)のループ でも同じである
 //1の間 とすると常に条件式が真となるので、無限ループになる
 (条件式)の間
   回数を表示。
**中断続行 [#l7197548]

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

-繰り返しから「抜ける」
 1の間
   回数を表示。
   抜ける。

-出力 
 1

-繰り返しの途中で、繰り返しの先頭に戻って「続ける」。
 1の間
   回数を表示。
   続ける。
   『「続ける」が途中で入ったため、表示されない』と表示。

-出力
 1
 2
 3
 4
 5
 ....

**関数の定義 [#i40a975b]

- 書式
 ●関数名(引数リスト)
   定義内容
 //●は*で代用できる
  

-例:関数を使い、引数三つを表示させる
 三表示("撫子に",「かかる涙や」,『楠の露』)。
 ●三表示(A,B,C)
   Aを表示。Bを表示。Cを表示。

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

-助詞リスト
--助詞を変数名などに使うと処理がうまくいかない
 とは、は、について、ならば、なら、でなければ、から、まで、
 までを、までの、で、を、の、が、に、へ、と、して、だけ、
 くらい、なのか、として、より、ほど、など、って、では、て、

-「撫子の」と『暑さ忘るる』と"野菊かな"で俳句表示。
 ●俳句表示(上句と中句と下句で)
   上句と表示。中句と表示。下句と表示。

**変数の展開 [#led7130f]
展開ありのカッコ内で{...}の内部は展開されます。

-展開あり
 A=「あいうえお」。
 「AAA{A}AAA」と表示。
 表示("AAA{A}AAA")。

-出力結果
 AAAあいうえおAAA

-展開無し
 A=「あいうえお」
 『AAA{A}AAA』を表示。
 表示(`AAA{A}AAA`)。

-出力結果
 AAA{A}AAA

-展開ありで、内部に「 」や{ }や『 』を使いたいときは、下を入れて展開させます
 「 {カッコ}
 」 {カッコ閉じ}
 { {波カッコ}
 } {波カッコ閉じ}
 『 {二重カッコ}
 』 {二重カッコ閉じ}

**関数の定義part2 [#e5a257d5]

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

-引数リストは省略することができます。
 A表示。
 
 ●A表示
   「A」と表示。

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

**関数の定義part3 [#a9d6a10d]

-引数リスト内の引数型を宣言することができます
--「区切る」は特定の文字列で区切って文字列を配列で返します
--配列合計は、配列の各要素を合計して返します(つまり、これならわざわざ関数を使う必要はありません)
 S=「10|100|1000」を"|"で区切る。
 Sの配列合計値を表示。 //1110
 
 ●配列合計値({配列}Sの)
   Sの配列合計で戻る。

-引数を省略した場合、普通はエラーがでるのですが、{=?}と入れておくと省略した場合その?の部分が勝手に代入されます。
--ここでは上との合わせ技を使っていますが、{=10}だけでも動きます
 「10
 100
 1000」の配列合計値を表示。//1110
 
 配列合計値を表示。//10
 
 ●配列合計値({配列=10}Sの)
   Sの配列合計で戻る。

**サンプル [#oke7841i]
-ゲーム
--数当てゲーム(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ならば
        「【{回数}回目で成功!】おめでとう!正解は{答え}でした。{改行}」と表示して抜ける。
      「位置も数値もあっている数字が{判定}個。位置だけズレている数字が{ズレ判定}個あるよ!{改行}」と表示。
    
    「-【終了!】-------------------------{改行}{改行}」と表示。