Добрый день!!! У меня сложилать такая проблема что мне надо реализовать шифрование алгоритмом магический квадрат на C.Проблема в том что я плохо знаю С а вот реализовать на С надо оч быстро. У меня есть код написанный на VB6.0, не мог бы кто нибуть помощь в переводе текста из VB в С? Спасибо всем за внимание!!!! | Код | Private Sub cmdCodeMagSq_Click() 'Описание переменных Dim intMagSqInNum() As Integer 'Магический квадрат в числах Dim strTextInMagSq() As String 'Текст в магическом квадрате Dim strTextInArray() As String 'Одномерный массив шифруемого текста Dim intSizeOfArray As Integer 'Размер массива Dim i%, j% 'Integer(%) Dim strTextWBlanks As String 'Текст без пробелов Dim lngMarksInText As Long 'Чило знаков в тексте 'Убираем пробелы в тексте 'и преобразуем строчные буквы в прописные strTextWBlanks = StrConv(Replace(txtEntrance.Text, " ", ""), vbUpperCase) 'Вычисляем колличество знаков в тексте lngMarksInText = Len(strTextWBlanks) 'Вычисляем размер магического квадрата (массива) intSizeOfArray = Int(Sqr(lngMarksInText)) If intSizeOfArray Mod 2 = 0 Then intSizeOfArray = intSizeOfArray + 1 If intSizeOfArray ^ 2 < lngMarksInText Then intSizeOfArray = intSizeOfArray + 2 'Разбиваем текс в одномерный массив 'и в пустые значения присваеваем "*" ReDim strTextInArray(intSizeOfArray ^ 2) For i = 1 To intSizeOfArray ^ 2 If i > CInt(lngMarksInText) Then strTextInArray(i) = "*" Else strTextInArray(i) = Mid(strTextWBlanks, i, 1) End If Next i 'Создаем магический квадрат с помощью функции MagSqInNum intMagSqInNum = MagSqInNum(intSizeOfArray) 'Выводим магический квадрат txtMagSqInNum.Text = "" For i = 1 To intSizeOfArray For j = 1 To intSizeOfArray txtMagSqInNum.Text = txtMagSqInNum.Text & intMagSqInNum(i, j) & " " Next j txtMagSqInNum.Text = txtMagSqInNum.Text & vbCrLf Next i 'Распределяем текст в магический квадрат 'и выводим текст в матрице ReDim strTextInMagSq(intSizeOfArray, intSizeOfArray) txtTextInMagSq.Text = "" For i = 1 To intSizeOfArray For j = 1 To intSizeOfArray strTextInMagSq(i, j) = strTextInArray(intMagSqInNum(i, j)) txtTextInMagSq.Text = txtTextInMagSq.Text & strTextInMagSq(i, j) & " " Next j txtTextInMagSq.Text = txtTextInMagSq.Text & vbCrLf Next i 'Выводим шифрованный текст txtCodeMagSq.Text = "" For i = 1 To intSizeOfArray For j = 1 To intSizeOfArray strTextInMagSq(i, j) = strTextInArray(intMagSqInNum(i, j)) txtCodeMagSq.Text = txtCodeMagSq.Text & strTextInMagSq(i, j) Next j Next i 'Выводим размер квадрата на кнопку cmdCodeMagSq.Caption = "Магический квадрат (" & intSizeOfArray & " x " & intSizeOfArray & ")" End Sub
Function MagSqInNum(intSizeOfArray As Integer) As Integer() 'Функция для создания магического квадрата 'нечетного порядка NxN 'Описание переменных Dim intMagSqInNum() As Integer 'Магический квадрат в числах Dim intAverArray As Integer 'Среднее значение массива Dim i%, j%, k% 'Integer(%) Dim intVariantSq As Integer 'Вариант магического квадрата 'Определяем среднее значение массива intAverArray = Int(intSizeOfArray / 2) + 1 'Переопределяем размер массива (квадрата) ReDim intMagSqInNum(intSizeOfArray, intSizeOfArray) 'Выбираем вариант с помощью генератора случайных чисел Randomize intVariantSq = Int((8 - 1 + 1) * Rnd + 1) 'Создаем магический квадрат соответственно варианту Select Case intVariantSq Case Is = 1 ' 8 1 6 ' 3 5 7 ' 4 9 2 i = 1: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i < 1 And j > intSizeOfArray Then i = i + 2: j = j - 1 ElseIf i < 1 Then i = intSizeOfArray ElseIf j > intSizeOfArray Then j = 1 ElseIf intMagSqInNum(i, j) > 0 Then i = i + 2: j = j - 1 End If intMagSqInNum(i, j) = k i = i - 1: j = j + 1 Next k Case Is = 2 ' 6 7 2 ' 1 5 9 ' 8 3 4 i = 1: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i < 1 And j < 1 Then i = i + 2: j = j + 1 ElseIf i < 1 Then i = intSizeOfArray ElseIf j < 1 Then j = intSizeOfArray ElseIf intMagSqInNum(j, i) > 0 Then i = i + 2: j = j + 1 End If intMagSqInNum(j, i) = k i = i - 1: j = j - 1 Next k Case Is = 3 ' 2 9 4 ' 7 5 3 ' 6 1 8 i = intSizeOfArray: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i > intSizeOfArray And j < 1 Then i = i - 2: j = j + 1 ElseIf i > intSizeOfArray Then i = 1 ElseIf j < 1 Then j = intSizeOfArray ElseIf intMagSqInNum(i, j) > 0 Then i = i - 2: j = j + 1 End If intMagSqInNum(i, j) = k i = i + 1: j = j - 1 Next k Case Is = 4 ' 4 3 8 ' 9 5 1 ' 2 7 6 i = intAverArray: j = intSizeOfArray For k = 1 To intSizeOfArray ^ 2 If i > intSizeOfArray And j > intSizeOfArray Then i = i - 1: j = j - 2 ElseIf i > intSizeOfArray Then i = 1 ElseIf j > intSizeOfArray Then j = 1 ElseIf intMagSqInNum(i, j) > 0 Then i = i - 1: j = j - 2 End If intMagSqInNum(i, j) = k i = i + 1: j = j + 1 Next k Case Is = 5 ' 6 1 8 ' 7 5 3 ' 2 9 4 i = 1: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i < 1 And j < 1 Then i = i + 2: j = j + 1 ElseIf i < 1 Then i = intSizeOfArray ElseIf j < 1 Then j = intSizeOfArray ElseIf intMagSqInNum(i, j) > 0 Then i = i + 2: j = j + 1 End If intMagSqInNum(i, j) = k i = i - 1: j = j - 1 Next k Case Is = 6 ' 8 3 4 ' 1 5 9 ' 6 7 2 i = 1: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i < 1 And j > intSizeOfArray Then i = i + 2: j = j - 1 ElseIf i < 1 Then i = intSizeOfArray ElseIf j > intSizeOfArray Then j = 1 ElseIf intMagSqInNum(j, i) > 0 Then i = i + 2: j = j - 1 End If intMagSqInNum(j, i) = k i = i - 1: j = j + 1 Next k Case Is = 7 ' 4 9 2 ' 3 5 7 ' 8 1 6 i = intAverArray: j = intSizeOfArray For k = 1 To intSizeOfArray ^ 2 If i > intSizeOfArray And j > intSizeOfArray Then i = i - 1: j = j - 2 ElseIf i > intSizeOfArray Then i = 1 ElseIf j > intSizeOfArray Then j = 1 ElseIf intMagSqInNum(j, i) > 0 Then i = i - 1: j = j - 2 End If intMagSqInNum(j, i) = k i = i + 1: j = j + 1 Next k Case Is = 8 ' 2 7 6 ' 9 5 1 ' 4 3 8 i = intSizeOfArray: j = intAverArray For k = 1 To intSizeOfArray ^ 2 If i > intSizeOfArray And j < 1 Then i = i - 2: j = j + 1 ElseIf i > intSizeOfArray Then i = 1 ElseIf j < 1 Then j = intSizeOfArray ElseIf intMagSqInNum(j, i) > 0 Then i = i - 2: j = j + 1 End If intMagSqInNum(j, i) = k i = i + 1: j = j - 1 Next k End Select MagSqInNum = intMagSqInNum End Function
|
Да к стате в С графический интефейс мне не нужен) Это сообщение отредактировал(а) danata - 20.11.2008, 22:50
|