Jump to content
faio

como fazer uva 997 (Mostrar sequencia)

Recommended Posts

brunoais

O que é que queres fazer?

Que dúvidas tens?

O que é que já tens?

O que é que já tentaste e falhou?

Que erro(s) obténs (ao executar (mm sendo segmentation fault) ou no compilador)?

Se tens segmentation fault usa printf()'s para detectar o sítio aonde o erro ocorre.

...


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
faio

nao consigo percever o que o ploblema me pede isto é o problema nao se encontra na programaçaõ mas sim na matematica e na entrepretação daqueles esquemas pois nao sei como carga de agua aquilo da aqueles valores.

Share this post


Link to post
Share on other sites
KTachyon

Pista:

[a + [b + [c]]]

a
a + b
a + b + b + c
a + b + b + c + b + c + c
a + b + b + c + b + c + c + b + c + c + c
...

[a * [b + [c]]]

a * b
a * (b + c)
a * (b + c + c)
a * (b + c + c + c)
...

[1 + [2 + [1]]]
1 = 1
1+(2) = 3
1+(2)+(2+1) = 6
1+(2)+(2+1)+(2+1+1) = 10
1+(2)+(2+1)+(2+1+1)+(2+1+1+1) = 15
...

[2 * [5 + [- 2]]]
2*5 = 10
10*(5-2) = 30
30*(5-2-2) = 30
30*(5-2-2-2) = -30
-30*(5-2-2-2-2) = 90
...


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
faio

obrigado KTachyon, ja entendi

agora estou com um outro problema, ja esta tudo a funcionar so falta uma coisa, eu introduzo a sequencia, gravo num char e tiro de la os numeros, o meu problema e que se o numero for negativo, nao consigo tirar o menos, ja tentei com o pre prossesador e nao da, sera que me podem ajudar??

obrigado desde ja a todos, pelo tempo disponivilizado para me ajudar

Share this post


Link to post
Share on other sites
xtrm0

E que tal incluires a biblioteca math e fazeres abs(x)? (antes de gravar no char)


<Signature goes here>

Share this post


Link to post
Share on other sites
faio

muito obrigado a todos os que me ajudaram, foram de grande ajuda, ja tenho o programa a funcionar, o unico problema, e quando o coloco no site, da estes erros:

code.cpp: In function 'void vec_inteiros(char*, int*)':

code.cpp:40: error: invalid conversion from 'void*' to 'char*'

code.cpp:71: error: invalid conversion from 'void*' to 'char*'

code.cpp:84: error: invalid conversion from 'void*' to 'char*'

code.cpp: In function 'int main()':

code.cpp:125: error: invalid conversion from 'void*' to 'char*'

code.cpp:141: error: invalid conversion from 'void*' to 'char*'

code.cpp:153: error: invalid conversion from 'void*' to 'int*'

code.cpp:165: error: invalid conversion from 'void*' to 'char*'

code.cpp:133: warning: ignoring return value of 'char* fgets(char*, int, FILE*)', declared with attribute warn_unused_result

será que alguem me pode ajudar?? e que no meu pc da bem, juro que nao entendo o motivo....

Share this post


Link to post
Share on other sites
faio

problema corrigido, o problema era a falta de casts pois, eles correm em maquina windows e nao linux, e elas presisam disso. agora tenho e outro problema, pois, aparece a dizer que a soluçao ainda nao e apretendida....

aqui deixo o codigo, para se alguem me poder ajudar dar uma dica :

 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdlib.h>


void mostrar(int *v, int n)
{
int i;

for(i=0;i<n;i++)
	printf("\n\tV[%d] = %d", i, v[i]);
printf("\n\n");
}
//funçao para contar quantos números inteiros tem a string
int conta_inteiros(char *str)
{
int i=0, cont=0;

while(str[i])
{
	if(str[i]==']')
	{
		cont++;
	}
	i++;
}
cont++;
return cont;
}
//funçao para retirar os caracteres inteiros da string para um vector de inteiros
void vec_inteiros(char *str, int *vec_aux)
{
int i=0, j=0, k=0, aux, num;

//string de inteiros auxiliar 
char *str_aux;

str_aux=(char *) calloc(1, sizeof(char));
if(str_aux==NULL)
{
	puts("\n\tErro na reserva de memória!\n\n");
	exit(1);
}

//enquanto ... str[i]  - corre todas as posições da string
while(str[i])
{
	//se encontrar um espaço numa das posições da string, passa o valor que está entre o espaço e o fim da string para inteiro
	if(str[i]==' ')
	{
		i++;
		while(str[i] != '\0')
		{
			str_aux[j]=str[i];
			i++;
			j++;
		}
		j=0;
		num=atoi(str_aux);
	}
	else 
		//encontra um digito (0...9) ou um sinal de '-' (menos), passa às seguintes instruções, caso contrário passa à próxima posição da string
		if (isdigit(str[i]) || str[i]=='-')
		{
			// encontra digito (0...9) e sinais de '-' (menos) , escreve-os numa string temp. para serem convertidos em int e passarem para um vec. de int
			while (((j<10) && (i<100)) && (isdigit(str[i]) || str[i]=='-'))
			{	
				str_aux[j]=str[i];
				str_aux=(char *) realloc(str_aux, j+1 * sizeof(char));
				j++;
				i++;
			}	
			j=0;

			aux=atoi(str_aux);
			vec_aux[k]=aux;

			//printf("\n\t   vec_aux[k= %d], %d  ", k, vec_aux[k]);
			k++;

			free(str_aux);
			str_aux=(char *) calloc(1, sizeof(char));
			if(str_aux==NULL)
			{
				puts("\n\tErro na reserva de memória!\n\n");
				exit(1);
			}
		}
		else
		{
			i++;
		}
	}
	vec_aux[k]=num;
	free(str_aux);
}
//funçao para retirar os sinais de '*' (multiplicação) e/ou '+' (soma)
void string_sinais(char *str, char *str_sinais)
{
int i=0, j=0;
while(str[i])
{
	if (str[i]=='+' || str[i]=='*')
	{
		str_sinais[j]=str[i];
		printf("\n\tif !! j = %d | i = %d, str = %c\n", j, i, str[i]);
		j++;
		i++;
	}
	i++;
}
}

int main()
{
char *str; //vector de caracteres
char *str_sinais; //vector para armezenar os sinais de '+' e '*'
int *vec; //vector de inteiros
int result[20];
int comp_vec, comp_str, comp_str_sinais, p=1, i=0, t,z=0; // comprimento do vector e comprimento da string

//reservar memória para a string que vai ser pedida ao utilizador	
str=(char *) calloc(100, sizeof(char));
if(str==NULL)
{
	puts("\n\tErro na reserva de memória!\n\n");
	exit(1);
}

//ler a string
fgets(str, 100, stdin);
puts(str);

//guardar o comprimento da string
comp_str=strlen(str);
printf("\n\tcomp_str === %d ", comp_str);

//reajustar a memória para usar apenas a necessária para a string
str=(char *) realloc(str, (comp_str-1) * sizeof(char));
if(str==NULL)
{
	puts("\n\tErro na reserva de memória!\n\n");
	exit(2);
}

//guardar o comprimento necessário para o vector de inteiros
comp_vec=conta_inteiros(str);
printf("\n\tcomp_vec === %d ", comp_vec);

//reservar memória para o vector de inteiros
vec=(int *)malloc(comp_vec*sizeof(int));
if(vec==NULL)
{
	puts("\n\tErro na reserva de memória!\n\n");
	exit(3);
}

//guardar o compimento da string dos sinais
comp_str_sinais = comp_vec/2;
printf("\n\tcomp_str_sinais /2 === %d ", comp_str_sinais);

//reservar memoria para uma string para guardar os sinais
str_sinais=(char *) malloc(comp_str_sinais * sizeof(char));
if(str_sinais==NULL)
{
	puts("\n\tErro na reserva de memória!\n\n");
	exit(4);
}

//retirar os valores inteiros da string e passa-los para o vector
vec_inteiros(str, vec);
printf("\n\tVec[0] = %d", vec[0]);
printf("\n\tVec[1] = %d", vec[1]);
printf("\n\tVec[2] = %d", vec[2]);
printf("\n\tVec[3] = %d\n", vec[3]);

//retirar os sinais '*' ou '+' para saber qual das operações vamos efectuar
string_sinais(str, str_sinais);
t=vec[comp_vec-1];
while(i<t)
{	
	if (str_sinais[0]=='+')
	{
		if(i==0)
			result[i]=vec[i];
		if(i!=0)
		{
			result[i]=result[i-1]+vec[1];
			z++;
		}
		if (((comp_vec-1)>2) && (z>1) && (i!=0) )
		{
			result[i]=result[i]+vec[2]*p;
			p++;
		}
		i++;
	}
	else if (str_sinais[0]=='*')
	{
		if(i==0)
			result[i]=vec[i]*vec[i+1];
		if((i!=0) && ((comp_vec-1)>2))
		{
			result[i]=((vec[2]*p)+vec[1])*result[i-1];
			p++;
		}
		else if (i!=0)
			result[i]=result[i-1]*vec[1];
		i++;
	}

}
for(i=0; i<t; i++)
	printf("%d \n", result[i]);
//libertar memória
free(str);
free(vec);

return 0;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.