Programa 7 - Volume da caixa em C
- #include <stdio.h>
- // Programa que procura o volume máximo de uma caixa, restrito à uma dada área superficial..
- int main(){
- int c=0,a=0;
- //"c" é o limite de iterações do While da linha 28; a é o auxiliar para diminuir o tempo de busca.
- float area=0,x=0,y=0,z=0,v=0,vs=0,xs=0,ys=0,zs=0;
- // "area" é o valor que irá ser digitado. As variáveis x,y,z,v irão ser usadas na busca da solução. As variáveis xs,ys,zs,vs irão armazenar o valor das melhores soluções.
- srand(time(NULL)); // Faz o rand() gerar valores distintos a cada execução.
- printf("Digite o valor da area superficial da caixa.\n");
- scanf ("%f",&area);
- //area = 255,45; // Para testar a capacidade de achar uma solução ótima, define-se um valor arbitrário e executa o programa n vezes
- if(area<=1){a=1;}
- if(area<=10){a=10;}
- if(area<=100){a=100;}
- if(area<=1000){a=1000;} // Otimizando o gasto computacional
- if(area<=10000){a=10000;}
- if(area<=100000){a=100000;}
- while(c<1000){ // Quanto maior o limite de c, maior o gasto computacional, porém melhor é o resultado.
- x=rand()%a;
- y=rand()%a;
- while(x>area){x=rand()%a;} // "a" reduz o tempo de busca pois limita a busca a valores próximos do esperado..
- while (2*x*y>area){y=rand()%a;}
- z=( (area/2)-(x*y) )/(x+y); // Lembrar que Área superficial = 2(xy+xz+yz)
- v=x*y*z; // Cálculo do volume..
- if(v>vs){vs=v;xs=x;ys=y;zs=z;} // Se a solução é melhor, substitui valores..
- c++;
- }// Fim While
- printf ("\n\nVolume maximo: %f \n\nAs medidas sao x=%.2f\ty=%.2f\tz=%.2f\n\n",vs,xs,ys,zs);
- //Nessa linha, o código %.2f ordena imprimir até as 2 primeiras casa decimais do resultado.
- system("pause");
- }// Fim Main
Nesse programa é interessante observar a tática usada para diminuir o tempo de busca do computador. Nas linhas 19 até 24, "a" é determinado de acordo com cada área superficial dada. Ou seja, quando nas linhas 27 e 28 efetua-se x=rand()%a e y=rand()%a obtemos valores menores que a área superficial, e ainda, provavelmente mais próximos da solução ideal. Lembrar que esse programa é aleatório. Se você executá-lo várias vezes, poderá obter resultados diferentes, entretanto satisfatórios em sua maioria. Esse é o princípio da busca aleatória, que é feita em programas de otimização.
Novamente vemos as linhas rand () e srand(time(NULL)). Ambas são funções e fazem parte da biblioteca padrão de C. A linha rand() gera um número randômico qualquer. A linha srand(time(NULL)) faz com que esse número seja diferente a cada execução do programa, pois estabelece uma relação com o relógio do computador.
Bem, por hoje é só. No próximo post, alguns exercícios de C, do estilo dos que eu fiz quando fazia a disciplina de algoritmos no IFET, e que podem cair em provas. Para quem está fazendo a disciplina, é uma boa.
Boa semana à todos!
Novamente vemos as linhas rand () e srand(time(NULL)). Ambas são funções e fazem parte da biblioteca padrão de C. A linha rand() gera um número randômico qualquer. A linha srand(time(NULL)) faz com que esse número seja diferente a cada execução do programa, pois estabelece uma relação com o relógio do computador.
Bem, por hoje é só. No próximo post, alguns exercícios de C, do estilo dos que eu fiz quando fazia a disciplina de algoritmos no IFET, e que podem cair em provas. Para quem está fazendo a disciplina, é uma boa.
Boa semana à todos!