PDA

View Full Version : سوال: اشكال برنامه چاپ ستاره



بانوی ایران
سه شنبه 01 تیر 1389, 01:18 صبح
سلام خدمت دوستان عزيز
كدي كه من نوشتم قراره يه تيك رو با ستاره چاپ كنه


*
*
* *
**
براي تعداد ستاره زوج
*
*
* *
*
براي تعداد ستاره فرد


من اومدم تيك رو دو قسمت كردم قسمت بالا و قسمت v شكل كه تقارن داشته باشه
اما وقتي برنامه رو كامپايل ميكنم مشكل داره و اصلا معلوم نيست مشكل چيه برنامه كامپايل نميشه
ميشه يه چكش كنيد

#include<stdio.h>
#include<conio.h>
void tick (int N)
{
int line,space,k,m;
for(line=1;line<(N/2);line++)
{
for(space=line;space<N;space++)
{
printf(" ");
}
printf("*\n");
}

k=N-(N/2)-1;
if(k%2==0)
{
m=k/2;
for(line=0;line<m;line++)
{
for(space=0;space<=line;space++)
printf(" ");
printf("*");
for(space=(2line);space<(2m-2);space++)
printf(" ");
printf("*\n");
}
}
else
{
m=(k/2)+1;
for(line=0;line<m;line++)
{
for(space=0;space<=line;line++)
printf(" ");
printf("*");
for(space=2line;space<2m-3;space++)
{
printf(" ");
printf("*\n");
}
}
}
}
int main()
{
int n;
printf("how many star?");
scanf("%d",&n);
tick(n);
getch();
return 0;
}

qanewaisi
سه شنبه 01 تیر 1389, 06:41 صبح
سلام
برنامه رو به شکل زیر تغییر بدین :


#include "stdio.h"
#include "conio.h"
void tick (int N)
{
int line,space,k,m;
for(line=1;line<(N/2);line++)
{
for(space=line;space<N;space++)
{
printf(" ");
}
printf("*\n");
}

k=N-(N/2)-1;
if(k%2==0)
{
m=k/2;
for(line=0;line<m;line++)
{
for(space=0;space<=line;space++)
printf(" ");
printf("*");
for(space=(2*line);space<(2*m-2);space++)
printf(" ");
printf("*\n");
}
}
else
{
m=(k/2)+1;
for(line=0;line<m;line++)
{
for(space=0;space<=line;line++)
printf(" ");
printf("*");
for(space=(2*line);space<2*m-3;space++)
{
printf(" ");
printf("*\n");
}
}
}
}
int main()
{
int n;
printf("how many star?");
scanf("%d",&n);
tick(n);
getch();
return 0;
}

البته اینو با ویژوال سی پلاس پلاس تست کردم و کار کرد.


موفق باشید.

بانوی ایران
سه شنبه 01 تیر 1389, 14:48 عصر
خيلي ممنون
الان اجرا ميشه اما به ازاي nهايي كه kرو عدد فرد ميكنه يعني قسمت elseبرنامه توي يه جور لوپ ميافته يعني صفحه باز ميشه ولي تا بينهايت ميره
نميدونم مشكل چيه

بانوی ایران
سه شنبه 01 تیر 1389, 22:28 عصر
اينم كد تغيير يافته
اما باز هم همون مشكل رو داره

#include<stdio.h>
#include<conio.h>
void tick (int N)
{
int line,space,k,m;
for(line=1;line<(N/2);line++)
{
for(space=line;space<N;space++)
{
printf(" ");
}
printf("*\n");
}

k=N-(N/2)+1;
if(k%2==0)
{
m=k/2;
for(line=0;line<m;line++)
{
for(space=0;space<line;space++)
printf(" ");
printf("*");
for(space=(2*line);space<(2*m-2);space++)
printf(" ");
printf("*\n");
}
}
else//Êæ Çíä ÞÓãÊ Èå ÈÚÏ ãÔßá åÓÊ
{
m=(k/2)+1;
for(line=0;line<m;line++)
{
for(space=0;space<line;line++)
printf(" ");
printf("*");
for(space=(2*line);space<(2*m)-3;space++)
{
printf(" ");
printf("*\n");
}
}
}
}
int main()
{
int n;
printf("how many star?");
scanf("%d",&n);
tick(n);
getch();
return 0;
}

qanewaisi
سه شنبه 01 تیر 1389, 22:43 عصر
اگه تا عدد 14 وارد کنی برنامه بدون هیچ مشکلی کار می کنه ولی از 14 بیشتر که بزنی نتیجه مطلوب رو نمیده!

سعی می کنم که درستش کنم.

qanewaisi
سه شنبه 01 تیر 1389, 22:47 عصر
همچنین برنامه شما با اعداد زوج نتیجه میده و خیلی خوب کار می کنه!

qanewaisi
سه شنبه 01 تیر 1389, 22:54 عصر
دوست عزیز شما این خط رو به اول برنامه ت اضافه کن و خودت نتیجه رو ببین :
clrscr();

این برنامه با این طرز نوشتن بیشتر از 38 خط رو بصورت کامل روی صفحه نشون نمیده
پس باید یه چیز هایی به برنامه اضافه کنی تا کامل بشه!

موفق باشید.

بانوی ایران
سه شنبه 01 تیر 1389, 23:56 عصر
خيلي ممنون از توجه و راهنماييتون
من اعداد 5 و 6 رو ميزنم كار ميكنه
7 و 8 كار نميكنه
9و10 كار ميكنه
و الا اخر همينطوره
ولي شما ميگيد تا عدد 14 كار ميكنه
ولي من كه اجراش ميكنم براي اعداد بزرگتر هم كار ميكنه مثلا 17 و 18( اما 15 و 16 كار نميكنه)
يعني مشكل از كامپايلرمه؟
راستي هدر clrscrچيه؟ undeclaredميزنه

qanewaisi
چهارشنبه 02 تیر 1389, 07:19 صبح
خيلي ممنون از توجه و راهنماييتون
من اعداد 5 و 6 رو ميزنم كار ميكنه
7 و 8 كار نميكنه
9و10 كار ميكنه
و الا اخر همينطوره
ولي شما ميگيد تا عدد 14 كار ميكنه
ولي من كه اجراش ميكنم براي اعداد بزرگتر هم كار ميكنه مثلا 17 و 18( اما 15 و 16 كار نميكنه)
يعني مشكل از كامپايلرمه؟
راستي هدر clrscrچيه؟ undeclaredميزنه
هدر این دستور همونی هست که خودتون نوشتید :
conio.h
دستور رو هم بصورت clrscr();بکار ببرید.
من همین حالا هم تست کردم و تا عدد 38 کار کرد!

بانوی ایران
پنج شنبه 03 تیر 1389, 01:08 صبح
پس اينطور كه پيداس مشكل از كامپايلرمه
خيلي لطف كرديد دوست عزيز
ميشه يه سوال ديگه هم بپرسم
clrscr
چي كار ميكنه
و همينطور تابع gotoxy هدرش چيه؟
چون كامپايلر من نميشناستش

clover
پنج شنبه 03 تیر 1389, 01:36 صبح
سلام
برنامه تصحیح شده :

#include<stdio.h>
#include<conio.h>
void tick (int N)
{
int line,space,k,m;
for(line=1;line<(N/2);line++)
{
for(space=line;space<N;space++)
{
printf(" ");
}
printf("*\n");
}

k=N-(N/2)+1;
if(k%2==0)
{
m=k/2;
for(line=0;line<m;line++)
{
for(space=0;space<line;space++)
printf(" ");
printf("*");
for(space=(2*line);space<(2*m-2);space++)
printf(" ");
printf("*\n");
}
}
else
{
m=(k/2)+1;
for(line=0;line<m-1;line++)
{
for(space=0;space<line;space++)
printf(" ");
printf("*");

for(space=(2*line);space<(2*m-3);space++)
//{
printf(" ");
printf("*\n");
//}
}

for(space=0;space<line;space++)
printf(" ");
printf("*");
}
}
int main()
{
int n;
printf("how many star?");
scanf("%d",&n);
tick(n);
getch();
return 0;
}

موفق باشید

clover
پنج شنبه 03 تیر 1389, 01:43 صبح
clrscr
چي كار ميكنه
و همينطور تابع gotoxy هدرش چيه؟
چون كامپايلر من نميشناستش

clrscr بافر صفحه نمایش را پاک میکنه و gotoxy هم اشاره گر خواندن یا نوشتن را به مکان مورد نظر منتقل میکنه

این دو تابع جزو توابع استاندارد ++C نیستند و مربوط به کامپایلر بورلند هستند، با این حال می تونید عمل این توابع را در کامپایلر ها مختلف شبیه سازی کنید:

http://barnamenevis.org/forum/showthread.php?t=92264