Удалить элементы массива, расположенные между его минимальным и максимальным элементами - C (СИ)
Формулировка задачи:
Дан целочисленный массив размера N. Удалить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы).
у меня на экран выводятся нули. столько, сколько должно быть чисел в новом массиве. что нужно исправить, чтобы выводились нужные числа(элементы массива)?
/* programma*/ #include <stdio.h> #include <stdlib.h> main() { int *mas1,*mas2; int n,k,i,j, min, max, nommin, nommax, nom; printf("vvedi n: "); scanf("%d",&n); mas1=(int*)calloc(n,sizeof(int)); if (!mas1||n<=0) { printf("Pamyt' ne vydelena \n"); system ("PAUSE"); return 0; } for(i=0;i<n;i++) { printf("vvedite chislo: "); scanf("%d",&mas1[i]); } min=max=mas1[0]; for(i=1;i<n;i++) {if(mas1[i]>max) { max=mas1[i]; nommax=i; } if(mas1[i]<min) { min=mas1[i]; nommin=i; } } k=n-abs(nommax-nommin)+1; mas2=(int*)calloc(k,sizeof(int)); if (!mas2) { printf("Pamyt' ne vydelena 2\n"); system ("PAUSE"); return 0; } if ((nommax-nommin)>0) { for(i=0, j=0; i<n;i++) { nom=i; if(nom<=nommin&&nom>=nommax) {while(nom<=nommin){ mas2[j]=mas1[i]; j++;} while(nom>=nommax) {j=k+i; mas2[j]=mas1[i]; } } } } if((nommax-nommin)<0) { for (i=0, j=0; i<n;i++) { nom=i; if(nom>=nommin&&nom<=nommax) {while(nom>=nommin) {j=k+i; mas2[j]=mas1[i]; } while(nom<=nommax){ mas2[j]=mas1[i]; j++;} } } } free(mas1); for(j=0;j<k;j++) printf("%d ",mas2[j]); printf("\n"); system("PAUSE"); return 0; }
помогите, пожалуйста
Решение задачи: «Удалить элементы массива, расположенные между его минимальным и максимальным элементами»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> main() { int *mas1,*mas2; int n,k,i,j, min, max, nommin, nommax, nom; printf("vvedi n: "); scanf("%d",&n); mas1=(int*)calloc(n,sizeof(int)); if (!mas1||n<=0) { printf("Pamyt' ne vydelena \n"); system ("PAUSE"); return 0; } for(i=0;i<n;i++) { printf("vvedite chislo: "); scanf("%d",&mas1[i]); } min=max=mas1[0]; for(i=1;i<n;i++) {if(mas1[i]>max) { max=mas1[i]; nommax=i; } if(mas1[i]<min) { min=mas1[i]; nommin=i; } } k=n-abs(nommax-nommin)+1; mas2=(int*)calloc(k,sizeof(int)); if (!mas2) { printf("Pamyt' ne vydelena 2\n"); system ("PAUSE"); return 0; } if ((nommax-nommin)>0) { for(i=0, j=0; i<n;i++) { while(i<=nommin) { mas2[j]=mas1[i]; j++; i++; } while(i>=nommax&&i<n) { mas2[j]=mas1[i]; i++; j++; } } } if((nommax-nommin)<0) { for (i=0, j=0; i<n;i++) { while(i<=nommax) { mas2[j]=mas1[i]; j++; i++; } while(i>=nommin&&i<n) { mas2[j]=mas1[i]; i++; j++; } } } free(mas1); for(j=0;j<k;j++) printf("%d ",mas2[j]); printf("\n"); system("PAUSE"); return 0; }
Объяснение кода листинга программы
В этом коде реализована функция удаления элементов массива, расположенных между его минимальным и максимальным элементами.
- Создается массив 'mas1' размером 'n' и инициализируется значениями, введенными пользователем.
- Находится минимальный и максимальный элементы массива 'mas1', а также их индексы.
- Создается новый массив 'mas2' размером 'k' (равным расстоянию между максимальным и минимальным элементами массива 'mas1' плюс 1).
- Если расстояние между максимальным и минимальным элементами больше 0, то элементы массива 'mas1' с индексами от минимального до максимального и от максимального до (n-1) копируются в массив 'mas2'.
- Если расстояние меньше или равно 0, то элементы массива 'mas1' с индексами от (n-1) до максимального и от минимального до (n-1) копируются в массив 'mas2'.
- Массив 'mas1' освобождается от выделенной для него памяти.
- Выводятся элементы массива 'mas2' с помощью функции printf.
- Программа ожидает нажатия клавиши с помощью функции system(
PAUSE
). - Возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д