From Test-Scratch-Wiki

This tutorial will demonstrate how to find the mode of numbers with Scratch.

The mode is an average that is calculated by finding the number in the list that occurs the most. If there are multiple numbers that occur more than others, those numbers are all modes; if all numbers do not occur more than others (in other words, if every number only occurs once), then there is no mode. Despite the mode's simplicity to calculate with the mind, it is the hardest to program. Nevertheless, it is possible.

## The Script

The script in this tutorial works by running through all the different numbers in the list of numbers, and recording the numbers that did the best. Once done, it reports the modes it has collected.

- Variables

*Best Counter*

— the number of times that the most occurring number (as of the moment) has been counted

*Counter*

— the variable used for counting numbers

*Item*

— the item that holds the number that is being counted

*Item2*

— the item that is being checked for the current number

*Modes*

— if there are multiple modes, they are all strung together in this variable for when the sprite reports the modes

- Lists

*Best numbers*

— the modes it has recorded (as of the moment)

*Numbers*

— the list of numbers

*Tested numbers*

— the numbers that have been counted (the script records numbers that have been counted already so it does not waste time)

delete (all v) of [Tested numbers v] delete (all v) of [Best numbers v] set [Best Counter v] to [0] set [Item v] to [0] repeat (length of [Numbers v]) set [Counter v] to [0] set [Item2 v] to [0] change [Item v] by (1) if <not <[Tested numbers v] contains (item (Item) of [Numbers v])>> then add (item (Item) of [Numbers v]) to [Tested numbers v] repeat (length of [Numbers v]) change [Item2 v] by (1) if <(item (Item2) of [Numbers v]) = (item (Item) of [Numbers v])> then change [Counter v] by (1) end end if <(Counter) = (Best Counter)> then add (item (Item) of [Numbers v]) to [Best numbers v] end if <(Counter) > (Best Counter)> then set [Best Counter v] to (Counter) delete (all v) of [Best numbers v] add (item (Item) of [Numbers v]) to [Best numbers v] end end end if <(length of [Best numbers v]) > [1]> then if <((length of [Numbers v]) / (Best Counter)) = (length of [Best numbers v])> then say [There is no mode.] else set [Modes v] to [] set [Item v] to [0] repeat ((length of [Best numbers v]) - (2)) change [Item v] by (1) set [Modes v] to (join (Modes) (join (item (Item) of [Best numbers v]) [, ])) end change [Item v] by (1) set [Modes v] to (join (Modes) (join (item (Item) of [Best numbers v]) (join [ and ] (item ((Item) + (1)) of [Best numbers v]))) say (join [The modes are ] (join (Modes) [.])) end else say (join [The mode is ] (join (Best numbers) [.])) end