Tiago Araujo 0 Posted January 22, 2019 Report Share Posted January 22, 2019 Boa tarde Numa questão de exame é pedido o seguinte: "Escreva uma função em C capaz de determinar o número de ocorrências de valores negativos numa sequência de valores inserida pelo utilizador aquando da sua execução e terminada por 0 (zero)." Eu escrevi um código que resulta, mas sem ser com a função... #include <stdio.h> #include <stdlib.h> int main() { float num; int negativos=0; do { printf ("Inserir num :"); scanf("%f", &num); if (num<0) { negativos=negativos++; } } while(num!=0); printf("o n. de ocorrencias de num negativos e = %d", negativos); return 0; } Alguém me pode dar uma sugestão? Obrigado Link to post Share on other sites
pwseo 234 Posted January 23, 2019 Report Share Posted January 23, 2019 O teu código já está escrito numa função; chama-se main. Talvez pretendas colocá-lo noutra função, é isso? Ficamos a aguardar detalhes. PS.: tens alguns detalhes que deviam ser corrigidos, mas não é essa a questão colocada. Link to post Share on other sites
Tiago Araujo 0 Posted January 23, 2019 Author Report Share Posted January 23, 2019 23 horas atrás, pwseo disse: O teu código já está escrito numa função; chama-se main. Talvez pretendas colocá-lo noutra função, é isso? Ficamos a aguardar detalhes. PS.: tens alguns detalhes que deviam ser corrigidos, mas não é essa a questão colocada. Olá Sim eu queria colocar numa outra função... Eu evoluí para isto.... #include <stdio.h> #include <stdlib.h> int quantNegativos (float valor, int negativos) // funcao { if (valor < 0) { negativos ++; } return negativos; } int main() { float num; int neg=0; do { printf ("Inserir num :"); scanf("%f", &num); neg = quantNegativos(num, neg); // chamada da funcao } while(num != 0); printf("O n. de ocorrencias de num negativos e = %d", neg); return 0; } Link to post Share on other sites
pwseo 234 Posted January 23, 2019 Report Share Posted January 23, 2019 O que achas que está bem / mal nesse código que colocaste agora? Link to post Share on other sites
Tiago Araujo 0 Posted January 23, 2019 Author Report Share Posted January 23, 2019 Julgo que agora está bem, dá-me o resultado esperado. Se achas que responde à questão colocada... Link to post Share on other sites
pwseo 234 Posted January 23, 2019 Report Share Posted January 23, 2019 (edited) Muito bem, vamos por partes. Antes de mais, como deves imaginar, nem sempre obter o resultado correcto significa que o que fizemos está bem feito. Estes são os resultados pretendidos: Em 22/01/2019 às 13:26, Tiago Araujo disse: "Escreva uma função em C capaz de determinar o número de ocorrências de valores negativos numa sequência de valores inserida pelo utilizador aquando da sua execução e terminada por 0 (zero)." Ou seja, a tua função precisa de fazer 3 coisas: aceitar uma sequência de valores do utilizador determinar quantos desses valores são negativos parar quando for introduzido o zero O teu código actualmente é este (omiti a main propositadamente): int quantNegativos (float valor, int negativos) // funcao { if (valor < 0) { negativos ++; } return negativos; } Ora... essa função isoladamente é incapaz de aceitar um sequência de valores, o que significa que não consegue determinar quantos deles são negativos. Repara no código: se valor for > 0, então aumentar negativos e devolver esse valor. Ainda por cima, negativos é um parâmetro da função, o que significa que o valor é determinado por factores externos. Esta tua função está a ser aplicada a cada valor introduzido pelo utilizador... quando a própria função deveria ela mesma aceitar input do utilizador. Vamos tentar refazer: #include <stdio.h> int negativos(void) { // Para completares: // 1. Obter sequencia de valores // 2. Contar quantos foram negativos // 3. Devolver a contagem } int main(void) { printf("Introduza números (0 para terminar)\n"); int neg = negativos(); printf("Foram introduzidos %d números negativos.\n", neg); } Proponho que completes a definição de negativos. Logicamente, se é uma função que conta números negativos, deverá devolver como resultado esse valor (daí ter um tipo de dados int). Como não há factores externos que devam influenciar a função, esta não deve ter argumentos (indicado pelo void). Vai colocando as tuas dúvidas. Edited January 23, 2019 by pwseo Correcções menores 1 Report Link to post Share on other sites
Tiago Araujo 0 Posted January 23, 2019 Author Report Share Posted January 23, 2019 Obrigado, gostei da explicação. 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