Prefácio
A habilidade de olhar para um problema complexo e extrair do mesmo um conjunto de problemas mais simples e, portanto, mais facilmente resolvíveis, é essencial aos profissionais da computação. Isto por quê na automatização de tarefas por um computador, é necessário quebrá-las em unidades mínimas, que sejam compreensíveis pela máquina. Acontece que esta habilidade é também útil à profissionais das mais diversas áreas, da construção civil à de foguetes, da medicina à psicologia, e à todas as áreas da engenharia. A esta habilidade, chamamos de raciocínio computacional.
Este material é uma tentativa de organizar um curso de raciocínio computacional, via aprendizado de técnicas básicas de programação. Nosso público alvo são os estudantes cujo tópico principal de estudo não é a Ciência da Computação ou áreas afins, embora estes também possam usá-lo como uma introdução aos estudos mais aprofundados que farão.
Este tipo de curso é tradicional nos estudos de engenharia e mesmo outras áreas e, provavelmente por razões históricas, é dado usando-se como ferramenta a linguagem de programação C. Aqui usaremos C, mas não toda ela e não somente ela. Em vez disso, usaremos parte da linguagem C, extendida com partes da linguagem C++. A esta combinação particular, chamaremos C(++).
O material é dividido em capítulos correspondendo a aproximadamente uma aula de 100 minutos, provavelmente mais do que comporiam um curso deste tipo, dando assim opções para que os professores usando livro variem a estrutura de seus cursos.
Sugere-se que a primeira parte do material, mais básica, seja seguida na íntegra e na ordem em que é apresentada. A segunda parte contem tópicos mais (mas não completamente) independentes. A terceira parte apresenta tópicos mais avançados, que poderão ser usadas em turmas com melhor rendimento.
Cada capítulo é iniciado com uma motivação para o tópico apresentado, seguido de seções com a teoria e exemplos. O capítulo termina, então, com exercícios propostos e problemas para serem resolvidos em laboratório.
O material foi inicialmente escrito em LaTeX e esta conversão para markdown é um esforço para organizar minhas notas de aula em um só local e formato. Eu não estou ativamente usando este material e por isso a conversão deverá ser lenta. Se você estiver usando este material, me avise, pois poderá (talvez) me estimular a convertê-lo mais rapidamente. Se você tem sugestões de modificações a este material, por favor proponha como PR ou entre em contato comigo.
Este material foi usado por outros professores na UFU, que também contribuíram para o mesmo, mas não como co-autores, dado o volume de suas contribuições.