Login  Register

Re: mentor question 2.

Posted by Pharo Smalltalk Users mailing list on Apr 26, 2020; 6:51pm
URL: https://forum.world.st/mentor-question-2-tp5115643p5115655.html

Op 26-4-2020 om 20:17 schreef Sven Van Caekenberghe:

>
>> On 26 Apr 2020, at 20:10, Gabriel Cotelli <[hidden email]> wrote:
>>
>> In the first method you aren't doing an assignment, are sending the message = to the temp isValid, if you change the method to:
>> decimalFromBinary: aString
>>       | result isValid |
>>       isValid := self isValidBinary: aString.
>>       isValid
>>           ifTrue: [ result := 0.
>>               aString reverse
>>                   withIndexDo:
>>                       [ :digit :index | result := result + (digit
>> digitValue * (2 raisedTo: index - 1)) ].
>>               ^ result ]
>>           ifFalse: [ ^ nil ]
>> it should work.
> There is a #reverseWithIndexDo: method
>
> Also, #digitValue might be considered a builtin method that you are not allowed to use. Since you already did the #isValidBinary: test, you could say
>
>    (digit charCode - $0 charCode)
>
>> In the second one you're comparing characters with numbers, this will always return false because the number 0 is not the same as the character 0.
>> Use
>> isValidBinary: aString
>>       ^ aString allSatisfy: [ :c | c = $0 or: [ c = $1 ] ]
>> or something like
>>
>> isValidBinary: aString
>>       ^ aString allSatisfy: [ :c | '01' includes: c ]
>>
>> On Sun, Apr 26, 2020 at 2:52 PM Roelof Wobben via Pharo-users <[hidden email]> wrote:
>> Hello,
>>
>> I have to make some code that convert a binary to a decimal and im not
>> allowed to use the convert methods that Pharo has.
>>
>> So I have written this :
>>
>>
>> decimalFromBinary: aString
>>       | result isValid |
>>       isValid = self isValidBinary: aString.
>>       isValid
>>           ifTrue: [ result := 0.
>>               aString reverse
>>                   withIndexDo:
>>                       [ :digit :index | result := result + (digit
>> digitValue * (2 raisedTo: index - 1)) ].
>>               ^ result ]
>>           ifFalse: [ ^ nil ]
>>
>> isValidBinary: aString
>>       ^ aString allSatisfy: [ :c | c = 0 or: [ c = 1 ] ]
>>
>>
>> but on the first method I see a message that the temp variables are read
>> before written.
>> and the second one I see a message that I use a or instead of searching
>> literals.
>>
>> Where did  I think wrong here ?
>>
>> Roelof
>>
>>
>


Thanks,  this problem is solved.

Roelof