Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132

Выполнить сортировку уже созданного списка

27.09.2013, 00:08. Показов 2186. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо выполнить сортировку уже созданного списка.Я видно напортачила с указателями, так как, честно признаюсь, "плаваю" в них. Программа просто не хочет идти дальше одной строки.
Есть список:

C
1
2
3
4
5
6
7
{char name [15];
 int god;//год, по этому полю будет выполнятся сортировка по возрастанию
  struct spis *v1;//предыд элемент
  struct spis *v2;//послед элемент
 };
 void swap (struct spis *);
  struct spis * head, * tail;//указатели на голову и хвост
Программа доходит до строки
C
1
{while (a->god>b->god);
и дальше ничего не делает.
Вот код функции сортировки по возрастанию:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void swap (struct spis *p)
{
 struct spis *a=NULL;
 struct spis *b=NULL;
 a=p;
 b=p->v2;
 if (a==b) return;
 if (b!=tail)
    {while (a->god>b->god);  // здесь виснет и все...
      {if (a==head) 
    {b->v1=NULL;
     b->v2=a;
     a->v1=b;
     b=head;
    }
    else if (a==tail)
      {b->v1=tail;
      b->v2=NULL;
      a->v2=b;
      tail=b;
      }
      else
       {b->v1=a->v1;
        b->v2=a;
        a->v1->v2=b;
        a->v1=b;
       }
    a=a->v2;
    }
    }
    else if ((a==head)&&(b==tail))
     {b->v1=NULL;
     b->v2=a;
     a->v1=b;
     a->v2=NULL;
     b=head;
     a=tail;
     }
     else if (b==tail)
        {a->v1=tail;
        a->v2=NULL;
        b->v2=a;
        tail=a;
        }
   printf("\n ‘Отсортированный список\n");
   }
Думаю напортачила в указателях, в наименовании функции....
Хотела объявить переменные в функции: а - соответствует текущему элементу структуры, b - последующему, видно не получилось, не понял меня компилятор .
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2013, 00:08
Ответы с готовыми решениями:

Изменение уже созданного DataSource
Здравствуйте уважаемые форумчане! Столкнулся с проблемой, которую почему то решить не получается (( Проблема в следующем, имею базу...

Создать форму, которая позволяла бы выбирать блюда не из общего списка, а из списка блюд последнего созданного дня
У меня есть общий список блюд, из которого формируется меню на день. Помогите, пожалуйста, создать форму, которая позволяла бы выбирать...

Изменить значение уже созданного поля docproperty
Наверняка вопрос задавался неоднократно, но первичный поиск отсылает не к тому. Вопрос собственно простой: в документе есть уже созданное...

28
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
28.09.2013, 10:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zer0mail Посмотреть сообщение
1. Если бы оформили в соотвествии с п 63, 77, то пустой цикл бросался бы глаза
Интересно, как по-твоему случайно поставленная точка с запятой должна оказаться на отдельной строке в соответствии с правилами оформления? Это же просто опечатка!
Те правила (по крайней мере 63) помогают улучшить читаемость кода, особенно если эта штука куда-то вложена. А 77 в принципе спорное (хотя и безвредное)... А вообще, куча правил на самом деле направлена на то, чтобы компенсировать нежелание ставить вертикальные отступы.

PS: Куча правил там передрано с джавы и си++ не особо-то соответствуют...
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
28.09.2013, 13:13
"Элементарно, Ватсон": в строке начала цикла после ")" вообще ничего не должно быть, в т.ч. опечаток!
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
29.09.2013, 01:41
Цитата Сообщение от zer0mail Посмотреть сообщение
вообще ничего не должно быть, в т.ч. опечаток!

По такому принципу просто опечаток не должно быть... Да и багов... Да и вообще всё должно работать... Да ещё и правильно
0
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
29.09.2013, 09:55  [ТС]
zer0mail,
Цитата Сообщение от zer0mail Посмотреть сообщение
2. Причину зацикливания легко обнаружить в отладчике => отладчиком пользоваться не умеете А отладчик - это такой инструмент, которым надо владеть и использовать постоянно. И не только для исправления ошибок, но и для того, чтобы не задавать 90% вопросов типа "а почему?", "а как..." (в отладчике это видно, да и времени уходит меньше). Видно, как работают конструкции языка (а при использовании дизассемблера вообще все видно!).
Когда под паскалем, то в отлиадчике все видела. а тут, пытаюсь посмотреть, что в список попало и не вижу, наверное не так ввожу переменную списка, или в си как то по другому...
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
29.09.2013, 10:53
Цитата Сообщение от Qwertiy Посмотреть сообщение

По такому принципу просто опечаток не должно быть... Да и багов... Да и вообще всё должно работать... Да ещё и правильно
Вижу, до Вас не доходят мои принципы Опечатки и ошибки всегда будут, но при правильном оформлении их просто легче обнаружить И каждый программист либо сам подбирает под себя это "правильное" оформление, либо следует внешним требованиям.

А чтобы было понятнее, предложу 2 примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// 1-й
while (a->god>b->god); {if (a==head) {b->v1=NULL;  b->v2=a; a->v1=b; b=head;  }}
// 2-й
while (a->god>b->god); 
{   
    if (a==head) 
    {
        b->v1=NULL;  
        b->v2=a; a->v1=b; 
        b=head;  
    }
   ....
}
У меня глаз "цепляется за лишнюю ';', но только во втором примере . Возможно, у Вас "цепляется" только в первом (люди такие разные - ну так и стили разные, каждый подбирает "под себя" ).
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
29.09.2013, 12:12
Цитата Сообщение от zer0mail Посмотреть сообщение
А чтобы было понятнее, предложу 2 примера:
В превом нарушается другой принцип, а именно написание нескольких операторов в одну строку.

Цитата Сообщение от zer0mail Посмотреть сообщение
У меня глаз "цепляется за лишнюю ';', но только во втором примере .
А у меня ни за одну из них не цепляется. Но второй естественно более читаем.

Цитата Сообщение от zer0mail Посмотреть сообщение
b->v2=a; a->v1=b;
Кстати, во втором варианте тоже плохо написано. Если уж хочется так писать, то надо ставить запятую, а не точку с запятой. Хотя конкретно в данном случае я не вижу никаких причин так делать.
0
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
29.09.2013, 22:16  [ТС]
Как работать в отладчике я уже разобралась, я умела в нем работать, просто оказывается содержание списков можно просматривать, если набирать *p а не просто р, как делала в начале.

Короче мой эксперимент с оформлением оказался неудачным, это я тоже поняла, буду делать как раньше.

Ошибку мы с вами с горем по полам нашли, это тоже гуд.

Препод написала, что задание простое и не предусматривает сортировки, что для изучения сортировок будет отдельный предмет.

Вот и все, зато когда уж приступлю к сортировке, я уже поняла принцип и мне будет легче

Добавлено через 34 минуты
Qwertiy, zer0mail, Ребят, я вспомнила, откуда взяла такое форматирование - из примера в учебнике! И подумала, что мое форматирование это ошибка, сделала как в учебнике и получила от вас кучу претензий.
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
29.09.2013, 23:00
Цитата Сообщение от Ульяниус Посмотреть сообщение
Ребят, я вспомнила, откуда взяла такое форматирование - из примера в учебнике!
В учебниках, а особенно в методичках, пишут кое-как, как минимум для того, чтобы минимизировать число страниц... А то и просто потому что их неизвестно кто составлял, причём с кучей ошибок и опечаток. Мне, например, встречалась методичка по Си++, в которой в половине мест стояли точки с запятой после закрывющей круглой скобки, несмотря на то, что в её же начале было написано, что они не ставятся
0
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
02.10.2013, 20:56  [ТС]
Qwertiy, Согласна, что опечатки встречаются, бывает набьешь прогу по примеру, а она не работает, начинаешь разбираться и понимаешь, что надо код немного поправить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2013, 20:56

Программа для прохождения уже созданного теста
Добрый вечер, прошу помочь в написании программы для тестирования, есть программа для создания тестов и нужно чтобы данная программа для...

Как узнать класс уже созданного окна?
Child=CreateWindow(L"Class1", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL,...

Как получить буфер глубины уже созданного фреймбуфера?
Вопрос в шапке.

Как сменить название уже созданного проекта в Qt Creator?

Как изменить размер уже созданного массива в классе?
Доброго дня, друзья! Столкнулся с такой проблемой, если вкратце, то выглядит он следующим образом: есть класс A, в котором в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru