poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تمرین همون برنامه، با do while: 28- برنامه ای بنویسید که یک عدد از ورودی گرفته و تعداد ارقام آن را محاسبه و چاپ نماید(با do while) #include int main() { long int x; int c=0; cout cin>>x; while(x>=1) { c++; x/=10; } cout return 0; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تمرین یکی از تمارین قبلی، ایندفعه با while: 29- برنامه ای بنویسید که یک عدد از ورودی گرفته و حاصل جمع ارقام آن را چاپ نماید.(با while) #include int main() { long int x; int sum=0; cout cin>>x; while(x>=1) { sum+=x%10; x/=10; } cout return 0; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تمرین تمرین قبلی ولی با do while: 30- برنامه ای بنویسید که یک عدد از ورودی گرفته و حاصل جمع ارقام آن را چاپ نماید.(با do while) #include int main() { long int x; int sum=0; cout cin>>x; do { sum+=x%10; x/=10; }while(x>=1); cout return 0; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ در زیر تعدادی از توابع ریاضی مهم در ++C را آورده ام که برای استفاده از آنها باید هدر کتابخانه ای math.h را فراخوانی کنید: sqr(x): مجذور متغیر x sqrt(x): جذر متغیر x>=0 fmod(x): باقیمانده تقسیم x بر y pow(x,y): x به توان y abs(x): قدر مطلق x و تعدادی از توابع آشنا: log(x) log10(x) sin(x) cos(x) tan(x) //end 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تمرین 31-برنامه ای بنویسید که یک عدد و یک توان از ورودی گرفته، عدد را به آن توان رسانده و در خروجی چاپ کند.(با استفاده از توابع ریاضی) #include #include void main() { long x,y; cout cin>>x; cout cin>>y; cout } //end 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ همان طور که دیدید تا بحال ما از توابع آماده ی زبان سی پلاس پلاس استفاده میکردیم. حال میخواهم به معرفی روشی بپردازم که خودمان امکان نوشتن و تعریف تابع را داشته باشیم. توابع در ++C: برنامه ای که به این زبان نوشته میشود، حداقل شامل تابع main است که علاوه بر این میتواند از یک یا چند تابع تعریف شده توسط کاربر استفاده کند. تعریف تابع: روش اول: (لیست آرگومان ها) نام تابع نوع بازگشتی } بدنه تابع { مثال: int a(x,y,z) char x; int y; float z; { x='a'; } //end روش دوم: (...،آرگومان2 نوع2 ،آرگومان1 نوع 1) نام تابع نوع بازگشتی } بدنه تابع { مثال: int b(char x, int y, float z) { x='a'; } //end تعریف بخش های یک تابع: 1. نوع بازگشتی: نوع داده ای که قرار است تابع داده ای از آن نوع را به قسمتی که تابع را فراخوانی کرده است، برگرداند. مانند: int, float, double, char, void نکته: در صورتی که نوع بازگشتی void تعیین شود یا هیچ نوعی قرار نگیرد، تابع هیچ مقداری را بر نمیگرداند و فقط دستورات بدنه را اجرا و از آن خارج میشود. 2. نام تابع: اسامی انتخاب شده برای توابع باید از قواعد تولید شناسه پیروی کند. 3. لیست آرگومان ها: میزان، تعداد و نوع مقادیر ورودی یک تابع توسط لیست آرگومان های تابع مشخص میشود. نکته: اگر تابعی فاقد لیست آرگومان ها باشد، یعنی این تابع ورودی از طریق آرگومان هایش ندارد، لذا باید یا لیست آرگومان ها را خالی بگذاریم و یا اینکه از نوع داده ای void استفاده کنیم. 4. بدنه ی تابع: بدنه ی تابع قسمتی است که در آن دستورات یک تابع که باید روی مقادیر آرگومان هایش انجام شود، را مینویسیم. در این قسمت نیز همانند داخل تابع main امکان استفاده از تمامی دستورات زبان برنامه نویسی ++C را داریم. به دلیل حجم نسبتا بالای مطالب، محل تعریف تابع و دیگر نکات آن را در جلسات آتی بیان میکنم. 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ محل تعریف توابع: 1.تعریف تابع و بدنه ی آن قبل از تابع اصلی: (لیست آرگومان ها) نام تابع نوع تابع } بدنه { int main() { return 0; } //end 2. تعریف خطی (معرفی تابع قبل از main و تعریف آن بعد از main): ;(لیست آرگومان ها) نام تابع نوع تابع int main() { return 0; } //end (لیست آرگومان ها) نام تابع نوع تابع } بدنه { نکته: به دلیل ساختار top to down بودن در ++C، هنگامی که میخواهیم تابع را بعد از تابع اصلی(main) تعریف کنیم باید قبل از تابع اصلی آن را معرفی کنیم. نکته: هنگام تعریف خطی تابع حتما دقت میکنیم که بعد از پرانتز بسته ی لیست آرگومان ها، گذاشتن ; الزامی است. نکته: فراخوانی یک تابع، داخل تابع دیگر مجاز است ولی تعریف یک تابع در تابع دیگر مجاز نیست و خطا دارد. 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تو پست های قبل یکی از دوستان پروژه ای رو خواسته بودن که اون موقع به اندازه ی کافی وقت نداشتم و هل هلکی نوشتم که چند محدودیت برای ورود عدد داشت. در اینجا همون برنامه رو طوری نوشتم که تا بیش از 99 رقم رو پشت سر هم از کاربر میگیره و اون رو به حروف تبدیل میکنه. البته برای سادگی، از وکتور ها استفاده نکردم ولی اگر کسی خواست، میتونم اونو هم بزارم. #include #include int main() { RE:clrscr(); int s=0,i2=0,x[99]; char y[99]={0}; //Get number cout do { i2++; y[i2]=getche(); }while(y[i2]!=13); i2--; //recognize digits for(register int i=1;i2>=1;i2--) { x=y[i2]-48; i++; } i--; //Show number clrscr(); cout for(register int i3=i;i3>=1;i3--) cout cout //Translate for(;i>=1;i--) { if(s==1) { switch(x) { case 0:cout case 1:cout case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout } s=0; } else { if(i%3==2) { switch(x) { case 0:cout case 1:s=1;break; case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout } } else { switch(x) { case 0:cout case 1:cout case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout default:goto ESC; } } } if((x[i+2]==0&&x==0)||(x==0&&x[i-2]==0)) { cout } else { if(i%3==0) cout else if(i==4) cout else if(i==7) cout else if(i==10) cout else if(i==13) cout else if(i==16) cout else if(i==19) cout else if(i==22) cout else if(i==25) cout else if(i==28) cout else if(i==31) cout else if(i==34) cout else if(i==37) cout else if(i==40) cout else if(i==43) cout else if(i==46) cout else if(i==49) cout else if(i==52) cout else if(i==55) cout else if(i==58) cout else if(i==61) cout else if(i==64) cout else if(i==67) cout else if(i==70) cout else if(i==73) cout else if(i==76) cout else if(i==79) cout else if(i==82) cout else if(i==85) cout else if(i==88) cout else if(i==91) cout else if(i==94) cout else if(i==97) cout else if(i==100) cout ESC: } } gotoxy(0,22); cout getch(); goto RE; } //end 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ فراخوانی توابع: برای فراخوانی یک تابع در تابع اصلی، کافیست نام تابع به همراه مقادیر پارامتر های تابع(در صورت وجود) را بنویسیم. مثال: #include int f(int x, int y) { return x*y; } void main() { int a,b; cout cin>>a>>b; cout } //end نعریف پارامتر: به مقادیر یا متغیر هایی که هنگام فراخوانی یک تابع، جایگزین آرگومان های تابع میشوند، پارامتر گویند. در مثال قبل که f(a,b) را فراخوانی کردیم، مقادیر a,b جایگزین x,y در تابع شدند. یعنی x,y آرگومان های تابع هستند و a,b پارامتر های تابع محسوب میشوند. نکته: تابع میتواند آرگومان ورودی نداشته باشد که در این صورت میتوان در هنگام تعریف، نوع بازگشتی تابع را از نوع void معرفی کرد یا پرانتز جلوی تابع را خالی گذاشت. مقدار بازگشتی تابع: به مقداری که تابع بعد از اتمام عملیات به خود می گیرد، مقدار بازگشتی تابع میگویند که با return مشخص میشود. در مثال قبل، بعد از کلمه ی return عبارت x*y وجود دارد. یعنی x*y محاسبه شده و مقدار حاصل را در تابع میریزد. نکته: در صورتی که در یک تابع بیش از یک return وجود داشته باشد، return اول مقدار را بازگشت داده و مابقی دستورات اجرا نمیشوند. 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تابعی غیر بازگشتی که مقدار فاکتوریل یک عدد را به خود میگیرد: long fact(int x) { long y=1; while(x>=1) { y*=x; x--; } return y; } //end 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تابعی که یک عدد و یک توان به عنوان آرگومان ورودی گرفته و مقدار حاصل را بازگشت میدهد: long power(int x, int y) { long z=1; while(y>0) { z*=x; y--; } return z; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ توابع بازگشتی: همان طور که قبلا ذکر شد، امکان فراخوانی یک تابع در تابع دیگر همواره وجود دارد. خاصیت مهم اینجاست که در زبان ++C میتوان درون یک تابع، خود تابع را نیز با لیست آرگومانهای جدید فراخوانی کرد. از خاصیت بالا برای انجام کارهایی که به صورت تکرار محاسبات مراحل قبلی صورت میگیرند، میتوان استفاده نمود. در توابع بازگشتی، توجه به دو نقطه بسیار مهم است: 1.نقطه بازگشت نقطه بازگشت جایی است که باید خود تابع با آرگومان لیست جدید فراخوانی شود. یعنی به نقطه ین بست نرسیده ایم. 2.نقطه بن بست نقطه بن بست جایی است که در آنجا باید روند فراخوانی را که انجام داده ایم، بصورت بازگشت به عقب انجام دهیم تا جواب مطلوب حاصل شود. مثال: تابع بدست آوردن فاکتوریل عدد از نوع بازگشتی: unsigned long fact(int x) { if(x!=0) return (x*fact(x-1)); return 1; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ یک تابع بازگشتی برای محاسبه ی ب م م دو عدد به عنوان آرگومان ورودی: long bmm(int a, int b) { if(a return bmm(b,a); else if(b==0) return a; else return bmm(b,a%b); } //end 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تابعی که عددی به عنوان آرگومان ورودی گرفته و مقدار ارقام زوج آن را بازگشت میدهد. به عنوان مثال اگر آرگومان ورودی 1234 باشد، مقدار 42 را به خود میگیرد. long even(long x) { long y=0; while(x>=1) { if((x%10)%2==0) { y*=10; y+=x%10; } x/=10; } return y; } //end 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ تابعی برای تبدیل عدد ورودی به حروف انگلیسی از نوع بازگشتی. برای مثال عدد 123: one hundred twenty three void trans() { clrscr(); int s=0,i2=0,x[99]; char y[99]={0}; //Get number cout do { i2++; y[i2]=getche(); }while(y[i2]!=13); i2--; //recognize digits for(register int i=1;i2>=1;i2--) { x=y[i2]-48; i++; } i--; //Show number clrscr(); cout for(register int i3=i;i3>=1;i3--) cout cout //Translate for(;i>=1;i--) { if(s==1) { switch(x) { case 0:cout case 1:cout case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout } s=0; } else { if(i%3==2) { switch(x) { case 0:cout case 1:s=1;break; case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout } } else { switch(x) { case 0:cout case 1:cout case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout case 7:cout case 8:cout case 9:cout default: trans(); } } } if((x[i+2]==0&&x==0)||(x==0&&x[i-2]==0)) { cout } else { if(i%3==0) cout else if(i==4) cout else if(i==7) cout else if(i==10) cout else if(i==13) cout else if(i==16) cout else if(i==19) cout else if(i==22) cout else if(i==25) cout else if(i==28) cout else if(i==31) cout else if(i==34) cout else if(i==37) cout else if(i==40) cout else if(i==43) cout else if(i==46) cout else if(i==49) cout else if(i==52) cout else if(i==55) cout else if(i==58) cout else if(i==61) cout else if(i==64) cout else if(i==67) cout else if(i==70) cout else if(i==73) cout else if(i==76) cout else if(i==79) cout else if(i==82) cout else if(i==85) cout else if(i==88) cout else if(i==91) cout else if(i==94) cout else if(i==97) cout else if(i==100) cout ESC: } } gotoxy(0,22); cout getch(); trans(); } //end 4 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ توابع inline: اگر یک برنامه به روش ساخت یافته(با استفاده از توابع) پیاده سازی کنیم، از نقطه نظر زمان اجرای برنامه باعث بروز تاخیر به لحاظ فراخوانی یک تابع، اجرای آن و بازگشت به تابع اصلی میشود که سرعت اجرای برنامه را پایین می آورد. حال اگر یک برنامه کد اجرایی کوتاهی داشته باشد و در تابع اصلی یا توابع دیگر این تابع چندین بار فراخوانی شود، باعث بروز تاخیر زمانی زیادی میشود. لذا برای این گونه توابع که خاصیت گفته شده را دارا میباشند، راهکار تعریف به صورت inline تعریف شده است. بدین صورت که اگر ما در طی برنامه از کلمه کلیدی inline قبل از تعریف تابع استفاده کنیم، این امر موجب میشود که کد تابع در هنگام اجرای برنامه در جایی که تابع فراخوانی میشود کپی شده و دیگر تاخیر زمانی بابت فراخوانی، بازگشت و اجرا نداریم. قالب های تابع(function template): در توابع عم نام اگر تعداد آرگومان ها یکسان باشد و بدنه ی اجرایی تابع نیز به یک شکل باشد و فقط توابع در نوع بازگشتی و نوع آرگومانها تفاوت داشته باشند، می توان به جای نوشتن هر تابع از یک قالب تابع استفاده کرد. به شکل زیر و با کلمه ی کلیدی template: template T A ( T1, T2, ...) { ... } //end در بالا منظور از T هر نوع داده ای(مانند int) و از A نام تابع است. هم چنین T1, T2, ... آرگومان های تابع هستند. 3 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ آرایه های یک بعدی: تاکنون داده های ورودی و بقیه داده های مورد نیاز را در متغیر ها و ثابت ها ذخیره میکردیم. اما اگر تعداد ورودی ها زیاد باشد، نیاز داریم تعداد زیادی متغیر را تشکیل دهیم که این کار باعث میشود روند عملیات برنامه نویسی بسیار پیچیده شود. بنابراین برای جلوگیری از این مشکلات میتوانیم از امکان تعریف آرایه ها در زبان ++C بهره مند شویم. آرایه ها خانه های پشت سر هم در حافظه هستند که همگی از یک نوع و با یک نام و با شماره های خانه متفاوت(اندیس آرایه) هستند. روش تعریف آرایه یک بعدی: ;[طول آرایه]نام آرایه نوع آرایه روش تعریف یک آرایه یک بعدی که به آن لیست (List) هم میگویند به صورت فوق است. در این روش دقت میکنیم که نوع آرایه می تواند از انواع داده ها(Data Types) قابل استفاده در زبان ++C باشد و نام انتخابی برای آرایه چون یک شناسه است، باید از قوائد تولید شناسه در زبان ++C تبعیت کند. نکته: محل هر عضو از آرایه توسط شماره(اندیس) که در [] می گذاریم، مشخص میشود. نکته: اندیس شروع آرایه در زبان ++C صفر میباشد یعنی شماره گذاری خانه های آرایه از 0 شروع میشود و خانه ی اول آرایه اندیس 0 دارد. نکته: در زبان ++C اسم آرایه آدرس خانه ی اول آرایه است. 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ حالا که آرایه ها رو معرفی کردیم، سورس یک برنامه ی جالب و معروف میزارم که الگوریتمشو خودم نوشتم. این برنامه که اسمش مربع جادویی هست، ابتدا تعداد سطر و ستون رو که باید عددی فرد باشه از کاربر میگیره و بعد مربع رو درست میکنه. تو این مربع جمع اعداد هر سطر، ستون و ضربدری با هم برابره و هم چنین ضربدر چپ به راست، هر دفعه عددش یک واحد کم میشه. مثال(3X3): 8 1 6 3 5 7 4 9 2 #include #include #include #include void main() { int a[10][10],i,j,n,k=1; clrscr(); cout cin>>n; if(n%2==0 ||n>9) { cout getch(); exit(1); } else { for (i=0;i for (j=0;j a[j]=0; j=(n/2)+1; i=1; a[j]=k; for(k=2;k { i=i-1; j=j-1; if((i==0 &&j==0)||(a[j]!=0)) { i=i+2; j=j+1; } else { if(i==0) i=n; else if(j==0) j=n; } a[j]=k; } } cout for (i=1;i { for (j=1;j cout cout } getch(); } //end 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ سورس برنامه ای که از کاربر میپرسد روز اول سال چند شنبه است و براساس آن، چند شنبه بودن n امین روز سال را محاسبه میکند: #include void main() { int x,y,c; cout cin>>x; cout cin>>y; c=(y+x-1)%7; cout switch© { case 0:cout case 1:cout case 2:cout case 3:cout case 4:cout case 5:cout case 6:cout } } //end 2 لینک به دیدگاه
poor!a 15130 مالک اشتراک گذاری ارسال شده در 3 آذر، ۱۳۹۰ مقدار دهی اولیه به آرایه تک بعدی: در هنگام تعریف میتوان خانه های یک آرایه ی یک بعدی را مقداردهی اولیه نمود، در این حالت حداقل یک مقدار و حداکثر به تعداد عناصر آرایه میتوان مقدار دهی را انجام داد. مقدار دهی به آرایه هنگام تعریف آن باید از خانه ی اول، پشت سر هم و به صورت پیوسته انجام شود. مثال: int x[3] = {10}; int x[3] = {10, 20}; int x[3] = {10, 20, 30}; //end خالی گذاشتن بُعد آرایه هنگام تعریف: در زبان c++ در آرایه های یک بعدی فقط به شرطی میتوان بعد آرایه را خالی گذاشت که هنگام تعریف آن مقدار دهی نماییم، در غیر این صورت خطا خواهیم داشت. مثال درست: int x[] = {10, 20, 30}; //end 2 لینک به دیدگاه
ارسال های توصیه شده