[ inherited @ 09.01.2007. 16:55 ] @
Treba mi funkcija ili procedura na osnovu koje se racuna obican kontrolni broj. U TEdit se unesu slova i/ili brojevi, u drugom TEDit - je broj 97 a u trcem treba dobiti izracunati broj? |
[ inherited @ 09.01.2007. 16:55 ] @
[ de_c0der @ 09.01.2007. 21:03 ] @
Ne kontam, kako slova/brojevi, kako ces zbrojit 'aaa' sa 97?
Postavi 3 edita na formu i nesto ovako: Code: Edit2.text:='97'; Edit3.text:=IntToStr(StrToInt(Edit1.text)+StrToInt(Edit2.text)); ne kontam sta ce ti to... [ goranvuc @ 09.01.2007. 21:09 ] @
Znam da se vi Delphi programeri "gadite" od VB-a, ali posto su tvoje kolege ocigledno neraspolozene da ti pomognu, evo ti resenje u VB 6.0 http://www.elitesecurity.org/t221589-0#1315556
Nadam se da ces prevazici neprijatnost jezika i uspeti da prevedes na Pascal ![]() [ dogriz @ 10.01.2007. 08:07 ] @
Zna li neko po kom modelu se računa kontrolni broj za PIB? Isto model 97? Možda model 11?
Ako neko zna, neće mi smetati ni ako je primer urađen u VB ;) Treba mi otprilike sledeće: "kontrolni broj"-oznaka opštine-PIB (oznaka opštine je npr. 232 (Sombor)) [ inherited @ 10.01.2007. 15:22 ] @
Hvala na odgovorima, ali posto sam tek uplivao u vode Delphi programiranja, tesko da bih samostalno mogao prevesti kod iz VB u Delphi.
Dobro, ako ima neko jos neko resenje, bio bih zahvalan. Edit: googlao sam, al nisam nasao nista konkretno, jedino da sami nesto sklepamo, po nekoj formuli (koliko sam skontao koristi se 97, sifra opstine i jos nesto u kombinaciji!?) [ Whois @ 10.01.2007. 21:21 ] @
Ajde da pokusam da prevedem na brzaka (onko malo pijan :) )
Uputio te je na ovo: Code: Public Function KontrolniBroj(ByVal inModel As Variant, ByVal inTekst As String) As String Dim varInput_Value As Variant Dim varResult As Variant KontrolniBroj = "" If inTekst = "" Then Exit Function ObradiTekst inTekst If Not IsNumeric(inTekst) Then Exit Function varInput_Value = CDec(inTekst) * 100 varResult = CDec((varInput_Value / inModel) - Fix(varInput_Value / inModel)) varResult = Round(varResult, 2) varResult = inModel + 1 - Round(varResult * inModel) KontrolniBroj = CStr(varResult) If Len(KontrolniBroj) = 1 Then KontrolniBroj = "0" & KontrolniBroj End If End Function Private Sub ObradiTekst(ByRef inTekst As String) Dim Slova Dim Vrednosti Dim intBrojac As Integer Dim intBrojac2 As Integer Dim strTMP As String inTekst = UCase(inTekst) strTMP = "" Slova = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _ "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _ "U", "V", "W", "X", "Y", "Z") Vrednosti = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _ "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", _ "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", _ "30", "31", "32", "33", "34", "35") For intBrojac = 1 To Len(inTekst) For intBrojac2 = 0 To UBound(Slova) If Mid(inTekst, intBrojac, 1) = Slova(intBrojac2) Then strTMP = strTMP & Vrednosti(intBrojac2) End If Next Next inTekst = strTMP End Sub A to bi trebalo da bude ovo (a ti ispravi sigurno ima poneka greska): Code: prvo idemo da obradimo string i da slova pretvorimo u cifre function Obradi(s: string): string; var i: integer; begin s:=trim(uppercase(s)); result :=''; for i:=1 to length(s) do if (s[i]>='0') and (s[i]<='9') then result :=result +s[i] else if (s[i]>='A') and (s[i]<='Z') then result := result+inttostr(10+chr(s[i])-65); end; da kazemo da je to isto kao ona funkcija dole idemo na racunanje: function KB(k, br: string): string; var kontbr, inval, res:double; begin kontbr:=strtofloat(k); inval := strtofloat(obradi(br))*100; res:= roundto((inval/kontbr)-trunc(inval/kontbr),2); res:=kontbr+1-round(res*kontbr); result := rightstr(' '+floattostr(res),2); end; tako nekako... naravno ovo ti nece raditi sa jako velikim brojevima. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|