beuleal Posted November 18, 2011 Report Share Posted November 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"); } Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 19, 2011 Report Share Posted November 19, 2011 Você declaroufunc ficha[n]; quando o correto seria struct func ficha[n];Ainda, não use variáveis 'globais'.Só olhei isso. Quote Link to comment Share on other sites More sharing options...
0 beuleal Posted November 19, 2011 Author Report Share Posted November 19, 2011 mesmo assim n funciona... o objetivo desse cod é verificar qual o maior salario. Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 19, 2011 Report Share Posted November 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 Quote Link to comment Share on other sites More sharing options...
0 beuleal Posted November 19, 2011 Author Report Share Posted November 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 Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 19, 2011 Report Share Posted November 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. Quote Link to comment Share on other sites More sharing options...
0 beuleal Posted November 19, 2011 Author Report Share Posted November 19, 2011 mas como você chama?Não precisa passar parametros? Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 19, 2011 Report Share Posted November 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); Quote Link to comment Share on other sites More sharing options...
0 beuleal Posted November 19, 2011 Author Report Share Posted November 19, 2011 hmmm issso mesmo bro!vlw! Quote Link to comment Share on other sites More sharing options...
Question
beuleal
Olá amigos, eu estou querendo varrer uma struct por recursividade ao invés de loop com for
onde estou errando:
Link to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.