Здравствуйте, ivanzh, Вы писали:
I>Здравствуйте, Alex Dav, Вы писали:
AD>>а какая ошибка?
I>Я думаю, что ошибка в адресации
И все таки, программа не компилируется / не работает / дает не правильный результат ...
Возможно ошибка к том, что в циклах перебора элементов, в качестве итератора используется внешняя переменная.
Поэтому:
while (first!= NULL) // на входев этот цикл first всегда будет равен NULL
{
Memo1->Lines->Add(IntToStr(first->a)+' '+(first->ch));
first =first->next;
}
Здравствуйте, e-garin, Вы писали:
EG>Здравствуйте, ivanzh, Вы писали:
I>>Написал функцию сортировки списка, а BDS 2006 выдаёт ощибку, помогите, пожалуйста, найти:
EG>Согласен с vasmann, вот этот код упадёт на последнем элементе списка:
C>И все таки, программа не компилируется / не работает / дает не правильный результат ...
Когда нажимаю на кнопку Button3, выдаётся сообщение о ошибке в адресах
C>Возможно ошибка к том, что в циклах перебора элементов, в качестве итератора используется внешняя переменная. C>Поэтому: C>
C> while (first!= NULL) // на входев этот цикл first всегда будет равен NULL
C> {
C> Memo1->Lines->Add(IntToStr(first->a)+' '+(first->ch));
C> first =first->next;
C> }
C>
Здравствуйте, ivanzh, Вы писали:
I>Здравствуйте, e-garin, Вы писали:
EG>>Здравствуйте, ivanzh, Вы писали:
I>>>Написал функцию сортировки списка, а BDS 2006 выдаёт ощибку, помогите, пожалуйста, найти:
EG>>Согласен с vasmann, вот этот код упадёт на последнем элементе списка:
I>А как же это исправить?
например, так:
while ( first && first->next )
{
//...
(в логику самого алгоритма сортировки я не вникал, не могу сказать правильный он или нет)
Здравствуйте, ivanzh, Вы писали:
I>Написал функцию сортировки списка, а BDS 2006 выдаёт ощибку, помогите, пожалуйста, найти:
I>
I>void __fastcall TForm1::Button3Click(TObject *Sender)
I>{
I> int temp;
I> if (first == NULL)
I> Memo1->Lines->Add("Ochered pusta");
I> else//sortirovka
I> while (first!= NULL) //(1)
I> {
I> if(first->a>first->next->a)//(*)
I> {
I> temp=first->a;
I> first->a=first->next->a;
I> first->next->a=temp;
I> }
I> first =first->next;
I> } //vivod //(2)
I> while (first!= NULL)//(3)
I> {
I> Memo1->Lines->Add(IntToStr(first->a)+' '+(first->ch));
I> first =first->next;
I> }
I>}
I>
Подытоживая, здесь три проблемы:
1. Код между (1) и (2) не есть алгоритм сортировки (больше похоже на один проход сортировки пузырьком, но тогда надо бы до предпоследнего элемента).
Попробуйте проверить его руками на массиве из 4 элементов, например: [4, 1, 3, 2]
2. В (1) надо проверять first->next (тогда не будет падать в (*)).
3. В цикл (3) не попадём, поскольку first равен NULL после завершения цикла (2).
P.S. На самом деле ещё проблема в том, что внешняя переменная (скорее всего это член класса TForm1) после выполнения данного метода бесполезна, поскольку по-любому равна 0.
Подумайте ещё раз над тем, что Вы хотели написать.
Здравствуйте, ivanzh, Вы писали:
I>Написал функцию сортировки списка, а BDS 2006 выдаёт ощибку, помогите, пожалуйста, найти:
Тут ещё и в алгоритме ошибка. Он выполняет пробулькивание одного пузырька.
Кстати, сам по себе выбор сортировки с обменами значений над списком неоправдан. Почему бы не переупорядочивать узлы, т.е. сделать сортировку слияниями?