Сортировка массива - 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();
}
Объяснение кода листинга программы
В этом коде реализуется сортировка массива по трем категориям: положительные числа, отрицательные числа и ноль. Сначала происходит подсчет количества элементов каждой категории, затем эти категории сортируются отдельно по убыванию и возрастанию. Затем элементы каждой категории добавляются в конец массива в порядке возрастания. В конце выводится отсортированный массив.