Поиск ошибки в программе - C (СИ) (70569)

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

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

Помогите найти ошибку. Вот задача, по которой я писала программу: Дан массив, содержащий n элементов. Требуется отсортировать элементы массива в порядке возрастания, отбрасывая при этом все повторяющиеся значения. Количество элементов в массиве после сортировки должно быть скорректировано. Ввожу массив: 8 2 5 2 1 Выводит: 1 1 2 5 8
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main ()
  4. {
  5. int p[100];
  6. int i, n, j, t, temp;
  7. int count=1; // счётчик не повторяющихся символов
  8. printf("\nEnten number of elements: ");
  9. scanf("%u",&n);
  10. printf("\nEnter elements: ");
  11. for (i=0; i<n; i++)
  12. scanf("%u",&p[i]);
  13. temp=p[0]; // первый символ исходного массива будет маркером
  14. for (i=1; i<n; i++) // перебор всего массива без первого
  15. {
  16. if(p[i]!=temp) // если символ не равен маркеру
  17. {
  18. for (j=i+1; j<n; j++) // перебор от следующего за рассмотр. символом
  19. if(p[i]==p[j]) // если символы совпали
  20. p[j]=temp; // маркируем повторяющиеся
  21. count++; // увеличиваем счётчик
  22. }
  23. }
  24. printf("\n");
  25. count=0;
  26. // теперь удаляем все маркированные элементы
  27. for (i=1; i<n; i++)
  28. {
  29. if (p[i]!=p[0]) p[++count]=p[i];
  30. }
  31. printf("\n");
  32. for(int i=0;i<n-1;i++){
  33. for(int j=0;j<n-i-1;j++){
  34. if (p[j]>p[j+1])
  35. {
  36. t=p[j];
  37. p[j]=p[j+1];
  38. p[j+1]=t;}
  39. }
  40. }
  41. for (int i=0; i<n; i++)
  42. {
  43. printf(" %d", p[i]);
  44. }
  45. }

Решение задачи: «Поиск ошибки в программе»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define N 18
  3. int main()
  4. {
  5.     int A[N] = {76,34,1,-44,57,0,22,546,-9876,546,7463,9876,1,2342,-64,-75,-2840,57};
  6.     int i, j, temp;
  7.     for(i = 0; i < N - 1; i++){
  8.         for(j = N - 2; j >= i; j--){
  9.             if(A[j] > A[j + 1]){
  10.                 temp = A[j];
  11.                 A[j] = A[j + 1];
  12.                 A[j + 1] = temp;
  13.             }
  14.         }
  15.     }
  16.     puts("Sorted array:");
  17.     for(i = 0; i < N; i++)
  18.         printf("%d ", A[i]);
  19.     putchar('\n');
  20.     for(i = 1, j = 1; i < N; i++)
  21.         if(A[i] != A[i - 1])
  22.             A[j++] = A[i];
  23.     for(i = 0; i < j; i++)
  24.         printf("%d ", A[i]);
  25.     putchar('\n');
  26.     return 0;
  27. }

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

  1. В начале программы объявляется массив A типа int с размером N = 18 и инициализируется значениями 76, 34, 1, -44, 57, 0, 22, 546, -9876, 546, 7463, 9876, 1, 2342, -64, -75, -2840, 57.
  2. Затем объявляются три переменные i, j, temp типа int, которые будут использоваться в программе.
  3. Далее идет цикл for, который начинается с i = 0 и продолжается пока i < N - 1. Внутри этого цикла идет еще один цикл for, который начинается с j = N - 2 и продолжается пока j >= i. Внутри этого цикла проверяется, если A[j] больше A[j + 1], то выполняется блок кода, который меняет значения A[j] и A[j + 1] местами с помощью временной переменной temp.
  4. После завершения внутренних циклов, программа выводит отсортированный массив A с помощью функции puts и цикла for, а также выводит количество элементов в массиве с помощью функции printf.
  5. Затем идет цикл for, который начинается с i = 1 и продолжается пока i < N. Внутри этого цикла проверяется, если A[i] не равно A[i - 1], то выполняется блок кода, который добавляет A[i] в начало массива с помощью временной переменной j.
  6. После завершения внутренних циклов, программа выводит отсортированный массив A с помощью функции puts и цикла for, а также выводит количество элементов в массиве с помощью функции printf.
  7. В конце программы возвращается 0, что означает успешное выполнение программы.

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


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

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы