برنامه ی لوزی

mhabat

Member
مشکل:برنامه ی لوزی

با سلام. من سورس یک برنامه دارم که با وارد کردن یک عدد ازآن یک لوزی می سازد که من در بعضی قسمت هاش مشکل دارم.سورس:
کد:
#include <iostream.h>
 
void main()
{
    int x,y,c=1;
    cout<<"Enter a number:"<<endl;
    cin>>x;
    y=x;
    while(x>0)
    {
        for(int s=0;s<x;s++)
            cout<<" ";
        for(s=c;s>0;s--)
            cout<<"*";
        c+=2;
        x--;
        cout<<"\n";
    }
    c-=4;
    x=(y-1);
    while(x>0)
    {
        for(int s=y;s>=x;s--)
            cout<<" ";
        for(s=c;s>0;s--)
            cout<<"*";
        c-=2;
        x--;
        cout<<"\n";
    }
}
خوب بعد از اینکه یک حلقه ی whileمی سازد ازین دستور استفاده می کنه که نمیدانم چه کار میکنه حلقه ی forدوم که نصف لوزی رو با ستاره پر میکنه.(حلقه ی forاول برای اینه که لوزی جلو تر قرار بگیره)
کد:
for(int s=0;s<x;s++)
            cout<<" ";
        for(s=c;s>0;s--)
            cout<<"*";
        c+=2;
        x--;
        cout<<"\n";
وهمچنین چرا ارین دستور استفاده می کنه:
کد:
c-=4;
    x=(y-1);
ودر اخر میاد cرا باز کم می کند:
کد:
c-=2;
خیلی ممنون.
بـــدرود
 

the_king

مدیرکل انجمن
متغیر s یا باید در همه حلقه ها تعریف بشه یا در هیچکدوم، یعنی یا در همه حلقه ها بصورت int s نوشته بشه
یا قبل از اولین حلقه int s تعریف بشه و داخل حلقه ها فقط s نوشته بشه، بدون int

این لوزی رو در نظر بگیرید با x برابر 5
کد:
Enter a number:
5
     *
    ***
   *****
  *******
 *********
  *******
   *****
    ***
     *
در هر سطر از سمت چپ به راست تعدادی کاراکتر فاصله هست که با کاراکتر ~ مشخص شون می کنم :
کد:
Enter a number:
5
[COLOR="Blue"]~~~~~*
~~~~***
~~~*****
~~*******
~*********[/COLOR]
~~*******
~~~*****
~~~~***
~~~~~*

اون حلقه اول برای نمایش این کاراکتر های فاصله است :
کد:
        for(int s=0;s<x;s++)
            cout<<" ";
که تعدادشون از ابتدا تا وسط لوزی در هر سطر یکی کمتر میشه :
کد:
        x--;

اون حلقه بعدی برای نمایش ستاره ها در هر سطره :
کد:
        for(int s=c;s>0;s--)
            cout<<"*";

که از ابتدا تا وسط لوزی در هر سطر تعدادشون دو تا بیشتر میشه :
کد:
        c+=2;

وقتی به وسط لوزی می رسیم while اول تموم میشه اما c طبق روال قبل دو واحد افزایش یافته در حالی که
سطر بعدی نه تنها تعداد ستاره هاش بیشتر نمیشه بلکه 2 تا کمتر میشه، برای همینه که c را 4 واحد کم
می کنه که هم اون 2 واحد اضافه شدن آخر خنثی بشه و هم 2 واحد کم بشه :
کد:
    c-=4;

ابتدای کد مقدار x رو در y کپی کرده بودیم، پس y همان مقداری را دارد که ابتدا وارد کرده بودیم یعنی 5
کد:
    cin>>x;
    y=x;

وقتی تا سطر وسط لوزی را با while اول رسم می کنیم 5 سطر رسم شده، یعنی y سطر
در ادامه باید 4 سطر رسم بشه تا لوزی کامل بشه، یعنی y - 1 سطر :
کد:
    x=(y-1);
 

جدیدترین ارسال ها

بالا