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

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

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

Такой вот код:
Листинг программы
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<locale.h>
  4. #define N 10
  5. #define MIN "Номер минимального элемента равен: "
  6. #define AL printf("[%d]=",i)
  7. #define SUM "Сумма модулей элементов массива после\
  8. 1-ого отрицательного равна: "
  9. #define SORTARR "Отсортированный массив"
  10. // Создание функции, которая ищет номер мин. по модулю элемента
  11. int searchMIN(float *array)
  12. {
  13. int number,i,j;
  14. float min;
  15. for(i=0,min=array[i],j=1,number=i;i<N&&j<N;i++,j++)
  16. if(min>array[j])
  17. {
  18. min=(array[j]);
  19. number=j;
  20. }
  21. return(number);
  22. }
  23. //создание функции подсчитывающую сумму модулей элементов после первого отрицательного элемента
  24. int sum_after(float *array){
  25. int i,ok=0;
  26. float sum=0.0;
  27. for(i=0;i<N;i++){
  28. if(array[i]<0 && !(ok))
  29. {
  30. ok=1;
  31. continue;
  32. }
  33. if(ok) sum+=fabs(array[i]);}
  34. return(sum);
  35. }
  36. //функция сжатия массива в пределах заданной величины в пределах от b до a
  37. void arraymsort(float *array, float b, float a, int size)
  38. {
  39. int i,j;
  40. for(i=0;i<size;i++)
  41. {
  42. if(array[i]<=a && array[i]>=b) {
  43. for(j=i+1;j<size;j++)
  44. {
  45. array[i]=array[j];
  46. i++;
  47. if(i==(size-1)) array[i]=0;
  48. }}}
  49. for(i=0;i<size;i++)
  50. printf("[%d]=%2.0f\t",i,*(array+i));
  51. }
  52.  
  53. int main(int argc, char* argv[])
  54. {
  55. setlocale(LC_ALL,".1251");
  56. float array[N], sum;
  57. int i;
  58. for(i=0;i<N;i++)
  59. {
  60. AL;
  61. scanf("%f",array+i);
  62. }
  63. printf("%s",MIN);
  64. //переменная для определения номера минимального элемента массива
  65. int h=searchMIN(array);
  66. printf("%d\n",h);
  67. //сумма модулей элементов массива после первого отрицательного элемента
  68. printf("%s",SUM);
  69. sum=sum_after(array);
  70. printf("%2.2f\n",sum);
  71. // сжатие массива в пределах заданной величины, освободившиеся в конце массива элементы заполнить нулями
  72. printf("%s\n",SORTARR);
  73. arraymsort(array,5,10,N);
  74. return 0;
  75. }
Проблема в том, что функция реагирует только на первое появление такой величины, на остальные она не реагирует.:с
Всё, получилось.
Листинг программы
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<locale.h>
  4. #define N 10
  5. #define MIN "Номер минимального элемента равен: "
  6. #define AL printf("[%d]=",i)
  7. #define SUM "Сумма модулей элементов массива после\
  8. до 1-ого отрицательного равна: "
  9. #define SORTARR "Отсортированный массив"
  10. // Создание функции, которая щет номер мин. по модулю элемента
  11. int searchMIN(float *array)
  12. {
  13. int number,i,j;
  14. float min;
  15. for(i=0,min=array[i],j=1,number=i;i<N&&j<N;i++,j++)
  16. if(min>array[j])
  17. {
  18. min=(array[j]);
  19. number=j;
  20. }
  21. return(number);
  22. }
  23. //создание функции подсчитывающую сумму модулей элементов после первого отрицательного элемента
  24. int sum_after(float *array){
  25. int i,ok=0;
  26. float sum=0.0;
  27. for(i=0;i<N;i++){
  28. if(array[i]<0 && !(ok))
  29. {
  30. ok=1;
  31. continue;
  32. }
  33. if(ok) sum+=fabs(array[i]);}
  34. return(sum);
  35. }
  36. //функция сжатия массива в пределах заданной величины в пределах от b до a
  37. void arraymsort(float *array, float b, float a, int size)
  38. {
  39. int i,j,k;
  40. for(i=0;i<size;i++)
  41. {
  42. if(array[i]<=a && array[i]>=b) {
  43. k=i;
  44. for(j=i+1;j<size;j++)
  45. {
  46. array[i]=array[j];
  47. i++;
  48. if(i==(size-1)) array[i]=0;
  49. }i=k-1;}}
  50. for(i=0;i<size;i++)
  51. printf("[%d]=%2.0f\t",i,*(array+i));
  52. }
  53.  
  54. int main(int argc, char* argv[])
  55. {
  56. setlocale(LC_ALL,".1251");
  57. float array[N], sum;
  58. int i;
  59. for(i=0;i<N;i++)
  60. {
  61. AL;
  62. scanf("%f",array+i);
  63. }
  64. printf("%s",MIN);
  65. //переменная для определения номера минимального элемента массива
  66. int h=searchMIN(array);
  67. printf("%d\n",h);
  68. //сумма модулей элементов массива после первого отрицательного элемента
  69. printf("%s",SUM);
  70. sum=sum_after(array);
  71. printf("%2.2f\n",sum);
  72. // сжатие массива в пределах заданной величины, освободившиеся в конце массива элементы заполнить нулями
  73. printf("%s\n",SORTARR);
  74. arraymsort(array,5,10,N);
  75. return 0;
  76. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void PressArr(float *Arr, int n, float beg, float end)
  5. {
  6.      int i,i_f,i_t;
  7.      i_f=i_t=0;
  8.      while (1)
  9.      {
  10.          if ((Arr[i_f]>=beg) &&  (Arr[i_f]<=end))
  11.             Arr[i_t++]=Arr[i_f++];
  12.          else
  13.             i_f++;
  14.          if (i_f == n)
  15.          {
  16.             for (i=i_t; i<n; i++) Arr[i]=0;
  17.             return;
  18.          }  
  19.       }  
  20. }        
  21.  
  22. int main(int argc, char *argv[])
  23. {
  24.    
  25.   float X[10]={2,3,1,2,6,7,-3,0,8,5};
  26.   int i;
  27.  
  28.   printf("Initial Array=");
  29.   for (i=1;i<10;i++) printf("%3.1f ",X[i]);
  30.   printf("\n");    
  31.  
  32.   PressArr(X,10,3,12);
  33.      
  34.   printf("Array after pressing=");
  35.   for (i=1;i<10;i++) printf("%3.1f ",X[i]);
  36.   printf("\n");    
  37.    
  38.   system("PAUSE"); 
  39.   return 0;
  40. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы