步驟1:我們需要什么要擁有
要最終以可見(jiàn)的方式顯示二維數(shù)組(我們稍后將討論3維數(shù)組選項(xiàng)),我們將創(chuàng)建一個(gè)記錄設(shè)備使用與我的一維數(shù)組Instructable相同的材料。這些材料是:
3個(gè)面包板按鈕(記錄按鈕,記錄其按下情況的按鈕和播放按鈕)
3個(gè)LED(指示每個(gè)按鈕何時(shí)已按下)
6個(gè)小電阻(我將使用220歐姆)
Digilent的chipKIT Uno32(運(yùn)行代碼的微控制器)
跳線(xiàn)(
面包板(未顯示)
步驟2:關(guān)于多維數(shù)組的注意事項(xiàng)
一個(gè)二維數(shù)組,或與此相關(guān)的任何二維數(shù)組,本質(zhì)上是多個(gè)單維數(shù)組。多維數(shù)組的好處是它可以在一個(gè)代碼段中直觀(guān)地將相關(guān)數(shù)組分組在一起。這樣,程序員不必從多個(gè)來(lái)源調(diào)用信息,而是可以指定一個(gè)來(lái)源并從那里找到他們的信息。
聲明一個(gè)維數(shù)組時(shí),實(shí)際上就是在創(chuàng)建一行值。對(duì)于每個(gè)更高的維度,您都可以在值行中添加(不信不信)另一個(gè)維度。二維數(shù)組將使您的線(xiàn)成為值的平面,而三維數(shù)組將使值的平面成為值的立方體。
再往前走,您就會(huì)開(kāi)始涉入有趣的觀(guān)點(diǎn)??梢詫⒁粋€(gè)四維數(shù)組視為具有三個(gè)多維數(shù)據(jù)集的一行。六個(gè)維度的數(shù)組可以認(rèn)為是一個(gè)立方體。等等。
不過(guò),作為免責(zé)聲明,您在編程中幾乎不需要3維數(shù)組以外的任何東西。當(dāng)然,更高維度的數(shù)組可以用作[國(guó)家/地區(qū)] [州] [縣] [鎮(zhèn)] [家庭] [人]或某些銷(xiāo)售目的的目錄/數(shù)據(jù)庫(kù),但是(在我看來(lái))這將更易于在多個(gè)環(huán)境中導(dǎo)航,較小尺寸的數(shù)組,并且其中一些數(shù)組需要大量的內(nèi)存。
步驟3:聲明和初始化二維數(shù)組
但是讓我們進(jìn)入實(shí)際創(chuàng)建這些數(shù)組的更實(shí)際的部分。添加到數(shù)組中的每個(gè)維度都會(huì)在第一組[元素]的前面添加一個(gè)額外的[元素],該元素指定每個(gè)單個(gè)維度數(shù)組的長(zhǎng)度。
因此,對(duì)于二維數(shù)組,您可以將聲明您需要一定數(shù)量的具有一定長(zhǎng)度的單維數(shù)組。例如,如果我想聲明一個(gè)包含3個(gè)一維數(shù)組(每個(gè)數(shù)組包含4個(gè)元素)的2D數(shù)組,我將輸入:
int myFirst2DArray [3] [4];
這很好創(chuàng)建我們想要的數(shù)組,但在所有12個(gè)點(diǎn)中都用零填充。要使用某些值初始化它,而不必以后再單獨(dú)分配它們,我們可以改為輸入:
int myFirst2DArray [3] [4] =
{
{1,2,3,4 },
{5,6,7,8},
{9,10,11,12}
};
您可以安排它,使其僅在一行上相反,但這可以使我從視覺(jué)上確保我擁有所有想要的值。
與單維數(shù)組一樣,我們可以通過(guò)說(shuō)明各個(gè)方向上的哪個(gè)元素來(lái)訪(fǎng)問(wèn)單個(gè)值我們要訪(fǎng)問(wèn)。例如,要獲取第二個(gè)數(shù)組的一維數(shù)組的第三個(gè)值,我們輸入:
int x = myFirst2DArray [1] [2];
步驟4:聲明和初始化高維數(shù)組
同樣,當(dāng)您向單個(gè)維數(shù)組添加更多維時(shí),在聲明的前面會(huì)添加更多[elements]陣列。因此,對(duì)于一個(gè)具有三層,四行,每行中具有兩個(gè)元素的三維單維數(shù)組的三維數(shù)組,我們可以通過(guò)鍵入以下內(nèi)容對(duì)其進(jìn)行初始化:
int myFirst3DArray [3] [4] [2] =
{
{{10,11},{12,13},{14,15},{16,17}},
{{18,19},{20, 21},{22、23},{24、25}},
{{26,27},{28、29},{30、31},{32、33}}
};
步驟5:關(guān)于多維數(shù)組的更多信息
請(qǐng)注意,我們可以將數(shù)組擴(kuò)展到更多通過(guò)以下方式幫助說(shuō)明這三個(gè)維度:
{//整個(gè)數(shù)組
{//多維數(shù)據(jù)集的第一層
{10,11},//值的第一行/行圖層
{12,13}等,等等//圖層中的其他值行
},//多維數(shù)據(jù)集第一層的末端
{//多維數(shù)據(jù)集的第二層
{18,19}等,等等//值行
}//第二層的末尾
等,等等//第三層和值
}//整個(gè)末尾數(shù)組
。..但是那將使步驟l不必要的大而繁瑣(顯然Instructables忽略了代碼和注釋之間的某些空格),因此在一行的特定層中初始化所有值的更為精簡(jiǎn)的版本代替了。通過(guò)這種嵌套的{}樣式,您可以創(chuàng)建多維數(shù)組。
請(qǐng)注意,在初始化數(shù)組時(shí),您不會(huì)為高階維提供值,而只是為單維數(shù)組提供值。否則,您將嘗試以某種方式為編譯器不知道要處理的數(shù)組賦予額外的值。
步驟6:實(shí)踐中的二維數(shù)組
讓我們建立電路,以便我們可以測(cè)試二維陣列。如果您碰巧已經(jīng)從我的Instructionable一維數(shù)組中設(shè)置了此電路,請(qǐng)隨時(shí)跳過(guò)該電路結(jié)構(gòu)。
將面包板上的負(fù)電源導(dǎo)軌連接到標(biāo)有“芯片組Uno32上的“ GND”。然后,從Uno32上的3.3V電源引腳到面包板上的正極電源線(xiàn)連接一根跳線(xiàn)。
現(xiàn)在,將三個(gè)按鈕中的每個(gè)按鈕放置在面包板上,使每個(gè)按鈕跨過(guò)面包板中間的山谷。使用電阻器之一將每個(gè)按鈕的一只腳連接到負(fù)電源軌。將支腳與接地的導(dǎo)線(xiàn)連接到山谷的同一側(cè),并連接至正極電源線(xiàn)。
步驟7:設(shè)置電路-LED和數(shù)字信號(hào)
對(duì)于電路的視覺(jué)部分(包括LED,無(wú)論是否相信),在每個(gè)按鈕旁邊放置一個(gè)LED。在每個(gè)LED的陰極側(cè)與負(fù)電源軌之間連接一個(gè)220 Ohm的電阻。
雖然看起來(lái)不錯(cuò),但是如果我們無(wú)法從電路中發(fā)出或接收任何信號(hào),那對(duì)我們沒(méi)有好處。要解決此問(wèn)題,請(qǐng)從每個(gè)LED的陽(yáng)極側(cè)到Uno32上自己的數(shù)字引腳的跳線(xiàn),以及從每個(gè)按鈕的接地腳到Uno32上他們自己的數(shù)字引腳的跳線(xiàn)。我將引腳5、7和9用于按鈕,將引腳31、33和35用于LED。
步驟8:二維記錄代碼
根據(jù)記錄的性質(zhì),我們和微控制器都無(wú)法確定在實(shí)際停止記錄之前記錄將持續(xù)多長(zhǎng)時(shí)間。因此,我們將猜測(cè)要存儲(chǔ)最長(zhǎng)的記錄,陣列必須有多大。由于Uno32具有32位處理器,因此我們不必?fù)?dān)心整數(shù)的大小限制,除非您計(jì)劃在錄制期間一次按?。ɑ虿话醋。┌粹o超過(guò)24天。
假設(shè)是這種情況,我們或至少我將記錄陣列的大小設(shè)置為兩組,每組50個(gè)元素,因?yàn)槲也淮蛩阌涗洺^(guò)25次的按鈕按下(其中一個(gè)用于按下按鈕)并熄滅,一個(gè)按下按鈕,然后點(diǎn)亮)。第二組50個(gè)元素跟蹤按鈕的打開(kāi)或關(guān)閉狀態(tài),這樣您就不僅可以記錄按鈕被按下(或不按下)的時(shí)間長(zhǎng)度,還可以猜測(cè)按鈕在開(kāi)始時(shí)是否被按下。錄音。您可以在下面的文本文件中下載用于Uno32的代碼。如果尚未安裝,則需要免費(fèi)的MPIDE軟件對(duì)Uno32進(jìn)行編程。
可以免費(fèi)簽出二維記錄視頻;您可能會(huì)注意到,它看起來(lái)與單陣列演示視頻的視頻看起來(lái)非常相似,但這是因?yàn)槎S數(shù)組本質(zhì)上是一組單維數(shù)組,因此兩組代碼在功能上是相同的。
第9步:您提到了3維數(shù)組嗎?
確實(shí)做到了。但這也與多維數(shù)組的固有局限性有關(guān)。此限制以?xún)?nèi)存形式出現(xiàn)。在創(chuàng)建代碼的大部分時(shí)間里,我都會(huì)將變量放在“堆?!保ň幊讨械膬?nèi)存對(duì)象)上,假定它們是局部變量,或者創(chuàng)建全局變量,這些變量存儲(chǔ)在稱(chēng)為“ .data”的另一種內(nèi)存類(lèi)型中。 p》
我不會(huì)嘗試解釋編程中內(nèi)存的詳細(xì)信息/機(jī)制(主要是因?yàn)槲也惶私馑?,但是您可以在此處了解更多信息),而是從我的理解中了解在Uno32上創(chuàng)建巨型三維數(shù)組作為一種乘法表/多維數(shù)據(jù)集,我遇到了堆棧溢出問(wèn)題,這意味著我試圖在內(nèi)存中放置超出空間的東西,因此編譯器將多余的東西放在其他地方不應(yīng)混淆的內(nèi)存位置,導(dǎo)致在我嘗試運(yùn)行該程序時(shí)該程序崩潰。我似乎無(wú)法說(shuō)服該程序,動(dòng)態(tài)分配的內(nèi)存也應(yīng)該允許我有更多的內(nèi)存空間。
基本上,我內(nèi)存不足,無(wú)法找到一種制作3D陣列的方法工作。
我最終確實(shí)做了一個(gè)小的2D數(shù)組工作(60 x 60),但是我們只介紹了2D數(shù)組的一個(gè)例子,最后,您可以在代碼中鍵入乘法問(wèn)題并得到答案。無(wú)需先創(chuàng)建答案數(shù)組。這是學(xué)習(xí)新事物和實(shí)用主義之間的分界線(xiàn)。
責(zé)任編輯:wv
-
led
+關(guān)注
關(guān)注
240文章
23085瀏覽量
657249 -
電阻
+關(guān)注
關(guān)注
86文章
5453瀏覽量
171502
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論