導航:首頁 > 源碼編譯 > 插入演算法用面向對象來寫

插入演算法用面向對象來寫

發布時間:2022-05-10 22:18:55

A. 如何用C#並用面向對象的方式寫冒泡演算法

public void BubbleSort(int[] R)
{
int i,j,temp;
//交換標志
bool exchange;
//最多做R.Length-1趟排序
for(i=0; i<R.Length; i++)
{
//本趟排序開始前,交換標志應為假
exchange=false;
for(j=R.Length-2; j>=i; j--)
{
//交換條件
if(R[j+1]<R[j])
{
temp=R[j+1];
R[j+1]=R[j];
R[j]=temp;
//發生了交換,故將交換標志置為真
exchange=true;
}
}
//本趟排序未發生交換,提前終止演算法
if(!exchange)
{
break;
}
}
}

B. 面向對象的實現

(一)程序設計語言
⒈選擇面向對象語言
採用面向對象方法開發軟體的基本目的和主要優點是通過重用提高軟體的生產率。因此,應該優先選用能夠最完善、最准確地表達問題域語義的面向對象語言。
在選擇編程語言時,應該考慮的其他因素還有:對用戶學習面向對象分析、設計和編碼技術所能提供的培訓操作;在使用這個面向對象語言期間能提供的技術支持;能提供給開發人員使用的開發工具、開發平台,對機器性能和內存的需求,集成已有軟體的容易程度。
⒉程序設計風格
⑴提高重用性。
⑵提高可擴充性。
⑶提高健壯性。
(二)類的實現
在開發過程中,類的實現是核心問題。在用面向對象風格所寫的系統中,所有的數據都被封裝在類的實例中。而整個程序則被封裝在一個更高級的類中。在使用既存部件的面向對象系統中,可以只花費少量時間和工作量來實現軟體。只要增加類的實例,開發少量的新類和實現各個對象之間互相通信的操作,就能建立需要的軟體。
一種方案是先開發一個比較小、比較簡單的來,作為開發比較大、比較復雜的類的基礎。
⑴「原封不動」重用。
⑵進化性重用。
一個能夠完全符合要求特性的類可能並不存在。
⑶「廢棄性」開發。
不用任何重用來開發一個新類。
⑷錯誤處理。
一個類應是自主的,有責任定位和報告錯誤。
(三)應用系統的實現
應用系統的實現是在所有的類都被實現之後的事。實現一個系統是一個比用過程性方法更簡單、更簡短的過程。有些實例將在其他類的初始化過程中使用。而其餘的則必須用某種主過程顯式地加以說明,或者當作系統最高層的類的表示的一部分。
在C++和C中有一個main()函數,可以使用這個過程來說明構成系統主要對象的那些類的實例。
(四)面向對象測試
⑴演算法層。
⑵類層。
測試封裝在同一個類中的所有方法和屬性之間的相互作用。
⑶模板層。
測試一組協同工作的類之間的相互作用。
⑷系統層。
把各個子系統組裝成完整的面向對象軟體系統,在組裝過程中同時進行測試。

C. 如何用面向對象編寫數據結構與演算法

《面向對象數據結構(C++版)》全面介紹了面向對象數據結構的基礎理論、演算法設計方法和具體應用,包括數據結構及演算法設計的基本概念、線性表、串、棧和隊列、數組和廣義表、樹和二叉樹、圖、查找、排序等內容,力求滿足計算機及相關專業本科教學的基本要求及培養目標。《面向對象數據結構(C++版)》採用面向對象C++語言描述數據結構和演算法,涉及內容全面豐富,重點突出,理論講述難度適中,演算法實踐淺顯易懂,例題習題豐富。《面向對象數據結構(C++版)》可作為高等院校計算機及相關專業本科及研究生面向對象數據結構課程教材,也可供從事計算機軟體開發和工程應用的技術人員參考。

D. 演算法,面向對象:二者有關系嗎我感覺編寫演算法程序用得大多是面向過程的思想,面向對象很少用到

演算法大部分是為了提高程序的效率,或者避免漏洞而設計的!C++本來就是面向對象的。感覺不到是因為接觸的太少了。什麼樣的演算法和是面向對象還是面向過程,是沒有什麼關系的。

E. 老師要求小菜使用面向對象的思想編寫一個計算器,可以實現兩個數的加、減、乘、除運算

第二天。

小菜問道:「你說計算器這樣的小程序還可以用到面向對象三大特性?繼承和多態怎麼可能用得上,我實在不能理解。」

大鳥:「小菜很有鑽研精神嘛,好,今天我讓你功力加深一級。你先要考慮一下,你昨天寫的這個代碼,能否做到很靈活的可修改和擴展呢?」

小菜:「我已經把業務和界面分離了呀,這不是很靈活了嗎?」

大鳥:「那我問你,現在如果我希望增加一個開根(sqrt)運算,你如何改?」

小菜:「那隻需要改Operation類就行了,在switch中加一個分支就行了。」

大鳥:「問題是你要加一個平方根運算,卻需要讓加減乘除的運算都得來參與編譯,如果你一不小心,把加法運算改成了減法,這豈不是大大的糟糕。打個比方,如果現在公司要求你為公司的薪資管理系統做維護,原來只有技術人員(月薪),市場銷售人員(底薪+提成),經理(年薪+股份)三種運算演算法,現在要增加兼職工作人員(時薪)的演算法,但按照你昨天的程序寫法,公司就必須要把包含原三種演算法的運算類給你,讓你修改,你如果心中小算盤一打,『TMD,公司給我的工資這么低,我真是郁悶,這下有機會了』,於是你除了增加了兼職演算法以外,在技術人員(月薪)演算法中寫了一句

if (員工是小菜)

{

salary = salary * 1.1;

}

那就意味著,你的月薪每月都會增加10%(小心被抓去坐牢),本來是讓你加一個功能,卻使得原有的運行良好的功能代碼產生了變化,這個風險太大了。你明白了嗎?」

小菜:「哦,你的意思是,我應該把加減乘除等運算分離,修改其中一個不影響另外的幾個,增加運算演算法也不影響其他代碼,是這樣嗎?」

大鳥:「自己想去吧,如何用繼承和多態,你應該有感覺了。」

小菜:「OK,我馬上去寫。」

Operation運算類

public class Operation

{

private double _numberA = 0;

private double _numberB = 0;

public double NumberA

{

get { return _numberA; }

set { _numberA = value; }

}

public double NumberB

{

get { return _numberB; }

set { _numberB = value; }

}

public virtual double GetResult()

{

double result = 0;

return result;

}

}

加減乘除類

class OperationAdd : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA + NumberB;

return result;

}

}

class OperationSub : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA - NumberB;

return result;

}

}

class OperationMul : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA * NumberB;

return result;

}

}

class OperationDiv : Operation

{

public override double GetResult()

{

double result = 0;

if (NumberB==0)

throw new Exception("除數不能為0。");

result = NumberA / NumberB;

return result;

}

}

小菜:「大鳥哥,我按照你說的方法寫出來了一部分,首先是一個運算類,它有兩個Number屬性,主要用於計算器的前後數,然後有一個虛方法GetResult(),用於得到結果,然後我把加減乘除都寫成了運算類的子類,繼承它後,重寫了GetResult()方法,這樣如果要修改任何一個演算法,就不需要提供其他演算法的代碼了。但問題來了,我如何讓計算器知道我是希望用哪一個演算法呢?」

F. java 使用面向對象編寫計算器

做法相當的 多```

用簡單工廠模式做。

把加、減、乘、除運算 之類的邏輯放到介面中,
在客戶來具體實列化那一個工廠,把所有的判斷全部寫在 借口的實現類中去`````

G. JAVA怎麼用面向對象思想寫計算器

//frame版程序源代碼如下,疏漏之處,望批評指正。
//數字分組沒有編寫,科學型計算器沒有編寫,其他已經完善。
import java.awt.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.DecimalFormat;public class Calculator implements ActionListener { // 導入動作監聽介面
// 設計面板中的單位
JFrame frame; JTextField textAnswer; JPanel panel, panel1, panel2, panel3; JMenuBar mainMenu; JTextField textMemory; JLabel labelMemSpace; // labelMemSpace單純做擺設,控制面板的形狀 JButton buttonBk, buttonCe, buttonC; JButton button[]; JButton buttonMC, buttonMR, buttonMS, buttonMAdd; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,
buttonDiv, buttonMod; JButton buttonSqrt, buttonDao, buttonEqual; JMenu editMenu, viewMenu, helpMenu; JMenuItem Item, pasteItem, tItem, sItem, numberGroup, topHelp,
aboutCal; DecimalFormat df; // 設置數據輸出精度 boolean clickable; // 控制當前能否按鍵 double memoryd; // 使用內存中存儲的數字 int memoryi; double vard, answerd; // 用來保存double型數據的中間值(vard)和最後結果(answerd) short key = -1, prekey = -1; // key用來保存當前進行何種運算,prekey用來保存前次進行何種運算 String ; // 做復制用 JTextArea help; // 幫助 JScrollPane scrollHelp; // 構造函數
public Calculator() {
clickable = true;
answerd = 0;
frame = new JFrame("計算器");
df = new DecimalFormat("0.##############"); // 設置數據輸出精度(對於double型值)
textAnswer = new JTextField(15);
textAnswer.setText("");
textAnswer.setEditable(false);
textAnswer.setBackground(new Color(255, 255, 255));
panel = new JPanel();
frame.getContentPane().add(panel);
panel1 = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BorderLayout());
// 設計整個面板
mainMenu = new JMenuBar();
editMenu = new JMenu("編輯(E)");
viewMenu = new JMenu("查看(V)");
helpMenu = new JMenu("幫助(H)");
Item = new JMenuItem(" 復制(C) Ctrl+C");
Item.addActionListener(this);
pasteItem = new JMenuItem(" 粘貼(V) Ctrl+V");
pasteItem.addActionListener(this);
editMenu.add(Item);
editMenu.add(pasteItem);
tItem = new JMenuItem("●標准型(T)");
tItem.addActionListener(this);
sItem = new JMenuItem(" 科學型(S)");
sItem.addActionListener(this);
numberGroup = new JMenuItem(" 數字分組(I)");
numberGroup.addActionListener(this);
viewMenu.add(tItem);
viewMenu.add(sItem);
viewMenu.add(numberGroup);
topHelp = new JMenuItem(" 幫助主題(H)");
topHelp.addActionListener(this);
help = new JTextArea(5, 20);
scrollHelp = new JScrollPane(help);
help.setEditable(false);
help.append("執行簡單計算\n");
help.append("1. 鍵入計算的第一個數字。\n");
help.append("2. 單擊「+」執行加、「-」執行減、「*」執行乘或「/」執行除。\n");
help.append("3. 鍵入計算的下一個數字。\n");
help.append("4. 輸入所有剩餘的運算符和數字。\n");
help.append("5. 單擊「=」。\n");
aboutCal = new JMenuItem(" 關於計算器(A)");
aboutCal.addActionListener(this);
helpMenu.add(topHelp);
helpMenu.add(aboutCal);
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
mainMenu.add(helpMenu);
panel.add(mainMenu, BorderLayout.NORTH);
panel.add(textAnswer, BorderLayout.CENTER);
panel.add(panel1, BorderLayout.SOUTH);
panel1.setLayout(new BorderLayout());
textMemory = new JTextField(3);
textMemory.setEditable(false);
textMemory.setBackground(new Color(217, 217, 217));
labelMemSpace = new JLabel(" ");
buttonBk = new JButton("Backspace");
buttonBk.setForeground(new Color(255, 0, 0));
buttonCe = new JButton("CE");
buttonCe.setForeground(new Color(255, 0, 0));
buttonC = new JButton("C");
buttonC.setForeground(new Color(255, 0, 0));
buttonBk.addActionListener(this);
buttonCe.addActionListener(this);
buttonC.addActionListener(this);
panel1.add(panel2, BorderLayout.NORTH);
panel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
panel2.add(textMemory);
panel2.add(labelMemSpace);
panel2.add(buttonBk);
panel2.add(buttonCe);
panel2.add(buttonC);
panel3 = new JPanel();
panel1.add(panel3, BorderLayout.CENTER);
button = new JButton[10];
for (int i = 0; i < button.length; i++) {
button[i] = new JButton(Integer.toString(i));
button[i].setForeground(new Color(0, 0, 255));
}
buttonMC = new JButton("MC");
buttonMC.setForeground(new Color(255, 0, 0));
buttonMR = new JButton("MR");
buttonMR.setForeground(new Color(255, 0, 0));
buttonMS = new JButton("MS");
buttonMS.setForeground(new Color(255, 0, 0));
buttonMAdd = new JButton("M+");
buttonMAdd.setForeground(new Color(255, 0, 0));
buttonDot = new JButton(".");
buttonDot.setForeground(new Color(0, 0, 255));
buttonAddAndSub = new JButton("+/-");
buttonAddAndSub.setForeground(new Color(0, 0, 255));
buttonAdd = new JButton("+");
buttonAdd.setForeground(new Color(255, 0, 0));
buttonSub = new JButton("-");
buttonSub.setForeground(new Color(255, 0, 0));
buttonMul = new JButton("*");
buttonMul.setForeground(new Color(255, 0, 0));
buttonDiv = new JButton("/");
buttonDiv.setForeground(new Color(255, 0, 0));
buttonMod = new JButton("%");
buttonMod.setForeground(new Color(0, 0, 255));
buttonSqrt = new JButton("sqrt");
buttonSqrt.setForeground(new Color(0, 0, 255));
buttonDao = new JButton("1/x");
buttonDao.setForeground(new Color(0, 0, 255));
buttonEqual = new JButton("=");
buttonEqual.setForeground(new Color(255, 0, 0));
// 將所有行為與監聽綁定
panel3.setLayout(new GridLayout(4, 6));
panel3.add(buttonMC);
buttonMC.addActionListener(this);
panel3.add(button[7]);
button[7].addActionListener(this);
panel3.add(button[8]);
button[8].addActionListener(this);
panel3.add(button[9]);
button[9].addActionListener(this);
panel3.add(buttonDiv);
buttonDiv.addActionListener(this);
panel3.add(buttonSqrt);
buttonSqrt.addActionListener(this);
panel3.add(buttonMR);
buttonMR.addActionListener(this);
panel3.add(button[4]);
button[4].addActionListener(this);
panel3.add(button[5]);
button[5].addActionListener(this);
panel3.add(button[6]);
button[6].addActionListener(this);
panel3.add(buttonMul);
buttonMul.addActionListener(this);
panel3.add(buttonMod);
buttonMod.addActionListener(this);
panel3.add(buttonMS);
buttonMS.addActionListener(this);
panel3.add(button[1]);
button[1].addActionListener(this);
panel3.add(button[2]);
button[2].addActionListener(this);
panel3.add(button[3]);
button[3].addActionListener(this);
panel3.add(buttonSub);
buttonSub.addActionListener(this);
panel3.add(buttonDao);
buttonDao.addActionListener(this);
panel3.add(buttonMAdd);
buttonMAdd.addActionListener(this);
panel3.add(button[0]);
button[0].addActionListener(this);
panel3.add(buttonAddAndSub);
buttonAddAndSub.addActionListener(this);
panel3.add(buttonDot);
buttonDot.addActionListener(this);
panel3.add(buttonAdd);
buttonAdd.addActionListener(this);
panel3.add(buttonEqual);
buttonEqual.addActionListener(this);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
} // 設置各個按鈕行為
public void actionPerformed(ActionEvent event) {
boolean sign = false; // 判斷是否是double型數參與運算,是為true,不是為false
Object temp = event.getSource();
try {
// 如果按下數據按鈕,將按下的按鈕代表的數據插入的當前文本框字元串之後
for (int i = 0; i <= 9; i++)
if (temp == button[i] && clickable == true)
textAnswer.setText(textAnswer.getText()
+ Integer.toString(i));
// 按下'.'按鈕時,判斷當前文本框內字元串中含不含'.',如果已含,則不允許再插入'.'
if (temp == buttonDot && clickable == true) {
boolean isDot = false;
if (textAnswer.getText().length() == 0)
isDot = true;
for (int i = 0; i < textAnswer.getText().length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
if (isDot == false)
textAnswer.setText(textAnswer.getText() + ".");
}
if ((temp == buttonAdd || temp == buttonSub || temp == buttonMul || temp == buttonDiv)
&& clickable == true) {
// '+'操作
if (temp == buttonAdd) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除數不能為零");
clickable = false;
} else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 0;
}
// '-'操作
if (temp == buttonSub) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除數不能為零");
clickable = false;
} else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 1;
}
// '*'操作
if (temp == buttonMul) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除數不能為零");
clickable = false;
} else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 2;
}
// '/'操作
if (temp == buttonDiv) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:

H. c++面向對象

只要是復雜的程序,用c++寫總會比c寫清晰很多,但是如果程序簡單,用c++會要多寫很多代碼。

不過合法的c程序也是合法的c++程序,c++本來就包括和完全兼容c,c++當然可以代替c

I. 請問用java語言寫的項目,畢業論文可以按面向過程的結構來寫嗎

按面向過程寫的話,需求不能有大的改動,要不然可能牽一發動全身,因為面向過程的耦合度太高了;也就是說需求要一開始就比較明確;

既然用Java寫項目,還是用面向對象好一些,畢竟Java在面向對象編程方面有優勢;面向對象可讀性較高,好修改和維護;

J. 最通俗地解釋面向對象

面向對象(Object Oriented,OO)是軟體開發方法。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術發展到一定階段後的產物。


概念

  1. 對象。

    對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。

  2. 對象的狀態和行為。

    對象具有狀態,一個對象用數據值來描述它的狀態。

    對象還有操作,用於改變對象的狀態,對象及其操作就是對象的行為。

    對象實現了數據和操作的結合,使數據和操作封裝於對象的統一體中。

  3. 類。

    具有相同特性(數據元素)和行為(功能)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象,類實際上就是一種數據類型。

    類具有屬性,它是對象的狀態的抽象,用數據結構來描述類的屬性。

    類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。

  4. 類的結構。

    在客觀世界中有若干類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。

    ①一般--具體結構稱為分類結構,也可以說是「或」關系,或者是「is a」關系。

    ②整體--部分結構稱為組裝結構,它們之間的關系是一種「與」關系,或者是「has a」關系。

  5. 消息和方法。

    對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變數名,或者是所有對象都知道的全局變數名。

    類中操作的實現過程叫做方法,一個方法有方法名、返回值、參數、方法體。



特徵

  1. 對象唯一性。

    每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。

  2. 抽象性。

    抽象性是指將具有一致的數據結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。

  3. 繼承性。

    繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。

    繼承性是面向對象程序設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。

    在類層次中,子類只繼承一個父類的數據結構和方法,則稱為單重繼承。在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。

    多重繼承,JAVA、VB、NET、Objective-C均僅支持單繼承,注意在C++多重繼承時,需小心二義性。

    在軟體開發中,類的繼承性使所建立的軟體具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重用性。

    採用繼承性,提供了類的規范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟體的重用性。

  4. 多態性(多形性)

    多態性是指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。

    多態性允許每個對象以適合自身的方式去響應共同的消息。

    多態性增強了軟體的靈活性和重用性。

閱讀全文

與插入演算法用面向對象來寫相關的資料

熱點內容
華為主題軟體app怎麼下 瀏覽:837
我們的圖片能夠收藏加密嗎 瀏覽:978
mysql空值命令 瀏覽:213
python整點秒殺 瀏覽:882
怎麼樣互傳app 瀏覽:292
python分布式抓包 瀏覽:36
輕量級php論壇 瀏覽:342
如何查看應用存儲在哪個文件夾 瀏覽:436
app開發項目范圍怎麼寫 瀏覽:76
androidjms 瀏覽:843
彈珠連貫解壓 瀏覽:243
程序員的網課 瀏覽:904
廣東加密狗防拷貝公司 瀏覽:450
rtf轉換pdf 瀏覽:350
單片機退出中斷 瀏覽:141
可以對單個內容加密的便簽 瀏覽:825
1024程序員節小米 瀏覽:316
共享和ftp伺服器有什麼區別 瀏覽:716
centos7卸載php 瀏覽:184
解壓黏黏球如何玩 瀏覽:230