توضیح درباره رسم لوزی با ستاره با قطر دلخواه که کاربر میده c - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

توضیح درباره رسم لوزی با ستاره با قطر دلخواه که کاربر میده c

+1 امتیاز

توضیح درباره رسم لوزی با ستاره در زبان سی توضیحش برام خیلی مهمه

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

#include <stdio.h>

int main()
{

int n ;
scanf("%d",&n);
int fasleh_nahee = n-1;
for (int i = 1 ; i <=n;i+=2)
{
    for (int f = 1 ; f <=fasleh_nahee ; ++ f)
    {
       printf(" ");
    }
    fasleh_nahee --;

    for (int j = 1 ; j <=i ;++j)
    {
        printf("*");
    }
    printf("\n");


}
//-------------------------------------------------------------------

for (int i = n ; i >=1;i-=2)
{
    for (int f = 1 ; f <=fasleh_nahee ; ++ f)
    {
       printf(" ");
    }
    fasleh_nahee ++;

    for (int j = 1 ; j <=i ;++j)
    {
        printf("*");
    }
    printf("\n");


}
}

 

سوال شده اسفند 26, 1398  بوسیله ی ROOSTAM (امتیاز 74)   2 2 3
ویرایش شده اسفند 27, 1398 بوسیله ی ROOSTAM

1 پاسخ

+1 امتیاز
 
بهترین پاسخ
به نظر می رسد که می خواهید یک شکل لوزی با الگوی ستاره بکشید. شما از دو حلقه تو در تو برای کنترل تعداد ستاره ها در هر ردیف و تعداد فاصله های قبل از هر ردیف استفاده می کنید.
 
اولین مشکل کد شما این است که شما از متغیر "fasleh_nahee" برای کنترل تعداد فاصله های قبل از هر سطر استفاده می کنید، اما مقدار آن را پس از اولین حلقه به مقدار صحیح بر نمی گردانید. در عوض، شما مقدار "fasleh_nahee" را در حلقه دوم افزایش می دهید، که باعث می شود ستاره ها به هم نخورند.
 
برای رفع این مشکل، می توانید قبل از شروع حلقه دوم، مقدار "fasleh_nahee" را به مقدار صحیح بازگردانید.
 
مشکل دیگر این است که تعداد فاصله های قبل از هر ردیف ستاره به درستی محاسبه نمی شود. برای قرار دادن ستاره ها در مرکز، تعداد فاصله ها باید برابر با (n-1)/2 برای حلقه اول و (n-i)/2 برای حلقه دوم باشد.
 
در اینجا یک راه ممکن برای رفع کد وجود دارد:
#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int fasleh_nahee = (n-1)/2;
    for (int i = 1; i <= n; i += 2)
    {
        for (int f = 1; f <= fasleh_nahee; ++f)
        {
            printf(" ");
        }
        for (int j = 1; j <= i; ++j)
        {
            printf("*");
        }
        printf("\n");
    }

    //-------------------------------------------------------------------

    fasleh_nahee = (n-1)/2;
    for (int i = n; i >= 1; i -= 2)
    {
        for (int f = 1; f <= fasleh_nahee; ++f)
        {
            printf(" ");
        }
        fasleh_nahee = (fasleh_nahee - i/2);
        for (int j = 1; j <= i; ++j)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

در این نسخه از کد، مقدار "fasleh_nahee" قبل از حلقه دوم به (n-1)/2 بازنشانی می شود. من همچنین یک خط کد برای به روز رسانی مقدار "fasleh_nahee" بعد از هر بار تکرار حلقه دوم اضافه کردم تا به درستی ستاره ها را در مرکز قرار دهیم.
لطفاً توجه داشته باشید که کد بالا باید همانطور که انتظار می‌رود کار کند، اما کارآمدترین راه برای انجام این کار نیست، و برای ورودی‌های بزرگتر از n، ممکن است اجرای آن بیشتر طول بکشد.

 

پاسخ داده شده بهمن 7, 1401 بوسیله ی toopak (امتیاز 2,458)   16 48 66
انتخاب شد شهریور 8, 1402 بوسیله ی farnoosh
...