• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

تمرین هایی برای سی++

corona

کاربر تازه وارد
تاریخ عضویت
12 می 2007
نوشته‌ها
9
لایک‌ها
0
محل سکونت
mashhad
دوستان این برنامه نقطه شروع حرکت اسب رو میگیره بعد حرکات اسب توی صفحه شطرنج رو با انتخابهای شما انجم میده (فقط هشت حرکت)






4pk329y.jpg
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
اون برنامه قبلی مشکلش تو اور لود کردن عملگر های دو عملوندی مثل + هست شما خواستید که به صورت سه عملوندی پیاده سازیش کنی

complex operator+(int,complex);

اینطوری شما دو تا عملوند با پارامتر بهش می فرستی یه عملوند هم که با this می یاد می شه سه تا در حالی که پلاس یه عملگر یک یا دو متغییره هست برای تعریف عدد ب علاوه ابجکت شما مجبورید از توابع آزاد استفاده کنید یه راه خوب می تونه این باشه
کد:
complex operator+(int n,complex ob)
{
	return ob+n;
}
این تابع رو به صورت خارجی تعریف کنید
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
محمد جان نمی دونم چرا اصرار داشتی که اون برنامه رو اینقدر طولانی بنویسی معمولا وقتی برنامه طولانی بشه باعث ایجاد اشتباههات سهوی می شه وخطایابیش هم سخت تره
در مورد استفاده از تابع هم بهتره یکم بیشتر تمرین کنی تابع خودش می تونه یه مقدار رو برگردونه پس لازم نیست که ما مقدار برگشتی رو void تعریف کنید بعد چیزی که می خواییم برگدونه رو به کمک رفرنس برگدونیم یه نکته دیگه هم اینکه اگه شما می خوایید به کمک تعریف اون ماکرو قابلیت توصیه رو به برنامه تون بدید باید همه جا از اون مارکو ها استفاده کنید جاهایی که شما شرط بزرگتر بودن از هفت رو چک می کنید مثل ایکه اون ماکرو ها رو ریختید دور و با تغیر ماکرو ها برنامه درست کار نمی کنه
من کدت یکم دستکاری و کوتاه تر کردم
کد:
/**
  Name:The MOVMENT OF A HOURSE IN A CHESS
  Copyright:wWw.CodeCorona.cOm
  Author:arash_j13
  May 29,2007
*/

#include <iostream>
#include <conio.h>
#include <cstdlib>
#define row 8
#define col 8
using namespace std;
//***************************FUNCTION PROTOTYPE*********************************
void print(int[row][col]);
void input(int&,int&);
void move (int[row][col],int,int);
bool motion(int&,int&,int);
//*****************************MAIN FUNCTION************************************
int main()
{
    int x,y,table[row][col]={0};
    input(x,y);
    move(table,x,y);
    cout<<"the final table to made with your movment is:\n\n";
    print(table);
    system("pause");
    return EXIT_SUCCESS;
}
//******************************************************************************
void input(int&x,int&y)
{
    char z=0;
    do
    {
       system("cls");
       cout<<z<<"please enter the row for start between(0 -7):";
       cin>>x;
       cout<<"\nplease enter the coloum for start (0-7):";
       cin>>y;
       z='\a';
    }
    while((x<0||x>col-1)||(y<0||y>row-1));
}
//******************************************************************************
void move(int t[row][col],int x,int y)
{
    t[x][y]=1;
    cout<<"the start point for this board is row "<<x<<" && coloum "<<y<<endl<<endl;
    for(int k=0,number ; k < 8 ; )
    {
        char alert=0;
        do
        {
            cout<<alert;
            system("cls");
            print(t);
            getch();
            cout<<"\nthe poosible movment in the board."
               "\n\nnumber 1: 2 cell top && 1 cell left"
               "\n\nnumber 2: 2 cell top && 1 cell right"
               "\n\nnumber 3: 2 cell left && 1 cell down"
               "\n\nnumber 4: 2 cell left && 1 cell top."
               "\n\nnumber5: 2 cell right && 1 cell down"
               "\n\nnumber 6: 2 cell right && 1 cell top"
               "\n\nnumber 7: 2 cell down && 1 cell right"
               "\n\number 8: 2 cell down && 1 cell left."
               "\n \n\nplease choos one of this movment:";
            cin>>number;
            alert='\a';
        }
        while(number<1 || number>9);


        if(!motion(x,y,number))
             cout<<"\athis movment can not be done in chess.\n";
        else
            t[x][y]=++k;

    }
}
//******************************************************************************
void print(int t[row][col])
{
    cout<<"       ";
    for(int i=0;i<row;i++,cout<<endl<<endl<<"       ")
        for(int j=0;j<col;cout<<t[i][j++]<<"   ");
}
//******************************************************************************
bool motion(int &x,int&y,int t)
{
    int h[]={-2,-2,1,-1,1,-1,2,2};
    int v[]={-1,1,-2,-2,2,2,1,-1};
    int xt,yt;
    xt=h[--t]+x;
    yt=v[t]+y;
    if(xt < 0 || xt > col-1 || yt < 0 || yt > row-1)
        return false;

    x=xt;
    y=yt;
    return true;
}
 

هستی

همکاربازنشسته
تاریخ عضویت
12 آپریل 2007
نوشته‌ها
3,894
لایک‌ها
709
سن
37
محل سکونت
My Dreams
سلام.دوستان راستش استادمون واسه پروژه آخر ترم تو زبان سی پلاس پلاس گفته تقویم از سال 1386 تا 1400 رو بنویسید با شرط اینکه هر سال که اسفند 30 روز میشه (کبیسه) هم در نظر گرفته بشه. و اگه کاربر هر روز از سال رو وارد کنه اون بهش بگه چند شنبه میشه و تقویم همون ماه رو براش تو خروجی نمایش بده. با این روش که اولین روز از امسال رو ببینیم چند شنبه میشه و بعد از اون حساب کنیم.می خواستم بدوم شما می تونید بهم کمک کنید.استادمون 20 خرداد رو هم روز ارائه اولیه برنامه قرار داده یعنی توضیح روش کار و تا 5 تیر هم وقت داریم بنویسیمش.

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

bloody

کاربر فعال علم و دانش
کاربر فعال
تاریخ عضویت
19 آپریل 2007
نوشته‌ها
1,256
لایک‌ها
17
محل سکونت
IRAN
چقدر اینجا سوت وکوره؟!!!هیچ کس هیچی نمیگه آرش جان شما چرا رفتی استند بای از مطالبت استفاده میکردیم
 

ehmo

کاربر تازه وارد
تاریخ عضویت
6 ژوئن 2007
نوشته‌ها
2
لایک‌ها
0
تمرین تعداد حالات خرد کردن 5000تومانی با اسکناس های 10و20و50و100و200و500و1000و2000 با c++ که با حلقه های for تو در تو در اون استفاده کنید توجه کنید که تعداد حالات رو میخواد ممنون :)
 

mehdicpp

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2005
نوشته‌ها
5
لایک‌ها
0
سلام. من تازه به این تاپیک وارد شدم. یه سوال خیلی نظرم رو جلب کرد.
برنامه ای که بدون شرط مرتب کنه.
خیلی جالب بود. من همه صفحات این تاپیک رو جستجو نکردم که ببینم شبیه این برنامه نوشته شده یا نه.

فقط یه مشکل داره اونم اینه که دامنه اش محدوده. تو این برنامه از -1000 تا 1000 استفاده کردم که به راحتی تا دامنه int قابل گسترش ولی سرعت میاد پایین.
منتظر نظراتتون هستم.

PHP:
#include <iostream.h>
#include <conio.h>
main(){
int NUM[2001],i,temp,sorted[10];
 for(i=0;i<=2000;i++)
  NUM[i]=0;
 clrscr();
 cout<<"Please Enter 10 Numbers:\n";
 for(i=0;i<=9;i++){
  cin>>temp;
  NUM[temp+1000]=1;
 }
 temp=0;
 for(i=0;i<=2000;i++){
  sorted[temp]=i-1000;
  temp=temp+NUM[i];
 }
//showing the sorted array
 cout<<"\n\n\n";
 for(i=0;i<=9;i++){
  cout<<sorted[i]<<" ";
 }
 getch();
}
 

mehdicpp

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2005
نوشته‌ها
5
لایک‌ها
0
سلام.
یه برنامه که به نظر من جالبه:

برنامه ای بنوسید که دو عدد بگیرد و تعداد ارقام عدد اولی به توان دومی را بدست آورد. مثلا 3 به توان 100

توجه داشته باشید که اعداد می توانند از قالب های عددی بیرون بروند و نمی توان از روش معمول برای تعیین تعداد رقم استفاده کرد



یا حق​
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
روشی که تو تابع اول استفاده کردید یه جور هشینگ هست که تابع هشش خیلی ساده است تو این روش ما احتیاج به مرتب سازی نداریم جا هر عنصر به وسیله ی تابع هش معلوم می شه تابع هش شما اینجا x+1000 هست

د رمرود دومی هم درست نفهمیدم اینکه از قالب عددی جارج بشن یعنی چی خب هر عددی رو می شه به کک روش ها ریاضی تعداد ارقامش رو حساب کرد
 

mehdicpp

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2005
نوشته‌ها
5
لایک‌ها
0
سلام کاربر محترم آرش.

من نفهمیدم اون توضیحاتی رو که در مورد برنامه ام نوشتین انتقاد بود یا تمجید یا صرفا یه سری توضیح در مورد روشی که استفاده کردم !!!!!!! ولی من تا بحال در مورد این هش که می گی نشنیده بودم و خودم به این روش رسیدم . اگه میشه بیشتر در رابطه با این روش توضیح دهید.

در مورد سوالی که نوشتم کاملا حق با شماست که رقم های هر عدد بزرگی را با عملیات ریاضی می توان پیدا کرد. من هم این سوال را برای این قرار دادم که دوستان با این روش آشنا بشن. اون توضیح هم برای برنامه نویسان مبتدی گذاشتم که واقعا به توان نرسانند.




یا حق
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
سوال اول بیشتر یه جور توزیح بود اخه روش که استفاده کردید در اصل یه روش مرتب سازی نیست ببیند ما در بهترین مرتبه زمانی جستجو در یه لیست مرتب لگاریتی هست که با اینکه بسیار خوبه ولی با هم با ایدال که o(1) هست تفاوت داره هر چند این تفاوات در جاهایی که سرعت خیلی خیلی زیاد مهم نیست خیلی اهمیت پیدا نمی کنه و در مسائل ریل تایم و مسائلی که با ساختار به غیر حافظه مثل فایر کار می کنن اهمیت پیدا می کنه برای همین روشی ساخته شد که که داده های رو به جای اینکه مرتب کنه کاملا درهم آمیزی می کنه البته این درهم آمیزی قانون می نده و به کمک یه تابه که بهش می گیم تابع hash انجام می شه برای عمل هشینگ ما داده ها رو تو خونه های مختلفی قرار می دیم فرض کنید می خوایید صد تا عدد رو ذخیره کنید برای اینکار مثلا یه ارایه هزار تایی در نظر می یگریم بعد هر عددی که وارد شد به کمک تابع هش جاش رو تو ارایه پیدا می کنیم
تابع هش رو به صورت خیلی ساده اینطوری تعریف می کنم
کد:
int h(x)
{
return x%1000;
}

اما اگه دقت کنید یه مشکلی اینجا پیش می یاد و اونم اینکه ممکن دو تا عدد یه خونه داشته باشن به این مسئله می گیم برخورد که بیشتر مشکلات هش ها به حل مسئله برخورد می انجامه که روش های زیادی برای رفع یا کاهش اونها وجود داره که ساده ترین و کاراترینشون تغییر تابع هش هست به طوری که داده ها رو کاملا پراکنده کنه مثلا تابع هشی رو در نظر بگیرید که اسم ها رو تو یه جدول هش درج می کنه اگه این تابع بخواد جمع دو کاکتر اول رو به عنوان برگشتی هش برگردونه ممکنه برخورد ها زیاد می شه چون تابع واقعا به صورت مساوی داده ها رو توزیع نمی کنه مثلا اسمی که با zx شروع بشه نداریم ولی اسم های زیادی با sh شروع می شن پس تابه ما یه تابع خوب نبوده که و داده ها رو درست در هم آمیزی نمی کنه
یه استراتژی دیگه افزایش ظرفیت لیست هم معمولا طول لیست سه تا یازده برار حجم داده ها در نظر گرفته می شه
و راه سوم که می شه گفت بعد از بهبود تابع هش بهترین راه هست ایجاد جدول هش به صورت پیوندی هست

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


سوال دومتون رو هم بزارید بقیه جواب بدن اگه کسی نبود بعدا جوابش رو می گم
 

mehdicpp

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2005
نوشته‌ها
5
لایک‌ها
0
ممنون از پاسختون.

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

با اون توضیحی که شما از هش دادین متوجه شدم که بخش اصلی برنامه سورتینگ من هش نبود بلکه روی هم ریختن مقادیر در یک خانه از آرایه تا زمانی که عدد مورد نظر از ورودی دریافت شده باشد بود. از هش برای این استفاده کردم که مجبور بودم اعداد 1000- تا 1000 رو توی آرایه 0 تا 2000 جا بدم. اگه از حوضه اعداد طبیعی استفاده می کردم برنامه به صورت زیر می شد:

PHP:
#include <iostream.h>
#include <conio.h>
main(){
int NUM[2001],i,temp,sorted[10];
 for(i=0;i<=2000;i++)
  NUM[i]=0;
 clrscr();
 cout<<"Please Enter 10 Numbers:\n";
 for(i=0;i<=9;i++){
  cin>>temp;
  NUM[temp]=1;
 }
 temp=0;
 for(i=0;i<=2000;i++){
  sorted[temp]=i;
  temp=temp+NUM[i];
 }
//showing the sorted array
 cout<<"\n\n\n";
 for(i=0;i<=9;i++){
  cout<<sorted[i]<<" ";
 }
 getch();
}

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

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
ببیند برای بسیاری از الگوریتم ها پر کاربرد مثل سورت یا سرچ سی++ الگوریتم های بهینه داره که بهتر از همونا استفاده بشه

در مورد هش هم شما جوری تابع هش رو ساختید که اعداد مرتب تو آرایه ریخته می شه البته یه هش کامل نیست ولی خوب یه جور هشه
 

mehdicpp

کاربر تازه وارد
تاریخ عضویت
1 دسامبر 2005
نوشته‌ها
5
لایک‌ها
0
سلام آقا آرش
مثل اینکه فقط من و تو موندیم
یه برنامه خوب بگو تا روش فکر کنم
مرسی
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
خب نظرتون در مورد ضرب زنجیره ای ماتریس ها چیه؟

ما یه سری ماتریس داریم که فرض می کنیم بشه به صورت پشت سر هم ار هم ضربشون کرد مثلا مثل اینا
M1(2 *3) M2(3*5) M4(5*3) M4(3 * 4)

خب ما میتونیم از اول شروع کنیم و اینا رو در هم ضرب کنیم و همیشه این بهترین ها نیست چه برای یه ضرب ماتریس n*m در یه ماتریس n*p ما مجبوریم m*n*p تا ضرب انجام بدیم حالا من می خوام شما یه برنامه نویسید که ابعداد این ماتریس ها رو بگیره و بگه به چه ترتیبی در هم ضرب بشن تا کمترین تعداد ضرب رو لازم داشته باشه

مثلا برای این مثال باید اول M2 * M3 بعد حاصلش در M1 و اخر جواب در M4 ضرب بشه که تعداد کمترین ضرب ممکن می شه 87 ضرب
 

sha19425

Registered User
تاریخ عضویت
10 ژانویه 2006
نوشته‌ها
281
لایک‌ها
21
این مار و پله ساده رو خودم نوشتم ، خوشحال میشم عیب و ایرادهاشو بگید!

البته گرافیک bgi هست و تو ویندوز xp من که اجرا نشد! اگه دیسک بوت 98 داشته باشید اجراش کنید!
 

فایل های ضمیمه

  • MAROPELL.zip
    34.8 KB · نمایش ها: 21

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
کدش رو هم اگه ممکنه بزارید من که نود هشت نداشتم اجرا شدنش رو ببینم
 

TheEnd

کاربر تازه وارد
تاریخ عضویت
29 جولای 2007
نوشته‌ها
6
لایک‌ها
0
محل سکونت
تهران
سلام من تازه وارد این فروم شدم .و از اول تابستان روی زبان C کار میکنم:rolleyes:
و وقت نکردم از اول بخونم ولی سعی خودمو میکنم در روز های اینده بخونم
یکی از تمرین هایی که به ذهنم رسید اینه که ما
یک عددی را به برنامه بدیم و فاکتوریل ان را حساب کنه (خدا کنه تکراری نباشه اگه بود مدیران محترم صلاح دونستن پاک کنن):happy:

خوب من از تابع long استفاده کردم int وسعت اعداش کم بود با اینکه از long استفاده کردم ولی خوب تا 16 فاکتوریل نمیگیره :blink:

کد:
#include<iostream.h>

main(){
long n,s,i;
for(i=1;i<=10;i++)
cout<<" *";
cout<<"\n";
L:s=1;
cout<<"\nPlease enter a number for get the factorial :  ";
cout<<"\n";

cout<<"\n";
cin>>n;

for (i=1;i<=n;i++)
s=s*i;

cout<<s;

cout<<"\n";
goto L;
}

//Programmed By TheEnd (Ashkan) //
 

sha19425

Registered User
تاریخ عضویت
10 ژانویه 2006
نوشته‌ها
281
لایک‌ها
21
کدش رو هم اگه ممکنه بزارید من که نود هشت نداشتم اجرا شدنش رو ببینم

مخلص آقا آرش ، انقد قاطی پاتیه ، فکر نکنم کسی سر در بیاره! انشالله فردا میزارمش!
 

AliMH

Registered User
تاریخ عضویت
25 ژانویه 2004
نوشته‌ها
770
لایک‌ها
1
خوب من از تابع long استفاده کردم int وسعت اعداش کم بود با اینکه از long استفاده کردم ولی خوب تا 16 فاکتوریل نمیگیره :blink:

نمي خوام تو اين بخش اصلا فعاليتي داشته باشم ولي دوستمون چون تازه شروع كرده بود گفتم بيام يه ايده بهشون بدم، يه كم درباره Long Integer ها و متغير هاي جديد SSE2,3 مطالعه كنيد ، كلا اين مباحث خيلي كم صورت گرفته و تصور عمومي اينكه اينا براي بازي ها استفاده ميشه:( (حقيقت خودم تو زبان سي يا سي ++ تا حال روي اين موضوع كار نكردم و بيشتر در اسمبلي تحت ويندوز و لينوكس [كلا پلتفرم IA32] تجربه كردم)
فكر نمي كنم كامپايلرهاي قديمي ساپورت كنند.:(
 
بالا