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

عزل قيم الاحاد و العشرات

بدأه ABCDEFG في 5 يوليو 2009 · 10 رد · 810 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

لدينا عدد مؤلف من n مرتبة بالشكل abcd….

مثلا العدد 145 مؤلف من 3 مراتب

كيف يمكننا عزل رقم الاحاد و رقم العشرات و ............

مثلا العدد 1569

كيف يمكننا الحصول على الرقم 1 و 5 و 6 و 9 ووضع كل منها في متغير مستقل ؟؟؟

#2

الكود به التعاليق الكافية للشرح :

#include <stdlib.h>

void main(void)
{
	int number = 1569;
	char *result = new char[5];
	// تحويل العدد إلى أرقام اسكي
	itoa(number, result, 10);	

	for(int i = 0; i < 4; i++) {
		result -= '0'; // كل تشار يحتوي الآن على العدد وليس الرقم اسكي
	}
	// كل رقم في متغير
	int n1 = result[0]; // 1
	int n2 = result[1]; // 5
	int n3 = result[2]; // 6
	int n4 = result[3]; // 9
}
#3

شكراً لك اخي الكريم

طريقة فعالة و لكنها محددة

كيف اذا عندنا رقم عدد مراتبه n و نريد أخذ القيمة n-i

حيث i عدد طبيعي

#4

طريقة تمديد العملية سهل للغاية و لكنها تبقى محدودة بالنسبة لحدود int

#include <stdlib.h>
#include <string.h>

void main(void)
{
	int number = 2147483647; // MAX_INT
	char *result = new char[12];
	// تحويل العدد إلى أرقام اسكي
	itoa(number, result, 10);	
	// مرتبة الرقم المراد في ن
	int n = 5;
	int n1 = result[(strlen(result) - 1) - n] - '0'; // 2
}

تم تعديل هذه المشاركة بواسطة محمد رضى في 6 يوليو 2009 في 00:30

#5

أتمنى أن لا يكون واجباً جامعياً :)

#include <iostream>
#include <cmath>
#include <cstdlib>

unsigned int numberOfDigits(int number)
{
	return number == 0 ? 1 : static_cast<int>(floor(log10(static_cast<double>(abs(number))))) + 1;
}

int digit(int number, unsigned int place)
{
	int d;

	for(unsigned int i = 0; i < place; i++)
	{
		number /= 10;
	}

	d = number % 10;

	return d;
}

int main()
{

	// prints every digit on seperate line!
	int number = 10000566;

	for(unsigned int i = 0, n = numberOfDigits(number); i < n; i++)
	{
		std::cout << digit(number, i) << std::endl;
	}	

	return 0;
}

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 6 يوليو 2009 في 03:25

#6

السلام عليكم

طريقه أخرى

#include <iostream>
using namespace std;
int* make(int num,int& numOfDigit)
{
	int * arr;
	int temp=num;
	int n=0;
	while (temp!=0)
	{
		temp/=10;
		n++;
	}
	numOfDigit=n;
	arr=new int[n];
	for (int i=0;i<n;i++)
	{
		arr=num%10;
		num/=10;
	}
	return arr;
}
int main()
{
	int number;
	int n_digits;// number of digits 
	int* digits;
	cout<<" Enter number : "; cin>>number;
	digits=make(number,n_digits);
	cout<<" number of digits is : "<<n_digits<<endl;
	for (int i=0;i<n_digits;i++)
	{
		cout<<digits<<endl;
	}
	return 0;
}

تحياتى

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#7

وداله أخرى لتعديل الخانات للعدد

تعتمد على الداله make

#include <iostream>
#include <math.h>
using namespace std;
int* make(int num,int& numOfDigit)
{
	int * arr;
	int temp=num;
	int n=0;
	while (temp!=0)
	{
		temp/=10;
		n++;
	}
	numOfDigit=n;
	arr=new int[n];
	for (int i=0;i<n;i++)
	{
		arr=num%10;
		num/=10;
	}
	return arr;
}
int replace(int num,int pos,int val)
{
	if(val>9 || val<0) 
	{
		cout<<" value must be from 0 to 9"<<endl;
		return -1;
	}
	int n;
	int c=0;
	int* arr=make(num,n);
	arr[pos]=val;
	for (int i=0;i<n;i++)
	{
		c+=arr*pow(10.0,i);
	}
	return c;
}
int main()
{
	int number;
	int pos,val;
	cout<<" Enter number again : ";cin>>number;
	cout<<" Enter position  : ";cin>>pos;
	cout<<" enter new value : ";cin>>val;
	cout<<" new number is "<<replace(number,pos,val)<<endl;
	return 0;
}

وشكرا لصاحب السؤال

:rolleyes:

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#8

شكرا أخي الكريم

هذا هو المطلوب تماماً !!!

 

أتمنى أن لا يكون واجباً جامعياً  :)

لا أبداً اخي خالد انا طالب 18 سنة

بس هالفكرة دائما تلزم في حل المسائل

مثلا شوف هالمسألة هون ::

http://www.aoi.org.sy/soi/download/tartous_2007_div_3.pdf

يلزم عزل القيم و وضعهم بشكل مستقل في متغيرات

تحياااتي

أخي أمين : ألف شكر بس ممكن شرح للدالة make

تم تعديل هذه المشاركة بواسطة ABCDEFG في 7 يوليو 2009 في 00:27

#9

السلام عليكم

الداله make فكرتها انها تعود بمصفوفة تحتوى على خانات العدد وكذلك تعود بعدد الخانات

واللوب while الأول فيها يقوم بحساب عدد عدد الخانات

ومن ثم يتم انشاء مصفوفه ديناميكيه من خلال هذا العدد

ولوب for نقوم فيه بملأ تلك المصفوفه عن طريق معامل باقى القسمه ومعامل القسمه الصحيحه

ثم تعود الداله بذلك المؤشر الذى يشير الى اول عنصر فى المصفوفه الناتجه

لاحظ كيف تم استخدامها فى الداله main

والداله replace تقوم بإنشاء مصفوفة الخانات ثم تعديل الخانه المطلوبه ثم تحويل تلك المصفوفه الى عدد صحيح من جديد

تحياتى

تم تعديل هذه المشاركة بواسطة amin_mu123 في 7 يوليو 2009 في 11:20

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#10

شكراً أخي الكريم

بس هذه الدالة جاهزة و لا انت قمت بتصميمها متل مو مبين علي

#11

العفو أخى

الداله make و replace ليست دوال جاهزه

فى أمان الله

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

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