Поиск ошибки в программе - C (СИ) (70569)
Формулировка задачи:
Помогите найти ошибку.
Вот задача, по которой я писала программу: Дан массив, содержащий n элементов. Требуется отсортировать элементы массива в порядке возрастания, отбрасывая при этом все повторяющиеся значения. Количество элементов в массиве после сортировки должно быть скорректировано.
Ввожу массив: 8 2 5 2 1
Выводит: 1 1 2 5 8
#include <stdio.h> #include <conio.h> int main () { int p[100]; int i, n, j, t, temp; int count=1; // счётчик не повторяющихся символов printf("\nEnten number of elements: "); scanf("%u",&n); printf("\nEnter elements: "); for (i=0; i<n; i++) scanf("%u",&p[i]); temp=p[0]; // первый символ исходного массива будет маркером for (i=1; i<n; i++) // перебор всего массива без первого { if(p[i]!=temp) // если символ не равен маркеру { for (j=i+1; j<n; j++) // перебор от следующего за рассмотр. символом if(p[i]==p[j]) // если символы совпали p[j]=temp; // маркируем повторяющиеся count++; // увеличиваем счётчик } } printf("\n"); count=0; // теперь удаляем все маркированные элементы for (i=1; i<n; i++) { if (p[i]!=p[0]) p[++count]=p[i]; } printf("\n"); for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ if (p[j]>p[j+1]) { t=p[j]; p[j]=p[j+1]; p[j+1]=t;} } } for (int i=0; i<n; i++) { printf(" %d", p[i]); } }
Решение задачи: «Поиск ошибки в программе»
textual
Листинг программы
#include <stdio.h> #define N 18 int main() { int A[N] = {76,34,1,-44,57,0,22,546,-9876,546,7463,9876,1,2342,-64,-75,-2840,57}; int i, j, temp; for(i = 0; i < N - 1; i++){ for(j = N - 2; j >= i; j--){ if(A[j] > A[j + 1]){ temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; } } } puts("Sorted array:"); for(i = 0; i < N; i++) printf("%d ", A[i]); putchar('\n'); for(i = 1, j = 1; i < N; i++) if(A[i] != A[i - 1]) A[j++] = A[i]; for(i = 0; i < j; i++) printf("%d ", A[i]); putchar('\n'); return 0; }
Объяснение кода листинга программы
- В начале программы объявляется массив A типа int с размером N = 18 и инициализируется значениями 76, 34, 1, -44, 57, 0, 22, 546, -9876, 546, 7463, 9876, 1, 2342, -64, -75, -2840, 57.
- Затем объявляются три переменные i, j, temp типа int, которые будут использоваться в программе.
- Далее идет цикл for, который начинается с i = 0 и продолжается пока i < N - 1. Внутри этого цикла идет еще один цикл for, который начинается с j = N - 2 и продолжается пока j >= i. Внутри этого цикла проверяется, если A[j] больше A[j + 1], то выполняется блок кода, который меняет значения A[j] и A[j + 1] местами с помощью временной переменной temp.
- После завершения внутренних циклов, программа выводит отсортированный массив A с помощью функции puts и цикла for, а также выводит количество элементов в массиве с помощью функции printf.
- Затем идет цикл for, который начинается с i = 1 и продолжается пока i < N. Внутри этого цикла проверяется, если A[i] не равно A[i - 1], то выполняется блок кода, который добавляет A[i] в начало массива с помощью временной переменной j.
- После завершения внутренних циклов, программа выводит отсортированный массив A с помощью функции puts и цикла for, а также выводит количество элементов в массиве с помощью функции printf.
- В конце программы возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д