Pytania od poczatkujacego

0

Witam! Jestem poczatkujacy i mam maly problem.
Mam taki warunek:

IF (M='1') OR (M='2') OR (M='3') OR (M='4') OR (M='5').... OR (M='50') THEN

Bez sensu jest dla mnie wypisywac wszystkie wyrazy az do 50tego wiec probowalem znalezc inne rozwiazanie.

Wpadłem na pomysł by stworzyć 50 elementowy/wyrazowy zbior a nastepnie sprawdzic czy m zawiera sie w tym zbiorze.

Jednak na pomysle sie skonczylo. Czy ktos moglby mi napisac jak mialo by to wygladac? Probowalem na wiele sposobów jednak się nie udało.

0

Zbiory w Pascalu działają tylko na typach liczbowych oraz do nich pochodnych (jak boolean czy char).
Najłatwiej byłoby chyba zamienić to M na liczbę oraz sprawdzić, czy mieści się w zakresie [1..50].

0

Niestety moje m bedzie przyjmowalo wartosci w postaci kodow: np c574, j4845, g464 itd. W tym przypadku musi zostać string (o ile dobrze rozumiem).
Może jakiś inny sposób?

0

Moje rozwiązanie wciąż będzie poprawne, o ile dobrze zrozumiałem :P

Var Number: Integer;
Begin
 if (TryStrToInt(M, Number)) Then
  if (Number in [1..50]) Then
  Begin
   do_magic();
  End;
End;
0

Hmm, nie jestem pewien czy się dobrze rozumiemy :P

Dla pewności zmienie troche warunki:

IF (M='c574') OR (M='c4675') OR (M='cg467') OR (M='p504') THEN działanie1 ELSE działanie2

Uzytkownik podaje kod produktu, jeśli jest on poprawny działanie1, jeśli nie działanie2.
Im wiecej produktow tym wiecej kodów. Wydaje mi sie, ze nie ma tutaj powiazania miedzy poprawnoscią kodu a ich ilością(zakresem). :P

0

lol, jeżeli masz takie zabezpieczenie robić jako "kod produktu", to może od razu sobie daruj.
1.Nawet triple-newbie reverser takie coś obejdzie. Obchodzenie drabinek if'ów to są pierwsze lekcje w reversowaniu i crackowaniu aplikacji.
2.Takie rzeczy powinny być sprawdzane albo poprzez wysłanie danych do serwera, który to waliduje, albo przynajmniej za pomocą jakiegoś wbudowanego generatora/sprawdzacza haseł, który nie jest drabinką if-ów...

0

Kod produktu: nie chodzi tutaj o haslo.
Po prostu mam liste produktow wraz z ich cenami oraz innymi danymi. Zeby zobaczyc informacje o danym produkcie należy wpisać jego kod. Czyli po prostu identyfikator produktu.

0

A, ok - źle zrozumiałem ;)
Myślałem, że masz na myśli coś w rodzaju klucza do programu.

W takim wypadku oprócz case:

Case M of
 'aasdf', '120asd', 'asdn23': costam;
 else cos_innego;
End;

Można wykorzystać jeszcze TStringList.

0

No właśnie próbowałem też CASEm, ale on chyba nie przyjmuje danych typu string.

0

FPC bezproblemowo bodajże od wersji 2.4.4.
W Delphi od najnowszych wersji podobno też.

0

Ok, dzieki wielkie.

Czyli w moim przypadku raczej nie znajde "mało skomplikowanego" sposobu na zmienienie tego IFa? Mam niestety narzuconego Dev_Pascala. :/

0

Och, ależ jest mało skomplikowany pomysł: Dev-Pascal korzysta z FPC, więc wystarczy pobrać najnowszą wersję FPC i wrzucić do odpowiedniego katalogu.
Jak się nauczyciel/wykładowca/wtf przyczepi, to powiedz, że narzucone miałeś środowisko, a nie wersję kompilatora ;)
Also, to każdemu wyjdzie na dobre, bo stare wersje FPC posiadały czasem małe niedopatrzenia i pomniejsze bugi :P

#Edit - możesz jeszcze zrobić tablicę.

0

Hehe, ok. Dzieki za pomoc :)
Jeśli nie da rady to zostawie te IFy. W zasadzie swoją role spelniaja tylko bedzie malo estetycznie wygladalo po dodaniu kilkudziesieciu "produktow". :P
Ale chyba wazne, ze dziala :))

0

Zawsze pozostaje jeszcze tablica:

Const product_codes: Array[0..4] of String = ('1024asdf', 'infinity', 'aasdf', '10249123', 'lol');

Function isValidProductCode(const Code: String): Boolean; {inline;}
Var Current: String;
Begin
 For Current in product_codes Do
  if (Current = Code) Then
   Exit(True);

 Exit(False);
End;

Nie wiem czy tamten archaiczny FPC posiada konstrukcję for..in - jeżeli nie, po prostu zastąp to zwykłym iterowaniem po tablicy za pomocą pętli for..to..do.

Ale chyba wazne, ze dziala

Ważny jest czytelny kod :P

0

Ok, sprobuje to jakos ogarnac, bo tablice praktycznie dopiero poznaje. Dzieki jeszcze raz :)

0

Nie lepiej to wczytać sobie listę produktów z jakiegoś pliku i iterując po każdej linii z produktami porównywać? (można to usprawnić wyszukiwaniem binarnym, ale jak masz problem z takimi podstawami to nie będę mieszał) Zaszywanie w programie informacji o produktach mija się z celem co za każdym razem jak nowy produkt dodasz to rekompilacja? Bezsens.
Wczytaj sobie produkty do np. TStringList jak już radził @Patryk27 jest wygodna metoda LoadFromFile, i porównuj szukany produkt przechodząc po tablicy Strings stworzonego obiektu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1