arrayscsumminmassive

Replace elements of array C with units


I have a one-dimensional array where I need to replace the array elements after the smallest element with one, but I don't know what I need to write to make this condition work? I will be grateful for your help.

#include <stdio.h>
#include <stdlib.h>
void main() {
  float X[16] = {2.34, -3.42, 0.56, -3.71, 1.25, 6.37, 0.123,  -45.821,
                 32.5, 0.94,  0.54, -1.26, 2.36, 4.32, -5.345, 4.876};
  float sum;
  float min;
  float Y[16];
  printf("Massiv Х\n");
  for (int i = 0; i < 16; i++) {
    printf("%2.3f\t", X[i]);
  }
  for (int i = 0; i < 16; i++) {
    if (min > X[i]) {
      min = X[i];
    }
  }
  printf("\nMin= %2.3f", min);
  printf("\nMassiv \n");
  X[16] = 1;
  for (int i = 0; i < 16; i++) {
    printf("%2.3f\t", X[i]);
  }
  sum = 0;
  for (int i = 0; i < 7; ++i) {
    if (X[i]) {
      sum += X[i];
    }
  }
  printf("\nSum= %2.3f\t", sum);
}

Solution

  • First, you have to find the smallest element. You also need a variable set to 0 until you find the min, then set to 1. If the variable is 1, then you set the remaining elements in the array to 1. If the variable is 0, check if the current element is the smallest. Also, another version is saving the position of the min and changing all elements after that position to the end.

      int after_min = 0;    
        float minn = x[0];
        for(int i = 1; i < 16; i++)
            if (minn > x[i])
                minn = x[i];
        for(int i = 0; i < 16; i++) {
            if (after_min)
                x[i] = 1;
            else 
                if (x[i] == minn)
                    after_min = 1;
        }
    

    When you do x[16] = 1, you are out of bounds. The first element is x[0], the last is x[15].