Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58

Перевод кода из Delphi в C#

03.11.2013, 08:06. Показов 1029. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста. Я попыталась перевести код из Delphi в C#, но есть ошибки. я не знаю может что-то упустила. Помогите, исправить ошибки. В архиве код,который я напечатала в C# и код Delphi. Буду очень признательна.
ошибка вылазит что "не все ветви кода возвращают значение". а я не пойму почему.помогите разобраться,пожалуйста.
Вложения
Тип файла: rar OiB_6.rar (68.7 Кб, 13 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2013, 08:06
Ответы с готовыми решениями:

Перевод кода с СИ на Delphi
Нужно вот такой код перевести на Delphi!Это функция, которая возвращает ранг матрицы!Помогите пожалуйста! // Приведение вещественной...

Перевод кода c++ на delphi
Здравствуйте, есть очень простой код на c++. Он считает количество совпадений каждого символа в каждой строке. #include <iostream> ...

Перевод кода с Delphi в C#
type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; start : TEdit; finish: TEdit; Label3:...

6
 Аватар для Nevermore_
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
03.11.2013, 09:15
Тут у вас написано
Кликните здесь для просмотра всего текста
C#
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
81
82
83
84
85
86
87
88
89
90
91
string Playfair_Crypt(string s, string key)
        {
            //--------переводим ключ и исходный текст в нижний регистр
            key = key.ToUpper();
            s = s.ToUpper();
            //--------удаляем из строки все симолы,не входящие в алфавит
            temp = "";
            for (i = 0; i < s.Length; i++)
            {
                if (Convert.ToInt32(URusA.Contains(s[i])) != 0) //!!!!!!!!!!!!!!!!!!!!!
                    temp += s[i];
            }
            s = temp;
            //--------создание ключевой матрицы, с использованием ключевого слова
            temp = "";
            for (i = 0; i < key.Length; i++)
            {
                if (Convert.ToInt32(temp.Contains(key[i])) == 0) //!!!!!!!!!!!!!!!!!!!!!
                    temp += key[i];
            }
            for (i = 0; i < URusA.Length; i++)
            {
                if (Convert.ToInt32(temp.Contains(URusA[i])) == 0) //!!!!!!!!!!!!!!!!!!!!!
                    temp += URusA[i];
            }
            t = 0;
            for (i = 0; i < MaxY; i++)
            {
                for (j = 0; j < MaxX; j++)
                {
                    t++; //!!!!!!!!!!!!!!!!!
                    array[i, j] = temp[t];
                    alfabet.Row = j;
                    alfabet.Col = i;
 
                    alfabet.set_TextMatrix(i, j, temp[t].ToString());
                }
            }
        //-----просмотр строки по парам символов и вставка разделяющего символа."Ф" в случае когда в паре попались одинаковые символы
        M1: for (i = 0; i < s.Length/2; i++)
            {
                if (s[2 * i - 1] == s[2 * i])
                {
                    s.Insert(2 * i, "Ф");
                    goto M1;
                }
            }
            //----------добавляем символ в конец строки,если ее длина нечетная
        if (s.Length % 2 == 1)
        
            if (s[s.Length] != 'Ф')
                s = s+'Ф';
            else
                s=s+'Я';
        
            temp = "";
            for (i = 0; i < s.Length/2; i++)
            {
                SimbolPoc(s[2 * i - 1],out x1, out y1);
                SimbolPoc(s[2 * i],out x2, out y2);
                //-----------------Правило 1-----------
                if (y1 == y2)
                {
                    x1++; x2++;
                    if (x1 > MaxX)
                        x1 = x1 - MaxX;
                    if (x2 > MaxX)
                        x2 = x2 - MaxX;
                    temp += array[y1, x1] + array[y2, x2];
                }
                //-----------------Правило 2-----------
                if (x1 == x2)
                {
                    y1++; y2++;
                    if (y1 > MaxY)
                        y1 = y1 - MaxY;
                    if (y2 > MaxY)
                        y2 = y2 - MaxY;
                    temp += array[y1, x1] + array[y2, x2];
                }
                //-----------------Правило 3-----------
                if ((x1 != x2) && (y1 != y2))
                {
 
                    temp += array[y1, x2] + array[y2, x1];
                }
 
            }
            temp = Playfair_Crypt(s, key);
            rot = temp;
        }

в этом участке код
C#
1
            temp = Playfair_Crypt(s, key);
, а в оригинале
Pascal
1
Playfair_Crypt:=temp;
Так что надо
C#
1
2
  rot = temp;
            return temp;
1
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
03.11.2013, 10:35  [ТС]
Цитата Сообщение от Nevermore_ Посмотреть сообщение
Тут у вас написано
в этом участке код
C#
1
            temp = Playfair_Crypt(s, key);
, а в оригинале
Pascal
1
Playfair_Crypt:=temp;
Так что надо
C#
1
2
  rot = temp;
            return temp;
Спасибо)только теперь оказалось есть и другие недочеты. Вот я не пойму вот здесь если в цикле ставить с 0,то пишет "индекс находится вне границ массива". если с 1, то нулевой символ не видит. и вообще как то он процедуру SimbolPoc странно выполняет, берет значения не те что надо..
C#
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
for (i = 1; i <= s.Length/2; i++)
            {
                SimbolPoc(s[2 * i - 1], out x1, out y1);
                SimbolPoc(s[2 * i], out x2, out y2);
                //-----------------Правило 1-----------
                if (y1 == y2)
                {
                    if (x1 > MaxX)
                        x1 = x1 - MaxX;
                    if (x2 > MaxX)
                        x2 = x2 - MaxX;
                    x1++; x2++;
                    temp += array[y1, x1] + array[y2, x2];
                }
                //-----------------Правило 2-----------
                if (x1 == x2)
                {
 
                    if (y1 > MaxY)
                        y1 = y1 - MaxY;
                    if (y2 > MaxY)
                        y2 = y2 - MaxY;
                    y1++; y2++;
                    temp += array[y1, x1] + array[y2, x2];
                }
                //-----------------Правило 3-----------
                if ((x1 != x2) && (y1 != y2))
                {
 
                    temp += array[y1, x2] + array[y2, x1];
                }
 
            }
0
 Аватар для Nevermore_
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
03.11.2013, 10:48
дело в том что в паскале массив начинается с одного , а в си подобных с нуля
C#
1
 SimbolPoc(s[2 * i - 1], out x1, out y1);
вот здесь при
C#
1
i=0
будет 2*0-1=-1 такого индекса массива нету , и поэтому пишет вне границ массива.Попробуйте убрать -1 , я просто точно не знаю что выполняет это число здесь.
0
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
03.11.2013, 11:02  [ТС]
Цитата Сообщение от Nevermore_ Посмотреть сообщение
дело в том что в паскале массив начинается с одного , а в си подобных с нуля
C#
1
 SimbolPoc(s[2 * i - 1], out x1, out y1);
вот здесь при
C#
1
i=0
будет 2*0-1=-1 такого индекса массива нету , и поэтому пишет вне границ массива.Попробуйте убрать -1 , я просто точно не знаю что выполняет это число здесь.
этот код осуществляет шифрование методом Плейфера. Есть ключевая матрица в нее забиты буквы. Процедура SimbolPoc ищет символы по этой матрице и возвращает их расположение(столбец и строку). Идет по тексту и берет первый символ,затем следующий.находит местоположение и выбирает на что их нужно заменить по 3 правилам.
в цикле должно браться по 2 символа из строки и выполняться.пока текст не закончится.
а у меня помимо того что не сначала начинается,так он берет 4 символ а потом сразу 8.
0
 Аватар для Nevermore_
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
03.11.2013, 11:12
Leksi11,
я вас понял
C#
1
2
SimbolPoc(s[2 * i ], out x1, out y1);
SimbolPoc(s[2 * i+1], out x2, out y2)
0
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
03.11.2013, 16:05  [ТС]
Цитата Сообщение от Nevermore_ Посмотреть сообщение
Leksi11,
я вас понял
C#
1
2
SimbolPoc(s[2 * i ], out x1, out y1);
SimbolPoc(s[2 * i+1], out x2, out y2)
да.теперь начинается с нулевого. спасибо. Извините,конечно,за наглость.но можно еще вопрос)
C#
1
2
SimbolPoc(s[2*i], out x1, out y1);
                SimbolPoc(s[2 * i + 1], out x2, out y2);
вот здесь мы получаем символ из текста(s[2*i] и s[2 * i + 1]),но по идее его же передать в процедуру надо,чтобы он вычислил его местоположение. видать из за того, что этот символ сюда не передается и неправильно просчитывается. а вот как его передать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 //----------функция поиска символа в ключевой матрице.возвращает строку "у" и столбец "х"
void SimbolPoc(char c, out int x, out int y)
        {
            x = 0;
            y = 0;
            for (i = 0; i < MaxY; i++)
            {
                for (j = 0; j < MaxX; j++)
                {
                    if (c == array[i, j])
                    {
                        x = j; y = i;
                    }
                }
            }
        }
Добавлено через 4 часа 35 минут
всем спасибо))я доделала)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2013, 16:05
Помогаю со студенческими работами здесь

Перевод кода с C++ на Delphi.
Добрый день. Взялся давеча помочь одному человечку с задачей о рюкзаке, написал программу на C++, но оказалось, что писать ему ее надо было...

Перевод кода из с++ в Delphi
помогите пожалуйста перевести код этой функции в делфи, а то ни как не могу догнать как это сделать :) unsigned char...

Перевод кода Delphi
Здравствуйте!! Ребята помогите, пожалуйста, с переводом кода с Delphi на С++ Builder. Хоть на форуме уже не 1 год, просто никогда не...

Перевод кода в Delphi
Помогите перевести этот кусок кода из С в Delphi void SelectLine(TRichEdit *Editor, DWORD nLine) { Editor-&gt;SetFocus(); ...

Перевод кода с Delphi на C#
Друг скинул код и попросил перевести а я не разбираюсь переведите плиз. Project FILLER.EXE; Uses {$R *.RES} begin {


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru