2011年12月25日 星期日

100設計一甲_Merry Christmas

Merry Christmas tree.c

#include<stdio.h>
void triangel(int num){
    int i,j,space=num-1,x;
    for (i=1 ; i<=num ; i++,space--){
        for(x=1;x<=space;x++)
            printf(" ");
        for (j=1 ; j<=(-1+2*i) ; j++)
            printf("*");
        printf("\n");
    }
    for(i=1;i<=num;i++){
        for(x=1;x<=num-1;x++)
            printf(" ");
        printf("*\n");
    }
    for(i=1;i<=num-1-5;i++){
        printf(" ");
    }
    printf("Merry Christmas!");
}
int main(void){
    triangel(10);
    return 0;
}

2011年12月20日 星期二

100設計一甲_week15

libw15.c
#include <stdio.h>
#include <stdlib.h>

int add(int a, int b, int c) {
    return a+b+c;
}

double add2(double a, double b, double c) {
    return a+b+c;
}

int mul(int a, int b, int c) {
    return a*b*c;
}

ex1.py
#coding: utf-8
# 本程式透過 ctype 模組, 直接導入 dll 動態連結庫, 並使用其函式
from ctypes import cdll,c_int,c_double
lib = "libw15.dll"
dll = cdll.LoadLibrary(lib)
 
#add = (lambda x,y: dll.add(c_int(x), c_int(y)))
 
# 以上 lambda 函式定義與下列函式相同
def add(x,y,z):
    return dll.add(c_int(x), c_int(y), c_int(z))
 
'''
ctypes 介面僅支援整數, 長整數與字串資料型別, 若使用(雙)浮點數或其他 ctype 所不支援的
資料型別, 則必須要明確告訴 ctypes 如何進行函式傳回值的轉換, 否則無法得到精確資料
'''
 
def add2(x,y,z):
    return dll.add2(c_double(x), c_double(y), c_double(z))
 
# 指定 add2 函式的資料傳回型別為 c_double
dll.add2.restype = c_double
 
multiply = (lambda x,y,z: dll.mul(c_int(x), c_int(y), c_int(z)))
變數1 = 12
變數2 = 10
變數3 = 15
print ("變數1加上變數2加上變數3, 其值為:",add(變數1,變數2,變數3))
print ("變數1乘上變數2乘上變數3, 其值為:",multiply(變數1,變數2,變數3))
'''
15*12 = 15*2+15*10 = 150+30 = 180
15*12 = 15*2*6 = 180
'''
變數4 = 12.345
變數5 = 10.6
變數6 = 66.6
print ("變數4加上變數5加上變數6, 其值為:",add2(變數4,變數5,變數6))
123.c complier出來的dll重新命名為->sum.pyd

#include <Python.h>
int sum2(int a, int b, int c);
int sum2(int a, int b, int c){
    return a+b+c;
}
static PyObject* mod_sum(PyObject *self, PyObject *args)
{
    int a;
    int b;
    int c;
    int s;
    if (!PyArg_ParseTuple(args,"iii",&a,&b,&c))
       return NULL;
    s = sum2(a,b,c);
    return Py_BuildValue("i",s);
}
static struct PyMethodDef Mod_Methods[] = {
    {"sum", mod_sum, METH_VARARGS, "Description.."},
    {NULL,NULL,0,NULL}
};
static struct PyModuleDef ModMethods = {
   PyModuleDef_HEAD_INIT,
   "SumModule",
   "SumModule_doc",
   -1,
   Mod_Methods
};
PyMODINIT_FUNC
PyInit_sum(void)
{
    (void) PyModule_Create(&ModMethods);
}

ex2.py

'''
from sum import *
 
print(sum(10,20))
'''
import sum
 
print(sum.sum(10,20,30))
w15.c
#include<stdio.h>
#define pi 3.14159
double circlearea(double r){
    return r*r*pi;
}
int plus(int a,int b,int c){
    return a*b-c;
}
float bmi(float heigh,float weight){
    return weight/(heigh*heigh);
}

char *mystring(char str[]){
    return str;
    //printf("%s",str);
}

int main(void) {
    printf("%e\n",circlearea(1.));
    printf("%d\n",plus(1.5,6,5));
    printf("%d\n",plus(1,6,5));
    printf("%f\n",bmi(1.8,60));
    printf("%s\n",mystring("asd"));
    mystring("asd");
    return 0;
}

100設計一甲_week14

http://blog.kmol.info/?p=617
講解範例1~4、8~10。

2011年12月6日 星期二

100設計一甲_week13

#include<stdio.h>
void fun1(){
    int i=0;
    printf("while test1----\n");
    while(i<15){
        printf("%d\n",i);
        i++;
    }
    i=15;
    printf("while test2----\n");
    while(i){
        printf("%d\n",i);
        i--;
    }
    printf("for test1----\n");
    for(i=0;i<15;i++){
        printf("%d\n",i);
    }
}
int main(){
    int num1 = 123;
    float num2 = 3.14159;
    double num3 = 3.14159e-3;
    char name1[6] = {'h','e','l','l','o','\0'};
    char name2[6] = "hello";
    /*
    字串最後必須加上結束\0字元,代表字串結束
    hello 為五個字元 但最後必須加上\0,所以為六個字元。
    */
    printf("%d\n", num1);
    printf("%f\n", num2);
    printf("%e\n", num3);
    printf("%s\n", name1);
    printf("%s\n", name2);
    printf("%c\n", name1[1]);
    printf("%c\n", name2[1]);
    fun1();
    return 0;
}

2011年11月29日 星期二

100設計一甲_week12 小考答案

exam1.c
#include<stdio.h>
void q1(){
  int i;
  int num1=0,num3=0;
  int total=0;
  for(i=399;i<=8993;i++){
    num1=i%10;
    num3=(i/100)%10;
    if((num1+num3)==11){
      total+=i;
    }
  }
  printf("%d\n",total);  
}
void q2(){
  int i;
  int num1=0,num3=0;
  int total=0;
  for(i=359;i<=8691;i++){
    if(i%7==0 && i%2==0){
      total+=i;
    }
  }
  printf("%d\n",total);  
}
void q3(){
  int i;
  int num1=0,num3=0;
  int total=0;
  for(i=95;i<=8505;i++){
    if(i%14!=0){
      total+=i;
    }
  }
  printf("%d\n",total);  
}
void q4(){
  int i=0,j=0;
  int total=0;
  for(i=473;i<=8393;i++){
    int count=0;
    j=i;
    while(j!=0 && count==0){
      if(j%10==3||j%10==6||j%10==8)
        count++;
      j=j/10;
    }
    if(count!=0)
      total+=i;
  }
  printf("%d\n",total);  
}
void q5(){
  int i;
  int num1=0,num3=0;
  int total=0;
  for(i=486;i<=8817;i++){
    num1=i%10;
    num3=(i/100)%10;
    if((num1*num3)==16)
      total+=i;
  }
  printf("%d\n",total);  
}
int main(){
  q1();
  q2();
  q3();
  q4();
  q5();
  return 0;
}
exam2.py
def q1():
  total=0;
  for i in range(399,8993+1):
    num1=i%10;
    num3=int(i/100)%10;
    if((num1+num3)==11):
      total+=i;
  print(total)
def q2():
  total=0
  for i in range(359,8691+1):
    if(i%7==0 and i%2==0):
      total+=i
  print(total)
def q3():
  total=0
  for i in range(95,8505+1):
    if(i%14!=0):
      total+=i
  print(total)
def q4():
    total=0
    for 索引 in range(473,8393+1):
        if str(索引).find("3") != -1 or str(索引).find("6") != -1 or str(索引).find("8") != -1:
          total+=索引
    print(total)
    
def q5():
  total=0;
  for i in range(486,8817+1):
    num1=i%10;
    num3=int(i/100)%10;
    if((num1*num3)==16):
      total+=i;
  print(total)
q1()
q2()
q3()
q4()
q5()

100設計一甲_week12

example1.c
#include<stdio.h>
int main(){
    int num1 = 123;
    float num2 = 3.14159;
    double num3 = 3.14159e-3;
    char name1[6] = "hello";
    char name2[6]={'h','e','l','l','o','\0'};
    /*
    字串最後必須加上結束\0字元,代表字串結束
    hello 為五個字元 但最後必須加上\0,所以為六個字元。
    */
    printf("%d\n", num1);
    printf("%f\n", num2);
    printf("%e\n", num3);
    printf("%s\n", name1);
    printf("%s\n", name2);
    printf("%c\n", name1[1]);
    printf("%c\n", name2[1]);
    return 0;
}

Python Module in C 動態教學(Save as...)

Python_module.7z

tcc_gnuplot3.7z

2011年11月22日 星期二

100設計一甲_week11

example1.c
#include<stdio.h>
int main(){
    printf("hello c!\n");
    return 0;
}
example2.c
#include<stdio.h>
int main(){
    printf("hello c!\n");
    int i=0;
    for(i=0;i<10;i++){
        printf("%d\n",i);
    }
    return 0;
}
example3.c
#include<stdio.h>
int main(){
    int i=0;
    for(i=0;i<=100;i++){
        if(i<=40){
           printf("C score:%d\n",i); 
        }
        else if(i<=70){
           printf("B score:%d\n",i); 
        }
        else{
           printf("A score:%d\n",i); 
        }
    }
    return 0;
}
/*
班級從1到最後一號
假如號碼是偶數 後面請加even
假如號碼是奇數 後面請加odd
依次序印出
*/

2011年11月15日 星期二

100設計一甲_week10

tkinter.py
#coding: utf-8
from tkinter import *
# 導入所有的數學函式
from math import *

# 導入數學函式後, 圓周率為 pi
# deg 為角度轉為徑度的轉換因子
deg = pi/180.

frame=Frame()
frame.master.title("繪圖範例")
frame.pack()

canvas = Canvas(width=800, height=800, bg='white') 
canvas.pack(expand=YES, fill=BOTH)

def plotline():
    for i in range(0, 500, 50): 
        canvas.create_line(0, i, 500, i)
        #canvas.create_line(i, 0, i, 500)

def polygon(r=100,cx=150,cy=150,offset=30):
    for i in range(270,270+360,offset):
        x0=cx+r*cos(i*deg)
        y0=cy+r*sin(i*deg)
        x1=cx+r*cos((i+offset)*deg)
        y1=cy+r*sin((i+offset)*deg)
        canvas.create_line(x0,y0,x1,y1)
def plot():
  for i in range(0,600,30):
    canvas.create_line(400-i,350-i, 500+i,350-i)
    canvas.create_line(500+i,350-i, 500+i,450+i)
    canvas.create_line(500+i,450+i, 400-i,450+i)
    canvas.create_line(400-i,450+i, 400-i,350-i)

plotline()
polygon()

mainloop()
find.py
s="applenkajkljkhapplejgaa"
pos=0
count=0
while(1):
    pos=s.find("apple",pos)
    if(pos==-1):
        break
    pos=pos+1
    count=count+1
print(count)

print(s.count("apple"))

2011年11月8日 星期二

100設計一甲_week7

#Q1
#輸入一字串10字元將字串內容中的英文,小轉大寫,其餘照常印出。
def q1():
    string=input("輸入一字串10字元:")#輸入字串
    for i in range (0,len(string)):#len()測量字串長度
        #判斷字元是否在需轉換範圍內
        if(ord('A')<=ord(string[i])<=ord('Z')):#ord 將字元轉ascii dec
            print(chr(ord(string[i])+32),end="")#chr 將整數轉成字元
        #其餘正常印出
        else:
            print(string[i],end="")
#Q2
#你拿到一個整數(4位數),卻忍不住想把每個位數都乘在一起。
def q2():
    total=1
    num=input("輸入數字 n:")
    for i in range(0,len(num)):
        total*=int(num[i])#轉成整數
    print(total)
#Q3
#輸入身高(cm)體重(kg),求BMI值並依照其BMI值印出體重分級與BMI,BMI需印至小數第一位。
def q3():
    weight=float(input("輸入體重(kg)"))
    heigh=float(input("輸入身高(cm)"))/100 #cm轉m 除100
    BMI=weight/(heigh*heigh)
    if(BMI < 18.5):                       #判斷BMI之範圍
            print("%.1f 體重過輕"%(BMI))

    elif(18.5 <= BMI <24):
            print("%.1f 正常範圍"%(BMI))

    elif(24 <= BMI < 27):
            print("%.1f 過    重"%(BMI))

    elif(27 <= BMI < 30):
            print("%.1f 輕度肥胖"%(BMI))

    elif(30 <= BMI < 35):
            print("%.1f 中度肥胖"%(BMI))

    else:
            print("%.1f 重度肥胖"%(BMI))
#Q4
#由1到100,印出其中只含有3,不含有4,6,9的數值。
def q4():
    for 索引 in range(1,101):
        if str(索引).find("3") != -1:
            if str(索引).find("4") == -1 and str(索引).find("6") == -1 and str(索引).find("9") == -1:
                #find()找尋字串中是否有符合的字元 如果沒有則為-1 有則為符合字元的位置,底下q4find()函式為測試find的使用例子。
                print(索引)
#Q5
#平方公尺轉坪數,輸入幾平方公尺,輸出幾坪。
#公式:坪數 = 平方公尺 * 0.3025 (固定)
def q5():
    平方公尺=float(input("輸入幾平方公尺:"))#輸入可能帶有小數,因此轉為浮點數。
    print(平方公尺*0.3025)

def q4find():
    for i in ["taiwan","people"]:
        print(i.find("w"))
        

2011年10月29日 星期六

100設計一甲_week6_模擬考答案

#1.
def q1():
    a=input("姓名")
    b=input("學號")
    c=input("班級")
    print(a,b,c)

#2.
def q2():
    i=1
    while(i<301):
        print(i)
        i+=1

    for i in range(1,301):
        print(i)

#3.
def q3():
    sum = 0
    for i in range(1,301):
        sum = sum + i
    print(sum)

#4.
# -*- coding: utf-8 -*-
def q4():
    name = input("Please enter a character string: ")
    print("The string capitalized is ", end="")
    for i in range(0,6):
        dec = int(ord(name[i]))
        newstr = chr(dec-32)
        print(newstr,end="")
    print()

#5.
def q5(R):
    print(R*R*3.14159265)

2011年10月25日 星期二

100設計一甲_week6_模擬考

1.使用input()函式輸入三個變數值(姓名 學號 班級)並輸出(Hint : input使用)
2.使用while以及for 各自印出從1到300的各個整數
3.用迴圈,計算1~300的總合(Hint : for while方式不限)
4.輸入6個字元的字串(英文小寫)轉成大寫輸出( Hint : input(),ord(),chr() )
5.使用自訂函式,計算圓面積,輸入R(半徑),R必須為函式之引數,試求面積(Hint : 需使用自訂函式,pi = 3.14159265)


100設計一甲_week6本週注意事項

本周三上課時模擬考(或下週),考試時需要用到耳機,也請各位同學上課時請攜帶電腦用耳機。
感謝配合,祝考試順利!(本週和和下週都要戴)

2011年10月19日 星期三

Cherrypy指定外連IP

語法如下:
cherrypy.server.socket_host='192.168.xxx.xxx'

查詢電腦IP指令:
ipconfig /all

100設計一甲_week5


#print()<---在python 3裡print是一個函數 所以必須加上括號 與之前python版本print不同
#input()<---輸入,輸入進來的型態為str
#str()<---將()內轉換成字串
def ex1():
  yourname = input("Please input your English name:")
  for i in range(0,4):
      print(yourname[i]+" ASCII value is "+str(ord(yourname[i])))

#輸入4字元的字串
#ord()轉換()內字元所對應的ascii瑪
#chr()轉換()內數字所對應的字元<---須為int
def ex2():
  var = input("Please enter a four character string:")
  print("The string capitalized is ",end="")
  for i in range(0,4):
      print(chr(ord(var[i])-32),end="")
  print()
#mpg mile per gallon
#求每一加侖所跑的里程
#輸入miledorve、gallon
#miledorve/gallon=每加侖所跑的miles
def ex3():
  miledrove = float(input("Please enter the miles you drove:"))
  gallons = float(input("Please enter the gallons \
  of gas you put in the tank:"))
  print("You got",str(miledrove/gallons),"mpg on that tank of gas.")
  
#美元與外國幣值稅換
#以美國為主所以要查美國相對於各國的匯率
#rate此函式中代表匯率
#結果應該是 所要稅換的錢幣*匯率
def ex4():
  dollars = float(input("What is the amount of US \
  Dollars you wish to convert? "))
  rate = float(input("What is the current exchange \
  rate (1~US Dollar equals what in the Foreign Currency)? "))
  print("The amount in the Foreign Currency is $%.2f"%(dollars*rate))
#以list來做9*9乘法表
#必須清楚for迴圈內的動作,變數的變動
#了解如何存取list內的內容
def ex5():
  N=list(range(1,10))#[1,2...9]
  X=list(range(1,10))#[1,2...9]
  for i in N:
    for y in X:
      print(i,"*",y,"=",i*y,end="\t")
    print()
def ex6():
  N=list(range(20,31))#[20,21,22...30]
  X=list(range(20,31))#[20,21,22...30]
  for i in N:
    for y in X:
      print("%3d * %3d =%4d"%(i,y,i*y),end="\t")
    print()
#店員找錢
#使用while迴圈 應找的錢(change) dollars(各種錢幣) pay(應找的硬幣數)
#每一次迴圈 把當時所要找的錢除目前使用的硬幣 得到其商 就是這種硬幣要找的數量
#找完一次,必須要把找的錢與已給的錢(硬幣直*找的硬幣數量)相減
#迴圈直到要找的錢為0時,結束迴圈
def pay():
  change=int(input("input how much you should pay:"))
  dollars=[100,50,10,5,1]
  pay=[0,0,0,0,0]
  i=0
  while(change!=0):
    coin=change//dollars[i]
    pay[i]=coin
    change=change-coin*dollars[i]
    i+=1
  print(pay)
  for num in range(0,5):
    print("%3d : %d 張"%(dollars[num],pay[num]))
pay()

2011年10月11日 星期二

100設計一甲_week4



#有關進位

#98436145310十進位
#0123456789ABCDEF十六進位
#0101101010二進位


#print(0b01101100)
#print(hex(108))
#print(0x6c)
#print(bin(108))
#print(bin(108))


def eight_bit(mystr):
  return (int(mystr[0])*2**7+int(mystr[1])*2**6+int(mystr[2])*2**5+
  int(mystr[3])*2**4+int(mystr[4])*2**3+int(mystr[5])*2**2+int(mystr[6])*2**1+int(mystr[7])*2**0)

#print(eight_bit("01101100"))



#請編寫一個簡單的互動式程式, 程式列印出”請輸入您的姓名”後
#, 等待使用者輸入. 使用者輸入姓名 XXX 後, 程式列印出”XXX, 歡迎進入程式語言的世界”.
def ex0():
  var=1010.2011
  print("%20d %5.1f %s"%(var,var,var))

def ex1():
  username=input("請輸入您的姓名:")
  print(username,"歡迎進入程式語言的世界.")



#請配合練習 1.14 編寫一個能夠列印從 1 累加到 100 總和的程式.

def ex2():
  total=0
  for num in range(1,100+1):
    total=total+num
  print("The total is",total)

def ex2_1():
  total=0
  num=1
  while (num<101):
    total=total+num
    num=num+1
  print("The total is",total)



#請編寫一個能夠在列印 “請問由 1 累加到哪一個大於 1 的整數?”, 後讀取使用者輸入的整數, 
#並列印出從 1 累加到”某整數”總和的程式.

def ex3():
  usernum=int(input("請問由1累加到哪一個大於1的整數:"))
  if (usernum<1):
    print("不符合要求")
  else:
    total=0
    for num in range (1,usernum+1):
      total=total+num
    print("1累加到",usernum,"總和:",total)

#請問如何在使用者需要退出累加程式之前, 可以”一直”輸入累加極限值, 並且進行數值的累加運算?

def ex1_19_1():
  username=input("Please enter your name:")
  if(username is not None):
    for alphabet in username:
      print(alphabet,"ASCII value is",ord(alphabet))
def ex1_19_2():
  username=input("Please enter your name:")
  print("The string capitalized is")
  for alphabet in username:
    num=ord(alphabet)-32
    print(chr(num),end="")
  print()

# Date	    NTD/USD
#2011-10-07	30.493
#example iPhone 4S 16GB 199美元
#匯率稅換 US->$
def usconvert():
  dollar=float(input("What is the amount of US Dollars you wish to convert:"))
  exchange=float(input("What is the current exchange rate:"))
  print("The amount in the Foreign Currency is $",dollar*exchange)

#底下是有關1.8之問題
"""
#1.8Q4
print(eight_bit("01101100"))
#1.8Q5
print(hex(108))
#1.8Q6
print(bin(-62))
#1.8Q7
print(chr(62))
#print(hex(10))
"""
#呼叫匯率稅換函式usconvert()
#usconvert()
#有問題請在底下留言,謝謝...

2011年10月4日 星期二

100設計一甲_week3

import random

def NumericOperations(num1,num2):
  print("num1=",num1,"num2=",num2)
  print("num1+num2=",num1+num2)
  print("num1-num2=",num1-num2)
  print("num1*num2=",num1*num2)
  print("num1/num2=",num1/num2)
  print("num1//num2=",num1//num2)
  #除法之商
  print("num1%num2=",num1%num2)
  #除法之餘數
  print("num1**num2=",num1**num2)
  #num1的num2次方

def 猜數字():
  標準答案 = random.randint(1,100)
  你猜的數字 = int(input("123:"))
  猜測次數 = 1
  while 標準答案 != 你猜的數字:
      if 標準答案 < 你猜的數字:
          print("太大了,再猜一次! 加油")
      else:
          print("太小了,再猜一次!加油")
      你猜的數字 = int(input("請輸入您所猜的整數:"))
      猜測次數 = 猜測次數+1
   
  print("猜對了!總共猜了", 猜測次數, "次")

def triangle(base,high):
  #area=base*high/2
  return (base*high/2)


def tri(base,high):
  h=(base*base+high*high)**0.5
  print(h)
  #return (h)


def squre(x,n):
  ans=1
  while(n>0):
    ans=ans*x
    n=n-1
  return (ans)
print(squre(2,10))
#print(2**10)

def ex1(x,n):
  ans=0
  while x<=n:
    ans=ans+x
    x=x+1
  return (ans)
print(ex1(1,100))
#1+2+3+...+99+100

#one day one apple
def apple():
  ans="apple"
  guess=""
  count=0
  while(ans!=guess and count<10):
    print("一天一??,醫生遠離你,只能猜十次喔")
    ans=input("ans:")
    count=count+1
  if(ans!=guess):
    print("十次都沒答對.......")
  else:
    print("你答對了,猜了",count,"次,答案為一天一",ans,"醫生遠離你")

#apple()
print(triangle(3,4))
print(tri(3,4))

2011年9月27日 星期二

100設計一甲_week2

#請自行選用函式使用
#def
#if else
#ex1 num+mde 1~60 43 print None
def ex1():
  for num in range(1,60):
    if(num==43):
      print("None")
    else:
      print("Number:",40023100+num,"Department of Mechanical Design Engineering")
#ex2 num+girl or boy 43no print
def ex2():
  for num in range(1,60):
    if(num!=43):
      if(num<=10):
        print("Number:",40023100+num,"girl")
      else:
        print("Number:",40023100+num,"boy")
#ex3 socre A(81~100)B(41~80)C(1~40)
def ex3():
  for score in range(1,101):
    if(score<=40):
      print("Score:",score,"C")
    elif(score>40 and score<=80):
      print("Score:",score,"B")
    else:
      print("Score:",score,"A")

def myadd(var1, var2):
    return (var1+var2)

def myfun():
    print("Hello World!")
#ex4 funstory input bird(string)
def fun(bird):
  print("有個小姐逛街走入一家店時,")
  print("店門口有一隻",bird,"大聲的喊『歡迎光臨』。")
  print("她覺得很好奇, 想試試看這隻",bird,"是不是真的這麼聰明,")
  print("就又走了出去")
  print("結果這隻",bird,"真的對她說『謝謝光臨。』")
  print("她覺得很好玩,於是又走了進去,『歡迎光臨』。")
  print("又走了出來『謝謝光臨』。")
  print("她來來回回走了十幾次,")
  print(bird,"也一直說『歡迎光臨』,『謝謝光臨』。")
  print("於是她又走進去,")
  print("這次這隻",bird,"不再理她,")
  print("反而轉過頭去對著裡面大喊:『老闆,有人在玩你的鳥』。")


#可以直接印出回傳(return)值
print(myadd(1,2))
"""
#也可以將回傳值存在另一變數,之後將之印出
temp=myadd(1,2)
print(temp)
"""

myfun()

#fun("鸚鵡")

"""
英語小補帖(與課程無關,僅供參考)
1. You had me at hello.
0你一開口就征服我了
1你跟我說哈囉

2. Life will find its own way.
0我可以靠自己找路
1生命會自己找出口

3.Stupid is as stupid does.
0你是個笨蛋
1傻人有傻福

4. Destiny takes a hand.
0命中注定
1有錢能使鬼推磨

5. Am I reaching for the stars here?
0我是在強人所難嗎
1你很難追

6. I'll be back
0我會回來的
1我在你後面

answer:011000
"""

2011年9月20日 星期二

100設計一甲_week1

#coding: utf8
#--->代表註解,程式會跳過,繼續執行
#print()-->印出 ()內的
#ex1~6 使用,請自行削掉註解符號(#)

#ex1
print ("python!")
print ("WOW!~")
print ("python!","hello","WOW!",end="-->this is end!\n",sep="----")

###ex2
##print ("python!",end="")
##print ("WOW!~")

###ex3
##print ("python!","hello","WOW!",sep="----")

###ex4
##print ("python!","hello","WOW!",sep="----",end="-->this is end!\n")

###ex5
##for i in range (1,10):
##    print ("hi","hello","python",sep="~")

###ex6
##for i in range (1,60):
##    print ("Number:",40023100+i,"mde")

2011年9月16日 星期五

建立bat關閉Immunet 3.0服務

net stop "Immunet 3.0" /yes
請將以上內容貼入記事本並且選擇存檔類型為"所有檔案"另存為『Stop Immunet 3.0.bat』
放在隨身碟點兩下即關閉該服務,
或是直接複製該串後,按下Windows+R貼上執行。

後記:
電腦教室的防毒軟體實在很拖速度,
要進入控制台>切換到傳統檢視>系統管理工具>服務>汪洋中找到Immunet 3.0
這麼一長串的內容實在是讓人懶得去記,
而且自己電腦通常也不是裝這套防毒軟體,
乾脆做成一個可以點兩下馬上關閉的執行檔不是很快樂嗎=w=

2011年9月14日 星期三

基礎Python

Coding format FYI:http://www.python.org/dev/peps/pep-0263/
# -*- coding: utf-8 -*-
olt = [83, 78, 84, 81]
tat = [85, 90]
fit = [85]
s1 = (olt[0]+olt[1]+olt[2]+olt[3])\
*0.1
s2 = (tat[0]+tat[1])*0.15
s3 = fit[0]*0.3
print(s1+s2+s3)

#if else
number = 7
if number < 10:
    print("ture")
else:
    print("false")

#for
for i in range(0,3):
    print("Number:%d"%(i))

2011年6月21日 星期二

期末考題

一、JAVA Applet 波浪

利用五芒星來畫出波浪,
並以number變數控制其波數。

提示:
不需放在CMSimple內,直接執行程式即可,五芒星可以不必旋轉。

參考:
『Java - Wave Applet 範例』、『Java - Draw Star 範例方法』

範例結果如下:


二、CMSimple AJAX 表單輸入

在CMSimple中建立一個form表單包含三個input輸入框,
能夠輸入你自己的 班級、姓名、學號 驗證身份是否正確,
若答案正確則在CMSimple中印出身份正確,
若其中一個答案錯誤則印出身份錯誤。

條件:
1. 必須包含AJAX menu選單。

參考:
『CMSimple - my_main_function 範例plugins程式』

提示:
PHP使用if多個條件成立的使用方法如下...
if(a=="字串1" && b=="字串2" && c=="字串3") {
 echo "內容1";
} else {
 echo "內容2";
}

三、CMSimple AJAX 即時顯示

請參考『Java - Draw Applet Gear 範例方法』將其編譯並產生Class檔案,
在CMSimple中建立一個form表單包含四個input輸入框,
能夠輸入 座標x、座標y、節圓半徑rp、齒數n,
再使用Applet來顯示齒輪並能夠藉由以上參數來控制,
最後必須能夠由AJAX即時顯示在CMSimple中。

條件:
1. 必須包含AJAX menu選單。

參考:
『CMSimple - my_main_function 範例plugins程式』、『CMSimple - my_main_function 範例plugins子程式』

四、以Java Applet繪製動畫

請繪製一個寬為100的小正方形,
讓小正方形能夠持續繞著寬為500的大正方形行走,

參考:
『Java - Draw Anime Star 範例』

提示:
大正方形可以不用畫出來。

範例結果如下:



參考範例目錄

Java - Wave Applet 範例

// 在 Eclipse 執行, 以滑鼠右鍵, Run as Applet
// 在 NetBeans 執行, 則以滑鼠右鍵, 按下 Run File (系統會建立對應的 html)
// 若 Application 與 Applet 同時存在, 在 Eclipse 可以分別以滑鼠右鍵, 選擇執行
// 若 Application 與 Applet 同時存在, 在 NetBeans 按下 Run File, 僅會執行 Application
import java.applet.Applet;
import java.awt.*;

public class HelloWorld extends Applet {
 Stroke drawingStroke = new BasicStroke(2);
 // static 變數才可以在各方法中共用
 String peakNumber = "";
 int number;

 public void init() {
  peakNumber = getParameter("peakNumber");
  if(peakNumber != null) {
   // 轉成整數使用 Integer.parseInt()
   // 轉為浮點數使用 Float.parseFloat()
   number = Integer.parseInt(peakNumber);
  } else {
   // 若 peakNumber 取不到值, 則內定為 5
   number = 5;
  }
 }

 public void paint(Graphics g) {
  int i;
  Graphics2D graph = (Graphics2D)g;
  graph.setStroke(drawingStroke);
  graph.setPaint(Color.black);
  for(i=1;i<=number;i++) {
   // 每一行向下增量 20 單位
   graph.drawString("Hello World", 10, 10+i*20);
   printC(graph,i, 80, 10+i*20);
  }
  for(i=number-1;i>=1;i--) {
   // 必須考慮前半部已經增量 number*20
   graph.drawString("Hello World", 10, 10+(number+number-i)*20);
   printC(graph,i, 80, 10+(number+number-i)*20);
  }
 }

 public void stop()
 {
 }

 public void printC(Graphics g, int m, int x, int y) {
  Graphics2D graph = (Graphics2D)g;
  int i;
  for(i=0;i<m;i++) {
   graph.drawString("!", x+i*10, y);
  }
 }
}

Java - Draw Star 範例方法

 //drawstar(graph, x座標, y座標, 半徑, 旋轉角度);
 public void drawstar(Graphics g, int x, int y, int r, int angle){
  Graphics2D graph = (Graphics2D)g;
  int i,j;
  double deg = 3.14159/180.;
  double temp1, temp2, temp3, temp4;
  double[] ptt_x = new double[10];
  double[] ptt_y = new double[10];
  double[] pt_x = new double[10];
  double[] pt_y = new double[10];

  for (i=0;i<7;i++) {
   pt_x[i] = x+r*Math.sin(72.*deg*i+angle*deg);
   pt_y[i] = y-r*Math.cos(72.*deg*i+angle*deg);
   temp1 = Math.cos(54.*deg-72.*deg*i-angle*deg);
   temp2 = Math.sin(54.*deg-72.*deg*i-angle*deg);
   temp3 = Math.sin(18.*deg);
   temp4 = Math.cos(36.*deg);
   ptt_x[i] = x+r*temp3*temp1/temp4;
   ptt_y[i] = y-r*temp3*temp2/temp4;
  }

  for (i=0;i<5;i++) {
   graph.drawLine((int)pt_x[i], (int)pt_y[i], (int)ptt_x[i], (int)ptt_y[i]);
   j=i+1;
   graph.drawLine((int)ptt_x[i], (int)ptt_y[i], (int)pt_x[j], (int)pt_y[j]);
  }
 }

CMSimple - my_main_function 範例plugins程式

<?php
// 檔名:index.php
// 編寫成類別格式的程式樣版 (ready for CMSimple plugin)
// CMSimple呼叫格式「#CMSimple $output.=my_main_function();#」
// 程式的主函式
function my_main_function() {
 $myplugin = new Cmyplugin;
 return $myplugin->myplugin_main();
}

// 程式類別
class Cmyplugin{
 public $common1 = "common1";
 public $common2 = "common2";
 
 function myplugin_main() {
  $menu=$_GET["menu"];
  $printonce=0;
  
  if ($menu) {
   switch($menu) {
    case "function1":
    // could be html form or action scripts
    $output .= $this->myplugin_function1();
    $output .= $this->myplugin_printmenu();
    break;
    case "function2":
    // could be html form or action scripts
    $output .= $this->myplugin_function2();
    $output .= $this->myplugin_printmenu();
    break;
    case "function3":
    // AJAX 即時顯示範例
    $output .= $this->myplugin_function3();
    $output .= $this->myplugin_printmenu();
    break;
    case "printmenu":
    $output .= $this->myplugin_printmenu();
    break;
    default:
    // use function3 as default function
    $output .= $this->myplugin_printmenu();
   }
  } else {
   // 未指定 menu 則列出表單
   $output .= $this->myplugin_printmenu();
  }
  return $output;
 }
 
 //範例程式1 - 印出文字測試
 function myplugin_function1() {
  $output = "function 1 and some html ".$this->common1." and ".$this->common2;
  $output .= " some more html";
  return $output;
 }
 
 //範例程式2 - 印出文字測試
 function myplugin_function2() {
  $output = "function 2 and some html ".$this->common1." and ".$this->common2;
  $output .= " some more html";
  return $output;
 }
 
 //範例程式3 - AJAX 即時顯示結果
 function myplugin_function3() {
  global $sn, $su;
  $output.="
<script src=\"./jscript/prototype.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script language=\"JavaScript\" type=\"text/javascript\">
 function submitEntryForm(event) {
  var updater = new Ajax.Updater({success:'var_list',error:'error_list'}, './plugins/my_main_function/addaction.php', {
   parameters: {num1:$('num1').value, num2:$('num2').value, num3:$('num3').value}
  });
  event.preventDefault();
 }
 function addObservers(event) {
  $('entry').observe('submit', submitEntryForm);
 }
 Event.observe(window, 'load', addObservers);
</script>
<form id='entry' action='' method='post'>
 num1: <input type='text' name='num1' id='num1' value='10' /><br />
 num2: <input type='text' name='num2' id='num2' value='20' /><br />
 num3: <input type='text' name='num3' id='num3' value='30' /><br />
 <input type='submit' id='submit' value='Send' />
</form>
<div id='var_list'></div>
<div id='error_list'></div>
  ";
  return $output;
 }
 
 // 以下成員函式, 用來測試 AJAX 表單的使用
 function myplugin_printmenu() {
  global $sn,$su;
  $output.="
<script src=\"./jscript/prototype.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script src=\"./jscript/Menu.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script language=\"JavaScript\" type=\"text/javascript\">
 Menu.init(\"menu2\");
</script>
<style type=\"text/css\">
 #menu2,
 #menu2 ul { margin: 0; padding: 0; }
 #menu2 li { list-style-type: none; }
 #menu2 { font: 12px Verdana, Arial; }
 #menu2 li,
 #menu2 a { float: left; }
 #menu2 a { display: block; padding: 6px; text-decoration: none; background-color: #FFF; color: #2362AF; }
 #menu2 a:hover,
 #menu2 a.menu_open { background-color: #2362AF; color: #FFF; }
 #menu2 ul { visibility: hidden; position: absolute; width: 150px; border: 1px solid #CCC; margin-top: 1px; }
 #menu2 ul li { width: 150px; }
 #menu2 ul a { width: 144px; padding: 3px; }
 * html #menu2 ul a { width: 150px; }
 #menu2 ul a.submenu { background-image: url(\"./jscript/menu_arrow_right.gif\"); background-repeat: no-repeat; background-position: 138px 6px; }
 #menu2 ul a.submenu:hover,
 #menu2 ul a.submenu.menu_open { background-image: url(\"./jscript/menu_arrow_right_mo.gif\"); }
 #menu2 ul ul { margin-top: -1px; }
</style>

<ul id=\"menu2\">
 <li><a href=\"".$sn."?".$su."&menu=function1\">Data 1</a></li>
 <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2</a>
  <ul>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-1</a></li>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2</a>
    <ul>
     <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2-1</a></li>
     <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2-2</a></li>
    </ul>
   </li>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-3</a>
  </ul>
 </li>
 <li><a href=\"".$sn."?".$su."&menu=function3\">AJAX即時顯示</a></li>
</ul>
  ";
  return $output;
 }
}

CMSimple - my_main_function 範例plugins子程式

<?php
//檔名:addaction.php
$total = $_POST['num1'] + $_POST['num2'] + $_POST['num3'];
echo $_POST['num1']."+".$_POST['num2']."+".$_POST['num3']."=".$total;
?>

Java - Draw Gear 範例方法

 //drawgear(graph, x座標, y座標, 節圓半徑, 齒數);
 public void drawgear(Graphics g, int midx, int midy, int rp, int n){
  Graphics2D graph = (Graphics2D)g;
  int imax=15;
  int i=0;
  int j=0;
  double a=0, d=0, ra=0, rb=0, rd=0, dr=0, num=0, sigma=0,
    ang=0, ang2=0, lxd=0, lyd=0, r=0, theta=0, alpha=0,
    xpt=0, ypt=0, xd=0, yd=0, lfx=0, lfy=0, rfx=0, rfy=0;
  double pi = Math.acos(-1);
  double deg = pi/180.;

  graph.drawLine(midx, midy, midx, midy-rp);
  a = 2*rp/n;
  d = 2.5*rp/n;
  ra = rp+a;
  rb = rp*Math.cos(20*deg);
  rd = rp-d;
  dr = (ra-rb)/imax;
  num = n;
  sigma = 3.14159/(2*num)+Math.tan(20*deg)-20*deg;

  for(j=0;j<n;j++) {
   ang = -2.*j*pi/num+sigma;
   ang2 = 2.*j*pi/num+sigma;
   lxd = midx+rd*Math.sin(ang2-2.*3.14159/num);
   lyd = midy-rd*Math.cos(ang2-2.*3.14159/num);
   xd = rd*Math.sin(-ang);
   yd = rd*Math.cos(-ang);
   for(i=0;i<=imax;i++) {
    r = rb+i*dr;
    theta = Math.sqrt((r*r)/(rb*rb)-1.);
    alpha = theta - Math.atan(theta);
    xpt = r*Math.sin(alpha-ang);
    ypt = r*Math.cos(alpha-ang);
    if(i==0) {
     graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xd), (int)(midy-yd));
    }
    graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xpt), (int)(midy-ypt));
    if(i==imax) {
     lfx = midx+xpt;
     lfy = midy-ypt;
    }
   }
   /*the line from last end of dedendum point to the recent
   end of dedendum point*/
   graph.drawLine((int)lxd, (int)lyd, (int)(midx + xd), (int)(midy - yd));

   for(i=0;i<=imax;i++) {
    r = rb+i*dr;
    theta = Math.sqrt((r*r)/(rb*rb)-1.);
    alpha = theta-Math.atan(theta);
    xpt = r*Math.sin(ang2-alpha);
    ypt = r*Math.cos(ang2-alpha);
    xd = rd*Math.sin(ang2);
    yd = rd*Math.cos(ang2);
    if(i==0) {
     graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xd), (int)(midy-yd));
    }
    graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xpt), (int)(midy-ypt));
    if(i==imax) {
     rfx = midx+xpt;
     rfy = midy-ypt;
    }
   }
   graph.drawLine((int)lfx, (int)lfy, (int)rfx, (int)rfy);
  }
 }

Java - Draw Anime Star 範例

import java.applet.Applet;
import java.awt.*;

public class MovingHelloWorld extends Applet implements Runnable{
 Stroke drawingStroke = new BasicStroke(2);
 String peakNumber = "";
 int number;
 int frame, delay = 13;
 Thread animator;
 boolean frozen = false;
 Dimension offDimension;
 Image offImage;
 Graphics offGraphics;
 double deg=3.14159/180.;
 int pos_x=0;
 int vel_x=1;
 int pos_y=0;
 int vel_y=1;
 int bound_x=200;
 int bound_y=200;

 public void init() {
  setBackground(Color.white);
  peakNumber = getParameter("peakNumber");
  if(peakNumber != null) {
   number = Integer.parseInt(peakNumber);
  } else {
   number = 3;
  }
 }

 public void start() {
  if (frozen) {
  } else {
   if (animator == null) {
    animator = new Thread(this);
   }
   animator.start();
  }
 }

 // 利用繪圖物件變數 g 執行每一影格的繪圖
 public void paintFrame(Graphics g) {
  int i;
  // 將 g 轉換為 Graphics2D 物件格式, 然後將位址指給 graph 繪圖物件
  // 實際執行繪圖的物件為 graph
  Graphics2D graph = (Graphics2D)g;
  // 有關繪筆種類 (選擇筆觸格式)
  Stroke stroke =
  //new BasicStroke (15.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 
  new BasicStroke (2.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); 
  //graph.setStroke(drawingStroke);
  graph.setStroke(stroke);
  graph.setPaint(Color.black);
  
  if (pos_x < 0) {    // 列印位置碰到左邊界時, 位置歸零, 並且改變速度方向
   pos_x = 0;      // 將 x 列印位置歸零
   vel_x = -vel_x;    // 改變速度方向.
  } else if (pos_x > bound_x) {   // 列印位置碰到右邊界時, 位置設為右邊頂值, 並且改變速度方向
   pos_x = bound_x;   // 將 x 列印位置停在右邊邊界
   vel_x = -vel_x;    // 改變速度方向
  }
  // x 列印位置, 以 vel_x 的速度進行增量
  pos_x += vel_x;
  
  if (pos_y < 0) {    // 列印位置碰到左邊界時, 位置歸零, 並且改變速度方向
   pos_y = 0;      // 將 y 列印位置歸零
   vel_y = -vel_y;    // 改變速度方向.
  } else if (pos_y > bound_y) {   // 列印位置碰到右邊界時, 位置設為右邊頂值, 並且改變速度方向
   pos_y = bound_y;   // 將 y 列印位置停在右邊邊界
   vel_y = -vel_y;    // 改變速度方向
  }
  // y 列印位置, 以 vel_y 的速度進行增量
  pos_y += vel_y;

  // 畫出旋轉的 drawstar
  drawstar(graph, 100+pos_x, 100+pos_y, 30, frame);
 }

 public void stop() {
  animator = null;
  offImage = null;
  offGraphics = null;
 }
 
 public void run() {
  long startTime = System.currentTimeMillis();
  while (Thread.currentThread() == animator) {
   frame++;
   repaint();
   try {
    startTime +=delay;
    Thread.sleep(Math.max(0, startTime-System.currentTimeMillis()));
   } catch (InterruptedException e) {
    break;
   }
  }
 }

 public boolean mouseDown(Event e, int x, int y) {
  if (frozen) {
   frozen = false; start();
  } else {
   frozen = true; stop();
  }
  return true;
 }

 // 更新繪圖畫面
 public void update( Graphics g ) {
  Dimension d = getSize();
  offImage = createImage(d.width, d.height);
  offGraphics = offImage.getGraphics();
  offGraphics.setColor(getBackground());
  offGraphics.fillRect(0, 0, d.width, d.height);
  offGraphics.setColor(Color.black);
  paintFrame(offGraphics);
  g.drawImage(offImage, 0, 0, null);
 }
 
 //drawstar(graph, x座標, y座標, 半徑, 旋轉角度);
 public void drawstar(Graphics g, int x, int y, int r, int angle){
  Graphics2D graph = (Graphics2D)g;
  int i,j;
  double deg = 3.14159/180.;
  double temp1, temp2, temp3, temp4;
  double[] ptt_x = new double[10];
  double[] ptt_y = new double[10];
  double[] pt_x = new double[10];
  double[] pt_y = new double[10];

  for (i=0;i<7;i++) {
   pt_x[i] = x+r*Math.sin(72.*deg*i+angle*deg);
   pt_y[i] = y-r*Math.cos(72.*deg*i+angle*deg);
   temp1 = Math.cos(54.*deg-72.*deg*i-angle*deg);
   temp2 = Math.sin(54.*deg-72.*deg*i-angle*deg);
   temp3 = Math.sin(18.*deg);
   temp4 = Math.cos(36.*deg);
   ptt_x[i] = x+r*temp3*temp1/temp4;
   ptt_y[i] = y-r*temp3*temp2/temp4;
  }

  for (i=0;i<5;i++) {
   graph.drawLine((int)pt_x[i], (int)pt_y[i], (int)ptt_x[i], (int)ptt_y[i]);
   j=i+1;
   graph.drawLine((int)ptt_x[i], (int)ptt_y[i], (int)pt_x[j], (int)pt_y[j]);
  }
 }
}

2011年6月7日 星期二

POST & PHP外部輸入值給java

function control()
  {
 global $sn,$su;
 $output="<form method=\"post\" action=".$sn."?".$su."&menu=entercontrol>";
 $output.="x:<input type=\"text\" name=\"x\" value=\"350\"><br/>";
 $output.="y:<input type=\"text\" name=\"y\" value=\"150\"><br/>";
 $output.="r:<input type=\"text\" name=\"r\" value=\"30\"><br/>";
 $output.="angle:<input type=\"text\" name=\"angle\" value=\"0\"><br/>";
 $output.="<input type=\"submit\" value=\"send\">";
 $output.="</form>";
    return $output;
  }

 function entercontrol(){
  $x=$_POST["x"];
  $y=$_POST["y"];
  $r=$_POST["r"];
  $angle=$_POST["angle"];
  $output.="<applet codebase=\"plugins/my_main_function\" code=\"drawstar.\" height=\"450\" width=\"450\">";
  $output.="<param name=\"peakNumber\" value=x/>"; //param name 對應給值之變數名稱 value 值
  $output.="<param name=\"origx\" value=\"$x\"/>";
  $output.="<param name=\"origy\" value=\"$y\"/>";
  $output.="<param name=\"r\" value=\"$r\"/>";
  $output.="<param name=\"angle\" value=\"$angle\"/>";
  $output.="</applet>";
  return $output;
 }

2011 c2期中考後的小考-題目

第一題 (30%)
請使用 java+awt套件 繪製出三角形、梯形、菱形,圖形尺寸自訂。
並利用number變數控制展示圖形,如 number=1 時展示三角形,number=2 時展示梯形、number=3 時展示菱形。
參考資料:[url]http://blog.kmol.info/?p=385[/url]

第二題 (30%)
請將下列PHP程式碼由函式形式改為類別形式。
參考資料:[url]http://blog.kmol.info/?p=376[/url]

程式碼:
<?php
$m=10;
//$m=$_GET["m"];
//$color=$_GET["color"];
$color="red";

printallH($m);
for($i=0;$i<$m-2;$i+=1)
{
    printheadtailH($m);
}
printallH($m);

function printallH($m)
{
    // 函式目的,由 $m 變數控制列印 H 的個數,全部列印相同的 H
    for($i=1;$i<=$m;$i+=1)
    {
        echo "H";
    }
    // 印完後,跳行
    echo "<br>";
}
function printheadtailH($m)
{
    global $color;
    // 列印只有頭尾是 H ,其餘是空白
    echo "H";
    for($i=1;$i<=$m-2;$i+=1)
    {
        // 採用 css 控制列印字元顏色,將 orange 改為 white,可以列出白色字元
        echo "<span style=\"color:".$color."\">H</span>";
        //echo "<span style="color:white">H</span>";
    }
    echo "H";
    echo "<br>";
}
?>

第三題 (20%)
請將下列 java 程式碼編譯,並改成 CMSimple Plugins 且在 CMSimple 底下執行,可與第四題一起展示。
Hint:注意package drawstar,須放置在drawstar目錄底下,可自由更改。
Hint:注意檔案名稱必須為Main.java。
參考資料:[url]http://blog.kmol.info/?p=437[/url]

程式碼:
package drawstar;

import java.applet.Applet;
import java.awt.*;

// for Frame Exit
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Main extends Applet {

    Stroke drawingStroke = new BasicStroke(2);
    // static 變數才可以在各方法中共用
    static String setorigx = null;
    static String setorigy = null;
    static String setr = null;
    static String setangle = null;
    static float origx,origy,r,angle;

    public void init() {
        // getParameter 取得字串值
        setorigx = getParameter("origx");
        setorigy = getParameter("origy");
        setr = getParameter("r");
        setangle = getParameter("angle");
        if(setorigx!=null && setorigy!= null && setr!=null && setangle!= null ) {
            // 轉成整數使用 Integer.parseInt()
            // 轉為浮點數使用 Float.parseFloat()
            origx = Integer.parseInt(setorigx);
            origy = Integer.parseInt(setorigy);
            r = Integer.parseInt(setr);
            angle = Integer.parseInt(setangle);
        } else {
            // 若 peakNumber 取不到值, 則內定為 5
            origx=150;
            origy=150;
            r=30;
            angle=180;
        }
    }

    public void paint(Graphics g) {
        int i,j;
        float x,y;
        double temp1,temp2,temp3,temp4;
        double degree=3.14159/180.0;
        double[] ptx=new double[6];
        double[] pty=new double[6];
        double[] pttx=new double[6];
        double[] ptty=new double[6];
        Graphics2D graph = (Graphics2D)g;
        graph.setStroke(drawingStroke);
        graph.setPaint(Color.black);

        for(i=0;i<6;i++) {
            ptx[i]=origx+r*Math.sin(72.*i*degree+angle*degree);
            pty[i]=origy+r*Math.cos(72.*i*degree+angle*degree);

            temp1= Math.cos(54.*degree-72.*degree*i-angle*degree);
            temp2= Math.sin(54.*degree-72.*degree*i-angle*degree);
            temp3= Math.sin(18.*degree);
            temp4= Math.cos(36.*degree);
            pttx[i]=origx+r*temp3*temp1/temp4;
            ptty[i]=origy+r*temp3*temp2/temp4;
        }
        for(i=0;i<5;i++) {
            graph.drawLine((int)ptx[i], (int)pty[i], (int)pttx[i], (int)ptty[i]);
            j=i+1;
            graph.drawLine((int)pttx[i], (int)ptty[i], (int)ptx[j], (int)pty[j]);
        }
    }

    public void stop() {
       
    }

    public void printC(Graphics g, int m, int x, int y){
        Graphics2D graph = (Graphics2D)g;
        int i;
        for(i=0;i<m;i++) {
            graph.drawString("!", x+i*10, y);
        }
    }

    public static void main(String[] args) {
        Applet applet = new Main();
        Frame frm = new Frame("我的主方法(函式)框架");
        frm.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        frm.setSize(100, 100);
        frm.setVisible(true);
        // 將 applet 加入 Frame 中
        frm.add(applet);
        frm.setSize(300, 300);
        frm.setVisible(true);
        applet.init();
    }
}

第四題 (20%)
利用第三題編譯好之java程式,透過 CMSimple Plugins 控制其參數,並在 CMSimple 底下執行,可與第三題一起展示。
Hint:控制變數之名稱分別為 origx(x軸位置)、origy(y軸位置)、r(半徑)、angle(旋轉角度)。
參考資料:[url]http://blog.kmol.info/?p=437[/url]

2011年5月28日 星期六

兩行reg碼進行系統防寫

日前教授在部落格放了一個隨身碟防寫小軟體,學生捉了後其實有點驚嚇到...因為圖示打了個大叉叉,猶豫了許久打開了該軟體竟然又亂碼,所以稍微找了下,看到電腦不難部落格有reg改法如下:

防寫:


解除:


事實上只要將以上內容貼入記事本並且選擇存檔類型為"所有檔案"另存為『lockusb.bat』與『unlockusb.bat』即可。
如此一來就有兩個方便開關的執行檔,也不用擔心這個程式到底有沒有問題,畢竟只是兩行純文字...。

使用方法:
1.插入隨身碟前執行防寫命令。

懶人用...防寫解除

本人僅在XP測試,至於Vista、Windows7不曉得是否也行的通。

2011年5月10日 星期二

MDE電腦教室防隨身碟病毒小工具(已無效)

聲明:
本工具只能建立阻擋病毒侵入隨身碟的資料夾,
病毒清單是我大學到研究所蒐集同學們隨身碟曾經中過的病毒而來,
因此不能保證所有病毒都能夠阻擋,
原理很簡單,就是利用微軟BUG來創造無法刪除的資料夾。


用法:
1. 需要一顆正常還沒遭受病毒污染,純樸的隨身碟。
2. 把小工具解壓縮到隨身碟根目錄,假設你在Q槽,就請放在Q槽。
3. 請輕輕點兩下小工具並鍵入數字 1 後按下ENTER。
4. 沒了。
5. 就說沒了咩...
6. 不想用就鍵入 2 按下ENTER ~


載點:
SafeUSB.zip


後記:
因為Yen老師灌的第二個系統非常乾淨,
這個工具已經很久很久都沒有拿出來用,
但是前陣子教授有說過其它老師在它裝的系統亂灌軟體,
導致這個系統也開始變得不健康,
今天又剛好有同學晚上輔導中了頭獎,
所以我這個抵抗隨身碟病毒的工具只好再拿出來用了-.-


PS:有中毒的同學可以把你的病毒檔案名稱提供給我進行改版。


2011.5.17補充:
電腦教室有更強的病毒,
現在這招已經擋不住啦~

java applet drawstar

畫星星函式
public void cad_drawstar(Graphics g,int x,int y,int r,int angle)
  {
        Graphics2D graph = (Graphics2D)g;
        double deg,temp1,temp2,temp3,temp4;
        deg=3.14159/180.0;
        double pt_x[] = new double[7]; //java 宣告陣列 格式
        double pt_y[] = new double[7];
        double ptt_x[] = new double[7];
        double ptt_y[] = new double[7];
        int i,j;
        for (i=0;i<7;i++){
          pt_x[i]=x+r*Math.sin(72.*deg*i+angle*deg); //sin cos 三角函數 使用格式 Math.
          pt_y[i]=y-r*Math.cos(72.*deg*i+angle*deg);
          temp1=Math.cos(54.*deg-72.*deg*i-angle*deg);
          temp2=Math.sin(54.*deg-72.*deg*i-angle*deg);
          temp3=Math.sin(18.*deg);
          temp4=Math.cos(36.*deg);
          ptt_x[i]=x+r*temp3*temp1/temp4;
          ptt_y[i]=y-r*temp3*temp2/temp4;
        }
        for (i=0;i<5;i++){
          graph.drawLine((int)pt_x[i],(int)pt_y[i],(int)ptt_x[i],(int)ptt_y[i]); 
          //graph.drawLine 內的點必須是 int 因此把double 等變數強制轉換
          j=i+1;
          graph.drawLine((int)ptt_x[i],(int)ptt_y[i],(int)pt_x[j],(int)pt_y[j]);
        }
    }

php call java in cmsimple
<?php
 function HelloWorldApp(){
  $output="<applet codebase=\"plugins/test\" code=\"HelloWorldApp\" height=\"500\" width=\"500\"></applet>";
  return $output;
 }
?>

2011年5月3日 星期二

Java Applet HTML 新舊版嵌入語法

Class 檔案嵌入

舊版 HTML4 :
<applet codebase="Hello/World" code="HelloWorld.class" height="500" width="500">
<param name="Number" value="1" />
</applet>

新版 HTML5 (測試階段):
<object type="application/x-java-applet" codebase="Hello/World" code="HelloWorld.class" height="500" width="500">
<param name="Number" value="9" />
</object>


Jar 檔案嵌入

舊版 HTML4 :
<applet archive="Hello/World" code="HelloWorld.jar" height="500" width="500">
<param name="Number" value="8" />
</applet>

新版 HTML5 (測試階段):
<object type="application/x-java-applet" archive="Hello/World" code="HelloWorld.jar" height="500" width="500">
<param name="Number" value="7" />
</object>

c php applet

c 將波浪寫入txt檔
#include <stdio.h>
#include <stdlib.h>
void helloworld(int e){
  FILE *fp1;
  fp1=fopen("output.txt","w");
  int s,point;
  for(s=1;s<=e;s++){
    fprintf(fp1,"Hello World"); //fprintf主要目的是供你將資料,以格式化方式寫入某檔案內
    /*fprintf( )和printf( )兩者唯一的差別是,
    printf( )會將資料列印在螢幕上,而fprintf( )會將資料列印在某個檔案內。*/
    for(point=1;point<=s;point++){
      fprintf(fp1,"!");
    }
    fprintf(fp1,"\n");
  }
  for(s=e-1;s>0;s--){
    fprintf(fp1,"Hello World");
    for(point=1;point<=s;point++){
      fprintf(fp1,"!");
    }
    fprintf(fp1,"\n");
  }
    fclose(fp1);
}
int main(int argc, char** argv) { //
    int number;
    if(argc > 1)
        number = (int)atoi(argv[1]);
    else
        number = 50;
    helloworld(number);
    return 0;
}

php 取得值並呼叫c執行檔
<?php
/**************************************************
 File:phpCallexe.php
 Name:執行exe
 Explain:呼叫C語言並執行
****************************************By QQBoxy*/

if(isset($_GET['n']))
 $num = $_GET['n'];
else
 $num = 20;

$cmd = exec('c1.exe '.$num);
execInBackground($cmd);
echo 'It OK!!';

//-------------------------------------------------------
function execInBackground($cmd) {
     if (substr(php_uname(), 0, 7) == "Windows"){
         pclose(popen("start /B ".$cmd."", "r"));
     }
     else {
         exec($cmd." ".$num." > /dev/null &"); 
     }
}
//-------------------------------------------------------
?>


import java.applet.Applet;
import java.awt.*;

// for Frame Exit
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class HelloWorldApp extends Applet {

       Stroke drawingStroke = new BasicStroke(2);

       public void init()
   {

   }

   public void paint(Graphics g) {
            int i,p;
            String peakNumber = "";
            peakNumber = getParameter("peakNumber");
            if(peakNumber != null) {
                    // 轉成整數使用 Integer.parseInt()
                    // 轉為浮點數使用 Float.parseFloat()
                    p = Integer.parseInt(peakNumber);
            } else {
                    // 若 peakNumber 取不到值, 則內定為 5
                    p = 10;
            }
            
      Graphics2D graph = (Graphics2D)g;
      graph.setStroke(drawingStroke);
      graph.setPaint(Color.black);
             for(i=1;i<=p;i++)
             {
        graph.drawString("Hello World", 10, 10+i*20);
               printC(graph,i, 80, 10+i*20);
              }
             for(i=p-1;i>=1;i--)
             {
        //graph.drawString("Hello World", 10, 10+(10+10-i)*20);
               //printC(graph,i, 80, 10+(10+10-i)*20);
               graph.drawString("Hello World", 10, 20+10+(2*p-1)*20-20*i);
               printC(graph,i, 80, 20+10+(2*p-1)*20-20*i);
              }
   }

   public void stop()
   {

   }

         public void printC(Graphics g, int m, int x, int y){
            Graphics2D graph = (Graphics2D)g;
            int i;
            for(i=0;i<m;i++)
            {
      graph.drawString("!", x+i*10, y);
            }
          }

    public static void main(String[] args) {

        Frame frm = new Frame("我的主方法(函式)框架");
        Applet applet = new HelloWorldApp();

        frm.addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent e)
          {
            System.exit(0);
          }
        });

        frm.setSize(100, 100);
        frm.setVisible(true);

        // 將 applet 加入 Frame 中
        frm.add(applet);
        frm.setSize(300, 300);
        frm.setVisible(true);
        applet.init();
        } // 結束 main

        /* Command Lines
        int i = 0;
        for(i=1;i<=10;i++)
        {
            System.out.print("Hello World");
            printC(i);
            System.out.print("\n");
        }

        for(i=9;i>=1;i--)
        {
            System.out.print("Hello World");
            printC(i);
            System.out.print("\n");
        }
    }
    static void printC(int m){
        int i;
        for(i=0;i<m;i++)
        {
            System.out.print("!");
        }
    }
    */
} // 結束 HelloWorldApp class


java applet由php 取值給入
<applet code="HelloWorldApp" height="500" width="500">
 <param name="peakNumber" value="10" />
</applet>


import java.applet.Applet;
import java.awt.*;

public class HelloWorldApp extends Applet {
    Stroke drawingStroke = new BasicStroke(2);
    // static 變數才可以在各方法中共用
    String peakNumber = "";
    int number;
    public void init()
    {
        peakNumber = getParameter("peakNumber");
        if(peakNumber != null) {
            // 轉成整數使用 Integer.parseInt()
            // 轉為浮點數使用 Float.parseFloat()
            number = Integer.parseInt(peakNumber);
        } else {
            // 若 peakNumber 取不到值, 則內定為 5
            number = 5;
        }
    }

    public void paint(Graphics g) {
        int i;
        Graphics2D graph = (Graphics2D)g;
        graph.setStroke(drawingStroke);
        graph.setPaint(Color.black);
        for(i=1;i<=number;i++) {
            // 每一行向下增量 20 單位
            graph.drawString("Hello World", 10, 10+i*20);
            
            printC(graph,i, 80, 10+i*20);
        }
        for(i=number-1;i>=1;i--) {
            // 必須考慮前半部已經增量 number*20
            graph.drawString("Hello World", 10, 10+(number+number-i)*20);
            printC(graph,i, 80, 10+(number+number-i)*20);
        }
    }

    public void printC(Graphics g, int m, int x, int y){
        Graphics2D graph = (Graphics2D)g;
        int i;
        for(i=0;i<m;i++) {
            graph.drawString("!", x+i*10, y);
        }
        s(graph,20,20,15);
    }
    public void s(Graphics g, int x, int y, int s){
        Graphics2D graph = (Graphics2D)g;
        graph.drawLine(x, y, x+s, y);
        graph.drawLine(x+s, y, x+s, y+s);
        graph.drawLine(x+s, y+s, x, y+s);
        graph.drawLine(x, y+s, x, y);
    }
    public void square(Graphics g, int x, int y, int s){
        Graphics2D graph = (Graphics2D)g;
        graph.drawLine(x, y, x+s, y+s);
    }
}

2011年4月26日 星期二

期中考題

一. 利用C語言寫一程式,並利用1個變數完成一數列級數控制,程式內請使用自訂函式來完成。

數列級數的規則為:奇數相加減,計算到設定變數的數量

例:變數為9,計算的值為1-3+5-7+9-11+13-15+17=9
1~17之間有9個數字做運算,中間的符號為-+-+..-+互相交 替,求出運算結果即可

Q1.c
#include<stdio.h>
void plus(int end){ //end為數字的數量
  int i,y=1,total=0; //y為數字之初始值 total為累加值
  for(i=0;i<end;i++){ //控制數字之數量
    if(i>0){ //大於一個數字才開始做加減
      if(i%2!=0){ //判斷+- 偶數為減 奇數為加
        total-=y; //將total值加或減
        printf("-%d",y);
      }
      else{
        total+=y;
        printf("+%d",y);
      }
    }
    else {
      total+=y;
      printf("%d",y);
    }
    y=y+2; //每次回圈y+2 遞增
  }
  printf("=%d",total);
}
main(){
  plus(15);//呼叫自訂函式
  return 0;  
}

#include<stdio.h>
void plus(int num){
  int i,s=-1,sum=0;
  for(i=1;i<num*2;i+=2) {
    s *= -1;
    sum += i*s;
    printf("%+d",i*s);
  }
  printf("=%d\n",sum);
}
int main(){
  plus(5);
  return 0;
}
二. 把上題改成PHP並放上CMS裡,使用GET指令,讓網址上可輸入1個變數
index.php
<?php
function hello(){
 $end=$_GET["end"];
 $y=1;
 $total=0;
 $output="";
 for($i=0;$i<$end;$i++) {
  if($i>0){
   if($i%2!=0) {
    $total-=$y;
    $output.="-".$y;
   } else{
    $total+=$y;
    $output.="+".$y;
   }
  } else {
   $total+=$y;
   $output.=$y;
  }
  $y=$y+2;
 }
 $output.= "=".$total;
 return $output;
}
?>

一. 請利用C語言寫出下列圖形,利用1變數控制其圖形大小,並使用自訂函式做程式。
註:圖中0與1可自行更換。
Q2.c
#include<stdio.h>
void print(int end){
  int e,i,j,s,k;
  for(i=1;i<=end;i++){ //end 控制做幾次
    for(s=1;s<i;s++){ //s列印1前面的空格 但第一次時不列印 所以s<i
      printf(" ");
    }
    for(e=i;e<=end;e++){ //e 控制列印1的數量(漸減)
      printf("1");
    }
    printf("\n"); //換行
    for(j=i;j<end;j++){ //j 列印0前面的空格
      printf(" ");
    }
    //for(k=end-i;k<end;k++){ 
    for(k=1;k<=i;k++){ //k 控制列印0的數量(漸增)
      printf("0");
    }
    printf("\n");
  }  
}
main(){
  print(3);//呼叫自訂函式
  return 0;
}


二. 把上題改成PHP並放上CMS裡,使用GET指令,讓網址上可輸入1個變數
index.php
<?php
function pri(){
  $end=$_GET["end"];// 使用get 直接從網址列中輸入變數值
  $output="";
  for($i=1;$i<=$end;$i++){
    for($s=1;$s<$i;$s++){
      $output.=" ";// 空格問題 無法對齊 請使用全行
    }
    for($e=$i;$e<=$end;$e++){
      $output.="1";
    }
    $output.="<br />";
    for($j=$i;$j<$end;$j++){
      $output.=" ";
    }
    for($k=$end-$i;$k<$end;$k++){
      $output.="0";
    }
    $output.="<br />";
  }
  return "<pre>".$output."</pre>"; //pre 元素可定義預格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符。而文本也會呈現为等寬字體。
}
?>



請使用Java語言撰寫一海嘯程式,
內容至少須呼叫一個方法(類似C語言的副程式),
能夠控制兩個變數,
第1個變數控制波浪大小,
第2個變數為輸出多少個波浪。
輸出3波結果如:

W
WW
WWW

01_tsunami.java
package tsunami; //package是一種管理容器 管理所定義的名稱避免發生衝突
public class Main { //定義一個類別
 static void tsunami(int num){ //建立一個名為海嘯的方法
  int i,j;
  for(i=1;i<=num;i++) { //每波海嘯距離
   for(j=0;j<i;j++) //增加海嘯的高度
    System.out.print("L"); //print為不換行列印
   System.out.println(""); //println為換行列印
  }
 }
 public static void main(String[] args) { //建立一個主要的方法
  int w;
  for(w=0;w<3;w++)
   tsunami(4); //呼叫海嘯方法
 }
}

請使用Java語言撰寫一訊號波程式,
內容至少須呼叫一個方法(類似C語言的副程式),
能夠控制三個變數,
第1個變數控制訊號波的大小,
第2個變數控制訊號波的高度,
第3個變數為輸出多少個訊號波。
波形解釋如圖:

輸出2波結果如:
S
S
S
SSSS
SSSS
SSSS
   S
   S
   S
SSSS
SSSS
SSSS
S
S
S
SSSS
SSSS
SSSS
   S
   S
   S
SSSS
SSSS
SSSS
02_square.java
package square; //package是一種管理容器 管理所定義的名稱避免發生衝突
public class Main { //定義一個類別
 static void square(int m, int n){ //建立一個名為square的方法
  int i,j;
  for(i=1;i<=m;i++) //每波訊號波距離
   System.out.println("S");
  for(i=1;i<=m;i++) {
   for(j=0;j<n;j++)
    System.out.print("S"); //print為不換行列印
   System.out.println(""); //println為換行列印
  }
  for(i=1;i<=m;i++) {
   for(j=1;j<n;j++)
    System.out.print(" ");
   System.out.println("S");
  }
  for(i=1;i<=m;i++) {
   for(j=0;j<n;j++)
    System.out.print("S");
   System.out.println("");
  }
 }
 public static void main(String[] args) { //建立一個主要的方法
  int w;
  for(w=0;w<2;w++)
   square(3,4); //呼叫square方法
 }
}

請使用Java語言撰寫一鋸齒程式,
內容至少須呼叫一個方法(類似C語言的副程式),
能夠控制兩個變數,
第1個變數控制鋸齒大小,
第2個變數為輸出多少個鋸齒。
04_sawtooth.java
package sawtooth; //package是一種管理容器 管理所定義的名稱避免發生衝突
public class Main { //定義一個類別
 static void sawtooth(int n){ //建立一個名為鋸齒的方法
  int i,j;
  for(i=1;i<=n;i++) {
   for(j=1;j<i;j++)
    System.out.print(" ");
   System.out.println("P");
  }
 }
 public static void main(String[] args) { //建立一個主要的方法
  int w;
  for(w=0;w<3;w++)
   sawtooth(4); //呼叫鋸齒方法
 }
}

2011年4月11日 星期一

Hello World Wave 範例

helloworld.java
package hello_world; //package是一種管理容器 管理所定義的名稱避免發生衝突
public class Main { //定義一個類別
    static int i,j,k; //宣告結構變數
    static void upwave(int b){ //前波浪
        for(i=0;i<=b;i++){
            System.out.print("Hello World"); //print為不換行列印
            for(j=0;j<=i;j++){
                System.out.print("!");
            }
            System.out.println(i); //println為換行列印
        }
    }
    static void downwave(int b){ //後波浪
        for(i=0;i<=b;i++){
            System.out.print("Hello World");
            for(j=0;j<=b-i;j++){
                System.out.print("!");
            }
            System.out.println(i);
        }
    }
    static void printC(int a,int b){ //宣告一個方法
        for(k=1;k<=a;k++){
            upwave(b);
            downwave(b);
        }
    }
    public static void main(String[] args) { //宣告一個名稱為main的方法
        printC(3,5); //呼叫printC函式
    }
}
完整專案下載: Eclipse Helloworld WaveNetbeans Helloworld Wave