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