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