Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
-2 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13

Транспонирование матрицы

17.12.2017, 18:57. Показов 1754. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Снова я) На этот раз метод шифрования у меня другой - Сцитал. По сути при шифровании просто транспонируем матрицу, только у меня снова не получается и я снова не могу понять почему. Надеюсь, кто-то в этом разбирается и сможет мне помочь) Заранее благодарна!
Вот код:

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
Option Explicit
Dim A() As String
Dim H As String 'исходный текст
Dim m As Long 'количество строк матрицы
Dim n As Long 'колицество столбцов матрицы
Dim lentext As Long 'число знаков в тексте
Dim i As Long
Dim j As Long
Dim buf As String
 
Private Sub Command1_Click()
H = Text1.text
'исходный текст
m = Text2.text
'количество строк матрицы
lentext = Len(H)
n = Abs((lentext - 1) \ m) + 1 'количество столбцов
 
ReDim A(1 To m, 1 To n)
f = ""
For i = 1 To m
 For j = i To n
 buf = A(i, j)
 A(i, j) = A(j, i)
 A(j, i) = buf
 Next j
Next i
f = f & buf
Text3.text = f
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2017, 18:57
Ответы с готовыми решениями:

Транспонирование матрицы
Вечер добрый. Есть задание в котором надо выполнить транспонирование матрицы С размерности m*n , но чтоб транспонированная матрица...

Транспонирование матрицы
нужно транспортировать матрицу 2х2!спасибо большое

Транспонирование матрицы
Вроде как сделал но транспонирует как-то не правильно (в ворде): Dim a(1 To 2, 1 To 3), b(1 To 3, 1 To 2) As Single Dim i As Integer, j...

7
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
18.12.2017, 21:25
Цитата Сообщение от Eveeer Посмотреть сообщение
и я снова не могу понять почему
Потому,что у вас транспонировать нечего.Матрицы нет.
Вам нужно сформировать массив слов и преобразовать его в матрицу.
Сформировать массив слов можно функцией Split.
Преобразовать в матрицу как то так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim A(1 To 20) As Integer, B(1 To 5, 1 To 4) As Integer
Dim i As Integer, j As Integer, x As Integer
    For i = 1 To 5
        For j = 1 To 4
              x = x + 1                   ' Можно сделать так
              B(i, j) = A(x)
             'B(i, j) = A((i - 1) * 4 + j)' Или так
              Print B(i, j);
        Next j
        Print
    Next i
Что не понятно спрашивайте, чем смогу помогу.
1
-2 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13
20.12.2017, 17:09  [ТС]
Цитата Сообщение от Genn55 Посмотреть сообщение
Что не понятно спрашивайте, чем смогу помогу.
массив, образованный функцией split это я так понимаю х?
тогда не получается
не могу понять как связать массив букв с его преобразованием в матрицу
Visual Basic
1
x() = Split(H, "", -1, vbTextCompare)
у меня вот так

Добавлено через 1 час 49 минут
Цитата Сообщение от Genn55 Посмотреть сообщение
Что не понятно спрашивайте, чем смогу помогу.
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
Option Explicit
Dim A() As String
Dim B() As String
Dim H As String 'исходный текст
Dim m As Integer 'количество строк матрицы
Dim n As Integer 'колицество столбцов матрицы
Dim lentext As Long 'число знаков в тексте
Dim f As String
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim buf As String
 
Private Sub Command1_Click()
H = Text1.Text
'исходный текст
m = Text2.Text
'количество строк матрицы
lentext = Len(H)
n = Abs((lentext - 1) \ m) + 1 'количество столбцов
A() = Split(H, "", -1, vbTextCompare) 'формируем массив из введенных слов
 
ReDim A(1 To lentext) As String, B(1 To m, 1 To n) As String 'формируем матрицу
    For i = 1 To m
        For j = 1 To n
              x = x + 1
              B(i, j) = A(x)
            Print B(i, j);
        Next j
       Print
    Next i
    
For i = 1 To m 'транспонируем матрицу
 For j = i To n
 buf = B(i, j)
 B(i, j) = B(j, i)
 B(j, i) = buf
 Next j
Next i
 
 ReDim B(1 To m * n) 'формируем обратно одномерный массив
    For i = 1 To m * n
    buf = B(i)
        Print B(i);
    Next i
Text3.Text = B(i)
End Sub
Вообщем, вот что в итоге получилось, ругается на вывод зашифрованного текста, ошибка subscript out of range.
Visual Basic
1
Text3.Text = B(i)
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
20.12.2017, 17:56
Уточните.Вы хотите шифровать все символы или по словам?
Часа через 3-4 скины пример сейчас не могу.
0
-2 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13
20.12.2017, 18:05  [ТС]
Все символы.
Например я ввожу абвгде, матрица с 2 строками и 3 столбцами
абв
где
Потом эта матрица транспонирцется
аг
бд
ве
Потом должен формироваться массив, то есть зашифрованый текст: агбдве
Вот так
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
21.12.2017, 00:43
Как обещал.Думаю понятно.
Оптимизировать не стал.
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
Option Explicit
 
Private Sub Command1_Click()
     Dim A() As String, B() As String, Temp() As String, H As String
    Dim i As Long, j As Long, N As Long, M As Long, lentext As Long
    H = "Наша Маша громко плачет,уронила в речку мячик.Тише Машенька не плачь,не утонет в речке мяч!!!!!"
    lentext = Len(H)
    ReDim A(1 To lentext)
    'Вычислим число строк и столбцов
    For i = 1 To lentext
        For j = i To lentext
            If i * j = lentext Then M = i: N = j 'их будет много,но лучшее соотношение будет в конце
        Next
    Next
    Print M, N, lentext
    For i = 1 To lentext
        A(i) = Mid(H, i, 1) ' Запишем все символы в массив
        Print A(i) & " ";
    Next
    Print
    ReDim B(1 To M, 1 To N), Temp(1 To N, 1 To M)
    Print "Двумерный массив"
    Print
    'Преобразуем в двумерный массив
    For i = 1 To M
        For j = 1 To N
            B(i, j) = A((i - 1) * N + j)
            Temp(j, i) = B(i, j) 'Временный массив
    Print B(i, j),
        Next j
    Print
    Next i
    ReDim B(1 To N, 1 To M) 'переопределяем
    B = Temp 'копируем
    Print
    Print "Транспонированный массив"
    Print
    H = "" 'обнулим строку
    For i = 1 To N
        For j = 1 To M
        Print B(i, j),
        H = H & B(i, j) 'и запишем что получилось
    Next j
    Print
    Next i
    Print H 'распечатаем на форме
End Sub
Надеюсь понятно,что дешифрировать нужно в обратном порядке.
Подправите как вам нужно,что не ясно,спрашивайте.Удачи!

Добавлено через 1 час 10 минут
Чтобы расшифровать достаточно изменить 12ю строчку на
Visual Basic
1
If i * j = lentext Then N = i: M = j 'их будет много,но лучшее соотношение будет в конце
0
-2 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13
22.12.2017, 16:13  [ТС]
Цитата Сообщение от Genn55 Посмотреть сообщение
Подправите как вам нужно,что не ясно,спрашивайте.Удачи!
Спасибо большое! Вы очень-очень помогли! Не ясно одно:
Visual Basic
1
B = Temp
что значит копируем? Ведь переменные В и Temp у нас массивы, а тут обычные переменные
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
23.12.2017, 23:06
Я же делал тебе эту задачу
Применение функции ASCII ко ВСЕМУ тексту

Ты хочешь еще комуто голову нагреть ?

Цитата Сообщение от Genn55 Посмотреть сообщение
If i * j = lentext Then N = i: M = j 'их будет много,но лучшее соотношение будет в конце
там нужно 2 условия i * j и i * j+1 - потомучто длина текста может оказаться простым числом
лучшее соотношение выводим из среднестоящего элемента при таком сочетании


Хотя я сам виновать наверное, нужно было требовать одна тема один вопрос
в той теме было решено три вопроса

1) Применение функции ASCII ко ВСЕМУ тексту
2) шифрование текста методом Вернама
3) Транспонирование матрицы

Убедительная просьба к админам, разнесите мои ответы по соотвествующим темам
Впредь буду отвечать только на один вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2017, 23:06
Помогаю со студенческими работами здесь

Реализовать умножение матрицы, транспонирование матрицы, обращение матрицы
Реализовать умножение матрицы, транспонирование матрицы, (функция должна быть универсальной) обращение матрицы (процесс такой матрицы, что...

Даны матрицы А(5, 5) и В(5, 5). Напечатать матрицу Ат+Вт. Транспонирование матрицы оформить процедурой
Даны матрицы А(5, 5) и В(5, 5). Напечатать матрицу Ат+Вт. Транспонирование матрицы оформить процедурой. подскажите пожалуйста где...

Транспонирование матрицы. Содержание квадратной матрицы повернуть относительно центра на 90*.
Задача: Содержание квадратной матрицы повернуть относительно центра на 90*. Вот моя версия, она меняет местами четвертинки матрицы, а...

Даны матрицы А(5,5) и В(5,5).Напечатать матрицу А^T+B^T.Транспонирование матрицы оформить процедурой.
Помогите пожалуйста с программой. Даны матрицы А(5,5) и В(5,5).Напечатать матрицу А^T+B^T.Транспонирование матрицы оформить процедурой. ...

Транспонирование матрицы
Доброго времени суток!Как сделать матрицу,чтобы при транспонировании прямоугольной матрицы в результирующей матрице переделывалась сама...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru