Исправить ошибки в программе - C (СИ) (78913)

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

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

Помогите пожалуйста разобраться что к чему
#include <stdio.h>
#include <stdlib.h>
void Print(int* arr, size_t size)
{
for(size_t i = 0; i < size; i++)
printf( "%d ", *(arr+i) );
printf("\n");
}
void Sort(int* arr, size_t size)
{
int temp;
size_t j;
for (size_t i=0; i < size; i++)
{
temp = arr[ i ];
for ( j = i-1; j >= 0 && arr[ j ] > temp; j--)
arr[ j+1 ] = arr[ j ];
arr[ j+1 ] = temp;
}
}
void main()
{
size_t size_a, size_b = 0;
bool flag = true;
printf("A array size > ");
scanf("%d", &size_a);
if(size_a>20) size_a = 20; //так как размер максимум 20, ставлю лимит
int* arr_a = (int*)malloc(size_a*sizeof(int));
int* arr_b = NULL, *temp = NULL;
printf("Filling A array...\n");
for(size_t i = 0; i < size_a; i++)
{
printf("%d > ",i);
scanf("%d",arr_a + i);
}
Print(arr_a,size_a);
arr_b = (int*)malloc(size_a*sizeof(int));
for(size_t i = 2; i < size_a; i+=2)
{
if( arr_a[ i-1 ] % 2 )
{
arr_b[size_b] = arr_a[ i ];
size_b++;
}
}
if(!size_b)
{
free(arr_a);
free(arr_b);
printf("Nothing to copy...");
return;
}
temp = (int*)realloc(arr_b, size_b*sizeof(int));
if(!temp)
{
free(arr_a);
free(arr_b);
perror("Error occured while rellocating B array");
return;
}
arr_b = temp;
temp = NULL;
Print(arr_b, size_b);
Sort(arr_b, size_b);
Print(arr_b, size_b);
printf("Done...");
free(arr_b);
free(arr_a);
}

Решение задачи: «Исправить ошибки в программе»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void Print(int* arr, size_t size)
{
    for(size_t i = 0; i < size; i++)
        printf( "%d ", *(arr+i) );
    printf("\n");
}
 
void Sort(int* arr, size_t size)
{
    int temp;
    size_t j;
    for (size_t i=0; i < size; i++)
    {
        temp = arr[ i ];
        for ( j = i-1; j >= 0 && arr[ j ] > temp; j--)
            arr[ j+1 ] = arr[ j ];
        arr[ j+1 ] = temp;
    }
}
 
int main()
{
    size_t size_a, size_b = 0;
    bool flag = true;
    printf("A array size > ");
    scanf("%d", &size_a);
    if(size_a>20)
        size_a = 20; //так как размер максимум 20, ставлю лимит
    int* arr_a = (int*)malloc(size_a*sizeof(int));
    int* arr_b = NULL, *temp = NULL;
    printf("Filling A array...\n");
    for(size_t i = 0; i < size_a; i++)
    {
        printf("%d > ",i);
        scanf("%d", (arr_a + i));
    }
    Print(arr_a,size_a);
    arr_b = (int*)malloc(size_a*sizeof(int));
    for(size_t i = 2; i < size_a; i+=2)
    {
        if( arr_a[ i-1 ] % 2 )
        {
            arr_b[size_b] = arr_a[ i ];
            size_b++;
        }
    }
    if(!size_b)
    {
        free(arr_a);
        free(arr_b);
        printf("Nothing to copy...");
        return 0;
    }
    temp = (int*)realloc(arr_b, size_b*sizeof(int));
    if(!temp)
    {
        free(arr_a);
        free(arr_b);
        perror("Error occured while rellocating B array");
        return 0;
    }
    arr_b = temp;
    temp = NULL;
    Print(arr_b, size_b);
    Sort(arr_b, size_b);
    Print(arr_b, size_b);
    printf("Done...");
    free(arr_b);
    free(arr_a);
    return 0;
}

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

  1. Программа начинается с заголовка, который включает в себя необходимые библиотеки и .
  2. Затем определены две функции: Print и Sort. Функция Print используется для печати элементов массива, а функция Sort - для сортировки массива методом сортировки пузырьком.
  3. В функции main() определены следующие переменные: size_a (размер первого массива), size_b (размер второго массива), flag (флаг, используемый в цикле), arr_a (указатель на первый массив) и arr_b (указатель на второй массив).
  4. С помощью функции scanf() пользователь вводит размер первого массива. Если размер первого массива больше 20, то он ограничивается до 20.
  5. С помощью функции malloc() выделяется память под первый массив.
  6. Затем второй массив выделяется динамически, сначала как NULL, а затем перераспределяется с использованием realloc().
  7. В цикле пользователь вводит элементы первого массива.
  8. Выводится первый массив.
  9. Затем второй массив заполняется четными элементами из первого массива.
  10. Если второй массив пуст, то освобождается память и выводится сообщение Nothing to copy....
  11. В противном случае второй массив выводится на экран.
  12. Затем второй массив сортируется с помощью функции Sort.
  13. Отсортированный второй массив выводится на экран.
  14. Выводится сообщение Done....
  15. Освобождается память, выделенная под первый и второй массивы.
  16. Программа завершается возвратом значения 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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