kazook. Marts 1, 2009 Share Marts 1, 2009 Varbūt nepareizi uztvēru problēmu, bet vai vienkāršāk un pārskātāmāk nebūtu kaut kas šāds? result=0 If CheckBox1.Value=True Then result=result+1 If CheckBox2.Value=False Then result=result+1 If CheckBox3.Value=True Then result=result+1 If CheckBox4.Value=False Then result=result+1 If CheckBox1.Value=True Then result=result+1 TextBox2.Value = result Kur true un false var mainīties atkarībā no tā vai apgalvojums patiess vai aplams. Link to comment Share on other sites More sharing options...
Guest ADEX Marts 1, 2009 Share Marts 1, 2009 Citiem vārdiem sakot - ja ir vairāki IF-THEN-ELSE, tad ir nepieciešams viennozīmīgi nodefinēt, uz kuru IFu attiecas kurš ELSE. Sevišķi - ja IFi ir iekļauti cits citā. Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 (labots) Variantā ja visi if them else ir precīzi nodefinēti viss darbojas. Problēmas rada pēdējais else, kurš aptver visus atlikušos variantus. Risinājums manuprāt būtu nodefinēt lai pēdējais else darbojas tikai ar čekboksiem. Man ir aizdomas kas tas cenšas aptvert arī labelus un textlauciņus. Var teikt visu parējo kas atrodas formā. Un tā kā variants ar Case darbojas ļoti labi, domāju, ka ar to arī jāsamierinās. Mani tas pilnīgi apmierina. Labots Marts 1, 2009 - Konko Link to comment Share on other sites More sharing options...
Vilx- Marts 1, 2009 Share Marts 1, 2009 Nē, ADEX, izskatās, ka tur nav šis gadījums. Vispār, es arī nesaprotu, kāpēc tas nestrādā. Moš vari iemest to powerpointa failu? Link to comment Share on other sites More sharing options...
bubu Marts 1, 2009 Share Marts 1, 2009 Neatceros vairs beisika sintaksi - bet tas kols pēc Else ir vajadzīgs? Vai nevar to noņemt un pašu else darbību rakstīt nākamajā rindiņā? Link to comment Share on other sites More sharing options...
Vilx- Marts 1, 2009 Share Marts 1, 2009 Jā, ir vajadzīgs. Tas, kas iekš Pascal/C ir semikols, iekš beisika ir newline. Kolu izmanto, lai vienā rindā saspiestu vairākas komandas. Tāpat apakšsvītru _ izmanto, lai vienu komandu sadalītu vairākās rindās. Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 Esmu gan licis iekavas gan dzēsis, var teikt izmēģināju visu. Ceturtās formas uzdevumiem par upēm, kuru iztekas atrodas ārpus Latvijas ir tas kods. Pievienoju to. Man gan jau ir arī cits pilnīgi ejošs variants ar Case. Vilks.ppt Link to comment Share on other sites More sharing options...
Vilx- Marts 1, 2009 Share Marts 1, 2009 Wtf? Man tur tikai viens pats slaids, un nekādu čekbokšu. Lai arī VB kodu atradu. OK, es tagad uz laiciņu atslēdzos. P.S. Kaut kad vēlāk, kad te nebūs tik liela aktivitāte, pārcelšu šo topiku uz programmēšanas sadaļu. Link to comment Share on other sites More sharing options...
bubu Marts 1, 2009 Share Marts 1, 2009 Man nav powerpointa (jo lietoju OpenOffice), taču ar powerpoint vieweri man ar rāda tikai vienu slaidu. Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 Jāpalaiž pilnkrāna režīmā. Tad uz pogas sākt un viss notiek. Lai redzētu kodus Tools/ Macro/ Visual Basic Editor. Link to comment Share on other sites More sharing options...
nullchar Marts 1, 2009 Share Marts 1, 2009 Pascal un vairākās citās valodās, ja pareizi atceros, rindiņa beidzās ar semikolu. Visual Basic (un VBA) savukārt kā "semikolu" izmanto pāreju jaunā rindā un ir būtiski, vai kods atrodas vienā rindā vai sadalīts pa vairākām. Tavā kodā VB izpilda pirmo rindiņu If ... Then ... un uzskata, ka viss, darbiņš padarīts. Tālāk ņem un sāk "no nulles" izpildīt nākamo rindu (ElseIf ... Then ...) uz attopas - pag, ElseIf, bet kur tad palika If, kam bija jābūt pirms tam? Un izmet kļūdu "Else without If". Lai kods darbotos, izteiksmi aiz Then pārvieto jaunā rindā, tad VB "sapratīs", ka tā ir nevis tikai viena atsevišķa If..Then rindiņa, bet gan garāka konstrukcija, kur kods turpinās nākamajās rindās un atpazīs arī tālākos ElseIf un Else. Varbūt nesakarīgi izskaidroju, bet, ja to tavu kodu pārveido par attiecīgi If CheckBox2.Value And CheckBox4.Value And Not CheckBox1.Value And Not CheckBox3.Value Then TextBox2.Value = 2 ElseIf (CheckBox2.Value Xor CheckBox4.Value) And (Not CheckBox1.Value Or Not CheckBox3.Value) Then TextBox2.Value = 1 Else TextBox2.Value = 0 End If un If CheckBox2.Value = True And CheckBox4.Value = True And Not CheckBox1.Value = True And Not CheckBox3.Value = True Then TextBox2.Value = 2 ElseIf (CheckBox2.Value = True Xor CheckBox4.Value = True) And (Not CheckBox1.Value = True Or Not CheckBox3.Value = True) Then TextBox2.Value = 1 Else TextBox2.Value = 0 End If tad tas strādā. Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 Liels paldies! Tiešām aizgāja! Viss ir OK! Link to comment Share on other sites More sharing options...
bubu Marts 1, 2009 Share Marts 1, 2009 (labots) Es īsti nesapratu... kas iepriekš kļūdas paziņojuma nebija? Vai arī VBA kļūdas sagremo "pa savam" un ļauj izpildīt sintaktiski nepareizu kodu? Labots Marts 1, 2009 - bubu Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 VBA šajā gadījumā nekādus kļūdas paziņojumus neizmet. Jo ir paradokss - ja visi if then else ir sarakstīti vienā rindiņā vis ir OK! Problēma sākas ar brīdi kad pēc then jāpāriet uz jaunu rindiņu. Arī grāmatā tas nekur nav uzsvērts. Vienkārši ir kodu piemēri, kuros reizēm visa konstrukcija ir sarakstīta vienā rindiņā. Un ir kodi ar pāreju pēc then jaunā rindiņā. Tāpēc arī es iekritu! Link to comment Share on other sites More sharing options...
bubu Marts 1, 2009 Share Marts 1, 2009 (labots) Nu to, ka vienā rindiņā var rakstīt, tas nav nekāds paradokss. Tā ir normāla beisika sintakse. Es iepriekš pieņēmu, ka tev tur tās vairāka rindiņas ir arī normālā sintaksē Reku VB dokumentācijā ir abi varianti pieminēti: http://msdn.microsoft.com/en-us/library/752y8abs.aspx Bet tas ir dikti dīvaini, ka nekādu kļūdu paziņojumu par to nebija... Es tādā programmēšanas valodā negribētu programmēt. Labots Marts 1, 2009 - bubu Link to comment Share on other sites More sharing options...
nullchar Marts 1, 2009 Share Marts 1, 2009 Kā es saprotu, tad ja tu to formu palaid pa taisno no Visual Basic Editora, tad tas skaitās Debug Mode un tiek izmests kļūdas paziņojums. Savukārt, ja tu to pašu palaid no prezentācijas, tad tas laikam skaitās "Runtime" un, sastopot kļūdu, defaultā darbība ir aizvērt visu ciet bez komentāriem. Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 Neiedziļinoties lietas būtībā domāju, ka VBA to neuzskata par kļūdu tāpēc, ka ja visi pēc pēdējā else iespējamie varianti ir precīzi konkretizēti viss darbojas. Par kļūdu tas kļūst tad ja pēdējais else nav precīzi konkretizēts. Un kā VBA var zināt, ka pēdējais else netiks konkretizēts. Vismaz man ir tāda nojauta par problēmas sakni. Link to comment Share on other sites More sharing options...
Vilx- Marts 1, 2009 Share Marts 1, 2009 Nē, nē un vēlreiz nē. Tā tas principā nevar būt. Ko tas vispār nozīme "konkretizēti"? IF'am tiek dots pavisam konkrēts nosacījums (boolean izteiksme). ELSE ir tad, ja šī izteiksme ir FALSE. Cik vēl konkrētāk var? Link to comment Share on other sites More sharing options...
Konko Marts 1, 2009 Author Share Marts 1, 2009 Domāju, ka tagad viss ir skaidrs. Vienkārši biju pielaidis iesācēju kļūdas. Tagad viss darbojas. VBA pats joprojām tikai apgūstu un to, kas man šobrīd vajadzīgs esmu atradis. Link to comment Share on other sites More sharing options...
Vilx- Marts 1, 2009 Share Marts 1, 2009 Prieks par to. Iesaku arī turpmāk neskaidrās vietas iemest šeit, forumā, apspriešanai. Lai nesanāk skolniekiem iemācīt nepareizi. Link to comment Share on other sites More sharing options...
nemirst Marts 2, 2009 Share Marts 2, 2009 Kā es mēģinātu darīt:Ir 2 (boolean) masīvi. 1. masīvā glabājas pareizās atbildes uz jautājumu. 1 jeb "True" ir pareiza, 0 jeb "False" - nepareiza. Tavā gadījumā ar 5 Checkboxiem tas būtu 1 0 1 0 1 2. masīvā glabājas lietotāja saķeksētais variants. Piem, ja iečekots 1. un 4., tad masīvs izskatās 1 0 0 1 0 Šis ir ļoti labs, vienkāršs, uzskatāms variants. Vēl uzskatāmāk man liekas nevar:) Link to comment Share on other sites More sharing options...
Konko Marts 2, 2009 Author Share Marts 2, 2009 (labots) Saprotu, bet tas variants ar case mani pilnīgi apmierina, un pie tā arī palikšu. Varbūt tikai tiem, kuri gribēs 9 vai 10 piedāvāšu lai paši izkož kā pareizi izmantot risinājumam masīvus. Labots Marts 2, 2009 - Konko Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!