من یه برنامه می خوام که اینو چاپ کنه ؟(منظورم روی فرم)
*
* * *
* * * * *
* * *
*
یه زحمت بکشید همراه با توضیح جواب بدید که درکم از حلش بیشتر بشه.متشکرم . . .
کد:
Private Sub Form_Load()
Dim I As Long
AutoRedraw = True
Font.Name = "Courier New"
For I = 1 To 5
Print Space(Abs(3 - I)) & String((2 - Abs(3 - I)) * 2 + 1, "*")
Next
End Sub
و تحلیل کد برنامه :
تابع اولیه برنامه برای رویداد فراخوانی فرم :
تعریف یک متغیر I که برای حلقه سطر ها بکار رود.
مشخصه AutoRedraw فرم را True می کنیم تا نوشته های Print شده روی فرم پاک نشوند و ثابت بمانند.
فونت بکار رفته برای چاپ ستاره ها را روی فرم قلم Courier New تنظیم می کنیم. خوبی قلم Courier New این است
که طول کاراکتر های آن (مثلا فاصله و ستاره) یکسان است و ستاره ها مرتب و زیر هم قرار می گیرند.
کد:
Font.Name = "Courier New"
حلقه ای که به ازای هر یک از 5 سطر لوزی یکبار اجرا شود (سطر 1، سطر 2، ... و سطر 5)
حال ابتدا تصویر زیر را ببینید :
برای آنکه ستاره ها در هر سطری در جای درستی چاپ شوند بایستی کاراکتر های فاصله را در قبل از ستاره ها
چاپ کرد.
حالا باید فرمولی بسازیم که به ازای هر سطر I (مقدار 1 الی 5) تعداد فاصله مناسب را پیش از ستاره ها چاپ کند،
سطر اول 2 فاصله، سطر دوم 1 فاصله، سطر سوم 0 فاصله و سطر چهارم 1 فاصله و سطر پنجم 2 فاصله
فرمول (Abs(3 - I چنین پاسخی را دارد، ( Abs تابع قدر مطلق است)
تابع Space هم به تعداد پارامتر ورودی فاصله بر می گرداند مثلا (Space(3 برابر با سه کاراکتر فاصله است.
برای چاپ ستاره هم باید فرمولی بنویسیم که برای سطر اول (I = 1) یک ستاره، و برای سطر دوم (I = 2) سه ستاره
و برای سطر سوم پنج ستاره و برای سطر چهارم 3 ستاره و برای سطر پنجم 1 ستاره در نظر بگیرد.
فرمول زیر چنین حالتی را دارد :
تابع String یک کاراکتر را به تعداد مشخصی تکرار می کند، مثلا رشته ("*", String(3 رشته *** را بر می گرداند.
حاصل ترکیب این دو فرمول چنین خواهد بود :
کد:
Print Space(Abs(3 - I)) & String((2 - Abs(3 - I)) * 2 + 1, "*")