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

لغز جميل جدا يحتاج إلى بعض التحايل(دالة مطابقة لعمل printf)

بدأه باسم الموجي في 25 أبريل 2008 · 9 رد · 1,217 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد ببساطة عمل دالة ولتكن myprint تقوم بنفس وظائف دالة printf :)

طبعا دون أن تقوم بتغيير السورس كود للـ header file الخاص بالدالة printf وهو stdio.h ;)

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#2

اخى باسم كنت اود ان ابحث فى هذا السؤال عن كيفية عمل الدالة printf & cout و ظننت انها تتعامل مباشرة مع الشاشة و تقوم بطبع الاحداثيات على الشاشة (طبعا توقع متخلف منى عن كيفية عمل هذه الدالة)

#3

السلام عليكم:

من الممكن كتابة

#define myprint(a) printf(a) ;

أو

int  myprint(char* a)
{
 return printf( a);
}
tvquran_6.gif

#4

مرحبا اخي باسم الموجي ,, متألق كعادتك

بالنسبة لمحاولتي هي كالتالي :

نعرف ماكرو

 #define myprint(a) printf a

وداخل الـ Main

main()
{
	int x=5,y=10;
	myprint(("%d + %d = %d ", x,y,x+y));
	getch();
	return 0;
}

ان شاء الله يكون صحيح :wub:

شكرا لك

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#5

بالنسبة لحلول الأخ فهد فقد اعتمدت على أن دالة printf تأخذ parameter واحد فقط وهذا غير صحيح

أما بالنسبة لحل الأخ time1 فالحل سيعمل بشكل صحيح لكنك لم تقم بعمل دالة أصلا وأنا طلبت عمل دالة

فكروا قليلا هناك وسيلة أخرى :)

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#6

مرحبا اخي

اسف لم انتبه انك تريدها على شكل دالة

عموما اذا كنت تقصد عمل دالة متكاملة مثل دالة printf فهذا سيحتاج بعض الجهد

لكن اذا كنت تريد ان تتحايل على هذه الدالة لتنتج منها دالة اخرى , فيجب ان توضح نوعية التحايل المراد :D

مثال : هذه دالة صممتها على السريع , تحاكي عمل دالة printf تحتاج إلى بعض التنظيم والتطوير

#include<conio.h>
#include<stdio.h>
#include<string>
#include <cstdarg>
#include <iostream.h>



void myprint(const char * a,...)
{
	int size=strlen(a);
	static char o = '%';
	va_list arguments;
	va_start(arguments, a);
		for(int x = 0; x < size; x++)
{
			if(x  < size && a[x ] != o)
			cout<<a[x];
	if(a[x] == o)
	if(x + 1 < size && a[x + 1] != o)
			{

				if(a[x + 1] == 's')
				{
					char* temp = va_arg(arguments, char*);

						 cout<<temp;
						x++;
				}
				else if(a[x + 1] == 'd')
				{
					int temp = va_arg(arguments, int);
					 cout<<temp;
					x++;
				}
			else if(x + 1 < size)
			{
				x++;
			}
		}
else
	{
		cout<<a[x];
	}
}
	va_end(arguments);	
}

main()
{
	int x=5,y=10;
	myprint("%s %d + %d = %d","Test:",x,y,x+y);

	return 0;
}

تم تعديل هذه المشاركة بواسطة time1 في 25 أبريل 2008 في 14:11

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#7

حسنا يبدو أن سؤالي غير مفهوم أن كنت أريد لفت الأنظار إلى خاصية الـ pointer to function

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#8

inheritance -_-

#9

تستطيع استخدام كود اسمبلي لصناعة هذه الدالة...

#10

هذا هو حلي

#include<stdio.h>
void main()
{
	int (*myprint)(const char*,...);
				myprint=printf;
	myprint("The result of %i %c %i is %i",3,'+',5,3+5);
}

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…