| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| "сплескване" на многомерен индекс http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16273 |
Страница 1 от 1 |
| Автор: | Н'бабане Гт'муан'га [ Пет Дек 21, 2018 12:40 pm ] |
| Заглавие: | "сплескване" на многомерен индекс |
Нещо съм зациклил предпразнично а се опитвам да реша тоя проблем... Каква е формулата за конверсия? Двумерен е лесно, обаче като станат повече, особено ако са с различни размери? Примерно имам многомерен масив [10,20,5,8] елемента. Общия брой на елементите очевидно е 10*20*5*8=8000, обаче как да го конвертирам в едномерен индекс? Примерно елемент [7,3,4,6] кой поред е сред тия 8000? Приемам че всички индекси ми започват от 0. Има ли обща формула за тоя сорт калкулации? |
|
| Автор: | ps66 [ Пет Дек 21, 2018 12:58 pm ] |
| Заглавие: | Re: "сплескване" на многомерен индекс |
array [A,B,C,D] index[a,b,c,d] = a*(B*C*D)+b*(C*D) + c*(D) + d array[10,20,5,8] index[7,3,4,6] = 7*(20*5*8)+3*(5*8)+4*(8)+6 = 5758 организацията зависи: от теб - ако индексираш многомерния масив с един индекс. от компилатора/архитектурата - ако го индексираш многомерно. |
|
| Автор: | Цецо [ Пет Дек 21, 2018 1:09 pm ] |
| Заглавие: | Re: "сплескване" на многомерен индекс |
За ANSI ли питаш или твое конвертиране? Ако е по стандарт, най-просто е да си ги представиш като отделни едномерни масиви. В твоя случай ще имаш: 10 броя последователно наредени тримерни масиви, всеки елемент от тях съдържа 20 броя двумерни масиви, всеки елемент от които пък съдържа 5 броя едномерни масиви с 8 елемента. Всъщност дали е просто да си го представиш??? Иначе аз си признавам без бой, четиримерен масив в живота си не съм разписвал. С мигалки, толкоз |
|
| Автор: | iss [ Пет Дек 21, 2018 1:18 pm ] | ||||||||||||||||||
| Заглавие: | Re: "сплескване" на многомерен индекс | ||||||||||||||||||
Резултат:
Извод: При array[A][B][C][D] елементът array[a][b][c][d] ще има index = a*(B*C*D) + b*(C*D) + c*(D) + d Забележка: Примера е тестван с GCC и това би трябвало да е истина винаги, но реално зависи как компилатора подрежда елементите в паметта. Обикновено се започва с най-десния вектор, обаче имам детски спомени, че съм настъпвал мотиката и с друго подреждане, но това е било "преди години, когато DOS-a беше млад..." |
|||||||||||||||||||
| Автор: | slav4o.com [ Пет Дек 21, 2018 3:31 pm ] | |||||||||
| Заглавие: | Re: "сплескване" на многомерен индекс | |||||||||
Ами според логиката на изписване числото в квадратните трябва да указва броят на нещата написани пред него:
Правих един път триизмерен масив за C18 за PIC18F4550 , оказа се, че не е така, а както са ти писали по-горе, реди ги обратно, най-дясната част се реди последователно, по-лявата ти ги реди тези части и така. При мен това беше масив char[10][10][10] представляваше една страница от 3D лед кубче (мигалка - залъглалка) . Паметта се индексираше със указател и това съм го проверил. Но и аз смятам, че при различните компилатори вероятно е различно. |
||||||||||
| Автор: | MYXATA [ Пет Дек 21, 2018 4:32 pm ] | |||
| Заглавие: | Re: "сплескване" на многомерен индекс | |||
... arr[3][3][3]
|
||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|