第五章 發生的問題及心得
5.2 心得
我覺得專題的寫作目的,應該是要檢視我們在大學的四年內學到 了什麼東西,並且藉著這次的機會,將妳有興趣的部分在做更加一步 精進,這次我選擇了用 Java 來完成這次的專題,雖然是以前沒有接 觸過太多次的東西,但在這次完成專題的過程中,可以說是獲益良 多。雖然在 Java 程式的寫作上,還有很多東西需要再學習,但這也 算是已經跨出了第一步,接下來的就是藉著這次的經驗,自我再多做 練習。在這麼多優良的專題下,這份專題並不是很完美的,但我覺得,
我所得到知識和經驗,是不能衡量的,在寫 java code 的過程中,找 回了以前發現問題會自己去找出答案來的心情,當我有問題時,也確 切的感受到了朋友的關懷,所有的 code 都是一個字一個字慢慢敲出 來的。
另外免不了的要感謝一下指導教授黃溪春老師,因為我的起步算 晚的,但老師能在百忙中,還能抽出時間幫我看我的成品,很多時候 都覺得很不好意思。
參考書目
[1]柯溫釗編著,Java 學習經典,第三波,2000/12
[2]R.Allen Wyke&Donald B.Thomas 著,吳東賢譯,Perl 程式設計入門 手冊,美商麥格羅.希爾國際股份有限公司台灣分公司,2001/6 [3]黃國欽,最新 Java 程式設計入門與實作,松崗圖書,2002/5 [4]蔡明志,資料結構 使用 C 語言,碁峰,2002/6
附錄 A Bubble Sort 的 Applet 程式實作
Source Code
import java.awt.*;
import java.awt.event.*;
import java.io.InputStream;
import java.util.Hashtable;
import java.net.*;
import java.applet.*;
public class bubsort extends java.applet.Applet implements Runnable,MouseListener,ActionListener
{
static final String message = "Bubble Sort ";
static final String message1 = "Total Time(ms):";
static final String message2 = "Status:";
static final String message3 = "The ▼ item is biger then the yellow item. Exange!!!";
static final String message4 = "The ▼ item is smaller then the yellow item. Non-Exange!!!";
static final String message6 = "Times of comparing:";
static final String message7 = "Times of Exchage:";
static final String message8 = "Sorting Complete!!!";
static final String arrow = "▼";
static final String com1 = "is goal pointer.";
static final String com2 = "is Action pointer.";
static final String com3 = "is current cmparing Object.";
static final String message9 = "please enter 10 number for sort";
private Font ffont;
private Font fffont;
private Font bffont;
int h1=1;
int l1=0;
int[] ar=new int[ ]{100,100,100,100,100,100,100,100,100,100};
int ecount=0;
ffont=new Font ("arial",Font.BOLD,15);
fffont=new Font ("arial",Font.BOLD,20);
bffont=new Font ("arial",Font.BOLD,35);
start.addActionListener(this);
one=new Button("Step by step");
one.setBounds(700,10,100,30);
public void start() {
}
public void stop() {
algsort=null;
}
public void run() {
run=true;
initial=false;
sort(ar);
}
public void mouseClicked(MouseEvent e) {;}
public void mouseReleased(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
public void mousePressed(MouseEvent e) {;}
public void paint(Graphics g) {
g.drawString(com2,320,45);
g.setFont(null);
g.setColor(Color.black);
g.drawString(arrow,300,65);
g.drawString(com3,320,65);
int tmp=0;
if(complete==true) {
g.setColor(Color.white);
g.fillRect(360,70,500,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(message8,360,85);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString("Result:",500,370);
for (int i=0;i<ar.length;i++) {
k=100-ar[i];
s = String.valueOf(k);
g.drawString(s,500+30*i,390);
}
}else if(exg==true) {
g.setColor(Color.white);
g.fillRect(360,70,500,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(message3,360,85);
}else if(exg==false){
g.setColor(Color.white);
g.fillRect(360,70,500,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(message4,360,85);
}
g.setFont(fffont);
g.drawString(arrow,x-37,145+ar[i-1]*3);
}else{
g.setColor(Color.yellow);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.pink);
g.fillRect(x-40,150+ar[i-1]*3,20,300-ar[i-1]*3);
g.setColor(Color.black);
g.drawRect(x-40,150+ar[i-1]*3,20,300-ar[i-1]*3);
g.setFont(fffont);
g.drawString(arrow,x-37,145+ar[i-1]*3);
}
}
if(h1==i&&exg==false) {
g.setColor(Color.white);
g.fillRect(x,150,25,ar[i]*3);
g.setColor(Color.yellow);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setFont(fffont);
g.drawString(arrow,x-37,145+ar[i-1]*3);
}
if(l1==i) {
if(i!=l1+1) {
g.setColor(Color.white);
g.fillRect(x,150,25,ar[i]*3);
}
g.setColor(Color.blue);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
}
if(i!=h1&&i!=l1) {
if(i!=h1-1) {
g.setColor(Color.white);
g.fillRect(x,150,25,ar[i]*3);
}
g.setColor(Color.pink);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
}
x=x+40;
}
}
public void update(Graphics g) {
paint(g);
}
void pause() {
if (algsort != null) {
repaint();
}
try {Thread.sleep(600);} catch (InterruptedException e){}
}
void pause2()
{
if (algsort != null) {
repaint();
}
try {Thread.sleep(800);} catch (InterruptedException e){}
}
public void sort(int a[]) {
for (;tmpi<a.length;tmpi++ ) {
l1=tmpi;
for (tmpj = a.length-1; tmpj>tmpi; tmpj--) {
h1=tmpj;
exg=false;
pause2();
if (a[tmpj] > a[tmpj-1]) {
exg=true;
ecount=ecount+1;
int T = a[tmpj];
a[tmpj] = a[tmpj-1];
a[tmpj-1] = T;
}
counter=counter+1200;
count=count+1;
pause();
if(step==true) {
algsort.suspend();
}
}
}
complete=true;
l1=l1-1;
repaint();
}
public void actionPerformed(ActionEvent e) { Object src = e.getSource();
if( src==stop ) {
run=false;
algsort.suspend();
return;
}else if(src==start) {
run=true;
step=false;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else{
algsort.resume();
}
return;
}else if (src==one) {
step=true;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else
}
return;
}else if (src==ente) {
ar[0]=100-Integer.parseInt(text0.getText());
ar[1]=100-Integer.parseInt(text1.getText());
ar[2]=100-Integer.parseInt(text2.getText());
ar[3]=100-Integer.parseInt(text3.getText());
ar[4]=100-Integer.parseInt(text4.getText());
ar[5]=100-Integer.parseInt(text5.getText());
ar[6]=100-Integer.parseInt(text6.getText());
ar[7]=100-Integer.parseInt(text7.getText());
ar[8]=100-Integer.parseInt(text8.getText());
ar[9]=100-Integer.parseInt(text9.getText());
repaint();
} } }
附錄 B Selection Sort 的 Applet 程式實作
Source Code
import java.awt.*;
import java.awt.event.*;
import java.io.InputStream;
import java.util.Hashtable;
import java.net.*;
import java.applet.*;
public class sesort extends java.applet.Applet implements Runnable,MouseListener,ActionListener
{
static final String message = "Selection Sort ";
static final String message1 = "Total Time(ms):";
static final String message2 = "Status:";
static final String message3 = "Get the small one Exange!!!";
static final String message4 = "Find the small one";
static final String message8 = "Sorting Complete!!!";
static final String arrow = "▼";
static final String com1 = "is goal pointer.";
static final String com2 = "is Action pointer.";
static final String com3 = "is the small Object.";
static final String message9 = "please enter 10 number for sort";
private Font ffont;
private Font fffont;
private Font bffont;
int[] ar=new int[ ]{100,100,100,100,100,100,100,100,100,100};
int ecount=0;
boolean step=false;
ffont=new Font ("arial",Font.BOLD,15);
fffont=new Font ("arial",Font.BOLD,20);
bffont=new Font ("arial",Font.BOLD,35);
one=new Button("Step by step");
one.setBounds(700,10,100,30);
this.add(text2);
text3.setBounds(650,220,40,30);
this.add(text3);
text4.setBounds(600,250,40,30);
this.add(text4);
text5.setBounds(650,250,40,30);
this.add(text5);
text6.setBounds(600,280,40,30);
this.add(text6);
text7.setBounds(650,280,40,30);
this.add(text7);
text8.setBounds(600,310,40,30);
this.add(text8);
text9.setBounds(650,310,40,30);
this.add(text9);
}
Thread algsort=null;
public void start() {
}
public void stop() {
algsort=null;
}
public void run() {
run=true;
initial=false;
sort(ar);
}
public void mouseClicked(MouseEvent e) {;}
public void mouseReleased(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
public void mousePressed(MouseEvent e) {;}
int x=100;
int y=100;
g.setColor(Color.black);
g.setFont(bffont);
g.drawString(message,10,30);
g.setFont(ffont);
g.drawString(message1,10,50);
g.setFont(ffont);
g.drawString(message2,300,85);
g.setFont(ffont);
g.drawString(message6,10,70);
g.setFont(ffont);
g.drawString(message7,10,90);
g.setFont(ffont);
g.drawString(message9,550,130);
g.setFont(ffont);
g.drawString(message10,550,150);
g.setFont(null);
g.setColor(Color.blue);
g.drawString(arrow,300,25);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com1,320,25);
g.setFont(null);
g.setColor(Color.yellow);
g.drawString(arrow,300,45);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com2,320,45);
g.setColor(Color.blue);
g.fillRect(300,55,15,15);
g.setColor(Color.black);
g.drawString(com3,320,65);
int tmp=0;
g.setColor(Color.white);
g.setFont(ffont);
g.drawString(si,200,70);
ii=String.valueOf(ecount);
g.setColor(Color.white);
g.fillRect(200,70,100,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(ii,200,90);
for(int i=0;i<ar.length;i++) {
g.setColor(Color.white);
g.fillRect(x,130,90,20);
if (i==h1&&i==s1) {
g.setColor(Color.white);
g.fillRect(x,150,25,400);
g.setColor(Color.blue);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.yellow);
g.setFont(fffont);
g.drawString(arrow,x,145+ar[i]*3);
}else if(i==l1&&i==s1) {
g.setColor(Color.white);
g.fillRect(x,150,25,400);
g.setColor(Color.blue);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.blue);
g.setFont(fffont);
g.drawString(arrow,x,145+ar[i]*3);
}else if (i==h1&&i==l1)
g.fillRect(x,150,25,400);
g.setColor(Color.blue);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
} else {
g.setColor(Color.white);
g.fillRect(x,150,25,400);
g.setColor(Color.pink);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
}
x=x+40;
}
}
public void update(Graphics g) {
paint(g);
}
void pause() {
if (algsort != null) {
repaint();
}
try {Thread.sleep(600);} catch (InterruptedException e){}
}
void pause2() {
if (algsort != null) {
try {Thread.sleep(800);} catch (InterruptedException e){}
}
public void sort(int a[]) {
for (;tmpi<a.length;tmpi++ ) {
if( src==stop ) {
run=false;
algsort.suspend();
return;
}else if(src==start) {
run=true;
step=false;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else{
algsort.resume();
}
return;
}else if (src==one) {
step=true;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else {
algsort.resume();
}
return;
}else if (src==ente) {
ar[0]=100-Integer.parseInt(text0.getText());
ar[1]=100-Integer.parseInt(text1.getText());
ar[2]=100-Integer.parseInt(text2.getText());
ar[3]=100-Integer.parseInt(text3.getText());
ar[4]=100-Integer.parseInt(text4.getText());
ar[7]=100-Integer.parseInt(text7.getText());
ar[8]=100-Integer.parseInt(text8.getText());
ar[9]=100-Integer.parseInt(text9.getText());
repaint();
}
}
}
附錄 C Insertion Sort 的 Applet 程式實作
Source Code
import java.awt.*;
import java.awt.event.*;
import java.io.InputStream;
import java.util.Hashtable;
import java.net.*;
import java.applet.*;
public class insort extends java.applet.Applet implements Runnable,MouseListener,ActionListener
{
static final String message = "Insertion Sort ";
static final String message1 = "Total Time(ms):";
static final String message2 = "Status:";
static final String message3 = "The blue item is smailler then the
▼ item. Exange!!!";
static final String message4 = "The blue item is biger then the ▼ item. Non-Exange!!!";
static final String message6 = "Times of comparing:";
static final String arrow = "▼";
static final String com1 = "is goal pointer.";
static final String com2 = "is Action pointer.";
static final String com3 = "is current cmparing Object.";
static final String message9 = "please enter 10 number for sort";
private Font ffont;
private Font fffont;
private Font bffont;
int[] ar=new int[ ]{100,100,100,100,100,100,100,100,100,100};
int ecount=0;
boolean step=false;
ffont=new Font ("arial",Font.BOLD,15);
fffont=new Font ("arial",Font.BOLD,20);
bffont=new Font ("arial",Font.BOLD,35);
one=new Button("Step by step");
one.setBounds(700,10,100,30);
this.add(text2);
text3.setBounds(650,220,40,30);
this.add(text3);
text4.setBounds(600,250,40,30);
this.add(text4);
text5.setBounds(650,250,40,30);
this.add(text5);
text6.setBounds(600,280,40,30);
this.add(text6);
text7.setBounds(650,280,40,30);
this.add(text7);
text8.setBounds(600,310,40,30);
this.add(text8);
text9.setBounds(650,310,40,30);
this.add(text9);
}
Thread algsort=null;
public void start() {
}
public void stop() {
algsort=null;
}
public void run() {
run=true;
initial=false;
sort(ar);
}
public void mouseClicked(MouseEvent e) {;}
public void mouseReleased(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
public void mousePressed(MouseEvent e) {;}
int x=100;
int y=100;
g.setColor(Color.black);
g.setFont(bffont);
g.drawString(message,10,30);
g.setFont(ffont);
g.drawString(message1,10,50);
g.setFont(ffont);
g.drawString(message2,300,85);
g.setFont(ffont);
g.drawString(message6,10,70);
g.setFont(ffont);
g.drawString(message7,10,90);
g.setFont(ffont);
g.drawString(message9,550,130);
g.setFont(ffont);
g.drawString(message10,550,150);
g.setColor(Color.blue);
g.fillRect(300,15,15,15);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com1,320,25);
g.setColor(Color.yellow);
g.fillRect(300,35,15,15);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com2,320,45);
g.setFont(null);
g.setColor(Color.black);
g.drawString(arrow,300,65);
g.drawString(com3,320,65);
int tmp=0;
if(complete==true) {
g.setColor(Color.black);
ii=String.valueOf(ecount);
}
}
public void update(Graphics g) {
paint(g);
}
void pause() {
if (algsort != null) {
repaint();
}
try {Thread.sleep(600);} catch (InterruptedException e){}
}
void pause2() {
if (algsort != null) {
repaint();
}
try {Thread.sleep(800);} catch (InterruptedException e){}
}
public void sort(int a[]) {
for (;tmpi<a.length;tmpi++) {
l1=tmpi;
tmpda=a[tmpi];
exg = false;
for (tmpj=tmpi-1;tmpj>=0&&tmpda > a[tmpj];
tmpj--)
{
h1 = tmpj;
pause2();
count = count + 1;
ecount = ecount + 1;
a[tmpj + 1] = a[tmpj];
}
a[tmpj + 1] = tmpda;
h1=l1-1;
counter = counter + 600;
count = count + 1;
pause();
if (step == true) { algsort.suspend();
} }
complete=true;
repaint();
}
public void actionPerformed(ActionEvent e) { Object src = e.getSource();
if( src==stop ) {
run=false;
algsort.suspend();
return;
}else if(src==start) {
run=true;
step=false;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else{
algsort.resume();
}
return;
}else if (src==one)
step=true;
if (algsort == null) {
algsort = new Thread(this);
algsort.start();
}else {
algsort.resume();
}
return;
}else if (src==ente) {
ar[0]=100-Integer.parseInt(text0.getText());
ar[1]=100-Integer.parseInt(text1.getText());
ar[2]=100-Integer.parseInt(text2.getText());
ar[3]=100-Integer.parseInt(text3.getText());
ar[4]=100-Integer.parseInt(text4.getText());
ar[5]=100-Integer.parseInt(text5.getText());
ar[6]=100-Integer.parseInt(text6.getText());
ar[7]=100-Integer.parseInt(text7.getText());
ar[8]=100-Integer.parseInt(text8.getText());
ar[9]=100-Integer.parseInt(text9.getText());
repaint();
}
}
}
附錄 D Quick Sort 的 Applet 程式實作
Source Code
import java.awt.*;
import java.awt.event.*;
import java.io.InputStream;
import java.util.Hashtable;
import java.net.*;
public class qusort extends java.applet.Applet implements Runnable,MouseListener,ActionListener
{
static final String message = "Quick Sort ";
static final String message1 = "Total Time(ms):";
static final String message2 = "Status:";
static final String message3 = "To find the item which is smaller then blue item";
static final String message4 = "To find the item which is biger then blue item";
static final String message6 = "Times of comparing:";
static final String message7 = "Times of Exchage:";
static final String message8 = "Sorting Complete!!!";
static final String message11 = "Exange!!!";
static final String arrow = "▼";
static final String com1 = "is the pointer to find big one";
static final String com2 = "is the pointer to find small one";
static final String com3 = "is the compare one";
static final String message9 = "please enter 10 number for sort";
private Font ffont;
private Font fffont;
private Font bffont;
int h1=0;
int x=0;
int[] ar=new int[ ]{100,100,100,100,100,100,100,100,100,100};
int ecount=0;
ffont=new Font ("arial",Font.BOLD,15);
fffont=new Font ("arial",Font.BOLD,20);
bffont=new Font ("arial",Font.BOLD,35);
start.addActionListener(this);
one=new Button("Step by step");
one.setBounds(700,10,100,30);
public void start() {
}
public void stop() {
algsort=null;
}
run=true;
initial=false;
sort(ar,0,9);
}
public void mouseClicked(MouseEvent e) {;}
public void mouseReleased(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
public void mousePressed(MouseEvent e) {;}
public void paint(Graphics g) {
int x=100;
int y=100;
g.setColor(Color.black);
g.setFont(bffont);
g.drawString(message,10,30);
g.setFont(ffont);
g.drawString(message1,10,50);
g.setFont(ffont);
g.drawString(message2,300,85);
g.setFont(ffont);
g.drawString(message6,10,70);
g.setFont(ffont);
g.drawString(message7,10,90);
g.setFont(ffont);
g.drawString(message9,550,130);
g.setFont(ffont);
g.drawString(message10,550,150);
g.setFont(null);
g.setColor(Color.black);
g.drawString(arrow,300,25);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com1,320,25);
g.setFont(null);
g.setFont(ffont);
g.setColor(Color.black);
g.drawString(com2,320,45);
g.setColor(Color.blue);
g.fillRect(300,55,15,15);
g.setColor(Color.black);
g.drawString(com3,320,65);
int tmp=0;
if(complete==true) {
g.setColor(Color.white);
g.fillRect(360,70,500,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(message8,360,85);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString("Result:",500,370);
for (int i=0;i<ar.length;i++) {
k=100-ar[i];
s = String.valueOf(k);
g.drawString(s,500+30*i,390);
}
}else if(exg==true) {
g.setColor(Color.white);
g.fillRect(360,70,500,20);
g.setColor(Color.black);
g.setFont(ffont);
g.drawString(message11,360,85);
}else if(comps==true) {
g.setColor(Color.black);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setFont(fffont);
g.drawString(arrow,x,145+ar[i]*3);
}else if (i==m1) {
g.setColor(Color.white);
g.fillRect(x,150,25,400);
g.setColor(Color.blue);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
}else {
g.setColor(Color.white);
g.fillRect(x,150,25,400);
g.setColor(Color.pink);
g.fillRect(x,150+ar[i]*3,20,300-ar[i]*3);
g.setColor(Color.black);
g.drawRect(x,150+ar[i]*3,20,300-ar[i]*3);
}
x=x+40;
}
}
public void update(Graphics g) {
paint(g);
}
void pause() {
if (algsort != null) {
repaint();
}
try {Thread.sleep(600);} catch (InterruptedException e){}
}
if (algsort != null) {
repaint();
}
try {Thread.sleep(800);} catch (InterruptedException e){}
}
public void sort(int a[],int fir,int fin) {
pause2();
else if(l1==9)
public void actionPerformed(ActionEvent e) { Object src = e.getSource();
if( src==stop ) {
algsort = new Thread(this);
algsort.start();
algsort = new Thread(this);
algsort.start();
}else if (src==ente) {
ar[0]=100-Integer.parseInt(text0.getText());
ar[3]=100-Integer.parseInt(text3.getText());
ar[4]=100-Integer.parseInt(text4.getText());
ar[5]=100-Integer.parseInt(text5.getText());
ar[6]=100-Integer.parseInt(text6.getText());
ar[7]=100-Integer.parseInt(text7.getText());
ar[8]=100-Integer.parseInt(text8.getText());
ar[9]=100-Integer.parseInt(text9.getText());
repaint();
} } }
附錄 E 測驗題的實作
#!/usr/bin/perl -w
print "content-type:text/html\n\n";
print "<html>";
print "<meta http-equiv=\"Content-Type\" content=\"text/html\; charset=big5\">";
print "<head>";
print "<title>Test html</title>";
print "</head>";
print "<body bgcolor=\"#FFFF99\">";
print "<H1>排序測驗</H1>";
print "<form method=\"post\" action=\"ans.pl\">";
$k=int(rand(15));
$i=0;
$z=$k;
for ($i=0;$i<4;$i++) {
$k=$k%15;
if ($k==0) {
print "<p>59,28,77,31,51,11 以插入排序法 排序由小到大 pass3 的結果 應該是?</p>\n";
print "<input type=\"hidden\" name=\"quest0\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio0\" value=\"1\">";
print "11,59,28,77,31,51</p>\n";
print "<p><input type=\"radio\" name=\"radio0\" value=\"3\">";
print "11,28,77,31,51,59</p>\n\n";
}
if ($k==1) {
print "<p>59,28,77,31,51,11 以選擇排序法 排序由小到大 pass3 的結果 應該是?</p>\n";
print "<input type=\"hidden\" name=\"quest1\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio1\" value=\"1\">";
print "28,31,59,77,51,11</p>\n";
print "<p><input type=\"radio\" name=\"radio1\" value=\"2\">";
print "11,59,28,77,31,51</p>\n";
print "<p><input type=\"radio\" name=\"radio1\" value=\"3\">";
print "11,28,77,31,51,59</p>\n\n";
}
if ($k==2) {
print "<p>59,28,77,31,51,11 以泡沫排序法 排序由小到大 pass3 的結果 應該是?</p>\n";
print "<input type=\"hidden\" name=\"quest2\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio2\" value=\"1\">";
print "28,31,59,77,51,11</p>\n";
print "<p><input type=\"radio\" name=\"radio2\" value=\"2\">";
print "11,59,28,77,31,51</p>\n";
print "<p><input type=\"radio\" name=\"radio2\" value=\"3\">";
print "11,28,77,31,51,59</p>\n\n";
}
if ($k==3) {
print "<p>下列何種排序法的時間複雜度為 O(n log n)</p>\n";
print "<input type=\"hidden\" name=\"quest3\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio3\" value=\"1\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio3\" value=\"2\">";
print "快速排序法</p>\n";
}
if ($k==4) {
print "<p>59,28,77,31,51,11 以快速排序法 排序並以第一筆資料為基準 則 pass1 的結果應該是?</p>\n";
print "<input type=\"hidden\" name=\"quest4\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio4\" value=\"1\">";
print "51,28,11,31,59,77</p>\n";
print "<p><input type=\"radio\" name=\"radio4\" value=\"2\">";
print "28,59,77,31,51,11</p>\n";
print "<p><input type=\"radio\" name=\"radio4\" value=\"3\">";
print "11,59,28,77,31,51</p>\n\n";
print "<input type=\"hidden\" name=\"quest5\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio5\" value=\"1\">";
print "泡沫排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio5\" value=\"2\">";
print "插入排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio5\" value=\"3\">";
print "快速排序法</p>\n\n";
print "<input type=\"hidden\" name=\"quest6\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio6\" value=\"1\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio6\" value=\"2\">";
print "快速排序法</p>\n\n";
print "<input type=\"hidden\" name=\"quest7\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio7\" value=\"1\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio7\" value=\"2\">";
print "泡沫排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio7\" value=\"3\">";
print "插入排序法</p>\n\n";
}
if ($k==8) {
print "<p>N 個資料作氣泡排序時,須經過幾次比較?</p>\n";
print "<input type=\"hidden\" name=\"quest8\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio8\" value=\"1\">";
print "N(N-1)/2</p>\n";
print "<p><input type=\"radio\" name=\"radio8\" value=\"2\">";
print "N/2</p>\n";
print "<p><input type=\"radio\" name=\"radio8\" value=\"3\">";
print "N(N+1)/2</p>\n\n";
print "<input type=\"hidden\" name=\"quest9\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio9\" value=\"1\">";
print "泡沫排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio9\" value=\"2\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio9\" value=\"3\">";
if ($k==10) {
print "<p>下列關於氣泡排序法的敘述中,哪一個是錯誤的?</p>\n";
print "<input type=\"hidden\" name=\"quest10\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio10\" value=\"1\">";
print "在每一次的排列循環後,一定會有一個正確的資料會被置於正確 的位置</p>\n";
print "<p><input type=\"radio\" name=\"radio10\" value=\"2\">";
print "若排列 10 筆資料,最多須做 9 次的排列循環</p>\n";
print "<p><input type=\"radio\" name=\"radio10\" value=\"3\">";
print "適用於資料筆數很多的情況下</p>\n\n";
print "<input type=\"hidden\" name=\"quest11\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio11\" value=\"1\">";
print "泡沫排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio11\" value=\"2\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio11\" value=\"3\">";
print "插入排序法</p>\n\n";
}
if ($k==12) {
print "<p>利用氣泡排序法排列 10 筆資料的順序,須經過幾次的比較?
</p>\n";
print "<input type=\"hidden\" name=\"quest12\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio12\" value=\"1\">";
print "45 次</p>\n";
print "<p><input type=\"radio\" name=\"radio12\" value=\"2\">";
print "30 次</p>\n";
print "<p><input type=\"radio\" name=\"radio12\" value=\"3\">";
if ($k==13) {
print "<p>利用插入排序法排列 10 筆資料的順序,最多做幾次的排序循 環?</p>\n";
print "<input type=\"hidden\" name=\"quest13\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio13\" value=\"1\">";
print "5 次</p>\n";
print "<p><input type=\"radio\" name=\"radio13\" value=\"2\">";
print "10 次</p>\n";
print "<p><input type=\"radio\" name=\"radio13\" value=\"3\">";
print "20 次</p>\n\n";
}
if ($k==14) {
print "<p>以第一筆資料作為基準,將資料分為大於第一筆資料,與小 於第一筆資料,兩個區塊,在分別對兩個區塊重複做相同的動作,此種方法稱 為?</p>\n";
print "<input type=\"hidden\" name=\"quest14\" value=\"1\">";
print "<p><input type=\"radio\" name=\"radio14\" value=\"1\">";
print "選擇排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio14\" value=\"2\">";
print "插入排序法</p>\n";
print "<p><input type=\"radio\" name=\"radio14\" value=\"3\">";
print "快速排序法</p>\n\n";
}
$k=$k+2;
}
print "<input type=\"submit\" name=\"Submit\" value=\"OK\">";
print "</from>";
print "</body>";
print "</html>";
附錄 F 解答的實作
#!/usr/bin/perl -w
print "content-type:text/html\n\n";
print "<head>";
print "<title>Test html</title>";
print "</head>";
print "<body bgcolor=\"#FFFF99\">";
print "<H1>排序解答</H1>";
&GetInput;
if ($in{'quest0'}==1) {
print "59,28,77,31,51,11 以插入排序法 排序由小到大 pass3 的結果應該 是?<br>";
print "28,31,59,77,51,11<br>";
print "11,59,28,77,31,51<br>";
print "11,28,77,31,51,59<br>";
if ($in{'radio0'}==1) {
print "恭喜答對囉!!!正確答案果然是 1<br><br>"
} else {
print "喔喔 抱歉..正確答案應該是 1<br><br>"
}
}
if ($in{'quest1'}==1) {
print "59,28,77,31,51,11 以選擇排序法 排序由小到大 pass3 的結果應該 是?<br>";
print "28,31,59,77,51,11<br>";
print "11,59,28,77,31,51<br>";
print "11,28,77,31,51,59<br>";
if ($in{'radio1'}==3) {
print "恭喜答對囉!!!正確答案果然是 3<br><br>"
} else {
}
if ($in{'quest2'}==1) {
print "59,28,77,31,51,11 以泡沫排序法 排序由小到大 pass3 的結果應該 是?<br>";
print "28,31,59,77,51,11<br>";
print "11,59,28,77,31,51<br>";
print "11,28,77,31,51,59<br>";
if ($in{'radio2'}==2) {
print "恭喜答對囉!!!正確答案果然是 2<br><br>"
} else {
print "喔喔 抱歉..正確答案應該是 2<br><br>"
}
}
if ($in{'quest3'}==1) {
print "下列何種排序法的時間複雜度為 O(n log n)<br>";
print "選擇排序法<br>";
print "快速排序法<br>";
print "泡沫排序法<br>";
if ($in{'radio3'}==2) {
print "恭喜答對囉!!!正確答案果然是 2<br><br>"
} else {
print "喔喔 抱歉..正確答案應該是 2<br><br>"
}
}
if ($in{'quest4'}==1)
pass1 的結果應該是?<br>";
pass1 的結果應該是?<br>";