Baixe o app para aproveitar ainda mais
Prévia do material em texto
Relatorio de algoritmos e logica de programacao Édipo cabral Eng civil Neste relatório, é apresentado o desenvolvimento de um código de programação em linguagem C para abordar a conjectura de Collatz, um problema matemático que afirma que qualquer número natural pode ser reduzido a 1 por meio de uma sequência de operações simples. O objetivo é demonstrar o uso de algoritmos e lógica de programação para resolver o referido problema matemático. Na introdu- ção, é feita uma contextualização sobre a conjectura de Collatz e sua relevância para a ciência da computação. Nos métodos, é descrito o algoritmo utilizado para implementar o código em C, explicando as estruturas de controle, as variáveis e as funções envolvidas. Por fim, na subseção resultados, são apresentados as saídas obtidas pelo código, que são declaradas como satisfatórias na conclusão por sua primazia aos valores esperados. 1 Introdução A conjectura de Collatz foi proposta pelo matemático alemão Lothar Collatz em 1937 e desde então tem desafiado os melhores matemáticos do mundo (Onody, 2021). Ainda não foi provada ou refutada a conjectura até os dias atuais. A conjectura parece ser muito simples, mas esconde uma complexidade enorme. Existem números que têm trajetórias de Collatz muito longas e imprevisíveis. Por exemplo, o número 27 tem uma trajetória de Collatz com 111 passos e atinge o valor máximo de 9.232. Ainda não se sabe se existe algum número que nunca chega ao 1 ou se existe algum padrão nas trajetórias de Collatz. A conjectura de Collatz é um dos grandes mistérios da matemática. Esta conjectura afirma que, se tomarmos qualquer número inteiro não-zero e aplicarmos uma regra sim- ples, sempre chegaremos ao número 1 depois de um número finito de passos. A regra a seguinte: se o número for par, dividimos ele por 2; se for impar, multiplicamos ele por 3 e somamos 1. Para exemplificar, uma ilustração prática pode ser feita com o número 6, tem-se a seguinte sequência: 6, 3, 10, 5, 16, 8, 4, 2, 1. Essa sequência é chamada de trajetória de Collatz do número 6. A conjectura tem implicações profundas para a teoria dos números e para a física (Andrei and Masalagiu, 1998). Se a conjectura for verdadeira, ela revelaria uma proprie- dade universal e surpreendente de todos os números inteiros não-zero. Essa propriedade seria muito diferente de qualquer outra conhecida na matemática. Além disso, a conjec- tura poderia ser usada para modelar e explicar alguns fenómenos físicos que envolvem sistemas caóticos e dinâmicos como pode ser verificado no estudo de Feiteira (2010). A conjectura de Collatz é um exemplo de como a matemática pode gerar problemas simples, mas intrigantes, que nos levam a explorar as fronteiras do conhecimento. def collatz_sequence(n): sequence= [n] while n = 1: if n % 2 == 0: n = n // 2 else: n = 3* n + 1 sequence.append(n) return sequence # Solicitar o número de entrada numero= int(input("Digite um número inteiro positivo maior que 1: ")) # Calcular a sequência de Collatz sequencia = collatz_sequence (numero) # Exibir a sequência de Collatz print("Sequência de Collatz: ", sequencia) 2 Métodos e Resultados Nesta seção, os métodos e resultados são apresentados. Inicialmente é descrito o algoritmo da conjectura, sendo posteriormente feito um pseudo-código para auxiliar na elaboração do código propriamente dito que é, também, apresentado. Ao final, apresenta algumas saídas deste código para mostrar os resultados satisfatórios. 2.1 Métodos A conjectura de Collatz é um problema matemático que afirma que, dado um número inteiro positivo n, se ele for par, deve-se dividir por 2; se for impar, deve-se multiplicardove por 3 e somar 1. Repetindo esse processo, eventualmente se chegará ao número 1, inde- pendentemente do valor inicial de n (Onody, 2021). Para implementar essa conjectura em linguagem C. o primeiro passo foi entender o algoritmo que descreve esse processo. O algoritmo consiste em um laço de repetição que verifica se o número é par ou ímpar e aplica a operação correspondente, até que o número seja igual a 1. Em seguida, foi feito um pseudo código, que é uma forma simplificada e estruturada de representar o algoritmo 2 em linguagem natural, sem se preocupar com a sintaxe da linguagem de programação O pseudo código ficou assim: Inicio Leia n Enquanto a diferente de 1 faça Se n mod 2 igual a 0 então n=n / 2 Senão n=3*n+1 Fim se Escreva n Fim enquanto Fim Depois de ter o pseudo código, foi feito o código propriamente dito em linguagem C, usando as estruturas de controle e as funções adequadas. O código ficou assim ‐--------------------------------------------- // Programa: collatz.c // Uso: Aplicação da conjectura de Collatz // Autor: Édipo Cabral Nascimento // Data: 17 outubro de 2023 // A função main é o ponto de entrada int main() { // Declaramos uma variável 'n' para armazenar o número inserido int n; // Insere um número printf("Digite um número inteiro positivo maior que 1: "); scanf("%d", &n); // Iniciamos um loop que continuará até que 'n' seja igual a 1 while (n = 1) { // Imprimimos o valor atual de 'n' printf("%d, ", n); // Verificamos se 'n' é par if (n % 2 == 0) { // Se 'n' for par, dividimos por 2 n = n / 2; } else { 3 ‐‐--------------------------------------------- // So 'n' for impar, multiplicamos por 3 e somamos 1 n3n+ 1; } } // Quando 'n' se torna 1, saímos do loop e imprimimos o valor final de 'n' printf("%d\n", n); // A função main retorna 0 para indicar que o programa terminou com sucesso return 0; } ‐---------------------------------------------- Por fim, foi implementado o código no aplicativo Dev-C++, com o auxílio dos estudos descrito no clássico livro Vetterling (2002), que é um ambiente integrado de desenvolvi- mento para a linguagem C. O aplicativo permite compilar e executar o código, além de mostrar possíveis erros e avisos. 2.2 Resultados seguir, é apresentado algumas saídas do código no Dev-C++, sendo referidos números 10, 50 e 1000. Figura 1: Saída do código elaborado para a Conjectura de Collatz do número 10. Figura 2: Saída do código elaborado para a Conjectura de Collatz do número 50 Figura 3: Saída do código elaborado para a Conjectura de Collatz do número 1000. Como observa-se nas Figuras 1, 2 e 3, os resultados foram satisfatórios, pois obteve- se o valor esperado de 1 (um) como valor final da conjectura, seguindo os passos do algoritmo da mesma. 3 Conclusões O objetivo deste relatório foi desenvolver um código na linguagem C para a Conjectura de Collatz, a qual afirma que qualquer número natural positivo eventualmente chega a 1 se for aplicada a regra: se o número for par, divida-o por 2; se for impar, multiplique- odows por 3 e some 1. O código elaborado foi capaz de executar essa regra e mostrar o número clirações para de passos necessários para que cada número testado chegasse a 1. Os resultados das de passos necessarios para que cada numero testado cnegasse a 1. Us resultados das ilustrações práticas para os números 10, 50 e 1000 comprovaram a eficácia do código, pois todos eles atingiram o valor esperado seguindo a regra da conjectura, convergindo assim para resultados satisfatórios propostos neste relatório. Referências Andrei, S. and Masalagiu, C. (1998), 'About the collatz conjecture', Acta Informatica 35, 167-179. Feiteira, R. (2010), 'Problemas sem solução: Uma pequena investigação sobre o problemado ws de collatz', Educação e Matemática (107), 18-23. Onody, R. N. (2021), 'A conjecturade collatz'. Vetterling, W. T. (2002), Numerical recipes example book (c++): The art of scientific computing, Cambridge University Press.
Compartilhar