[ 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?

[ 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.