2012年11月19日月曜日

開発環境

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第5章(C#の実行制御)5.5(練習問題)練習5-2を解いてみる。

その他参考書籍

練習5-2.

コード

using System;
using System.Text.RegularExpressions;

class Tester
{
    enum Conditions
    {
        big, multply, even, odd, other,
    }
    public void Run()
    {
        string str;
        double num;
        Regex reg = new Regex(@"^\s*$");
        Regex reg1 = new Regex(@"^-?(\d+[.]?\d+|\d+)$");
        Console.WriteLine("if/else if/else文");
        while (true)
        {
            Console.Write("数値(正の数)を入力: ");
            str = Console.ReadLine();
            if (reg.IsMatch(str))
            {
                break;
            }
            if (!reg1.IsMatch(str))
            {
                Console.WriteLine("数値を入力してください。");
                continue;
            }
            num = Convert.ToDouble(str);
            if (num < 0)
            {
                Console.WriteLine("正の数を入力してください");
                continue;
            }
            if (num >= 100)
            {
                Console.WriteLine("大きすぎる(100以上)値です。");
            }
            else if (num % 10 == 0)
            {
                Console.WriteLine("10の倍数です。");
            }
            else if (num % 2 == 0)
            {
                Console.WriteLine("偶数です。");
            }
            else if (num % 2 == 1)
            {
                Console.WriteLine("奇数です。");
            }
            else
            {
                Console.WriteLine("いずれにも当てはまりません。");
            }
        }
        Console.WriteLine("switch文と列挙型(enum)");
        while (true)
        {
            Console.Write("数値を入力: ");
            str = Console.ReadLine();
            if (reg.IsMatch(str))
            {
                break;
            }
            if (!reg1.IsMatch(str))
            {
                Console.WriteLine("数値を入力してください。");
                continue;
            }
            num = Convert.ToDouble(str);
            if (num < 0)
            {
                Console.WriteLine("正の数を入力してください");
                continue;
            }
            Conditions condition = num >= 100 ? Conditions.big :
                num % 10 == 0 ? Conditions.multply :
                num % 2 == 0 ? Conditions.even :
                num % 2 == 1 ? Conditions.odd : Conditions.other;
            switch (condition)
            {
                case Conditions.big:
                    Console.WriteLine("大きすぎる値です。");
                    break;
                case Conditions.multply:
                    Console.WriteLine("10の倍数です");
                    break;
                case Conditions.even:
                    Console.WriteLine("偶数です。");
                    break;
                case Conditions.odd:
                    Console.WriteLine("奇数です。");
                    break;
                case Conditions.other:
                    Console.WriteLine("いずれにも当てはまりません。");
                    break;
                default:
                    Console.WriteLine("?");
                    break;
            }
        }
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

if/else if/else文
数値(正の数)を入力: c#
数値を入力してください。
数値(正の数)を入力: 101
大きすぎる(100以上)値です。
数値(正の数)を入力: 100
大きすぎる(100以上)値です。
数値(正の数)を入力: 99
奇数です。
数値(正の数)を入力: 98
偶数です。
数値(正の数)を入力: 97
奇数です。
数値(正の数)を入力: 96
偶数です。
数値(正の数)を入力: 95
奇数です。
数値(正の数)を入力: 10
10の倍数です。
数値(正の数)を入力: 9
奇数です。
数値(正の数)を入力: 8
偶数です。
数値(正の数)を入力: 7
奇数です。
数値(正の数)を入力: 6
偶数です。
数値(正の数)を入力: 5
奇数です。
数値(正の数)を入力: 0
10の倍数です。
数値(正の数)を入力: -1
正の数を入力してください
数値(正の数)を入力: 1.2
いずれにも当てはまりません。
数値(正の数)を入力: -10
正の数を入力してください
数値(正の数)を入力: -1.2
正の数を入力してください
数値(正の数)を入力:
switch文と列挙型(enum)
数値を入力: 100
大きすぎる値です。
数値を入力: 95
奇数です。
数値を入力: 94
偶数です。
数値を入力: 93
奇数です。
数値を入力: 92
偶数です。
数値を入力: 91
奇数です。
数値を入力: 90
10の倍数です
数値を入力: 0
10の倍数です
数値を入力: -1
正の数を入力してください
数値を入力: -2
正の数を入力してください
数値を入力: -10
正の数を入力してください
数値を入力:
続行するには何かキーを押してください . . .

ちなみにJavaScriptの場合。

コード(TextWrangler)

var str;
var reg = /^(\d+\.?\d+|\d+)$/;
do{
  str = prompt("数値(正の数)を入力",null);
}while (! reg.test(str));
var n = parseFloat(str);
var result = "if/else if/else文: ";
if(n >= 100){
  result += "大きすぎる値です。";
} else if(n % 10 === 0){
  result += "10の倍数です。";
} else if (n % 2 === 0){
  result += "偶数です。";
} else if (n % 2 === 1){
  result += "奇数です。";
} else {
  result += "いずれにも当てはまりません。";
}
result += "\nswitch文: ";
var condition = n >= 100 ? "big":
  n % 10 === 0 ? "multiply":
  n % 2 === 0 ? "even":
  n % 2 === 1 ? "odd" : "other";
switch(condition){
  case 'big': result += "大きすぎる値です。";break;
  case 'multiply': result += "10の倍数です。";break;
  case 'even': result += "偶数です。";break;
  case 'odd': result += "奇数です。"; break;
  case 'other': result += "いずれにも当てはまりません。";
}
$('#pre0').text(result);


pythonの場合。

sample.py

コード(TextWrangler)

#!/usr/bin/env python3.3
#-*- coding utf-8 -*-

import re

pattern = re.compile(r"^\s*$")
pattern1 = re.compile(r"^-?(\d+\.?\d+|\d+)$")
print("if/elifステートメント")
while 1:
    print("数値(正の数)を入力: ", end="")
    str = input()
    if re.match(pattern, str): break
    if not re.match(pattern1, str):
        print("数値を入力してください。")
        continue
    num = float(str)
    if num < 0:
        print("正の数を入力してください。")
        continue
    if num >= 100:
        print("大きすぎる値です。")
    elif num % 10 == 0:
        print("10の倍数です。")
    elif num % 2 == 0:
        print("偶数です。")
    elif num % 2 == 1:
        print("奇数です。")
    else:
        print("いずれにも当てはまりません。")

入出力結果(Terminal)

$ ./sample.py
if/elifステートメント
数値(正の数)を入力: 1000
大きすぎる値です。
数値(正の数)を入力: 100
大きすぎる値です。
数値(正の数)を入力: 99
奇数です。
数値(正の数)を入力: 98
偶数です。
数値(正の数)を入力: 90
10の倍数です。
数値(正の数)を入力: 10
10の倍数です。
数値(正の数)を入力: 5
奇数です。
数値(正の数)を入力: 4
偶数です。
数値(正の数)を入力: 3
奇数です。
数値(正の数)を入力: 2
偶数です。
数値(正の数)を入力: 1
奇数です。
数値(正の数)を入力: 0
10の倍数です。
数値(正の数)を入力: 1.5
いずれにも当てはまりません。
数値(正の数)を入力: python
数値を入力してください。
数値(正の数)を入力: -10
正の数を入力してください。
数値(正の数)を入力: 
$

0 コメント:

コメントを投稿