Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
milosic.jan1@scptuj.si
KALKULATOR-EVAL-FUNKCIJA
Commits
ef5d6315
Commit
ef5d6315
authored
Jan 18, 2022
by
Jan Milosic
Browse files
dela
parent
0b47c3bc
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
173 additions
and
33 deletions
+173
-33
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+3
-0
app/src/main/java/com/example/prva4a22/MainActivity.java
app/src/main/java/com/example/prva4a22/MainActivity.java
+98
-2
app/src/main/res/font/allerta_stencil.xml
app/src/main/res/font/allerta_stencil.xml
+7
-0
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+33
-23
app/src/main/res/values-night/themes.xml
app/src/main/res/values-night/themes.xml
+3
-3
app/src/main/res/values/colors.xml
app/src/main/res/values/colors.xml
+1
-0
app/src/main/res/values/font_certs.xml
app/src/main/res/values/font_certs.xml
+17
-0
app/src/main/res/values/preloaded_fonts.xml
app/src/main/res/values/preloaded_fonts.xml
+6
-0
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+2
-2
app/src/main/res/values/themes.xml
app/src/main/res/values/themes.xml
+3
-3
No files found.
app/src/main/AndroidManifest.xml
View file @
ef5d6315
...
...
@@ -18,6 +18,9 @@
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<meta-data
android:name=
"preloaded_fonts"
android:resource=
"@array/preloaded_fonts"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/example/prva4a22/MainActivity.java
View file @
ef5d6315
...
...
@@ -18,10 +18,106 @@ public class MainActivity extends AppCompatActivity {
vnos
=
findViewById
(
R
.
id
.
vnos
);
}
public
void
addText
(
View
v
){
public
void
addText
(
View
v
)
{
String
s
=
String
.
valueOf
(
vnos
.
getText
());
vnos
.
setText
(
s
+
((
Button
)
v
).
getText
().
toString
());
}
public
void
Clear
(
View
v
){
public
void
Clear
(
View
v
)
{
vnos
.
setText
(
""
);
}
public
void
Rezultat
(
View
v
)
{
String
s
=
String
.
valueOf
(
vnos
.
getText
());
s
=
s
.
replace
(
"÷"
,
"/"
);
s
=
s
.
replace
(
"×"
,
"*"
);
s
=
s
.
replace
(
"+/-"
,
"-"
);
try
{
vnos
.
setText
(
String
.
valueOf
(
eval
(
s
)));
}
catch
(
Exception
ex
){
vnos
.
setText
(
"Error"
);
}
}
public
static
double
eval
(
final
String
str
)
{
return
new
Object
()
{
int
pos
=
-
1
,
ch
;
void
nextChar
()
{
ch
=
(++
pos
<
str
.
length
())
?
str
.
charAt
(
pos
)
:
-
1
;
}
boolean
eat
(
int
charToEat
)
{
while
(
ch
==
' '
)
nextChar
();
if
(
ch
==
charToEat
)
{
nextChar
();
return
true
;
}
return
false
;
}
double
parse
()
{
nextChar
();
double
x
=
parseExpression
();
if
(
pos
<
str
.
length
())
throw
new
RuntimeException
(
"Unexpected: "
+
(
char
)
ch
);
return
x
;
}
// Grammar:
// expression = term | expression `+` term | expression `-` term
// term = factor | term `*` factor | term `/` factor
// factor = `+` factor | `-` factor | `(` expression `)`
// | number | functionName factor | factor `^` factor
double
parseExpression
()
{
double
x
=
parseTerm
();
for
(;
;
)
{
if
(
eat
(
'+'
))
x
+=
parseTerm
();
// addition
else
if
(
eat
(
'-'
))
x
-=
parseTerm
();
// subtraction
else
return
x
;
}
}
double
parseTerm
()
{
double
x
=
parseFactor
();
for
(;
;
)
{
if
(
eat
(
'*'
))
x
*=
parseFactor
();
// multiplication
else
if
(
eat
(
'/'
))
x
/=
parseFactor
();
// division
else
return
x
;
}
}
double
parseFactor
()
{
if
(
eat
(
'+'
))
return
parseFactor
();
// unary plus
if
(
eat
(
'-'
))
return
-
parseFactor
();
// unary minus
double
x
;
int
startPos
=
this
.
pos
;
if
(
eat
(
'('
))
{
// parentheses
x
=
parseExpression
();
eat
(
')'
);
}
else
if
((
ch
>=
'0'
&&
ch
<=
'9'
)
||
ch
==
'.'
)
{
// numbers
while
((
ch
>=
'0'
&&
ch
<=
'9'
)
||
ch
==
'.'
)
nextChar
();
x
=
Double
.
parseDouble
(
str
.
substring
(
startPos
,
this
.
pos
));
}
else
if
(
ch
>=
'a'
&&
ch
<=
'z'
)
{
// functions
while
(
ch
>=
'a'
&&
ch
<=
'z'
)
nextChar
();
String
func
=
str
.
substring
(
startPos
,
this
.
pos
);
x
=
parseFactor
();
if
(
func
.
equals
(
"sqrt"
))
x
=
Math
.
sqrt
(
x
);
else
if
(
func
.
equals
(
"sin"
))
x
=
Math
.
sin
(
Math
.
toRadians
(
x
));
else
if
(
func
.
equals
(
"cos"
))
x
=
Math
.
cos
(
Math
.
toRadians
(
x
));
else
if
(
func
.
equals
(
"tan"
))
x
=
Math
.
tan
(
Math
.
toRadians
(
x
));
else
throw
new
RuntimeException
(
"Unknown function: "
+
func
);
}
else
{
throw
new
RuntimeException
(
"Unexpected: "
+
(
char
)
ch
);
}
if
(
eat
(
'^'
))
x
=
Math
.
pow
(
x
,
parseFactor
());
// exponentiation
return
x
;
}
}.
parse
();
}
}
\ No newline at end of file
app/src/main/res/font/allerta_stencil.xml
0 → 100644
View file @
ef5d6315
<?xml version="1.0" encoding="utf-8"?>
<font-family
xmlns:app=
"http://schemas.android.com/apk/res-auto"
app:fontProviderAuthority=
"com.google.android.gms.fonts"
app:fontProviderPackage=
"com.google.android.gms"
app:fontProviderQuery=
"Allerta Stencil"
app:fontProviderCerts=
"@array/com_google_android_gms_fonts_certs"
>
</font-family>
app/src/main/res/layout/activity_main.xml
View file @
ef5d6315
...
...
@@ -4,6 +4,7 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/malomajncrna"
tools:context=
".MainActivity"
>
<TableLayout
...
...
@@ -39,26 +40,28 @@
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_margin=
"5dp"
android:layout_weight=
"1"
android:text=
"@string/pharentheses"
android:background=
"@drawable/circle"
android:onClick=
"addText"
android:text=
"@string/pharentheses1"
android:textColor=
"#ffffff"
app:backgroundTint=
"@null"
android:layout_margin=
"5dp"
android:textSize=
"24sp"
/>
android:textSize=
"24sp"
app:backgroundTint=
"@null"
/>
<Button
android:id=
"@+id/exponentBTN"
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_margin=
"5dp"
android:layout_weight=
"1"
android:text=
"@string/exponent"
android:background=
"@drawable/circle"
android:onClick=
"addText"
android:text=
"@string/pharenthese2"
android:textColor=
"#ffffff"
app:backgroundTint=
"@null"
android:layout_margin=
"5dp"
android:textSize=
"24sp"
/>
android:textSize=
"24sp"
app:backgroundTint=
"@null"
/>
<Button
android:id=
"@+id/divideBTN"
...
...
@@ -267,13 +270,14 @@
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_margin=
"5dp"
android:layout_weight=
"1"
android:text=
"@string/plusMinus"
android:background=
"@drawable/circle"
android:onClick=
"addText"
android:text=
"@string/plusMinus"
android:textColor=
"#ffffff"
app:backgroundTint=
"@null"
android:layout_margin=
"5dp"
android:textSize=
"24sp"
/>
android:textSize=
"24sp"
app:backgroundTint=
"@null"
/>
<Button
android:id=
"@+id/zeroBTN"
...
...
@@ -294,13 +298,14 @@
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_margin=
"5dp"
android:layout_weight=
"1"
android:text=
"@string/point"
android:background=
"@drawable/circle"
android:onClick=
"addText"
android:text=
"@string/point"
android:textColor=
"#ffffff"
app:backgroundTint=
"@null"
android:layout_margin=
"5dp"
android:textSize=
"24sp"
/>
android:textSize=
"24sp"
app:backgroundTint=
"@null"
/>
<Button
android:id=
"@+id/equalsBTN"
...
...
@@ -311,7 +316,7 @@
android:layout_weight=
"1"
android:background=
"@drawable/circle"
android:backgroundTint=
"#50c878"
android:onClick=
"
writeBack
"
android:onClick=
"
Rezultat
"
android:text=
"@string/equals"
android:textColor=
"#ffffff"
android:textSize=
"24sp"
...
...
@@ -323,21 +328,26 @@
android:id=
"@+id/textView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"30dp"
android:text=
"Kalkulator"
android:layout_marginTop=
"24dp"
android:fontFamily=
"sans-serif-condensed-medium"
android:text=
"KALKULATOR"
android:textColor=
"#dd2c00"
android:textSize=
"34sp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.497"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<EditText
android:id=
"@+id/vnos"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"88dp"
android:layout_width=
"355dp"
android:layout_height=
"46dp"
android:layout_marginTop=
"144dp"
android:backgroundTint=
"#00BCD4"
android:ems=
"10"
android:inputType=
"textPersonName"
android:textColor=
"@color/white"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.497"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
...
...
app/src/main/res/values-night/themes.xml
View file @
ef5d6315
<resources
xmlns:tools=
"http://schemas.android.com/tools"
>
<!-- Base application theme. -->
<style
name=
"Theme.Prva4a22"
parent=
"Theme.MaterialComponents.DayNight.
Dark
ActionBar"
>
<style
name=
"Theme.Prva4a22"
parent=
"Theme.MaterialComponents.DayNight.
No
ActionBar"
>
<!-- Primary brand color. -->
<item
name=
"colorPrimary"
>
@color/
purple_200
</item>
<item
name=
"colorPrimaryVariant"
>
@color/
purple_700
</item>
<item
name=
"colorPrimary"
>
@color/
malomajncrna
</item>
<item
name=
"colorPrimaryVariant"
>
@color/
malomajncrna
</item>
<item
name=
"colorOnPrimary"
>
@color/black
</item>
<!-- Secondary brand color. -->
<item
name=
"colorSecondary"
>
@color/teal_200
</item>
...
...
app/src/main/res/values/colors.xml
View file @
ef5d6315
...
...
@@ -7,4 +7,5 @@
<color
name=
"teal_700"
>
#FF018786
</color>
<color
name=
"black"
>
#FF000000
</color>
<color
name=
"white"
>
#FFFFFFFF
</color>
<color
name=
"malomajncrna"
>
#070707
</color>
</resources>
\ No newline at end of file
app/src/main/res/values/font_certs.xml
0 → 100644
View file @
ef5d6315
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array
name=
"com_google_android_gms_fonts_certs"
>
<item>
@array/com_google_android_gms_fonts_certs_dev
</item>
<item>
@array/com_google_android_gms_fonts_certs_prod
</item>
</array>
<string-array
name=
"com_google_android_gms_fonts_certs_dev"
>
<item>
MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
</item>
</string-array>
<string-array
name=
"com_google_android_gms_fonts_certs_prod"
>
<item>
MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
</item>
</string-array>
</resources>
app/src/main/res/values/preloaded_fonts.xml
0 → 100644
View file @
ef5d6315
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array
name=
"preloaded_fonts"
translatable=
"false"
>
<item>
@font/allerta_stencil
</item>
</array>
</resources>
app/src/main/res/values/strings.xml
View file @
ef5d6315
...
...
@@ -15,8 +15,8 @@
<string
name=
"clear"
>
C
</string>
<string
name=
"
exponent
"
>
^
</string>
<string
name=
"pharenthese
s
"
>
(
)
</string>
<string
name=
"
pharentheses1
"
>
(
</string>
<string
name=
"pharenthese
2
"
>
)
</string>
<string
name=
"divide"
>
÷
</string>
<string
name=
"multiply"
>
×
</string>
<string
name=
"add"
>
+
</string>
...
...
app/src/main/res/values/themes.xml
View file @
ef5d6315
<resources
xmlns:tools=
"http://schemas.android.com/tools"
>
<!-- Base application theme. -->
<style
name=
"Theme.Prva4a22"
parent=
"Theme.MaterialComponents.DayNight.
Dark
ActionBar"
>
<style
name=
"Theme.Prva4a22"
parent=
"Theme.MaterialComponents.DayNight.
No
ActionBar"
>
<!-- Primary brand color. -->
<item
name=
"colorPrimary"
>
@color/
purple_500
</item>
<item
name=
"colorPrimaryVariant"
>
@color/
purple_700
</item>
<item
name=
"colorPrimary"
>
@color/
malomajncrna
</item>
<item
name=
"colorPrimaryVariant"
>
@color/
malomajncrna
</item>
<item
name=
"colorOnPrimary"
>
@color/white
</item>
<!-- Secondary brand color. -->
<item
name=
"colorSecondary"
>
@color/teal_200
</item>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment