اقایون خانوم ها لطفا کمک کنید...این برنامه رو هر چی سعی کردم بنویسم نشد!!!
فایل رو به صورت exe قرار دادم(فایل اصلی ) ولی کدش رو نمیدونم...لطفا کمک!!!
لینک فایل: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Printable View
اقایون خانوم ها لطفا کمک کنید...این برنامه رو هر چی سعی کردم بنویسم نشد!!!
فایل رو به صورت exe قرار دادم(فایل اصلی ) ولی کدش رو نمیدونم...لطفا کمک!!!
لینک فایل: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
انجام این پروزه که کاری نداره اما اینطوری که نمی شه ، هر کسی بیاد بگه پروژه مد نظرم رو بنویسید!!! شما اگه آشنایی با c++ یا c دارید، کدی رو که خودتون نوشتین بذارید تا راهنمایی کنم چه جاهاییش مشکل داره.نقل قول:
اگه هم که اصلا آشنایی ندارین بگین تا بهتون منابع جهت یادگیری معرفی کنم.
اخه برای ایجاد قاب دورش هر چی باgotoxyکار میکنم جواب نمیده.الان بیشتر مشکل قابشه وگرنه اون برنامه حرکتش کاری نداره.
دوست عزیز کدهاتون البته اونجایی که مشکل داره رو اینجا بذارید ببینیم چه مشکلی داره
دقیقا یعنی چی جواب نمی ده؟ ارور می ده یا اینکه درست شکل در نمیاد؟ اگه کدتون رو بذارید بهتر می شه راهنماییتون کرد. ممنوننقل قول:
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
void main()
{textmode(64);
clrscr(); int n,t=0,w=0,e=0,d=0,f=0,b=2;cin>>n;
int q=n/2;n=2*q;
gotoxy(40-q,25-q);
for(int i=0;i<n;i++)
{ for(int j=0;j<n;j++)
{
if(i==0)
{cout<<"+";
}
if(j==0)
{gotoxy(40-q,25-q+t);cout<<"+";t++;}
if(j==n-1)
{gotoxy(40-q+e,25-q+n-1);
cout<<"+"; e++;cout<<"\n";
}
if(i==n-1)
{gotoxy(40-q+n-1,25-q+w);
cout<<"+";w++;}
}
cout<<"\n";
}
gotoxy(40-q+1,25-q+1);
for(i=0;i<2;i++)
{for(int j=0;j<2;j++)
cout<<"*";cout<<"\n";gotoxy(40-q+1,25-q+2);
}
while(1)
{ int c=getch();int m=0,x=40-q+1-d,y=25-q+1-f;
if(c==62) {clrscr();b++;m=1;
if(b>=n-2) b=n-2;}
if(c==63) {clrscr();b--;m=1;
if(b<=1) b=1;}
if(c==77) {clrscr();
d--;m=1;
if(x==40-q+n) d=n-2;
}
if(c==75) {clrscr();d++;m=1;
if(x==40-q) d=0;
}
if(c==72) {clrscr();f++;m=1;}
if(c==80) {clrscr();f--;m=1;}
if(m==1)
{t=0;e=0;w=0;
gotoxy(40-q,25-q);
for(int i=0;i<n;i++)
{ for(int j=0;j<n;j++)
{
if(i==0)
{cout<<"+";
}
if(j==0)
{gotoxy(40-q,25-q+t);cout<<"+";t++;}
if(j==n-1)
{gotoxy(40-q+e,25-q+n-1);
cout<<"+"; e++;cout<<"\n";
}
if(i==n-1)
{gotoxy(40-q+n-1,25-q+w);
cout<<"+";w++;}
}
cout<<"\n";
}
int s=2;
gotoxy(x,y);
for(i=0;i<b;i++)
{for(int j=0;j<b;j++)
cout<<"*";cout<<"\n";gotoxy(x,y+s-1);s++;
}
}
if(c==27) break;
}
}
اقا اینم از برنامه فقط به یه مشکل برخورد کردم اونم اینکه موقعی که از طرف راست میره بیرون از طرف چپ نمیاد تو (دقیقا به اندازه کادر) و همین مسئله برای بالا و پایین هم هست...اصن دیوانم کرده...فردا هم باید برای استاد بفرستم....
اگه صلاح میدونین کمک کنین...
:n30: [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این رو ببینید چه طوریه؟ چیزی رو تغییر ندهید فقط متغیرهای mabdax و mabday که مختصات گوشه بالا سمت چپ حاشیه هستند را مطابق نظرتان تغییر دهید
همچنین n هم سایز حاشیه و b هم ساز مستطیل داخلی هست فرض من اینه که gotoxy مبدا مختصاتش 1و 1 است اگه صفر وصفر بود یه کم تغییر لازم داره
[PHP]#include <iostream>
#include <conio.h>
using namespace std;
void plotborder(int n,int mabdax,int mabday);
void plotvasat(int b,int n,int mabdax,int mabday);
int main()
{
char ch;
int x=0,y=0,n=13,b=5;
clrscr();
plotborder(n,1,1);
plotvasat(b,n-2,x,y);
while(1)
{
ch=getch();
switch (ch)
{
case 72:y=(--y<0?n-3:y); break;
case 80:y=(++y>n-3?0:y); break;
case 77:x=(++x>n-3?0:x); break;
case 75:x=(--x<0?n-3:x); break;
default :n=n; break;
}
clrscr();
plotborder(n,1,1);
plotvasat(b,n-2,x,y);
}
}
void plotborder(int n,int mabdax,int mabday)
{
int i;
gotoxy(mabdax,mabday);for (i=0;i<n;i++) cout<<"+";
for (i=1;i<n-1;i++) {gotoxy(mabdax+n-1,mabday+i);cout<<"+";}
for (i=1;i<n-1;i++) {gotoxy(mabdax,mabday+i);cout<<"+";}
gotoxy(mabdax,mabday+i);for (i=0;i<n;i++) cout<<"+";
}
void plotvasat(int b,int n,int x,int y)
{
int i,j;
for (j=0;j<b;j++) for (i=0;i<b;i++) {gotoxy(2+((x+i)%(n)),2+((y+j)%(n)));cout<<"*";}
}[/PHP]
متاسفانه فقط مجاز به استفاده از توابعgotoxy ,while هستیم بقیه رو مثل swiitchو اینا رو نمیشه وارد کرد.اگه لطف کنید بگید من دستور خودم رو چه تغییری بدم ممنون میشم!!!
این یکی چه طوریه؟
در برنامه خودتون باید تمام if ها و for ها رو تبدیل به while کنید همچنین اگه می خواهید از محدوده خارج نشه از عملگر باقیمانده استفاده کنید
[PHP]#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
int x=0,y=0,n=13,b=5,i=0,j=0,mabdax=1,mabday=1;
while(1)
{
clrscr();
gotoxy(mabdax,mabday);i=0; while(i<n) {cout<<"+";i++;}
i=1; while(i<n-1) {gotoxy(mabdax+n-1,mabday+i);cout<<"+";i++;}
i=1; while(i<n-1) {gotoxy(mabdax,mabday+i);cout<<"+";i++;}
gotoxy(mabdax,mabday+i);i=0; while(i<n) {cout<<"+";i++;}
i=0;j=0;while(j<b) {while(i<b) {gotoxy(2+((x+i)%(n-2)),2+((y+j)%(n-2)));cout<<"*";i++;}j++;i=0;}
ch=getch();
while(ch==72) {while(--y<0){y=n-3;break;} break;}
while(ch==80) {while(++y>n-3){y=0;break;} break;}
while(ch==77) {while(++x>n-3){x=0;break;} break;}
while(ch==75) {while(--x<0){x=n-3;break;} break;}
}
}[/PHP]
تبدیل کردم اصن یه چیز عجیب غریبی در اومد(به جای forوif ،whileگذاشتم اصن یه چی داغونی شد!!!میشه خودتون بگید دقیقا کدومارو تغییر بدم؟!!!)
درضمن این برنامه شمارم موقعی که مقدار کوچیک یا بزرگ شدن میذارم جواب نمیده!!!:n30:! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کد شما تا جای خوبی پیش رفته اما فکر کنم چون یک مقدار ناخوانا هست باعث میشه هنگام تحلیلش دچار مشکل بشیم بنابراین ترجیح می دهم بیشتر در خصوص کد خودم توضیح بدم چون به اون مسلط ترم
حالا چند نکته هست فکر کنم باید روشن بشه
چون گفتید از شما خواسته اند فقط while استفاده بشه لازمه نحوه تبدیل if و for را به while توضیح بدم
اگه دستور if اینجوری باشه:
[PHP]if(a)
{
b;
}[/PHP]
معادل while آن اینجوری میشه:
[PHP]while(a)
{
b;
break;
}[/PHP]
اگه دستور for اینجوری باشه:
[PHP]for (i=0;i<5;i++)
{
b;
}[/PHP]
معادل while آن اینجوری میشه:
[PHP]i=0;
while(i<5)
{
b;
i++;
}[/PHP]
یک توضیح هم در مورد کد که اصلاحش کردم اون اشکال رفع شد
ما در اینجا دو تا سیستم مختصات داریم یکی مربوط به صفحه نمایش ویکی هم سیستم مختصاتی که داخل اون محدوده هست
مختصات * ها همون محدوده + ها هاست که باید برای چاپ تبدیل به مختصات نمایش بشه . متغیرهای xو y مختصات گوشه بالا سمت چپ مستطیل توپر هستند که بر اساس مختصات محدوده بدست می آیند و وقتی کلیدهای جهتی زده می شوند مختصات آنها کم و زیاد میشه و وقتی که به محدوده ها می رسند با استفاده از شرط مقدار اون رو به صفر یا آنطرف محدوده تغییر می دهیم
تا اینجاش مشکلی نیست اما غیر از ستاره گوشه بالا سمت چپ سایر ستاره ها چه باید بکنند؟
ما یک عملگر داریم به نام باقیمانده یا % که وقتی هر عدد راتقسیم بر اندازه محدوده می کنیم و باقیمانده اون رو بدست بیاوریم جوابش همین میشه که می بینیم یعنی باقیمانده تقسیم هر عدد بر n هیچ وقت از n بیشتر نمیشه یعنی اگه مثلا n برابر با 10 باشه و اعداد صفر تا صد رو تقسیم بر اون کنیم جواب باقیمانده آن مرتبا از صفر تا 10 تکرار میشه یعنی همون چیزی که ما دنبالش هستیم
برای تبدیل مختصات داخل محدوده به مختصات صفحه نمایش اولا دو متغیر داریم به نام mabdax , mabday که مختصات گوشه محدوده را در مبنای صفحه نمایش نشان می دهند که باید آنها را به اضافه 1 کنیم چون از علامت + یک خانه پایین تر بیایم و نهایتا اون را تقسیم بر اندازه داخل محدوده کرده باقیمانده آن را بدست می آوریم تا از باقیمانده جهت مختصات ستاره ها استفاده شود
[PHP]#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
int x=0,y=0,n=13,b=9,i=0,j=0,mabdax=1,mabday=1;
while(1)
{
clrscr();
gotoxy(mabdax,mabday);i=0; while(i<n) {cout<<"+";i++;}
i=1; while(i<n-1) {gotoxy(mabdax+n-1,mabday+i);cout<<"+";i++;}
i=1; while(i<n-1) {gotoxy(mabdax,mabday+i);cout<<"+";i++;}
gotoxy(mabdax,mabday+i);i=0; while(i<n) {cout<<"+";i++;}
i=0;j=0;while(j<b) {while(i<b) {gotoxy(mabdax+1+((x+i)%(n-2)),mabday+1+((y+j)%(n-2)));cout<<"*";i++;}j++;i=0;}
ch=getch();
while(ch==72) {while(--y<0){y=n-3;break;} break;}
while(ch==80) {while(++y>n-3){y=0;break;} break;}
while(ch==77) {while(++x>n-3){x=0;break;} break;}
while(ch==75) {while(--x<0){x=n-3;break;} break;}
while(ch==62) {while(--b<1){b=1;break;} break;}
while(ch==63) {while(++b>n-2){b=n-2;break;} break;}
}
}[/PHP]
با تشکر از شما
من یه سزی توضیحات بدم...اول اینک همنظورم کدهایی مثل while و gotoxy بود...نه دقیقا خود اونها چون من مبانی کامپیوتر رشته it رو میخونم و هنوز اجازاه استفاده از تابع و یا چیزهایی از این قبیل رو نداریم...فقط از متغیرهایی که در برنامه من استفاده شده میشه استفاده کرد...(هنوز در ابتدای راهیم!!!)
بعدم اگه امکان داره دلیل ناخوانا بودن برنامم رو بگید تا اگه بشه براتون توضیح بدم تا روی برنامه خودم اشکالاتم برطرف شه...مطمئنا اینجوری بهتر یاد میگیرم
باتشکر از زحمات شما راهنمای گرامی!!!
متغیرهایی که تعریف کردید زیاد و نامهای آنها بی معنی است لطفا کد را مرتب کنید و کدهایی که با هم مرتبطند نزدیک به هم و بصورت جمع و جور در یک گروه قرار دهید نام متغیر را با توجه به کاربرد آن قرار دهید من هم از اول می خواستم بگویم در مورد کد خودتون توضیح بدهید شاید گره کار باز بشه
خوب اینم از کل مسئله که حل شد،البته هفته پیش حل شد ولی سرم شلوغ بود نتونستم بذارم.با تشکر از راهنمای عزیز!!!
کد:
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main()
{textmode(64);clrscr();
clrscr();
int n,b=2,z=0,v=15,l=15;cout<<"enter a number between 8 & 36:";cin>>n;
if(n>35||n<8) {clrscr();cout<<"enter a number between 8 & 36:";cin>>n; }int q=n/2;n=q*2;clrscr();
int x=0,y=0,i=0,j=0,mabdax=40-q,mabday=25-q;
gotoxy(mabdax,mabday); for(i=0;i<n;i++) {cprintf("+");}
for(i=1;i<n-1;i++) {gotoxy(mabdax+n-1,mabday+i);cprintf("+");}
for(i=1;i<n-1;i++) {gotoxy(mabdax,mabday+i);cprintf("+");}
gotoxy(mabdax,mabday+i); for(i=0;i<n;i++) {cprintf("+");}
gotoxy(40-q+1,25-q+1);
for(j=0;j<b;j++) {for(i=0;i<b;i++) {gotoxy(40-q+(1+(x+i)%(n-2)),25-q+(1+(y+j)%(n-2)));cprintf("*");}i=0;} gotoxy(40-q,25-q);
while(1)
{ int c=getch();int m=0; textbackground(z);textcolor(l);
if(c==59) {clrscr();z=rand()%16;textbackground(z);clrscr();m=1;}
if(c==60){clrscr();v=rand()%16;clrscr();m=1;}
if(c==61){clrscr();l=rand()%16;clrscr();m=1;}
if(c==27) break;
if(c==62) {clrscr();b++;m=1;
if(b>=n-4) b=n-4;}
if(c==63) {clrscr();b--;m=1;
if(b<=1) b=1;}
if(c==77) { if(x++>40-q+n-3) x=40-q;clrscr(); m=1;}
if(c==75) {if(x--<40-q) x=40-q+n-3;clrscr(); m=1;}
if(c==72) {if(y--<25-q) y=25-q+n-3;clrscr(); m=1;}
if(c==80) {if(y++>25-q+n-2) y=25-q+2;clrscr(); m=1;}
if(m==1)
{textcolor(l);
gotoxy(40-q,25-q);
gotoxy(mabdax,mabday); for(i=0;i<n;i++) {cprintf("+");}
for(i=1;i<n-1;i++) {gotoxy(mabdax+n-1,mabday+i);cprintf("+");}
for(i=1;i<n-1;i++) {gotoxy(mabdax,mabday+i);cprintf("+");}
gotoxy(mabdax,mabday+i); for(i=0;i<n;i++) {cprintf("+");}
textcolor(v);
for(j=0;j<b;j++) {for(i=0;i<b;i++) {gotoxy(40-q+(1+(x+i)%(n-2)),25-q+(1+(y+j)%(n-2)));cprintf("*");}i=0; gotoxy(40-q,25-q);
}
gotoxy(1,49);textbackground(7);
textcolor(RED); cprintf("ESC ");textcolor(0);cprintf("EXIT ");
textcolor(RED); cprintf("F1 ");textcolor(0);cprintf("BG COLOR ");
textcolor(RED); cprintf("F2 ");textcolor(0);cprintf("TXT COLOR ");
textcolor(RED); cprintf("F3 ");textcolor(0);cprintf("SIDES COLOR ");
textcolor(RED); cprintf("F4 ");textcolor(0);cprintf("CUBE ++ ");
textcolor(RED); cprintf("F5 ");textcolor(0);cprintf("CUBE --");
}
}
}
مرسی آفرین موفق باشید