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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2014, 16:21   #1
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию Некорректная работа, ошибка в алгоритме

Задание:
Используйте стек для решения задачи проверки
правильности расстановки открывающих и закрывающих скобок в строке.
Код:
Код:
#include <stdio.h>
#include <conio.h>

struct TElement {
	char Data;
	TElement *Next;	
	};

TElement *PHead,*PEnd;

void InQueue (char InElement);
void FromQueue ();

main(){
 FILE *f;
 f = fopen ("stroka.txt", "r");
 char ch;
	while (!feof(f)){
		fscanf (f, "%c",&ch);
	
	if (ch = "(" || "{" || "[")	
		InQueue (ch);
			else 
	switch (ch){
		case ')':
			if (PHead->Data == '(')
				FromQueue ();
					else 
						printf ("Error!");
		case 123:
			if (PHead->Data == 125)
				FromQueue ();
					else 
						printf ("Error!");
		case ']':
			if (PHead->Data == ']')
				FromQueue ();
					else 
						printf ("Error!");
	}
    }
 	if (PHead != NULL)
		printf ("Error! Stek ne pust");
			else printf ("Complete!");   
}



void InQueue (char InElement){
	TElement *pAddt = new TElement;
	if (PHead == NULL){
		pAddt->Data = InElement;
		pAddt->Next = NULL;
		PHead,PEnd = pAddt;
	}
		else {
			pAddt->Data = InElement;
			pAddt->Next = PHead;
			PHead = pAddt;
		}		
}

void FromQueue (){
	if (PHead != NULL)
		PHead = PHead->Next;
			else
				printf ("Error! Stek pust");	
			
}
Ошибка: Всегда выдаёт "Complete", т.е. стек пуст.
Помогите, пожалуйста
orandzheviyman вне форума Ответить с цитированием
Старый 07.11.2014, 16:43   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Дак используй отладчик и посмотри что за символы обрабатывает программа - это же очень просто.
А мы даже не знаем что за файл там ты используешь.

Файл вообще открывается нормально?
Что такое 125? и 123?
Цитата:
Код:
case 123:
if (PHead->Data == 125)
rrrFer вне форума Ответить с цитированием
Старый 07.11.2014, 17:25   #3
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Дак используй отладчик и посмотри что за символы обрабатывает программа - это же очень просто.
А мы даже не знаем что за файл там ты используешь.

Файл вообще открывается нормально?
Что такое 125? и 123?
Вот именно, что не могу понять, в чём проблема.
Не умею использовать отладку.
содержимое файла
Код:
$k=\sqrt{a} \cdot \sqrt{\frac{1}{2} \cdot \left[\sqrt{1+\left(\frac{b}{a}\right)^{2} } +1\right]} =\omega \sqrt{\mu _{a} \tau _{b} } \sqrt{\frac{1}{2}\left[\sqrt{1+\left(\frac{\sigma }{\omega \tau _{a} } \right)^{2} }+1\right]} $
orandzheviyman вне форума Ответить с цитированием
Старый 07.11.2014, 17:28   #4
Scorpius
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 26
По умолчанию

Цитата:
Сообщение от orandzheviyman Посмотреть сообщение
Код:
if (ch = "(" || "{" || "[")
Ты не сравниваешь значение ch, а присваиваешь ему новое значение

Каждый case должен заканчиваться break

Цитата:
Код:
if (PHead->Data == ']')
А тут должна быть открывающая скобка
Не всегда говори то, что знаешь, но всегда знай, что говоришь.

Последний раз редактировалось Scorpius; 07.11.2014 в 17:40.
Scorpius вне форума Ответить с цитированием
Старый 07.11.2014, 17:48   #5
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Scorpius Посмотреть сообщение
Ты не сравниваешь значение ch, а присваиваешь ему новое значение

Каждый case должен заканчиваться break


А тут должна быть открывающая скобка
дааааа уж, ясно понял, что всё напрочь забыл) спасибо, но всё равно не работает

Последний раз редактировалось orandzheviyman; 07.11.2014 в 17:51.
orandzheviyman вне форума Ответить с цитированием
Старый 07.11.2014, 23:42   #6
Scorpius
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 26
По умолчанию

Поправил, вроде должно работать.

Код:
#include <stdio.h>
#include <conio.h>

struct TElement
{
	char Data;
	TElement *Next;	
};

TElement *PHead,*PEnd;

void InQueue (char InElement);
void FromQueue ();

int main()
{
	FILE *f;
	f = fopen ("stroka.txt", "r");
	char ch;
	while (!feof(f))
	{
		ch = '\0';
		fscanf (f, "%c",&ch);
	
		if ((ch == '(') || (ch == '{') || (ch == '['))	
			InQueue (ch);
		else
		{
			switch (ch)
			{
				case ')':
					if ((PHead) && (PHead->Data == '('))
						FromQueue ();
					else 
					{
						printf ("Error!");
						//return 1;
					}
					break;
				case '}':
					if ((PHead) && (PHead->Data == '{'))
						FromQueue ();
					else 
					{
						printf ("Error!");
						//return 1;
					}
					break;
				case ']':
					if ((PHead) && (PHead->Data == '['))
						FromQueue ();
					else 
					{
						printf ("Error!");
						//return 1;
					}
					break;
			}
		}
	}
 	if (PHead != NULL)
		printf ("Error! Stek ne pust");
	else
		printf ("Complete!");   
	return 0;
}



void InQueue (char InElement)
{
	TElement *pAddt = new TElement;
	if (PHead == NULL)
	{
		pAddt->Data = InElement;
		pAddt->Next = NULL;
		PHead = pAddt;
	}
	else
	{
		pAddt->Data = InElement;
		pAddt->Next = PHead;
		PHead = pAddt;
	}		
}

void FromQueue (){
	if (PHead != NULL)
		PHead = PHead->Next;
	else
		printf ("Error! Stek pust");
}
Не всегда говори то, что знаешь, но всегда знай, что говоришь.
Scorpius вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректно работает, ошибка в алгоритме orandzheviyman Помощь студентам 2 24.10.2014 08:49
Ошибка в алгоритме. Работа с большими массивами hunter03 Visual C++ 0 28.08.2013 10:55
Ошибка в алгоритме parkito Общие вопросы C/C++ 1 07.12.2011 04:25
Ошибка в алгоритме поиска murzilka6002 Общие вопросы C/C++ 15 24.11.2011 04:57
Ошибка в алгоритме слияние массивов ATAMAN200 Общие вопросы C/C++ 3 25.10.2010 20:37