@Leo_SAN

При переводе из одной системы счисления выскакивает true, как исправить c++ crl?

#pragma once
#include <locale.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <iostream>

namespace WinForm {
	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
	using namespace System::Runtime::InteropServices;
	/// <summary>
	/// Сводка для MyForm
	/// </summary>
	public ref class MyForm : public System::Windows::Forms::Form
	{
	public:
		MyForm(void)
		{
			InitializeComponent();
			//
			//TODO: добавьте код конструктора
			//
		}
		int nach;
		int konech;
		//. char chislo[255];
		char* chislo;
	private: System::Windows::Forms::Label^ label1;
	private: System::Windows::Forms::Label^ label2;
	private: System::Windows::Forms::Label^ label3;
	private: System::Windows::Forms::Label^ label4;
	public:
	private: System::Windows::Forms::Button^ button1;

		   int znach(char chislo)
		   {
			   if (chislo <= '9' && chislo >= '0')
				   return chislo - '0';
			   else if (chislo <= 'Z' && chislo >= 'A')
				   return chislo - 'A' + 10;
			   else if (chislo <= 'z' && chislo >= 'a')
				   return chislo - 'a' + 10;
			   else return -1;
		   }
		   int vdec(char* chislo, int nach)                         //перевод в десятичную сс
		   {
			   int razlog = 0;
			   int stepen = 1;
			   for (int i = strlen(chislo) - 1; i >= 0; i--)
			   {
				   razlog += znach(chislo[i]) * stepen;
				   stepen *= nach;
			   }

			   return razlog;
		   }
		   void perevod(char* chislo, int nach, int konech)         //перевод из десятичной сс
		   {
			   int razlog = vdec(chislo, nach);

			   int q = 0;
			   int i = 0;

			   do
			   {

				   q = razlog % konech;        //остаток от деления

				   razlog = (razlog - q) / konech;       //число которое делим дальше

				   if (q > 9)                    //переводим остаток от деления в число
					   chislo[i] = q + 'A' - 10;     //если остаток больше 9,то остаток-буква
				   else
					   chislo[i] = q + '0';        //если остаток меньше 9,то остаток число
				   i++;
			   } while (razlog != 0);
			   chislo[i] = '\0';

			   int a = 1;
			   a = strlen(chislo) - 1;

			   for (i = 0; i <= int((a) / 2); i++)
			   {
				   char s = chislo[i];
				   chislo[i] = chislo[a - i];
				   chislo[a - i] = s;

			   }

		   }
		   int proverka(char* chislo, int nach)
		   {
			   int a = strlen(chislo);
			   for (int i = 0; i < a; i++)

				   if ((znach(chislo[i]) >= nach) || (znach(chislo[i]) < 0))     //проверка, число было меньше сс начальной и больше нуля
					   return 1;
			   return 0;

		   }
	protected:
		/// <summary>
		/// Освободить все используемые ресурсы.
		/// </summary>
		~MyForm()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::TextBox^ textBox1;
	protected:
	private: System::Windows::Forms::TextBox^ textBox2;
	private: System::Windows::Forms::TextBox^ textBox3;
	private: System::Windows::Forms::TextBox^ textBox4;

	private:
		/// <summary>
		/// Требуется переменная конструктора.
		/// </summary>
		System::ComponentModel::Container^ components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Обязательный метод для поддержки конструктора - не изменяйте
		/// содержимое данного метода при помощи редактора кода.
		/// </summary>
		void InitializeComponent(void)
		{
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
			this->textBox3 = (gcnew System::Windows::Forms::TextBox());
			this->textBox4 = (gcnew System::Windows::Forms::TextBox());
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->label2 = (gcnew System::Windows::Forms::Label());
			this->label3 = (gcnew System::Windows::Forms::Label());
			this->label4 = (gcnew System::Windows::Forms::Label());
			this->SuspendLayout();
			// 
			// textBox1
			// 
			this->textBox1->Location = System::Drawing::Point(20, 69);
			this->textBox1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->textBox1->Name = L"textBox1";
			this->textBox1->Size = System::Drawing::Size(147, 22);
			this->textBox1->TabIndex = 0;
			// 
			// textBox2
			// 
			this->textBox2->Location = System::Drawing::Point(197, 69);
			this->textBox2->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->textBox2->Name = L"textBox2";
			this->textBox2->Size = System::Drawing::Size(68, 22);
			this->textBox2->TabIndex = 1;
			// 
			// textBox3
			// 
			this->textBox3->Location = System::Drawing::Point(293, 69);
			this->textBox3->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->textBox3->Name = L"textBox3";
			this->textBox3->Size = System::Drawing::Size(63, 22);
			this->textBox3->TabIndex = 2;
			// 
			// textBox4
			// 
			this->textBox4->Location = System::Drawing::Point(23, 127);
			this->textBox4->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->textBox4->Name = L"textBox4";
			this->textBox4->Size = System::Drawing::Size(144, 22);
			this->textBox4->TabIndex = 3;
			// 
			// label1
			// 
			this->label1->AutoSize = true;
			this->label1->Location = System::Drawing::Point(19, 32);
			this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
			this->label1->Name = L"label1";
			this->label1->Size = System::Drawing::Size(106, 17);
			this->label1->TabIndex = 4;
			this->label1->Text = L"Введите число";
			this->label1->Click += gcnew System::EventHandler(this, &MyForm::label1_Click);
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(51, 234);
			this->button1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(100, 28);
			this->button1->TabIndex = 5;
			this->button1->Text = L"Перевести";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
			// 
			// label2
			// 
			this->label2->AutoSize = true;
			this->label2->Location = System::Drawing::Point(164, 32);
			this->label2->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
			this->label2->Name = L"label2";
			this->label2->Size = System::Drawing::Size(99, 17);
			this->label2->TabIndex = 6;
			this->label2->Text = L"Начальная сс";
			// 
			// label3
			// 
			this->label3->AutoSize = true;
			this->label3->Location = System::Drawing::Point(273, 32);
			this->label3->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
			this->label3->Name = L"label3";
			this->label3->Size = System::Drawing::Size(91, 17);
			this->label3->TabIndex = 7;
			this->label3->Text = L"Конечная сс";
			this->label3->Click += gcnew System::EventHandler(this, &MyForm::label3_Click);
			// 
			// label4
			// 
			this->label4->AutoSize = true;
			this->label4->Location = System::Drawing::Point(24, 103);
			this->label4->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
			this->label4->Name = L"label4";
			this->label4->Size = System::Drawing::Size(48, 17);
			this->label4->TabIndex = 8;
			this->label4->Text = L"Ответ";
			// 
			// MyForm
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(377, 279);
			this->Controls->Add(this->label4);
			this->Controls->Add(this->label3);
			this->Controls->Add(this->label2);
			this->Controls->Add(this->button1);
			this->Controls->Add(this->label1);
			this->Controls->Add(this->textBox4);
			this->Controls->Add(this->textBox3);
			this->Controls->Add(this->textBox2);
			this->Controls->Add(this->textBox1);
			this->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
			this->Name = L"MyForm";
			this->Text = L"MyForm";
			this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
	}
		   char* and_SysStringToChar(System::String^ chislo)
		   {
			   return (char*)(void*)Marshal::StringToHGlobalAnsi(chislo);
		   }
	private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
		nach = Convert::ToInt16(textBox2->Text);
		chislo = and_SysStringToChar(textBox1->Text);
		proverka(chislo, nach);
		konech = Convert::ToInt16(textBox3->Text);
		perevod(chislo, nach, konech);
		chislo = and_SysStringToChar(textBox4->Text); //вызов
		textBox4->Text =
			System::Convert::ToString(chislo);
	}
	private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) {
	}
	private: System::Void label3_Click(System::Object^ sender, System::EventArgs^ e) {
	}
	};
}


5f70e1d09ae7e096417655.png
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
@none7
textBox4->Text = System::Convert::ToString(chislo);// тут какой из этих методов должен по Вашему вызываться? Странно, что оно вообще компилируется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы