Написать функцию, сжимающую массив, удалив из него элементы в заданном интервале - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д