beuleal Postado Novembro 18, 2011 Denunciar Share Postado Novembro 18, 2011 Olá amigos, eu estou querendo varrer uma struct por recursividade ao invés de loop com foronde estou errando:struct func { char nome[20]; int rf; char cargo[20]; float salario; }; int sal_maior=0,sal_menor=999999999; int rf_maior,rf_menor; int recur(int j,int n){ func ficha[n]; if (j == n){ return 0; } printf("\n%f",ficha[j].salario); return recur(j+1,n); } int main(){ int i=0,n; printf("Quantos Funcionarios: "); scanf("%d",&n); func ficha[n]; for (i=0;i<n;i++){ printf("Nome: "); fflush(stdin); gets(ficha[i].nome); printf("Rf: "); scanf("%d",&ficha[i].rf); printf("Cargo: "); fflush(stdin); gets(ficha[i].cargo); printf("Salario: "); scanf("%f",&ficha[i].salario); } recur(0,n); system("pause"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Novembro 19, 2011 Denunciar Share Postado Novembro 19, 2011 Você declaroufunc ficha[n]; quando o correto seria struct func ficha[n];Ainda, não use variáveis 'globais'.Só olhei isso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 beuleal Postado Novembro 19, 2011 Autor Denunciar Share Postado Novembro 19, 2011 mesmo assim n funciona... o objetivo desse cod é verificar qual o maior salario. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Novembro 19, 2011 Denunciar Share Postado Novembro 19, 2011 Fiz um aqui com esse protótipovoid recur(struct func ficha[], int i, int n, float *maior) Onde 'ficha[]' é o vetor de fichas, 'i' é a posição atual do vetor a ser analisada, 'n' é a ultima posição do vetor + 1 (ou seja, o tamanho dele), e *maior é um ponteiro para uma variável que irá possuir o maior salário (deve ser inicializada com zero na função principal). Funções recursivas 'void' são mais fáceis de 'visualizar'. para a chamada da função, usei assim recur(ficha, 0, n, &maior);E na função, verifica-se se 'i' é menor que 'n'. Se não for, continua com o código. compara-se 'maior' com o salário da atual ficha. o valor da ficha for maior, atribui-se á 'maior'. Então chama-se a função novamente, enviando os novos parâmetros: incrementa-se 'i' e 'maior Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 beuleal Postado Novembro 19, 2011 Autor Denunciar Share Postado Novembro 19, 2011 Legal! Isso mesmo, mas quando eu for chamar a funcao de novo eu faço assim:return recur (ficha,i+1, n, &maior);Ta certo?Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Novembro 19, 2011 Denunciar Share Postado Novembro 19, 2011 Não, caso faça uma função 'void', a mesma não retorna valor algum.Eu simplesmente chamei ela mesma após checar se o salário da estrutura atual era o maior. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 beuleal Postado Novembro 19, 2011 Autor Denunciar Share Postado Novembro 19, 2011 mas como você chama?Não precisa passar parametros? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Novembro 19, 2011 Denunciar Share Postado Novembro 19, 2011 Precisa sim... já postei o protótipo num post acima.Eu chamo assimrecur(ficha, 0, n, &maior); na função principal. Já dentro da função recursiva, chamo assim recur(ficha, ++i, n, maior); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 beuleal Postado Novembro 19, 2011 Autor Denunciar Share Postado Novembro 19, 2011 hmmm issso mesmo bro!vlw! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
beuleal
Olá amigos, eu estou querendo varrer uma struct por recursividade ao invés de loop com for
onde estou errando:
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.