Дан массив A(N). - C (СИ)

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

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

Дан массив A(N). Построить массив С из позитивных элементов заданного массива А и упорядочить массив С в порядке убывания. Пробовал делать не получается. Помогите разобраться.
#include<stdio.h>
#include<conio.h>
const int n=10;
main()
{
      int A[n], B[n];
      int i, a=-5, b=10, j, d;
      for (i=0;i<n;i++)
    {
        A[i]=rand()%(b-a+1)+a;
        printf("A[%d]=%d\n", i, A[i]);
      }
       for (i=0;i<n;i++)
       {
           if(A[i]>0)
           {
            B[i]=A[i];
            printf("\nB[%d]=%d\n", i, B[i]);
           }
        }
       printf("Otsortirovannui masiv\n");
       for(i=0;i<=n-1;i++)
        for(j=n-2;j>=i;j--) 
         if(B[j]>B[j+1])
         {
         d=B[j];
         B[j]=B[j+1];
         B[j+1]=d;
         }
         for(i=0;i<n;i++)
         printf("B[%d]=%d\n", i, B[i]);
getch();
}

Решение задачи: «Дан массив A(N).»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N   ( 20 )
 
void print_array( int *arr, size_t size ) {
    size_t i = 0;
 
    while ( i < size )
        fprintf( stdout, "%4d", arr[ i++ ] );
    puts("");
}
 
int comp( const void *i, const void *j ) {
  return *(int *)j - *(int *)i;
}
 
int main(){
    int array_a[ N ], *array_c, i = 0, cntr = 0;
    srand( time( 0 ) );
 
    while ( i < N ) {
        array_a[ i ] = rand() % N - ( N / 2 );
        if ( array_a[ i ] > 0 ) {
            ++cntr;
            if ( (array_c = (int*) realloc( array_c, cntr * sizeof( int ) ) ) == NULL ) {
                fprintf( stderr, "error of memory. line 27\n");
                exit( 0 );
            }
            array_c[ cntr - 1 ] = array_a[ i ];
        }
        ++i;
    }
 
    qsort( array_c, cntr, sizeof( int), comp );
    puts("array_a");
    print_array( array_a, N );
    if ( cntr ) {
        puts("array_c");
        print_array( array_c, cntr );
    }
    else
        fprintf( stdout, "all nums is negative or 0\n");
    free( array_c );
    getchar();
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы: для работы с функциями ввода-вывода, для работы с функциями работы с памятью, для инициализации генератора случайных чисел.
  2. Определяется размер массива N.
  3. Создается функция print_array для вывода элементов массива на экран. Она принимает указатель на первый элемент массива и размер массива. В цикле выводит все элементы массива на экран, используя функцию fprintf для форматированного вывода.
  4. Создается функция comp для сортировки массива методом сортировки слиянием. Она принимает указатели на два элемента массива и возвращает разницу между ними.
  5. В функции main создается массив array_a типа int с размером N и инициализируется случайными числами от -N/2 до N/2. Создается указатель array_c на первый элемент массива.
  6. В цикле выделяется память под массив array_c размером cntr*sizeof(int) и копируется элемент array_a[i] в array_c. Если память не может быть выделена, выводится сообщение об ошибке и программа завершается.
  7. Массив array_c сортируется функцией qsort с использованием функции comp.
  8. Выводится на экран массив array_a.
  9. Если cntr не равно нулю, то выводится на экран массив array_c.
  10. Если cntr равно нулю, то выводится сообщение all nums is negative or 0.
  11. Выделяется память под массив array_c и освобождается память под массивом array_a.
  12. Программа ожидает нажатия любой клавиши и завершается.
  13. Возвращается 0, что означает успешное выполнение программы.

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

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