Поиск ошибки в программе - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д