2014-12-07 3 views
-7
#include <stdio.h> 
#include <stdlib.h> 

#define ST_PARAMETROV  4   //stevilo vhodnih parametrov 
#define VEL_SPOMINA   10000  //velikost spomina +-10000 
#define VEL_PROGRAMA   10000  //največja velikost programa 
#define DOVOLJENIH_UKAZOV 10000  //največje dovoljeno število ukazov 

int main() { 

    // \0 označuje konec programa 
    char program[VEL_PROGRAMA] = ",.>,<<,->--->+++.<.<.\0"; 
    int programPointer = 0; 

    char parametri[ST_PARAMETROV] = {20,30,40,50}; 
    int parametriPointer = 0; 

    unsigned char spomin[VEL_SPOMINA*2] = {0}; 
    int spominPointer = VEL_SPOMINA; 

    int stOklepajev; 
    int stOpravljenihUkazov = 0; 


    while(program[programPointer] != 0 && DOVOLJENIH_UKAZOV > stOpravljenihUkazov){ 
     switch(program[programPointer]){ 
      case '>': 
       spominPointer ++; 
      break; 

      case '<': 
       spominPointer --; 
      break; 

      case '+': 
       spomin[spominPointer] ++; 
      break; 

      case '-': 
       spomin[spominPointer] --; 
      break; 

      case '.': 
       printf("%i\n",spomin[spominPointer]); 
      break; 

      case ',': 
       //če je zmanka parametrov zapiše 0 
       if(parametriPointer > ST_PARAMETROV-1)spomin[spominPointer] = 0; 
       else spomin[spominPointer] = parametri[parametriPointer++]; 
      break; 

      case '[': 
       if(spomin[spominPointer] == 0){ 
        stOklepajev = 1; 
        while(stOklepajev != 0){ 
         programPointer ++; 
         if(program[programPointer] == ']'){ 
          stOklepajev--; 
         } 
         if(program[programPointer] == '['){ 
          stOklepajev++; 
         } 
        } 
       } 
       break; 

      case ']': 
      if(spomin[spominPointer] != 0){ 
       stOklepajev = 1; 
       while(stOklepajev != 0){ 
        programPointer--; 
        if(program[programPointer] == '['){ 
         stOklepajev--; 
        } 
        if(program[programPointer] == ']'){ 
         stOklepajev++; 
        } 
       } 
      } 
      break; 


     } 
     programPointer ++; 
     stOpravljenihUkazov++; 
    } 
    return 0; 
} 

Здравствуйте, могу ли кто-нибудь помочь мне, пожалуйста, у меня возникли трудности с преобразованием этого кода с языка C на язык Java, может ли кто-нибудь, кто может это сделать без каких-либо проблем и с легкостью. Я уже пробовал перевести его на Java, но я терпеть неудачу каждый раз со многими ошибками. Я был бы очень признателен, если бы кто-то мог просто преобразовать код в Java, и тогда я исправлю ошибки самостоятельно.Преобразование кода из C в Java

Сам код является интерпретатором Brainfuck. Спасибо

+3

Вы можете оставить попытки (Java) здесь, поэтому мы можем попробовать и исправить ее. Насколько я знаю, было бы легко преобразовать. –

+3

Правильно, не слишком сложно делать, но мы не будем делать домашнее задание, если вы, по крайней мере, не попробуете. И есть причина, почему английские имена переменных и т. Д. Имеют смысл. – deviantfan

ответ

0

Ваш #defines, вероятно, должен быть const char. Ваши case переключатели должны быть преобразованы в

if 
else if 
else if 
... 
else 

После того, что она должна быть достаточно простой.

0

В потребных преобразования ограничены классов и объектов определений/инициализации и return:

public class Brainfuck 
{ 
    final static int 
     ST_PARAMETROV  =  4, //stevilo vhodnih parametrov 
     VEL_SPOMINA  = 10000, //velikost spomina +-10000 
     VEL_PROGRAMA  = 10000, //najve?ja velikost programa 
     DOVOLJENIH_UKAZOV = 10000; //najve?je dovoljeno ?tevilo ukazov 

    public static void main(String[] argv) 
    { 
     // \0 ozna?uje konec programa 
     char program[] = new char[VEL_PROGRAMA]; 
     char initialProgram[] = ",.>,<<,->--->+++.<.<.\0".toCharArray(); 
     System.arraycopy(initialProgram, 0, program, 0, initialProgram.length); 
     int programPointer = 0; 

     char parametri[] = {20, 30, 40, 50}; 
     int parametriPointer = 0; 

     char spomin[] = new char[VEL_SPOMINA*2]; 
     int spominPointer = VEL_SPOMINA; 

     int stOklepajev; 
     int stOpravljenihUkazov = 0; 

     while (program[programPointer] != 0 
      && DOVOLJENIH_UKAZOV > stOpravljenihUkazov) 
     { 
      switch (program[programPointer]) 
      { 

       case '>': 
        spominPointer++; 
       break; 

       case '<': 
        spominPointer--; 
       break; 

       case '+': 
        spomin[spominPointer]++; 
       break; 

       case '-': 
        spomin[spominPointer]--; 
       break; 

       case '.': 
        System.out.println((int)spomin[spominPointer]); 
       break; 

       case ',': 
        //?e je zmanka parametrov zapi?e 0 
        if (parametriPointer > ST_PARAMETROV-1) 
         spomin[spominPointer] = 0; 
        else spomin[spominPointer] = parametri[parametriPointer++]; 
       break; 

       case '[': 
        if (spomin[spominPointer] == 0) 
        { 
         stOklepajev = 1; 
         while (stOklepajev != 0) 
         { 
          programPointer++; 
          if(program[programPointer] == ']') stOklepajev--; 
          if(program[programPointer] == '[') stOklepajev++; 
         } 
        } 
       break; 

       case ']': 
        if(spomin[spominPointer] != 0) 
        { 
         stOklepajev = 1; 
         while(stOklepajev != 0) 
         { 
          programPointer--; 
          if(program[programPointer] == '[') stOklepajev--; 
          if(program[programPointer] == ']') stOklepajev++; 
         } 
        } 
       break; 

      } 
      programPointer++; 
      stOpravljenihUkazov++; 
     } 
     System.exit(0); 
    } 
} 
Смежные вопросы