第三次作業 計算器

2022-03-03 20:05:10 字數 4624 閱讀 8562

作業鏈結

github鏈結

在自學的過程還未了解到關於queue的知識,所以預先google了一下相關知識。

queue模板類的定義在標頭檔案中。queue模板類需要兩個模板引數,乙個是元素型別,乙個容器型別,元素型別是必要的,容器型別是可選的,預設為deque型別。定義queue物件的示例**如下:

queueq1;

queueq2

queue基本操作

queueque;

que.push("hello world!");

que.push("ok");

queque;

que.push("hello world!");

que.push("ok");

que.pop(); //此時"hello world"被刪除

queueque;

cout

cout << que.empty() << endl;

que.push("hello world!");

que.push("ok");

cout << que.empty() << endl; //輸出分別為「1」和「0」

queueque;

q.push("hello world!");

q.push("ok");

cout << que.front() << endl;

que.pop();

cout << que.front() << endl; //輸出為"hello world"和"ok"

queueque;

que.push("hello world!");

que.push("ok");

cout << que.back() << endl; //輸出為"ok"

按照題目要求,將輸入交給scan類,輸出交給print類

#ifndef calculator_h_

#define calculator_h_

#include#includeusing namespace std;

class scan

;class print

; istream &read(istream &, scan &);

#endif

#include#include#include#include "calculator.h"

using namespace std;

/***********************************

description: 讀取並掃瞄表示式,將數字與符號分開壓入佇列

others: 當輸入數學表示式中有數字(含小數字)超過10位即報錯並終止程式

***********************************/

void scan::tostringqueue(string input)

if(tmp.size() > 10)

break;

} if (!tmp.empty())

while (i < len &&

(input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/'

|| input[i] == '(' ||input[i] == ')'))

}}/***********************************

description : 輸出佇列中的資料

***********************************/

void print::output(queueq)

}/***********************************

description:從給定流中 將資料讀到給定的物件中

others: 本意是將此函式包含至scan類中,讓讀入的功能都讓專門的類實現,

但是在實際操作過程中,確頗感困難,所以就獨自定義了乙個類相關的非成員函式

error中的資訊提示我可能是通過非成員函式訪問操作了私有部分的資料,但是回看**的過程頗為迷茫,因為我將print類與read函式都設為scan的友元,所以在試了多次改正的辦法都沒有解決,半天下來也有些心浮氣躁,可能因為書此時看得還是頗少,掌握東西的量還不足,對於一些錯誤無法查詢出來。在google中也並未找到解決的方法。在自學有時還是頗感迷茫的,因為時常出了問題在搜尋的基礎上不足以解決,又無旁人的指點。這個問題也暫且放下,同時也在此作為乙個儲存,等再一步深入學習c++再回頭來解決。

#ifndef calculator_h_

#define calculator_h_

#include#includeusing namespace std;

class scan

;class print

; istream &read(istream &, scan &);

#endif

#include#include#include#include "calculator.h"

using namespace std;

/***********************************

description: 讀取並掃瞄表示式,將數字與符號分開壓入佇列

others: 當輸入數學表示式中有數字(含小數字)超過10位即報錯並終止程式

***********************************/

queuescan::tostringqueue(string input)

if(tmp.size() > 10)

break;

} if (!tmp.empty())

while (i < len &&

(input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/'

|| input[i] == '(' ||input[i] == ')'))

}return que;

}void print::output(queueq)

}/***********************************

description:從給定流中 將資料讀到給定的物件中

others: 本意是將此函式包含至scan類中,讓讀入的功能都讓專門的類實現,

但是在實際操作過程中,確頗感困難,所以就獨自定義了乙個類相關的非成員函式

***********************************/

istream &read(istream &is, scan &expr)

#include#include#include#include"calculator.h"

int main()

經過第一次的失敗(包含多次試驗失敗)又暫時沒有有效的解決方法後,放棄了原有的思路。在tostringqueue函式編寫中不再使用void型別,因為沒有返回值的同時一定要對private裡面的佇列資料進行訪問,而此時編寫的函式一直訪問失敗,所以直接讓tostringqueue函式返回乙個佇列,這樣在使用print類過程中就無需訪問scan類中的私有資料了。

opp程式設計思想的實現需要去努力理解並且融會貫通,雖然在之前學習有接觸到這個思想,在之前部落格關於鍊錶實現的例項也有提到,但仍需加強理解。資料隱藏作為opp程式設計思想的一大特點,雖然第一次嘗試**中有想著將資料隱藏起來,但是在實現中不盡人意,也沒有解決的方案。

這個作業前後花了不少時間,一開始的計畫是學習關於類等語法知識,然後完成作業。但是在學習的過程中,一開始並沒有動手自己實踐一些**,看書學習的這個過程總是萌生睏意,對於類的知識也是迷迷糊糊,一知半解,浪費了不少時間。最後改變了計畫,一邊動手實踐**一邊看書,但是這樣也有著很大的弊端,因為在程式出問題的時候,沒有對於類的總體把關,很難看出其中錯誤,搜尋的過程也顯得較為費力。總之,「試了很多錯」,在這些錯誤中也了解到一些知識。希望在以後的學習過程中,在多多少少的「試錯」過程中,能盡快找到合適自己的學習方法。現在回看這整個程式,好像都是簡簡單單的**,實現也頗顯簡單,但是完成這份程式又確確實實用了不少時間。所以,這同時給了自己乙個很大的警鐘——路阻且長,仍需更加努力。

第三次作業

2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...

第三次作業

1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...

第三次作業

p67 2 12 有600mb的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率是2.4kbps 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kbps,其結果又如何?解 1 t 600 1024...