Programação
2 participantes
Página 1 de 1
Programação
Você foi contratado para escrever um programa capaz de adivinhar um valor inteiro fornecido em um intervalo conhecido no menor número possível de tentativas. Para tal, escreva um programa que trate dos seguintes quesitos:
1. leia dois números representando o menor e o maior valor desse limite.
2. verifique se os limites estão corretos: menor e maior valores nessa ordem e trate de correções necessárias.
3. leia um valor fornecido limitado entre esses dois números mas que não corresponda a nenhum dos valores limites;
4. verifique se o valor fornecido é realmente válido (ou seja, esteja contido no intervalo);
Calcule a metade do intervalo e compare com o valor que deve ser adivinhado. A seguir refaça os limites usando a metade calculada como novo limite e, sempre trabalhando com as metades dos novos intervalos, procure chegar ao valor fornecido.
Seu programa deverá imprimir os resultados dos cálculos de cada tentativa contendo o seu número e o valor calculado. Ao final do cálculo o programa deverá imprimir o intervalo fornecido, o valor a ser adivinhado e o valor calculado junto com o número de tentativas necessárias para chegar a ele.
Antes de começar a programar escreva um algoritmo que defina os passos necessários para obter os resultados necessários. Inclua o algoritmo na forma de comentários no início do seu programa. Não se esqueça de programar defensivamente, impedindo que o programa comece a execução com dados inadequados, evite divisões por zero e outras indefinições matemáticas.
Preciso de ajuda, é para entregar até terça:
Meu programa em fortran, até agora o que consegui fazer: (está em fortran mas pode ser por C e ++ também)
program adivinhado
implicit none
integer ::limiteinf !intervalo inferior onde tem inicio a interação
integer ::limitesup !intervalo superior onde tem inicio a interação
integer ::limiteinf_aux !intervalo inferior auxiliar de proteção
integer ::limitesup_aux !intervalo superior auxiliar de proteção
integer ::valor !valor a ser adivinhado
integer ::resultado
character(len=30) ::arquivo_entrada
write(*,*)
write(*,*) 'Objetivo do programa: Adivinhar um número inteiro com o menor numero de tentativas'
write(*,*)
write(*,*) 'Autor: Karoline Angelo'
write(*,*) 'Matricula: 140148035'
write(*,*) 'Data do programa: 22/04/2015'
write(*,*) 'Ultima modificacao: 29/04/2015'
write(*,*) 'Insira o titulo do arquivo de entrada'
read*, arquivo_entrada
open(unit=10, file=arquivo_entrada, status='old', iostat=estado)
write(*,*) 'Adicione um limite inferior e um superior'
read(*,*) limiteinf, limitesup, valor
read(10, *,iostat=estado) limiteinf, limitesup, valor
if (limiteinf == limitesup) then
print*, 'Tentativa'
stop
else if (limiteinf > limitesup) then
print*, 'Tentativa'
stop
else if (limiteinf > limitesup -1) then
print*, 'Tentativa'
else if (limiteinf > limitesup -2) then
else if (limiteinf < limitesup) then
print*, 'Tentativa'
limiteinf_aux = limiteinf
limitesup_aux = limitesup
else
limiteinf_aux = limiteinf
limitesup_aux = limitesup
end if
close(unit=10)
!if(limiteinf_aux)
!end if
do
resultado=(limiteinf_aux + limitesup_aux)/2
!nova variável defensiva=+1
if(resultado > valor) then
limitesup_aux= resultado
print*, resultado
!else(resultado < valor)
print*, resultado
end if
end do
end program adivinhado
1. leia dois números representando o menor e o maior valor desse limite.
2. verifique se os limites estão corretos: menor e maior valores nessa ordem e trate de correções necessárias.
3. leia um valor fornecido limitado entre esses dois números mas que não corresponda a nenhum dos valores limites;
4. verifique se o valor fornecido é realmente válido (ou seja, esteja contido no intervalo);
Calcule a metade do intervalo e compare com o valor que deve ser adivinhado. A seguir refaça os limites usando a metade calculada como novo limite e, sempre trabalhando com as metades dos novos intervalos, procure chegar ao valor fornecido.
Seu programa deverá imprimir os resultados dos cálculos de cada tentativa contendo o seu número e o valor calculado. Ao final do cálculo o programa deverá imprimir o intervalo fornecido, o valor a ser adivinhado e o valor calculado junto com o número de tentativas necessárias para chegar a ele.
Antes de começar a programar escreva um algoritmo que defina os passos necessários para obter os resultados necessários. Inclua o algoritmo na forma de comentários no início do seu programa. Não se esqueça de programar defensivamente, impedindo que o programa comece a execução com dados inadequados, evite divisões por zero e outras indefinições matemáticas.
Preciso de ajuda, é para entregar até terça:
Meu programa em fortran, até agora o que consegui fazer: (está em fortran mas pode ser por C e ++ também)
program adivinhado
implicit none
integer ::limiteinf !intervalo inferior onde tem inicio a interação
integer ::limitesup !intervalo superior onde tem inicio a interação
integer ::limiteinf_aux !intervalo inferior auxiliar de proteção
integer ::limitesup_aux !intervalo superior auxiliar de proteção
integer ::valor !valor a ser adivinhado
integer ::resultado
character(len=30) ::arquivo_entrada
write(*,*)
write(*,*) 'Objetivo do programa: Adivinhar um número inteiro com o menor numero de tentativas'
write(*,*)
write(*,*) 'Autor: Karoline Angelo'
write(*,*) 'Matricula: 140148035'
write(*,*) 'Data do programa: 22/04/2015'
write(*,*) 'Ultima modificacao: 29/04/2015'
write(*,*) 'Insira o titulo do arquivo de entrada'
read*, arquivo_entrada
open(unit=10, file=arquivo_entrada, status='old', iostat=estado)
write(*,*) 'Adicione um limite inferior e um superior'
read(*,*) limiteinf, limitesup, valor
read(10, *,iostat=estado) limiteinf, limitesup, valor
if (limiteinf == limitesup) then
print*, 'Tentativa'
stop
else if (limiteinf > limitesup) then
print*, 'Tentativa'
stop
else if (limiteinf > limitesup -1) then
print*, 'Tentativa'
else if (limiteinf > limitesup -2) then
else if (limiteinf < limitesup) then
print*, 'Tentativa'
limiteinf_aux = limiteinf
limitesup_aux = limitesup
else
limiteinf_aux = limiteinf
limitesup_aux = limitesup
end if
close(unit=10)
!if(limiteinf_aux)
!end if
do
resultado=(limiteinf_aux + limitesup_aux)/2
!nova variável defensiva=+1
if(resultado > valor) then
limitesup_aux= resultado
print*, resultado
!else(resultado < valor)
print*, resultado
end if
end do
end program adivinhado
okaykarol- Iniciante
- Mensagens : 1
Data de inscrição : 30/04/2015
Idade : 28
Localização : brasilia
Re: Programação
Não temos uma seção para Programação. Matemática Financeira não é seção adequada para isso. Você deve procurar sites especializados.
____________________________________________
In memoriam - Euclides faleceu na madrugada do dia 3 de Abril de 2018.
Lembre-se de que os vestibulares têm provas de Português também! Habitue-se a escrever corretamente em qualquer circunstância!
O Universo das coisas que eu não sei é incomensuravelmente maior do que o pacotinho de coisas que eu penso que sei.
Euclides- Fundador
- Mensagens : 32508
Data de inscrição : 07/07/2009
Idade : 74
Localização : São Paulo - SP
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos