2007年6月28日 星期四

EXCEL:自動換列與強迫分行

  想要有統計表格內容的數字,又想要排版,怎麼辦?在表格裡怎麼斷行,我一直都在想這個問題,昨天又有人來問同一個問題,上網找了找,還真的可以斷行和自動換列於儲存格裡,以後報表不會再醜醜的了!

自動換列與強迫分行,避免資料變亂碼

字數太多,通常儲存格裡的資料變亂碼,或被下一欄遮住。若不想更動儲存格寬度,只要透過斷行功能便可自動換行。

先將超出範圍的儲存格選取,並找到上方功能列「格式」、「儲存格」。跳出來視窗則選擇「對齊方式」,並將「自動換列」勾起再確定。

除此,也可利用儲存格裡欲斷行的文字強迫分行。將滑鼠左鍵點選儲存格兩下,透過游標找到斷行文字,並以鍵盤「Alt鍵」輕壓不放,再加上「Enter鍵」同樣有斷行效果。(圖2)


(圖2)
>>立即欣賞step by step多媒體教學



以上轉載自
活用 Excel 儲存格,快速製作超完美表單
作者:溫典寰 攝影:天下雜誌網路部

2007年6月25日 星期一

C 語言新手十誡

T's hoop: C 語言新手十誡: "轉錄自ptt

作者: khoguan (Khoguan Phuann) 看板: C_and_CPP
標題: C 語言新手十誡(增修一版)
時間: Sat Sep 3 01:07:31 2005

C 語言新手十誡(The Ten Commandments for Newbie C Programmers)

by Khoguan Phuann
請注意:

(1) 本篇旨在提醒新手,避免初學常犯的錯誤(其實老手也常犯:-Q)。
但不能取代完整的學習,請自己好好研讀一兩本 C 語言的好書,
並多多實作練習。

(2) 強烈建議新手先看過此文再發問,你的問題極可能此文已經提出並
解答了。

(3) 以下所舉的錯誤例子如果在你的電腦上印出和正確例子相同的結果,
那只是不足為恃的一時僥倖。

(4) 不守十誡者,輕則執行結果的輸出數據錯誤,或是程式當掉,重則
引爆核彈、毀滅地球(如果你的 C 程式是用來控制核彈發射器的話)。


一、你不可以使用尚未給予適當初值的變數。

錯誤例子:
int accumulate(int max) /* 從 1 累加到 max,傳回結果 */
{
int sum; /* 未給予初值的區域變數,其內容值是垃圾 */
int num;
for (num = 1; num <= max; num++) { sum += num; } return sum; } 正確例子: int accumulate(int max) { int sum = 0; /* 正確的賦予適當的初值 */ int num; for (num = 1; num <= max; num++) { sum += num; } return sum; } 二、你不可以存取超過陣列既定範圍的空間。 錯誤例子: int str[5]; int i; for (i = 0; i <= 5; i++) str[i] = i; 正確例子: int str[5]; int i; for (i = 0; i < pc2 =" 0;" pc1 =" 'a';" pc2 =" 'b';" pc1 =" &c;" pc2 =" (char" pc1 =" 'a';" pc = "john" pc =" 'J';" pc =" 'J';" s1 = "Hello, " s2 = "world!" s3 =" strcat(s1," s2 = "world!" name =" (char" p =" strchr(name," p =" '\0';">
using std::string;

string getstr(string const &name)
{
return string("hello, ") += name;
}

七、你不可以只做 malloc(), 而不做相應的 free(). 否則會造成記憶體漏失。

但若不是用 malloc() 所得到的記憶體,則不可以 free()。已經 free()了
所指記憶體的指標,在它指向另一塊有效的動態分配得來的空間之前,不可
以再被 free(),也不可以提取(dereference)這個指標。

[C++] 你不可以只做 new, 而不做相應的 delete.

八、你不可以在數值運算、賦值或比較中隨意混用不同型別的數值,而不謹慎考
慮數值型別轉換可能帶來的「意外驚喜」(錯愕)。必須隨時注意數值運算
的結果,其範圍是否會超出變數的型別。

錯誤例子(1):
unsigned int sum = 2000000000 + 2000000000; /* 20 億 */
double f = 10 / 3;

正確例子(1):
/* 全部都用 unsigned int, 注意數字後面的 u, 大寫 U 也成 */
unsigned int sum = 2000000000u + 2000000000u;

/* 或是用顯式的轉型 */
unsigned int sum = (unsigned int)2000000000 + 2000000000;

double f = 10.0 / 3.0;

說明:在目前最普遍的32位元PC作業平台上,整數常數2000000000的型別為
signed int(簡寫為 int),相加後,其結果仍為 int, 但是 signed int
放不下 4000000000, 造成算術溢位(arithmetic overflow),很可能無法
將正確的值指派給 unsigned int sum,縱使 unsigned int 放得下4000000000
的數值。注意:寫成

unsigned int sum = (unsigned int)(2000000000 + 2000000000);

也是不對的。

例子(2):(感謝 sekya 網友提供)
unsigned char a = 0x80;
char b = 0x80; /* implementation-defined result */
if( a == 0x80 ) { /* 恒真 */
printf( "a ok\n" );
if( b == 0x80 ) { /* 不一定恒真 */
printf( "b ok\n" );
}

說明:在將 char 型別定義為範圍從 -128 至 +127 的系統上,int 0x80
(其值等於 +128)要轉成 char 會放不下,會產生編譯器自行定義的值。
這樣的程式就不具可移植性了。

九、你不可以在一個運算式(expression)中,對一個基本型態的變數修改其值
超過一次以上。否則,將導致未定義的行為(undefined behavior)。

錯誤例子:
int i = 7;
int j = ++i + i++;

正確例子:
int i = 7;
int j = ++i;
j += i++;

你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值,
而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的,
是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。

錯誤例子:
int arr[5];
int i = 0;
arr[i] = i++;

正確例子:
int arr[5];
int i = 0;
arr[i] = i;
i++;

[C++程式]
錯誤例子:
int i = 10;
cout << i =" 10;">
#define SQUARE(x) (x * x)
int main()
{
printf("%d\n", SQUARE(10-5));
return 0;
}

正確例子:
#include
#define SQUARE(x) ((x) * (x))
int main()
{
printf("%d\n", SQUARE(10-5));
return 0;
}

說明:如果是用 C++, 請多多利用 inline function 來取代上述的 macro,
以免除 macro 定義的種種危險性。如:

inline int square(int x) { return x * x; }

macro 定義出的「偽函式」至少缺乏下列數項函式本有的能力:

(1) 無法進行參數型別的檢查。
(2) 無法遞迴呼叫。
(3) 無法用 & 加在 macro name 之前,取得函式位址。
(4) 呼叫時往往不能使用具有 side effect 的引數。例如:

錯誤例子:(感謝 yaca 網友提供)
#define MACRO(x) (((x) * (x)) - ((x) * (x)))
int main()
{
int x = 3;
printf("%d\n", MACRO(++x));
return 0;
}

MACRO(++x) 展開來後變成 (((++x) * (++x)) - ((++x) * (++x)))
違反了第九誡。在 gcc 4.3.3 下的結果是 -24, 在 vc++ 下是 0.


後記:從「古時候」流傳下來一篇文章

"The Ten Commandments for C Programmers"(Annotated Edition)
by Henry Spencer
http://www.lysator.liu.se/c/ten-commandments.html

一方面它不是針對 C 的初學者,一方面它特意模仿中古英文
聖經的用語,寫得文謅謅。所以我現在另外寫了這篇,希望
能涵蓋最重要的觀念以及初學甚至老手最易犯的錯誤。

作者:潘科元(Khoguan Phuann) (c)2005.
感謝 ptt.cc BBS 的 C_and_CPP
看板眾多網友提供寶貴意見及程式實例。

2007年6月16日 星期六

FinalData救救自己的資料吧!

  前陣子隨身硬碟掛點,磁區整個亂掉,大部分檔案損毀,包括我幾個月和以前搜集起來的MP3專輯,還有我這一年的工作成果跟設計的案子,之前有用過這套軟體,於是又去下載來用看看,上天真是救了我一命啊!
  1. 如果檔名有亂碼的話無法還原,要重新命名才行。
  2. 使用前請不要使用磁碟重組。
  3. 連刪除兩個月的東西都找回來,真見鬼了!

以下轉載自”PcHome ToGet:FinalData 檔案救援軟體

「FinalData 檔案救援軟體」簡單快速救回你遺失的檔案
「啊!誰把檔案刪除了?什麼,連資源回收統都清乾淨了…」遇到這種情形,真的沒就了嗎?「FinalData 檔案救援軟體」讓你將原本以為沒救的檔案給救回來。

Windows 95/98/NT/2000/Me 作業系統都設有資源回收筒功能,以防止使用者意外刪除檔案,但是因為硬體空間有限,使用者常習慣性去清理資源回收筒以增加硬碟空間,如果你的檔案已從資源 回收筒清除,那你將無法找回這些已刪除的檔案。FinalData 讓你免除這個惡夢,只要四個步驟,救回你所有的檔案,支援雙位元檔案系統。

從 磁碟儲存的邏輯來看,檔案從資源回收筒刪除,其實只是刪掉了某些檔案配置表的"Reference"而已,檔案中毒或硬碟格式化的動作也是如此。 FinalData 可以復原你的檔案,就算檔案配置表、開機磁區損毀都沒有問題,甚至不需要事前安裝,也可以發揮救援的效果喔。

FinalData 簡單的使用者介面,選擇磁碟機、掃瞄、選擇要救援的檔案,OK!FinalData 啟動後,會開始掃瞄根目錄(Root Directory)並進行檢查(如果你只是要救回從資 源回收筒不小心刪除的檔案,請按「Cancel」鍵取消掃瞄過程,當你的檔案配置表(FAT)是正常的情況下,不用浪費掃瞄時間,就可以救回你的檔案。

若 是你的檔案配置表(FAT)、MBR(Master Boot Record)、開機磁區(Boot Sector)有問題,就必須進行磁碟掃瞄的動作。選擇你要進行檢查的群集(Cluster),然後按下「OK」進行搜尋,這個設計是為了避免搜尋壞軌的 動作,如果你的磁碟沒有這種狀況,當然就可
以進行全部的搜尋。試用版每次只能復原一個檔案。

2007年6月15日 星期五

USB隨身硬碟的功用

  原以為自己買了一個2.5吋的硬碟可以把資料帶著走就夠了,可惜我歸檔的能力太差,反而東一個西一個,裡頭真正的資料不多,但是解悶音樂倒是不少,我想倒是好事一件,有空閒時就來整理一下。
  但是有些東西總想要帶著走,而且幫別人處理電腦,裝一些有的沒的(我是指對方不會用的東西,大家都有這個困擾,沒多久對方會打來問那個東西是做什麼用,還以為中毒了!),於是乎就想找一些可以帶著走的東西,例如電腦檢測(修電腦用)、瀏覽器(用自己上手的比較好)、音樂播放器(比較不吃記憶體)、辦公室軟體(以防電腦的無法播簡報)、壓縮及解壓縮軟體(解壓縮的好朋友)......等等意想不到的地方。

  以前都以為軟體要裝在主機上,綠色軟體是我不想用的,因為改寫的東西,總是不放心。直到最近想到上述問題,才想要找一些好用的免安裝軟體。雖然U3很方便,可是不是好用的,怎麼用不上手,拜Google了一下,找了不少好東西:


可攜式軟體的好夥伴:Portable Apps Menu « 愛麗絲の鑰
歡迎進入ComputerDIY網站 !! - 超強企劃 - <特企>便利你的行動生活、辦公室
綠色工廠 Easylife Blog - 輕鬆。簡單。人生 - Portable Software ::