لطفا كمك كنيد:برنامه اي كه تمام اعداد اول زير 1000 را چاپ كند؟ (به زبان ++c )
|







لطفا كمك كنيد:برنامه اي كه تمام اعداد اول زير 1000 را چاپ كند؟ (به زبان ++c )
|
|








بفرمایید.
هرچند که خودم مخالف این بودم که کد را در اختیار بگذارم و بیشتر راهنمایی کنم تا خودتان برنامه را بنویسید...
ولی خب... به درخواست مدیر سایت کد را براتون گذاشتم.
سوالی در مورد اون بود بگین تا توضیح بدم
و این هم خروجی برنامه:کد:// project created on 10/25/2008 at 6:42 PM #include <stdio.h> bool IsPrime(int p) { for(int i=1;i<=p;i++) if(i==1 || i==p) continue; else if(p % i==0) return false; return true; } int main (int argc, char *argv[]) { for(int i=1;i<=1000;i++) { if(IsPrime(i)) printf("%d ",i); } return 0; }
البته میشه از دستور cout به جای Printf استفاده کرد که فرم تابع main در برنامه به شکل زیر در خواهد آمد:کد:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997
و حتما باید فایل iostream.h در ابتدای کار include شودبه یکی از دو فرم زیر:کد:int main (int argc, char *argv[]) { for(int i=1;i<=1000;i++) { if(IsPrime(i)) cout<<i<<" "; } return 0; }
کد:#include <iostream> یا #inculde "iostream.h"
اطلاعیه مورخ پنج شنبه۱۲ آذر ماه ۱۳۸۸ :
طبق آخرین اخبار.... محل خدمتی من عوض شد و روزی که رفتیم تهران انداختنمون بیرون گفتن باید بری شهید ادیبی.
خلاصه ما رهسپار مرزن آباد که وابسته به چالوس هست شدیم. پادگان شهید ادیبی ناجا.
این بار خواستید کمپوت بیارید و آجیل باید بیایید: چالوس - مرزن آباد - پادگان شهید ادیبی ناجا
بگید با حسین کار دارم همه میشناسن. گردان ۱ گروهان ۴ .


عزیز من کارت خوبه ولی برنامه رو میشه سریع ترش کرد فقط کافیه کد بالا رو یعنی:
for(int i=1;i<=p;i++)i
رو با کد زیر عوض کنین:
for(int i=1;i<=(p/2);i++)i
(اون i آخر رو پاک کنین)
اما دلیلش اینه که واسه پیدا کردن عدد اول باید مقسوم علیه هاشو پیدا کنین که واسه این کار کافیه تا نصف اون عدد چک بشه یعنی تا p/2 تو برنامه بالا........![]()


عزیز من کارت خوبه ولی برنامه رو میشه سریع ترش کرد فقط کافیه کد بالا رو یعنی:
for(int i=1;i<=p;i++)i
رو با کد زیر عوض کنین:
for(int i=1;i<=(p/2);i++)i
(اون i آخر رو پاک کنین)
اما دلیلش اینه که واسه پیدا کردن عدد اول باید مقسوم علیه هاشو پیدا کنین که واسه این کار کافیه تا نصف اون عدد چک بشه یعنی تا p/2 تو برنامه بالا........![]()


ببخشید میشه فلوچارت این برنامه رو به من بگین یا اگه به زبان فرترن کمکی بتونین در مورد این برنامه به من کنین ممنون میشم.


فلوچارتش رو که حال ندارم بکشم ولی به صورت الگوریتمیک توضیح میدم تا بهتون کمکی بشه.![]()
روال کار بر این اساس هست که در تابع اصلی برنامه ما باید اعداد اول ۱ تا ۱۰۰۰ را چاپ کنیم. پس به یک حلقه نیاز داریم که از یک تا ۱۰۰۰ تکرار شود ما در زبان سی از حلقه for استفاده میکنیم و از متغیر حلقه که در هر مرحله به ترتیب اعداد ۱ تا ۱۰۰۰ را پیمایش میکند برای محاسبات استفاده میکنیم.
برای تک تک این اعداد ما باید مقسوم علیه های انها را پیدا کنیم ... مثلا فرض کنید ما به عدد ۱۸ رسیده ایم، باید مقسوم علیه های این عدد را پیدا کنیم. برای اینکه روال کار قشنگ باشه من اومدم و روال پیدا کردن مقسوم علیه های یک عدد را داخل تابعی به نام IsPrime قرار دادم که یک پارامتر ورودی دارد و آن هم عدد مورد نظر هست که میخواهیم مقسوم علیه های آن را پیدا کنیم. یعنی این تابع با دریافت عدد مورد نظر، مقسوم علیه های آن را پیدا میکند. خروجی این تابع پس از بررسی مقسوم علیه ها یا درست True است و یا غلط یا False است. یعنی یا عدد مورد نظر ما اول بوده یا خیر.
روال کار تابع IsPrime :
در این تابع ما باید مقسوم علیه ها را پیدا کنیم. برای این کار کافی اس که یک حلقه تکرار شونده داشته باشیم که از عدد ۱ شروع شود ... انتهای این حلقه کافی است که برابر نصف عدد ما باشد. مثلا اگر قرار است مقسوم علیه های عدد ۱۸ پیدا شود کافی است که ما تا عدد ۹ پیش برویم. چراکه همیشه بزرگترین مقسوم علیه یک عدد از نصف آن عدد کوچکتر و یا مساوی آن است.
در تابع من دو شرط را بررسی کردم یکی اگر متغیر حلقه برابر ۱ هست نیازی به چک کردن آن نباشد چرا که همه اعداد بر ۱ بخش پذیرند.
اما در غیر این صورت اگر باقیمانده تقسیم عدد مورد نظر که در پارامتر ورودی این تابع با P مشخص شده است، اگر باقیمانده تقسیم عدد مورد نظر بر متغیر حلقه ما برابر مقدار 0 شد، یعنی که این عدد بر مقدار فعلی متغیر حلقه بخش پذیر است. و این یعنی که عدد مورد نظر یعنی P بر یک عددی غیر از ۱ و خودش بخش پذیر است پس یعنی این عدد اول نیست پس باید در همین لحظه از تابع با خروجی False خارج شویم return False
اما اگر حلقه ما به پایان رسید و خروجی False نداشتیم پس عدد ما غیر از ۱ و خودش به هیچ عدد دیگری بخش پذیر نبوده و باید خروجی True داشته باشیم return True
در تابع اصلی برنامه که main نام دارد و تابع IsPrime در آن صدا زده شد، خروجی تابع IsPrime را بررسی میکنیم. اگر خروجی True یا درست بود یعنی عدد اول بوده و باید متغیر کنونی حلقه ما که از ۱ تا ۱۰۰۰ تکرار میشود چاپ گردد ولی اگر False یا غلط بود، نیازی به چاپ آن نیست.
این روال کلی برنامه چاپ اعداد اول ۱ تا ۱۰۰۰ بود.
حال اگه بازم گویا نیست بگین تا روی فلوچارتش کار کنم و آنرا براتون بذارم . البته کشیدنش یکمی زمان میبره.![]()
![]()
اطلاعیه مورخ پنج شنبه۱۲ آذر ماه ۱۳۸۸ :
طبق آخرین اخبار.... محل خدمتی من عوض شد و روزی که رفتیم تهران انداختنمون بیرون گفتن باید بری شهید ادیبی.
خلاصه ما رهسپار مرزن آباد که وابسته به چالوس هست شدیم. پادگان شهید ادیبی ناجا.
این بار خواستید کمپوت بیارید و آجیل باید بیایید: چالوس - مرزن آباد - پادگان شهید ادیبی ناجا
بگید با حسین کار دارم همه میشناسن. گردان ۱ گروهان ۴ .
|
در حال حاضر 1 کاربر در حال بازدید از این تاپیک هست.(شامل 0 کاربر و 1 مهمان)
|
|
|
|
|
|