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