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

حزورة لتنشيط الدماغ..

رائج
بدأه مصطفى 36a2 في 1 يوليو 2012 · 81 رد · 4,562 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#76
Hamza+C+ASM كتب:

بما أنكم تناقشون الخدع و الحيل في لغة السي والسي ++ ، إليكم هذا الفيروس الذي أنشأته في وقت سابق :happy:

يجعل مؤشر الفأرة في وضعية الرجل المجنون :haha:

رائع بالفعل .. لقد ألهمتني هذه الفكرة بالكثير من الأفكار ...

انظر إلى هذا التغيير البسيط .. جعلت الماوس ترسم دائرة في منتصف الشاشة تقريباً ...

/* HQ Virus By Hamza Qdider */

#include <windows.h> // For SetCursorPos(int x, int y)
#include <time.h> // for Random Number
#include <stdio.h>
#include<math.h>
int main()
{
	int X=0,Y=0,loop=0;
	system("title HQ virus"); // changing Console title
	system("mode 20,20"); // change the console size
	system("color 4"); // change font color to red
	printf("HQ virus => Created By Hamza Qdider ");
	Sleep(4000); // don't do anything
	HWND HQ=FindWindow(NULL,"HQ virus"); // Find the title of the window
	ShowWindow(HQ,false); // hide window
	for(int i=0;i<2000;i++)  // if loop not equal to 1
	{
	X=400+cos(i)*200;// X = Random number from 0 to 1000
	Y=200+sin(i)*200;// Y = Random number from 0 to 800
	Sleep(10);
	SetCursorPos(X,Y); // gotoxy(x,y) on desktop , change the cursor position
	}
}

بالنسبة لبرنامج الScreen saver فأنتظر من الأخ أحمد أن يعلمنا كيف نبرمج واحدة smile.gif..

ولكن ظهرت لدي النافذة التالية .. sleep.gif

6CP77021.png

هل يمكنني جعله يدعم وضع ملء الشاشة بطريقة ما؟؟..

___________________________________________________________________

صحيح أنه سخيف جداً ولكن ....إليكم أولى محاولاتي مع رسوميات الكونسول :

#include<iostream.h>
#include<windows.h>
#include<conio.h>
#include<fstream.h>
#define y0 140
#define x0 330
#define default_color 0x00f
#define paus() {system("pause");}
/////////////////////////////
char s[y0][x0];
int i=0,j=0;
int h=10;
//////////////////////////
#define SCTA SetConsoleTextAttribute
void ccout(char b,int color=default_color)
{SCTA(GetStdHandle(0x0fffffff5),color);putch(b);
SCTA(GetStdHandle(0x0fffffff5),default_color);}
////////////////////
unsigned long __stdcall th0 (void *){
	for(;j<y0;j++){
		for( i=0;i<x0;i++){int a=0;if(j%(2*h)<h)a=j;else {a-=j%h-h;}
		ccout(s[j],i+a);}putch('\n');}return 0;};
//////////////////////////////////
char ch='*';
void so(){	
	unsigned long th00;
	CreateThread(0,0,th0,0,0,&th00);
	while(1){};}
void ss(char ch=char(219)){		
				for(int j=0;j<y0;j++)
				for(int i=0;i<x0;i++)s[j]=ch;}
void main()
{
system("mode con:cols=340 lines=150");
ss();
so();
paus();
}

الآن أضحك على هذا البرنامج بشدة ... laugh.gif

ملاحظة:اليوم هو آخر يوم لي عند بيت جدتي .. وسأعود إلى المنزل حيث لا يوجد انترنت ...

لذلك سأعود إلى الدخول مرة أسبوعيا إن شاء الله تعالى فاعذروني على ذلك ... استمتعت كثيراً برفقتكم ..smile.gif

تحياتي لكم والسلام عليكم

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 5 يوليو 2012 في 11:59

1
#77

السلام عليكم ورحمة الله تعالى وبركاته ، أخي أحمد لقد بدأت أنت و الأخ مصطفى بوضع أكواد متقدمة في لغة السي و السي++ حيث أنني لم

أفهم جل الأكواد التي وضعتماها خاصة دالة عكس الجملة التي لم (أقشع :sad: ) فيها شيئا ، هل يمكنك أخي أحمد أن تشرح لي أكواد الدالة وأن تعيد كتابة السورس كود مع التعليقات من فضلك ؟

rS3eY.png
#78

السلام عليكم

لدي شيء اخر وهو كتابة برنامج بلغة السي يطبع نفسه بدون استخدام the file

#79

أخي الكريم حمزة ..

في الحقيقة لا شيء متقدم .. ولكن إليك الكود مع شرح بسيط smile.gif:

#include<iostream>//مكتبة الدخل والخرج
#include<string>//مكتبة التعامل مع السلاسل المحرفية
using namespace std;
bool ispalindrome(char*A,unsigned int length)
{//دالة تعيد 1إن كانت الجملة تقبل القراءة بالمقلوب
//وسطاء الدلة هي مؤشر إلى الجملة وطولها
	for(int i=0;i<length/2;i++)//حلقة تختبر أحرف الجملة إلى منتصفها
		if(A!=A[length-i-1])return false;//الاختبار يعيد 0في حالة لم يكن الحرف الأول يساوي الأخير وهكذا
	return true;//اذا انتهى الاختبار دون ان يفشل في اي حرف سيعيد واحد
}
int main()//الدالة الرئيسية
{
	char array[100];//مصفوفة محارف 
	cout<<"Enter A Sentence\n";//أدخل المصفوفة
	cin>>array;//ادخال الجملة
	cout<<strlen(array)<<endl;//اظهار طول الجملة ليس لها داع
	cout<<(ispalindrome(array,strlen(array))?"OH!!It's A palindroem :D\n":"Not Palindrome:(\n");//هذه عبارة شرط ثلاثية 
	main();//اعادة استدعاء الدالة الرئيسية لتكرار البرنامج
	return 0;//انتهاء البرنامج على خير 
}

وإليك القليل من الكلام عن طريقة عمل الدالة :

مثلاً أدخل الأخ العزيز حمزة الجملة التالية : ربّك فكبّر ..

أولا عدد الحروف 7 إذا ستختبر أول 7/2 حروف أي أول 3 حروف كما يلي .. :

هل الحرف الأول == الحرف ال7-1...نعم

هل الحرف الثاني == الحرف7-2 .... نعم

هل الحرف الثالث == الحرف7-3.... نعم

إذا سنخرج من الحلقة ونعيد 1 ..

أي أن الجملة التي أدخلناها كانت palindrome .. تُقرأ من اليمين إلى اليسار ومن اليسار إلى اليمين بنفس الطريقة ...

اما معامل الشرط الثلاثي فهو من الشكل :

(A?B:C)

إذا تحققت العبارة الشرطية A سيعيد هذا المعامل B اما إن لم تتحقق سيعيد C

يمكننا مكافأة ذلك كما يلي :

if(A)
return B;
else 
return C;

والمكان الذي استخدمتها فيه وهو :

cout<<(ispalindrome(array,strlen(array))?"OH!!It's A palindroem :D\n":"Not Palindrome:(\n");

فيمكننا كتابتها بالشكل :

if(ispalindrome(array,strlen(array))
cout<<"OH!!It's A palindroem :D\n";
else cout<<"Not Palindrome:(\n");

أي إذا أعطت الدالة ispalindrome القيمة 1 فاطبع العبارة الأولى وإلا اطبع العبارة الثانية ...

أرجو أن يكون الشرح مقبولا... تقبّل تحياتي أخي العزيز ..

بالنسبة للأخ :

nkernel

فحسب فهمي لسؤالك.. يستحيل لبرنامج ما أن يطبع نفسه تماماً ..مثلما يستحيل أن تكتب مذكراتك بدقة ولو كان ذلك منذ دقيقة فقط... والسبب :

لو لدينا برنامج يطبع نفسه .. فسيطبع الجزء الذي يطبع نفسه عدداً لا نهائيا من المرات ..

مثلاً : اطبع "اطبع"اطبع"اطبع....................."""إلى اللانهاية ..

تخيل أنك ستكتب مذكراتك منذ ثانية:

ستكتب :كتبت في مذكرتي :كتبت في مذكرتي :كتبت في مذكرتي : ..... إلى ما لانهاية ... (أو إلى أن تموت بعد عمر طويل إن شاء اللهtongue.gif)

ولكن يمكن كتابة برنامج يطبع برنامجاً آخر كما يلي :

#include<iostream>
using namespace std;
int main()
{
	cout<<"#include<iostream>\nusing namespace std;\nint main()\n{\n\n\tcout<<\"Welcome To C++\";\n\treturn 0;\n}\n";
	return 0;
}

تقبل تحياتي ..والسلام عليكم

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 6 يوليو 2012 في 17:39

1
#80
اقتباس
يستحيل لبرنامج ما أن يطبع نفسه تماماً

لا يوجد شيء مستحيل في البرمجة أخي مصطفى ! :)

هل سمعت عن البرامج المشوشة (الـ Quine) ؟ التي يعشقها مبرمجوا السي إلى حد الجنون !!

انظر هذا المثال :

/* A simple quine (self-printing program), in standard C. */

/* Note: in designing this quine, we have tried to make the code clear
 * and readable, not concise and obscure as many quines are, so that
 * the general principle can be made clear at the expense of length.
 * In a nutshell: use the same data structure (called "progdata"
 * below) to output the program code (which it represents) and its own
 * textual representation. */

#include <stdio.h>

void quote(const char *s)
         /* This function takes a character string s and prints the
          * textual representation of s as it might appear formatted
          * in C code. */
{
        int i;

        printf("        \"");
        for (i=0; s; ++i) {
                /* Certain characters are quoted. */
                if (s == '\\')
                        printf("\\\\");
                else if (s == '"')
                        printf("\\\"");
                else if (s == '\n')
                        printf("\\n");
                /* Others are just printed as such. */
                else
                        printf("%c", s);
                /* Also insert occasional line breaks. */
                if (i % 48 == 47)
                        printf("\"\n    \"");
        }
        printf("\"");
}

/* What follows is a string representation of the program code,
 * from beginning to end (formatted as per the quote() function
 * above), except that the string _itself_ is coded as two
 * consecutive '@' characters. */
const char progdata[] =
        "/* A simple quine (self-printing program), in st"
        "andard C. */\n\n/* Note: in designing this quine, "
        "we have tried to make the code clear\n * and read"
        "able, not concise and obscure as many quines are"
        ", so that\n * the general principle can be made c"
        "lear at the expense of length.\n * In a nutshell:"
        " use the same data structure (called \"progdata\"\n"
        " * below) to output the program code (which it r"
        "epresents) and its own\n * textual representation"
        ". */\n\n#include <stdio.h>\n\nvoid quote(const char "
        "*s)\n   /* This function takes a character stri"
        "ng s and prints the\n    * textual representati"
        "on of s as it might appear formatted\n   * in "
        "C code. */\n{\n        int i;\n\n      printf(\"       \\\"\");\n "
        "   for (i=0; s; ++i) {\n            /* Certain cha"
        "racters are quoted. */\n               if (s == '\\\\')"
        "\n                     printf(\"\\\\\\\\\");\n         else if (s["
        "i] == '\"')\n                  printf(\"\\\\\\\"\");\n         e"
        "lse if (s == '\\n')\n                       printf(\"\\\\n\");"
        "\n             /* Others are just printed as such. */\n"
        "               else\n                  printf(\"%c\", s);\n   "
        "        /* Also insert occasional line breaks. */\n "
        "          if (i % 48 == 47)\n                  printf(\"\\\"\\"
        "n      \\\"\");\n      }\n     printf(\"\\\"\");\n}\n\n/* What fo"
        "llows is a string representation of the program "
        "code,\n * from beginning to end (formatted as per"
        " the quote() function\n * above), except that the"
        " string _itself_ is coded as two\n * consecutive "
        "'@' characters. */\nconst char progdata[] =\n@@;\n\n"
        "int main(void)\n        /* The program itself... */\n"
        "{\n    int i;\n\n      /* Print the program code, cha"
        "racter by character. */\n      for (i=0; progdata[i"
        "]; ++i) {\n            if (progdata == '@' && prog"
        "data[i+1] == '@')\n                    /* We encounter tw"
        "o '@' signs, so we must print the quoted\n        "
        "         * form of the program code. */\n              {\n "
        "                  quote(progdata);     /* Quote all. */\n"
        "                       i++;                            /* Skip second '"
        "@'. */\n               } else\n                        printf(\"%c\", p"
        "rogdata);  /* Print character. */\n }\n     r"
        "eturn 0;\n}\n";

int main(void)
         /* The program itself... */
{
        int i;

        /* Print the program code, character by character. */
        for (i=0; progdata; ++i) {
                if (progdata == '@' && progdata[i+1] == '@')
                        /* We encounter two '@' signs, so we must print the quoted
                         * form of the program code. */
                {
                        quote(progdata);        /* Quote all. */
                        i++;                            /* Skip second '@'. */
                } else
                        printf("%c", progdata);  /* Print character. */
        }
        return 0;
}

سبق و أن كتب الأستاذ وجدي عصام عن هذا النوع من البرامج :

برنامج لطباعه السورس الكود لنفس البرنامج

بالتوفيق.

#81

بالمناسبة, سأتغيب عن المنتدى لمدة أسبوع نظرا لاانشغالي بحفل التخرج و تجهيزات السفر.

مسؤولية القسم تقع على عاتقكم الآن :)

#82

سبحان الله Bg_029.gif...

عجباً... عجباً...عجباً...

اقتباس
لا يوجد شيء مستحيل في البرمجة أخي مصطفى !

أعلن استحالة استسلامي أمام البرمجة ... 045.gif

تحياتي أخي أحمد .. شكراً جزيلا لك .. نلتقي في الأسبوع القادم بإذن الله تعالى ...

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

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