Masiv4eta
6 отговора
317 прегледа
Masiv4eta
Здравейте на всички!
Имам следния малък проблем, бо бенога да си го разреша.
Имам два масива единия е едномерен, а другия двумерен, като едномерния има стойности = брой*колони на двумерния. Искам да запълна двумерния масив с данни от едномерния, ама се затруднявам.
Чакам помощ!
Имам следния малък проблем, бо бенога да си го разреша.
Имам два масива единия е едномерен, а другия двумерен, като едномерния има стойности = брой*колони на двумерния. Искам да запълна двумерния масив с данни от едномерния, ама се затруднявам.
Чакам помощ!
Re: Masiv4eta
Условието не се разбира...
Whenever you find yourself on the side of the majority, it is time to reform.
~Mark Twain
Whenever you find yourself on the side of the majority, it is time to reform.
~Mark Twain
Re: Masiv4eta
Като решиш какво точно искаш, напиши разбираемо условие и може някой и да ти помогне 
Re: Masiv4eta
Искам да прехвърля данните от едномерния масив в двумерния. Т.е. взимам данни от едномерния масив и почвам да запълвам двумерния и така докато стигна края на едномерния масив.
Извинявам се ако не съм представила нещата ясно!
Извинявам се ако не съм представила нещата ясно!
Re: Masiv4eta
А защо не помислиш малко сама?
Ако едномерния масив има елементи:
A[1], A[2], ..., A[ i ], ..., A[n]
значи двумерния трябва да изглежда така:
Той има p колони и q реда, като p.q = n
Къде трябва да се разположи елемента A[1]? Очевидно на B[1][1].
Ако че запълваме B по редове, значи че елементите трябва да се подредят така:
A[1] -> B[1][1]
A[2] -> B[1][2]
A[3] -> B[1][3]
...
A[ i ] -> B[1][p], ако i = p
A[i+1] -> B[2][1], ако i = p
A[i+2] -> B[2][2], ако i = p
A[i+3] -> B[2][3], ако i = p
...
Оттук би трябвало да можеш да изведеш зависимост между индексите:
Нека A[ i ] -> B[j][k],
тогава
за i = 1 до p се получава j = 1,
за i = p+1 до 2*p се получава j = 2
за i = 2*p+1 до 3*p се получава j = 3
....
Съзерцавайки горните редове, стигаш до извода, че
j = (i - 1) / p + 1
(ако не стигаш до този извод, съзерцавай ги още известно време
)
сега за k:
за i = 1, p+1, 2*p+1, 3*p+1, ... се получава k = 1,
за i = 2, p+2, 2*p+2, ... се получава k = 2
за i = 3, p+3, 2*p+3, ... се получава k = 3
...
Пак съзерцаваш и стигаш до извода, че
k = (i - 1) mod p + 1
Така достигаш до следния код:
който премества i-тият елемент от A, на мястото му в B. Остава само да изпълниш това за всеки елемент от A:
Преди това трябва да знаеш колко са n и p и да ги заместиш или по-добре да ги декларираш като константи.
Ако индексите на масивите не започват от едно, трябва да повториш горните разсъждения и да направиш сама формулите (подсказка: едната единица във формулите за j и k е индекса на първия елемент от масива A, а другата е индекса на първия ред/колона в масива B).
Е, сложно ли е? А?
Ако едномерния масив има елементи:
A[1], A[2], ..., A[ i ], ..., A[n]
значи двумерния трябва да изглежда така:
B[1][1], B[1][2], ..., B[1][k], ..., B[1][p]
B[2][1], B[2][2], ..., B[2][k], ..., B[2][p]
...
B[j][1], B[j][2], ..., B[j][k], ..., B[j][p]
...
B[q][1], B[q][2], ..., B[q][k], ..., B[q][p]
Той има p колони и q реда, като p.q = n
Къде трябва да се разположи елемента A[1]? Очевидно на B[1][1].
Ако че запълваме B по редове, значи че елементите трябва да се подредят така:
A[1] -> B[1][1]
A[2] -> B[1][2]
A[3] -> B[1][3]
...
A[ i ] -> B[1][p], ако i = p
A[i+1] -> B[2][1], ако i = p
A[i+2] -> B[2][2], ако i = p
A[i+3] -> B[2][3], ако i = p
...
Оттук би трябвало да можеш да изведеш зависимост между индексите:
Нека A[ i ] -> B[j][k],
тогава
за i = 1 до p се получава j = 1,
за i = p+1 до 2*p се получава j = 2
за i = 2*p+1 до 3*p се получава j = 3
....
Съзерцавайки горните редове, стигаш до извода, че
j = (i - 1) / p + 1
(ако не стигаш до този извод, съзерцавай ги още известно време
сега за k:
за i = 1, p+1, 2*p+1, 3*p+1, ... се получава k = 1,
за i = 2, p+2, 2*p+2, ... се получава k = 2
за i = 3, p+3, 2*p+3, ... се получава k = 3
...
Пак съзерцаваш и стигаш до извода, че
k = (i - 1) mod p + 1
Така достигаш до следния код:
j := (i - 1) / p + 1;
k = (i - 1) mod p + 1;
B[j][k] := A[ i ];
който премества i-тият елемент от A, на мястото му в B. Остава само да изпълниш това за всеки елемент от A:
for i := 1 to n do begin
j := (i - 1) / p + 1;
k = (i - 1) mod p + 1;
B[j][k] := A[ i ];
end;
Преди това трябва да знаеш колко са n и p и да ги заместиш или по-добре да ги декларираш като константи.
Ако индексите на масивите не започват от едно, трябва да повториш горните разсъждения и да направиш сама формулите (подсказка: едната единица във формулите за j и k е индекса на първия елемент от масива A, а другата е индекса на първия ред/колона в масива B).
Е, сложно ли е? А?
Re: Masiv4eta
Това май сме го учили в училище, ама беше много отдавна.
Та сега се сещам за следното нестандартно решение:
type
d1 = array[1..m*n] of Integer;
d2 = array[1..n,1..m] of Integer;
var
a1: d1;
a2: d2;
begin
a1 := d1(a2);
Та сега се сещам за следното нестандартно решение:
type
d1 = array[1..m*n] of Integer;
d2 = array[1..n,1..m] of Integer;
var
a1: d1;
a2: d2;
begin
a1 := d1(a2);
Re: Masiv4eta
Еми най-лесния начин е да направиш така :
Ако А1 е двумерния масив а А2 е еднимерния ( трябва да имат еднакъв брой елементи и от един и съм тип ) -
Move( A1, A2, SizeOf( A1 ));
и си готов
Не всичко което виси е Windows, но той най-често го прави !!!
Ако А1 е двумерния масив а А2 е еднимерния ( трябва да имат еднакъв брой елементи и от един и съм тип ) -
Move( A1, A2, SizeOf( A1 ));
и си готов
Не всичко което виси е Windows, но той най-често го прави !!!