Перевод Программы С С++ На Java

Тема в разделе "Java", создана пользователем Inna94, 8 май 2012.

Статус темы:
Закрыта.
  1. Inna94

    Inna94 Гость

    Помогите пожалуйста перевести программу с С++ на Java!

    Код (C++):
    #include <conio.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <stdlib.h>

    #define SIZE1 8
    #define SIZE2 5
    #define FILENAME "result.txt"

    FILE *out;

    int index,              // индекс в стеке
    Stack[SIZE1],   // Стек
    Number,      // Количество выводимых строк
    WGN[SIZE1],  // массив закраски
    Record[SIZE1][SIZE2] = {{1, 3, 6, -1, -1}, // Граф, заданный списком
    {0, 3, 4, 6, -1}, // инцендентности
    {5, 7, -1, -1, -1},
    {0, 1, 6, -1, -1},
    {1, 6, 7, -1, -1},
    {2, 7, -1, -1, -1},
    {0, 1, 3, 4, -1},
    {2, 4, 5, -1, -1}},
    Styag[7][2] = {{0, 1},  // Ребра стягивающего дерева
    {1, 3},
    {1, 4},
    {4, 6},
    {4, 7},
    {7, 2},
    {2, 5}};

    //Функция поиска фундаментальнх графов
    void Search(int v)
    {
    int u,              // содержит значение u
    flag;           // Флаг отсеивания лишнего
    Stack[index] = v; // Помещаем в стек значение
    WGN[v] = 1;   // закрашиваем вершину
    index++;                // увеличиваем индекс стека

    // проходим по всем вершинам связанным с вершиной v
    for(int i = 0; i < SIZE2 && Record[v][i] != -1; i++)
    {
    u = Record[v][i]; // получаем вершину u из строки
    if (WGN[u] == -1) // Если вершина не использовалась
    Search(u);   // переходим на строку u в списке инцендентности
    else
    {
    // 1-е: в цикле минимум 3 вершины должно быть
    // 2-е: новый элемент должен быть началом цикла
    // тогда цикл найден
    if ((index - 3 >= 0) && (u == Stack[0]))
    {
    flag = 0;
    for(int c = 1; c < index; c++)
    for(int w = 0; w < 7; w++)
    if((Stack[c-1] == Styag[w][0] && Stack[c] == Styag[w][1]) ||
    (Stack[c] == Styag[w][0] && Stack[c-1] == Styag[w][1]))
    flag++;
    for(int w = 0; w < 7; w++)
    if((Stack[0] == Styag[w][0] && Stack[index-1] == Styag[w][1]) ||
    (Stack[index-1] == Styag[w][0] && Stack[0] == Styag[w][1]))
    flag++;

    if(index - 1 != flag)
    break;

    // выводим содержимое стека
    fprintf(out, "Ребро: ");
    cout<<endl<<"Ребро: ";
    for(int j = 0; j < index; j++)
    {
    cout<<Stack[j]<<" ";
    fprintf(out, "%i ", Stack[j]);
    }
    fprintf(out, "\n");
    Number++;
    if(Number == 22)
    {
    cout<<endl<<endl<<"Нажмите кнопку для продолжения.";
    getch();
    Number = 0;
    clrscr();
    }
    // отсечение не фундаментальных циклов
    break;
    }
    }
    }
    index--;     // очищение стека путем уменьшения индекса
    WGN[v] = -1; // высвобождение вершины от краски
    }

    void main(void)
    {
    int i, j;
    clrscr();
    out = fopen(FILENAME, "wt");

    // инициализация и обнуление данных
    for(i = 0; i < SIZE1; i++)
    {
    index = 0;
    Stack[i] = WGN[i] = -1;
    }
    Number = 0;

    // начало поиска
    for(i = 0; i < SIZE1; i++)
    if (WGN[i] == -1)
    Search(i);
    getch();
    fclose(out);
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Полагаю, код, собственно обрабатывающий массивы, на Java будет выглядеть абсолютно идентично. По сути, нужно лишь:
    1. засунуть обе функции (Search и main), а также определения переменных в некий класс (функции станут static методами, переменные - static полями)
    2. define'ы заменить на константы (static final поля в том же классе)
    3. инклюды - на необходимые импорты (import java.io.*, полагаю, будет достаточно)
    4. cout << endl << "Текст" превращается в System.out.print("\r\nТекст")
    5. писанина в файл (fopen, frprintf и т.п.) преобразуется в соответствии с примером
    6. getch() заменяется на, кажется, System.in.read()
    7. clrscr(), насколько помню, в Java нету
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей