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

See Also

Cookies help us deliver our services. By using our services, you agree to our use of cookies.