Jump to content

Kā sauc veselus skaitļus, kurus nevar iegūt no iepriekšējo skaitļu summas?


Konko
 Share

Recommended Posts

kazook.

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

  • Replies 101
  • Created
  • Last Reply

Top Posters In This Topic

  • Vilx-

    25

  • bubu

    5

  • Konko

    40

  • nullchar

    6

Top Posters In This Topic

Guest ADEX

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

(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 - Konko
Link to comment
Share on other sites

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

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

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

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

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

 

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

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

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

nullchar

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

(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 - bubu
Link to comment
Share on other sites

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

(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 - bubu
Link to comment
Share on other sites

nullchar

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

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

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

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

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

nemirst
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

(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 - Konko
Link to comment
Share on other sites

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 kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share


×
×
  • Izveidot jaunu...