顯示具有 計算機概論 標籤的文章。 顯示所有文章
顯示具有 計算機概論 標籤的文章。 顯示所有文章

2022年5月27日 星期五

2021年6月9日 星期三

電腦基本運作:程式語言

 電腦基本運作:程式語言

電腦的運作,必須靠程式語言來溝通。
程式語言是一種用來與電腦溝通的演算法

所謂演算法是指:
一連串的指令,來告訴電腦如何採取行動。
更精確來說,是一連串指示電腦的動作順序的系列安排

在理解演算法之前,我們先來看看底下這個簡單的遊戲。

遊戲目標:交換黑棋白棋的位置
遊戲規則一每個棋子可以滑動至相鄰的空格內。
遊戲規則二也可跳過相鄰的棋子至下一個空格。
如果這盤棋要由你(妳)來指揮電腦下,
你要如何來下指令呢?

底下這兩群指令,你會選用哪一個?

2號格白棋移到3號格內
4號格黑棋跳到2號格內

★白棋移一格
黑棋跳一格

你(妳)覺得哪群指令比較適合來指揮電腦運作呢?
如果你還不曉得怎麼分,再試試看下面這兩個:

逃生門緊急使用步驟
1. 拉開蓋子
2. 將門把推到開啟位置並鬆手
3. 向外把門推開

飛機洗手間使用規則
*禁止吸煙
*禁止飲食
*當安全帶警示燈亮起時請勿使用洗手間

比較好的指令是能讓人(或電腦)一步一步的執行動作,
這就是我們上面所提到的演算法」。
演算法告訴你如何一步一步執行任務,
而不是只是告訴你什麼可以做,什麼不能做。
因此演算法是在談論「如何」做,而不是做「什麼」。

人類的語言,常常存在著模擬兩可的狀況,
但電腦的程式語言,則要具體精確,不能有模糊空間。

程式語言基本上可分為:
1. 低階「機器碼(machine code)」和
2. 「高階語言(high-level languages)」。

以這兩種程式語言來說,
電腦真正「看」得懂的,只有機器碼
機器碼是一種非常簡單的語言,它只使用兩種字母:0 和 1。 
因此機器碼中的所有字都是由 0 和 1 組成的序列,
例如,00000100 可能代表一個字,而 10101010 代表的意思就完全不同。

在這裡順便介紹一個概念—位元組(byte)
在電腦普遍使用的初期,電腦每次能處理的位元數,是8位元(bits)
因此,我們把8位元(bits)合成1個位元組(byte)。
當時的電腦也因而被稱成8位元電腦。


隨後由於電腦中央處理器技術的進步,
慢慢的又發展到16位元,32位元,甚至現在到達64位元的運算單位。

高階程式語言,是一種為了讓人類比較容易理解而設計的語言,
比較接近人類語言的用法。例如:

10  INPUT  name                     '輸入姓名
20  PRINT  "Hello," name       '輸出 Hello + 姓名
30  FOR i = 1 to 10                  '重覆執行10次, i 計數從 1 到 10
40  PRINT  i                             '輸出 i 的值
50  NEXT                                 '執行下一次循環
60  END                                    '結束

或是

void main(void) {
    int inv=0;        /*計數用變數*/
    double sum=0;     /*計算總和*/
    float Data;       /*輸入值存在Data變數*/
    do {
        printf("輸入實數:");     /*在螢幕上顯示字串*/
        scanf("%f", &Data); /*由鍵盤輸入數值*/
        sum = sum + Data;  /*將輸入值加到sum */
        inv = inv+1;
    } while(inv < 5);                   /*若inv小於5,繼續執行*/
    printf( "平均值= %f ",sum/5.0); /*印出平均值*/
    printf( "\n");                 /*換行*/
}

這樣一來,人們在進行程式設計時,可以用較直覺的方式來進行,
但是這些高階語言電腦是看不懂的,
所以必須要透過一個編譯器(Compilers)直譯器(interpreter)
將高階語言先轉換(翻譯)成低階機器碼,
再由電腦根據機器碼來運作執行程式。


雖然高階語言比起機器碼更人性化,
但在編輯上,仍然可能因拼錯語法或指令,
造成程式執行的錯誤。
因此,最近又有積木式的程式語言發展出來,
像我們六年級所學的Scratch 3.0 AppInventor II,就屬於這一類。



積木式的程式語言,基本上都可以轉換成高階語言
一樣藉由編譯器,再轉為機器碼

一個完整的演算法(或稱程式),
其實就是一組用來完成某件工作的有程序和指令,
也因此它涵蓋了以下兩件事:
1. 必須被執行的動作方式
2. 動作必須要遵循的順序

任何演算法都可以用這三種程序寫出來:
順序(Sequence)、
選擇(Selection)、
迭代(Iteration)。

一、順序:包含一連串先後順序動作,例如:
【緊急逃生門開啟】
1. 拉開蓋子
2. 推槓桿打開艙門
3. 將門往外推

這個逃生門的開啟,是必須按照一定的步驟順序來操作,才能順利開啟。
底下有個著名的遊戲—農夫過河,也能來體驗一下順序的重要性。


有個農夫帶著心愛的狐狸,去市場買了一隻活雞和一條玉米
回家時必須搭乘小竹筏渡河。
小竹筏很小,最多只夠讓農夫和他所帶的一項物品動物乘坐。
而且只有農夫才能控制竹筏航行。
但農夫碰到了一些問題:
1.會找機會偷吃玉米狐狸也伺機想吃雞
2.如果農夫與狐狸和雞同時在場(同在岸邊或竹筏上),動物就不敢造次。
3.如果農夫遠離了動物(農夫和動物分別在岸邊或竹筏上),有機會時,
  雞肯定會把玉米吃掉,而狐狸也會吃雞。
那麼,農夫要如何安排渡河,才能讓這三項都完整無缺的渡河到家呢?

這個問題,先留給同學們來嘗試解題,先不公佈答案。
同學們可以把解題的步驟與程序寫下來,
看看你總共用了多少個步驟,來幫農夫解決這個難題。
你會發現動作的選項與順序,是很重要的。

二、選擇:允許程式根據不同的條件來選擇執行動作,例如:
疫情警戒三級的停、復課選擇】
如果  疫情警戒降為二級                                     (條件)             
那麼  學校就復課,學生回校上課。      (條件為)
否則  繼續停課,學生進行線上學習。  (條件為)

在選擇的條件裡,有時不只有單一條件,
這時我們就會用到邏輯判斷 and(且) or(或)來作真假的運算,


例如:
疫情警戒三級時違規罰則】

如果  人在街上 未戴口罩               (需兩個條件均符合才成立)       
那麼  依傳染病防治法,裁罰3千元以上1萬5千元以下罰鍰。
否則  未違規,不予裁罰。                                                 

如果  室內群聚超過5人    室外群聚超過10人      (兩個條件只要一個符合即成立)
那麼  依傳染病防治法,處新台幣6萬元以上、30萬元以下罰鍰。          
否則  未違規,不予裁罰。                                                                            

三、迭代:在程式中,重複性的工作是非常重要的一環,
「重複」這檔事,又就叫作迴圈(loop)或遞迴
當我們下達「重複」指令時,須設定「終止條件」,
否則重複執行的程式會永不停止。

底下以兩個例子,來說明「重複」語法。
例如:
撲克牌重複抽牌遊戲一
重複抽牌直到抽中紅心A為止
如果  抽中紅心A                     
那麼  停止抽牌。
否則  繼續抽牌。

撲克牌重複抽牌遊戲二
重複抽10張撲克牌
  每次抽中的點數加總。

第一種狀況,可稱為條件控制迴圈(Sentinel-controlled loops),
第二種狀況,可稱為計數控制迴圈(Counter-controlled loops)。
條件控制迴圈可視實際執行的情況,決定重複執行的次數;
計數控制迴圈,則事先就已律定好重複執行的次數。
至於要採用哪一種迴圈,則取決於重複執行的需要。

以上是我們簡單介紹有關程式設計的基本概念,
實際上,真正程式設計所需的知能,還不止上面這些。
有興趣的小朋友,可以利用畢業後的空閒時間,
多利用 Scratch 3.0 或 AppInventor II 來進行練習,
對你將來的各項學習,都會很有幫助的。

隨堂測驗網址


2021年5月31日 星期一

電腦基本運作:圖像表示法

 電腦基本運作:圖像表示法


在電腦的運算裡,除了數字之外,還會處理圖像

但其實,我們所看到的文字,在電腦裡是被視為圖像的。

那麼電腦是如何來處理圖像的呢?


我們先來了解電腦的發展過程。

最早的電腦,不像現在這麼多彩多姿。

就跟電視一樣,最早剛發明出來時,只是黑白的。


早期的黑白電視機


1981年代IBM個人電腦(黑底螢幕,綠色字)

這種黑白電視,或是雙色的螢幕,

其實只是螢幕顯示的像素,亮或不亮的作用而已。


所謂的「像素」,就是我們把電腦螢幕細分成許許多多的小格子。

每個最小的格子,就是1個像素

在黑白螢幕中,每個小格子就是一顆小燈泡,

它的情況只有兩種情況,

若以二進位來記錄,可用表示,可用來表示。

例如,以英文字母a這個字來看:


如果白色視為不亮黑色視為亮,
注意:若真實的螢幕上,不亮時是黑色,亮時是白色或其他顏色
我們為了模擬紙本及列印的狀況,故本文均把白底視為不亮黑點視為亮燈

接下來,我們就用矩陣圖卡,
來模擬一下電腦在儲存圖像時的狀態吧!

PS.你也可以連線到下列連結,直接用8x8矩陣操作.


5x6矩陣圖卡(每張圖卡約2cm x 2cm,一面空白,一面塗色)

請大家先練習排出一個英文小寫字母a,如下圖:

英文字母a點陣圖(最左邊那排圖卡,是備用的)


那麼a這個字母(圖像),用數字來表示,有如下方式:


請小朋友們練習一下,英文大寫字母G,

要如何表示?

圖像

二進位表示法

簡化十進位表示法




 01100

 1,2,2

 10010

 0,1,2,1,1

 10000

 0,1,4

 10111

 0,1,1,3

 10010

 0,1,2,1,1

 01100

 1,2,2


若反過來,給你(妳)簡化的十進位表示法,

你能畫出圖像嗎?(更厲害的,不需畫圖像,直接轉換出二進位表示法)

圖像

二進位表示法

簡化十進位表示法

 


 01100

 1,2,2

 10010

 0,1,2,1,1

 10010

 0,1,2,1,1

 10110

 0,1,1,2,1

 10010

 0,1,2,1,1

 01101

 1,2,1,1


以上我們所用的圖像,都是最原始的黑白圖像。

每一個像素只有不亮,兩種狀況,

所以每個像素可用1個bit(位元)來儲存。

例如:在上面5 x 6的矩陣圖像中,我們只要用30bits就可以存完。

那如果我們用8x8的矩陣來繪製黑白圖像,

那所需要的儲存位元數,總共需要64bits。


了解到這邊後,我們再進一步來模擬一下,

如果這個螢幕不是黑白的,而是彩色的呢?

 

 

 

 

 黑白

1bit

 8色

3bits

 256色

8bits

 高彩

16bits


各類彩色示意圖

8 色每個像素 3 位元 ( bits ),可顯示 8 種顏色。(適合教學練習

16 色每個像素 4 位元 ( bits ),可顯示16 種顏色。(適合簡易繪圖

256 色每個像素 8 位元 ( bits ),可顯示 256 種顏色。(適合卡通圖片

高彩每個像素16 位元 ( bits ),可顯示 65536 種顏色。(適用自然景物

全彩每個像素占 24 位元 ( bits ),可顯示 16777216 種顏色。


全彩螢幕


接下來,我們就來模擬一下 彩色(8色) 的圖像操作!

PS.這時我們的圖卡就不夠用了,請連線到下列連結,直接用8x8矩陣(彩色版)來操作.



請小朋友們練習,下方圖卡要如何表示?

 圖像

 十進位表示法

 


1340

 7026

 5162


各位同學試著算算看,上面這個4x3的8色矩陣,

需用多少個bit(位元)來儲存呢?

每個像素需用3bits來儲存,

總共需要3x12=36(bits)

如果是前面那個5x6矩陣的話,

那就需要3x30=90(bits)

而現在的電腦,在顏色的處理上,至少都用到高彩,甚至是全彩了。


接下來,我們來介紹一下,目前電腦在儲存圖片的幾個常用的格式。

一、點陣圖(.bmp    .gif     .jpg     .png)

.bmpWindows點陣圖(全彩),使用無失真的資料壓縮。


.gif圖形交換格式(256色)網路上廣泛使用,支援動畫圖像,失真壓縮。


.jpg聯合影像專家小組格式(全彩)。使用失真壓縮,可設定壓縮比


.png可攜式網路圖片(全彩)。無失真壓縮。可存成背景透明圖。


二、向量圖(.ai    .svg)放大不失真

.svg基於XML的向量圖格式。(較通用)

.aiAdobe Illustrator使用的向量格式。


底下有幾個情況,請你判斷適合用什麼圖形檔案格式來儲存?

圖片需求

適用格式

卡通動畫

 .gif

大自然的風景照片 

.jpg 或 .png 

去背的人像圖片 

.png 

模型設計圖 

.ai 或 .svg 


各位小朋友,我們今天的課程就到此結束。
接下來,就請到隨堂測驗區,來檢驗一下你今天的學習成果吧!
加油,GO!

隨堂測驗網址


2021年5月24日 星期一

電腦基本運作-二進位數字

 電腦基本運作:二進位數字

小朋友,你知道電腦在運作時,最基本的訊號運作只有0和1嗎?

我們現在平常所用的數字系統,是十進位數字。

也就是從0,1,2,......,8到9,逢10就要進位,用十位數1來表示。

古代十進位數字示例

除了十進位數字系統外,生活中也還有其他的數字進位系統喔。
例如:時間(秒,分)的進位,是屬於六十進位。
它是從0,1,2,......,58到59,逢60就要進位,用六十位數1來表示。

時間六十進位制

而電腦在運作時,在數位的記憶體中,
只能用電晶體的開或關有電或沒電、聲音高頻或低頻、光線反射或不反射......等,
來表示不同的兩個數值,我們可視為1和0。

電腦裡的每一個運算單元,稱為位元(bit),
也就是二進位數字(binary digit)的簡稱。
大家可以想像一下,在電腦裡頭,資料的儲存運算,
就像下圖這樣,都只是0和1的存在。
二進位紋理示意圖

接下來,我們就利用二進位的數字卡,
來體驗一下,二進位的數字表示法吧!
二進位數字圖卡

二進位數字,顧名思義,數數到2就要進位,
因此只會用到0和1兩個數字。
若用5張二進位圖卡(二進位裡的5位數)來表示,
它最小和最大,各可以表達十進位的哪些數字呢?
大家來試試看吧!
二進位數字系統中,5位數所能表示的數值.

觀察下列幾個二進位數字的例子,你有沒有發現什麼規則?

二進位數字卡

二進位

表示法

十進位

數值




00001

 


00010

 


00100

 


01000

 


10000

16



試試看底下這幾個例子,並練習把二進位的數字寫下來。

二進位數字卡

二進位

表示法

十進位

數值

 


00111 

7 

 


01101 

 13

 


10101 

 21



二進位數字除了可以表示數值之外,
如果再和文字代碼作結合,也可以用來表示文字。
例如下面這張十進位數字與英文字母代碼表:
十進位數字與英文字母代碼表

英文字母共有26個,我們可以用1~26來分別代表各個字母。
因此,我們就可以將輸入的文字轉換成二進位的數字儲存起來。
也可以將二進位數字轉換成英文字母顯示出來。
以上述的代碼表,我們可以知道:
2代表的字母是b
9代表的字母是i
15代表的字母是o
23代表的字母是w

若再把十進位數字轉換成二進位,
就會變成如下:
00010代表的字母是b
01001代表的字母是i
01111代表的字母是o
10111代表的字母是w

我們如果要記錄hello這個英文字,就可以輸入下列的二進位數字:

英文字母(以上表為例)

二進位

表示法

十進位

數值

01000 

00101 

01100 

12 

01100 

12 

01111 

15 



練習寫出下列英文字母的二進位代碼。

英文字母(以上表為例)

二進位

表示法

十進位

數值

01011 

11

01110 

14

01111 

15

10111 

23



學習到這邊,你對二進位數字有概念了嗎?
除了用0和1來表示外,可不可以用其他方式來表達呢?
想想看...............例如,用亮燈或不亮燈來表示,可以嗎?
例如,下圖是一組燈窗,一排有5個窗格。
每個窗格可以是全暗或亮燈。

如果亮燈代表1,全暗代表0,那下列兩組窗格,分別代表哪個數字?

二進位數字表示:00101      十進位數字表示:

二進位數字表示:10000     十進位數字表示:16


各位小朋友,我們今天的課程就到此結束。
接下來,就請到隨堂測驗區,來檢驗一下你今天的學習成果吧!
加油,GO!