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

Red_Beret

[Resolvido] Strings + Função recursiva. Help

7 mensagens neste tópico

Ppl, alguem me ajuda a fazer este exercicio:

capturaecra1qh.png

De momento o codigo esta assim:

#include <stdio.h>


char caractere(char *a, int b, int c){
char d[50];
if(b<c){
	d[c]=a[c];
	caractere(a,b,c-1);
}
else
	return *d;
}

void main(){
char a[50];
int b,c;
printf("Introduza o texto\n");
scanf("%s",a);
printf("Introduza a primeira posição\n");
scanf("%d", &b);
printf("Introduza a segunda posição\n");
scanf("%d", &c);
puts(a);
if(b>c)
	printf("%s\n", caractere(a,c,b));
else
	printf("%s\n", caractere(a,b,c));
}

Escusado será dizer que este código está todo mal. Não pesco nada de strings :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Biba, vê lá se era isto que querias :P

#include <stdio.h>

int caractere(char *a, int sup, int inf)
{
if(inf<=sup)
{
	char b;
	b=a[inf];
	printf("%c",b);
	inf++;
	caractere(a,sup,inf);
}

else return 1;	

}

int main()
{
  char a[50];
  int inf,sup;
  printf("Introduza o texto\n");
  scanf("%s",a);
  printf("Introduza a primeira posicao\n");
  scanf("%d", &inf);
  printf("Introduza a segunda posicao\n");
  scanf("%d", ⊃);

  if(sup>inf)
     caractere(a,sup,inf);
  else
     caractere(a,inf,sup);


  return 0;
  }

Alterei o nome das variaveis para ser mais perceptivel :cheesygrin:

É recursiva pois a funçao chama-se a si mesma .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

if(inf<=sup)
{
	char b;
	b=a[inf];
	printf("%c",b);
	inf++;
	caractere(a,sup,inf);

não percebi esta parte, porque é que no fim poes de novo caractere(a,sup,inf)

edit : serve para voltar a xamar a funçao criando tipo um ciclo while certo ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exacto.

Anyway, isso serve só mesmo para se aprender a usar recursividade, porque usar recursividade aí é praticamente inutil..

Como eu resolveria (só por curiosidade)

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

char * meio(char * s,int inf,int sup) {
     int i;
     char * aux;
     if ((aux=(char *) malloc(sup-inf+1))==NULL)
        return aux;
     for (i=0;i<sup-inf+1;i++) aux[i]=s[inf+i-1];
     aux[i]='\0';
     return aux;
}

int main() {
    char a[50];
    int inf,sup;
    printf("Introduza o texto\n");
    scanf("%s",a);
    printf("Introduza a primeira posicao\n");
    scanf("%d", &inf);
    printf("Introduza a segunda posicao\n");
    scanf("%d", ⊃);	
    printf("%s\n",inf <= sup ? meio(a,inf,sup) : meio(a,sup,inf));
    system("pause");
    return 0;
}

Com o malloc cria-se uma nova string. Eu sei que o que foi pedido era simplesmente mostrar os caracteres entre as duas posições (e para isso um simples for chegava) mas para os mais curiosos aqui está a forma de criar uma nova string contendo os caracteres intermedios.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esse teu code consideras "advanced" ?

é que eu não percebi nem metade :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A primeira duvida que pode existir é no operador ternário.

printf("%s\n",inf <= sup ? meio(a,inf,sup) : meio(a,sup,inf));

Vai-se imprimir a string do meio, mas antes disso temos que verificar se a primeira posição é menor que a segunda ou não.

isto pode ser traduzido +- desta forma

if (inf <= sup) meio(a,inf,sup)

else meio(a,sup,inf)

Com uma diferença. Enquando o if permite executar instruções, o operador ternário basicamente faz return a esse valor.

A segunda (provavelmente a maior) está na criação da string em si.

É preciso compreender Apontadores e Memória Dinâmica.

Uma pesquisa no google irá demonstrar facilmente o que foi feito.

Sorry mas nao me sinto com paciencia para explicar isto, foi feito so para me entreter e não para ser explicado :/

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