Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
1

Переделать код паскаля под джаву

15.05.2017, 18:36. Показов 4734. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста переделать код паскаля для использования в джаве.

Pascal
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
Const
     s4:array[0..15] of string[4]=('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111');
    s5:array[0..15] of string[1]=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
 
var s,h,kod,t:string;
    a:array[0..100000] of string[8];
    x:byte;
    i,j,n:longint;
    rez:string;
 
begin
writeln('Введите ваш текст:');
readln(s);
n:=0;
for i:=1 to length(s) do
 begin
  x:=ord(s[i]);
  n:=n+1;
  a[n]:='';
  while x>0 do
   begin
    a[n]:=chr(x mod 2+48)+a[n];
    x:=x div 2;
   end;
  while length(a[n])<8 do a[n]:='0'+a[n];
 end;
 n:=1;
 for i:=1 to length(s) do kod:=kod+a[i];
for i:=1 to length(kod) div 4 do
begin
t:=copy(kod,n,4);
n:=n+4;
for j:=0 to 15 do
if s4[j]=t then rez:=rez+s5[j];
end;
Writeln('Шифр: ',rez); 
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2017, 18:36
Ответы с готовыми решениями:

Переделать код паскаля под джаву
Помогите пожалуйста переделать код паскаля для использования в джаве. Const a:array of...

Нужно перевести код из Паскаля на Джаву
uses crt; const Num = 3; var X:array of byte; W,Delta:array of real; ...

Delphi на Java (перевести этот код на Джаву)
Здравствуйте уважаемые форумчанины! Нужна помощь, перевести Делфи на язык Java. Условие самой...

Нужно код из Паскаля, переделать под Делфи
Помогите, нужно код Паскаля сделать под Делфи 7. Это метод Гаусса, если что. program abc; var...

11
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
16.05.2017, 11:58 2
Лучший ответ Сообщение было отмечено Иван123456 как решение

Решение

Вариант программы переписан максимально близко к коду Паскаль
Java
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
public class Pascal {
 
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Введите Ваш текст:");
        String s = in.nextLine(); // введена строка текста
 
        String res = "";
        for (char c : s.toCharArray()) {
            res += String.format("%02X",(int)c);
        }
        System.out.println("Шифр:"+res);
    }
 
    public static void main(String[] args) {
        String[] s4 = new String[]{"0000", "0001", "0010", "0011", "0100", "0101", "0110",
                "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
        };
        String[] s5 = new String[]{"0", "1", "2", "3", "4", "5", "6",
                "7", "8", "9", "A", "B", "C", "D", "E", "F"
        };
        String[] a = new String[100000]; // пустой массив длина строки не может быть фиксирована
        String s = "", kod = "", t = "", rez = "";
        int x;
 
        Scanner in = new Scanner(System.in);
        System.out.print("Введите Ваш текст:");
        s = in.nextLine(); // введена строка текста
 
        for (int i = 0; i < s.length(); i++) {
            x = (int) Character.valueOf(s.charAt(i)); // получить код ASCII
            a[i] = "";  // n работает с нуля
            while (x > 0) {
                a[i] = (char) ((x % 2) + 48) + a[i];
                x = (x / 2);
            }
            while (a[i].length() < 8) {
                a[i] = "0" + a[i];
            }
        } // отработали весь массив
        kod = "";
        for (int i = 0; i < s.length(); i++) {
            kod += a[i];
        }
 
        for (int i = 0; i < kod.length(); i += 4) {
            t = kod.substring(i, i + 4);
            for (int j = 0; j < s4.length; j++) {
                if (s4[j].equals(t)) {
                    rez = rez+ s5[j];
                }
            }
        }
        System.out.println("Шифр:" + rez);
    }
}
Все тоже самое, но проще
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Pascal2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Введите Ваш текст:");
        String s = in.nextLine(); // введена строка текста
 
        String res = "";
        for (char c : s.toCharArray()) {
            res += String.format("%02X",(int)c);
        }
        System.out.println("Шифр:"+res);
    }
}
1
51 / 51 / 23
Регистрация: 05.04.2010
Сообщений: 127
16.05.2017, 12:05 3
Java
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
public class Main {
 
    private static final String[] s4 = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    private static final char[] s5 = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
 
    public static void main(String[] args) {
        String[] a = new String[100001];
        String kod = "";
        String rez = "";
        String t;
        System.out.println("Ввведите ваш текст:");
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int n = 0;
        for (int i = 0; i < s.length(); i++) {
            byte x = (byte) s.charAt(i);
 
            a[n] = "";
            while (x > 0) {
                a[n] = (char) (x % 2 + 48) + a[n];
                x /= 2;
            }
            while (a[n].length() < 8) {
                a[n] = '0' + a[n];
            }
            n++;
        }
        n = 0;
        for (int i = 0; i < s.length(); i++) {
            kod = kod + a[i];
        }
        for (int i = 0; i < kod.length() / 4; i++) {
            t = kod.substring(n, n+4);
            n += 4;
            for (int j = 0; j < 15; j++) {
                if (s4[j].equals(t)) {
                    rez += s5[j];
                }
            }
        }
        System.out.println("Шифр: " + rez);
    }
}
1
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
16.05.2017, 17:49  [ТС] 4
Огромное спасибо)
0
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
17.05.2017, 18:14  [ТС] 5
Выдает вот такую ошибку
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 29
at java.lang.String.substring(String.java:1963)
at javaapplication3.Deshifr.main(Deshifr.java:36)
C:\Users\Ivan\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 1 секунда)
Как исправить??
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
17.05.2017, 18:35 6
Цитата Сообщение от Иван123456 Посмотреть сообщение
Выдает вот такую ошибку
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 29
Означает что Вы обращаетесь к строке с индексом 29 который больше длины строки.
И так как происходит это с substring похоже есть путаница в работе с substring.
Давайте сюда проблемный файл.
1
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
17.05.2017, 19:05  [ТС] 7
Код
public class Deshifr {
            public static void main(String[] args) {
     String[] a = new String[]{"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
        String[] m = new String[]{"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
        byte g;
        String s,t,kod="",rez;
        char[] h = new char[1000000];
        short st,d,n;
        int i,j;
        float p;

        Scanner scanner = new Scanner(System.in);
        System.out.println("¬ведите код");
        s = scanner.nextLine();
        n=0;
        for (i=1 ; i < s.length() ; i++) {
            n++;
            t = s.substring(n, n+1);
            for (j = 0; j < 15; j++)
                if (t.equals(m[j])) {
                    kod += a[j];
                }
        }
        n=1;
        st=7;
        j=1;
        p=0;
        for (i = 0; i < kod.length(); i++) {
            t = kod.substring(n, n+1);
            g = Byte.decode(t);
            p = (float) (p + g * Math.pow(Math.E,Math.exp(2) * st));
            n++;
            if (st > 0) st--;
            else {
                st = 7;
                d = (short) Math.round(p);
                h[j] = (char) d;
                p=0;
                j++;
            }
        }
        for (i=0; i < s.length() / 2; i++) System.out.println(h[i]);
    
    }
}
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
17.05.2017, 20:24 8
Class Deshifr
Кликните здесь для просмотра всего текста

Java
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
public class Deshifr {
    public static void main(String[] args) {
        String[] a = new String[]{"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
        String[] m = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
        byte g;
        String s, t, kod = "", rez;
        char[] h = new char[1000000];
        short st, d, n;
        int i, j;
        float p;
 
        Scanner scanner = new Scanner(System.in);
        System.out.println("¬ведите код");
        s = scanner.nextLine();
        n = 0;
        for (i = 1; i < s.length(); i++) {
//            n++;                        // ошибка строка работает с индекса 0
//            t = s.substring(n, n + 1);  // ошибка, дает просто символ, а нужен его hex code
            t = String.format("%02X", (byte) s.charAt(n)); // дает hexcode символа двухзначный вида 41 5A
            n++;
            for (j = 0; j < 15; j++) {
                if (t.substring(0,1).equals(m[j])) {  // первый символ hexCode
                    kod += a[j];
                }
            }
            for (j = 0; j < 15; j++) {
                if (t.substring(1, 2).equals(m[j])) { // второй символ  hexCode
                    kod += a[j];
                }
            }
        }
//        n = 1; // ошибка   строка работает с нуля
        n = 0;
        st = 7;
        j = 1;
        p = 0;
        for (i = 0; i < kod.length(); i++) {
            t = kod.substring(n, n + 1);
            g = Byte.decode(t);
            p = (float) (p + g * Math.pow(Math.E, Math.exp(2) * st));
            n++;
            if (st > 0) st--;
            else {
                st = 7;
                d = (short) Math.round(p);
                h[j] = (char) d;
                p = 0;
                j++;
            }
        }
        for (i = 0; i < s.length() / 2; i++){
            System.out.print(h[i]);
        }
 
    }
}

Теперь переводит строку в последовательность 0,1 без затыков.
Проверяйте.
1
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
18.05.2017, 14:59  [ТС] 9
Не выдает ошибок, но при выводе в консоле почему то не отображаемые символы, использую NetBeans
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
18.05.2017, 15:03 10
Цитата Сообщение от Иван123456 Посмотреть сообщение
Не выдает ошибок, но при выводе в консоле почему то не отображаемые символы, использую NetBeans
Я не разбирался что у Вас там за алгоритм кодировки, судя по тому что Вы используете математические функции, это некая формула. И естественно в результате получаются байты данных, которые не будут отображаться как обычные символы.
Если Вы хотите их отображать в Binary или Hex формате надо преобразовать двоичные данные в ASCII символы 0/1 или hex.
1
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 13
18.05.2017, 15:20  [ТС] 11
Суть в том что вводилась строка текста любого, потом выводилась его так сказать 16 ричная версия, и вот эта программа делала все обратно, это нужно для удобства шифрования данных с помощью разнообразных старых алгоритмов так как они не использовали русский, а в качестве примера привести надо.
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
18.05.2017, 16:00 12
Предлагаю поработать с отладчиком, в нем все хорошо видно.
Если не получится, выкладывайте алгоритм, исходные и выходные данные. можно на почту temp20170516@mail.ru
Почта временная, но пару недель продержится
PS: плюсовать каждый пост не нужно, один на тему достаточно.
0
18.05.2017, 16:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2017, 16:00
Помогаю со студенческими работами здесь

Переделать под с Паскаля в Делфи
{$DEFINE DEBUG} program p0524; {$APPTYPE CONSOLE} uses SysUtils; const W = 4; ...

Переделать программу из турбо паскаля под АВС
Uses crt, graph; var d,m,i:integer; x,y,a,rx,ry,color:integer; begin ...

Переделать код из Паскаля в С++
program Param40; type St=String; var S:St; i,K:integer; Function...

Переделать код из Паскаля в С++
Type mas = Array of Real; {--------------} Procedure Sort(var a: mas; n: Byte); var i,j:...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru