Red_Beret Posted April 14, 2006 at 04:34 PM Report Share #22143 Posted April 14, 2006 at 04:34 PM 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 comment Share on other sites More sharing options...
Marino Posted April 14, 2006 at 06:02 PM Report Share #22146 Posted April 14, 2006 at 06:02 PM 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 comment Share on other sites More sharing options...
Red_Beret Posted April 14, 2006 at 06:25 PM Author Report Share #22148 Posted April 14, 2006 at 06:25 PM tks. era isso mesmo. Link to comment Share on other sites More sharing options...
Gurzi Posted April 16, 2006 at 05:12 PM Report Share #22402 Posted April 16, 2006 at 05:12 PM 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 comment Share on other sites More sharing options...
Warrior Posted April 16, 2006 at 08:27 PM Report Share #22455 Posted April 16, 2006 at 08:27 PM 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 comment Share on other sites More sharing options...
Gurzi Posted April 16, 2006 at 08:29 PM Report Share #22457 Posted April 16, 2006 at 08:29 PM esse teu code consideras "advanced" ? é que eu não percebi nem metade 🙂 Link to comment Share on other sites More sharing options...
Warrior Posted April 16, 2006 at 10:17 PM Report Share #22483 Posted April 16, 2006 at 10:17 PM 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 comment Share on other sites More sharing options...
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