Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 22:21   #1
vitaxa3581
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 19
По умолчанию списки

Ребята подскажите момент. Суть задачи такова: "Определить является ли четным длинна списка, не подсчитывая количество его элементов" выход нашел такой: пробежать по списку через next -> next если условие выполняется то выдать строку "список четный", и это работает, но как проверить на не выполнения условия???

Код:
int kolodd(QUE * q)                  
    {QUE * current = q;
  
     while(current !=NULL){
	
	      current = current ->next->next;}
	      
	      printf ("\n Cписок четный");
 	  
}
vitaxa3581 вне форума Ответить с цитированием
Старый 11.03.2013, 22:31   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Советую подумать, что случится, если в списке будет нечётное число элементов (ответ: программа рухнет).
А задача дурацкая, тут она уже задавалась и правильный ответ: это невозможно. Точнее, можно написать программу, такую, что для большинства списков в программе не будет переменной, принимающей значение, равное количеству элементов списка. Но нельзя обойтись меньшими усилиями, чем требуется для подсчёта количества элементов списка.
Abstraction вне форума Ответить с цитированием
Старый 11.03.2013, 22:38   #3
vitaxa3581
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Советую подумать, что случится, если в списке будет нечётное число элементов (ответ: программа рухнет).
А задача дурацкая и правильный ответ: это невозможно
но к сожалению суть задачи состоит в том чтоб не подсчитывать элементы. и лучшего варианта кроме как прыгать через два элемента я не нашел. но встал в тупик при проверке на не четность.
vitaxa3581 вне форума Ответить с цитированием
Старый 11.03.2013, 22:43   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
и лучшего варианта кроме как прыгать через два элемента я не нашел.
Это не вариант, это способ уронить программу в 50% случаев.
Можно формально выполнить требование "не считать", если взять целочисленную переменную, изначально равную 0, и на каждом элементе делать var = 1-var. В конце она будет 0, если число элементов чётно и 1, если число элементов нечётно (подумайте, почему).
Но это исключительно формальный приём, который занимается фигнёй вместо подсчёта длины для списков длиннее одного элемента. Реально же надо обойти все элементы списка, и с тем же успехом можно было бы их заодно посчитать; повторяю, задание маразматичное.
Abstraction вне форума Ответить с цитированием
Старый 11.03.2013, 23:00   #5
vitaxa3581
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Это не вариант, это способ уронить программу в 50% случаев, задание маразматичное.
я это знаю и вечерами вспоминаю тех людей которые состовляли задание для лабораторных "не злым тихим словом" и понимаю что можно подсчитать и определить четность списка, но мне надо сделать по условию задания!!!! и забыть как страшный сон!!!!! По этому в любом случае спасибо за внимание к моей проблеме!
vitaxa3581 вне форума Ответить с цитированием
Старый 12.03.2013, 01:13   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
но мне надо сделать по условию задания!!!!
Проблема с заданиями такого рода в том, что любое решение может быть отклонено с формулировкой "потому что неправильно", к сожалению. А так -
Код:
int var = 0;
for(QUE* c=q; c != NULL; c=c->next) var = 1-var;
if(var == 0) printf("В списке чётное число элементов.\n");
else printf("В списке нечётное число элементов.\n");
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
списки с++ Cinnamon Помощь студентам 0 10.01.2012 20:21
СПИСКИ. СИ Ксюха21 Помощь студентам 3 27.06.2011 15:29
списки FSAS Помощь студентам 0 25.06.2011 09:56
Списки C++ paladinn Помощь студентам 1 27.05.2009 12:31