程設不歸路

You are currently browsing the archive for the 程設不歸路 category.

[整理]Ajax初學日記 - 08/11/2007

其實早就應該看的東西,硬是拖了很久才去碰,我第一個啟蒙的程式語言其實是HTML,HTML的語法不難,剛學的時候還沒CSS這玩意,所以一個網頁裡的效果要美要屌,很多地方就是要在HTML裡動動手腳,但是後來CSS出來統一了網頁架構等等,就沒在碰了(其實這樣也好,一個CSS檔把你要一一填上的code匯整只要寫一次就夠)。之後又出現DHTML、XHTML等等的這些東西就不用提了,看都沒看過(茶)。

Ajax這東西我相信有在玩程式(網頁或java這類的)應該都會有點耳熟的感覺,其實很多人應該都會知道它是一個非同步的觀念,但是非同步跟同步到底有什麼不同?我在一開始學PHP的時候,覺得PHP真好上手(沒記錯PHP是以同步處理為出發點?),寫個跟資料庫結合的會員資料修改頁面,把欄位那些的設定好,SQL語法寫好,就行了!雖然這樣看起來好像很簡單,如果一個網頁裡包含了太多的元件(圖片這類的),網頁讀取起來就格外的慢(加上台灣的網路,我想你會想砸電腦)。非同步的觀念,有聽過的應該都知道是讓你在執行這個動作時,其他在網頁上的動作你一樣可以用,因為Ajax一出現的時候,是希望能讓使用者在執行網頁動作的時候,跟在執行自己電腦裡的應用程式有一樣的效果,Ajax是嘗試建立視窗應用程式的功能和互動性。

相關網頁:IBM

[學習]CSS之路(1) - 07/12/2007

最近在啃一本字典(就以內容物來說它真的是字典)博碩文化出的(博碩的東西其實真的很不錯)書名:「最新詳解Javascript&HTML&CSS語法辭典」

為了搞定專案讓我很頭痛的排版問題,所以才去食這本,其實就以工具書來講,這本真的不錯,一個語法有一個實例,淺顯易懂,而且每個語法在瀏覽器的支援上都有明確的告知。

剛剛在弄CSS的置中對齊這部份,為了因應所有使用者瀏覽器的不同,所以先從這部份下手,至少要確保讓所有使用者進我們網頁的時候看到的東西是一樣的,不過好死不死,有些還不錯的語法,IE不是只有6版以後才有支援,就是完全不支援(7版就不得而知了),所以在CSS裡margin這個語法剛試了一下,瀏覽起來三種browse都沒問題(IE、FF、Opera),不過這個語法IE6以下不支援,所以換從絕對位置配置下手,position: absolute這個語法就都有支援了(不要跟我說你們誰家還在用IE4版的!),這個語法會隨著你的瀏覽器而自動更改內容的顯示格式,還不錯用。


position: absolute
top: 從上面開的始距離
bottom: 從下面開的始距離
left: 從左邊開的始距離
right: 從右邊開的始距離

[程式]PHP筆記本之MySQL語法 - 6/06/2007

這幾天…應該要說這幾個禮拜都在弄專案網頁,也煩了whatup很久(感恩啊~),說真的,PHP真的還蠻好寫的,只是現在他還不會跟我很熟就是…Orz

說到SQL這類的資料庫語法,有接觸過的應該都會知道SELECT、INSERT、UPDATE…etc,這些萬年不可能變寫法的語法,其實這幾天我都在跟他們打好關係(也被表了好幾次),但是學程式除了看書、問人以外就只能靠自己,怎麼靠自己?在錯誤的地方把變數印出來是否有值,不然就是把全域變數($_POST、$_SESSION…etc這類的)印出來(用print_r())看看有啥全域變數可用或是自己打錯的,這幾天常常用土法煉鋼把專案的網頁一個一個建起來,還蠻有成就感的(是嗎)。

至於SELECT這次就不講了,因為SELECT要難可是真的會很難的,但是下的好就是可以省去資料庫多餘的運作(茶)。這次先講一下INSERT這語法,或許大家都知道在SQL上怎麼下這個指令,可是在PHP上卻有一點點不同(我是拜google才拜到有人有發一篇insert的文才知道怎麼用)。

INSERT into table(資料表格名稱) VALUE ('$a','$b','$c','$d');

value之前的就不用說了吧,要說的是後面這邊,記住都是用'’包變數寫,寫錯的話是不會顯示,而且有多少欄位就要給多少個值,可以下NULL的就直接下不需要用'’包起來。

[思考]樹狀式下拉選單 - 6/02/2007

其實這東東簡單來講就是像一般現在會員註冊可以看到的功能,例如選生日日期的時候,選大月會出現31天、選小月會出現30天、選2月會出現28天,至於這東東就是所謂的樹狀下拉選單,只是這東東在書上是很難找到寫法的,我是不清楚可以用幾種方法呈現這個結果。在拜了幾小時的Google大神後,我只有找到JavaScript的code,完全沒有php的影子(口古月!這分明是排擠!),不過光用php寫個下拉選單來講,如果資料量少似乎沒有用到的必要(整段code並不短),但是如果資料量大的話,一個while下去就跑完了多歡樂(茶)。

現在還是先把樹狀下拉選單放一邊好了,先搞定會員資料修改卡實在,畫面和註冊頁面不要給我開天窗啊 囧>

[程式]SESSION的使用 - 5/25/2007

很久沒在這區寫寫東西了,自從資料結構high pass後(死)。不過這次又有機會在這邊寫東西啦!

因為專題本想是用現在時下(?!)最流行(?!)的趨勢(?!)“Web 2.0”概念寫出些另類好玩的東西來玩玩,一講到Web 2.0有在玩程式的會比較先想到ajax這技術吧!不過很可惜,我不會(被拖走),所以還是先從PHP下手,畢竟曾經玩過,而且又好寫。

SESSION這東東很好用,其實就像大家耳熟能詳的cookies,在翻書的時候有說他是超級全域變數(以為加了超級就會很厲害嗎!),但事實上的確因為這個好用的函數讓我一直苦惱login的問題解決了(我拜google拜這麼久就是沒有個簡單的login code)!

首先在執行session_start()的時候,在這行之前是啥東西都不能輸出,不單單只有echo,連html裡的title也算輸出,所以我的做法是直接把這東西擺到網頁程式的前幾行,接下來在login比對密碼完成之後把session註冊一個logind並寫入true(已經登入),接下來在各網頁裡只要加上logind變數是否為true就行了(至少這麼陽春的寫法讓我瞬間解決掉好幾個問題)。

雖然session的用法還有很多種,我是沒辦法完整詳細的說明(就憑你!),所以下面這個網頁都是在講session的東西,有興趣的自己看看囉!

相關網頁:PHP程式設計講義區-PHP基本語法

程式設計之路-用stack把中敘轉後敘

其實這是這學期上的課啦,不過我只算是完成50%,因為計算結果的那部份一下push一下pop把我搞混了,加上最近事情很多,所以沒啥時間去了解(死)。先放上轉後敘的code。

==

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #define MAX 50
  5. typedef char Eltype;
  6. Eltype infix[MAX], postfix[MAX];
  7. /*=======================================*/
  8. /*                stack結構              */
  9. /*=======================================*/
  10. /* 將storgae設為暫存陣例,top為stack位置 */
  11. /*=======================================*/
  12. struct stackRec
  13. {
  14. Eltype storage[MAX];
  15. int top;
  16. };
  17. typedef struct stackRec stacktype;
  18. /*=======================================*/
  19. /*          檢查stack是否已滿            */
  20. /*=======================================*/
  21. int isfull( stacktype *s )
  22. {
  23. return (*s).top == MAX;
  24. }
  25. /*=======================================*/
  26. /*          檢查stack是否為空            */
  27. /*=======================================*/
  28. int isempty( stacktype *s )
  29. {
  30. return (*s).top == 0;
  31. }
  32. /*=======================================*/
  33. /*        讓stack回到初始位置            */
  34. /*=======================================*/
  35. /*    因為內容會改變所以傳位置*s         */
  36. /*=======================================*/
  37. void initialize( stacktype *s )
  38. {
  39. (*s).top = 0;
  40. }
  41. /*=======================================*/
  42. /*            放值進stack裡              */
  43. /*=======================================*/
  44. /*    因為內容會改變所以傳位置*s         */
  45. /*=======================================*/
  46. void push( Eltype x, stacktype *s )
  47. {
  48. if( isfull(s) )
  49. {
  50. printf("stack已滿\n");
  51. exit(1);
  52. }
  53. else
  54. (*s).storage[(*s).top++] = x;
  55. }
  56. /*=======================================*/
  57. /*            取出stack裡的值            */
  58. /*=======================================*/
  59. /*    因為內容會改變所以傳位置*s         */
  60. /*=======================================*/
  61. Eltype pop( stacktype *s )
  62. {
  63. if( isempty(s) )
  64. {
  65. printf("stack空的\n");
  66. exit(1);
  67. }
  68. else
  69. return (*s).storage[--(*s).top];
  70. }
  71.  
  72. int p( Eltype d )
  73. {
  74. if( d == 'x' || d == '/' )
  75. return 2;
  76. else if( d == '+' || d == '-' )
  77. return 1;
  78. else
  79. return 0;
  80. }
  81.  
  82. void in_pos( Eltype infix[], Eltype postfix[] )
  83. {
  84. Eltype post;
  85. int i = 0, j = 0, a, b, c;
  86. stacktype s;
  87. initialize( &s );
  88. /*===========================================================================*/
  89. /*                                  判斷運算元                               */
  90. /*===========================================================================*/
  91. /* 1. ( ) 的優先權最大,在來是* / - +,所以先判斷 ( )                        */
  92. /* ------------------------------------------------------------------------- */
  93. /* 2. postfix 為後敘陣列、stack為暫存陣列                                    */
  94. /*===========================================================================*/
  95. /* 基本運算式 + 跟 -                                                         */
  96. /* 在判斷式子的第一步先把第一個得到的數字丟進postfix,第二步則是把運算式丟進 */
  97. /* stack這個暫存的陣列裡。只要是在式子裡的數字都是優先丟進posrtfix,而運算式 */
  98. /* 則是先檢查stack這個暫存陣列裡是否有其他運算式,如果有則先把在stack裡的運  */
  99. /* 算式丟進postfix裡,如果沒有則直接丟進stack                                */
  100. /* ------------------------------------------------------------------------- */
  101. /* 判斷運算式 + - * /                                                        */
  102. /* 先判斷stack裡的運算元為何,如為*或/則優先輸出,否則直接輸出               */
  103. /*===========================================================================*/
  104. while( ( post = infix[i++] ) != '\0' )
  105. {
  106. switch(post)
  107. {
  108. case '(': push( post, &s );
  109. break;
  110. case ')':
  111. if( ( !isempty( &s ) )
  112. && ( p( s.storage[s.top-1] ) >= p( post ) ) )
  113. postfix[j++] = pop( &s );
  114. else
  115. pop( &s );
  116. s.top--;
  117. break;
  118. case '+':
  119. case '-':
  120. case '*':
  121. case '/':
  122. while( ( !isempty( &s ) )
  123. && ( p( s.storage[s.top-1] ) <= p( post ) ) )
  124. postfix[j++] = pop( &s );
  125. push( post, &s );
  126. break;
  127. default:postfix[j++] = post;
  128. }
  129. }
  130. while( !isempty( &s ) )
  131. postfix[j++] = pop( &s );
  132. }
  133.  
  134. int main( void )
  135. {
  136. int i = MAX;
  137.  
  138. while(i--)
  139. {
  140. infix[i] = '\0';
  141. postfix[i] = '\0';
  142. }
  143. printf("輸入式子:");
  144. scanf("%s", infix);
  145.  
  146. in_pos( infix, postfix );
  147. printf("後敘輸出:%s\n", postfix);
  148.  
  149. getch();
  150. }

程式設計之路-C++(2)

其實這個程式拖很久才傳上去,主要是因為第二題的cin.get這個函數搞不懂意思,所以不敢亂寫,所以看了很久的網頁才大概了解了一點點意思,不過這次的程式還算ok吧,不會很難。

  1. /*====================================================================================================
  2. 程式功能:將一維陣列中Hello World!!的字串反過來輸出
  3. 程式變數:i為陣例w字數的迴圈次數
  4. ====================================================================================================*/
  5. #include <iostream.h>
  6.  
  7. int main()
  8. {
  9. char w[]="Hello World!!";
  10. int i;
  11.  
  12. for( i = strlen(w); i >= 0; i-- )//把w中的字母做遞減迴圈,並每次輸出w中的字母
  13. cout<<w[i];
  14.  
  15. cout<<endl;
  16. }
  1. /*====================================================================================================
  2. 程式功能:將字母大小寫轉換
  3. 程式變數:a為輸入數值,c為轉換後的字母,i為C陣例的迴圈次數
  4. ====================================================================================================*/
  5. #include <iostream.h>
  6.  
  7. int main()
  8. {
  9. char a,c[100];
  10. int i = 0;
  11.  
  12. while( cin.get(a) && a !='\n' )//將a輸入的數值作迴圈次數,並把\n的換行捨去
  13. {
  14. if( a > 64 && a < 91 )//假如a的ascii介於64與91之間,則a+32
  15. a = a + 32;
  16. else if( a > 96 && a < 123 )//假如a的ascii介於96與123之間,則a-32
  17. a = a - 32;
  18. c[i++] = a;//把轉換後的字母存入c陣例中
  19. }
  20. c[i] = '\0';//把不到100個字母的陣例直接加個結束符號
  21. cout<<c<<endl;
  22. system("pause");
  23. }
  1. /*====================================================================================================
  2. 程式功能:把輸入的中文月份轉成英文
  3. 程式變數:a為中文月份,b為英文月份,c為所輸入的月份,i為回圈次數
  4. ====================================================================================================*/
  5. #include <iostream.h>
  6. #include <string.h>
  7.  
  8. void main()
  9. {
  10. char a[12][7] = {"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};
  11. char b[12][10] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
  12. char c[7];
  13. int i;
  14.  
  15. cout<<"請輸入中文月份:";
  16. cin>>c;
  17. for( i = 0; i < 12; i++ )//把12個月份都跑一次
  18. {
  19. if( strcmp(a[i],c) == 0 )//作a跟c的比對,如果相等,則輸出同樣月份的英文
  20. cout<<b[i]<<endl;
  21. }
  22. }

程式文章-排序法

在SG論壇上的程設版逛逛,發現有人在問有沒有比氣泡排序法還快的排序法,其實我知道是哪種,不過不會寫就是了(沒辦法,五專時期老師太差,跟大學一樣靠純理論上課,班上沒幾個人想聽的,就算聽了你也寫不出來,因為講太爛 = =)。

後來在下面的討論串看到有人有回文而且有把寫法貼上來,不過我不是很清楚怎麼run就是了(副程式的地方寫的很妙,沒看過的寫法)

http://www.cplusplus.com/ref/cstdlib/qsort.html

  1. /* qsort example */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int values[] = { 40, 10, 100, 90, 20, 25 };
  6.  
  7. int compare (const void * a, const void * b)
  8. {
  9. return ( *(int*)a - *(int*)b );
  10. }
  11.  
  12. int main ()
  13. {
  14. int * pItem;
  15. int n;
  16. qsort (values, 6, sizeof(int), compare);
  17. for (n=0; n<6; n++)
  18. {
  19. printf ("%d ",values[n]);
  20. }
  21. return 0;
  22. }
  23.  
  24. </br>

程式設計之路-C++(1)

拖了很久的程設功課到現在才想到要趕快解決,為了避免給老師有不好的印象,還是早點解決它好了。
(雖然聽說改作業的助教到期中考前會開來看就很偷笑了,不過還是以防萬一…)

第三題我本來想用函數去抓取電腦時間來作判斷,不過當我發現要用二維陣列的時候,我就敗了…Orz

  1. /*=============================================
  2.   程式功能:將一維陣列中放入1~10並計算其平方和
  3.   程式變數:a為j兩次方變數,b為a的累積加總,i為跑for迴圈所需之數值,j為k陣例內之數值,k為1~10的陣例
  4. ===============================================*/
  5. #include <iostream.h>
  6. void main()
  7. {
  8.         int a, b = 0, i, j, k[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  9.         /* 讓陣例k內之數值先做平方後加總 */
  10.         for( i = 0; i <= 9; i++ )
  11.         {
  12.                 j = k[i];
  13.                 a = j * j;
  14.                 b += a;
  15.         }
  16.         cout<<b<<endl;
  17. }


  1. /*=============================================
  2.   程式功能:從鍵盤輸入10個浮點數到一維陣列中,並利用函式計算平均值
  3.   程式變數:c為加總k陣例內所有的數值,b為加總後除以10的平均值,i為跑for迴圈所需之數值,j為k陣例內之數
  4.             值,k為輸入的陣例
  5. ===============================================*/
  6. #include <iostream.h>
  7. float sum(float [10]);
  8. int main(void)
  9. {
  10.         float k[10];
  11.         int i, j;
  12.         /* 將10個數字輸入至k陣例裡 */
  13.         for( i = 0; i <= 9; i++ )
  14.              cin>>k[i];
  15.         cout<<sum(k)<<endl;
  16.         system("pause");
  17. }
  18. float sum(float k[10])
  19. {
  20.         int i;
  21.         float j = 0, c = 0, b = 0;
  22.         /* 將k內之陣例導入j後,用c做加總 */
  23.         for( i = 0; i <= 9; i++ )
  24.         {
  25.                 j = k[i];
  26.                 c += j;
  27.         }
  28.         b = c / 10;
  29.         return ( b );
  30. }


  1. /*=============================================
  2.   程式功能:利用二維陣列從螢幕輸出本月份的月曆
  3.   程式變數:i, j為跑for迴圈所需之數值,,k為日期陣例
  4. ===============================================*/
  5. #include <iostream.h>
  6. void main()
  7. {
  8.         int i, j;
  9.         int k[5][7] = { { 0, 0, 0, 1, 2, 3, 4 },
  10.                         { 5, 6, 7, 8, 9, 10, 11 },
  11.                         { 12, 13, 14, 15, 16, 17, 18 },
  12.                         { 19, 20, 21, 22, 23, 24, 25 },
  13.                         { 26, 27, 28, 29, 30, 31, 0 } };
  14.         cout<<"============================"<<endl;
  15.         cout<<" Sun Mon Tue Wed Thu Fri Sat"<<endl;
  16.         cout<<"============================"<<endl;
  17.         /* i是跑這個月有幾個禮拜,j是跑這個禮拜的天數 */
  18.         for( i = 0; i <= 5; i++ )
  19.         {
  20.                 for( j = 0; j <= 6; j++ )
  21.                 {
  22.                         /* 如果該數值是0,則傳回四個空格 */
  23.                         if( k[i][j] == 0 )
  24.                                 cout<<"    ";
  25.                         /* 如果小於10,則在數值前面加上三個空格 */
  26.                         else if( k[i][j] > 0 && k[i][j] < 10 )
  27.                                 cout<<"   "<<k[i][j];
  28.                         /* 如果大於10,則在數值前面加上兩個空格 */
  29.                         else
  30.                                 cout<<"  "<<k[i][j];
  31.                 }
  32.                 cout<<"----------------------------"<<endl;
  33.         }
  34. }


  1. /*=============================================
  2.   程式功能:請宣告一個二維陣列,並存入數字。然後利用函式,來找出此陣列中的最大值和最小值
  3.   程式變數:i, j為跑for迴圈所需之數值,,k為日期陣例
  4. ===============================================*/
  5. #include <iostream.h>
  6. int max( int [3][4] );
  7. int mix( int [3][4] );
  8. int main( void )
  9. {
  10.         int x[3][4] = { { 34, 67, 60, 20 },
  11.                         { 38, 48, 56, 19 },
  12.                         { 26, 57, 49, 89 } };
  13.         cout<<max(x)<<endl;
  14.         cout<<mix(x)<<endl;
  15.         system("pause");
  16. }
  17. int max( int a[3][4] )
  18. {
  19.         int i,j;
  20.         int a1 = a[0][0];
  21.         /* 用for跑二維陣列內的數值作判斷,如果比a1大的話則輸入a1 */
  22.         for( i = 0; i < 3; i++ )
  23.         {
  24.                 for( j = 0; j < 4; j++ )
  25.                         if( a1 < a[i][j] ) a1 = a[i][j];
  26.         }
  27.         return ( a1 );
  28. }
  29. int mix( int b[3][4] )
  30. {
  31.         int i,j;
  32.         int a2 = b[0][0];
  33.         /* 用for跑二維陣列內的數值作判斷,如果比a1大的話則輸入a1 */
  34.         for( i = 0; i < 3; i++ )
  35.         {
  36.                 for( j = 0; j < 4; j++ )
  37.                         if( a2 > b[i][j] ) a2 = b[i][j];
  38.         }
  39.         return ( a2 );
  40. }

 

一月 2009
M T W T F S S
« 七月    
 1234
567891011
12131415161718
19202122232425
262728293031  

 

網摘、引用、連結,不轉載

 


Bad Behavior has blocked 1343 access attempts in the last 7 days.