2012-06-26 14 views
6

क्या हम कथन में दो या दो से अधिक स्थितियों को जोड़ सकते हैं? मुझे पता है कि सी # में हम एक आईएफ कथन में दो या दो से अधिक स्थितियों को जोड़ सकते हैं। क्या हम इसे डेल्फी में कर सकते हैं?एक में दो या दो से अधिक स्थितियों को गठबंधन करें यदि कथन

मुझे यह जांचना है कि उपयोगकर्ता ने फ़ॉर्म में तीन संपादन नियंत्रणों के लिए मूल्य दर्ज किया है या नहीं। सभी मदद के लिए धन्यवाद

+1

प्रत्येक प्रोग्रामिंग भाषा जो मुझे पता है, और 200 से अधिक है, इसमें बूलियन तर्क का कुछ रूप है, जिसमें संचालन और, या, और नहीं शामिल है। यदि आपने अभी तक उनको नहीं देखा है, तो आपको वास्तव में एक पुस्तक पढ़ने की जरूरत है। वास्तव में यदि आपने इसे सी # में किया है तो क्यों न केवल डेल्फी में कोशिश करें? केवल अंतर यह है कि डेल्फी कोष्ठक में हमेशा एक आईएफ स्टेटमेंट के साथ आवश्यक नहीं होता है। लेकिन जब कई समानता तुलना करते हैं, तो आपको उदाहरण के लिए 'if (a = b) या (c = d) 'लिखना चाहिए। –

+0

अतिरिक्त। आपको यह भी विचार करने की आवश्यकता है कि कुछ शर्तों को ब्रांड्स में समूह होने की आवश्यकता है जैसे ((ए = एक्स 1) और (बी = वाई 1)) या ((ए = एक्स 2) और (ए = वाई 2)) तो कुछ करें। – XBasic3000

उत्तर

10

बेशक। आप क्या कर सकते हैं कुछ की तरह:

if (A > 7) and (B < 13) or (C in [2, 4, 7]) then 

या संपादित करें नियंत्रण के लिए:

if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') then 

या, यदि वह यह है कि आप क्या चाहते हैं:

if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then 

etc.etc।

वास्तव में डेल्फी के बारे में एक पुस्तक पढ़ने के लिए फायदेमंद हो सकता है, उदाहरण के लिए डेल्फी भाषा गाइड, जो डेल्फी के प्रत्येक संस्करण (सहायता में, संदर्भ भाग में) या can be found online के साथ आता है।

प्रश्न के लिए: सामान्य रूप से, आप and, or और not का उपयोग करके विभिन्न स्थितियों को जोड़ सकते हैं। ऑपरेटर प्राथमिकता के साथ समस्याओं से बचने के लिए, आपको आमतौर पर प्रत्येक शर्त को कोष्ठक में रखना चाहिए, जैसा मैंने ऊपर किया था।

+0

वे ब्रांड्स के साथ एक बहुत जटिल कथन में भी जा सकते हैं, उदाहरण के लिए, 'अगर ((ए> 7) या ((बी =' एबीसी ') और नहीं (सी =' डीफ़ ')) या (डी <> 8)) और (आर> 8) तब ... '(जिसमें से बात कर रहे हैं '<>' सी #) –

+0

अन्य भाषाओं में' 0 = = 'की तरह है – user1469630

+5

लिंक के लिए धन्यवाद व्यक्तिगत रूप से मैं हमेशा() एस का उपयोग करता हूं जब लॉजिकल ऑपरेशंस होते हैं शामिल। नियमों को सीधे कई भाषाओं के बीच रखने की कोशिश करना सुरक्षित है। कंपाइलर वैसे भी वही कोड उत्पन्न करेगा, जब उनकी आवश्यकता नहीं होती है तो उनका उपयोग करने में कोई हानि नहीं होती है। स्पष्टीकरण के लिए –

16

सशर्त बयान के सामान्य रूप है में स्थिति गठबंधन करने के लिए And और Or ऑपरेटरों का उपयोग करना चाहिए:

IF "तार्किक अभिव्यक्ति" तो। .. ईएलएसई ...

"तार्किक अभिव्यक्ति" कोई बूलियन अभिव्यक्ति है। एक बुलियन अभिव्यक्ति एक अभिव्यक्ति का मूल्यांकन सत्य या गलत के रूप में किया जा सकता है।

बूलियन अभिव्यक्ति तुलना ऑपरेटरों और बूलियन ऑपरेटरों का प्रयोग कर बनाया जा सकता है।

तुलना ऑपरेटरों:

= equals 
<> not equals 
> greater than 
>= greater than or equals 
< less than 
<= less than or equals 

सेट तुलना ऑपरेटरों:

= equals 
<= returns true, if set1 is a subset of set2 
>= returns true, if set1 is a superset of set2 
in returns true, if an element is in the set 

बूलियन ऑपरेटरों:

AND logical and 
OR  logical or 
NOT logical not 
XOR logical exclusive disjucntion 

उदाहरण:

IF A = 10 THEN ... 
IF A >= B THEN ... 
IF C or D THEN ... (Note: C and D have to be logical, i.e. TRUE or FALSE) 
IF NOT E THEN ... (Note: E has to be logical, i.e. TRUE or FALSE) 

सी, डी और ई किसी भी तार्किक व्यंजक के साथ बदलें, उदाहरण के लिए हो सकता है:

तार्किक व्यंजक बूलियन ऑपरेटरों का उपयोग कर, उदाहरण के लिए द्वारा सरल तार्किक अभिव्यक्ति से निर्माण किया जा सकता
IF (edit1.text = '') OR (ISEMPTY(edit2.text)) THEN ... 
IF NOT checkbox1.checked THEN ... 

ध्यान दें कि:

IF (A = 10) AND (A >= B) THEN ... 
IF NOT ((A = 10) AND (A >= B)) THEN ... 

तार्किक अभिव्यक्ति लिखने में सामान्य गलती ऑपरेटर प्राथमिकता का ध्यान नहीं दे रही है (जिसे ऑपरेटर पहले मूल्यांकन किया गया था)।

A = 10 के बजाय,

IF A = 10 OR A >= B THEN ... 

ऊपर गलत है क्योंकि डेल्फी

10 OR A पहले मूल्यांकन करने के लिए कोशिश करता है: बूलियन ऑपरेटरों तुलना ऑपरेटरों की तुलना में अधिक पूर्वता, उदाहरण के लिए की है। यदि स्वयं एक तार्किक अभिव्यक्ति नहीं है, तो त्रुटि होती है।

समाधान कोष्ठकों के उपयोग से है, इसलिए यदि ऊपर ... फिर ... के रूप में लिखा जाना चाहिए:

IF (A = 10) OR (A >= B) THEN ...

जाँच 3 संपादन नियंत्रण के लिए, सशर्त बयान हो जाता है:

IF (Edit1.text <> '') AND (Edit2.text <> '') AND (Edit3.text <> '') THEN ...

नोट: थोड़ा विषय है, लेकिन संबंधित बंद। नि: शुल्क घटकों TJvValidators, TJvValidationSummary और TJvErrorIndicator Jedi JVCL project से एक अच्छा मान्यता तंत्र प्रदान करते हैं।

+7

+1, लेकिन कृपया कीवर्ड के लिए सभी कैप्स का उपयोग न करें। ऐसा 1 9 50 है। –

+0

मैंने ऑपरेटर की आपकी सूची में '<>' जोड़ा। –

+0

'in' भी होना चाहिए, लेकिन मुझे नहीं पता कि इसे 3 से कम शब्दों में संक्षेप में कैसे करें ... –

5

यह याद रखना महत्वपूर्ण है कि भाव बाएं से दाएं मूल्यांकन किया जाता है बहुत महत्वपूर्ण है।

इस उदाहरण में

if False and SomeFunction() then 

SomeFunction का मूल्यांकन नहीं किया जाएगा। यदि आप अपने आस-पास

if SomeFunction() and False then 

SomeFunction बारी() मूल्यांकन किया जाएगा।

+1

यह एक महत्वपूर्ण उत्तर है , अन्य सभी उत्तरों बहुत स्पष्ट हैं। –

+1

यह [बूलियन शॉर्ट-सर्किट मूल्यांकन] पर निर्भर करता है (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html) '{$ B}'/'{$ BOOLEVAL} 'डिफ़ॉल्ट रूप से इसे' OFF' पर सेट किया गया है। लेकिन अगर इसे 'कुछ' पर सेट किया गया है तो पहले उदाहरण में मूल्यांकन किया जाएगा। – kobik

+0

@ कोबिक आप सही हैं। लेकिन अगर कभी भी एक डेवलपर इसे स्थापित करेगा, तो मैं उसे शिकार करूँगा और उसकी सैनिटी पर सवाल उठाऊंगा। –

0

हालांकि, अगर का उपयोग कर "नहीं तो" तो:

नहीं तो ((edit1.Text = '2') या (edit2.Text = '3')) फिर ...

संबंधित मुद्दे