Написать функцию, сжимающую массив, удалив из него элементы в заданном интервале - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Такой вот код:
#include<stdio.h>
#include<math.h>
#include<locale.h>
#define N 10
#define MIN "Номер минимального  элемента равен: "
#define AL printf("[%d]=",i)
#define SUM "Сумма модулей элементов массива после\
 1-ого отрицательного равна: "
#define SORTARR "Отсортированный массив"
 
// Создание функции, которая ищет номер мин. по модулю элемента
int searchMIN(float *array)
{
int number,i,j;
float min;
for(i=0,min=array[i],j=1,number=i;i<N&&j<N;i++,j++)
if(min>array[j])
{
min=(array[j]);
number=j;
}
return(number);
}
 
//создание функции подсчитывающую сумму модулей элементов после первого отрицательного элемента
int sum_after(float *array){
int i,ok=0;
float sum=0.0;
for(i=0;i<N;i++){
   if(array[i]<0 && !(ok))
    {
    ok=1;
    continue;
   }
    if(ok) sum+=fabs(array[i]);}
return(sum);
}
//функция сжатия массива в пределах заданной величины в пределах от b до a
void arraymsort(float *array, float b, float a, int size)
{
    int i,j;
for(i=0;i<size;i++)
{
  if(array[i]<=a && array[i]>=b) {
        for(j=i+1;j<size;j++)
            {
            array[i]=array[j];
            i++;
            if(i==(size-1)) array[i]=0;
            }}}
        for(i=0;i<size;i++)
            printf("[%d]=%2.0f\t",i,*(array+i));
}

int main(int argc, char* argv[])
{
    setlocale(LC_ALL,".1251");
float array[N], sum;
int i;
for(i=0;i<N;i++)
    {
AL;
scanf("%f",array+i);
}
printf("%s",MIN);
//переменная для определения номера минимального элемента массива
int h=searchMIN(array);
printf("%d\n",h);
//сумма модулей элементов массива после первого отрицательного элемента
printf("%s",SUM);
sum=sum_after(array);
printf("%2.2f\n",sum);
// сжатие массива в пределах заданной величины, освободившиеся в конце массива элементы заполнить нулями
printf("%s\n",SORTARR);
arraymsort(array,5,10,N);
return 0;
}
Проблема в том, что функция реагирует только на первое появление такой величины, на остальные она не реагирует.:с
Всё, получилось.
#include<stdio.h>
#include<math.h>
#include<locale.h>
#define N 10
#define MIN "Номер минимального  элемента равен: "
#define AL printf("[%d]=",i)
#define SUM "Сумма модулей элементов массива после\
до 1-ого отрицательного равна: "
#define SORTARR "Отсортированный массив"
 
// Создание функции, которая щет номер мин. по модулю элемента
int searchMIN(float *array)
{
int number,i,j;
float min;
for(i=0,min=array[i],j=1,number=i;i<N&&j<N;i++,j++)
if(min>array[j])
{
min=(array[j]);
number=j;
}
return(number);
}
 
//создание функции подсчитывающую сумму модулей элементов после первого отрицательного элемента
int sum_after(float *array){
int i,ok=0;
float sum=0.0;
for(i=0;i<N;i++){
   if(array[i]<0 && !(ok))
    {
    ok=1;
    continue;
   }
    if(ok) sum+=fabs(array[i]);}
return(sum);
}
//функция сжатия массива в пределах заданной величины в пределах от b до a
void arraymsort(float *array, float b, float a, int size)
{
    int i,j,k;
for(i=0;i<size;i++)
{
  if(array[i]<=a && array[i]>=b) {
            k=i;
        for(j=i+1;j<size;j++)
            {
            array[i]=array[j];
            i++;
            if(i==(size-1)) array[i]=0;
            }i=k-1;}}
        for(i=0;i<size;i++)
            printf("[%d]=%2.0f\t",i,*(array+i));
}

int main(int argc, char* argv[])
{
    setlocale(LC_ALL,".1251");
float array[N], sum;
int i;
for(i=0;i<N;i++)
    {
AL;
scanf("%f",array+i);
}
printf("%s",MIN);
//переменная для определения номера минимального элемента массива
int h=searchMIN(array);
printf("%d\n",h);
//сумма модулей элементов массива после первого отрицательного элемента
printf("%s",SUM);
sum=sum_after(array);
printf("%2.2f\n",sum);
// сжатие массива в пределах заданной величины, освободившиеся в конце массива элементы заполнить нулями
printf("%s\n",SORTARR);
arraymsort(array,5,10,N);
return 0;
}

Решение задачи: «Написать функцию, сжимающую массив, удалив из него элементы в заданном интервале»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void PressArr(float *Arr, int n, float beg, float end)
{
     int i,i_f,i_t;
     i_f=i_t=0;
     while (1)
     {
         if ((Arr[i_f]>=beg) &&  (Arr[i_f]<=end)) 
            Arr[i_t++]=Arr[i_f++];
         else
            i_f++;
         if (i_f == n) 
         {
            for (i=i_t; i<n; i++) Arr[i]=0;
            return;
         }   
      }   
}        
 
int main(int argc, char *argv[])
{
    
  float X[10]={2,3,1,2,6,7,-3,0,8,5};
  int i;
  
  printf("Initial Array=");
  for (i=1;i<10;i++) printf("%3.1f ",X[i]);
  printf("\n");    
 
  PressArr(X,10,3,12);
      
  printf("Array after pressing=");
  for (i=1;i<10;i++) printf("%3.1f ",X[i]);
  printf("\n");    
    
  system("PAUSE");  
  return 0;
}

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы