تبدیل کدهای قدیمی QBasic به **VB.NET** (که بخشی از .NET مدرن است) تغییرات زیادی دارد، چون VB.NET یک زبان «شیءگرا» (Object-Oriented) است و دیگر از شماره سطر یا دستورات مستقیم گرافیکی مثل `SCREEN 8` استفاده نمیکند.
برای اینکه این برنامه را در محیطهای مدرن (مثل Visual Studio) اجرا کنید، دو راه وجود دارد:
1. **Console Application** (ساده و متنی)
2. **Windows Forms** (گرافیکی و با پنجره)
در اینجا نسخه **Console Application** را برایتان مینویسم که منطق امتیازدهی و محاسبات برنامه شماره ۳۲ را دقیقاً پیادهسازی میکند:
```vbnet
Imports System
Module Program32
Sub Main()
' تنظیمات اولیه
Dim rand As New Random()
Dim number As Integer
Dim mark As Double = 0
Dim n, m, x, z, y As Integer
Console.Title = "Math Quiz - Program No. 32"
' دریافت تعداد سوالات
Console.Write("ENTER NUMBER OF QUESTIONS: ")
If Not Integer.TryParse(Console.ReadLine(), number) Then
Console.WriteLine("Invalid input. Exit.")
Return
End If
For i As Integer = 1 To number
Console.Clear()
Console.WriteLine("--- QUESTION {0} OF {1} ---", i, number)
Console.WriteLine("----------------------------")
' تولید اعداد تصادفی (بین 0 تا 9)
n = rand.Next(0, 10)
m = rand.Next(0, 10)
x = rand.Next(0, 10)
' نمایش بخش اول سوال (ضرب)
' در کد اصلی: N * M تقسیم بر M که باید پاسخ N باشد
Console.WriteLine("Result of (N*M): {0}", n * m)
Console.WriteLine("Divided by M: {0}", m)
Console.Write("Enter first answer (Z): ")
If Integer.TryParse(Console.ReadLine(), z) Then
' بخش دوم سوال (جمع با X)
Console.WriteLine("Now add X: {0}", x)
Console.Write("Enter final answer (Y): ")
If Integer.TryParse(Console.ReadLine(), y) Then
' بررسی شرط درستی (دقیقاً مشابه کد QBasic)
If z = n AndAlso y = z + x Then
Console.Beep()
Console.WriteLine("CORRECT!")
mark += 20.0 / number
Else
Console.WriteLine("INCORRECT!")
Console.WriteLine("The correct Z was {0} and Y was {1}", n, n + x)
End If
End If
End If
Console.WriteLine("Press Enter for next question...")
Console.ReadLine()
Next
' نمایش نمره نهایی
Console.WriteLine("-----------------------------")
Console.WriteLine("FINAL MARK = {0:F2}", mark)
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
End Module
```
### تغییرات مهم نسبت به نسخه QBasic:
1. **مدیریت اعداد تصادفی:** در VB.NET از کلاس `Random` استفاده میکنیم که بسیار دقیقتر از `RND` قدیمی است.
2. **ورودی کاربر:** به جای `INPUT` ساده، از `Console.ReadLine()` استفاده شده و با `Integer.TryParse` چک میکنیم که کاربر حتماً عدد وارد کند تا برنامه کرش (Crash) نکند.
3. **منطق امتیازدهی:** متغیر `mark` را از نوع `Double` تعریف کردم تا وقتی نمره را تقسیم بر تعداد سوالات میکنیم (مثلاً ۲۰ تقسیم بر ۳)، بخش اعشاری نمره از بین نرود.
4. **گرافیک:** چون محیط کنسول (CMD) اجازه رسم دایره و خط با مختصات پیکسلی را نمیدهد، بخشهای `LINE` و `CIRCLE` را با متن جایگزین کردم.
**نکته:** اگر بخواهید دقیقاً آن دایرهها و مستطیلها را در VB.NET رسم کنید، باید یک پروژه **Windows Forms App** بسازید و کدهای گرافیکی را در رویداد `OnPaint` فرم بنویسید. اگر مایل هستید، بفرمایید تا آن نسخه را هم برایتان آماده کنم.
در این وبلاگ به ریاضیات و کاربردهای آن و تحقیقات در آنها پرداخته می شود. مطالب در این وبلاگ ترجمه سطحی و اولیه است و کامل نیست.در صورتی سوال یا نظری در زمینه ریاضیات دارید مطرح نمایید .در صورت امکان به آن می پردازم. من دوست دارم برای یافتن پاسخ به سوالات و حل پروژه های علمی با دیگران همکاری نمایم.در صورتی که شما هم بامن هم عقیده هستید با من تماس بگیرید.