[ goranrst @ 16.08.2016. 13:26 ] @
Molio bi da ako neko ima raspoložen da pregleda ovaj jednostavan Code iz QBasic-a, koji treba da prikaže dali je Zbir cifara unesenog trocifrenog broja deljiv sa 3 ili nije (mala priprema za osnovnu skolu).
Problem je koji god broj da unesem izbaci mi da zbir nije deljiv, npr ubacim 126 i rezultat "Zbir nije deljiv" a znamo da jeste. Gde je greška? Hvala.

Code:
REM Deljivost zbira cifara trocifrenog broja sa brojem 3
CLS
10 INPUT n
IF n > 99 AND n <= 999 THEN
a = n / 100
b = (n / 10) MOD 10
c = n MOD 10
s = a + b + c
IF s MOD 3 = 0 THEN
PRINT "Zbir je deljiv";
ELSE
IF s MOD 3 <> 0 THEN
PRINT "Zbir nije deljiv"
END IF
END IF
ELSE PRINT "Greska"
GOTO 10
END IF
END
[ Shadowed @ 16.08.2016. 14:48 ] @
Nesto mi tu mnogo END IF-ova, ali mozda se ne secam dobro sintkase.
Elem, s MOD 3 ili jeste nula ili nije, ne moras oba da proveravas, tako da taj deo mozes da skratis:
Code:

IF s MOD 3 THEN
    PRINT "Zbir je deljiv"
ELSE
    PRINT "Zbir nije deljiv"
END IF

A onaj deo sa "greska" izbaci.

I da, imas ";" na kraju jedne linije pa vidi da ti to ne pobrka kod.

S druge strane, imamo pravilnost za odredjivanje deljivosti broja sa 3 koji kaze da je broj deljiv sa 3 ako mu je zbir cifara deljiv sa tri. Ti mozes iskoristiti to pravilo u obrnutom smeru i samo proveriti da li je uneseni broj deljiv sa 3 i ako jeste, znas da je i broj cifara
[ djoka_l @ 16.08.2016. 15:04 ] @
Ispiši vrednosti varijabli a, b i c
Nisam siguran da

a = n / 100
b = (n / 10) MOD 10

radi celobrojnu aritmetiku.
[ goranrst @ 16.08.2016. 16:25 ] @
Citat:
Shadowed:
Nesto mi tu mnogo END IF-ova, ali mozda se ne secam dobro sintkase.
Elem, s MOD 3 ili jeste nula ili nije, ne moras oba da proveravas, tako da taj deo mozes da skratis:
Code:

IF s MOD 3 THEN
    PRINT "Zbir je deljiv"
ELSE
    PRINT "Zbir nije deljiv"
END IF

A onaj deo sa "greska" izbaci.

I da, imas ";" na kraju jedne linije pa vidi da ti to ne pobrka kod.

S druge strane, imamo pravilnost za odredjivanje deljivosti broja sa 3 koji kaze da je broj deljiv sa 3 ako mu je zbir cifara deljiv sa tri. Ti mozes iskoristiti to pravilo u obrnutom smeru i samo proveriti da li je uneseni broj deljiv sa 3 i ako jeste, znas da je i broj cifara :)

Probao sam ovo što ste rekli i sada zbir je deljiv jedino ako je zbir = 11, a za sve ostalo nije deljiv...
Code:

REM Deljivost trocifrenog broja sa tri
CLS
10 INPUT n
IF n > 99 AND n <= 999 THEN
a = n / 100
b = (n / 10) MOD 10
c = n MOD 10
s = a + b + c
IF s MOD 3 = 0 THEN
    PRINT "Zbir je deljiv"
ELSE
    PRINT "Zbir nije deljiv"
END IF
GOTO 10
END IF
END

slika:





[ goranrst @ 16.08.2016. 16:29 ] @
Citat:
djoka_l:
Ispiši vrednosti varijabli a, b i c
Nisam siguran da

a = n / 100
b = (n / 10) MOD 10

radi celobrojnu aritmetiku.

Neznam tačno kako da ispišem vrednost varijabli, može neka sugestija...
[ djoka_l @ 16.08.2016. 20:20 ] @
Recimo

PRINT a, b, c

Proverio sam sintaksu QBasica, "/" je deljenje a "\" je celobrojno deljenje.
Pošto nemam QBasic i nemam nameru da ga instaliram, mogu samo da prepostavim zašto za 128 daje da je zbir cifara deljiv sa 3

128/100=1.28
(128/10) mod 10 = 12.8 mod 10 = 2.8
128 mod 10 = 8
1.28+2.8+8=12.08
pa onda to nekom magijom da 0 po modulu 3.
[ --ja-- @ 17.08.2016. 08:45 ] @
Lijepo je bilo prisjetiti se...

Code:
CLS
DIM broj AS INTEGER

DO
    INPUT "Koji broj"; broj
    IF (broj > 99 AND broj < 1000) THEN
        IF broj MOD 3 = 0 THEN
            PRINT "Zbroj znamenaka broja"; broj; "je djeljiv s 3."
        ELSE
            PRINT "Zbroj znamenaka broja"; broj; "nije djeljiv s 3."
        END IF
    ELSE
        EXIT DO
    END IF
LOOP WHILE broj > 99 AND broj < 1000

PRINT "Broj nije troznamenkasti!"

END
[ goranrst @ 17.08.2016. 14:25 ] @
Ljudi HVALA svima, sa malim zakašnjenjem, hvala za člana --ja--, vaš kod radi odlično.Bravo.
Ja sam sinoć rešio nekako ovaj problemčić na neki "svoj početnički način" i takođe "moj" kod radi kako treba i to izgleda ovako:

REM Zbir cifara trocifrenog broja deljiv sa brojem 3
CLS
INPUT n
IF n < 100 THEN
PRINT "GRESKA. Ponovite unos, broj treba biti trocifren!";
ELSEIF n >= 1000 THEN
PRINT "GRESKA. Ponovite unos, broj treba biti trocifren!";
ELSE
c = n MOD 10
x = n MOD 100
y = n MOD 1000
z = x / 10
d = y / 100
b = FIX(z)
a = FIX(d)
PRINT "Cifre unesenog broja su:"; a; b; c
s = a + b + c
IF s MOD 3 = 0 THEN
PRINT "Zbir cifara je deljiv sa brojem 3"
ELSE PRINT "Zbir cifara nije deljiv sa brojem 3"
END IF
END IF
END