thinkabout Posted December 2, 2012 at 09:23 PM Report #485477 Posted December 2, 2012 at 09:23 PM (edited) Boas Pessoal, cá estou eu a pedir a vossa ajuda novamente. Desta vez ainda não percebi bem por onde começar o exercício pensei em usar vectores mas ainda não cheguei a essa parte da matéria. Desenvolva um programa que determine qual o máximo de uma sequência de números inteiros não negativos introduzidos pelo utilizador (utilize o valor zero para assinalar o fim da sequência). Além de indicar o número máximo, o programa deve especificar em que posição da sequência o máximo apareceu e quantos números tinha a sequência. Exemplo: para a sequência de inteiros 2 5 3 6 8 1 2 0 O programa deverá escrever: Máximo: 8 Surgiu na posição 5 Tamanho da sequência: 7 Edited December 5, 2012 at 12:36 AM by thinkabout
HappyHippyHippo Posted December 2, 2012 at 09:37 PM Report #485480 Posted December 2, 2012 at 09:37 PM elementos do programa - ciclo de leitura de números - variável com o valor máximo - variável com o valor do índice do valor máximo - variável com o número total de elemento inseridos conclusão : já disse demais ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
petvetbr Posted December 2, 2012 at 09:38 PM Report #485481 Posted December 2, 2012 at 09:38 PM A forma como eu faria isto seria a seguinte: 1)Inicie o programa e crie 3 variaveis numéricas inteiras, 1 para o tamanho da sequencia, uma para o maior numero, uma para a posicao dele na sequencia 2)Obtenha a lista de números 3)Percorra a lista em um laço (ex: for) 4)em cada iteração, verifique se o número atual é o maior até entao, se for guarde o valor e a posicao dele nas respectivas variáveis, e aumente a contagem de itens em +1 5)repita até o final da sequencia. Ao terminar você terá armazenado, todos os dados que precisa. Fernando Lage Bastos - MCP/MCTS/MCPD
thoga31 Posted December 2, 2012 at 09:50 PM Report #485485 Posted December 2, 2012 at 09:50 PM 2)Obtenha a lista de números 3)Percorra a lista em um laço (ex: for) Desnecessário para este exercício. Knowledge is free!
petvetbr Posted December 2, 2012 at 10:01 PM Report #485486 Posted December 2, 2012 at 10:01 PM sim, é verdade, a comparacao e contagem pode ser feita no momento da introdução dos dados. Fernando Lage Bastos - MCP/MCTS/MCPD
thoga31 Posted December 2, 2012 at 10:03 PM Report #485489 Posted December 2, 2012 at 10:03 PM Credo, o @HHH tem razão: já dissemos tudo e mais alguma coisa... vendo bem, estão já aqui dois métodos semelhantes mas diferentes em termos de optimização 😄 Knowledge is free!
thinkabout Posted December 3, 2012 at 10:09 PM Author Report #485618 Posted December 3, 2012 at 10:09 PM (edited) Estou a fazer asneira com no incremento na posição, não consigo perceber é onde. 😞 O tamanho da sequencia e o resultado do maior esses batem certo. Também já tentei só com 3 variáveis int main() { int tamanho, maior, numero,p; maior=-1; tamanho=-1; numero=-1; p=0; while (numero != 0 ) { puts("Qual e o numero ? (0 para terminar)"); scanf("%d" , &numero); tamanho++; if (numero > maior && p++ ) { maior=numero; } } printf("O maior numero e %d surgiu na posicao %d e o tamanho da sequencia e %d \n" , maior, p, tamanho); return 0; } Resultados do output 2 5 3 6 8 1 2 0 -> O maior está na posição 4 (errado) 4-2-3 0 -> O maior está na posição 3 (errado) 8 1 2 3 4 5 6 7 9 0 -> O maior está na posição 9 (certo) 5 8 2 9 1 3 0 -> -> O maior está na posição 4 (errado) Edited December 3, 2012 at 10:11 PM by thinkabout
thoga31 Posted December 3, 2012 at 10:14 PM Report #485619 Posted December 3, 2012 at 10:14 PM Se lesses bem e interpretasses o teu código, saberias que o caso em que te bateu certo só assim o é porque o input que fizeste gere essa coincidência. Onde estás a atribuir a p a posição do maior? Knowledge is free!
thinkabout Posted December 3, 2012 at 10:19 PM Author Report #485622 Posted December 3, 2012 at 10:19 PM (edited) O maior está na variável maior o P estou a usar para achar a posição que ele se encontra. Já tive isso a dar certo praticamente em todos os testes que fazia, mas entretanto mudei o código porque quando testava o exemplo da-me errado nesse. Edited December 3, 2012 at 10:22 PM by thinkabout
thoga31 Posted December 3, 2012 at 10:27 PM Report #485625 Posted December 3, 2012 at 10:27 PM Estás a determinar bem quantos números são, estás a determinar bem qual o maior, não estás a determinar bem a posição do maior. Aquele p++ não faz nada de jeito - só te diz, por acaso, quantas vezes o programa teve de actualizar a variável maior. Aposto que nem te apercebeste desse pormenor interessante, se não já tinhas percebido aqueles outputs e aqueles valores. Knowledge is free!
thinkabout Posted December 3, 2012 at 10:35 PM Author Report #485627 Posted December 3, 2012 at 10:35 PM (edited) Eu percebi que ele tá ali mal ...já andei é com ele em dez sítios, e ainda não acertei com ele. Não deveria ter o posto ali no código sabendo que ele estava mal. Vou lutar com ele mais um bocado. Edited December 3, 2012 at 10:36 PM by thinkabout
thoga31 Posted December 3, 2012 at 10:37 PM Report #485629 Posted December 3, 2012 at 10:37 PM Mas a questão é que, independentemente de onde o metas, p++ não te vai fazer aquilo que pretendes, que é guardar a "posição" do maior. Knowledge is free!
HappyHippyHippo Posted December 3, 2012 at 11:04 PM Report #485636 Posted December 3, 2012 at 11:04 PM e que tal, em vez de andar com ele de traz para frente, de cima para baixo e tentar até de pernas para o ar, pensares no que pretendes ? que valor deverá ter p em cada caso e como deverias conseguir esse resultado. programação não é jogar dardos : "atirar para o meio e rezar para que acertes, se bem que o meio é só 50 pontos, e o triplo 20 são 60" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 3, 2012 at 11:15 PM Author Report #485639 Posted December 3, 2012 at 11:15 PM (edited) Penso que está. 🙂 int main() { int tamanho, maior, numero,p; maior=-1; tamanho=-1; numero=-1; p=0; while (numero != 0 ) { puts("Qual e o numero ? (0 para terminar)"); scanf("%d" , &numero); tamanho++; if (numero >= maior ) { maior=numero; p=tamanho; } } p++; printf("O maior numero e %d surgiu na posicao %d e o tamanho da sequencia e %d \n" , maior, p, tamanho); return 0; } e que tal, em vez de andar com ele de traz para frente, de cima para baixo e tentar até de pernas para o ar, pensares no que pretendes ? que valor deverá ter p em cada caso e como deverias conseguir esse resultado. programação não é jogar dardos : "atirar para o meio e rezar para que acertes, se bem que o meio é só 50 pontos, e o triplo 20 são 60" Concordo contigo, estava a ver o problema de forma errada. Edited December 3, 2012 at 11:23 PM by thinkabout
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