الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

احتاج مساعدتكم في class

مغلق
بدأه Ceren في 1 مايو 2007 · 8 رد · 910 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اتمنى مساعدتي بحل هالبرنامج تكرما منكم

كتابة برنامج بي classاسمه (convert)يحول الانظمه التاليه :

  1. من نظام عشري الى نظام ثنائي
  2. من نظام ثنائي الى نظام سداسي عشر
  3. من نظام سداسي عشر الى نظام عشري
  4. من نظام ثماني الى نظام عشري
  5. من نظام ثماني الى نظام سداسي عشر

واكون شاكره لكم

#2
Ceren كتب:
اتمنى مساعدتي بحل هالبرنامج تكرما منكم

كتابة برنامج بي classاسمه (convert)يحول الانظمه التاليه :

  1. من نظام عشري الى نظام ثنائي
  2. من نظام ثنائي الى نظام سداسي عشر
  3. من نظام سداسي عشر الى نظام عشري
  4. من نظام ثماني الى نظام عشري
  5. من نظام ثماني الى نظام سداسي عشر

واكون شاكره لكم

انت بحاجة إلى أستاذ في الرياضيات

و ليس لمساعدة برمجية

#3

الأخ الفاضل ...

Convert.zip

أرجوا ان يفيدك هذا المثال فى ما تريد إنجازه، بأستخدام (MS-VC 6.0)

تعريف الـ Class بالشكل التالى:

class CNumbers  
{
public:
	CNumbers() {};
	virtual ~CNumbers() {};

	char*	Convert(char* pszFrom, char* pszTo, int inSys, int outSys);

private:
	int		GetBase(int num);
};

وكود الـ Class بالشكل التالى:

char* CNumbers::Convert(char* pszFrom, char* pszTo, int inSys, int outSys)
{
	char	*endPtr;

	return ltoa(strtoul(pszFrom, &endPtr, GetBase(inSys)), 
		pszTo, GetBase(outSys));
}

int CNumbers::GetBase(int num)
{
	int		iBase;

	// 1: Binary
	// 2: Octal
	// 3: Decimal
	// 4: Hexadecimal

	switch(num)
	{
	case 1:
		iBase	= 2;
		break;

	case 2:
		iBase	= 8;
		break;

	case 3:
		iBase	= 10;
		break;

	case 4:
		iBase	= 16;
		break;

	default:
		iBase	= 0;
	}

	return iBase;
}

ويمكن استخدامها بالشكل التلى:

int GetNumSystem()
{
	char	ch;

	printf("\t[1] Binary (2)\n");
	printf("\t[2] Octal (8)\n");
	printf("\t[3] Decimal (10)\n");
	printf("\t[4] Hexadecimal (16)\n");

	do
	{
		printf("\n	Choose number(1-4), '0' for EXIT: ");
		ch = getche();
	}
	while (ch < '0' || ch > '4');

	return ch - '0';
}

int main(int argc, char* argv[])
{
	CNumbers	NumSys;
	int		inSys, outSys;
	char		inBuff[81], outBuff[81];

	printf("\nNumber Converter version 1.00\n");

	printf("\nConvert from: \n");
	inSys	= GetNumSystem();
	if (!inSys)
		return -1;

	printf("\n\nConvert to : \n");
	outSys	= GetNumSystem();
	if (!outSys)
		return -1;

	printf("\n\nEnter number:  ");
	gets(inBuff);

	NumSys.Convert(inBuff, outBuff, inSys, outSys);
	printf("The Result is: %s", outBuff);

	printf("\n\nPress any key to exit...");
	getch();

	return 0;
}

يمكن للشرح كتابة الدالة Convert بالشكل التالى (نفس العمل):

char* CNumbers::Convert(char* pszFrom, char* pszTo, int inSys, int outSys)
{
	char	*endPtr;
	int	iBase, oBase;
	long	rNumber;

	iBase	= GetBase(inSys);
	oBase	= GetBase(outSys);

	rNumber	= strtoul(pszFrom, &endPtr, iBase);
	return ltoa(rNumber, pszTo, oBase);
}

حيث:

  1. GetBase: ترجع نظام العد، فى حالة الثنائى ترجع 2، والثمانى ترجع 8 ... الخ
  2. strtoul: تقوم بتحويل الرقم فى المتغير من النوع نص، وهو فى هذا المثال pszFrom، إلى رقم عشرى، بناء على النظام المحدد فى iBase، وترجعه فى المتغير rNumber.
  3. ltoa: تقوم بتحويل الرقم rNumber إلى نص فى pszTo بناءاً على النظام oBase

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#4

السلام عليكم

كود جميل ولكن بالإمكان تحويل الأرقام بكيفية أبسط كثير من ذلك

وهذا الكود

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

//--------------
void Convert(int bin, char *str)
{
	unsigned int mask;	  // used to check each individual bit, unsigned to alleviate sign 
							//	extension problems
	mask = 0x80000000;	  // Set only the high-end bit
	while (mask)			// Loop until MASK is empty
	{
		if (bin & mask)	 // test the masked bit
			  *str = '1';   // if true, value is 1
		  else 
			  *str = '0';   // if false, value is 0
		str++;			  // next character
		mask >>= 1;		 // shift the mask 1 bit
	}
	*str = 0;			   // add the trailing null 
}

//---------------
int _tmain(int argc, _TCHAR* argv[])
{	int  binary;
	char string[33];	// assuming 32bit integers
	printf("Enter a number: ");
	scanf("%d", &binary);
	Convert(binary, string);   
   	printf("Binary :%s\n decimal :%d\n  Hexadecimal:%X \n", string, binary, binary);
	getch();
	return 0;
}

post-91400-1178113688_thumb.jpg

#5

الأخ الفاضل ... Ben_Laiid

حقيقة الكود ليس معقد، فهو يحول من أى نظام (2 8 10 16) إلى أى نظام (2 8 10 16) بأستخدام سطر واحد

ltoa(strtoul(pszFrom, &endPtr, GetBase(inSys)), pszTo, GetBase(outSys))

أى يمكن أن يستقبل نظام ثنائى أو ثمانى أو عشرى أو سادس عشرى ، ثم يحول لأى منهم (ولا يقتصر فقط على الاستقبال بالنظام العشرى) وباقى الكود خاص بواجهة المستخدم يعنى Decoration وهو ببساطه مزيج من (gets و printf)، بالإضافة أنك من الممكن ان تستعمله فى التحويل لنظم عد خاصة اذا احتجت لذلك ، ولنفرض نظام عددى (20) دون الحاجه لكتابة حرف زيادة داخل الـ Class

فما التعقيد فى ذلك ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

هل قراءة الكود جيداً وجربت المثال :) ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#6

mouaz شكرا لتعقيبك

اخي Eng .Usama El-mokademالله يجزاك الجنه على هذا الشرح الاكثر من رائع

صرااحة فهمت معك اكثر من دكتورة الجامعه

Ben_laiid جزيت خيرا

#7

السلام عليكم

أخي Eng. Usama El-Mokadem

لقد إعتبرت الكود الذي قدمته صعبا ليس بالنسبة لي بل للسائل

لأنه لا يزال مبتدأ ويحتاج أكثر إلى ناحية Algorithmic وكيفية كتابة Class لمعرفة كيفية التحويل بين مختلف النظم قبل إستعمال الدوال الجاهزة مثل strtoul و GetBaseو Itoa ...

#8

ولا يهمك :)

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 3 مايو 2007 في 13:06

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#9

اخي Ben_laiid افادني هذا الكود

لكن اريد هذا البرنامج بمكتبة <iosteram.h>

فقط وشكرا

هذا الموضوع مغلق.

مواضيع مشابهة