Поиск ошибки в программе - 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;
}

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

  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
Похожие ответы