2010-10-11 67 views

回答

1

例如,你可以給他們一個簡單的for loop聲明,並要求他們用while聲明或反之亦然。併爲switch caseif等其他語句執行此操作。

2

尋找實現簡單算法的方法總是提供很好的練習。如果你認爲他們已經準備好了更高級別的數據結構(鏈表,圖表等),那麼你可以給他們一個深度優先搜索問題。如果他們還沒有在那個級別,嘗試使用數組和for/while循環。你可以很容易地在整個數組上遍歷很多函數。例如,平均一個數組的值,對這些值進行求和,或創建一個N-1個元素的新數組(其中第一個數組有N個元素),每個元素都是元素N和元素N + 1之間的差異原始數組。

如果你想嘗試任何一個例子進入現實世界,請嘗試成績計算算法(給出一個等級列表,找到GPA)或購物車(你購買了項目X中的1個,項目Y中的3個,2的項目Z ......總價?)

您也可以通過加權成績(3小時班中的B和1小時班中的A = 3.25的GPA)來使其複雜化

我也建議對數據庫或文件輸入/輸出做一點工作。保存工作結果並在稍後回憶的能力將極大地擴展他們對諸如網站等複雜大型系統的理解。

如果你認爲它不是太複雜(我不知道學生的水平),我可以修改一兩年前在班上的作業(我們在PERL中做過)。它涉及以下文本文檔:

1   | Billy | Bob | Kentucky | Yale 
    2 | Sally |  Sue| Virginia | Harvard 
... 

我們被告知要承擔模式id | first_name | last_name | state | university,但有可能是白色空間中的變量數量。也有一些malformated條目,如:

... 
    7 | Joe | 3 |   Ohio | MIT 
... 

顯然3不是一個姓。我們被告知使用正則表達式來驗證ID是一個小於10000的整數,首字母和尾名只包含字母,州必須以大寫字母開頭,後面跟着一些小寫字母,而大學只能由字母組成。如果有任何錯誤,我們不得不說錯誤是什麼以及它所在的文件的哪一行。 (例如:「錯誤行7:3是一個無效的姓氏,應該只有字母」)

在此之後,我們進入一個循環(我們的程序是交互式的,從shell運行),他們可以輸入1爲id ,2爲名,3爲姓,他們輸入0退出。無論他們投入什麼,他們都可以輸入一個字符串進行搜索,並找到符合條件並顯示其信息的學生。如果您正在教授PHP在Web服務器上使用,則可以允許他們提交表單並檢查$_POST信息,而不是交互式循環。

+0

非常感謝Steven。你給了我一個想法,讓他們將表單數據存儲到文本文件中,併爲之後的數據創建一個CRUD。這將對字符串以及文件操作有很大的理解。 – 2010-10-11 20:10:51

+0

我真的不喜歡教「像」(鏈表,圖表等)「通用」編程東西的想法。如果我要教PHP的東西,我會用一個更真實的例子去。例子是帶有mysql數據庫的新聞腳本。或者使用html表單等的「比薩訂餐服務」。沒有必要像「如何解決一個加權週期無向有向圖的最短路徑問題......」這樣的任務來折磨你的人。我沒有使用PHP來解決圖形問題。 – Progman 2010-10-14 20:07:00

+0

泛型編程的東西是算法和複雜性分析的核心。更不用說它是我們計算世界的大多數程序化解決方案的核心。例如:假設您想爲書籍創建標籤系統。你可以給一本書的標籤「青少年」,「吸血鬼」,「浪漫」(知道我在說什麼書?)。你可能會說「哦,只是使用多對多的關係」。那麼這種關係現在已經在谷歌上得到很好的記錄,但它曾經是一個通過圖形分析解決的算法問題。 – stevendesu 2010-10-15 01:01:51

1

陣列是我認識的大多數初學者的絆腳石。我親自運行他們通過單維和多維數組循環和步進。隨着MVC框架變得如此盛行,foreach循環和數組函數對編程成功至關重要。