Сортировка массива - E2140 Declaration is not allowed here - C (СИ)

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

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

Подскажите пожалуйста , как устранить ошибки в коде.
#include <stdio.h>

 int main(int argc, char *argv[])
{
    int n,j,i,tmp;
    printf("Vvedite razmer massiva: ");
    scanf("%d",&n);
    int a[n];
    for (int i=0;i<n;i++)
    scanf ("%d",&a[i]);

 for(i = 0 ; i < n ; i++) {
       for(j = 0 ; j < n - 1 ; j++) {  
           if(a[j]>0) {                         
              int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp; 
           }
        }
    }
    for(i = 0 ; i < n ; i++) {       
       for(j = 0 ; j < n - 1 ; j++) {  
           if(a[j]<0) {            
              int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp; 
           }
        }
    }
for (int i=0;i<n;i++)
 printf("%d ",a[i]);
 
    return 0;
}

ОШИБКИ

[C++ Error] Unit1.c(9): E2140 Declaration is not allowed here [C++ Error] Unit1.c(9): E2313 Constant expression required [C++ Error] Unit1.c(10): E2188 Expression syntax [C++ Warning] Unit1.c(10): W8019 Code has no effect [C++ Error] Unit1.c(10): E2379 Statement missing ; [C++ Error] Unit1.c(28): E2188 Expression syntax [C++ Warning] Unit1.c(28): W8019 Code has no effect [C++ Error] Unit1.c(28): E2379 Statement missing ;

Решение задачи: «Сортировка массива - E2140 Declaration is not allowed here»

textual
Листинг программы
#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
 
int main()
{
    int n,j,i,tmp, *a, *pol, *otr;
    printf("Vvedite razmer massiva: ");
    scanf_s("%d",&n);
    a=(int*)calloc(n, sizeof(int));
    pol=(int*)calloc(n, sizeof(int));
    otr=(int*)calloc(n, sizeof(int));
    
 
 
    for (i=0; i<n; i++)
        scanf_s("%d",&a[i]);
    int k=0, l=0, m=0;
    for (i=0; i<n; i++)
    {
        if(a[i]>0)
        {
            pol[k]=a[i];
            k++;
        }
        else if(a[i]<0)
        {
            otr[l]=a[i];
            l++;
        }
        else
        {
            m++;
        }
    }
    //сортируем по убыванию положительный массив
    for(i=0; i<n-1; ++i) // i - номер прохода
    {            
        for(j=0;j<n-1; ++j) // внутренний цикл прохода
        {     
            if (pol[j+1]>pol[j]) 
            {
                tmp=pol[j+1]; 
                pol[j+1]=pol[j]; 
                pol[j]=tmp;
            }
        }
    }
    //сортируем по возрасани. отр массив
    for(i=0; i<n-1; ++i) // i - номер прохода
    {            
        for(j=0;j<n-1; ++j) // внутренний цикл прохода
        {     
            if (otr[j+1]<otr[j]) 
            {
                tmp=otr[j+1]; 
                otr[j+1]=otr[j]; 
                otr[j]=tmp;
            }
        }
    }
    for(int i=0; i<m; i++)
    {
        a[i]=0;
    }
    k=0;
    for(int i=m; i<n; i++)
    {
        a[i]=pol[k];
        k++;
    }
    l=0;
    for(int i=m+k-1; i<n; i++)
    {
        a[i]=otr[l];
        l++;
    }
 
    for (i=0; i<n; i++)
        printf("%d ", a[i]);
 
    _getch();
}

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

В этом коде реализуется сортировка массива по трем категориям: положительные числа, отрицательные числа и ноль. Сначала происходит подсчет количества элементов каждой категории, затем эти категории сортируются отдельно по убыванию и возрастанию. Затем элементы каждой категории добавляются в конец массива в порядке возрастания. В конце выводится отсортированный массив.

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


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

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

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