PDA

View Full Version : مبتدی: مشکل در چاپ سری فیبو ناچی



Collector
جمعه 06 آبان 1390, 16:03 عصر
سلام

این برنامه را برای سری فیبو ناچی نوشتم ام عدد ها را تو در تو نشان میدهد.


int i;
long f1 = 0;
long f2 = 1;
Int32 a = 2;

System.Drawing.Pen p = new Pen(Color.Blue, a);
Font f = new Font("tahoma", 9, FontStyle.Regular, GraphicsUnit.Point);

for (i = 1; i <= 40; i++)
{
g.DrawString(string.Format("{0:##.##########}", f1), f, new SolidBrush(Color.Black), 0, i);
f2 += f1;
f1 = f2 - f1;

if (i % 5 == 0)
g.DrawString(string.Format("{0:##.##########}", " "), f, new SolidBrush(Color.Black), 0, i);
}

Amir Oveisi
جمعه 06 آبان 1390, 17:09 عصر
خوب چون مقدار i هر بار یک واحد زیاد میشه پس موقع draw‌ کردن هم یک پیکسل تو محور y ها میاد پایین. یک پیکسل خیلی کوچیکه برای این کار و مقادیر روی هم draw میشن. به جای i مثلا از i + 10‌ استفاده کنید تو DrawString. باید بهتر بشه.

Collector
جمعه 06 آبان 1390, 18:22 عصر
خوب چون مقدار i هر بار یک واحد زیاد میشه پس موقع draw‌ کردن هم یک پیکسل تو محور y ها میاد پایین. یک پیکسل خیلی کوچیکه برای این کار و مقادیر روی هم draw میشن. به جای i مثلا از i + 10‌ استفاده کنید تو DrawString. باید بهتر بشه.

سلام ممونم که پاسخ دادید
کدوم i رو تغییر بدم. امکانش هست کد را اصلاح کنید.

haniyehghassami
جمعه 06 آبان 1390, 20:27 عصر
سلام
g چی هست اینجا؟

j_naroogha@yahoo.com
جمعه 06 آبان 1390, 20:50 عصر
فکر کنم
g.DrawString(string.Format("{0:##.##########}", f1), f, new SolidBrush(Color.Black), 0, i);
من با قرمز نشون دادم.

Collector
جمعه 06 آبان 1390, 21:45 عصر
g چی هست اینجا؟

Graphics g;


فکر کنم
g.DrawString(string.Format("{0:##.##########}", f1), f, new SolidBrush(Color.Black), 0, i);
من با قرمز نشون دادم.

تغییری نکرد

پروژه رو آپ کردم.

Amir Oveisi
جمعه 06 آبان 1390, 23:37 عصر
جوابم درست نیست. با این کاری که من گفتم همه اعداد ۱۰ پیکسل میان پایین تر اما باز هم هر کدوم ۱ پیکسل با قبلی فرق داره. کدتون رو با دقت نگاه نکرده بودم. اشتباه از من بوده و بابتش عذر میخوام.
روش درست اینه که باید یک متغیر دیگه برای مشخص کردن موقعیت Y‌ هر عدد داشته باشید. به این شکل مثلا:
int yAxisPixel = 20;
for (i = 1; i <= 40; ++i)
{
g.DrawString(string.Format("{0:##.##########}", f1), f, new SolidBrush(Color.Black), 0, yAxisPixel);
f2 += f1;
f1 = f2 - f1;

if (i % 5 == 0)
g.DrawString(string.Format("{0:##.##########}", " "), f, new SolidBrush(Color.Black), 0, yAxisPixel);
yAxisPixel += 10;
}

موفق باشید

Collector
شنبه 07 آبان 1390, 00:52 صبح
جوابم درست نیست. با این کاری که من گفتم همه اعداد ۱۰ پیکسل میان پایین تر اما باز هم هر کدوم ۱ پیکسل با قبلی فرق داره. کدتون رو با دقت نگاه نکرده بودم. اشتباه از من بوده و بابتش عذر میخوام.
روش درست اینه که باید یک متغیر دیگه برای مشخص کردن موقعیت Y‌ هر عدد داشته باشید. به این شکل مثلا:
int yAxisPixel = 20;
for (i = 1; i <= 40; ++i)
{
g.DrawString(string.Format("{0:##.##########}", f1), f, new SolidBrush(Color.Black), 0, yAxisPixel);
f2 += f1;
f1 = f2 - f1;

if (i % 5 == 0)
g.DrawString(string.Format("{0:##.##########}", " "), f, new SolidBrush(Color.Black), 0, yAxisPixel);
yAxisPixel += 10;
}

موفق باشید

خیلی ممنون

اما من میخوام این چهل جمله 5 تا جمله 8 تایی افقی بشود. کجاش رو باید تغییر بدم.

Amir Oveisi
شنبه 07 آبان 1390, 01:17 صبح
در موردش فکر بکنید کار سخنی نیست :)
int yAxisPixel = 20;
int xAxisPixel = 5;
for (i = 0; i <= 41; ++i)
{
g.DrawString(string.Format("{0:##}", f1), f, new SolidBrush(Color.Black), xAxisPixel, yAxisPixel);
f2 += f1;
f1 = f2 - f1;
xAxisPixel += 60;
if (i % 8 == 0)
{

yAxisPixel += 10;
xAxisPixel = 5;
}

}