Counter moves only upward not backward

I have a have project of Up Down counter using arduino with seven segment.In which when i continuously pressed the push button , the counter moves upward from 0 to 99.And when i release the push button counter moves downwards from the previous values For example: i continuously pressed the button counter moves 0 to 58 then at this instant when i release the button , the counter moves backward from 58 to 0

The problem is that when i simulate the code in proteus software , counter starts from 99 because button is not pressed . but when i pressed the button counter moves upward not accurately also the other big issue is that when button again released , the counter does not moves backwards although counter moves upwards continuously and button is not working (if button is pressed or not) may be counter engage in while or not or may be else here my code and proteus simulator cicuit image

int num_array_1[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9



int num_array_2[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9                          


const int button = 35;
const int alarm = 50;

//function header
void Num_Write_1(int);
void Num_Write_2(int);

void setup() 
{ 
  // set pin modes for Display 1
  pinMode(22, OUTPUT);   
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);

  // set pin modes for Display 2

  pinMode(40, OUTPUT);   
  pinMode(41, OUTPUT);
  pinMode(42, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(44, OUTPUT);
  pinMode(45, OUTPUT);
  pinMode(46, OUTPUT);

  // set pin for alarm indication

  pinMode(alarm,OUTPUT);

  // set pin for button input

  pinMode(button,INPUT);

  int i = 1;
  int j = 1;
  int counter_1 = 0; // for counter 1
  int counter_2 = 0; // for counter 2

}

void loop() 
{
  //int i;
  //int j;

 int counter_1; // for counter 1
 int counter_2; // for counter 2

  int button_state = digitalRead(button); // check the button state
  //counter loop

  if (button_state == HIGH) // if button is pressed , counter moves Upward(0,1,2,3,....,99)
  {
    boolean start = true;
    while (start)                 // when button pressed , loop is continuously running
    {
      if (counter_1 == 10) // if counter 1 is value 10
    {                       
      counter_1 = 0;              // reset counter1 to 0
      counter_2 = counter_2 + 1;  // counter2 is starting now
      Num_Write_1(counter_1);     // display value of counter1
      Num_Write_2(counter_2);     // display value of counter2

      button_state = digitalRead(button); // check the button state
      if (button_state == LOW)    // if low then condition of while is false
      {                           // button is released, button_state is low
        start = !start;           // toggle the while condition true to false
                                  // which terminate the while loop
      }
    }
    else
    {
      counter_1 = counter_1 + 1;  // incr. 1 by 1
      Num_Write_1(counter_1);     // display value of counter1
      delay(200);
    }

    button_state = digitalRead(button);       // again check the button state
                                              // button is released, button_state is low
    while (button_state == LOW)               // if low then condition of while is false
    {
      start = !start;

    }
    }
    }





  else                       //if button is release , counter moves Downward(56,55,54,...,0)
  {

    Num_Write_1(counter_1);       // show previous values on both counters
    Num_Write_2(counter_2);       // b/c decr. starts from incremented values

    boolean start = true;  
    while (start)                 // when button release , loop is continuously running
    {
      if (counter_1 == 0)         //if counter 1 is value 0
    {
      counter_1 = 9;    // reset counter1 to 9
      counter_2 = counter_2 - 1;        // counter2 is starting now
      Num_Write_1(counter_1);           // display on counter1
      Num_Write_2(counter_2);           // display on counter2

      button_state = digitalRead(button);       // check the button state
        if (button_state == HIGH)               // if high then condition of while is false
        {                                       // button is pressed, button_state is high
        start = !start;                         //toggle the condition

        }
    }
    else
    {
      counter_1 = counter_1 - 1;                // decr. 1 by 1
      Num_Write_1(counter_1);                   // display on counter1
      delay(200);
    }

    button_state = digitalRead(button);         // again check the button_state
                                                // if button pressed , button_state goes high
      if (button_state == HIGH)
      {
        start = !start;                         // toggle the while condition true to false 
                                                 // which terminate the while loop
      }                                 
    }
  }


}



// this functions writes values to the sev seg pins for counter1  
void Num_Write_1(int number) 
{
  int pin= 22;
  for (int j=0; j < 7; j++) {
   digitalWrite(pin, num_array_1[number][j]);
   pin++;
  }
}


// this functions writes values to the sev seg pins for counter2
void Num_Write_2(int number) 
{
  int pin= 40;
  for (int j=0; j < 7; j++) {
   digitalWrite(pin, num_array_2[number][j]);
   pin++;
  }
}

If button pressed ----------> logic goes HIGH If button release ----------> logic goes LOW
please resolve my problem i have tried 2 weeks for solving this problem but still in stuck Any little advice will be important for me

I don’t think you have chosen the easiest solution for this problem.
You’ve mixed the display logic with the counter logic.
You should have a single integer counter which you increment when the button is pressed and decrement when the button is not pressed.
You can test that without any of the display logic.
You then require a function to display the integer on the two displays.
You’ll also get into a mess with a while statement in the loop(). It is not necessary.

Pseudocode

declare counter
loop() {
   if ( button has been depressed for the last 200 mS and counter < 99)
   then increment counter
   else if ( button has not been pressed in the last 200 mS and counter > 0 )
        then decrement counter
        fi
   fi
   display( counter )
}
int num_array_1[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9



int num_array_2[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9

Using 280 bytes of precious RAM to store less than 20 bytes worth of information is not a good use of resources.