/*Вопрос № 180251*/
/* Дана последовательность из n целых элементов.
Сформировать две новых последовательности, состоящих соответственно
из положительных и отрицательных элементов исходной последовательности.
Элементы в результирущих последовательностях должны быть отсортированы
по убыванию. Все последовательности исходную и полученные вывести на экран. */
#include <stdio.h>
/* сортировка "пузырьком" */
void sort(int a[],int n)
{
int i, j, tmp;
int flag=1; /* был ли обмен на последнем проходе? */
for(i=1; i<n && flag!=0; i++)
{
flag=0;
for(j=0;j<n-i;j++)
if (a[j]<a[j+1]) /* -убывание */
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=1; /* обмен был */
}
}
}
int main()
{
enum {SIZE=10}; /* размер каждого массива */
int a[SIZE],b[SIZE],c[SIZE];
int i,j;
int s=SIZE; /* количество используемых элементов в заданном массиве */
int m,n;
/* количество используемых элементов в подмассивах с отрицательными
и положительными значениями соответственно */
for (;;)
{
printf("Введите количество элементов массива <= %d\n", SIZE);
scanf("%d",&s);
if ((s>SIZE)||(s<=0))
{
printf("Количество элементов вне диапазона");
break;
}
printf("Введите массив\n");
for(i=0; i<s; i++)
scanf("%d",&a[i]);
/* разбиение массива на два массива <0 и >0 */
m=0; n=0;
for (i=0;i<s;i++)
{
if (a[i]<0)
{
b[m++]=a[i];
}
else if (a[i]>0)
{
c[n++]=a[i];
}
}
sort (b,m);
sort (c,n);
/* печать всех массивов */
for(i=0;i<s;i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<m;i++)
printf("%d ",b[i]);
printf("\n");
for(i=0;i<n;i++)
printf("%d ",c[i]);
printf("\n");
}
return 0;
}
Введите количество элементов массива <= 10
5
Введите массив
1 2 3 -1 -1
-1 -1
3 2 1
Введите количество элементов массива <= 10
15
Количество элементов вне диапазона
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.