There are programming errors and logic errors in your code, it won't compile and the layout does not help.
First you need to fix the setup function. ledPins is an array of pin numbers so which pin will be set to OUTPUT by this statement ?
pinMode(ledPins, OUTPUT)
The setup should be like this. Note that I have changed the layout to make it more readable.
void setup()
{
for(int i = 0; i < 9; i++)
{
pinMode(ledPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT);
}
Looking at the code in loop(), which pin is this statement going to read and where will it put the answer ?
digitalRead(lastButtonState);
The logic of what you want to do goes like this after setup has run :
LOOP
Read the current button state and remember it
Read the button state again and remember it with a different name
If the state has not changed do nothing, keep looking, go round the loop again
If it has changed (button has been pressed or released)
If it has been pressed (state now HIGH) remember the new state as the old state, go round the loop again
Else (we now know that it has just been released)
Remember the new state as the old state
Increment the button press counter
If the button press counter has gone beyond the maximum reset it to zero
Test the button press counter
If zero call programzero()
If one call programone()
If two call programtwo()
etc, etc
KEEP GOING ROUND THE LOOP
NOTE - there is no debouncing unless you expressly do it when reading the button