Red_Beret 0 Posted April 14, 2006 Report Share Posted April 14, 2006 Ppl, alguem me ajuda a fazer este exercicio: http://img451.imageshack.us/img451/6056/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 Link to post Share on other sites
Marino 0 Posted April 14, 2006 Report Share Posted April 14, 2006 Biba, vê lá se era isto que querias #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 É recursiva pois a funçao chama-se a si mesma . Link to post Share on other sites
Red_Beret 0 Posted April 14, 2006 Author Report Share Posted April 14, 2006 tks. era isso mesmo. Link to post Share on other sites
Gurzi 1 Posted April 16, 2006 Report Share Posted April 16, 2006 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 ? Link to post Share on other sites
Warrior 68 Posted April 16, 2006 Report Share Posted April 16, 2006 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. Link to post Share on other sites
Gurzi 1 Posted April 16, 2006 Report Share Posted April 16, 2006 esse teu code consideras "advanced" ? é que eu não percebi nem metade Link to post Share on other sites
Warrior 68 Posted April 16, 2006 Report Share Posted April 16, 2006 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 :/ Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now