اطلاعیه

Collapse
No announcement yet.

سوال و جواب های برنامه نویسی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : یه تفاوت ... کسی می تونه بگه

    سلام
    آقا مانیان
    با فرض اینکه منظورتون سورس بود جوابو عرض میکنم.
    این مدل برنامه ها معروف به self reproducing programs هستند.


    تو C یه preprocessor وجود داره به اسم
    __FILE__
    این preprocessor قبل از کامپایل مقداردهی میشه و از نوع string هست.
    مقدار اون قبل از کامپایل تو ویندوز مسیر کامل فایل سورس شما هست و در لینوکس فقط نام فایل سورس شما هست.
    پس تو لینوکس این فایل بهتر عمل میکنه از این لحاظ که اگه جای فایل سورس عوض شه، برنامه کار نمیکنه.
    از همین نکته استفاده میکنیم برای برنامه ی مطلوبتون.
    قابل ذکره که این اطلاعاتو مدیون یکی از مراجع c++ هستم که قبلا یه قسمتاییشو مطالعه کرده بودم.

    من فایلو پلود کردم .
    این فایلو تو مسیر
    c:\
    استخراج یا extract کنین. بطوریکه پوشه ی SR_PRG تو
    c:\
    باشه.
    اگه لینوکس بود این مشکلو نداشتیم.
    البته دقت کنین که مسیر فایل موقع کامپایل تعیین میشه. پس اگه این برنامه رو خودتون کامپایل کنین ، هر جا که کامپایل شه جواب میده
    فقط تو اسم فایل سورس و مسیرش قاعده ی 8.3 رو رعایت کنین تا مشکلی پیش نیاد.
    محدودیت این روش اینه که وابسته به فایل سورسشه.البت خود C این قابلیتو داده به ما. ولی دقیقا سورسشو چاپ میکنه.
    نظرتون چیه؟
    بزرگان اگه روش دیگه ای میدونین بگین ما هم یاد بگیریم.

    فایلی که دادم یه برنامه ی پر سرعت برای یافتن اعداد اوله که خودم نوشتم و سورسشم اول کارش نشون میده. اگه شما روش سریعتری دارین بدین ما هم یاد بگیریم.

    راستی اگه فایلو پلود کردم لینکو میذارم.
    اندازه ش 108 کیلوبایته. پس دانلودشم طول نمیکشه.

    فعلا دارم دانلود میکنم. شرمنده نمیتونم پلودش کنم.
    Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

    دیدگاه


      #17
      پاسخ : یه تفاوت ... کسی می تونه بگه

      با سلام
      من خودم این سوال رو نتونستم حل کنم ولی خوب وقتی راه حل رو دیدیم خیلی جالب بود. گفتم که در اون راهآ‌حل از preprocessor استفاده نمیآ‌کرد. یعنی وقتی که برنامه اجرا میآ‌شد دقیقا مشابه کد برنامه رو از ابتدای main تا به انتها میآ‌نوشت.

      حالا این روش شما رو من دقیقا نمیآ‌دونم که جواب میآ‌ده یا نه ولی فکر نکنم بشه.
      من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

      دیدگاه


        #18
        پاسخ : یه تفاوت ... کسی می تونه بگه

        سلام

        من اینو انجام دادم .
        کارمیکنه.

        شرمنده اگه لینکو ندادم برای اینه که تو سفرم و دسترسی درست و حسابی به اینترنت ندارم.

        http://www.4shared.com/file/58769595/62dbc5c9/SR_PRG.html


        نتیجه رو بگین.
        Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

        دیدگاه


          #19
          پاسخ : یه تفاوت ... کسی می تونه بگه

          سلام بزرگان

          خوب کسی سوالو جواب نداد.
          من جواب سوالمو میگم.
          تبدیل on the fly از یک نوع به نوع enumerated فقط وفقط در مقداردهی پیشفرض به آرگومان های تابع عضو یه کلاس ممکنه و در جاهای دیگه اصلا ممکن نیست.
          امتحان کنین.

          مرسی.
          Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

          دیدگاه


            #20
            پاسخ : یه تفاوت ... کسی می تونه بگه

            سلام بزرگان

            آقا مانیان برنامه م رو ندیدی ؟ کامپایل کنی 100درصد جواب میده ها ؟
            اگه تو لینوکس کامپایل شه که چه بهتر


            بگذریم .
            سوال جدید: :question: اگه تو یه struct جای فیلدا رو عوض کنیم ، یکی از فرق های مهمی که بین struct جدید و قدیمی وجود داره چیه؟ چرا؟ (منظورم از چرا یعنی این که چه جوری؟)
            خب من منتظرم و بهد از یه مدت جوابا رو عرض میکنم.
            بزرگان لااقل اگه مطوئن نیستین یه نظری بدین.
            سوال زیاد سختی نیست . ولی نکته ش جالبه. :mrgreen: :mrgreen:
            Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

            دیدگاه


              #21
              پاسخ : یه تفاوت ... کسی می تونه بگه

              نوشته اصلی توسط عابد بابازاده
              سلام بزرگان

              آقا مانیان برنامه م رو ندیدی ؟ کامپایل کنی 100درصد جواب میده ها ؟
              اگه تو لینوکس کامپایل شه که چه بهتر


              بگذریم .
              سوال جدید: :question: اگه تو یه struct جای فیلدا رو عوض کنیم ، یکی از فرق های مهمی که بین struct جدید و قدیمی وجود داره چیه؟ چرا؟ (منظورم از چرا یعنی این که چه جوری؟)
              خب من منتظرم و بهد از یه مدت جوابا رو عرض میکنم.
              بزرگان لااقل اگه مطوئن نیستین یه نظری بدین.
              سوال زیاد سختی نیست . ولی نکته ش جالبه. :mrgreen: :mrgreen:
              با سلام
              برنامهآ‌تون رو کامپایل کردم error داد. شما از conio.h استفاده کردی که توی لینوکس نداریم.
              من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

              دیدگاه


                #22
                پاسخ : یه تفاوت ... کسی می تونه بگه

                سلام بزرگان

                آقا مانیان
                میدونم تو لینوکس نداریمش/ من خودم اینو با mingw کامپایل کردم . اندازه ی فایلو ببین چقدر بزرگ شده.
                ولی خودت میتونی بسازیش.
                منم این کارو کردم.
                اصلا اون قسمت اصلی برنامه رو عوض کن یه چیز دیگه بذار/ مهم اون تکه ای هست که سورسو چاپ میکنه/
                بعنوان یه جایگزین conio میتونی از ncurses که یه هدر gcc تو لینوکسه استفاده کنی. الت=بته طرز استفاده ش فرق داره.


                Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                دیدگاه


                  #23
                  پاسخ : یه تفاوت ... کسی می تونه بگه

                  سلام بزرگان

                  خب. کسی نمیخواد سوالو جواب بده؟


                  راستی آقا مانیان برنامه ای که اپلود کردم کامپایل کردن؟
                  اون تکه ی اعداد اولشو پاک کن تا conio مزاحم نشه. نتیجه رو بگو. :mrgreen:


                  Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                  دیدگاه


                    #24
                    یه تفاوت ... کسی می تونه بگه + کمی شگرد لینوکسی

                    نوشته اصلی توسط عابد بابازاده
                    سلام بزرگان

                    خب. کسی نمیخواد سوالو جواب بده؟


                    راستی آقا مانیان برنامه ای که اپلود کردم کامپایل کردن؟
                    اون تکه ی اعداد اولشو پاک کن تا conio مزاحم نشه. نتیجه رو بگو. :mrgreen:


                    با سلام
                    شرمنده اگر دیر جواب میآ‌دهم یه چند روزی مسافرت بودم! من فایل شما رو تست کردم جواب میآ‌ده ولی یک مشکل داره اون هم اینکه اگر فایل کامپایل شده را از کنار فایل سورس جدا کنید دیگه این روش کار نمیآ‌کنه.

                    خوب این یک فایل نمونه از برنامهآ‌ای است که خودش رو چاپ میآ‌کنه (البته منظور قسمت main هست نه قسمت preprocessor ):
                    منبع: http://www.zyvex.com/nanotech/talks/IBC981207/tsld022.htm


                    main(){char q=34, n=10,*a="main() {char q=34,n=10,*a=%c%s%c; printf(a,q,a,q,n);}%c";printf(a,q,a,q,n);}


                    حالا یک مقدار شوخی لینوکسی (این قسمت را زیاد جدی نگیرید):
                    یک کسی که خوره لینوکس و command line هست و یا حداقل میآ‌خواهد این طوری وانمود کند ( ) این یک تکه کد را به این صورت کامپایل میآ‌کنه:
                    ابتدا از اون آدرس قسمت مورد نظر رو کپی میآ‌کنه بعد میاد توی شل و:


                    ~$ cd /tmp/
                    /tmp$ cat > test.c << EOF
                    > #include <stdio.h>
                    > main(){char q=34, n=10,*a="main() {char q=34,n=10,*a=%c%s%c; printf(a,q,a,q,n);}%c";printf(a,q,a,q,n);}
                    >
                    > EOF
                    /tmp$ gcc test.c ; ./a.out
                    main() {char q=34,n=10,*a="main() {char q=34,n=10,*a=%c%s%c; printf(a,q,a,q,n);}%c"; printf(a,q,a,q,n);}




                    خوب اگر کد بالا برای شما خیلی جذاب نبود پس این رو ببینید (واقعا شل لینوکس خدا است! تصور همچین ملق زدنآ‌هایی توی ویندوز و برای یک ویندوزی غیر ممکنه! ها ها ها!):


                    $ wget http://www.zyvex.com/nanotech/talks/IBC981207/tsld022.htm -O - -q | grep -o 'main(){.*}' | gcc -include stdio.h -xc - ;./a.out


                    main() {char q=34,n=10,*a="main() {char q=34,n=10,*a=%c%s%c; printf(a,q,a,q,n);}%c"; printf(a,q,a,q,n);}


                    یک خط کد بالا، اون فایل منبع رو میآ‌گیره کد اصلی رو با RE از فایل HTML جدا میآ‌کنه و میده دست gcc و بعد که کامپایل شد کد خروجی رو اجرا میآ‌کنه! اگر با این روش حال نکردید باید حتما به خودتون شک کنید!
                    یه موقع فکر نکنید من خودم تمام اینآ‌ها رو از حفظ انجام دادم، مقداری در گوگل جستجو کردم!
                    من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

                    دیدگاه


                      #25
                      پاسخ : یه تفاوت ... کسی می تونه بگه

                      سلام بزرگان

                      آقا مانیان

                      اون تیکه دومیه جالب بود.
                      ولی برنامه ای که شما دادی اگه دست بخوره ، مثلا اگه به آخر main یه دستور اضافه شه دیگه خودشو چاپ نمیکنه و همون چیز فقبلی رو چاپ میکنه .
                      بعبارتی برای چاپ از اون string ای که توش نوشته شده استفاده میکنه و تعمیم داده شده نیست. ولی خب ایده ی جالبی بود. :mrgreen: :mrgreen:
                      این برنامه ای که من داده بودم راستش زمان کامپایل همیشه جواب میده و کل فایل سورسو چاپ میکنه.
                      مرسی
                      Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                      دیدگاه


                        #26
                        پاسخ : یه تفاوت ... کسی می تونه بگه

                        سلام بزرگان

                        خب خیلی طول کشید من جواب سوالی رو که مطرح کردم خدمتتون عرض میکنم.

                        یه struct ساختاری هست که تو حافظه از یک یا چند بخش یا section چهار بایتی تشکیل میشه.
                        هربخش می تونه از یک تا 4 فیلد رو ذخیره کنه . البته یه این شرط که فیلدهای کوچیکتر یا مساوی 4 بایت ،حتما باید تو یک فیلد ذخیره شن.
                        چون فیلد های پشت سر هم تو حافظه هم جاشون پشت سرهمه ، پس اگه ترتیبشون بهم بخوره ، فضای اشغالیشون ممکنه تغییر کنه.

                        *البته در مورد نوع double (و نه long double) یه استثناء وجود داره که اگه حداقل یه فیلد از نوع double توی struct ما استفاده بشه،
                        اندازه ی section ها 8 بایتی میشه. یعنی بعبارتی section ها دوتادوتا اشغال میشن.

                        این مورد تو صرفه جویی حافظه توی برنامه های c و c++ خیلی مهمه که اگه بهش توجه نشه خب برنامه تون بیخودی باد میکنه که در بعضی حالا ممکنه سرعت هم کمتر بشه.

                        اگه متوجه نشدین بگین بیشتر توضیح بدم. :mrgreen:

                        موفق باشین/


                        حالا سوال بعدی: :question: :question:

                        میدونیم که برای encapsulation یک کلاس میتونیم کلاس حاوی اعضای داده ای و اعلان توابع عضو (نه تعریفشون) رو همراه با فایل object تعریف توابع عضو کلاس تحویل طرف مقابل بدیم تا بدون دسترسی به سورس توابع عضو کلاستون بتونه از کلاستون استفاده کنه.
                        ولی همه ی توابع عضو رو نباید (یعنی نمیشه) از این طریق بدون آشکار کردن سورسشون به طرف داد.

                        خب سوال اینه که: اون توابع عضوی که اینجوری هستن چه خصوصیاتی دارن و چرا نمیشه این کارو برای اونا انجام داد؟ برای برطرف کردن این حالت باید چه تغییری روی اونا انجام داد؟ :question:

                        جایزه: یه تشکر :mrgreen:
                        خب من جوابو بعد از یه مدتی خدمت شما بزرگان عرض میکنم.


                        Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                        دیدگاه


                          #27
                          پاسخ : یه تفاوت ... کسی می تونه بگه

                          سلام

                          خب یه سوالدیگه هم مطرح میکنم تا رو اینم فکر کنین:
                          در چه زمانی میشه دستور
                          int const v;
                          رو همینطور که در اینجا میبینین بدون مقداردهی اولیه بکار برد؟
                          من جوابا رو بعد از یه مدتی عرض میکنم.

                          Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                          دیدگاه


                            #28
                            پاسخ : یه تفاوت ... کسی می تونه بگه

                            سلام دوستان

                            خب جواب سوال اولیه رو میدم.
                            خب توابع inline همواره هنگام کامپایل باید ورسشون مستقیما در اختیار کامپایلر باشه تا بتونه جاهایی که ازش استفاده میشه کدشو کپی کنه و بعد کامپایل رو انجام بده.

                            البته سوال اخری مونده . میخواین روش فکر کنین/    :mrgreen: :mrgreen:

                            کنارش یه سوال دیگه میدم  :question: :question:
                            سوال: چطور میتونیم مقادیر یک متغیر const رو در یک برنامه  c++ تغییر بدیم؟   :mrgreen:
                            سوال بعدی: در کجاها در برنامه ی c++ ما متونیم سمت راست { یه  ; قرار بدیم؟

                            خب تا حالا سه تا سوال  پاسخ داده نشده داریم/

                            راستی اگه این اطلاعاتی که تا حالا عرض کردم بدردتون نمیخوره بگین سرتون رو درد نیارم و ادامه ندم.  


                            Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                            دیدگاه


                              #29
                              پاسخ : یه تفاوت ... کسی می تونه بگه

                              سلام دوستان یه سوال دیگه:

                              یه تابع main فرض کنین که فقط داخل بدنه ش نوشته شده باشه A و این تابع کار بکنه
                              خب ین چه حالتیه؟
                              یعنی توضیح بدین چطور ممکنه فقط یه A بتنهایی کار کنه؟

                              این سوالش اسونه ها؟

                              خب من بعد از مدتی جوابو عرض میکنم/

                              Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                              دیدگاه


                                #30
                                پاسخ : یه تفاوت ... کسی می تونه بگه

                                سلام دوستان

                                خب یکی از سوالات جواب داده نشده رو جواب میدم.
                                بابا اینجا سر بزنین. یه چیزی بگین.
                                در تاپیک ما رونق اگر نیست صفا هست.

                                سوال این بود که چطور میشه که یه متغیر ثابت بدون مقداردهی اولیه در اعلانش ، بتونه اعلان بشه و برنامه ی c++ هم اروری نده. (یعنی برناه درست باشه.)

                                خب اینو ببینین.




                                class klass {
                                public:
                                klass():a(12) {}
                                const int a;
                                };



                                خب حالا رو بقیه ی سوالا فکر کنین.
                                ایام ضربت خوردن مولای متقیان علی علیه السلام تسلیت باد.
                                Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

                                دیدگاه

                                لطفا صبر کنید...
                                X