Write code computes the average of all the even integers in an array. with pharo smalltalk language

Viewed 143

Solve the assessment in Pharo Smalltalk and please loop the whole code in two ways whileTrue: and do loops.

Here is what I tried but it gives me a wrong answer.

| x y z count elem sum |

x := #(84 45 54).
sum := 0.
z := 1.
y := x size.
elem := x at: z.

[z < y] whileTrue: [ elem even ifTrue: [sum := sum + elem.]. z := z + 1.].

Transcript clear.
Transcript show: sum.
1 Answers

Yes is wrong because "elem" is always the same.

You have to do like this:

| x y z count elem sum |
x := #(84 45 54 ).
sum := 0.
z := 1.
y := x size.
[z <= y] whileTrue: [ 
    elem := x at: z.
    elem even ifTrue: [sum := sum + elem.]. z := z + 1.
    ].
Transcript clear.
Transcript show: sum.

or more concise

| x |

x := #(84 45 54 ).
sum := 0.
x do:[:each | each even ifTrue: [sum := sum + each.].].
Transcript clear.
Transcript show: sum.

or

| x |

x := #(84 45 54 ).
sum := x inject: 0 into: [ :sum :each | each even ifTrue: [sum + each ] ifFalse: [sum + 0]]. 
Transcript clear.
Transcript show: sum.
Related