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

Dar3_D3vil

[Resolvido] Exercicio!!!

14 mensagens neste tópico

É 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;

}	

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

/*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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epah...

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

LOL

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora