Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод программного кода с C++ на Java 
:(
    Опции темы
Reenaz
Дата 12.10.2015, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.10.2015

Репутация: нет
Всего: нет



Есть код программы, выполняющий алгоритм Обхода коня всех клеток шахматной доски.Нужно перевести этот код на Java.Пожалуйста помогите это сделать, сам в с++ совершенно не разбирась((
вот ссылка на сам код: http://iguania.ru/article/knights-tour
PM MAIL   Вверх
LSD
Дата 12.10.2015, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538




M
LSD
Для домашних заданий, курсовых и т.п. существует \"Центр Помощи\".




Тема перенесена. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
rudolfninja
Дата 12.10.2015, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



Насколько я вижу, там код на java будет почти такой же. Единственное отличие, на первый взгляд, будет в  организации ввода/вывода.
PM MAIL Skype   Вверх
leniviy
Дата 12.10.2015, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Насколько я помню, у швейцарцев есть такая программа-конвертер. Услуга стоит $10 за строку кода. Или можно потратить 40 минут на изучение основ C++.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
leniviy
Дата 12.10.2015, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



https://www.mtsystems.com/

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Urfin
Дата 13.10.2015, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 27.10.2006
Где: хохляндия

Репутация: нет
Всего: 1



не хило. А если в файле несколько тысяч строк, это не для бедных :)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL WWW ICQ   Вверх
Angel666
Дата 13.10.2015, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 8.9.2011

Репутация: нет
Всего: 1



Ну как то так :)

import java.util.Scanner;

public class main {
    
    private final int hor = 8;
    private final int ver = 8;
    
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        
        //выделяем память для массива, эмитирующего шахматную доску
        int[][] board = new int[8][8];
        //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7)
        int[] horizontal = { 2, 1,-1,-2,-2,-1, 1, 2};
        int[] vertical   = {-1,-2,-2,-1, 1, 2, 2, 1};
        //массив доступности ходов конем
        int[][] accessibility = {{2,3,4,4,4,4,3,2},
                                {3,4,6,6,6,6,4,3},
                                {4,6,8,8,8,8,6,4},
                                {4,6,8,8,8,8,6,4},
                                {4,6,8,8,8,8,6,4},
                                {4,6,8,8,8,8,6,4},
                                {3,4,6,6,6,6,4,3},
                                {2,3,4,4,4,4,3,2}};
        
        //переменные, запоминающие текущие координаты нахождения коня
        int currentRow, currentColumn;
        //переменная, определяющая вариант хода конем(от 0 до 7)
        int moveNumber;
        //счетчик ходов конем
        int counter = 0;

        //предложение ввода координаты нахождения коня по горизонтали
        System.out.println("Enter a horizontal coordinate(0 - 7): ");
        //сохранение введенных данных в переменной
        currentRow = scanner.nextInt();
        //ввод координаты по вертикали
        System.out.println("Enter a vertical coordinate(0 - 7): ");
        //сохранение данных ввода
        currentColumn = scanner.nextInt();

        //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их
        int mainRow = currentRow, mainColumn = currentColumn;
        //переменные для записи координат следующего хода конем
        int Row = 0, Column = 0;
        
        //начинаем поиск решения
        for(int i = 1; i <= 64; i++)
        {
            board[mainRow][mainColumn] = ++counter;

            //делаем равным максимально возможной доступности
            int minAccessibility = 8;
            //временные переменные для исследования субдоступностей
            int minA = 8, minB = 8;

            //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной
            for(moveNumber = 0; moveNumber <= 7; moveNumber++)
            {
                //запоминаем положение коня на доске перед модификацией для изменения доступностей
                currentRow = mainRow;
                currentColumn = mainColumn;

                //исследуем доступность всех возможных ходов не выходящих за границы доски
                currentRow += horizontal[moveNumber];
                currentColumn += vertical[moveNumber];

                //не выходит ли за границы доски
                if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7)
                {
                    //уменьшаем доступность всех клеток в одном ходу
                    accessibility[currentRow][currentColumn]--;

                    //если доступность больше, то меняем на меньшую
                    if(minAccessibility > accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0)
                    {
                        //нашли минимальную доступность и ее координаты
                        minAccessibility = accessibility[currentRow][currentColumn];

                        //если не ходили на нее еще то делаем на нее ход
                        if(board[currentRow][currentColumn] == 0)
                        {
                            //подготовили координаты к ходу на эту клетку
                            Row = currentRow;
                            Column = currentColumn;
                        }
                        //временных переменные для нахождения минимальной доступности у тех, что меньше
                        int RowA = currentRow, ColumnA = currentColumn;

                        for(int moveA = 0; moveA <= 7; moveA++)
                        {
                            RowA += horizontal[moveA];
                            ColumnA += vertical[moveA];

                            if(RowA >= 0 && RowA <= 7 && ColumnA >= 0 && ColumnA <= 7)
                            {
                                if(minA >= accessibility[RowA][ColumnA] && board[RowA][ColumnA] == 0)
                                    //наименьшая доступность следующего хода
                                    minA = accessibility[RowA][ColumnA];
                            }
                        }
                    }

                    //если доступности равны
                    if(minAccessibility == accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0)
                    {
                        minAccessibility = accessibility[currentRow][currentColumn];

                        //временных переменные для нахождения минимальной доступности у тех, что равны
                        int RowB = currentRow, ColumnB = currentColumn;

                        for(int moveB = 0; moveB <= 7; moveB++)
                        {
                            RowB += horizontal[moveB];
                            ColumnB += vertical[moveB];

                            if(RowB >= 0 && RowB <= 7 && ColumnB >= 0 && ColumnB <= 7)
                            {
                                if(minB >= accessibility[RowB][ColumnB] && board[RowB][ColumnB] == 0)
                                    //наименьшая доступность следующего хода
                                    minB = accessibility[RowB][ColumnB];
                            }
                        }

                        //если не ходили на нее еще то делаем на нее ход
                        if(board[currentRow][currentColumn] == 0 && minB < minA)
                        {
                            //изменяем подготовленные для следующего хода координаты в случае, если доступность следующего хода меньше
                            Row = currentRow;
                            Column = currentColumn;
                        }
                    }
                }
            }

            mainRow = Row;
            mainColumn = Column;
        }

        //вызов функции для печати массива, моделирующего шахматную доску
        printBoard(board);
        
        System.out.println("End"); 
    }
    
    //вывод массива, печатающего шахматную доску, на экран
    static void printBoard(int[][] board)
    {
        for(int j = 0; j < 8; j++)
        {
            for(int i = 0; i < 8; i++)
            {
             System.out.print(board[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Angel666
Дата 13.10.2015, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 8.9.2011

Репутация: нет
Всего: 1



Кому нужно вот под C#

using System;

namespace Journey_of_the_horse
{
    class Program
    {
        //глобальные константы, определяющие размерность массива board
        const int hor = 8, ver = 8;
        
        //прототип функции для вывода массива, имитирующего шахматную доску, на экран

        public static void Main(string[] args)
        {            
            //выделяем память для массива, эмитирующего шахматную доску
            int[,] board = new int[hor, ver];
            
            //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7)
            int[] horizontal = { 2, 1,-1,-2,-2,-1, 1, 2};
            int[] vertical   = {-1,-2,-2,-1, 1, 2, 2, 1};
            
            //массив доступности ходов конем
            int[,] accessibility = new int[hor, ver]
                                          {{2,3,4,4,4,4,3,2},
                                           {3,4,6,6,6,6,4,3},
                                           {4,6,8,8,8,8,6,4},
                                           {4,6,8,8,8,8,6,4},
                                           {4,6,8,8,8,8,6,4},
                                           {4,6,8,8,8,8,6,4},
                                           {3,4,6,6,6,6,4,3},
                                           {2,3,4,4,4,4,3,2}};
            
            //переменные, запоминающие текущие координаты нахождения коня
            int currentRow, currentColumn;
            //переменная, определяющая вариант хода конем(от 0 до 7)
            int moveNumber;
            //счетчик ходов конем
            int counter = 0;
        
            //предложение ввода координаты нахождения коня по горизонтали
            Console.Write("Enter a horizontal coordinate(0 - 7): ");
            //сохранение введенных данных в переменной
            currentRow = int.Parse(Console.ReadLine());
            //ввод координаты по вертикали
            Console.Write("Enter a vertical coordinate(0 - 7): ");
            //сохранение данных ввода
            currentColumn = int.Parse(Console.ReadLine());
        
            //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их
            int mainRow = currentRow, mainColumn = currentColumn;
            //переменные для записи координат следующего хода конем
            int Row = 0, Column = 0;
            
           //начинаем поиск решения
            for(int i = 1; i <= 64; i++)
            {
                board[mainRow, mainColumn] = ++counter;
        
                //делаем равным максимально возможной доступности
                int minAccessibility = 8;
                //временные переменные для исследования субдоступностей
                int minA = 8, minB = 8;
        
                //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной
                for(moveNumber = 0; moveNumber <= 7; moveNumber++)
                {
                    //запоминаем положение коня на доске перед модификацией для изменения доступностей
                    currentRow = mainRow;
                    currentColumn = mainColumn;
        
                    //исследуем доступность всех возможных ходов не выходящих за границы доски
                    currentRow += horizontal[moveNumber];
                    currentColumn += vertical[moveNumber];
        
                    //не выходит ли за границы доски
                    if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7)
                    {
                        //уменьшаем доступность всех клеток в одном ходу
                        accessibility[currentRow,currentColumn]--;
        
                        //если доступность больше, то меняем на меньшую
                        if(minAccessibility > accessibility[currentRow,currentColumn] && board[currentRow,currentColumn] == 0)
                        {
                            //нашли минимальную доступность и ее координаты
                            minAccessibility = accessibility[currentRow,currentColumn];
        
                            //если не ходили на нее еще то делаем на нее ход
                            if(board[currentRow,currentColumn] == 0)
                            {
                                //подготовили координаты к ходу на эту клетку
                                Row = currentRow;
                                Column = currentColumn;
                            }
                            //временных переменные для нахождения минимальной доступности у тех, что меньше
                            int RowA = currentRow, ColumnA = currentColumn;
        
                            for(int moveA = 0; moveA <= 7; moveA++)
                            {
                                RowA += horizontal[moveA];
                                ColumnA += vertical[moveA];
        
                                if(RowA >= 0 && RowA <= 7 && ColumnA >= 0 && ColumnA <= 7)
                                {
                                    if(minA >= accessibility[RowA,ColumnA] && board[RowA,ColumnA] == 0)
                                        //наименьшая доступность следующего хода
                                        minA = accessibility[RowA,ColumnA];
                                }
                            }
                        }
        
                        //если доступности равны
                        if(minAccessibility == accessibility[currentRow,currentColumn] && board[currentRow,currentColumn] == 0)
                        {
                            minAccessibility = accessibility[currentRow,currentColumn];
        
                            //временных переменные для нахождения минимальной доступности у тех, что равны
                            int RowB = currentRow, ColumnB = currentColumn;
        
                            for(int moveB = 0; moveB <= 7; moveB++)
                            {
                                RowB += horizontal[moveB];
                                ColumnB += vertical[moveB];
        
                                if(RowB >= 0 && RowB <= 7 && ColumnB >= 0 && ColumnB <= 7)
                                {
                                    if(minB >= accessibility[RowB,ColumnB] && board[RowB,ColumnB] == 0)
                                        //наименьшая доступность следующего хода
                                        minB = accessibility[RowB,ColumnB];
                                }
                            }
        
                            //если не ходили на нее еще то делаем на нее ход
                            if(board[currentRow,currentColumn] == 0 && minB < minA)
                            {
                                //изменяем подготовленные для следующего хода координаты в случае, если доступность следующего хода меньше
                                Row = currentRow;
                                Column = currentColumn;
                            }
                        }
                    }
                }
        
                mainRow = Row;
                mainColumn = Column;
            }
                    
            //вызов функции для печати массива, моделирующего шахматную доску
         printBoard(board);
            Console.ReadKey(true);
        }
        
        //вывод массива, печатающего шахматную доску, на экран
        static void printBoard(int[,] board)
        {
            Console.WriteLine();
            for(int j = 0; j < ver; j++)
            {
                for(int i = 0; i < hor; i++)
                {
                 Console.Write("{0,4:D}", board[i,j]);
                }
                Console.Write("\r\n");
            }
        }
        

    }
}

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.