سلام دوستان! من میخوام از طریق ایمیل بادوستی کتاب جعفرنژاد رو بخونیم و تمرین هاشو حل کنیم و برای هم بفرستیم که اینطوری رفع اشکال هم بشه!
Printable View
سلام دوستان! من میخوام از طریق ایمیل بادوستی کتاب جعفرنژاد رو بخونیم و تمرین هاشو حل کنیم و برای هم بفرستیم که اینطوری رفع اشکال هم بشه!
سلام
خب الان چه کمکی از دست بچه های سایت برمیاد ؟:n13:
خب توضیح دادم که! یجورایی یه گروه تشکیل میدیم که برنامه نویسیمونو تقویت کنیم! ازطریق ایمیل. فقط تمرین هاو پروژه ها رو حل میکنیم و برای مقایسه و رفع اشکال برای هم میفرستیم!
فکر خوبیه...
از صفر میخوایم شروع کنیما!! من و دوستان تقریبا فصل 2 هستیم! اگه موافقید کتاب رو تهیه کنید و بخونید اولاش خیلی آسونه!
بنده تمامي اين مسائل رو قبلا مطالعه كردم،البته نه از روي كتاب آقاي قومي نژاد.
ولي ذهن هميشه بايد فعال باشه و آماده ي يادگيريه چيزهاي جديد باشه..
ترجيحا سوالهايي رو كه مشكل در حل اون داريد رو اينجا بزاريد يا برام ميل كنيد تا باهم حل كنيم..
موفق باشيد.
Mehrdad Sh.
خیلی ممنون از پیشنهادتون! :n01: تمرین های که مشکله توی همین تاپیک بذارم؟؟ که بقیه هم استفاده کنن!
فكره خوبيه...نقل قول:
Mehrdad Sh.
برنامه ای بنویسید که خروجی زیر را دقیقا به همین شکل تولید کند: (برای این سوال اون خط و بالای خط رو نمیدونم چطور تولید کنم!!)
الان خروجي چيه ؟؟نقل قول:
Mehrdad Sh.
سلام
برای تولید اون خط باید یه حلقه ی FOR بنویسیم و تو اون حلقه از چاپ ( _ )استفاده کنیم که اون خط تولید بشه....
این برنامه همون برنامه جدول ضرب معمولیه که با استفاده از دوتا حلقه تو در تو میشه حلش کرد فقط گام حلقه دوم هربار در 10 ضرب میشه
برنامه ای بنویسید که خروجی زیر را دقیقا به همین شکل تولید کند:
کد:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
cout << "x\tx*10\tx*100\tx*100\n" << "______________________________" << endl;
for(int i=1; i<=3 ; i++)
{
for(int j=1; j<=1000 ; j*=10)
cout << i*j << "\t";
cout << endl;
}
cin.get();
}
برنامه ای بنویسید که مقدار e^x را محاسبه کند:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
(در این برنامه ورودی ها فقط x هست؟ یا n هم باید کاربر وارد کنه؟)
این کد درسته؟
کد:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int x, n;
float sum=0;
cout << "please enter x and n\n" << "x= ";
cin >> x;
cout << "n= ";
cin >> n;
for( int i=1; i<=n ; i++)
{
int power=1;
for (int j=1; j<=i; j++)
{
power*=x;
}
int fact=1;
for (int k=1; k<=i ; k++)
{
fact*=k;
}
sum+= static_cast<float> (power)/fact;
}
cout << "e^x= " << sum+1;
cin.get();
cin.get();
}
اين سري مك لوران هستش و هرچقدر n بيشتر باشه ،دقت در اندازه گيري بالاتر ميره..نقل قول:
ميشه از كاربر پرسيد كه با چه دقتي ميخواد محاسبه كنه،هرچند كه اين رو ننويسيد اشكال نداره ..
Mehrdad Sh.
برای اینکه دقتش بره بالا باید به خروجی setprecision اضافه بشه؟
اگر در قسمتی از کدها جور دیگه ای هم میشه مسئله رو حل کرد و روش بهتری بلدید لطفا بگید! ممنون:n16:
برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده، دانشجویی را که دومین معدل را از نظر بزرگی دارد، پیدا کند و به خروجی ببرد! (سوال یکم برام نامفهومه!)
هرچقدر تعداد n بزرگتر باشه،دقت برنامه بالاتر ميره..نقل قول:
Mehrdad Sh.
این برنامه رو من خیلی وقت پیش نوشتم ،به صورت زیر:نقل قول:
فکر کنم بهینه تر بودنش قابل تشخیص باشه.کد:#include <iostream>
#include <conio>
#include <math>
int fact (int);
main()
{ int b,x,c; //b=factorial
float sum=1,d;
cout<<">>| the Program is About calculating e^x in intervals y times |<<\n\nEnTer a number as x,y :\n";
cin>>x>>c;
while(c>0)
{b=c;
d=1;
while (b>0)
{
d*=b;
b--;
}
sum+=(pow(x,c)/d);
c--;
}
cout<<"\nyour result is: \a "<<sum;
getch();
}
فرض كن ميخواي معدل ٢٠ تا دانشجو رو بگيري بعلاوه ي شماره ي دانشجويي.٢تا آرايه نياز داري كه اطلاعات رو واردشون كني.نقل قول:
حالا،فرض كن بهترين معدل بين دانشجوها ماله حسن آقا هست با نمره ي ١٧.٣٤ هست.
بعد از حسن آقا،صمد آقاي گل با نمره ي ١٧.٢٠ بهترين نمره رو بين دانشجو ها داره.
خروجي تو بايد اسم و شماره ي دانشجويي صمد آقا باشه..
Mehrdad Sh.
ببین دوست من اگر واقعا میخواهی برنامه نویسی کنید باید چند نکته رو همیشه رعایت کنید این نکات قبل بهینه سازی ، الگوریتم ، زبان برنامه نویسی و . . . جای داردنقل قول:
1. همیشه و همیشه برای برنامه هایت کامنت بزار هرچند که برنامه بسیار ساده و کوتاه باشد - حاضرم شرط ببنیدم اگر یکماه دیگه به برنامه خودت نگاه کنی متوجه نخواهید شد این برنامه چه کاری انجام میدهد وقتی در ابتدای کار یک کامنت کوچیک قرار میدهید مثلا برنامه محاسبه تابع ایکس - با همین یک خط ذهن شما به سرعت به سمت برنامه هایی میرود که برای محاسبه توابع نوشته اید حال اگر این کامنت ها بیشتر باشد تمرکز بیشتری بر روی برنامه خواهید داشت
2. همیشه و همیشه نام های مناسب برای متغییرهایت استفاده کن . من نمیدونم چرا اکثرا برای دوتا حلقه از متغییر i و j استفاده میکنند حتی در برنامه های که قرار است به مشتری تحویل داده شود
دو حالت زیر رو در نظر بگیر
حالت اول - i , j , k , n ,x
حالت دوم - row , column , f_number , L_number , result
به نظرت کدوم رو بهتر میتونی بخوانی و درک کنی قطعا حالت دوم بسیار در برنامه نویسی مناسب است - وقتی از حالت اول استفاده میکنید فقط و فقط شما هستید که برنامه رو متوجه میشوید اما اگر حالت دوم استفاده شود برنامه خوانایی دارد و همه به راحتی میتوانند ان را درک کنند
این مسئله رو میشه از راههای زیادی حل کرد ولی چون مسائل یک کتاب که بنده تا حالا نخوندم رو دارید حل می کنید باید با چیزهایی که تا الان خوندید حلش کنید منم ساده ترینش رو می گم ان شالله قسمتهایی رو که می گم خونده باشید.نقل قول:
برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده، دانشجویی را که دومین معدل را از نظر بزرگی دارد، پیدا کند و به خروجی ببرد! (سوال یکم برام نامفهومه!)
شما فقط می خواید دوتا داده رو که مربوط به هم هستند رو دریافت و ذخیره کنید بهترین کار استفاده از یک آرایه دو بعدیه و چون تعداد داده مشخص و تعداد دانشجو نا مشخصه آریه ما به شکل زیره :
اگه با آرایه های پویا آشنا شدید باید از اونها استفاده کنید .کد:Array[n][2]
قسمت دومش می تونید از الگوریتم های مرتب سازی استفاده کنید و آرایه رو مرتب و عنصر دوم رو به عنوان دومین معدل بر گردونید.می تونید بزرگترین عنصر رو پیدا کنید و جاش رو یا عنصر اول عوض کنید بعد از میان عنصرهای باقیمانده بزرگترین عنصر که میشه همون دومین معدل بزرگ رو پیدا کنید.کلی کار دیگه هم میشه کردم بقیه اش با خودتون
این تمرین های فصل دو هست که نتونستم حل کنم! و هنوز به آرایه ها نرسیده!
این برنامه فقط شماره دانشجویی و معدل n دانشجو رو میگیره! ولی بدون آرایه چطوری میشه معدلهارو با هم مقایسه کنه؟؟؟
کد:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int st_id;
float avg;
char answer='y';
while (answer== 'y')
{
cout << "\nStudent_ID: ";
cin >> st_id;
cout << "\nAverage: ";
cin >> avg;
cout << "\nDo you want to continue (y/n)? ";
cin >> answer;
}
cin.get();
cin.get();
}
نقل قول:
يكم پيچيده شد،ببين
شما الان ٨ تا متغير نياز داري.
يكي ماكسيمم مطلق رو نگه ميداره.
يكي ماكسيمم نسبي كه همون بزرگترين عدد بعد از ماكسيمم مطلق هست.
٤ تا متغير هم براي مشخصات ٢ تا دانشجوي مطلق و نسبي هم بايد در نظر بگيري.
٢ متغير هم براي گرفتن مشخصات دانجوي جديد..
متوجه شديد؟
باراهنمایی شما تونستم این برنامه بنویسم!!ولی اگه کاربر معدل رو صعودی وارد کنه برنامه با مشکل مواجه میشه! مثلا این اعداد 12، 14، 19
ولی حتی اگه به این شکل وارد کنه درست جواب میده 19، 12، 14. فکر کنم در کل ماکسیمم مطلق باید اول بیاد!!!
کد:
// print second maximum average
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int st_id, max2_id, max1_id;
float avg, max1=0 , max2=0;
char answer='y';
while (answer== 'y')
{
cout << "\nStudent_ID: ";
cin >> st_id;
cout << "\nAverage: ";
cin >> avg;
if( avg > max2 )
{
if( avg > max1 )
{
max1= avg;
max1_id= st_id;
}
else
{
max2=avg;
max2_id= st_id;
}
}
cout << "\nDo you want to continue (y/n)? ";
cin >> answer;
}
cout << "second maximum average= " << max2 << "\nStudent ID= " << max2_id;
cin.get();
cin.get();
}
شما اولین کاری که باید بکنید (که نکردین) اینه که مساله رو خوب بخونید، گفتهنقل قول:
برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده،دانشجویی را که دومین معدل را از نظر بزرگی دارد، پیدا کند و به خروجی ببرد! (سوال یکم برام نامفهومه!)
برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده(اصلا نگفته معدل تمام این n نفر ذخیره بشه بنابراین اصلا نیازی به آرایه نیست)max1=0 , max2=0 در نظر گرفتین شرط (if( avg > max2 حتما درست درمیاد شرط بعدی (if( avg > max1 هم حتما درست درمیاد بنابراین max1 میشه 12، خب حالا کاربر 14 رو وارد میکنه توجه کنید که در این حالت الان 12 میشه دومین معدل و برنامه شما اگر الان تموم بشه باید 12 رو به عنوان دومین معدل بتونه نمایش بده که نمیده چون شرط (if( avg > max2 مجددا درسته (چون هنوز max2==0 در ضمن عدد 12 هم در حافظه از بین میره) حالا کاربر 19 رو وارد میکنه و شرط (if( avg > max2 حتما درست درمیاد شرط بعدی (if( avg > max1 هم حتما درست درمیاد بنابراین قاعدتا خروجی برنامه شما عدد صفر میشه بجای 14 در صورتیکه عدد 14 هم در حافظه از بین میره.
در ضمن گفته n نفر، بنابراین شما باید عدد n از کاربر بگیرین و به تعداد این عدد معدل و شماره دانشجویی از ورودی بخونید(یعنی حلقه شما باید n بار اجرا بشه) در صورتیکه شما یک حلقه while نوشتین که اگر کاربر N زد خارج بشه اگر Y دوباره معدل بگیره.
دومین کار اینه که باید قدم به قدم برنامه تون رو به همراه متغیر ها trace کنید، حالا چه رو کاغذ چه با debugger کامپایلرتون.
اما دلیل اینکه برنامه شما درست کار نمی کنه اینه که فرض کنید کاربر رو معدل های 12و14 و19 رو بترتیب وارد کنه در این حالت اگر الگوریتم شما درست باشه باید معدل 14 با شمار دانشجویی اون دانشجو چاپ بشه،
با توجه به اینکه شما
کافیه یه بار دیگه فکر کنید و الگوریتم تون رو عوض کنید، مساله رو همیشه به شکل ساده تر حل کنید بعد بسطش بدین مثلا فرض کنید الان میخواین یه برنامه بنویسید که 3 تا عدد رو از ورودی بخونه و دومین عدد بزرگتر رو چاپ کنه.
پس فعلا این سه مطلب تو ذهنتون باشه اول خوب خوندن مساله دوم اگر براتون سخت بود یا درست جواب نداد به مساله کوچکتری تقسیمش کنید، سوم trace کردن.
اگر یه حالتی مثل ذخیره ایجاد نشه چطوری میتونه بین اعداد مقایسه انجام بده و توی سوالم گفته پیدا کنه(هیچ ترتیبی وجود نداره) ؟؟ به مسائل کوچیک تقسیمش کردم و تونستم برنامه ای بنویسم که فقط ماکسیمم مطلق رو پیدا کنه ولی دومین ماکسیمم نشد!!
اینو خودت 3/4 بار ببینی با دقت میفهمی چی بچیه.
این فقط عدد میگیره و بزرگ و بزرگترین رو نشون میده و شماره دانشجویی نداره.
من نمیدونم این جعفر نژاد چی از جون این دانشجوها میخواد اه اه.
کد:#include <iostream>
using namespace std;
int main(){
int FirstMax = 0, SecMax = 0, Temp = 0;
int Counter;
cout << "Enter loop counter: ";
cin >> Counter;
for (; Counter > 0; --Counter){
cout << "Number " << Counter << ": ";
cin >> Temp;
if (Temp > FirstMax){
SecMax = FirstMax;
FirstMax = Temp;
continue;
}else if (Temp > SecMax){
SecMax = Temp;
}
}
cout << "First MAX: " << FirstMax << endl;
cout << "Second MAX: " << SecMax << endl;
return 0;
}
چرا کدش رو اینجا ننوشتین؟ خب یه راهنمایی میکنم بعد دیگه باید بتونید راحت بنویسید، قراره 5برنامه ای بنویسید که تا عدد از ورودی بگیرد و دومین ماکزیمم رو پیدا کند: فرض کنید در ابتدا اولین عدد ورودی هم بزرگترین مطلق هست هم دومین عدد بزرگ بعد حلقه رو شروع کنیدو ورودیهای بعدی رو بگیرین حالا فکر کنید روی بقیه برنامه که بدنه حلقه و دستورات شرطی(در ضمن در این حالت حلقه باید یکی کمتر کار کنه چون یکی از پنج عدد رو قبلا از ورودی گرفتیم ).نقل قول:
اگر یه حالتی مثل ذخیره ایجاد نشه چطوری میتونه بین اعداد مقایسه انجام بده و توی سوالم گفته پیدا کنه(هیچ ترتیبی وجود نداره) ؟؟ به مسائل کوچیک تقسیمش کردم و تونستم برنامه ای بنویسم که فقط ماکسیمم مطلق رو پیدا کنه ولی دومین ماکسیمم نشد!!
در ضمن همیشه کد رو خودتون بنویسید اصلا به کد دیگران نگاه نکنید تا خودتون فکر نکنید و ننویسید یاد نمیگیرین.
ولی اگر بفرض صورت مساله بجای معدل دانشجویان مقایسه اعداد حقیقی باشه و شامل منفی هم باشه برنامه شما درست کار نمیکنه. یعنی اگر بفرض به این برنامه 5- ، 22- و 24 بدیم 5- رو جواب نمیده.نقل قول:
فکرکنم درست شد! *نکتش این بود که اولین ورودی هم ماکسیمم مطلقه هم دومین ماکسیمم!
کد:
// Print second maximum average and student id
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int max1, max2, st_num, st_id, st_id1, st_id2;
float avg;
cout << "Please enter number of students: ";
cin >> st_num;
cout << "\nStudent_ID: ";
cin >> st_id;
cout << "Average: ";
cin >> avg;
max1= avg;
st_id1= st_id;
max2= avg;
st_id2= st_id;
for ( int num=1 ; num < st_num ; num++ )
{
cout << "\nStudent_ID: ";
cin >> st_id;
cout << "Average: ";
cin >> avg;
if( avg>max1 )
{
max2= max1;
st_id2= st_id1;
max1=avg;
st_id1= st_id;
}
}
cout << "\nSecond Maximum Average: " << max2 << "\nStudent_ID: " << st_id2;
cin.get();
cin.get();
}
اصلا شما بگو اعداد نجومی بجای معدل, مهم نیست! یه الگوریتم سادست 2 تا دونه مقایسه ساده داخلشه! دیگه این کلا چی هست که بخواد رو مثبت درست باشه رو منفی غلط؟؟!نقل قول:
ولی اگر بفرض صورت مساله بجای معدل دانشجویان مقایسه اعداد حقیقی باشه و شامل منفی هم باشه برنامه شما درست کار نمیکنه. یعنی اگر بفرض به این برنامه 5- ، 22- و 24 بدیم 5- رو جواب نمیده.
من 20 بار اعدادی که نوشتین رو تست کردم در حالات مختلف و هیچ مشکی وجود نداشت. تنها چیزی که هست و مهم نیست اینه که مقدار اولیه متغییر ها 0 هست که میشه براحتی تغییرش داد.
فایل باینری:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شدیدا مخالفم. بهترین راه تو هر کاری نه فقط برنامه نویسی اینه که شما نمونه های مختلف رو ببینید و ایده بگیرید.نقل قول:
همیشه کد رو خودتون بنویسید اصلا به کد دیگران نگاه نکنید
یه کتاب (آموزش هر علومی که تو جهان شناخته شده) به من نشون بدید که داخلش مثال و نمونه نباشه!
یه معلم روی کره زمین به من معرفی کنید که بدون هیچ مثال و نمونه جوابی درس بده بعدشم امتحان بگیره!
....
ممنون از توصیه هاتون! اگه موافق باشیدسوال بعدی: برنامه ای بنویسید که یک عدد اعشاری مثل 643.21 را خوانده، وارون آن را بیابد. وارون این عدد 12.346 است. ( برنامه وارون عدد صحیح میتونم بنویسم ولی با اعشار نتونستم)
شما اصلا متوجه منظورم نشدین منظور من اصلا این نبود که مثال بده! مسلما هر کتاب برنامه نویسی باید کلی مثال درش باشه، اما منظور این بود که در حل تمرین و نوشتن برنامه اگر کسی به مشکل خورد بخصوص اگر کسی که میخواد از پایه و ابتدا الگوریتم و برنامه نویسی یادبگیره اگر بجای اینکه بهش راهنمایی کردکه خودش برنامه رو بنویسه بهش مستقیما جواب یا سورس کد داد به ضررشه اینجوری بجای اینکه خودش فکر کنه و کد بزنه و بهتر یاد بگیره صرفا به جواب یکنفر دیگه رسیده، توصیه من به ایشون برای این بود که سورس رو نگاه نکنه. برنامه شما هم سورس نداشت یه فایل exe بود که OS من اصلا exe اجرا نمیکنه به هر حال اگر تست کردین درسته حتما درسته دیگه چون خیلی چیز ساده ییه...نقل قول:
كجاش مشكل داري؟نقل قول:
Mehrdad Sh.
با اعشار بلد نیستم وارون چطور بدست میاد! باید برنامه طوری نوشته بشه که قبل و بعد اعشار را جداگانه تشخیص بده؟
آره.نقل قول:
براي بدست اوردن تعداد ارقام اعشار،اون عدد رو تا زماني كه اعشارش برابر صحيحش نشده در ده ضرب كن.
براي بدست آوردن تعداد ارقام صحيح ،عدد رو تا زماني كه مقدار صحيحش صفر نشده بر ده تقسيم كن.
براي ادامه راههاي متفاوتي وجود داره.
خودت روش فكر كن چون چيزي نيست كه نتوني ؛)
Mehrdad Sh.
دوستان متاسفانه نتونستم حلش کنم! بعداز اعشار و قبل از اعشارو مثل دوتا عدد جدا برخورد میکنه و وارونشون میکنه! ولی اعشار یعنی نقطش درست بین اعداد قرار نمیگیره! !
ميشه الگوريتم يا همون روش حل مسئله تون رو توضيح بديد؟نقل قول:
Mehrdad Sh.