Не верный вывод данных Си

01.01.2001

Не верный вывод данных Си
Сортируется массив :
# include
# include
void main()
{
int i,vp,t;
int a[7];
//ввод (рандом)
for (i=1; i<7; i++)
{
a=0+rand();
}
//Вывод начальных
for (i=1; i<=7; i++)
{
printf("%d\n", a);
}
printf(" \n");
//сортировка
for (i=2; i<=7; i++)
{
if (a;
for (t=1; t<=i; t++)
{
a=a[i-1];
}
if (a[i-2]<=vp)
{
a[i-1]=vp;
}
else{
a[i-1]=a[i-2];
a[i-2]=vp;
}
}
}

//вывод конечных
for (i=1; i<=7; i++)
{
printf("%d\n", a);
}
getch();
}
для примера:
входные 0 2 0 6 7 5 1
вывод 0 0 2 5 6 7 7
Почему 1 заменяется на 7? Самих значений я не касаюсь, где ошибка?

  • Перед тем как в ячейку заносить новое значение, надо его сохранить отдельно, а потом поместить в ту ячейку, которая освободилась.
    Вероятно последний шаг забыли сделать в конце работы первого цикла сортировки.
    Я не анализировала программу.
    Но обычно затруднения и ошибки возникают, когда надо оформить состояние в начале или в конце цикла.

    что означает
    if (a;
    я совершенно не понимаю.
    Если у a есть индекс, то применяйте его везде.
    А таких неравенств я и в математике не встречала )))

    Надеюсь, когда проснётесь, всё прояснится.
    Рекомендую оформить цикл не с 2 до 7, а универсально от m до 7,
    и поместить внутрь цикла по m
    for (m =2; m<=6; m++)
    for (i=m; i<=7; i++)

    тогда скользящее начало цикла обеспечит упорядоченность и простоту.
    Операции внутри цикла должны быть элементарно просты и ясны - простой обмен двух ячеек.
    Для обмена нужно только одно условие if без всяких вариантов и многоэтажности.
    Ведь как бы Вы действовали вручную?
    Или не менять, или вынуть из ряда фишку (на временное место) , поставить на её место другую, а первую вставить на освободившееся место.
    Всё !

Вас заинтересует