Удалить элементы массива, расположенные между его минимальным и максимальным элементами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан целочисленный массив размера N. Удалить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы). у меня на экран выводятся нули. столько, сколько должно быть чисел в новом массиве. что нужно исправить, чтобы выводились нужные числа(элементы массива)?
Листинг программы
  1. /* programma*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. main()
  5. {
  6. int *mas1,*mas2;
  7. int n,k,i,j, min, max, nommin, nommax, nom;
  8. printf("vvedi n: ");
  9. scanf("%d",&n);
  10. mas1=(int*)calloc(n,sizeof(int));
  11. if (!mas1||n<=0)
  12. {
  13. printf("Pamyt' ne vydelena \n");
  14. system ("PAUSE");
  15. return 0;
  16. }
  17. for(i=0;i<n;i++)
  18. {
  19. printf("vvedite chislo: ");
  20. scanf("%d",&mas1[i]);
  21. }
  22. min=max=mas1[0];
  23. for(i=1;i<n;i++)
  24. {if(mas1[i]>max)
  25. {
  26. max=mas1[i];
  27. nommax=i;
  28. }
  29. if(mas1[i]<min)
  30. {
  31. min=mas1[i];
  32. nommin=i;
  33. }
  34. }
  35. k=n-abs(nommax-nommin)+1;
  36. mas2=(int*)calloc(k,sizeof(int));
  37. if (!mas2)
  38. {
  39. printf("Pamyt' ne vydelena 2\n");
  40. system ("PAUSE");
  41. return 0;
  42. }
  43. if ((nommax-nommin)>0)
  44. {
  45. for(i=0, j=0; i<n;i++)
  46. {
  47. nom=i;
  48. if(nom<=nommin&&nom>=nommax)
  49. {while(nom<=nommin){
  50. mas2[j]=mas1[i];
  51. j++;}
  52. while(nom>=nommax)
  53. {j=k+i;
  54. mas2[j]=mas1[i];
  55. }
  56. }
  57. }
  58. }
  59. if((nommax-nommin)<0)
  60. {
  61. for (i=0, j=0; i<n;i++)
  62. {
  63. nom=i;
  64. if(nom>=nommin&&nom<=nommax)
  65. {while(nom>=nommin)
  66. {j=k+i;
  67. mas2[j]=mas1[i];
  68. }
  69. while(nom<=nommax){
  70. mas2[j]=mas1[i];
  71. j++;}
  72. }
  73. }
  74. }
  75. free(mas1);
  76. for(j=0;j<k;j++)
  77. printf("%d ",mas2[j]);
  78. printf("\n");
  79. system("PAUSE");
  80. return 0;
  81. }
помогите, пожалуйста

Решение задачи: «Удалить элементы массива, расположенные между его минимальным и максимальным элементами»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. main()
  4. {
  5. int *mas1,*mas2;
  6. int n,k,i,j, min, max, nommin, nommax, nom;
  7. printf("vvedi n: ");
  8. scanf("%d",&n);
  9. mas1=(int*)calloc(n,sizeof(int));
  10. if (!mas1||n<=0)
  11.  {
  12.  printf("Pamyt' ne vydelena \n");
  13.  system ("PAUSE");
  14.  return 0;
  15.  }
  16. for(i=0;i<n;i++)
  17.  {
  18.  printf("vvedite chislo: ");
  19.  scanf("%d",&mas1[i]);
  20.  }
  21. min=max=mas1[0];
  22. for(i=1;i<n;i++)
  23.  {if(mas1[i]>max)
  24.     {
  25.    max=mas1[i];
  26.    nommax=i;
  27.     }
  28.   if(mas1[i]<min)
  29.    {
  30.     min=mas1[i];
  31.     nommin=i;
  32.    }
  33.    }
  34. k=n-abs(nommax-nommin)+1;
  35. mas2=(int*)calloc(k,sizeof(int));
  36. if (!mas2)
  37.  {
  38.  printf("Pamyt' ne vydelena 2\n");
  39.  system ("PAUSE");
  40.  return 0;
  41.  }
  42.  
  43. if ((nommax-nommin)>0)
  44.   {
  45.     for(i=0, j=0; i<n;i++)
  46.     {
  47.         while(i<=nommin)
  48.         {
  49.             mas2[j]=mas1[i];
  50.            j++;
  51.            i++;
  52.         }
  53.         while(i>=nommax&&i<n)
  54.            {
  55.                 mas2[j]=mas1[i];
  56.                 i++;
  57.                 j++;
  58.            }
  59.    
  60.     }
  61.   }
  62.  
  63.  
  64. if((nommax-nommin)<0)
  65.  {
  66.     for (i=0, j=0; i<n;i++)
  67.     {
  68.     while(i<=nommax)
  69.         {
  70.             mas2[j]=mas1[i];
  71.            j++;
  72.            i++;
  73.         }
  74.         while(i>=nommin&&i<n)
  75.            {
  76.                 mas2[j]=mas1[i];
  77.                 i++;
  78.                 j++;
  79.            }
  80.        
  81.     }
  82.  }
  83.  
  84.  
  85. free(mas1);
  86. for(j=0;j<k;j++)
  87. printf("%d ",mas2[j]);
  88. printf("\n");
  89.  
  90. system("PAUSE");
  91. return 0;
  92. }

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы