انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: اصول مهم تو برنامه نویسی یه برنامه بزرگ چیه؟!!  (دفعات بازدید: 7031 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
نقل‌قول
سلام.میشه لطفا دقیقتر بفرمایید تفاوت دو مورد اول کجاست که ما هم یه چیزی اینجا یاد بگیریم؟ ممنون

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

آفلاین QSBuntu

  • High Sr. Member
  • *
  • ارسال: 613
  • جنسیت : پسر

for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد pageهایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )


توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟
« آخرین ویرایش: 06 دی 1392، 08:02 ب‌ظ توسط 2020s1371 »
زندگی خواهم کرد... خواهم زیست ... و میجنگم حتی اگر........................

آفلاین shervinkh

  • Full Member
  • *
  • ارسال: 197
  • جنسیت : پسر
  • An ENFP
    • سایت شخصی
نقل‌قول
توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟

آرایه های دو بعدی در حافظه کامپیوتر به صورت خانه های پشت سر هم هستند. مثلن یه آرایه m*n داشته باشیم به صورت m*n خونه پشت سر هم ذخیره میشه و ar[ i ][j]    a تبدیل میشه به ar[i*n + j]     a. (این a های اضافه برای این بود که درست نشون داده شن.
کش (cache) در CPU هم این گونه عمل می کنه که هر دفعه درخواست یک خونه حافظه دریافت می کنه مثلن اون خونه و ۶۴ خونه بعدش رو میاره تو cpu که دم دست باشن. چون یه خونه استفاده میشه امکانش زیاده که خونه های اطرافش هم به زودی استفاده شن. و هر انتقال بلوک از رم به CPU زمان میبره بنابراین وقتی خونه های اطرافش میان تو کش برای دسترسی های بعدی دوباره نیاز به انتقال از رم به cpu نیست.
حالا وقتی سطری آرایه رو می خونیم یا می نویسیم از این ویژگی استفاده میشه و تعداد دفعات انتقال از رم به CPU میشه m*n/64 مثلن.
ولی وقتی ستونی دسترسی پیدا می کنیم اول خونه اول با ۶۴ تای جلوش میاد. بعد خونه دوم میره سطر بعد یعنی n خونه جلو تر بنابراین جزو ۶۴ خونه نزدیک قبلی نبوده پس دوباره باید از رم انتقال پیدا کنه. همینجوری به هر خونه که می رسیم هیج کدوم از خونه های اطرافش تو کش نیستن (کش محدوده و بعد مدتی بلوک های قدیمی رو پاک می کنه) و برای هر خونه یه انتقال از رم به CPU انجام می گیره. بنابراین انتقال ها میشه m*n.

یعنی روش دوم (دسترسی ستونی) ۶۴ برابر (در این مثال) کند تر کار می کنه. (در اصطلاح cache miss اش ۶۴ برابر ئه)
البته تو بعضی زبان های برنامه نویسی مثل پاسکال آرایه های دو بعدی برعکس پیاده سازی شدن یعنی آرایه ها رو به جای سطر سطر ، ستون ستون ذخیره می کنن بنابراین دسترسی ستونی بهینه تر میشه.
در java و C آرایه ها سطری پیاده سازی شدن.
« آخرین ویرایش: 07 دی 1392، 04:15 ب‌ظ توسط shervinkh »
Gentoo KDE x86_64
Notebook:Asus N53SN
www.shervin.org

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
جدا از مباحثی که دوستان فرمودند چند تا منبع پیرامون ساختمان داده و سیستم عامل مطالعه کنید...
..I feel no fault for the fault I feel..

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
سلام

کتاب و تجربه باید کنار یکدیگر باشند.
مثال : از دید یک فردی که فقط به تجربه تکیه کرده 2 کد ساده زیر از دید او یکی است یا حداقل بعد از چندسال به نتیجه صحیح می رسد:
for ( j = 0 ; j < 100 ; j++ )
for ( i = 0 ; i < 100 ; i++)
data[i,j] = 0 ;
for ( i = 0 ; i < 100 ; i++ )
for ( j = 0 ; j < 100 ; j++)
data[i,j] = 0 ;

در کد اولی تعداد pageهایی که مصرف می کند 100 * 100 = 10000 است در صورتی که در دومی فقط 100 page را مصرف می کند.

یا مثلاً :
for ( i = 0 ; i < 100 ; i++ )
for ( i = 0 ; i < 100 ; ++i )
حلقه دومی بهینه تر شناخته شده .

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

بستگی به زبان برنامه نویسی دارد.

آفلاین QSBuntu

  • High Sr. Member
  • *
  • ارسال: 613
  • جنسیت : پسر
نقل‌قول
توضیح این رو بگو که ۱۰۰۰ و ۱۰۰ رو چجوری بدست میاری؟

آرایه های دو بعدی در حافظه کامپیوتر به صورت خانه های پشت سر هم هستند. مثلن یه آرایه m*n داشته باشیم به صورت m*n خونه پشت سر هم ذخیره میشه و ar[j]    a تبدیل میشه به ar[i*n + j]     a. (این a های اضافه برای این بود که درست نشون داده شن.
کش (cache) در CPU هم این گونه عمل می کنه که هر دفعه درخواست یک خونه حافظه دریافت می کنه مثلن اون خونه و ۶۴ خونه بعدش رو میاره تو cpu که دم دست باشن. چون یه خونه استفاده میشه امکانش زیاده که خونه های اطرافش هم به زودی استفاده شن. و هر انتقال بلوک از رم به CPU زمان میبره بنابراین وقتی خونه های اطرافش میان تو کش برای دسترسی های بعدی دوباره نیاز به انتقال از رم به cpu نیست.
حالا وقتی سطری آرایه رو می خونیم یا می نویسیم از این ویژگی استفاده میشه و تعداد دفعات انتقال از رم به CPU میشه m*n/64 مثلن.
ولی وقتی ستونی دسترسی پیدا می کنیم اول خونه اول با ۶۴ تای جلوش میاد. بعد خونه دوم میره سطر بعد یعنی n خونه جلو تر بنابراین جزو ۶۴ خونه نزدیک قبلی نبوده پس دوباره باید از رم انتقال پیدا کنه. همینجوری به هر خونه که می رسیم هیج کدوم از خونه های اطرافش تو کش نیستن (کش محدوده و بعد مدتی بلوک های قدیمی رو پاک می کنه) و برای هر خونه یه انتقال از رم به CPU انجام می گیره. بنابراین انتقال ها میشه m*n.

یعنی روش دوم (دسترسی ستونی) ۶۴ برابر (در این مثال) کند تر کار می کنه. (در اصطلاح cache miss اش ۶۴ برابر ئه)
البته تو بعضی زبان های برنامه نویسی مثل پاسکال آرایه های دو بعدی برعکس پیاده سازی شدن یعنی آرایه ها رو به جای سطر سطر ، ستون ستون ذخیره می کنن بنابراین دسترسی ستونی بهینه تر میشه.
در java و C آرایه ها سطری پیاده سازی شدن.


به این میگن یه توضیح خووب...  بسی جالب بود و مفید ::) ::)
زندگی خواهم کرد... خواهم زیست ... و میجنگم حتی اگر........................

آفلاین سالار مقدم

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 2074
  • جنسیت : پسر
  • هر چقدر بدونی بازم کمه.
    • سالار مقدم
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

آفلاین !

  • High Sr. Member
  • *
  • ارسال: 586
  • جنسیت : پسر
  • Don't Panic!
    • مانیتورینگ سایت
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

ما باید کلی کتاب طراحی و تحلیل واسه الگوریتم ها و محاسبات و ساختار و ساختمان داده ها بخونیم :)

البته پیاده سازی الگوریتم ها تو پایتون خیلی شیرین و کوتاه و جذابتر از زبان های رایج دیگست (بجز روبی :o)
I just felt like running

Altern AI Directory --- GitHub

آفلاین سالار مقدم

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 2074
  • جنسیت : پسر
  • هر چقدر بدونی بازم کمه.
    • سالار مقدم
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

ما باید کلی کتاب طراحی و تحلیل واسه الگوریتم ها و محاسبات و ساختار و ساختمان داده ها بخونیم :)

البته پیاده سازی الگوریتم ها تو پایتون خیلی شیرین و کوتاه و جذابتر از زبان های رایج دیگست (بجز روبی :o)
مگه روبی چطوریه؟
کتاب خوب میشناسی؟

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
بستگی به زبان برنامه نویسی دارد.
پایتون این مشکل رو نداره یا ما باید کلی کتاب الگوریتم و ... بخونیم؟

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

آفلاین mohammadgolfami

  • Full Member
  • *
  • ارسال: 213
  • جنسیت : پسر
من برنامه نویسی به معنی چند خط کد زنی رو بلدم (یعنی هیچی بلد نیستم  ;)) این ترم هم درس اصول طراحی نرم افزار داشتیم و استاداین درس مارو با برنامه های تحلیل و طراحی برنامه مثل modelio   آشنا کرد..
 در طول این درس فقط و فقط و فقط فهمیدم که هیچی نمیدونم!!!  به استاد گفتم و استاد هم گفت تنها هدف خودش تو این درس هم همینه که فقط دایره ندانسته های مارو زیاد کنه..و ما بفهمیم که چه چیزهایی نمیدونیم..

اما چیزی که بر من گران آمد(!) این بود که وقتی استاد یه گریزی به اصول برنامه نویسی زد و مثلا گفت که :«باید وابستگی معکوس وجود داشته باشه » من دیگه از اونچیزایی که میدونستم هم دست شستم و برندانستن خود بطور 100 درصدی واقف شدم!!

حالا دوستان عزیز ... هرکس اصولی رو تو نوشتن برنامه با اهمیت بالا میدونه بگه تا لااقل ندونستنام کامل شه!!


خیلی الان نا امیدم و کلا احساس میکنم حتی کد زنی هم بلد نیستم...  الان هم میخوام کمکم شروع کنم برم سراغ qt ... دوستان ابراز نظر بفرمایند!؟؟ خواهشا...

من برنامه نویسی به معنی چند خط کد زنی رو بلدم (یعنی هیچی بلد نیستم  ;)) این ترم هم درس اصول طراحی نرم افزار داشتیم و استاداین درس مارو با برنامه های تحلیل و طراحی برنامه مثل modelio   آشنا کرد..
 در طول این درس فقط و فقط و فقط فهمیدم که هیچی نمیدونم!!!  به استاد گفتم و استاد هم گفت تنها هدف خودش تو این درس هم همینه که فقط دایره ندانسته های مارو زیاد کنه..و ما بفهمیم که چه چیزهایی نمیدونیم..

اما چیزی که بر من گران آمد(!) این بود که وقتی استاد یه گریزی به اصول برنامه نویسی زد و مثلا گفت که :«باید وابستگی معکوس وجود داشته باشه » من دیگه از اونچیزایی که میدونستم هم دست شستم و برندانستن خود بطور 100 درصدی واقف شدم!!

حالا دوستان عزیز ... هرکس اصولی رو تو نوشتن برنامه با اهمیت بالا میدونه بگه تا لااقل ندونستنام کامل شه!!


خیلی الان نا امیدم و کلا احساس میکنم حتی کد زنی هم بلد نیستم...  الان هم میخوام کمکم شروع کنم برم سراغ qt ... دوستان ابراز نظر بفرمایند!؟؟ خواهشا...

سلام دوست عزیز. من کامپیوتر نخوندم و حتی رشته تحصیلیم زیرشاخه علوم انسانیه (علوم سیاسی) اما به برنامه نویسی علاقه مندم. یه چندتا پیشنهاد براتون دارم:
1- از فکر اینکه با کتابای فارسی به جایی برسید بیاید بیرون! کتابای فارسی یا ترجمه هستند که خیلی افتضاحند یا به ندرت توسط یکی و معمولا به قصد درآمدزایی نوشته شدند که بازم افتضاحند.
2- شما گفتید که می خواید qt کار کنید، دلیلش رو نمی دونم اما من پیشنهاد می کنم یه زبان ساده تر رو شروع کنید که بتونید مفاهیم برنامه نویسی رو توش به خوبی یاد بگیرید بعد برید سراغ هر زبان دیگه ای به راحتی می تونید از پسش بر بیاید.
3- من زبان جاوا رو پیشنهاد می کنم چون یادگیریش ساده است و منابع آموزشی فراوونی داره و قدرتش هم بر کسی پوشیده نیست.
4- واسه یادگیری جاوا کتابهای زیر رو به ترتیب پیشنهاد می کنم:
heed first java
head first object oriented programming
head first design patterns
کتابای فوق مال انتشارات فوق العاده حرفه ای oreilly هستند که کیفیتشون زبانزده. لازم به توضیحه که سری head first با استفاده آخرین متدهای آموزشی تولید شده که شما هیچوقت توی اونها احساس خستگی یا سردرگمی نمی کنید. اونقدر روون هستند که سخت می تونید ازشون دل بکنید.
5- برای برنامه نویسی جاوا از eclipse استفاده کنید و پلاگین jigloo رو هم بهش اضافه کنید تا به راحتی بتونید gui باهاش بسازید. قابلیتهای خوبی برای gui designing بهتون میده.
موفق باشید.
محدودیت تنها در ذهن ماست!