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

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

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
سلام

ببخشيد كه من خيلي دير سر مي زنم . الان ديگه ترم آخرم و هزار گرفتاري!!!

اين برنامه هشت وزير رو خيلي وقت پيش نوشته بودم. فرصت توضيح نوشتن ندارم شايد بعدا . فعلا خود برنامه رو گشتم پيدا كردم:

کد:
#include<stdio.h>
#include<conio.h>
void shat3(int x,int y,int nx,int ny,int tnx,int tny,int cse,int csi);
void main()
{
[COLOR="Red"] int y[8]={0},i,j,k,l,s=0,x;
 char ch;[/COLOR]
 textbackground(1);
 clrscr();
 textcolor(1);
[COLOR="red"] do
  {
   x=l=0;
   y[0]++;
   while(y[x]>7&&x!=7)
    {
     y[x]=0;
     x++;
     y[x]++;
    }
   for(i=0;i<7;i++)
    {
     for(j=i+1;j<8;j++)
      if(y[i]==y[j] || y[i]+i-j==y[j] || y[i]-i+j==y[j])
       {
	l=1;
	break;
       }[/COLOR]    
     if(l==1)break;
    }

  [COLOR="red"] if(l==0)
    {
     s++;[/COLOR]     
     shat3(10,1,8,3,8,8,0,7);
     for(k=0;k<8;k++)
      {
       gotoxy(13+8*y[k],(k+1)*3-1);
       if((y[k]+k)%2==0)
	textattr(4);
       else
	textattr(7<<4^4);
       cprintf("XX");
      }
    if(y[7]%2==0)
     textcolor(7);
    else
     textcolor(0);

  [COLOR="Blue"]   ch=getch();
     if(ch=='q')break;[/COLOR]
 [COLOR="red"]   }[/COLOR]
[COLOR="red"]  }while(y[7]<8);[/COLOR]
 textbackground(1);
 clrscr();
 textcolor(2);
 gotoxy(35,13);
 cprintf("%d",s);
 getch();
}
void shat3(int x,int y,int nx,int ny,int tnx,int tny,int cse,int csi)
{
 int i,j,k,l,m=0;
 gotoxy(x,y);
 for(i=0;i<tny;i++)
  for(j=0;j<ny;j++)
   {
    m++;
    for(k=0;k<tnx;k++)
     {
      if((i+k)%2==0)
       textbackground(cse);
      else
       textbackground(csi);
      for(l=0;l<nx;l++)
       cprintf(" ");
     }
    gotoxy(x,y+m);
   }
}

از حجمش نترسيد همش كاراي گرافيكي. فقط قسمت هاي قرمز مر بوط به الگوريتم ميشه.
متغيير s تعداد حالت هاي صحيحي كه پيدا شده است را مي شمارد.

هر بار كه يك حالت رو پيدا مي كنه اون رو نمايش مي دهد و يك دكمه مي گيرد (قسمت آبي) كه اگر بخواهيد سريع تر اجرا شود مي تونيد اين خطهاي آبي رو حذف كنيد.
 

raxtastar

"کاربرفعال ورزش""کاربر قدیمی پرشین تولز
کاربر فعال
تاریخ عضویت
7 ژوئن 2005
نوشته‌ها
1,959
لایک‌ها
672
سن
40
تاپیک خوابید!!!
 

shahab_sh

کاربر تازه وارد
تاریخ عضویت
29 می 2006
نوشته‌ها
80
لایک‌ها
0
متاسفانه مثل اینکه همینطوره:eek: تاپیک خوابش برده:( :( :(
;) ;) ;)
 

Arash_j13

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

حالا برای اینکه بدون مسئله نباشید مسئله کلاسیک Maze رو حل کنید یه هزار تو داریم که یه خروجی و ورودی داره یه موش قراره از ورودی این هزارتو که گوشه بالا سمت چپ هست وارد بشه و از خروجی که پایین سمت راست هست خارج بشه برنامه بنویسید که مسیر حرکت موش برای رسید به خورجی رو پیدا کنه
 

sha19425

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

Arash_j13

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

naeemtop

Registered User
تاریخ عضویت
29 ژوئن 2004
نوشته‌ها
661
لایک‌ها
4
سن
39
محل سکونت
tehran
سلام
یه برنامه برای تبدیل اعداد بین 0 تا 1 از مبنای 10 به مبنای 2 توسط c یا c++ هرچی ساده تر بهتر
لطفا یه نفر compile نشده رو اینجا بزاره ...
 

Arash_j13

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

mamali_1382

کاربر تازه وارد
تاریخ عضویت
5 فوریه 2006
نوشته‌ها
31
لایک‌ها
0
سلام
یه برنامه برای تبدیل اعداد بین 0 تا 1 از مبنای 10 به مبنای 2 توسط c یا c++ هرچی ساده تر بهتر
لطفا یه نفر compile نشده رو اینجا بزاره ...

بفرمایید ولی لطفا دیگه HomeWork که بهتون میدن خودتون انجام بدین
 

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

  • BINARY.txt
    342 بایت · نمایش ها: 19

******

کاربر تازه وارد
تاریخ عضویت
11 مارس 2007
نوشته‌ها
2
لایک‌ها
0
محل سکونت
sanandaj
ببخشید عجله داشتم سرع گفتم

دنباله فیبوناچی یه دنباله معروف توی ریاضایات با این فرمول

fibo(1)=1
fibo(2)=1
fibo(x)=fibo(x-1)+fibo(x-2)

مرتبه زمانیش خطی باشه یعنی اینکه اگه اندازه مسئله رو n برار برار کنیم زمان اجرای برنامه هم n برار بشه
یا اینکه تابع زمان بر حسب اندازه مسئله یک تابع خطی باشه
که اندازه مسئله اینجا مقدار x هست

اگه به حالت معمولی این برنامه رو با تابع بازگشتی بنویسید مرتبه تابع خط نمی شه بلکه به صورت توانی می شه و با تابع 2 به توان n مشخص می شه این یعنی اینکه اگه x رو 10 برار کنید زمان محاسبه مسئله دو به توان 10 برار می شه ولی در حالی که برای یه برنامه ی بهینه باید 10 برابر بشه حالا من می خوام این برنامهی بهینه رو بنویسید
حالت معمولیش رو خودم اینجا می نویسم کسی نیاد بگه من این جوری نوشتم

کد:
long int fibo(long int x)
{
    if (x<=0) 
       return 0;
       
    if (x==1||x==2)  
       return 1;
         
    return fibo(x-1)+fibo(x-2);
}

اینی که من نوشتم برای عدد های بالای 50 برخلاف چیزی که به نظر می رسه و معموله زمان زیادی رو در حد خودش می گیره
من يه تمرين دارم لطفاً برام حلش كنيد.

برنامه اي كه عددي صحيح را از ورودي بگيرد و معادل حروفي آن را چاپ كند.
 

******

کاربر تازه وارد
تاریخ عضویت
11 مارس 2007
نوشته‌ها
2
لایک‌ها
0
محل سکونت
sanandaj
من يه تمرين دارم لطفاً برام حلش كنيد.

برنامه اي كه عددي صحيح را از ورودي بگيرد و معادل حروفي آن را چاپ كند.با ++C
 

Arash_j13

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

White Rose

Guest
تاریخ عضویت
12 فوریه 2007
نوشته‌ها
11
لایک‌ها
0
محل سکونت
In front of Damavand
:) سلام آرش عزیز
چرا مدتیه دیگه تمرین جدیدی نمیزاری؟:eh: :eek: :eek: من تازه تمرینهای قبلی شما رو دیدم.خیلی جالب ومفید بودن به خصوص برای دانشجوها.خلاصه بازم منتظریم.سال نو شما هم مبارک.:rolleyes: :rolleyes:
 

Arash_j13

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

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

اما خب یه تمرین ساده یه عبارت ریاضی رو بگیرید و بررسی که که خطای سینتکسی داره یا نه
مثلا پرانتزها و عملگر ها رو بررسی کنید که درست باشن
 

White Rose

Guest
تاریخ عضویت
12 فوریه 2007
نوشته‌ها
11
لایک‌ها
0
محل سکونت
In front of Damavand
:eek: خب من این کد رو نوشتم.الگوریتم درسته.ولی موقع اجرا کامپایلرم اررور زیر رو میده :
This application has failed to srart because MSVCR80D.dll was not found.Re-instaling the application may fix the problem. :blink:


کد:
// syntax.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>
#define n 20

int test_error(void);
int l;
char s[n];

int main()
{   int error=0;
    printf("\n Enter your mathematical statement:");
    scanf("%s",s);
    l=strlen(s);
    error=test_error();
    if(error==1)
	 { printf("\n \n\t syntax ERROR!\n\n");
       return 0;
    }else 
           printf("\n\nThere is no ERROR\n\n");
   return 0;
}//end of main


int test_error(void)
{  int t,i=0,er=0;
   while(1){
	  if(s[i]=='*' || s[i]=='/' || s[i]=='+' || s[i]=='-')
	        {  if (i==0 || i==l)
	                {  er=1;
	                   return(er);
	                }
	           if(s[i-1]=='(' || s[i+1]==')')
			        {  er=1;
			           return(er);
			         }
			   if(s[i-1]!=')' || s[i+1]=='(' )
			   {   if ((s[i-1]>=48 && s[i-1]<=57)||(s[i-1]>=65 && s[i-1]<=90)||(s[i-1]>=97&& s[i-1]<=122))
			         {if(!(s[i+1]>=48 && s[i+1]<=57)||(s[i+1]>=65 && s[i+1]<=90)||(s[i+1]>=97&& s[i+1]<=122))
					         {   er=1;
			                     return (er);
			                 }
					   else{er=1;
					        return(er);
					       }
			         }
			   }
	        }//end of if
	  switch(s[i]){
		 case ')':{
			        for(t=i;s[t]!='(';t--)
						if(t==0){er=1;
					             return(er);
					            }
				  }
		 case'(':{
			       for(t=i;s[t] && s[t]!=')';t++)
					   if(t==l){er=1;
				                return(er);
				               }
				 }
		 case ' ':{  er=1;
					 return(er);
				  }
	 }//end of switch
	i++;
 }//end of while
}
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
برنامه تون کامپایل می شه بدون هیچ مشکلی ولی یه ایراد دیگه داره جوابتون غلطه
چرا تابع test_error در همه حالت یک بر می گردونه؟ اگه قرار همیشه یک برگدونه اصلا چرا بر می گردونه خب از اول می دونید یک هست دیگه احتیاجی به اون هم کد نیست شما هیچ وقت حالت درست رو در نظر نگرفتید در ضمن می تونستید برنامه رو خیلی بهتر بنویسید بزارید چند تا نکته برای بهتر نوشتن برنامه بگم ممکنه این نکته ها در نگاه اول بیهوده بیاد ولی بعدا وقتی برنامه به خطاهای منطقی بخوره می بینید که با رعایت کردن این نکات خیلی راحت تر می تونید برنامه رو دیباگ کنید البته فکر کنم اینا رو چند بار دیگه هم توی همین تاپیک یا تاپیک های مشابه گفتم ولی تکرارش ضرری نداره
نکته اول: متغییر سراسری تا حد امکان نداشته باشید
همیشه وقتی می خواید یه متغییر سراسری تعری کنید چندین بار از خودتون بپرسید که چرا باید اون سراسری تعریف کنید اگه جوابتون این بود که در چند تابع به اون احتیاج دارید ببینید نمی تونید با فرستادن به صورت پارمتر متغییر سراسری رو حذف کنید
اگه جوابتون این جوب بود که به مقدارش در فراخوانی های بعدی نیاز دارید می تونید به جای اون از یه متغییر استاتیک استفاده کنید
و...

نکته دوم یه حلقه بی نهایت یه دلیل منطقی می خواد و یه راه خروج درست می خواد
همیشه موقع تعریف حلقه بی نهایت بینید نمی تونید شرطی رو پیدا کنید که شما از شر حلقه بی نهایت خلاص کنه یکی از دلایلی که خیلی ها از حلقه بی نهایت استفاده می کنند اونم به صورت while(1) اینکه با قدرت حلقه for اشنایی مدارن خیلی اوقات شما می تونید کد تون رو به کمک حلقه for ساده تر کنید حتی من همیشه به دوستام یه توصیه می کنم که شاید خنده دار هم به نظر بیاد اونم اینکه هیچ وقت از یه حلقه while استفاده کنید همیشه به جاش یه for بزارید حتی اگه مقدار دهی اولیه و گام ندارید اون بخش ها رو خالی بزارید با کمک تمرین می بینید که خیلی اوقات می تونید یه حلقه بدون بدنه با کمک فور بنویسید و از یه بلاک کد حلقه while خلاص بشید


منتظر جواب درستتون هستم خیلی خوب پیش رفتید
 

White Rose

Guest
تاریخ عضویت
12 فوریه 2007
نوشته‌ها
11
لایک‌ها
0
محل سکونت
In front of Damavand
:) سلام و متشکر از توجه تون به این کد.
من مقدار برگرداننده توسط تابع test_errorرو وجود خطا در عبارت ریاضی در نظر گرفتم.یعنی اگر syntax errorوجود داشت مقدار er=1 میشودولی شما درست میگید الان متوجه اشتباه کدم شدم.شایدباید return(er)رو بعد ازیک elseمیگذاشتم و..............نکات خوبی رو گفتید.ویک سوال اینکه چرا نباید از متغیرهای سراسری در همچین برنامه های کوچکی استفاده کنیم؟ فکر می کنم آنها در برنامه های بزرگتر که تعداد متغیر های زیادتری دارند مشکل ساز باشند.
 

Arash_j13

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

sha19425

Registered User
تاریخ عضویت
10 ژانویه 2006
نوشته‌ها
281
لایک‌ها
21
در مورد 64 خانه شطرنج که اسب باید بره آیا این برنامه هایی که دیدم همه الگوریتمش آماده بود؟ یعنی حتمآ با طی این مراحل اسب گیر نمی کنه؟ چون مشخص نشده اگه اسب گیر بیفته چه کار کنه؟

من خودم یه برنامه براش نوشتم بدون در نظر گرفتن احتمال ولی انقدر حجم محاسبات بالاست که جواب نمیده . برنامه میاد تمام خونه ها رو چک میکنه و در صورت گیر کردن حرکت خونه مثلآ 58 به 59 را قفل می کنه .

این برنامه برای صفحه 5در 5 جواب داد .
 

Arash_j13

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

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