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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2013, 23:12   #11
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Код:
int Comparison(List *H1, List *H2, List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	Elem1=H1;
	Elem2=H2;
	while (Elem1!=NULL && Elem2!=NULL) {
		while ((Elem1->a[iter]==Elem1->a[iter]) && (iter<=strlen(Elem1->a) && iter<=strlen(Elem1->a))) {
			iter++;
			cout << "e: " << Elem1->a[iter] << "\n";
			cout << "e2: " << Elem2->a[iter] << "\n";
			if (Elem1->a[iter]!=Elem2->a[iter]) {
				state=0;
				return state;
		}
	}
	    Elem1=Elem1->Next;
		Elem2=Elem2->Next;
	}
	return state;
	}
Глядя на этот код я вижу, что сравниваются вершины (правильно или нет- другой вопрос).
PS
Код:
while ((Elem1->a[iter]==Elem1->a[iter])
Смысл сравнивать один и тот же элемент?

Последний раз редактировалось EUGY; 16.01.2013 в 23:17.
EUGY вне форума Ответить с цитированием
Старый 16.01.2013, 23:43   #12
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Построив нормальный алгоритм сначала в тетради, а потом закодировал на языке C получил работающую, наконец функцию, тперь выводит правильно:
Код:
int Comparison(List *H1, List *H2, List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	while (Elem1!=NULL && Elem2!=NULL) {
		while (iter<=strlen(Elem1->a) && iter<=strlen(Elem2->a)) {
			if ((B->a[iter])!=(New->a[iter])) {
				state=0;
				return state;
			}
			else ++iter;
		}
	Elem1=Elem1->Next;
	Elem2=Elem2->Next;
	}
	return state;
	}
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:45   #13
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

да, от себя я такого не ожидал(((
спасибо за помощь...
Видно, что Вы опытный программмист) тогда еще один вопрос: говорят нужно строить сначала алгоритм, а потом писать код, а не наоборот... почему?
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:51   #14
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Построив нормальный алгоритм сначала в тетради, а потом закодировал на языке C получил работающую, наконец функцию, тперь выводит правильно:
Код:
int Comparison(List *H1, List *H2, List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	while (Elem1!=NULL && Elem2!=NULL) {
		while (iter<=strlen(Elem1->a) && iter<=strlen(Elem2->a)) {
			if ((B->a[iter])!=(New->a[iter])) {
				state=0;
				return state;
			}
			else ++iter;
		}
	Elem1=Elem1->Next;
	Elem2=Elem2->Next;
	}
	return state;
	}
Очень рад

if ((B->a[iter])!=(New->a[iter])) // B, New - внешние сущности, что они делают в функции?
Параметры H1, H2 нигде не используются, почему так?

Цитата:
говорят нужно строить сначала алгоритм, а потом писать код, а не наоборот... почему?
Я для себя все проговариваю по-русски и если смогу сам себе или своей кошке объяснить задачу, значит написанный код будет правильным
EUGY вне форума Ответить с цитированием
Старый 16.01.2013, 23:52   #15
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

ну, это я в спешке убрать забыл)) потом добавил Elem и все)
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:53   #16
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
int Comparison(List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	while (Elem1!=NULL && Elem2!=NULL) {
		while (iter<=strlen(Elem1->a) && iter<=strlen(Elem2->a)) {
			if ((Elem1->a[iter])!=(Elem2->a[iter])) {
				state=0;
				return state;
			}
			else ++iter;
		}
	Elem1=Elem1->Next;
	Elem2=Elem2->Next;
	}
	return state;
	}
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:54   #17
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

вот это окончательный вариант рабочей функции)))
но Вы не ответили на вопрос)
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:56   #18
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

а нет ответили, извините))))))))))
Igor95 вне форума Ответить с цитированием
Старый 17.01.2013, 00:17   #19
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Код:
int Comparison(List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	while (Elem1!=NULL && Elem2!=NULL) {
		while (iter<=strlen(Elem1->a) && iter<=strlen(Elem2->a)) {
			if ((Elem1->a[iter])!=(Elem2->a[iter])) {
				state=0;
				return state;
			}
			else ++iter;
		}
	Elem1=Elem1->Next;
	Elem2=Elem2->Next;
	}
	return state;
	}
Попридираюсь:
Уже лучше, но все равно криво.
Вместо цикла while (iter.... лучше бы strcmp
Тогда отпадает необходимость в переменных state , iter
PS. И кроме того, нет проверки случая, когда Elem1 == NULL, Elem2 != NULL. И наоборот.

Последний раз редактировалось EUGY; 17.01.2013 в 00:39.
EUGY вне форума Ответить с цитированием
Старый 17.01.2013, 04:31   #20
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

ага, ясно))
возьму на примету))
Igor95 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стек goluzov Общие вопросы C/C++ 4 27.11.2011 17:08
стек Сайын Помощь студентам 0 21.10.2011 21:17
Стек Цветик Общие вопросы C/C++ 0 25.11.2010 17:42
Стек [ICQ] Помощь студентам 5 02.05.2010 13:44