Ir ao conteúdo

Posts recomendados

Postado

alguem por favor pode me explicar esses numeros no debug

 

quando coloca numeo negativo no loop todas a variaveis ficam com valores estranhos mesmo colocando valores neles

não sei se estou errando o if else

 

 

post-441048-0-19472200-1446572229_thumb.

Postado

coloquei 2 if no inicio e o loop funcionou

depois eu vi o erro na linha 53 if(ic=1)

 

agora estou com problemas no raciocínio logico com os {}, não consigo acompanhar visualmente a sequencia da cascata

 

e de matematica

"como pegar os numeros na direção inversa e ir multiplicando por 10^n

tentei assim mas estou com problemas para juntar a sequencia com a logica

//pt=0if(n > 1){  pt *= 10;  valorX = ((C * pt) + valorX);}else{  valorX = C ;  pt = 10;}

sem falar nos zeros finais que serão encontrados primeiro, e também no "-"

sei que posso pegar na ordem e inverter depois, mas eu quero treinar um pouco de matemática também "sou horrível " não sei nem a tabuada :("

tá ficando complicado

e eu ainda quero adicionar a lista de ignorados

Postado

------------------------------------------

 

sobre o if e else é problemático mesmo e devo evitar ou errei alguma coisa nesse meio ou pode ter sido a ide ?

 

fora o else que eu substitui por     if(ocorrencia < 0 )

não tinha nada para deixar as variaveis naqueles valores

é como se as variaveis tivessem sido realocadas

 

se tiver que tirar nem me incomodo, eu prefiro o if mesmo, fica mais fácil acompanhar a logica vendo a questão testada

Postado

o objetivo do codigo é aprende e me acostumar com os {}

 

mas já está todo bagunçado porque com o tira e bota no meio das {}

o auto complete da ide me enrolou e eu perdi a sequencia do }

#include <cstdlib>#include <iostream>#include <string.h>using namespace std;int QLt(char *lt){	int t = 0;	while(*lt != '\0')		{			lt++;			t++;		}	return t;}double convertNUM( char * StrNum, char * StrReferencia, int ocorrencia, int  quantidade = 0){	double valorX = 0;	int n = 0, L2 = 0, L = 0, C, t = 0, ts, tr;	ts = QLt(StrNum);	tr = QLt(StrReferencia);	int  d2, ic, pt = 0;	if(ocorrencia >= 0 )		{			L = 0;			d2 = ts;			ic = 1;		}	if(ocorrencia < 0 )		{			L = ts;			d2 = 0;			ic = -1;		}	while(L != d2)	//for (; L == d2; L+=ic)	//for ( L = 0; L <= ts; L++)		{			for (C = 0; C < tr; C++)				{					if (StrNum[L] == StrReferencia[C])						{							n = n + 1;							if (n == 1)								{									L2 = L;								}							if (C < 10)								{									if(ic == 1)										{											valorX = valorX * 10 + C;										}									else										{																							if(n > 1)													{														pt *= 10;														valorX = ((C * pt) + valorX);													}												else													{														valorX = C ;														pt = 10;													}										}								}							goto prxL;						}				}//for StrReferencia			if (n > 0)				{					t += ic;					if (ocorrencia == t || ocorrencia == 0)						{							if(StrNum[L2 - 1] == '-')								{									valorX = -valorX;								}							return valorX;						}					else						{							valorX = 0;							n = 0;						}				}prxL:			;			L += ic;		} //for StrNum	return 0;}int main(){	char Arnut[] = "0123456789.,";	char vkk[100] = "2maria pagou R$2.000,00  para joão com %20 de descont7o9";	int di = 1;	cout  <<  convertNUM(vkk, Arnut, di) << endl;	strcpy( Arnut, "0123456789.");//	char vkk = new *char;	strcpy(  vkk, "A data de pagamento é 20/10/20150, 2 dias de atraso");	di = -2;	cout  <<  convertNUM(vkk, Arnut, di) << endl;	return  0;}

com o else no inicio as variaveis estava ficando com valo maluco, assim como você pode ver na imagem

 

quando retornava alguma coisa que fazia sentido estava assim

#include <cstdlib>#include <iostream>#include <string>using namespace std;const char Arnut[] = "0123456789-.,";int len(char * lt){	int t = 0;	while(*lt != '\0')		{			lt++;			t++;		}	return t;}double convertNUM( char * StrNum){	double valorX = 0;	int n = 0, L2 = 0, L, C, t;	t = len(StrNum);	for ( L = 0; L <= t ; L++)	  {			for (C = 0; C < 12; C++)				{					if (StrNum[L] == Arnut[C])						{							n = n + 1;							if (n == 1)	{L2 = L;}							if (C < 10){	valorX = valorX * 10 + C;}							goto prxL;						}				}			if (n > 0)				{										if (L2 > 0)						{							if(StrNum[L2] == '-')								{								valorX =-valorX;																	}						}					return valorX;//L2;//				}prxL:			;		}	return 0;}int main(){char * vkk = new char[100];		vkk = "aa -2.009ughjghjghjgjgh";	cout  <<  convertNUM(vkk) << endl;	return  0;}

depois coloquei para pegar  as sequencias numericas

"R$-2.009 , pago com %10"

convertNUM(vkk,1)-->>2009

convertNUM(vkk,2)-->>10

 

aí tentei colocar para pegar os numeros em sentido inverso

tipo vkk,-1 = ultma sequencia numerica

tipo vkk,-2 = penúltima sequencia numerica

 

primeiro foi com o for mesmo

 

for (; L == d2; L+=ic)

mas aí o L asumia de cara o valor de d2 e ic não ficava negativo, pensei que era o for e passei para o while

 

mas as variaveis que eu já tinha setado como 0 no inicio apareceram com valores estranhos, como se pode ver na imagem

depois que troquei o o ELSE por outro teste IF  já tinha bagunçado o codigo todo

 

eu tenho uma macro parecida funcionando  na minha planilha " nem uso"

ela é capaz de buscar sequencias

é como um like, mas com a opção de quebra e numero mínimo de caracter encontrado, só não tem a questão de numeros

tipo eu procuro algo mas não sei como se escreve então eu coloco mais ou menos e coloco o minimo de letras iguais

pode colocar uma lista de ignorados,sobre pega do final para o inicio ajuda para buscar ultimas ocorrencias de grandes centenças

 

se eu tiver animo vai ser capaz de pegar sequencias com tamanho definido também

 

"552198980000"

convertNUM(vkk,1,2)-->>55 --->=1ª sequencia de 2 letras

convertNUM(vkk,2,2)-->>21--->=2ª sequencia de 2 letras

convertNUM(vkk,2,4)-->>9898--->=2ª sequencia de 4 letras

convertNUM(vkk,-1,4)-->>0000--->=1ª sequencia de 4 letras de traz para frente

 

nesse caso ele somente reconhece sequencia numericas

mas se trocasse para char poderia retornar qualquer tipo de sequencia "trabalhando a macro"

é mais para estatisticas e buscar em listas inregulares

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!