Optymalizacja kodu


Witam!

Mam taki przykaładowy kawałek kodu:

If a = 0 Then : Gosub a_0 : End If       
If b = 1 Then : Gosub b_1 : End If
If c = 2 Then : Gosub c_2 : End If
If d = 3 Then : Gosub d_3 : End If
If e = 4 Then : Gosub e_4 : End If
If f = 5 Then : Gosub f_5 : End If
If g = 6 Then : Gosub g_6 : End If
If h = 7 Then : Gosub h_7 : End If
If i = 8 Then : Gosub i_8 : End If
If j = 9 Then : Gosub j_9 : End If

Oczywiście podprogramy wszystkie również są.
Czy da się to przepisać w taki sposób, by po znalezieniu warunku prawdziwego skoczył do odpowiedniego podprogramu, wykonał go i po powrocie nie sprawdzał już kolejnych?

Próbowałem zagnieżdzać wszystkie kolejne instrukcje warunkowe jedna w drugiej, ale nic to nie daje, bo Return na końcu podprogramu wraca zawsze tam, skąd dokonał się skok i tak czy siak mieli niepotrzebnie wszystkie następne instrukcje...

Myślę nad tym i myślę i nic sensownego nie potrafię wymyśleć ;(




Portret użytkownika mirley

Re: Program

jest kilka metod. najlepiej jest użyć instrukcji Select Case

SELECT CASE var
 
  CASE test1 : statements
 
[CASE test2 : statements ]
 
CASE ELSE : statements
 
END SELECT

trzeba mieć jedną zmienną od której warunek jest sprawdzany a nie w każdej linijce inną, chodzi mi o to if a= 0, a w drugiej jest if b= 1, a czemu nie if a=1?

Można tez dodać zmienną bitową np "Wykonuj", normalnie będzie ona równa 1, a w każdym z podprogramów dasz:

if Wykonuj = 1 then
  Wykonuj = 0 
 
  'reszta poleceń w tym podprogramie 
 
end if

po skończeniu tych wszystkich ifów dasz Wykonuj = 1 i nastepne wejście znowu wykona tylko jeden podprogram ale zasze będzie to pierwszy który spełni warunek .To drugie rozwiązanie jest mniej eleganckie niż case

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika villen

Problem już rozwiązałem,

Problem już rozwiązałem, okazało się że nie w instrukcjach warunkowych tkwił problem.
Dzięki za odpowiedź, dopiero dzisiaj dowiedziałem się że z forum jest coś nie tak ;)