سوال : برنامه ای با ویژوال بیسیک ...

زیبااا

New Member
سلام . من مبتدیم و وی بی 6 رو جدیدا دارم یاد میگیرم رشته ی خودمم نیس و دس تنها یادش میگیرم برای همین زیاد گیر میکنم !!!! یه سوال دارم .

تو یکی از تمرینا نوشته شده برنامه ای بنویسین که عددی رو از ورودی گرفته و مشخص کنه که عدد یه رقمیه ؛ دو رقمیه یا سه رقمیه یا سایر...
با استفاده از select case باید بنویسیمش ...
خب این نوشتنش کاری نداره و ابکیه ... اینطوری نوشتمش :

[VB]

Private Sub Form_click()
Dim a%
a = Val(Text1.Text)


Select Case a
Case -9 To 9
MsgBox ("ye raghami")
Case -99 To 99
MsgBox "2 raghami"
Case -999 To 999
MsgBox "3 raghami"
Case Else
MsgBox "sayer"
End Select


End Sub

[/VB]

حالا سوال : اگه من بخوام متغیر a رو از نوع سینگل تعریف کنم!!!! بعد کدو بنویسم چطوری باید کد نویسی کنم؟
مثلا دوس دارم اعداد زیر 10 چه مثبت چه منفی چه اعشاری و چه صحیح ، یه رقمی در نظر گرفته بشن!! مثلا عدد 9.99 یه رقمی محسوب بشه !!!
نمیدونم چطوری باید تعریفشون کنم!!! بازه ی این اعداد یه رقمیو بین -9.99 تا 9.99 تعریف کردم ولی بعد متوجه شدم اگه عددو 9.999 بدم و برنامه رو تست
کنم، دو رقمی حساب میشه در حالیکه این غلطه !!!
ممنون میشم راهنماییم کنین !!
 

jeyson

Active Member
من c++ کار می کنم VB زیاد کار نکردم اما فک کنم متغیر رو از نوع اعشاری تعریف کنید درست شه؟
یا اینکه یه کار بهتر ، می تونید متغیر رو صحیح کنید! یغنی عدد رو گرد کنید به سمت پایین ( مراجعه شود به ریاضی دوم راهنمایی :wink: ) اینجوری میتونید تشخیص بدید نوع صحیح عدد در چه بازه ای هست!
مثلا
فرض کنیم 9.99 داریم
اگه گردش کنیم می شه 9! بعد میفهمیم یه رقمیه!!
اما یه سوال در انتها! مگه میشه گفت 9.99 چند رقمیه؟ من کلا بعد این همه وقت هنگ کردم با سوال شما :))
 

jeyson

Active Member
دوست عزیز من php کار می کنم که دقیقا شبیه c++ است.
طبق روشی که من تست کردم ، با استفاده از عملگر && یا همان and می توان مشکل اعشاری بودن رو حل کرد. به این صورت

[PHPS]<?php

/**
* @author JEYSON
* @copyright 2013
*/


$r = 16.28;
switch ($r){
case ($r>0) && ($r<10) : echo "1";
break;


case ($r>9) && ($r<100) : echo "2";
break;

case ($r>99) && ($r<1000) : echo "3";
break;

case ($r>999) && ($r<10000) : echo "4";
break;

case ($r>9999) && ($r<100000) : echo "5";
break;
default : echo "number is biger than 100000";
}
?>


[/PHPS]

همانطور که می بینید متغیر r برابر عدد اعشاری 16.28 است و پس اجرای برنامه ، اعدد 2 چاپ می شود!
 
آخرین ویرایش:

the_king

مدیرکل انجمن
کد:
Private Sub Form_Click()
    Dim a!
    a = Val(Text1.Text)
    Select Case Len(Replace(CStr(Abs(a)), ".", ""))
    Case 1
        MsgBox ("ye raghami")
    Case 2
        MsgBox "2 raghami"
    Case 3
        MsgBox "3 raghami"
    Case Else
        MsgBox "sayer"
    End Select
End Sub

عدد رو به با تابع Cstr به رشته تبدیل می کنیم و تعداد کاراکتر های رشته رو ملاک قرار می دهیم.
علامت - در اعداد منفی تاثیری در تعداد رقم ها نداره، پی از تابع Abs استفاده می کنیم که قدر مطلق رو حساب می کنه (عدد منفی رو مثبت می کنه)
کاراکتر . هم که مربوط به ممیز اعشاری است، در تعداد رقم ها موثر نیست، پس با تابع Replace کاراکتر "." رو به "" تبدیل می کنیم (حذف می کنیم)
چیزی که باقی می مونه رقم های عدد است، با تابع Len تعدادشون را بدست می آوریم.
 

زیبااا

New Member
من c++ کار می کنم VB زیاد کار نکردم اما فک کنم متغیر رو از نوع اعشاری تعریف کنید درست شه؟
یا اینکه یه کار بهتر ، می تونید متغیر رو صحیح کنید! یغنی عدد رو گرد کنید به سمت پایین ( مراجعه شود به ریاضی دوم راهنمایی :wink: ) اینجوری میتونید تشخیص بدید نوع صحیح عدد در چه بازه ای هست!
مثلا
فرض کنیم 9.99 داریم
اگه گردش کنیم می شه 9! بعد میفهمیم یه رقمیه!!



نه با اعشاری کردن درست نمیشه تستش کردم !!! فقط باید بازه ی عددو تحریف کرد !!!
اگه 9.99 گرد بشه به عدد 10 نزدیکتره و دو رقمی محسوب میشه !!! نمیخوام اینطوری بشه !!

اما یه سوال در انتها! مگه میشه گفت 9.99 چند رقمیه؟ من کلا بعد این همه وقت هنگ کردم با سوال شما :))

خب من میخوام تو این برنامه تمام اعداد اعشاری کوچکتر از 10 ، یه رقمی حساب بشن و گردشون نکنه . نمیدونم میشه همچین کدیو نوشت یا نه !!
( کلا قوانین ریاضیو نقض کردم تو این برنامه!!!)
باز خوبه هنگ کردین !! هنوز اول راهیم !! یه مدت بگذره از عمرتون 20 سال کم میشه !!!! :green:
 

زیبااا

New Member
کد:
Private Sub Form_Click()
    Dim a!
    a = Val(Text1.Text)
    Select Case Len(Replace(CStr(Abs(a)), ".", ""))
    Case 1
        MsgBox ("ye raghami")
    Case 2
        MsgBox "2 raghami"
    Case 3
        MsgBox "3 raghami"
    Case Else
        MsgBox "sayer"
    End Select
End Sub

عدد رو به با تابع Cstr به رشته تبدیل می کنیم و تعداد کاراکتر های رشته رو ملاک قرار می دهیم.
علامت - در اعداد منفی تاثیری در تعداد رقم ها نداره، پی از تابع Abs استفاده می کنیم که قدر مطلق رو حساب می کنه (عدد منفی رو مثبت می کنه)
کاراکتر . هم که مربوط به ممیز اعشاری است، در تعداد رقم ها موثر نیست، پس با تابع Replace کاراکتر "." رو به "" تبدیل می کنیم (حذف می کنیم)
چیزی که باقی می مونه رقم های عدد است، با تابع Len تعدادشون را بدست می آوریم.

مرسی . هنوز به این توابع نرسیدم برای همین کدو چپوندم تو قسمت ماژول (کپی کردم)!
وقتی عدد 9.3 رو به برنامه دادم گفت دو رقمیه !! میخوام کلا بعد از ممیزو حساب نکنه و با این روش تصمیم گیری کنه عدد یه رقمیه یا دو رقمی!!! ینی ممیز و قسمت اعشاریو نادیده بگیره !!!
 
آخرین ویرایش:

زیبااا

New Member
دوست عزیز من php کار می کنم که دقیقا شبیه c++ است.
طبق روشی که من تست کردم ، با استفاده از عملگر && یا همان and می توان مشکل اعشاری بودن رو حل کرد. به این صورت


همانطور که می بینید متغیر r برابر عدد اعشاری 16.28 است و پس اجرای برنامه ، اعدد 2 چاپ می شود!


بعله ... بسیار مچکرم !! فقط یه مشکل "کوچولو" هست اونم اینه که من پی اچ پی هم بلد نیستم !!! :green:
اتفاقا نظر منم همینه که با and میشه مشکل رو حل کرد ولی در مورد دستور select case در وی بی 6 نمیدونم چطوری میشه این کدو با and نوشت
چون فقط کاما و to و is برای این دستور تعریف شده !!!
 

the_king

مدیرکل انجمن
مرسی . هنوز به این توابع نرسیدم برای همین کدو چپوندم تو قسمت ماژول (کپی کردم)!
وقتی عدد 9.3 رو به برنامه دادم گفت دو رقمیه !! میخوام کلا بعد از ممیزو حساب نکنه و با این روش تصمیم گیری کنه عدد یه رقمیه یا دو رقمی!!! ینی ممیز و قسمت اعشاریو نادیده بگیره !!!

تابع Int اعشار رو حذف می کنه، به این نحوه که بزرگترین عدد صحیحی را بر می گرداند که از مقدار مورد نظر کوچکتر یا برابر آن باشد.
فرضا برای 9.8 یا 9.1 عدد 9 و برای 9.8- یا 9.1- عدد 10- را بر می گرداند (برای اعداد منفی یک واحد اختلاف وجود دارد)
به همین جهت باید Int با Abs (قدر مطلق) برای تبدیل کردن اعداد منفی به مثبت ترکیب شود.

کد:
Private Sub Form_Click()
    Dim a!
    a = Val(Text1.Text)
    Select Case Len(CStr(Int(Abs(a))))
    Case 1
        MsgBox ("ye raghami")
    Case 2
        MsgBox "2 raghami"
    Case 3
        MsgBox "3 raghami"
    Case Else
        MsgBox "sayer"
    End Select
End Sub
 

جدیدترین ارسال ها

بالا