能獨立設計編寫一個加減乘除計算器屬於什麼編程水平?

比較小白 自學寫程序,發現確實軟硬體都需要很了解。如果能獨立編寫一個計算器,算是什麼水平,入門了嗎?


如果是通過樹或棧等方法解析表達式進行複雜運算,支持各種函數,那底子也是相當不錯的了。(前提是你不能用正則表達式以及評論中有些人提出的語言內置解析函數等,那屬於作弊)

但是如果是這樣的:

xxx超級計算器

請輸入第一個數:3

請輸入你想要的操作:+

請輸入第二個數:4

運算結果是:3+4=7

那就屬於Primer第一章剛看完的那種傢伙。

答主本人已經實現了一個類Basic語言解釋器,大家感興趣可以拿走參考一下。

http://covbasic.org


做完後試著計算一下 0.2+0.4


我有個朋友

學了幾天,可以寫解析字元串表達式的計算器,就是你給一個任意的四則運算的代碼,程序解析表達式出結果

又學了幾天,一星期的時候,可以寫帶界面的計算器,當然,不是用什麼界面庫,自己寫程序用像素點畫字元畫界面

哦對了,當然不是自學的,一天三小時

你說這是什麼水平?

至於入門……

恐怕談不上入門吧?


獨立設計一個計算器,看似簡單,實則對於初學者還是有些困難,水不深亦不淺。

個人想到的計算器的實現,由簡單到複雜有下面四層。

1,看到題目第一反應,就是實現兩個數運算功能的計算器。

N1 opt N2

其中N1、N2是運算數字元串。調用基本庫(或者自行實現),將字元串轉換成整數。然後再判斷opt是哪種運算符並進行計算。

這種計算器,實現最簡單直觀,也不考究什麼演算法能力。難點集中在GUI相關庫的調用上。我大學時也寫過不少基於swing/AWT的GUI小程序,初學時候能做出來還是很有成就感的 : ) 布局管理器,GUI組件的選擇、事件回調等,很快就可以做出來。

示例圖比如

局限性:計算功能有限,很初級。不過我發現MIUI計算器默認就是這麼多功能..

2,作為一個喜歡google的程序猿目標,通過簡單搜索,我們了解到用棧實現計算器的思路:用堆棧將算術表達式轉換成後綴表達式。通過出棧、入棧等操作,就可以執行複雜算術表達式的計算。還支持括弧啊!

難點:我們需要了解棧和其他一些數據結構,轉換成後綴表達式及計算的演算法。相比第一種,GUI方面的實現基本沒有變化。

3,作為一個有追求有理想的程序猿,天天刷知乎。編譯原理相關問題推送次數,沒有1千也有800。這年頭不會點編譯原理好像沒法和人打招呼!好像還有什麼比賽寫parser的戰鬥?你懷著好奇心,依稀記得是龍書、鯨還是虎書什麼的,找來研究了一下,了解到了基本的編譯器前端實現原理,並且聽說了Yacc /Antlr 之類的工具。

於是你藉助Antlr這個語言識別工具實現了這個計算器。參考網上的算術表達式對應的語法規則,結合Antlr相關api的用法,可以解析表達式為抽象語法樹。在用visitor模式遍歷這棵樹就計算出結果了。

4,完成了3,又感覺還是要動手實踐。從產生式定義、消除左遞歸、詞法分析、語法分析、語法制導。。不過一步步做好了,估計那時候沉溺在編譯器技術里不能自拔,早就忘記最開始要做的是實現一個簡單的計算器了。

ps:做很多東西都可深可淺。不過有時間折騰學習新東西還是很有意思的 : )

福利

知乎互聯網開發JAVA技術的QQ交流群 99350049 ,裡面有來自各大一線互聯網的同學,來為大家指導 。交流java技術,模擬面試等。 大牛非誠勿擾

參考資料:

1,逆波蘭表示法 wikipedia.org 的頁面

2,使用 Antlr 開發領域語言 http://www.ibm.com/developerworks/cn/java/j-lo-antlr/index.html


能一絲不差地模擬Windows自帶計算器就算你NB,微軟工程師水平!

評論區有很多人不理解為什麼這個很難。讓我們看看微軟工程師的傑作(之一):

輸入4,開根號,如圖

減去2,結果為:

別小看計算器,裡面有千千萬萬彩蛋等你去發掘去解決哦。


看是哪一種咯,比如我上學的時候就一個人完成幾乎分配到全班的任務。用51彙編顯示板寫一個加減乘除計算器。還帶餘數功能。我記得還得考慮led顯示數字的頻閃問題,不能太快,太亮對led壽命有影響,也不能太慢,看出來閃就不好了。

但是複雜起來用彙編寫個開根號或者極限運算,積分微分那就很厲害了。用C寫出積分微分也就是入門水平。當然現在寫代碼用彙編的寫的也是真少。多數都是用彙編調試。

等到高級語言,很多計算方式都是由API提供的。所以問題就是界面的設計和API的利用的問題了,這個時候你使用的應該是一個面向對象語言。

更高級的是能夠識別公式,根據公式直接求出結果的高級計算器,一般來說,這種計算器是工業化的產品,之前我寫過針對流體力學和彈性力學的計算器,主要還是給我媽用。。。算是第一次面向客戶需求編程?

還有更高級的,直接識別屏幕手寫或紙面的公式來進行計算。這個要用到圖形學了,已經非常高端了。

還有更高級的,AI級別的【數學題目處理系統】根據輸入的題設給出結果。這個就看能解決問題的複雜度了,比如能解決小學應用題水平。。還是能解決工業數據計算水平。

總之,即使是一個計算器,就是學無止境啊。編碼的路還長著呢。


計算機專業大一的水平吧


學習任意網路庫,然後:

http://products.wolframalpha.com/api/


Sub Main()
Shell Environ("windir") "calc.exe"
End Sub

完成。


如果指的是解析(1+2)*-3+4--1這種,大致上是NOIP省賽二等獎、高一OIer的水平


很簡單呀

p eval gets while true


我學了五分鐘Ruby後實現的一個功能完善的命令行計算器(當然如果你要GUI的話還是比較複雜的)

代碼如下,你看我還沒用到符號,純字母+空格。

loop do p eval gets end

可以進行大整數運算,浮點運算,乘方取余都支持。

我覺得這完全不需要什麼水平。


看你怎麼寫。

開始的時候你看程序是邏輯,是ifelse whiledo,所以計算器程序首先要實現交互邏輯,再實現轉化邏輯,最後是運算邏輯,輸出邏輯,差錯處理邏輯。- 1

後來你發覺這是個閉合領域問題,用戶操作不過改變一個叫做算數序列的狀態,四則算數序列是語言原生支持的,可以簡單到eval。- 2

不過你發現那樣容錯不好做,所以還是放棄eval,但你知道算數序列的本質還是數據,所以你做了一個抽象,寫了ADT把字元序列以數組封裝起來,對每個字元的語義做了映射,這樣,以後對於這個ADT的維護就主要是對這個映射關係的維護。- 3

第一段是常識和直覺,沒什麼不好但不優,第二段是有了編程思維,第三段是有了工程思維,你需要很好的抽象封裝意識,需要數據驅動的意識,需要工程的品位才能到第三段。

最後一段,是關於這類問題的一般解,你也許就會去看如何實現一個parser這樣的東西了,結果你發現貌似那技術多年前的課本上就有,只不過自己睡過去了。

^.^


軟硬體全涉及?

好奇題主寫的什麼計算器,是那種給個晶元加個塑料包裝就可以帶進考場用的嗎?

那水平還可以啦,如果毫無bug


我半年前也擼過一個,一開始在手機上面AIDE擼的,現在用的是IDEA.

MikiraSora/ExtrameFunctionCalculator(dev分支)

除了控制台輸出的帶顏色的內容用的是JCDP,其他都是自己獨立寫的。

實現的內容有

1、簡單的加減乘除運算,還有括弧、取余、乘冪

2、支持變數、表達式變數、函數等混合運算

3、內有內建函數cos()、sin()、fact()

4、支持無限循環小數表達(如1.23(45)代表1.23454545..)

5、支持自定義函數,如 f(x,a,b,c)=a*x^2+b*x+c

6、支持自定義操作符,不過僅實現二元操作符(可改制)

7、支持精度無損(原理是縮小一位精度來運算)

8、支持簡單的邏輯運算判斷,簡單的if判斷計算,for循環計算

9、支持已聲明的變數和函數的簡單保存和載入

10、擼了個簡單的解釋器和執行器,能執行簡單的腳本。

現在有的坑是:

1、函數圖像繪製

2、表達式優化,比如1/3*3會優化成(1*3)/3 ,不過有BUG,先鴿著

3、自動求導(我高數查單掛了,鴿著)

另這個是我第一次學習JAVA所練手的項目,求大佬不噴為啥單文件幾千行代碼....因為當時寫high了然後也懶得弄分離了(逃


把卡西歐各款計算器價格作為標準

軟硬兼顧,硬體自己設計,自己搭建,軟體自己寫底層驅動,計算器系統

能做出100塊以上的卡西歐計算器的水平就能算大牛了


我覺得這個問題需要分成語言不同的難度。


部分學校計算機專業課程有verilog實現七段數碼管的加減乘除計算器的實驗,兩節課完成。還有用高級語言模擬二進位來實現加減乘除計算器的課程實驗。


題主說的只是表象,我姑且以常人的角度推理題主的意思,那麼能實現簡單計算器的人,水平屬於入門級別,會實現計算器,意味著懂語言的基本運算,邏輯判斷,循環分支,甚至數組,少量的數據結構及演算法知識。

當然,前提只是一般的計算器,基本實現功能,不要求一點bug都沒有。

我們不妨不正經一點,假設題主說的是支持浮點運算的計算器呢?精度怎麼處理?超長數據怎麼辦?性能如何?

倘若可以支持積分,甚至高階的數學函數計算呢?

細思極恐,哎呀呀,我有種給我個支點,我可以翹起地球的小pp的感覺。

題主原諒我的胡說八道哈~


不清楚題主是要造軟體還是硬體。軟體是要C++還是py,要不要圖形界面,可以用多少輪子;硬體是從門開始還是從中規模集成電路開始,要什麼樣的效果,7段數碼管的那種只有加減乘除等於和現在casio的這種點陣顯示配上左右可編輯的難度也是完全不一樣的。

==== 正文開始 ====


推薦閱讀:

手機硬體升級一樣會重蹈PC覆轍,無力挽救的「負優化」是行業潛規則
帶你逛西雅圖活電腦博物館(五)
SSD的隨機讀寫與順序讀寫?
SSD+HDD,在不運行HDD程序的前提下,HDD會不會發出聲音?

TAG:軟體 | 編程 | 計算機 | 硬體 | 嵌入式系統 |