السلام عليكم
سؤال جميل في الخوارزميات
الذي يعرف الحل يرسل على الخاص للسماح للاعضاء بالتفكير في الحل
اكتب برنامج باي لغة برمجه ( او خوارزمية ) يقوم بطباعة نفسه ( طبعا دون اللجوء الى نظام التشغيل او ملف المصدر -_- )
ساضع الحل بعد اسبوع ان شاء الله
السلام عليكم
سؤال جميل في الخوارزميات
الذي يعرف الحل يرسل على الخاص للسماح للاعضاء بالتفكير في الحل
اكتب برنامج باي لغة برمجه ( او خوارزمية ) يقوم بطباعة نفسه ( طبعا دون اللجوء الى نظام التشغيل او ملف المصدر -_- )
ساضع الحل بعد اسبوع ان شاء الله
جزاك الله خيراً
لكن ما معنى يطبع نفسه؟ يطبع النافذة أو الكود أو....
شكراً لك :)
هذه الجملة خاطئة :wacko:
أرجو التوضيح أكثر
قولوا لا اله الا الله تفلحوا
ومن يبتغي غير الاسلام دينا فلن يقبل منه وهو في الاخرة من الخاسرين- صدق الله العظيم
اسف للتاخير
بكل بساطة عندما تنفذ البرنامج يقوم بطباعة نفس الكود الذي كتبته . طبعا مثل ما قلت دون اللجوء لنظام التشغيل بطباعة ملف المصدر
ما شاء الله
لم اكن اتوقع ان يهتم الخبراء بهذا السؤال :lol:
وصلت محاولات من كل من :
ابو خالد السوري : الحل بلغة الجافا
فهد الشلوي : الحل بلغة سي ++ يبدو انك استخدمت الملفات !!!
مش عارف حاسس انكم معقدنيها :wacko:
يوجد حل ابسط بكثير B)
الاخ ياسر حلك صحيح
كنت اتمنى لو كنت انت من قام بالحل فالفكرة في غاية البساطة وكل ما كانت تحتاجه مجرد اعطاءها الوقت في التفكير فيها
منتظر بقية الاعضاء
ممكن يكون بسيط لكنه غير منطقي وأعتقد أنك تعلم ما أتكلم عنه وممكن يكون غير بسيط لكن منطقي.
منطقي عندما لا يكون يتضمن النص البرمجي مكتوب مرة أخرى بشكل ما في متغير لأنه سوى هذا فهو بسيط لكنه غير منطقي بالمرة.
أرسلته لك perl، بسيط وغير منطقي :D
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
اشكر كل من تفاعل مع السؤال وشارك في الحل .
ساعطي شرح بسيط للموضوع ومن ثم ارفق حلول الشباب ( للاسف كانت المشاركات معدوده ) :
فكرة الحل تعتمد على نظرية الRecursion فيمكن كتابة برنامج ليقوم بعمل معين ويطبع وصف ما قام به . لحل هذا السؤال يتم تقسيم البرنامج الى جزئين :A و B .
ِ A: يقوم بحفظ الجزء B
B: يقوم بتنفيذ الجزء A
Begin X=“Print “Begin”, /nl, “X=“” , X , /nl ,”Print”” , X , , /nl , ”End”“ Print “Begin”, /nl, “X=“” , X , /nl ,”Print”” , X , , /nl , ”End” End
لاحظ ان : اخر خطوة في الخوارزم السابق هي اعطاء المتغير X قيمته . طبعا ستحتاج اكواد الASCII للتغلب على مشكلة طباعة بعض الرموز .
يعني ببساطة اكتب البرنامج الذي تحب ومن ثم اخزنه في المتغير X
ولمزيد من المعلومات :
هذه البرامج مشهورة باسم Quine ويوجد موقع يحوي الحل بمعظم لغات البرمجه :
http://www.nyx.net/~gthompso/quine.htm
حلول الشباب :
===================
أبو خالد السوري
===================
محاولة بلغة الجافا لحل لغز البرنامج الذي يطبع نفسه ..
الفكرة ببساطة :
تخزين أسطر البرنامج في مصفوفة ..
طباعتها سطر سطر ,, و في نقطة معينة طباعتها كاملة مرة ثانية ..
package mainPkg;
public class Test5 {
static String text[] = {
"package mainPkg;",
"public class Test5 {",
"static String text[] = {",
"",
"};",
" public static void main(String[] args) {",
" for (int i=0;i<text.length; i++) {",
" if (text.length() == 0){",
" for (int j=0;j<text.length; j++) {",
" quote(text[j]);",
" }",
" } else",
" System.out.println(text);",
" }",
" }",
" static void quote(String s){",
" System.out.print((char)34+s+(char)34+(char)44+(char)10);",
" }",
"}",
};
public static void main(String[] args) {
for (int i=0;i<text.length; i++) {
if (text.length() == 0){
for (int j=0;j<text.length; j++) {
quote(text[j]);
}
} else
System.out.println(text);
}
}
static void quote(String s){
System.out.print((char)34+s+(char)34+(char)44+(char)10);
}
}==============
فهد الشلوي :
==============
هذه محاولة بلغة السي
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
void printitslef(){string line;ifstream file(__FILE__);while(!file.eof()){getline(file,line);if((line.substr(0,18)!="void printitslef()")&&(line!="printitslef();"))cout<<line<<endl;}file.close();}
int main(int argc, char *argv[])
{
printitslef();
int i,n;
cout<<"\nEnter Number n=";
cin>>n;
cin.ignore();
cout<<"i\ti^2"<<endl;
for(i=0;i<n;i++)
cout<<i<<"\t"<<i*i<<endl;
cin.get();
return 0;
}حل اخر :
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout<<"#include <iostream>n";
cout<<"using namespace std;n";
cout<<"int main(int argc, char *argv[])n";
cout<<"{n";
cout<<"cout<<"hello arab\n";n";
cout<<"cin.get();n";
cout<<"cin.get();";
cout<<"return 0;n}n";
cout<<"hello arabn";
cin.get();
return 0;
}=============
ياسر YDVIPER
=============
The methodology is based on a pointer *s (character array) and using ASCII Symbolization to print the code.
Here;
(34) is the ASCII for a quotation mark.
(10) is the Ascii for a line-feed.
------------
#include <stdio.h>
char *s="char *s=%c%s%c;%cmain(){printf(s,34,s,34,10,10);}%c";
main(){printf(s,34,s,34,10,10);}
-----------================
Xacker
================
$q='$q=%c%s%c; printf($q,0x27,$q,0x27);'; printf($q,0x27,$q,0x27);
تمام وهذا ما تكلمت عنه، بسيط وغير منطقي :D
يبقى إضافة
#include <stdio.h>
إلى المؤشر في كود الأخ ياسر.
بالمناسبة بعض الشفرات تنقص escaping chars يبدو أنها بسبب النسخ من GCode؟ ما أتكلم عنه هو "حل آخر"
تحياتي.
تم تعديل هذه المشاركة بواسطة Xacker في 12 مارس 2009 في 10:52
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
اقتباسالRecursion
مم انت تثير شهيتي يا اخي
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
السلآمـ عليكم :)
إذا كنت تقصد آمر الطباعة فيتم كتابته بهذه الطريقة :lol: <~ توها تتعلم وبتوريكم :blush:
بلغة المآتلاب ،،
fprintf(1,'malam7\n'); fprintf(1,'123456789\n'); fprintf(1,'matlab\n');
وشكراااااااااااااااااااااا :D
ibr_exn كتب:السلام عليكم
سؤال جميل في الخوارزميات
الذي يعرف الحل يرسل على الخاص للسماح للاعضاء بالتفكير في الحل
اكتب برنامج باي لغة برمجه ( او خوارزمية ) يقوم بطباعة نفسه ( طبعا دون اللجوء الى نظام التشغيل او ملف المصدر -_- )
ساضع الحل بعد اسبوع ان شاء الله
موضوع قديم حصل له resurrect بطريقة
انا وقفت عند نقطة عدم اللجوء الى نظام التشغيل
جميع البرامج تستخدم نظام التشغيل في عدة امور
ربما احتاج الى كتابة برنامج في boot sector

password123 كتب:موضوع قديم حصل له resurrect بطريقة
انا وقفت عند نقطة عدم اللجوء الى نظام التشغيل
جميع البرامج تستخدم نظام التشغيل في عدة امور
ربما احتاج الى كتابة برنامج في boot sector
ما يقصده هو عدم اللجوء إلى الـFile System لقراءة السورس وإعادة طباعته أو أي طريقة مشابهة.
اتذكر انني سالت نفس السؤال عام 2009 :lol:
Eisa Ayed كتب:اتذكر انني سالت نفس السؤال عام 2009 :lol:
ونفس المشاركين ![]()
آسفة للمقاطعة
bye
[وسط]
♥ Countess ♥

♥
[/وسط]
مع احترامي الشديد لكاتب الموضوع فهو يعرف مدى تقديري له ولكن اما أنني لم أفهم السؤال جيدا او أن السؤال غريب ولا يحمل اية أفكار خوارزميات.
الذي فهمته أن تقوم بطباعة المصدر للبرنامج ولكن أين اللغز بالموضوع!!
ءاسف على التدخل ولكن هذه المرة الاولى التي أجد سؤالا غريبا في هذه المنتدى الرائع
وشكرا
قولوا لا اله الا الله تفلحوا
ومن يبتغي غير الاسلام دينا فلن يقبل منه وهو في الاخرة من الخاسرين- صدق الله العظيم
akramKamal كتب:مع احترامي الشديد لكاتب الموضوع فهو يعرف مدى تقديري له ولكن اما أنني لم أفهم السؤال جيدا او أن السؤال غريب ولا يحمل اية أفكار خوارزميات.
الذي فهمته أن تقوم بطباعة المصدر للبرنامج ولكن أين اللغز بالموضوع!!
ءاسف على التدخل ولكن هذه المرة الاولى التي أجد سؤالا غريبا في هذه المنتدى الرائع
وشكرا
الموضوع ليس بالسهولة التي تتوقعها. :)
حاول القيام بذلك دون استخدام دوال قراءة الملفات أو ما شابه (ودون مشاهدة الحلول الموجودة :P )
هذا لغز برمجي مشهور يدعى Quine.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…