Поиск ошибки в программе - 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, что означает успешное выполнение программы.