Dzisiaj pokażę Ci jak rozwiązać test na programistę, korzystając z języka VBA. Krąży w sieci zagadka dla osób chcących sprawdzić się pod względem tego, czy mogą zostać programistami.
Czym jest test na programistę?
Test polega na tym, aby wypisać liczby od 1 do 100, ale jeśli liczba będzie podzielna przez 3, to zamiast niej powinno pojawić się słowo „Fizz”, jeśli przez 5 to „Buzz”, ale jeśli jest podzielna przez 15 to „Fizz-Buzz”. Pozostałe liczby mają się wstawić bez zmian.
Zanim zaczniesz czytać dalej, spróbuj sam rozwiązać ten test.
A teraz przystępuję do rozwiązania zadania. Nową procedurę rozpoczynam od zdefiniowania zmiennej i jako double dla liczb zmiennoprzecinkowych. Na początek aktywuję komórkę A1, od której rozpocznie się wpisywanie wyników pętli.
Użyję pętli For Next, która idealnie się tutaj nada. Teraz wstawiam warunek sprawdzający, czy wynik dzielenia liczby i przez 15 równy jest wynikowi funkcji INT z dzielenia i przez 15. Funkcja INT wyciąga całości z liczb dodatnich, a to co jest po przecinku już się dla niej nie liczy.
Najważniejsze w rozwiązaniu tego testu jest to, aby zacząć sprawdzanie liczb od najwyższej z nich, ponieważ liczba 15 jest podzielna przez 15, 5 i przez 3. Gdybym rozpoczął sprawdzanie od najmniejszej liczby, to wynik byłby nieprawidłowy.
Teraz do aktywnej komórki wprowadzam wartość „Fizz-Buzz” jeśli spełniony jest pierwszy warunek. Jeśli nie, to wprowadzam kolejne warunki sprawdzające. Czyli jeśli nie przez 15, to czy jest podzielna przez 5, a następnie przez 3. Jeśli liczba i nie jest podzielna przez żadną z tych liczb, to ma wstawić po prostu jej wartość.
Na koniec zamykam pętlę, przechodzę do kolejnej komórki i uruchamiam makro, które wypisuje liczby według założonego schematu.
Jeśli wolisz wideo to zapraszam Cię na mój kanał YT:
2 thoughts on “Test na programistę”
Sub FizzBuzz()
Dim a As Long
With ActiveSheet
For a = 1 To 100
If a Mod 15 = 0 Then
.Cells(a, 1).Value = „Fizz-Buzz”
ElseIf a Mod 3 = 0 Then
.Cells(a, 1).Value = „Fizz”
ElseIf a Mod 5 = 0 Then
.Cells(a, 1).Value = „Buzz”
Else
.Cells(a, 1).Value = a
End If
Next
End With
End Sub
Cześć Tom,
Dziękuję za Twój komentarz. Przyznaję się, że wtedy jeszcze nie znałem modulo w VBA i w sumie dziś też uczę się coraz to nowych rzeczy 🙂