Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Computação e aos Algoritmos Lógica de Programação Diretor Executivo DAVID LIRA STEPHEN BARROS Gerente Editorial CRISTIANE SILVEIRA CESAR DE OLIVEIRA Projeto Gráfico TIAGO DA ROCHA Autoria IZABELLY MORAIS DE MORAIS LEANDRO C. CARDOSO MAX ANDRÉ DE AZEVÊDO SILVA AUTORIA Izabelly Morais de Morais Sou licenciada em Ciência da Computação pela Universidade Federal da Paraíba (UFPB), e mestre em Ciência da Computação com ênfase em Engenharia de Software e Linguagens de Programação pela Universidade Federal de Pernambuco (UFPE). Leciono como professora formadora no Instituto Federal de Pernambuco (IFPE) e na Faculdade Pitágoras (João Pessoa, na Paraíba), onde tenho a oportunidade de transmitir minha experiência na área de Tecnologia e Educação. Por isso fui convidada pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! Leandro C. Cardoso Sou graduado em Comunicação Social com habilitação em Design Digital, e mestre em Tecnologias da Inteligência e Design Digital pela Pontifícia Universidade Católica de São Paulo (PUC-SP), com mais de 20 anos de experiência em direção de arte e criação. Passei por empresas como a Laureate International Universities – FMU/Fiam-Faam, a Universidade Anhembi Morumbi e o Centro Paula Souza (Fatec-Etec). Já atuei como analista de desenvolvimento pedagógico sênior, coordenador de curso técnico de Design Gráfico e revisor técnico e validador para curso EAD para clientes Laureate International Universities, DeVry Brasil, Unef, FAESF, Faculdade Positivo, Uninter e Platos Soluções Educacionais S.A. (Krotonn – Universidade Anhanguera). Além disso, sou autor de mais de 24 livros didáticos e um dos organizadores da Maratona de Criação e Design do Curso de Comunicação Visual da Etec Albert Einstein. Sou apaixonado pelo que faço e adoro transmitir minha experiência de vida àqueles que estão iniciando em suas profissões. Por isso fui convidado pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! Max André de Azevêdo Silva Sou formado em Ciência da Computação, pela Universidade Federal da Paraíba (UFPB), e mestre em Ciência da Computação com ênfase em Engenharia de Software pela Universidade Federal da Paraíba (UFPB). Tenho experiência na área de Desenvolvimento de Sistemas Web, Mobile e Jogos Eletrônicos. Atualmente, trabalho como analista de sistemas. Por isso fui convidado pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! ICONOGRÁFICOS Olá. Esses ícones irão aparecer em sua trilha de aprendizagem toda vez que: OBJETIVO: para o início do desenvolvimento de uma nova compe- tência; DEFINIÇÃO: houver necessidade de se apresentar um novo conceito; NOTA: quando forem necessários obser- vações ou comple- mentações para o seu conhecimento; IMPORTANTE: as observações escritas tiveram que ser priorizadas para você; EXPLICANDO MELHOR: algo precisa ser melhor explicado ou detalhado; VOCÊ SABIA? curiosidades e indagações lúdicas sobre o tema em estudo, se forem necessárias; SAIBA MAIS: textos, referências bibliográficas e links para aprofundamen- to do seu conheci- mento; REFLITA: se houver a neces- sidade de chamar a atenção sobre algo a ser refletido ou dis- cutido sobre; ACESSE: se for preciso aces- sar um ou mais sites para fazer download, assistir vídeos, ler textos, ouvir podcast; RESUMINDO: quando for preciso se fazer um resumo acumulativo das últi- mas abordagens; ATIVIDADES: quando alguma atividade de au- toaprendizagem for aplicada; TESTANDO: quando o desen- volvimento de uma competência for concluído e questões forem explicadas; SUMÁRIO Introdução à Computação ...................................................................... 10 O Ábaco, Ossos de Napier e Auxílio Mecânico para os Cálculos................ 10 Gerações dos Computadores e Evolução dos Recursos Computacionais ................................................................................................................................ 14 Linguagens de Programação ................................................................. 18 Conceitos Fundamentais ........................................................................................................... 18 Classificação das Linguagens de Programação ......................................................22 Infraestrutura dos Sistemas Computacionais ................................26 Unidade Central de Processamento (CPU) ..................................................................26 Dispositivos de Entrada e Saída ......................................................................................... 30 Infraestrutura de Software ........................................................................................................33 Introdução à Lógica de Programação Algorítmica ....................... 35 O que é Lógica? ...............................................................................................................................35 Algoritmos Computacionais ....................................................................................................37 7 UNIDADE 01 Lógica de Programação 8 INTRODUÇÃO Você sabia que compreender a área da Ciência da Computação, sobretudo no que concerne a softwares e programação de computadores, é fundamental para começar o entendimento da lógica de programação? Isso mesmo. Conhecer a história e entender os conceitos relacionados à Ciência da Computação é vital para o desenvolvimento das competências de programação de computadores. Ao longo desta primeira etapa de estudos, iremos desbravar todo esse conhecimento. Entendeu? Ao longo desta unidade letiva você vai mergulhar neste universo! Lógica de Programação 9 OBJETIVOS Olá. Seja muito bem-vindo à Unidade 1. Nosso objetivo é auxiliar você no desenvolvimento das seguintes competências profissionais até o término desta etapa de estudos: 1. Entender a história dos computadores e a evolução dos recursos computacionais. 2. Compreender o funcionamento e os vários paradigmas das linguagens de programação. 3. Identificar e compreender a infraestrutura dos sistemas computacionais, discernindo sobre hardware, software e peopleware. 4. Definir e entender o conceito e as funcionalidades da lógica de programação e algoritmos computacionais. Lógica de Programação 10 Introdução à Computação OBJETIVO: Ao término deste Capítulo você será capaz de conhecer a história dos computadores e a evolução dos recursos computacionais. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante!. O Ábaco, Ossos de Napier e Auxílio Mecânico para os Cálculos O ábaco foi um dos primeiros instrumentos desenvolvidos para auxiliar os humanos na realização de cálculos, muitos atribuem sua criação à China, mas existem evidências dele na Babilônia do ano 300 a.C. (MORAIS; AZEVEDO, 2017b). O próprio nome “computador” está associado ao termo “contar”. E era isso que o ábaco fazia: ajudava as pessoas a mecanizar o processo da contagem numérica, realizando as operações de soma e subtração de maneira bastante visual e intuitiva (MORAIS; AZEVEDO, 2017b), como podemos observar na Figura 1. Figura 1 – O ábaco ajudava a mecanizar o processo da contagem numérica Fonte: Freepik Lógica de Programação 11 Em 1617, John Napier construiu um dispositivo simples e barato para auxiliar os cálculos matemáticos, este ficou conhecido como “Ossos de Napier” ou “Bastões de Napier”. Em 1642, o francês Blaise Pascal, aos 19 anos, criou a primeira calculadora mecânica do mundo, e essedispositivo ficou conhecido como “As rodas dentadas de Pascal” ou “Pascaline” (MORAIS; AZEVEDO, 2017b). Figura 2 – A primeira calculadora mecânica do mundo Fonte: Wikimedia commons O mecanismo de funcionamento da Pascaline é o mesmo utilizado nos odômetros de carros, nos quais as engrenagens são organizadas de tal forma a simular o “vai um” para a próxima casa decimal nas operações de adição. Em 1801, Joseph-Marie Jacquard construiu a máquina de tecer com cartões perfurados. Joseph era um costureiro que trabalhava com desenhos em tecidos. No entanto, esse processo era demorado e isso o levou a construir uma máquina para fazer os desenhos nos tecidos. Esse mecanismo ficou conhecido como “tear programável”, pois, por meio das instruções contidas nos cartões perfurados, a máquina cortava e desenhava em tecidos. Em 1820, Charles Babbage (matemático inglês), preocupado com os erros contidos nas tabelas matemáticas de sua época, construiu um modelo para calcular tabelas de funções (logaritmos, funções trigonométricas etc.), sem a intervenção de um operador humano. Nascia, então, a máquina diferencial de Babbage. Babbage projetou essa máquina para ser composta por diversos discos giratórios operados por manivelas. Em 1823, o governo britânico concordou em financiar a construção da máquina de Charles Babbage (MORAIS; AZEVEDO, 2017b). Lógica de Programação 12 Figura 3 – Máquina diferencial de Babbage Fonte: Wikimedia commons Todavia, as ferramentas da época não eram suficientemente sofisticadas para construir a máquina. Babbage, então, gastou tempo construindo ferramentas e, por diversas vezes, a construção da máquina parou por falta de fundos. SAIBA MAIS: Veja o vídeo a seguir para saber mais sobre Babbage e suas criações. Para acessar, clique aqui. Em 1833, Babbage abandonou a ideia da máquina diferencial e iniciou um trabalho em seu novo projeto, conhecido como máquina analítica de Babbage. Essa máquina podia ser programada por meio de cartões perfurados e calculava funções diferentes. Porém, a tecnologia Lógica de Programação https://www.youtube.com/watch?v=s8IKAJxl75U 13 pouco avançada da época não possibilitou que a máquina fosse concluída e, somente um século depois, suas ideias foram postas em prática. Para muitos, Charles Babbage é considerado o verdadeiro “pai” da Computação. Em 1880, os dados do censo demográfico dos Estados Unidos, que ocorria a cada 10 anos, levaram quase 8 anos para serem processados. Dessa forma surgiu uma preocupação quanto ao tempo necessário para processar os dados de 1890. Então, Herman Hollerith (estatístico) foi designado pela Agência Estatística dos Estados Unidos para desenvolver uma técnica de aceleração do processamento dos dados daquele censo. Hollerith utilizou a ideia de Jackard e desenvolveu a perfuradora de cartões, modo pelo qual os dados eram perfurados em cartões, que podiam ser classificados por meio de pinos passando pelos furos (MORAIS; AZEVEDO, 2017b). A máquina de Hollerith era tão veloz que uma simples contagem ficava pronta em seis semanas e, uma análise estatística completa, em dois anos e meio. A população aumentara em cerca de 13 milhões de pessoas durante a década anterior, até um total de 62.622.250 habitantes. Mesmo assim, a tabulação do censo de 1890 demorou, aproximadamente, um terço do tempo gasto por seu predecessor. A máquina de Hollerith ficou mundialmente conhecida, tendo sido utilizada por vários países em diversos segmentos de mercado. Assim, Hollerith montou uma empresa chamada International Business Machines Corporation, mais popularmente conhecida como IBM, uma marca forte e atuante até os dias de hoje (MORAIS; AZEVEDO, 2017b). Lógica de Programação 14 Gerações dos Computadores e Evolução dos Recursos Computacionais A primeira geração dos computadores (1946-1954) é marcada pela utilização de válvulas. A válvula era um tubo de vidro, similar a uma lâmpada, que aquecia bastante e costumava queimar com facilidade. O armazenamento dos dados desses computadores era feito, inicialmente, através de cartões perfurados. Posteriormente, esse armazenamento passou a ser feito por meio de fitas magnéticas. Esses computadores eram máquinas extremamente grandes, chegando a ocupar áreas da ordem de 180 m². Outra característica desses computadores era que, para programá-los, costumava-se levar muito tempo. Desde o primeiro computador eletrônico inventado, o processo evolutivo daquelas máquinas foi célere e intenso. Após a primeira geração, houve muitas outras até que chegássemos às atuais máquinas em uso. Farias e Medeiros (2013), trazem os principais acontecimentos, conforme as respectivas décadas. A segunda geração (1952-1964) foi marcada pela substituição da válvula pelo transistor, que eram menores que as válvulas a vácuo e tinham outras vantagens: não exigiam tempo de pré-aquecimento, consumiam menos energia, geravam menos calor e eram mais rápidos e confiáveis (MORAIS; AZEVEDO, 2017b). A terceira geração (1964-1977) foi marcada pela utilização dos circuitos integrados, feitos de silício. Essa geração se caracterizou pelo advento dos microchips. Seu processo de fabricação possibilitava a construção de vários circuitos simultaneamente, facilitando a produção em massa. A quarta geração (1977-1991) é caracterizada pelo surgimento dos microprocessadores – unidade central de processamento. Sistemas operacionais como MS-DOS, Unix e CP/M eram os utilizados à época. Linguagens de programação orientadas a objeto como C++ e Smalltalk foram desenvolvidas e discos rígidos eram utilizados como memória secundária. As impressoras matriciais e os teclados com layouts atuais foram criados nessa época. A quinta geração é iniciada no ano de 1991. Os computadores da quinta geração usam processadores com milhões de circuitos integrados, essa geração é marcada pela Inteligência Artificial e sua conectividade (MORAIS; AZEVEDO, 2017b). Lógica de Programação 15 Em relação à evolução dos recursos computacionais, é evidente que ao armazenarmos algo, esse algo pode ser quantificado, por exemplo, podemos armazenar água em um reservatório e, para sabermos a quantidade armazenada, podemos nos basear no seu volume. Este é medido em litros (l) ou metros cúbicos (m3). No mundo da Informática, os dados são transmitidos e armazenados, portando, também podem ser quantificados e mensurados em unidades de medida. Os computadores trabalham com diversas unidades de medidas, então, vamos esclarecer algumas das mais importantes, começando pelo fato que consegue mensurar a capacidade de armazenamento de dados (MORAIS; AZEVEDO, 2017b). O computador armazena dados em sua memória, reservando um pequeno espaço denominado “byte”. Cada byte consegue representar um pequeno fragmento de dado, que podemos chamar de “caractere”. Este pode ser um algarismo de 0 a 9, uma letra do alfabeto de A a Z, ou um símbolo especial, como &, @, - etc. Um byte, ou um conjunto deles, pode, ainda, representar um ponto luminoso na tela do computador ou uma nota musical que compõe uma canção armazenada em sua memória (MORAIS; AZEVEDO, 2017b). VOCÊ SABIA? Um byte pode, ainda, ser subdividido em fragmentos menores. Um byte é, na realidade, uma combinação de 8 bits. Estes são sinais binários, representados pelos números 0 e 1. Cada bit, portanto, pode equivaler a zero ou a um. Internamente, esses sinais binários são simulados pela presença ou ausência de corrente elétrica dentro do chip. Agora que você entendeu o que são bits e bytes, observe o quadro 1, que mostra as diferentes unidades de medida de armazenamento de um computador, em bytes. Lógica de Programação 16 Quadro 1 – Unidades de medida de armazenamento de dados Fonte: Morais e Azevedo (2017a). Outra medida importante para os computadores diz respeito à velocidade de processamento, chamada de megahertz. Um megahertz,ou MHz, equivale a 1 milhão de ciclos por segundo, ou seja, 106 (10 elevado à sexta potência), diferentemente de megabyte, que, como vimos, utiliza outro tipo de potenciação: a de base dois (210 = 1.024). Quadro 2 – Unidades de medida de velocidade de processamento Fonte: Morais e Azevedo (2017a). Lógica de Programação 17 Um termo comumente utilizado no mercado de informática é “Clock”. Ao adquirir um computador, você pode se referir à sua velocidade de processamento usando esse termo, que significa, na realidade, a frequência com que o processador pergunta para a placa-mãe (motherboard) se há alguma instrução a ser processada. RESUMINDO: E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste Capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que a Informática nasceu da ideia de auxiliar o homem nos trabalhos rotineiros e repetitivos, geralmente, ligados à área de Cálculo e Gerenciamento. Desse modo, conhecer a história dos computadores é importante, pois é por meio do estudo do passado que podemos compreender e valorizar o presente. A história dos computadores está relacionada ao ábaco e aos Ossos de Napier, além dos métodos de auxílio mecânico para os cálculos. A primeira geração dos computadores se deu no período de 1946 a 1954; a segunda geração no período de 1952 a 1964; a terceira geração no período de 1964 a 1977; a quarta geração de 1977 a 1991; e a quinta geração foi iniciada no ano de 1991. Além disso, importante conhecer a evolução dos recursos computacionais, nos quais estão relacionados a unidade de armazenamento de dados e a unidade de velocidade de processamento. Lógica de Programação 18 Linguagens de Programação OBJETIVO: Ao término deste Capítulo você será capaz de entender o funcionamento e os vários paradigmas das linguagens de programação. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante!. Conceitos Fundamentais É importante entender que o computador é dividido em duas partes bem distintas: o hardware e o software. O hardware é tudo o que é físico no computador, como teclado, monitor, mouse etc. Já o software diz respeito a tudo que não se pode “tocar”, como programas (aplicativos) e dados. É com foco no software que iremos discorrer sobre os temas ao longo desta aula, para que você possa entender exatamente o que são e para que servem programas, dados e linguagens de programação (SOUSA, 2014). Você sabe o que é um programa? Não estamos nos referindo ao seu programa de final de semana – esse você certamente conhece bem. Estamos nos referindo aos programas de computadores, que realizam todas as tarefas que estamos acostumados a ver, como processar dados, imprimir informações, fazer a leitura de uma imagem por meio de um scanner etc. Enfim, toda e qualquer operação que solicitamos que sejam executadas, até aquelas que são feitas por iniciativa própria do computador. Mas, espera aí! Quem está por traz de tudo o que o computador faz? Somos nós? Ou há mais alguém? A resposta para essa pergunta é dúbia: somos nós, sim, mas por meio dos programas que escrevemos para eles, que são como cartas escritas para orientá-los a executar procedimentos (comandos ou instruções) (MORAIS; AZEVEDO, 2017a). Lógica de Programação 19 Figura 4 – Um programa de computador realiza as tarefas como processar dados e imprimir informações Fonte: Freepik Programas são conjuntos de instruções, ordenadas logicamente, com vistas à realização de um ou mais procedimentos, que podem ser executados por meio de um comando ou de outro programa. Podemos ampliar ainda mais esse conceito, pensando em termos do software como um todo. Você sabe qual a é diferença entre programa e software? Podemos entender um programa como um software, mas nem todo software é um programa. Software é tudo aquilo que não se toca em um sistema computacional, logo, os dados e as informações também devem ser considerados como software, pois nelas também não podemos tocar. Agora, podemos não só ampliar o conceito de software, como lançar mais algumas definições, como as de dados que são conjuntos de fragmentos de informações que, processados por um programa, transformam-se em informações. Informações que são conjuntos de dados capazes de mudar o estado de conhecimento de alguém sobre algo, podendo ser exteriorizada em várias mídias distintas, como relatórios de papel, textos exibidos em monitores de vídeo, gráficos, sons, objetos em 3D etc. Já as instruções são comandos escritos em um programa, executados apenas quando esse programa é submetido a um comando ou outro programa. Em relação ao conceito de software, também é importante conhecer a definições de comandos. Lógica de Programação 20 DEFINIÇÃO: Comandos são palavras imperativas (verbos) que ordenam um processamento específico por parte do computador, como um procedimento ou a execução de um programa. Os comandos, assim como as instruções de um programa, são escritos de acordo com uma sintaxe (regra gramatical) que deve ser compreendida pelo sistema operacional, pelo compilador ou pelo interpretador de programas. Cabe aos sistemas operacionais compreender a sintaxe dos comandos. Por exemplo, o Windows reconhece o comando “DIR”, que ordena a exibição do conteúdo de uma pasta em um disco rígido, ou em outro dispositivo de memória auxiliar qualquer. A Figura 5 mostra claramente como um comando é digitado, submetido ao computador e, como consequência, as informações são devolvidas após o processamento dos dados. Figura 5 – Prompt de comando do Windows executando o comando “DIR” Fonte: Elaborado pelo autor (2021). Lógica de Programação 21 Para testar o comando “DIR” do sistema operacional Windows, clique na ferramenta de pesquisa da barra de tarefas e digite “PROMPT”. Isso fará aparecer a opção “Prompt de comando” no menu, basta clicar em cima dela. Dizemos, então, que o comando “DIR” é escrito em uma linguagem que o Windows entende, mas, e quanto ao programa que é executado pelo comando “DIR”? Ele existe. Afinal, não é tão simples assim ler todas as informações de uma pasta em um disco e exibi-la na tela do computador com todos aqueles detalhes e formatos. Para isso, uma sequência de outros comandos é executada internamente, e a essa sequência damos o nome de “programa”. Então, assim como o comando “DIR”, todos os outros comandos são, na realidade, programas que executam uma série de procedimentos conforme as instruções neles previamente programadas. Para tanto, essas instruções também têm que obedecer uma sintaxe. Pronto! Chegamos à definição de “linguagem de programação”. DEFINIÇÃO: Linguagem de programação é um conjunto de regras sintáticas cuja finalidade é orientar a escrita das instruções de um programa.. Com isso, queremos dizer que, assim como a língua portuguesa tem uma gramática e um dicionário, toda e qualquer linguagem de programação também deve ter esses dois atributos. O primeiro é a gramática, que trata-se do conjunto de regras de sintaxe que determinam como as instruções devem ser empregadas em um programa. E dicionário é o conjunto de palavras que definem as instruções aceitas pela linguagem de programação. Lógica de Programação 22 Classificação das Linguagens de Programação Existem muitas linguagens de programação no mercado de informática. Se formos considerar aquelas que não mais existem, podemos afirmar que a quantidade de linguagens de programação se aproxima do número de idiomas oficiais do planeta. Diante de tantas linguagens, vamos classificá-las em três grupos, sendo o primeiro possuidor de apenas uma única linguagem, como mostra o diagrama a seguir (MORAIS; AZEVEDO, 2017b). Figura 6 – Classificação das linguagens de programação Fonte: Morais e Azevedo (2017b).Sobre a linguagem de máquina, é a linguagem realmente entendida pelo computador. Ela é composta por comandos binários (0 e 1), o que as torna, praticamente, inacessíveis aos programadores convencionais. Cada família de processador estabelece uma linguagem de máquina própria, composta, basicamente, por endereços de memória e comandos de movimentação de bytes entre esses endereços. Já as linguagens de baixo nível, para ter acesso à linguagem de máquina, deve-se utilizar uma linguagem de programação inteligível ao ser humano. Existe, como já Lógica de Programação 23 dissemos, uma enormidade delas, um exemplo relacionada à linguagem de máquina é o Assembly (ou linguagem montadora). Essa linguagem, apesar de ser inteligível ao homem, é de alta complexidade e de difícil compreensão. Dizemos, então, que o Assembly é uma linguagem de baixo nível (ASCENCIO; CAMPUS, 2012). IMPORTANTE: Alguns autores defendem a existência de dois grupos de linguagem de programação: os de baixo nível e os de alto nível, considerando que a linguagem de máquina é uma linguagem de baixo nível. Outros autores isolam a linguagem de máquina dessa classificação, diferenciando-a das demais, assim, para efeito desta obra, poderemos nos referir, eventualmente, às linguagens de máquina como sendo de baixo nível. Antes de prosseguirmos, precisamos entender que o computador só entende uma única linguagem: a de máquina, todas as outras precisarão ser convertidas para ela. A esse processo de conversão damos o nome de “compilação”. Para isso, um programa, para ser executado por um computador, precisará ser compilado por outro, intitulado “compilador” (MORAIS; AZEVEDO, 2017a). DEFINIÇÃO: Compilador é um programa, escrito em linguagem de máquina, capaz de traduzir outro programa, escrito em uma linguagem de baixo ou alto nível, para a linguagem de máquina, gerando o que chamamos de “programa-objeto” ou “programa-executável”. Já com as linguagens de alto nível, com a popularidade dos computadores, foi criado um problema: alta demanda por software e, consequentemente, por programadores. Aparentemente, isso não é um problema, e sim uma oportunidade, uma tendência, um novo mercado, o que faz sentido até certo ponto. O problema era encontrar mão de Lógica de Programação 24 obra qualificada para criar códigos que as máquinas pudessem executar; à época, só havia linguagens de baixo nível no mercado. Devido à necessidade de facilitar a maneira como os humanos poderiam escrever comandos para as máquinas, surgiram as linguagens de alto nível. Estas têm a característica de serem mais amigáveis para o entendimento humano. Podemos citar como exemplos de linguagem de programação de alto nível: ASP, ActionScript, C++, C#, Pascal, Object Pascal, Euphoria, Java, JavaScript, Lua, MATLAB, PHP, Python, Ruby, Basic, Visual Basic, entre muitas outras. O processo de compilação de um programa escrito em linguagem de alto nível se dá, normalmente, por meio de duas etapas. Conforme ilustrado na Figura 7, percebemos que os programas de alto nível são compilados, primeiramente, para uma linguagem de baixo nível, para somente então serem convertidos para a linguagem de máquina (MORAIS; AZEVEDO, 2017a). Figura 7 – O processo de compilação de um programa escrito em linguagem de alto nível Fonte: Morais e Azevedo (2017b). Programa-fonte é o programa escrito em linguagem de baixo ou alto nível, que é submetido ao processo de compilação. Já programa-objeto é o programa resultante do processo de compilação do programa-fonte, sendo gerado na linguagem de máquina pelo compilador. O processo de compilação, em alguns casos, torna-se moroso, comprometendo a produtividade da equipe de desenvolvimento de software das empresas. Por isso, com o advento das linguagens de alto nível, criou-se o conceito de interpretação de programas como alternativa à compilação. Lógica de Programação 25 SAIBA MAIS: Para se aprofundar mais no assunto, recomendamos o acesso ao vídeo a seguir. Para acessar, clique aqui. Em termos práticos, a interpretação dispensa a geração de programas-objeto, ou seja, os interpretadores leem os programas-fontes e interagem diretamente com o computador, instrução a instrução. O interpretador é o programa que permite a execução direta de um programa-fonte, sem a necessidade de criação de um programa-objeto. Em uma linguagem de programação interpretada, o processo ocorre como se a compilação se desse instantaneamente a cada instrução executada, em tempo real. RESUMINDO: E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste Capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que programas são escritos em linguagens de programação, que reúnem conjuntos de instruções ordenadas logicamente com vistas à realização de um ou mais procedimentos. Esses programas são acionados por meio de comandos, e têm por objetivo ler dados e submetê-los a um processamento, de modo a obter uma informação relevante ou uma ação automatizada. As linguagens de programação podem ser de máquina (aquela que dialoga diretamente com os componentes de hardware em sistema binário), de baixo nível (aquelas que são lidas por compiladores para a geração de programas em linguagem de máquina) ou de alto nível (as que têm uma sintaxe mais amigável, mas que necessitam de interpretadores ou compiladores capazes de gerar um programa em linguagem de baixo nível, para somente depois ser traduzido para a linguagem de máquina). Lógica de Programação https://www.youtube.com/watch?v=Yqq7IsxDGZc 26 Infraestrutura dos Sistemas Computacionais OBJETIVO: Ao término deste Capítulo você será capaz de compreender a infraestrutura dos sistemas computacionais, discernindo sobre hardware e software. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante!. Unidade Central de Processamento (CPU) Uma das principais características dos computadores é a capacidade de processar dados e informações de maneira rápida e precisa, o principal componente responsável por essa característica é a CPU. Esta é o componente vital dos sistemas computacionais, sendo responsável pela realização das operações de processamento, tais como adição, subtração, multiplicação, divisão, entre outras. Figura 8 – A unidade central de processamento é o componente vital dos sistemas computacionais Fonte: Freepik Lógica de Programação 27 Basicamente, a função da CPU é buscar as instruções na memória do computador, interpretar essas instruções que estão explicitadas na memória, buscar dados, executar operações com esses dados e guardá- los de volta na memória. O processador é divido em três partes principais: • Unidade de controle (UC). • Unidade lógica e aritmética (ULA). • Banco de registradores. Sobre a UC, esta tem como função buscar e decodificar as instruções a serem executadas. Além disso, decide como e quando as outras unidades serão ativadas. As instruções a serem executadas podem direcionar dados para a ULA ou diretamente para o banco de registradores. Digamos que a UC é sistema nervoso central do computador, fazendo um paralelo com a mente humana. A ULA, como o próprio nome já permite perceber, é a unidade cuja principal responsabilidade é executar as operações lógicas e aritméticas exigidas pelas tarefas emanadas dos programas em execução. Os dados numéricos a serem processados são enviados pela UC e a ela são devolvidos para armazenamento ou outra destinação. Já o banco de registradores tem o papel de servir como um assistente de acesso rápido. Em resumo, esse componente representa uma memória temporária para armazenagem de tudo o que está sendo processado pela ULA e/ou direcionado pela UC. Nele, são guardadas as instruções em execução, dados numéricos utilizadosem cálculos e outros dados que precisem ser temporariamente armazenados para dar celeridade ao processamento. Não devemos confundir banco de registradores com a memória RAM do computador. Veremos, mais adiante, que a memória RAM armazena dados por mais tempo que o banco de registradores (MORAIS; AZEVEDO, 2017c). SAIBA MAIS: Veja o vídeo a seguir para conhecer mais sobre os processadores. Para acessar, clique aqui. Lógica de Programação https://www.youtube.com/watch?v=DFMCcuhWiXM 28 Sobre a memória do computador, esta pode ser definida como um componente que tem a capacidade de armazenar dados. Estes são armazenados em pequenas células, onde todos os programas e dados em execução ficam guardados por muito ou pouco tempo, dependendo do tipo de memória. A memória do computador pode ser dividida, inicialmente, em dois tipos (MORAIS; AZEVEDO, 2017c): 1. Memória principal – onde ficam armazenados apenas os dados e programas em uso no momento. 2. Memória auxiliar – onde são guardadas as informações em caráter definitivo, só sendo apagadas por meio de comandos intencionais por parte do usuário. A memória principal pode ser dividida em três tipos: RAM, ROM e flash, a Random Access Memory (RAM) – memória de acesso direto ou memória viva) é a memória principal do sistema, ou seja, um espaço para armazenar os dados, de maneira temporária, durante a execução de um programa. Na verdade, ao contrário do armazenamento de dados em uma memória de massa como o disco rígido, a memória RAM é volátil, isto é, ela permite armazenar dados somente enquanto estiver sendo alimentada eletronicamente. Assim, cada vez que o computador for desligado, todos os dados presentes na memória RAM serão apagados definitivamente (MORAIS; AZEVEDO, 2017c). Figura 9 – A RAM é a memória principal do sistema Fonte: Freepik Lógica de Programação 29 A Read Only Memory (ROM) – memória somente para leitura, ou memória morta) é um tipo de memória que permite conservar as informações contidas no dispositivo mesmo quando ele estiver desligado. A base desse tipo de memória só pode ser acessada em leitura, contudo, é possível salvar informações em certos tipos de memórias ROM, como veremos a seguir. A memória flash é um misto entre as memórias de tipo RAM e ROM. Esse tipo de memória é não volátil, assim como as memórias mortas, ou seja, foram projetadas apenas para serem lidas. Por outro lado, as memórias flash podem ser regravadas pelo fabricante, pois os chips que as compõem são similares aos que compõem as memórias RAM (MORAIS; AZEVEDO, 2017c). IMPORTANTE: A memória principal do computador se refere a uma coleção de registradores enumerados sequencialmente, em que cada uma tem um tamanho, chamado de “tamanho da palavra”. Cada registrador tem uma localização fixa na memória, chamada de “localização de memória”. Ao número único que identifica cada palavra na memória, damos o nome de “endereço”. Para quem trabalha com linguagens de baixo nível, como Assembly, esse conhecimento é fundamental, no entanto, para linguagens de alto nível, esse conhecimento pode ser abstraído. Em relação aos barramentos, estes têm a responsabilidade de interligar os componentes internos de um computador, de modo que a comunicação entre eles seja rápida e eficiente. A Figura 10 mostra como os barramentos conseguem interligar os componentes funcionais básicos de um computador. Lógica de Programação 30 Figura 10 – Função dos barramentos que têm a responsabilidade de interligar os componentes internos de um computador UCP MEMÓRIA PRINCIPAL Controladores E/S Barramentos Fonte: Morais e Azevedo (2017c). Na Figura 10, é possível observar que os controladores (da UC) gerenciam os fluxos de dados entre a CPU (processador), a memória principal e os dispositivos de entrada e saída (E/S). Estes serão alvo de estudo na sequência. Dispositivos de Entrada e Saída Chamamos de “periféricos” todos os equipamentos (ou dispositivos) conectáveis ao computador. Esses equipamentos permitem a troca de dados e informações entre o usuário e o computador. Cada periférico tem sua função específica e serve para enviar e/ou receber dados ou tarefas do computador. Da diversidade de dispositivos existentes, podemos mencionar os periféricos mais comuns: • Monitor de vídeo. • Teclado. • Mouse. • Impressora. Lógica de Programação 31 • Unidades de armazenamento externas (discos rígidos, cartões de memória, pen drives etc.). • Caixas acústicas e fones de ouvido. • Microfones. • Câmeras (webcam). • Óculos 3D e de 360 graus para realidade virtual/aumentada. • Unidade leitoras e gravadoras de CD ROM e DVD ROM. Os periféricos podem, ainda, ser classificados como dispositivos de: 1. Entrada (E). 2. Saída (S). 3. Entrada/Saída (E/S). Os periféricos de entrada são os dispositivos exclusivos para a entrada de dados no computador. Por meio deles, o usuário envia dados à CPU para serem processados. Alguns desses dispositivos são essenciais ao sistema, pois sem eles seria impossível interagir com o sistema computacional. Podemos destacar o teclado e o mouse (MORAIS; AZEVEDO, 2017c). Figura 11 – Os periféricos de entrada são os dispositivos exclusivos para a entrada de dados no computador, sendo o teclado e o mouse exemplos Fonte: Freepik Lógica de Programação 32 Os periféricos de saída são os dispositivos exclusivos para a saída de informações vindas da CPU. Por meio desses dispositivos o usuário recebe o resultado do processamento do computador. Temos como exemplos dessa categoria de dispositivos: monitores de vídeo, impressoras, plotters, caixas acústicas, fones de ouvido, entre outros (MORAIS; AZEVEDO, 2017c). Figura 12 – Os periféricos de saída são os dispositivos exclusivos para a saída de informações originadas da CPU Fonte: Freepik Os periféricos de entrada e saída são dispositivos que tanto transmitem dados quanto os recebem. Esses dispositivos são responsáveis pela comunicação máquina a máquina ou pelo armazenamento persistente de dados. Temos como exemplos típicos desses dispositivos: interfaces de rede, gravadores de CD e DVD, pen drives, cartões de memória, monitores sensíveis ao toque (touch screen), entre outros. Lógica de Programação 33 Infraestrutura de Software Para fazer um computador funcionar, não basta o hardware. De nada adiantaria toda a arquitetura que acabamos de estudar se não fosse um conjunto de programas que é executado a cada vez que ligamos o computador. Estamos falando do software básico que todo computador necessita para manter-se ativo e operante. Esse tipo de software define o padrão de comportamento do computador, de modo a torná-lo utilizável. São exemplos de software básico (TAVARES, 2006): • BIOS – trata-se de um acrônimo para Basic Input/Output System ou sistema básico de entrada e saída. Esse software já vem instalado de fábrica na memória ROM do computador, tendo por finalidade inicializar algumas tarefas consideradas vitais em um computador. • Sistema operacional: após a execução do BIOS, é esse software que assume total controle sobre o computador, interpretando os comandos e as ações realizadas pelo usuário. Os sistemas operacionais mais comuns no mercado mundial são o Windows (da Microsoft), o MacOS (da Apple) e o Linux (sistema operacional gratuito e de código-fonte aberto, não pertencendo a nenhuma empresa especificamente). • Os sistemas operacionais já perpassaram os velhos PCs e notebooks, e já estão invadindo os smartphones. Para esses dispositivos móveis, outros sistemas operacionais entram em cena, como o Android (do Google) e o iOS (da Apple). O Windows Mobile (da Microsoft) foi descontinuado em 2017, e representava a terceira força nesse cada vez mais disputado mercado mundial. Outras versões denominadas como Windows Phone surgiram, a versão chamada de Windows 11 permite, por meio de umaparceria entre Microsoft, Amazon e Intel, executar os aplicativos do Android. Dessa maneira, é importante estar sempre atualizando as versões para smartphone. Sobre software utilitário, estes servem de complementação para os softwares básicos, ou seja, são programas que têm funcionalidades Lógica de Programação 34 mais voltadas para o sistema operacional. Como exemplos desse tipo de software podemos citar as ferramentas para organizar os discos, verificador de disponibilidade de memória, corretor de falhas de processamento, entre muitos outros. Boa parte dos programas utilitários são fornecidos pelo próprio fabricante do sistema operacional, incluídos no pacote vendido ou previamente instalado de fábrica. No entanto, existem outros softwares utilitários que podem ser adquiridos e/ou instalados de forma separada, como antivírus, firewalls (proteção contra hackers), compactadores de arquivos (como WinZip, WinRAR etc.), programas para conexão com redes, entre outros (TAVARES, 2006). Os softwares aplicativos são programas voltados para a solução de problemas dos usuários, podendo ser divididos em duas categorias: uso geral e uso específico. Os de uso geral são aqueles programas que todos podem usar, independentemente de suas áreas de atuação ou interesse. Esses softwares se prestam para as mais variadas aplicações, como: editores de texto, geradores de gráficos, planilhas eletrônicas, gerenciadores de bancos de dados, linguagens de programação etc. Já os de uso específico são destinados, exclusivamente, a um único tipo de aplicação, como folha de pagamento, crediário, imposto de renda, cadastro, contas a pagar e receber, contabilidade etc. (MORAIS; AZEVEDO, 2017c). RESUMINDO: E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste Capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que conhecer o que se passa por traz da tela do computador é algo muito importante para todo e qualquer profissional da área de Tecnologia da Informação. Além de componentes eletrônicos, programas e dados, existe toda uma organização dentro de um sistema computacional. Saber discernir sobre cada um de seus elementos, entendendo sua funcionalidade, é um pré-requisito básico para quem quer se tornar um programador ou fazer parte de um suporte técnico no mercado de Informática. Lógica de Programação 35 Introdução à Lógica de Programação Algorítmica OBJETIVO: Ao término deste Capítulo você será capaz de definir e entender o conceito e as funcionalidades da lógica de programação e algoritmos computacionais. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante!. O que é Lógica? Damos início a este tópico debatendo um pouco sobre nosso cotidiano, isso mesmo, falaremos sobre as atividades que desempenhamos no dia a dia, como tomar café, ir à escola ou até mesmo ao trabalho. Toda ação que executamos, nos remete a um objetivo final, por exemplo, quando estamos com fome, sempre vamos atrás de saná-la, por meio da alimentação. Dessa forma, toda tomada de decisão em um algoritmo computacional deve ser baseada na lógica de atingir algum objetivo. O termo “lógica” está associado à análise que estuda as proposições e seus membros componentes. Já Forbellone (2005) diz que: a lógica pode estar relacionada com a correção do pensamento, pois uma de suas preocupações é determinar quais operações são válidas e quais não são, fazendo análises das formas e leis do pensamento. Ainda sob a ótica do autor, ela nos ensina a usar corretamente as leis do pensamento, ou seja, ensina a colocar ordem no pensamento. (FORBELLONE, 2005, p. 1) A lógica está interligada à solução de algum problema que traz características que não estão relacionadas à determinada situação. Por exemplo, se precisamos realizar cálculos matemáticos, e nossa calculadora não está realizando as quatro operações matemáticas de forma correta, então, temos um problema a ser resolvido. E é por meio da lógica matemática que conseguimos visualizar essa situação problemática Lógica de Programação 36 e trazer uma ou mais possíveis soluções. A lógica computacional traz um conceito de solução de problemas, podendo, muitas vezes, ser aplicada a diversas situações do nosso cotidiano. Outro exemplo: quando inserimos um endereço em um GPS e ele nos retorna diversas possíveis rotas, aplicamos certa lógica para escolher a rota mais adequada para nós, seja pela quilometragem ou pelo tipo de estrada. Figura 13 – Quando indicamos um endereço em um GPS e nos retorna diversas possíveis rotas são aplicadas certas lógicas para a escolha da mais adequada Fonte: Freepik A lógica não deve estar ligada apenas aos conceitos que norteiam a matemática. Para utilizá-la em benefício da solução dos problemas computacionais, precisamos aplicá-la aos recursos disponíveis nos sistemas computacionais. Por exemplo, a lógica necessária para trocar o pneu de um carro articula recursos como macaco, parafusos, pneu, roda etc. Já na programação do computador para ler um arquivo de dados e imprimir um relatório, envolvemos outros recursos, como memória, disco, dados, impressora e papel. Contudo, tanto em um caso quanto em outro, a forma de raciocinar é a mesma: juntar comandos e manipular recursos para atingir um objetivo específico ao final do processamento. Uma definição bastante completa sobre lógica de programação foi lançada por Forbellone (2005), que a conceitua como: o uso correto das leis do pensamento da ordem da razão e de processos de raciocínio e simbolização formais na programação de computadores, objetivando a racionalidade e o desenvolvimento de técnicas que Lógica de Programação 37 cooperem para a produção de soluções logicamente válidas e coerentes, que resolvam com qualidade os problemas que se deseja programar. (FORBELLONE, 2005, p. 14) A lógica de programação computacional é aplicada, por exemplo, na seleção e determinação das instruções que devem ser executadas para que o problema seja solucionado. Por meio de sua aplicação, podemos ter resultados lógicos que irão satisfazer nossas condições, ou seja, nenhuma instrução é inserida sem uma funcionalidade. DEFINIÇÃO: A lógica de programação, portanto, pode ser definida como a técnica necessária para nortear o desenvolvimento de um software, que deve seguir certas regras para atingir o seu objetivo. Algoritmos Computacionais Podemos fazer uso de variados modos para representar a solução de um problema, computacional ou não. Ao definir um conjunto de regras sintáticas para expressar raciocínios e operações necessárias à solução de uma classe de problemas, tem-se um algoritmo. Se tais problemas forem de cunho computacional, tem-se um algoritmo computacional. DEFINIÇÃO: Algoritmo computacional é uma visão esquemática sobre a solução de uma classe de problemas computacionais, podendo ser representado gráfica ou textualmente, por meio de um pseudocódigo escrito em uma pseudolinguagem. Para entendermos melhor o conceito de algoritmo computacional, vamos imaginar a representação gráfica do seguinte problema: decidir qual o maior entre dois números lidos pelo computador. Um problema Lógica de Programação 38 simples deve apresentar uma solução igualmente simples, portanto, podemos representar essa solução algorítmica de duas maneiras: graficamente ou textualmente, como apresentado na Figura 14 (MORAIS; AZEVEDO, 2017d). Figura 14 – Representação algorítmica graficamente por meio de fluxograma Fonte: Morais e Azevedo (2017d). Observe que a solução algorítmica adotada na Figura 14 está sendo representada graficamente por uma simbologia denominada “fluxograma”. Nessa solução, foram adotados comandos visuais, compreensíveis facilmente por qualquer um, de formabastante intuitiva. Contudo, para isso, foi necessário estabelecer um dicionário de comandos, que, nesse caso, contemplou conforme representado na Figura 15. Lógica de Programação 39 Figura 15 – Destaque para os comandos visuais do fluxograma, por meio do estabelecimento de um dicionário de comandos Marca o início ou o término de um algoritmo. Lê ou exibe um dado/informação. Executa um procedimento. Desvia o fluxo de procedimentos conforme a condição descrita. Desvia o fluxo de procedimentos para outro algoritmo. Fonte: Morais e Azevedo (2017d). Outro modo de representar uma solução algorítmica é por meio de textos, ou pseudocódigos. Do grego, “pseudo” significa falso, o que faz do pseudocódigo um código escrito em uma linguagem que, na prática, não existe. Em outras palavras, evidencia uma forma genérica de escrever um algoritmo, utilizando uma linguagem simples, compreensível por qualquer pessoa, sem que esta conheça a sintaxe de linguagem de programação. Transcrevendo o algoritmo esquematizado no fluxograma anterior, poderíamos escrever o seguinte pseudocódigo: Figura 16 – Pseudocódigo Fonte: Elaborada pelo autor (2021). Lógica de Programação 40 Perceba que ambas as representações algorítmicas conseguem solucionar o mesmo problema, com exatamente o mesmo ordenamento lógico. O que as diferencia é a semântica da linguagem. Enquanto na primeira solução foi adotada uma linguagem visual (fluxograma ou diagrama de blocos), na segunda foi utilizada uma linguagem natural, a própria língua portuguesa. Assim como toda atividade que desempenhamos no nosso dia a dia, algoritmizar uma solução computacional exige escolhas sábias. Ascencio e Campus (2012) destacam os seguintes passos: 1. Ler atentamente o enunciado, destacando os pontos mais importantes. 2. Definir os dados de entrada, ou seja, quais dados serão fornecidos. 3. Determinar o processamento, ou seja, quais cálculos serão efetuados e quais são as restrições para esses cálculos. O processamento é responsável pela transformação dos dados de entrada em informações de saída. 4. Estabelecer as informações de saída, ou seja, quais informações serão geradas depois do processamento. 5. Construir o algoritmo utilizando um dos tipos descritos anteriormente. 6. Testar o algoritmo realizando simulações. Podemos ter diversos algoritmos desenvolvidos de maneiras diferentes, ou seja, com etapas distintas, mas que solucionam o mesmo problema. Cada pessoa tem seu modo de pensar, dessa forma, não é obrigatório que todos tenhamos a mesma ideia, ou até mesmo executemos ações da mesma maneira. Lógica de Programação 41 Figura 17 – Podem existir vários algoritmos desenvolvidos de com etapas diferentes, mas que resolvem o mesmo problema Fonte: Freepik Conforme Manzano e Oliveira (2016), a norma ISO 5807-1985 para a definição e elaboração de diagramas de fluxos para a área de Desenvolvimento e Projeto de Software é a consolidação de duas normas anteriores: ISO 10282 e ISO 26363. SAIBA MAIS: Para se aprofundar nos temas desta Unidade, recomendamos o acesso à seguinte fonte de consulta. Para acessar, clique aqui. Segundo a informação da própria ISO 5807-1985, a definição e a elaboração de diagramas para a representação gráfica da linha de raciocino lógico a ser adotada não deve restringir o uso de aplicações ou soluções particulares. Uma vez que pode ocorrer a existência de vários tipos de soluções para os vários problemas de processamento de informação (MANZANO; OLIVEIRA, 2016). De maneira geral, existe uma enormidade de linguagens de programação, desde as mais simples e intuitivas (de alto nível), até as mais complexas e trabalhosas (de baixo nível). É importante salientar que algoritmos são muito necessários para servir de elemento cognitivo, ou seja, ajudar às pessoas no aprendizado da programação, tornando mais fácil o entendimento da lógica de programação. Lógica de Programação https://www.youtube.com/watch?v=8mei6uVttho 42 RESUMINDO: E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste Capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que independentemente de que linguagem seja adotada, para solucionar problemas computacionais é requerido do programador uma habilidade específica: a lógica de programação algorítmica. Não se trata de habilidade com matemática ou algo do gênero. Estamos falando de uma capacidade peculiar a todos os que conseguem visualizar soluções racionais para problemas do dia a dia. O raciocínio lógico, que é a base dessa habilidade, já é matéria cobrada em quase todos os editais de concursos públicos, já sendo ensinado em várias escolas de ensino fundamental e médio. Quem desenvolve essa competência é capaz de aprender rapidamente qualquer linguagem de programação, pois a diferença de uma linguagem para a outra está apenas na semântica e no dicionário de comandos. Programar computadores para os profissionais da área deve ser uma tarefa tão natural quanto escrever um pequeno manual sobre como trocar o pneu de um carro. Lógica de Programação 43 REFERÊNCIAS ASCENCIO, A. F.; CAMPUS, E. A. Fundamentos da programação de computadores. 3. ed. São Paulo: Prentice Hall, 2012. BROOKSHEAR, G. J. Ciência da computação: uma visão abrangente. 11. ed. Porto Alegre: Bookman, 2013. FARIAS, G.; MEDEIROS, E. S. Introdução à computação. Paraíba: Universidade Aberta do Brasil, 2013. FORBELLONE, A. L. Lógica de programação: a construção de algoritmos e estrutura de dados. São Paulo: Pearson, 2005. MANZANO, J. A.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. MÁQUINA diferencial e analítica (1791-1871): história dos computadores: pré-história. [S. l.: s. n.], 2018. 1 vídeo (6 min). Publicado pelo canal Marks Tuto. Disponível em: https://www.youtube.com/ watch?v=s8IKAJxl75U&ab_channel=MarksTuto. Acesso em: 7 fev. 2022. MORAES, P. S. Curso básico de lógica de programação. São Paulo: Unicamp, 2000. MORAIS, I.S.; AZEVEDO M. Lógica de programação: linguagens de programação. Recife: Unissau, 2017a. MORAIS, I.S.; AZEVEDO M. Lógica de programação: história dos computadores. Recife: Unissau, 2017b. MORAIS, I.S.; AZEVEDO M. Lógica de programação: infraestrutura dos sistemas computacionais. Recife: Unissau, 2017c. MORAIS, I.S.; AZEVEDO M. Lógica de programação: introdução à lógica de programação algorítmica. Recife: Unissau, 2017d. SOUSA, B. J.; DIAS JÚNIOR, J. J.; FORMIGA, A. A. Introdução à programação. João Pessoa: UFPB, 2014. TAVARES, A. L. et al. Engenharia de software: uma visão geral. Palhoça: Unisul, 2006. Lógica de Programação
Compartilhar