Удалить элементы массива, расположенные между его минимальным и максимальным элементами - 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, что означает успешное выполнение программы.