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

Объяснение кода листинга программы

В этом коде реализована функция удаления элементов массива, расположенных между его минимальным и максимальным элементами.

  1. Создается массив 'mas1' размером 'n' и инициализируется значениями, введенными пользователем.
  2. Находится минимальный и максимальный элементы массива 'mas1', а также их индексы.
  3. Создается новый массив 'mas2' размером 'k' (равным расстоянию между максимальным и минимальным элементами массива 'mas1' плюс 1).
  4. Если расстояние между максимальным и минимальным элементами больше 0, то элементы массива 'mas1' с индексами от минимального до максимального и от максимального до (n-1) копируются в массив 'mas2'.
  5. Если расстояние меньше или равно 0, то элементы массива 'mas1' с индексами от (n-1) до максимального и от минимального до (n-1) копируются в массив 'mas2'.
  6. Массив 'mas1' освобождается от выделенной для него памяти.
  7. Выводятся элементы массива 'mas2' с помощью функции printf.
  8. Программа ожидает нажатия клавиши с помощью функции system(PAUSE).
  9. Возвращается 0, что означает успешное выполнение программы.

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

15   голосов , оценка 4.133 из 5
Похожие ответы