Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Dar3_D3vil

[Resolvido] Exercicio!!!

Recommended Posts

Dar3_D3vil

É assim... eu resolvi este prog so k chega a primeira vez a letra deseja imprima a posiçao do vector e depois acaba ai. Alguem sabe kal é o erro??

Escreva uma função cuja finalidade consiste em determinar o número de vezes que um carácter ocorre numa string. A função recebe uma string (char s[]), o carácter (char c) a procurar, e um vector de inteiros para guardar as posições do vector s que contenham cópias do carácter que se pretende contabilizar. Na função não são utilizados apontadores  O protótipo da função é

int conta_char(char c, char s[], int pos[], int dimpos);.

Aki fica o meu codigo:

/*prog 5*/

#include <stdio.h>
#define DIMAX 100

int conta_char(char c, char s[], int pos[], int dimpos){
int i=0;

printf("%c\n%s\n%d\n",c,s,dimpos);

for(i=0;i!=DIMAX;i++){
	while (s[i] != c){
	i++;
}
	if(s[i] == c){
		printf("pos[%d] \n",i);
		dimpos++;
		i++;
		return;
	}

}
return dimpos;		
}




int main(void){
char s[DIMAX];
char c;
int dimpos=0;
int pos[DIMAX];

printf("Introduza uma frase\n");
fgets(s, DIMAX, stdin);

printf("Introduza o caracter que deseja contar:");
scanf("%c",&c);

conta_char(c,s,pos,dimpos);
printf("O caracter %c foi escrito %d vezes.\n",c,dimpos);
return 0;

}	

Share this post


Link to post
Share on other sites
Bruno

Eu n percebi bem qual é o teu erro (ou questão)... mas um q se nota logo é q a tua função conta_char está a retornar um inteiro e tu n estás a guardá-lo...

Tenta assim:

dimpos = conta_char(c,s,pos,dimpos);
printf("O caracter %c foi escrito %d vezes.\n",c,dimpos); 

Não sei se era apenas esse o erro! :P

Se n solucionar diz q eu irei tentar ver com mais atenção! :P

Share this post


Link to post
Share on other sites
jarsantos

Para além do erro que o Bruno disse tens mais alguns.

for(i=0;i!=DIMAX;i++){
     while (s[i] != c){
     i++;
  }

Não faz sentido teres um while depois de um for e no while nao testas se o i é menor que DIMAX logo mais cedo ou mais tarde vai dar segmentation fault.

Tb não faz sentido teres o if seguinte pk para ele chegar a correr o if é porque detectou o caracter que querias.

e quando fazes i++ estas a saltar um caracter.

Não percebo para que precisas do array pos se nao o usas para nada

Share this post


Link to post
Share on other sites
Dar3_D3vil

Continua a n dar :S

Eu pus akele ultimo prinft dentro da conta_char pa na main so ter k chamar a conta char, mas n funcou na mm.

/*prog 5*/

#include <stdio.h>
#define DIMAX 100

int conta_char(char c, char s[], int pos[], int dimpos){
int i=0;

for(i=0;i!=DIMAX;i++){
	while (s[i] != c){
	i++;
}
	if(s[i] == c){
		printf("pos[%d] \n",i);
		dimpos++;
		i++;
		return 0;
	}

}
printf("O caracter %c foi escrito %d vezes.\n",c,dimpos);	
}




int main(void){
char s[DIMAX];
char c;
int dimpos=0;
int pos[DIMAX];

printf("Introduza uma frase\n");
fgets(s, DIMAX, stdin);

printf("Introduza o caracter que deseja contar:");
scanf("%c",&c);

conta_char(c,s,pos,dimpos);

return 0;

}	

se alguem souber qual é o erro, avisem sff

Obrigado

Share this post


Link to post
Share on other sites
Dar3_D3vil
Para além do erro que o Bruno disse tens mais alguns.

for(i=0;i!=DIMAX;i++){
     while (s[i] != c){
     i++;
  }

Não faz sentido teres um while depois de um for e no while nao testas se o i é menor que DIMAX logo mais cedo ou mais tarde vai dar segmentation fault.

Tb não faz sentido teres o if seguinte pk para ele chegar a correr o if é porque detectou o caracter que querias.

e quando fazes i++ estas a saltar um caracter.

Não percebo para que precisas do array pos se nao o usas para nada

jarsantos... tao como é k deve ficar????

Share this post


Link to post
Share on other sites
Bruno

Hmmm, o while penso q podes remover por completo! (eu agora n posso testar)

Tenta remover o while e no if que tens a seguir fazes return porquê? Se queres contar todos devias tirar a linha do return e colocá-la onde tens o printf (no final dessa função) (coloca "return dimpos;" após o printf)

Share this post


Link to post
Share on other sites
jarsantos

/*prog 5*/

#include <stdio.h>
#define DIMAX 100

int pos[DIMAX];

int conta_char(char c, char s[]){
  int i;
  int j=0;
  int dimpos=0;

  for(i=0;i<DIMAX && s[i]!='\n';i++){
     if(s[i] == c){
        pos[j++]=i;
        dimpos++;
     }
  }
  return dimpos;      
}





int main(void){
  char s[DIMAX];
  char c;
  int dimpos,i;

  printf("Introduza uma frase\n");
  fgets(s, DIMAX, stdin);

  printf("Introduza o caracter que deseja contar: ");
  scanf("%c",&c);

  dimpos = conta_char(c,s);
  printf("O caracter '%c' foi escrito %d vezes nas seguintes posições: ",c,dimpos);
  for(i=0;i<dimpos;i++)
  	printf("%d ",pos[i]);
  printf("\n");
  return 0;   
}

ve lá se era isto que querias.

Share this post


Link to post
Share on other sites
Dar3_D3vil

Epah, isso faz o objectivo...

mas assim tb eu conseguia.

O exercicio é suposto a funçao conta_char ter o seguinte prototipo:

int conta_char(char c, char s[], int pos[], int dimpos);

E aki é k esta o prob.

;)

Share this post


Link to post
Share on other sites
jarsantos

esse cabeçalho não tem lógica porque precisas do array pos e do int dimpos no main e nao podes fazer o return de duas variaveis.

O que podes fazer é meter o valor do dimpos na posiçoa pos[0] e nas outras posiçoes guardar as posições em que o caracter foi escrito e nesse caso deixa de fazer sentido a variavel dimpos.

Share this post


Link to post
Share on other sites
Dar3_D3vil

epah...

eu sei k é estupido, so k agr vai dizer ixo ao meu stor das praticas de programaçao

LOL

Share this post


Link to post
Share on other sites
jarsantos

Não percebo qual é a lógica que o teu prof quer, é o melhor que te consigo fazer com os dados que dás.

Share this post


Link to post
Share on other sites
Dar3_D3vil

pois, eu tb n consegui e tenho os mm dados k tu, pk kando eu abri este topico pus o enunciado e o codigo k eu fiz.

Share this post


Link to post
Share on other sites
Bruno

Mas o problema é so mm o cabeçalho da outra função?

Se sim basta isto:

/*prog 5*/

#include <stdio.h>
#define DIMAX 100

int conta_char(char c, char s[], int pos[], int dimpos){
  int i;
  int j=0;

  for(i=0;i<DIMAX && s[i]!='\n';i++){
     if(s[i] == c){
        pos[j++]=i;
        dimpos++;
     }
  }
  return dimpos;     
}

int main(void){
  char s[DIMAX];
  char c;
  int dimpos=0,i;
  int pos[DIMAX];

  printf("Introduza uma frase\n");
  fgets(s, DIMAX, stdin);

  printf("Introduza o caracter que deseja contar: ");
  scanf("%c",&c);

  dimpos = conta_char(c,s,pos,dimpos);
  printf("O caracter '%c' foi escrito %d vezes nas seguintes posições: ",c,dimpos);
  for(i=0;i<dimpos;i++)
     printf("%d ",pos[i]);
  printf("\n");
  return 0;   
}

Não?

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
Sign in to follow this  

×

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.