2017年11月10日 星期五

  今天上課的程式我加入了例外處理的功能。介紹一下猜數字規則︰
        資料來源︰http://oddest.nc.hcc.edu.tw/math231.htm
  • 這是一個個人進行的益智數學遊戲。
    1. 首先電腦會想好一組由左至右排列好的四個數碼(數碼0可以在最前面,且數碼不可以重複出現被使用), 例如1847,讓玩者去猜。
    2. 猜題後電腦會給猜題者提示,譬如玩者猜了6149,則提示是1A1B,其中A表示有這個數字,且數字是在正確的位置, B表示有這個數字,但位置不對;因為數字4被猜對了位置也正確,而數字1被雖猜對了但位置不正確,所以得到1A1B。
    3. 用這樣的遊戲規則,看能否最少的步驟猜中電腦中設的數字。
        程式碼如下︰


/////猜數字遊戲//////

#include <iostream>
#include <cstdlib>
#include <ctime>

int answer = 0;//global variable(全域變數)

using namespace std;

int getrand();//取出亂數(不重複)
int countA(int answer , int guess);//輸出幾個A
int countB(int answer , int guess);//輸出幾個B

int main ()
{
    int guess , a , b;//宣告
    getrand();//呼叫
    cout << "Guess Number three digits:\n\n";//輸出

    //cout << answer;//看到答案
    do
    {
        cout << "Guess number :";//輸出
        cin >> guess;//輸入
        try
        {
            if(guess >= 1000 || guess < 100)
            throw 0;//當上面條件成立時,丟出0
        }
        catch(int arr)//接收0值
        {
            cout << "Error";//輸出
        }
        a = countA(answer , guess);//呼叫函式
        b = countB(answer , guess);//呼叫函式
        cout << "---->>" << a << "A" << b << "B" << endl;//輸出
    }while(guess != answer);//當guess不等於answer時,繼續執行迴圈,PS:至少執行一次
    cout << "Bingo" << endl;//輸出
    return 0;
}

int getrand()
{
    int hundreds_dights , tens_dights , unit_dights;//宣告
    srand(time(NULL));
    hundreds_dights = 1 + rand() % 9;//設定範圍

    do
    {
        tens_dights = rand() % 10;
        unit_dights = rand() % 10;
    }while(hundreds_dights == tens_dights ||  tens_dights == unit_dights || hundreds_dights == unit_dights);//不重複亂數

    answer = hundreds_dights * 100 + tens_dights * 10 + unit_dights * 1;//設定answer變數
    return answer;
}

int countA(int answer , int guess)
{
    int i  , d1 , d2 , cnt = 0;//宣告
    for(i = 0 ; i < 3 ;i++)
    {
        d1 = guess % 10;
        d2 = answer % 10;
        if(d1 == d2) cnt++;
        guess /= 10;
        answer /= 10;
    }
    return cnt;
}

int countB(int answer , int guess)
{
    int i , j , a[3] , b[3] , cnt = 0;
    for(i = 0 ; i < 3 ; i++)
    {
        a[i] = answer % 10;
        b[i] = guess % 10;
        if(a[i] != b[i]) cnt ++;
        answer /= 10;
        guess /= 10;
    }
    for (i = 0 ; i < 3 ; i++)
    {
        for(j = 0 ; j < 3 ; j++)
        {
            if (i != j && a[i] == b[i])
                cnt ++;
        }
    }
    return cnt;
}

2017年10月25日 星期三

我的第一個專案(密碼產生器)


密碼產生器,供給大家參考︰


//密碼產生器//


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <fstream>

using namespace std;

int main ()
{
ofstream makedir("Password.txt");

    char keyword[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.!@#$%^&*()[]{};:'<>";
   
    char name;
   
    int wordlength , length , buf1 , buf2 , type  , out ;
   
    cout << "Type your word length:(seed)";
    cin >> wordlength;//輸入來設定種子//
    for (buf1 = 0 ; buf1 < wordlength;buf1++)
    {
        cin >> name;
        out *= 16;
        switch(name)
        {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
           
            out += name - '0';
           
            break;
           
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
           
            out += name - 'a' + 1;
           
            break;
           
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
           
            out += name - 'A' + 1;
           
            break;
           
            default:
           
            out += name - ' ' + 1;
           
            break;
        }
    }
   
    srand(out);
   
    cout << "Type your password length : ";
    cin >> length;//密碼長度//
    for (buf2 = 0 ; buf2 < length ; buf2 ++)
    {
        type = rand() % 83;
        cout << keyword[type];
        makedir << keyword[type];
    }

   
    makedir.close();//必要的一件事//
   
    return 0;   
}

  今天上課的程式我加入了例外處理的功能。介紹一下猜數字規則︰         資料來源︰ http://oddest.nc.hcc.edu.tw/math231.htm 這是一個個人進行的益智數學遊戲。 首先電腦會想好一組由左至右排列好的四個數碼(數碼0可以在最前面,且...