Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Гость2
Сообщений: n/a
#1

Помогите перевести с PHP на С++ - C++

05.10.2008, 16:06. Просмотров 1059. Ответов 3
Метки нет (Все метки)

Есть задание - в большой проге понадобилось переводить из одной системы счисления (СС) в другую, нашел хороший класс, но он на PHP, которого я к сожалению не знаю, если есть добрые переводчики )) помогите пжл, вот код на PHP:
Код
class Renumeric {

   //Полный вариант набора цифр
   var $NumSet ='';
   
   //Входящий и исходящий набор цифр
   var $InputSet      ='';
   var $OutputSet      ='';

   //Буфер временного хранения. Содержит массив целых чисел.
   var $Buffer         =array();

   //Максимальное число в элементе буфера (основание вывода)
   var $MaxBufElement   =10;

   //Код ошибки
   /*
    *-------------------------------
    * 0 - нет ошибки
    * 1 - символа нет в наборе
    * 2 - символов в наборе больше 1
    *-------------------------------
    */
   var $Error         =0;

   /*** Конструктор ***/
   function Renumeric(){
      $this->NumSet=
         '0123456789'.   //10
         'abcdef'.   //16
         'ghijklmnopqrstuvwxyz'.   //36
         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.   //62
         'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; //128
      $this->InputSet      =substr($this->NumSet, 0, 16);
      $this->OutputSet   =substr($this->NumSet, 0, 10);
      $this->MaxBufElement=10;
   }
   
   /*** Устанавливает входящий и исходящих набор 
   и оставляет его, пока существует класс ***/
   function Preset($InSet, $OutSet){
      $this->InputSet=$InSet;
      $this->OutputSet=$OutSet;
      $this->MaxBufElement=strlen($OutSet);
   }

   function ADD($n){
      $pos=0;
      $buf=$n;
      do{
         if(isset($this->Buffer[$pos])){
            $buf+=$this->Buffer[$pos];
         }
         $this->Buffer[$pos]=$buf % $this->MaxBufElement;
         $buf=intval($buf / $this->MaxBufElement);
         $pos++;
      }while ($buf>0);
   }

   function MUL($n){
      $tmp_buf=array();
      $res_len=count($this->Buffer);
      if ($res_len==0){
         return;
      }
      $cur_pos=0;
      $buf=0;
      do{
         $a=0;
         if ($cur_pos<$res_len){
            $a=$this->Buffer[$cur_pos]*$n;
         }
         $a+=$buf;
         $tmp_buf[$cur_pos]=$a % $this->MaxBufElement;
         $buf=intval($a / $this->MaxBufElement);
         $cur_pos++;
      } while(($res_len>$cur_pos)||($buf!=0));
      $this->Buffer=$tmp_buf;
   }

   /*** Переводит из одной системы в другую ***/
   function Go($input, $inset=0, $outset=0){
      $result=true;
      /*** Временное сохранение глобальных наборов ***/
      if ($inset!=0 && $outset!=0){
         $tmp_in=$this->InputSet;
         $tmp_out=$this->OutputSet;
         $this->InputSet=substr($this->NumSet, 0, $inset);
         $this->OutputSet=substr($this->NumSet, 0, $outset);
         $this->MaxBufElement=$outset;
      }
      /*** Чтение входящего числа ***/
      $this->Buffer=array();
      $base_in=strlen($this->InputSet);
      $count_in=strlen($input);
      for ($i=0; $i<$count_in; $i++){
         $a=$input[$i];
         $present=substr_count($this->InputSet, $a);
         if($present==0){
            $result=false;
            $this->Error=1;
            break;
         }
         if($present>1){
            $result=false;
            $this->Error=2;
            break;
         }
         if ($i!=0){
            $this->MUL($base_in);
         }
         $this->ADD(strpos($this->InputSet, $a));
      }
      if ($result){
         $result='';
         $count_out=count($this->Buffer);
         for ($i=0; $i<$count_out; $i++){
            $result=$this->OutputSet[$this->Buffer[$i]].$result;
         }
      }
      /*** Восстановление прежних наборов ***/
      if (isset($tmp_in)){
         $this->InputSet=$tmp_in;
         $this->OutputSet=$tmp_out;
         $this->MaxBufElement=strlen($tmp_out);
      }
      return $result;
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2008, 16:06     Помогите перевести с PHP на С++
Посмотрите здесь:

Помогите перевести и понять условие задачи, пожалуйста C++
C++ Перевести с PHP
C++ помогите перевести код с С# в консольное С++
C++ помогите задачу перевести с языка с++ на с
C++ Помогите перевести код с Пасякаля на С++
Помогите пожалуйста!!! перевести на Си C++
Помогите перевести код для Visual Studio ! C++
C++ Перевести код на php
Помогите перевести в C++ C++
C++ помогите перевести программу с паскаля на С++
C++ Помогите перевести программу с Паскаля на С++
C++ Помогите перевести код с PASCAL на C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
07.10.2008, 12:03     Помогите перевести с PHP на С++ #2
проще найти в инете готовое решение на с++, чем переводить с php
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
07.10.2008, 21:33     Помогите перевести с PHP на С++ #3
проще заюзать почти что любой открытый калькулятор если так уж нужен код
Гость2
Сообщений: n/a
07.10.2008, 22:10     Помогите перевести с PHP на С++ #4
Совсем не проще, мне главное не получить "лишь бы работало", алгоритм хороший, поддерживает большие числа - 1, переводить из любой СС в любую СС (ограничения только на алфавит) - 2, работает довольно быстро (во всяком случае на PHP), поэтому и хочется его реализовать. Вот что у меня получилось с "переводом", только где то косяк ( может кто подскажет по коду что к чему?
Код
#include <string>
#include <conio.h>
#include <stdio.h>
#include <vector>

using namespace std;

static const char NumSet[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

class Rebase
	{
	private:
		vector<int> Buffer;
		int MaxBuf;
		int Error;
	public:
		Rebase()
			{
			MaxBuf = 0;
			Error = 0;
			}
		~Rebase()
			{
			}
		void ADD(int n)
			{
			int pos = 0;
			int buf = n;
			do
				{
				if (!Buffer.empty() && Buffer[pos])		buf += Buffer[pos];
				//Buffer[pos] = buf % MaxBuf;
				Buffer.push_back(buf % MaxBuf);
				buf /= MaxBuf;
				pos++;
				} while (buf>0);
			}
		void MUL(int n)
			{
			int BufSize = Buffer.size();
			if (!BufSize) return;
			vector<int> tmpBuffer; 
			int cur_pos=0;
			int buf=0;
			do{
				int a=0;
				if (cur_pos<BufSize)
					{
					a=Buffer[cur_pos]*n;
					}
				a+=buf;
				tmpBuffer.push_back(a % MaxBuf);
				buf=a / MaxBuf;
				cur_pos++;
				} while((BufSize>cur_pos) || (buf!=0));
			Buffer.clear();
			for (int k=0; k<tmpBuffer.size(); k++)
				Buffer.push_back(tmpBuffer[k]);
			}
		string * Do(char * input, int inset=0, int outset=0)
			{
			string InputSet="";
			string OutputSet="";
			for (int in=0; in<inset; in++) InputSet.push_back(NumSet[in]);
			for (int out=0; out<outset; out++) OutputSet.push_back(NumSet[out]);
			MaxBuf = outset;
			int base_in = InputSet.length();
			int count_in = strlen(input);
			for (int inc=0; inc < count_in; inc++)
				{
				char a = input[inc];
				if (inc) MUL(base_in);
				ADD((int)(strchr(InputSet.c_str(), a) - InputSet.c_str() + 1));				
				}
			string * res = new string();
			res->clear();
			int BufSize = Buffer.size();
			for (int j=0; j < BufSize; j++) 
				{
				res->push_back(OutputSet[Buffer[j]]);
				printf("%d ", Buffer[j]);
				}
			return res;
			}
	};
int main()
	{
	Rebase r = Rebase();

	//printf("%s\n", r.Do("0", 10, 3)->c_str());
	//printf("%s\n", r.Do("1", 10, 3)->c_str());
	//printf("%s\n", r.Do("2", 10, 3)->c_str());

	printf("\n%s", r.Do("35", 10, 36)->c_str());

	getch();
	return 0;
	}
Yandex
Объявления
07.10.2008, 22:10     Помогите перевести с PHP на С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru