1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
1

Перенести первые k строк в конец массива, соблюдая порядок их следования.

15.05.2009, 18:45. Показов 4712. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Плиз, решите задачки моей подруге на VBA. У нее тоже не получается...
Условия задач:
1.Дан двумерный массив из 20 строк. Перенести первые k строк в конец массива, соблюдая порядок их следования.
2. Переставить все строки и столбцы матрицы F(m,n) случайным образом. В массивах K(m) и L(m) запомнить места, которые каждая строка и каждый столбец занимали до перестановки.

Добавлено через 18 минут 2 секунды
нужен макрос для Excel на VBA
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2009, 18:45
Ответы с готовыми решениями:

Перенести первые k строк в конец массива, соблюдая порядок их следования
3) Дан двумерный массив из двадцати строк и трех столбцов. Перенести первые k строк в конец...

Перенести первые k строк в конец массива, соблюдая порядок их следования
Дан двумерный массив из двадцати строк и трех столбцов. Перенести первые k строк в конец массива,...

Перенести первые k строк в конец матрицы, соблюдая порядок их следования (Паскаль -> С++)
Условие Дан двумерный массив из двадцати строк и трех столбцов. Перенести первые k строк в конец...

Перенести первые p столбцов в конец массива, соблюдая порядок их следования
Дан двухмерный массив из 24 столбцов. Перенести первые p столбцов в конец массива, соблюдая...

19
3896 / 899 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
15.05.2009, 21:36 2
1.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim A() 'исходный массив
Dim tmpArr() 'временный массив
Dim C 'кол-во столбцов
Dim K 'на сколько надо сдвинуть
 
C = 8
K = 13
ReDim A(19, C)
ReDim tmpArr(19, C)
 
'просто заполняем исходный массив чем-нибудь
For i = 0 To 19
  For j = 0 To C
    A(i, j) = i
  Next j
Next i
 
'формируем во временном массиве исходный вид
For i = 0 To 19
  For j = 0 To C
    tmpArr(i, j) = A((i + K) Mod 19, j)
  Next j
Next i
 
'копируем из временного массива в исходный сдвинутые данные
For i = 0 To 19
  For j = 0 To C
    A(i, j) = tmpArr(i, j)
  Next j
Next i
2
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 14:58  [ТС] 3
Помогите с этой задачкой,в голову ничего не входит,плиз
Переставить все строки и столбцы матрицы F(m,n) случайным образом. В массивах K(m) и L(m) запомнить места, которые каждая строка и каждый столбец занимали до перестановки.
нужен макрос для Excel на VBA
0
3896 / 899 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
16.05.2009, 15:36 4
Цитата Сообщение от tatoha Посмотреть сообщение
В массивах K(m) и L(m) запомнить места, которые каждая строка и каждый столбец занимали до перестановки.
В условии вижу сразу 2 ошибки: одна скоре всего опечатка а вот вторая...
1 ошибка: K(m) и L(m), скорее всего надо K(m) и L(n) т.к. один массив содержит строки а другой столбцы.
2 ошибка: после перестановки от начальных строк и стобцов ничего не остается! Т.к. перемешивание происходит одновременно и по строкам и столбцам, по этому не понятно что сохранть в массивах K и L. Поясню: изначально столбец 1 был в позиции 1, а после перемешивания столбец 1 исчез как таковой т.к. он теперь содержит совсем другие элементы, а элементы первого столбца перекочевали в остальные столбцы. И попробуй тут определи какой теперь столбец должен называться "бывшим первым".

Сейчас попробую сделать перемешивание массива, а вот запомнить где кто был не знаю как.
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 15:39  [ТС] 5
я тоже думала что ошибка,но в задачнике так у нас
может опечатка,а может и нет((((не понятно,а у преподавателя не успела спросить (((
0
3896 / 899 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
16.05.2009, 17:03 6
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Sub main()
Randomize
m = 7
n = 5
 
Dim F()
Dim K()
Dim L()
 
ReDim F(m - 1, n - 1)
ReDim K(m - 1)
ReDim L(n - 1)
 
'заполняем Z просто числами по порядку 1,2,3.... (можно заполнить чем угодно)
For i = 0 To m - 1
  For j = 0 To n - 1
    F(i, j) = i * n + j
  Next j
Next i
 
'заполняем массивы K и L (1,2,3...) (заполнять только так! не менять!)
For i = 0 To m - 1
  K(i) = i
Next i
For i = 0 To n - 1
  L(i) = i
Next i
 
'мешаем поочередно строки и столбцы меняя пары много раз
For i = 0 To 9999
  n1 = Int(Rnd * n)
  n2 = Int(Rnd * n)
  m1 = Int(Rnd * m)
  m2 = Int(Rnd * m)
  
  tmpValK = K(m1)
  K(m1) = K(m2)
  K(m2) = tmpValK
  
  tmpValL = L(n1)
  L(n1) = L(n2)
  L(n2) = tmpValL
  
  Call exchangeArray(F, m1, m2, True)
  Call exchangeArray(F, n1, n2, False)
Next i
End Sub
 
 
Sub exchangeArray(ByRef Arr, ByVal n1 As Integer, ByVal n2 As Integer, ByVal RowCol As Boolean)
'процедура меняет местами строки или столбцы в двумерном массиве
 
'Arr - двумерный массив значений
'n1 и n2 - номера строк(столбцов) которые поменяем местами
'RowCol - если истина, то мешаем строки, иначе столбцы
 
Dim tmpArr() 'временный массив
If RowCol Then
  ReDim tmpArr(UBound(Arr, 2))
  For i = 0 To UBound(Arr, 2)
    tmpArr(i) = Arr(n1, i)
  Next i
  
  For i = 0 To UBound(Arr, 2)
    Arr(n1, i) = Arr(n2, i)
    Arr(n2, i) = tmpArr(i)
  Next i
Else
  ReDim tmpArr(UBound(Arr, 1))
  For i = 0 To UBound(Arr, 1)
    tmpArr(i) = Arr(i, n1)
  Next i
  
  For i = 0 To UBound(Arr, 1)
    Arr(i, n1) = Arr(i, n2)
    Arr(i, n2) = tmpArr(i)
  Next i
 
End If
End Sub
Вот, вроде так. Массивы K и L содержать данные каим стал столбец (строка) по счету. Например если К(4)= 2, то это значит что четвертая строка стала второй.
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 17:18  [ТС] 7
ага,щас попробую
огромное преогромное спасибо)))

Добавлено через 8 минут 29 секунд
почему то не работает...ничего не выдает
может что то я не поняла
0
3896 / 899 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
16.05.2009, 17:29 8
А что должно выдать? Код обрабатывает массив, но не выводит его никуда. Так же как и не берет исходний массив ниоткуда.
Можно вот так вывести в ячейки:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
For i=1 to m
  For j=1 to n
    Cells(i,j).Formula = Arr(i,j)
  Next j
Next i
'выводим K после основного массива в строку
For i=0 to m-1
  Cells(m+2,i).formula = K(i)
Next i
'выводим L после основного массива в строку
For i=0 to n-1
  Cells(m+3,i).formula = K(i)
Next i
это вставьте после
Visual Basic
1
2
3
  Call exchangeArray(F, m1, m2, True)
  Call exchangeArray(F, n1, n2, False)
Next i
2
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 17:35  [ТС] 9
он ругается...
сообщение:Sub or Function not defined
0
10065 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
16.05.2009, 17:53 10
на какую строчку ругается?
0
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 17:56  [ТС] 11
на самую первую

Добавлено через 2 минуты 3 секунды
первая строчка
0
10065 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
16.05.2009, 18:06 12
Сразу. Здесь
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Visual Basic
1
Cells(i,j).Formula = Arr(i,j)
д.б.
Visual Basic
1
Cells(i, j).Formula = F(i, j)
но там еще на что-то ругается )
что-то вышло за пределы )))

Не по теме:

буду разбираться, если Тоха не против )))



Добавлено через 2 минуты 50 секунд
вот как должно быть
Visual Basic
1
Cells(i, j).Formula = F(i - 1, j - 1)
Добавлено через 1 минуту 58 секунд
что-то все равно не то
и ошибка прикольная "400"
что это значит ума не приложу
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 18:10  [ТС] 13
ругается и при этом выдает результат
вот какое сообщение: Subsricpt out of range
как думаете это нормально????

Добавлено через 3 минуты 14 секунд
исправила,опять ругается и при этом работает
сообщение звучит:
Run-Time error '1004'
Application-defined or object-defined error
0
10065 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
16.05.2009, 18:21 14
вот эти строчки
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
'выводим K после основного массива в строку
For i=0 to m-1
  Cells(m+2,i).formula = K(i)
Next i
'выводим L после основного массива в строку
For i=0 to n-1
  Cells(m+3,i).formula = K(i)
Next i
надо вот так
Visual Basic
1
2
3
4
5
6
7
8
'выводим K после основного массива в строку
For i = 1 To m
  Cells(m + 1, i).Formula = K(i - 1)
Next i
'выводим L после основного массива в строку
For i = 1 To n
  Cells(m + 2, i).Formula = L(i - 1)
Next i
переписать

Добавлено через 1 минуту 31 секунду
теперь не ругается и все выводит, но за инструкциями к автору кода
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 18:26  [ТС] 15
22 24 21 23 20
27 29 26 28 25
12 14 11 13 10
2 4 1 3 0
32 34 31 33 30
7 9 6 8 5
17 19 16 18 15
4 5 2 0 6 1 3
2 4 1 3 0

Такой результат,но не ругается

Добавлено через 2 минуты 56 секунд
предпоследняя строчка почему длинная???объясни
0
10065 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
16.05.2009, 18:27 16
1-е 7 строк это матрица F
8-я - это матрица К
9-я - это матрица L
причем цифры все время разные
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 18:30  [ТС] 17
объясните пожалуйста почему 8я строка длиннее???
я не понимаю че то...
0
10065 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
16.05.2009, 18:33 18
потому что там матрица 5х7, т.е. 8я строка 7 элементов, а 9я - 5.
1
1 / 1 / 0
Регистрация: 15.05.2009
Сообщений: 20
16.05.2009, 18:34  [ТС] 19
теперь поняла...спасибо большое)))
1
3896 / 899 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
16.05.2009, 19:07 20
Чего-то я сегодня не в форме
Такие ошибки леплю.
Последний кусок надо вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
For i=1 to m
  For j=1 to n
    Cells(i,j).Formula = F(i-1,j-1)
  Next j
Next i
'выводим K после основного массива в строку
For i=1 to m
  Cells(m+2,i).formula = K(i-1)
Next i
'выводим L после основного массива в строку
For i=1 to n
  Cells(m+3,i).formula = L(i-1)
Next i
Забыл что массивы с нуля а ячейки в экселе с единицы и получилось где-то так а где-то так, да еще и основной массив не так обозвал. *встал в угол на горох*

m+2 и m+3 я специально сделал так что б одна строка пустая была, что б не сливался массив этими строками.
Первая строка и должна быть длиннее т.к. ее длинна это кол-во строк.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2009, 19:07
Помогаю со студенческими работами здесь

Перенести первые k строк матрицы в конец
Помогите с задачей, пожалуйста! Завтра сдавать!!! Дан двумерный массив из двадцати строк и трех...

Перенести первые s столбцов в конец массива
Задача: Дан двумерный массив из 5 строк и 20 столбцов. Перенести первые s столбцов в конец массива,...

Перенести первые k элементов одномерного массива в конец
Опять к вам, заранее спасибо! Перенести первые k элементов одномерного массива в конец, то есть:...

Сдвинуть все элементы с четными индексами в начало массива, а с нечетными – в конец, сохраняя порядок их следования.
Задан одномерный массив. Сдвинуть все элементы с четными индексами в начало массива, а с нечетными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru