dramos21 Posted December 19, 2012 at 06:06 PM Report #487824 Posted December 19, 2012 at 06:06 PM Boas pessoal, Eu criei uma função que me devolvesse o valor -1 0 ou 1 conforme uma condição que eu impus. fiz um ciclo for e percorri um vector para ver se imprimia -1 0 ou 1. só que quando eu faço return do -1 0 ou 1 dentro do for e dentro dos if que utilizei para as condicoes, a funcao no fim diz-me que me falta o return, porque eu apenas meti return dentro do for.
HappyHippyHippo Posted December 19, 2012 at 06:15 PM Report #487825 Posted December 19, 2012 at 06:15 PM apresenta o código IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dramos21 Posted December 19, 2012 at 06:17 PM Author Report #487826 Posted December 19, 2012 at 06:17 PM (edited) int comparaZero( double x[]) { int i; for(i=0; i <= DIMX; i++){ if(x[i]<DELTA && x[i]>-DELTA){ return 0; } if(x[i] >= DELTA){ return 1; } if(x[i] <= -DELTA){ return -1; } } } Edited December 19, 2012 at 06:17 PM by pmg Falta LP (e indentacao que nao alterei)
pmg Posted December 19, 2012 at 06:21 PM Report #487827 Posted December 19, 2012 at 06:21 PM O teu compilador esta a avisar-te que pode haver situacoes que o codigo chega ao fim da funcao sem passar por um return. Para o teu programa ser correcto tambem nessas situacoes, precisa de um return fora do ciclo: int comparaZero(double *x) { for (...) { } return 0; /* ESTE RETURN PODE SER NECESSARIO */ } What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 06:22 PM Author Report #487828 Posted December 19, 2012 at 06:22 PM mas esse return 0 depois do for nao vai fazer com que os outros return que meti em cada if sejam esquecidos?
pmg Posted December 19, 2012 at 06:36 PM Report #487832 Posted December 19, 2012 at 06:36 PM mas esse return 0 depois do for nao vai fazer com que os outros return que meti em cada if sejam esquecidos? Nao. Se o programa executar um return anterior sai da funcao nesse momento e, claro, nao executa mais nenhuma instrucao dessa funcao. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 06:37 PM Author Report #487833 Posted December 19, 2012 at 06:37 PM ah ok, Obrigado.
HappyHippyHippo Posted December 19, 2012 at 06:40 PM Report #487834 Posted December 19, 2012 at 06:40 PM int comparaZero( double x[]) { int i; for(i=0; i <= DIMX; i++) { if(x[i]<DELTA && x[i]>-DELTA){ return 0; } if(x[i] >= DELTA){ return 1; } if(x[i] <= -DELTA){ return -1; } } // tu sabes que x[i] cairá sempre dentro das comparações apresentadas // é obvio que x ou está em ]-inf, -DELTA] ou em ]-DELTA, DELTA[ ou em [DELTA, inf[ // mas o compilador não devido à maneira como os ifs estão encadiados // logo necessitas de um return aqui } mas o teu código tem um erro muito pior. imagina este caso: int comparaZero( double x[]); #define DELTA 2 #define DIMX 3 int main() { int x[DIMX] = {1, 2, 3}; comparaZero(x); return 0; } int comparaZero( double x[]) { int i; // v- menor !!! for(i=0; i < DIMX; i++) // ok, 0 é menor que DIMX { if(x[i]<DELTA && x[i]>-DELTA){ // ok, x[i] == 1 está dentro de ]-DELTA, DELTA[ == ]-2, 2[ return 0; // return ... e então os outros elementos do array ?????? // ... } } 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dramos21 Posted December 19, 2012 at 06:48 PM Author Report #487836 Posted December 19, 2012 at 06:48 PM ou seja, o que tu estás a dizer é que a função termina sem executar o for completo? a função retorna o valor para o meu primeiro x e é como se a função estivesse finalizada?
pmg Posted December 19, 2012 at 06:58 PM Report #487840 Posted December 19, 2012 at 06:58 PM E tens ainda outro problema. Supondo que o array foi definido como tendo DIMX elementos, estas a aceder a elementos inexistentes do array. Um array definido com 5 elementos pode ser indexado pelos indices 0, 1, 2, 3, e 4. O teu ciclo for, para o exemplo de 5 elementos, iria passar pelos indices 0, 1, 2, 3, 4, e 5. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 07:02 PM Author Report #487842 Posted December 19, 2012 at 07:02 PM Tens razão. já mudei isso, agora o resto é que nao estou a ver como fazer, eu tenho sempre de ter o return ali acho eu, e se atinge o return acaba a funcao e nao me calcula nada para os outros elementos do array
pmg Posted December 19, 2012 at 07:03 PM Report #487843 Posted December 19, 2012 at 07:03 PM Sugestao: faz uma outra funcao que conte quantos elementos sao "iguais" a zero :-) What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 07:08 PM Author Report #487845 Posted December 19, 2012 at 07:08 PM entao e para aqueles que quero que seja 1 e -1? o intuito disto é eu fazer um grafico em que apresente os valores de um polinomio nos pontos 1 a 20, e em cada ponto dizer se o valor do polinomio é positivo(1) nulo(0) ou negativo(-1). mas por exemplo eu ao fazer essa funcao nao me vou deparar com o mesmo problema? visto que eu quero avaliar cada ponto do vector
pmg Posted December 19, 2012 at 07:12 PM Report #487848 Posted December 19, 2012 at 07:12 PM Ah! Sorry: a minha sugestao nao serve :/ Em vez de returnares, mete o resultado noutro array com o sinal do valor ... depois usas este outro array para apresentar o resultado. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 07:22 PM Author Report #487850 Posted December 19, 2012 at 07:22 PM mas depois, eu tenho que fazer o gráfico com os pontos de 1 a 20, e imagina que eu tenho um array com os pontos 1 7 e 20 negativos(-1), como é que eu vou conseguir ordenar o meu gráfico de modo a me apresentar os valores correctos? eu posso fazer é em vez de a função ser double x[] ser apenas double x. para cada ponto avalia e aí já consigo guardar. o problema agora é que eu quero os pontos de 1 a 20 sem ter de estar a introduzir 1 a 1 :/ sendo cada valor double obrigatoriamente. nao da para fazer um for
pmg Posted December 19, 2012 at 07:37 PM Report #487854 Posted December 19, 2012 at 07:37 PM (edited) int resultado[WHATEVER]; double value[WHATEVER]; for (int i = 0; i < WHATEVER; i++) value[i] = 5*i*i*i - 42*i*i + 5; /* 5i^3 - 42i^2 + 5 */ /* agora precisamos dos resultados */ /* valor a valor */ for (int i = 0; i < WHATEVER; i++) resultado[i] = comparaZero(valor[i]); /* tudo duma vez */ comparaZeroTotal(WHATEVER, valor, resultado); E a funcao comparaZeroTotal() ia ver os valores ao array "valor" e meter o resultado no array "resultado" Edited December 19, 2012 at 07:39 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 07:48 PM Author Report #487857 Posted December 19, 2012 at 07:48 PM certo, entendi o código, o comparaZero( valor ) nao tinha que ser feito da mesma maneira de á bocado dando aquele erro? valor é um array com Whatever tamanho, e na funcao para aceder a cada valor tinha de ser com um ciclo, ou meteste doutra maneira ali e eu nao percebi? eu percebo que tentas que ele va buscar sempre o valor do comparaZero para cada posição, mas na função tambem temos de chamar o vector, nao da para chamar um a um mesmo com um ciclo na main nao e?
pmg Posted December 19, 2012 at 08:01 PM Report #487861 Posted December 19, 2012 at 08:01 PM o comparaZero( valor ) nao tinha que ser feito da mesma maneira de á bocado dando aquele erro? Sim, mais ou menos. Nao seria preciso fazer um ciclo dentro da funcao (o ciclo esta ca fora, na parte do programa que chama a funcao WHATEVER vezes). valor é um array com Whatever tamanho, e na funcao para aceder a cada valor tinha de ser com um ciclo, ou meteste doutra maneira ali e eu nao percebi? eu percebo que tentas que ele va buscar sempre o valor do comparaZero para cada posição, mas na função tambem temos de chamar o vector, nao da para chamar um a um mesmo com um ciclo na main nao e? Nao percebi. Mas tens sempre de ter um (e apenas um) ciclo for. Ou o tens na funcao main(), ou o tens na funcao comparaZero(). Se tens o ciclo for na funcao main(), a funcao recebe um valor e devolve um resultado; se tens o ciclo na funcao comparaZero(), a funcao deve receber um tamanho, um array de input (em forma de ponteiro) e um array de output (em forma de ponteiro) nao necessariamente nesta ordem. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
dramos21 Posted December 19, 2012 at 08:05 PM Author Report #487862 Posted December 19, 2012 at 08:05 PM o que me estás a dizer é que : int comparaZero( double x ) pode ser utlizado assim desta maneira sendo x um valor e nao um array se eu na main fizer um for em que nesse for chame a funcao com comparaZero( valor ) é isso? porque neste caso valor vai ser tambem um valor e nao um array de elementos certo?
pmg Posted December 19, 2012 at 08:15 PM Report #487865 Posted December 19, 2012 at 08:15 PM o que me estás a dizer é que : int comparaZero( double x ) pode ser utlizado assim desta maneira sendo x um valor e nao um array se eu na main fizer um for em que nesse for chame a funcao com comparaZero( valor ) é isso? porque neste caso valor vai ser tambem um valor e nao um array de elementos certo? Correcto. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
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