Buscar

Teoria Geral de Sistemas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 145 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 145 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 145 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Origem e história do algoritmo
 
Se você, estudante, considerar que os computadores eram em seu nascimento, nada mais do que sofisticadas máquinas de calcular, perceberá o quanto da sua estruturação se originou da matemática. A matemática e a computação sempre andaram juntas na ciência, e não simplesmente onde podemos ver: no caso dos computadores utilizados em extensos cálculos de fórmulas matemáticas diversas, mas também em sua construção lógica. 
 A computação digital nasceu de uma sequência de eventos históricos de evolução da matemática, mais especificamente dos algoritmos, sendo que hoje, estes algoritmos são considerados muito mais do que sua origem, mas sua base de estruturação lógica. 
Não se tem uma data de origem específica para os algoritmos, mas existem muitas linhas de pesquisa e historiadores que a colocam no período de 830 d.C. com a publicação do livro de álgebra, de autoria do matemático e astrônomo muçulmano Abu Abdullah Muhammad Ibn Musa al-Khwarizmi (780 d.C a 850 d.C.) Cujo nome curto seria al-Khwarizmi. De acordo com Wazlawick (2016, p. 13) 
Esta obra foi responsável pela popularização dos algarismos indianos (hoje conhecidos como arábicos ou indo-arábicos) na Europa e Oriente Médio, os quais eram bem mais fáceis de operar do que os números romanos, até então usados. O título do livro foi traduzido para o latim como “Algoritmi de numero Indorum” e assim a tradução para o latim do nome deste matemático passou a significar genericamente qualquer procedimento mecânico para realização de cálculos.  
 
Como podemos observar na imagem do livro (figura 1), a primeira página da tradução para o Latim do livro temos “Dixit algorizmi...”.  
 
Figura 01: Início do livro de al-Khwarizmi
De certa forma podemos compreender que a computação mecânica de cálculos não foi completamente transformada nos computadores digitais, apenas miniaturizada e aplicada com a ajuda da eletricidade. A base de funcionamento dos computadores modernos ainda respeita as leis matemáticas tais como desenvolvidas por al-Khwarizmi em suas técnicas, como as de adição e divisão em números longos (ensinado nas escolas atualmente). 
Entre outras contribuições, al-Khwarizmi mostrou como realizar adições e divisões com números longos, um procedimento (ou algoritmo) até hoje ensinado nas escolas, e que foi a base para a construção das primeiras calculadoras mecânicas. (WAZLAWICK 2016, p. 13) 
Esta postulação de al-Khwarizmi permitiu a estruturação da aplicação mecânica do processo de calcular, ou seja, deu subsídio a criação das primeiras calculadoras mecânicas, pois apresentou com seus números indo-arábicos uma forma muito mais elegante.  
As vantagens podem ser observadas no processo de soma de velocidade maior quando comparada ao processo quando feito usando algarismos romanos, por exemplo com a somatória de XIX + XXI = XL. As regras de soma para a notação romana são complexas:  
· Primeiramente os números devem ser descompactados, trocando-se IV por IIII, IX por VIIII etc.: XVIIII+XXI. 
· Depois eles são concatenados, ou seja, juntados: XVIIIIXXI. 
· Depois deve-se ordenar as letras da mais significativa para a menos significativa: XXXVIIIII. 
· Finalmente o número resultante é recomposto: XXXVIIIII = XXXVV = XXXX = XL. 
· Bem, a soma até que não era tão difícil, mas a divisão. (WAZLAWICK 2016, p. 13) 
 
Estamos falando de uma era da humanidade onde até mesmo a matemática estava passando por evolução, e com a notação indo-arábica, que era baseada em posições decimais, o avanço foi permitir somas feitas de forma automática, e assim como fazemos atualmente e ensinamos nas escolas, ou seja, da direita para a esquerda.
Devemos os avanços na computação a grandes estudiosos como al-Khwarizmi, mas que com o passar dos anos passou a ser referenciado de formas diferentes, portanto seu nome passou a ser transcrito e sua pronúncia suavizada, como Al-Karismi, Algarismi, até que chegou a algarismo, ficando conhecido como a nomenclatura que referenciava o sistema numérico que utilizamos até hoje.
O termo algoritmo está ligado a computação e também apresenta diversas publicações que o referenciam e o conectam a temas computacionais, embora apresente diversas descrições: de um conjunto de regras formais ou a solução de problemas, com fórmulas e expressões aritméticas.
 
Algoritmos computacionais
 
Do ponto de vista estrutural, algoritmos podem ser vistos como uma estrutura ideológica da mesma forma que são construídas as linguagens de programação dos computadores: desenham o caminho matemático para a solução de determinado problema. Portanto, podemos determinar que se trata de um conjunto de passos, que podem ser repetidos, encarregados de resolver um problema.
Mas de acordo com Manzano (2016) o termo algoritmo causa certa estranheza em alguns momentos, pois os que estranham costumam questionar se a grafia da palavra está correta. Mas os que estranham sua grafia, ignoram sua origem, no latim, e derivam do termo alegorismo, associado a ideia dos algarismos que por sua vez recebe influência do grego aritmós, que representa números.
De acordo com o dicionário Aurélio, conforme Manzano (2016, p. 25), o termo algoritmo é aplicado a computação e sua esfera matemática se associa a um processo de cálculo e de resolução de problemas diversos semelhantes e sem restrições. Já na ciência da computação, o termo representa um conjunto de regras e operações definidos e ordenados, que são destinados à solução de um problema, com um número de passos pré-determinado e finito.
Para Forbellone e Ebersoacher (2005 apud Morais et al. 2018, p. 10), “[...] algoritmo é um conjunto finito de regras, bem definidas, que nos levam à solução de um problema em um tempo finito.” Portanto, o algoritmo contém a descrição de um conjunto de ações, um grupo finito de passos, para que certo objetivo seja atingido. Para que se tenha um algoritmo, é preciso:
a) que se tenha um número finito de passos;
b) que cada passo esteja precisamente definido, sem possíveis ambiguidades;
c) que existam zero ou mais entradas;
d) que existam uma ou mais saídas;
e) que exista uma condição de fim, sempre atingida em tempo finito, para quaisquer entradas.
 
Com esta completa descrição, podemos compreender que, para a computação, os algoritmos representam a base da lógica de programação, que por sua vez representa tanto a coerência e racionalidade, pois a lógica de programação é fundamentalmente um processo explicitamente racional que conduz a construção de um software, que assim como o algoritmo, é capaz de construir sistemas que possam atingir seus objetivos.
Os algoritmos são criados e reconhecidos por sua lógica de programação. Segundo Forbellone e Eberspacher (2005 Morais et al. 2018, p. 10), a lógica está relacionada à coerência e à racionalidade; lógica de programação é a racionalização dos processos formais da programação de computadores e algoritmo é a sequência de passos que visam atingir um objetivo bem definido.
Em sua descrição os algoritmos podem ser descritos graficamente com o uso de diagramas de blocos, ou ainda em sua forma textual com as linguagens formais de programação de computadores. Neste sentido, temos a clara visão de que os algoritmos representam um processo de sistematização da resolução de problemas de forma sequencial e ordenada e para Berlinski (2002, p. 21 apud Manzano 2016, p. 25),
algoritmo é um método finito, escrito em um vocabulário simbólico fixo regido por instruções precisas, que se movem em passos discretos (1, 2, 3...), cuja execução não requer insight, esperteza, intuição, inteligência ou clareza e lucidez, e que mais cedo ou mais tarde chega a um fim. Um algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entradas e produz algum valor ou conjunto de valores como saída.
Para o mundo da computação, um algoritmo vai representar um conjunto formal de regras sequenciais e precisamente definidas, derivadas de uma compreensão lógica de um problema que precisa ser resolvido pelo programador queestá a construir determinado software.
Para quem cruza com as definições de algoritmo e de lógica de programação pode ser um desafio compreender e dar sentido a tudo, principalmente aos que não são do meio informático, mas vale ressaltar que as vezes a dificuldade reside em um conceito muito mais simples e facilmente incompreendido: o conceito de problema.
De forma puramente conceitual, um problema é uma proposta duvidosa, algo que pode apresentar diversas soluções, questões sem resposta, gera discussão, e que no universo computacional, representa a fuga a uma determinada regra que impede o alcance do objetivo.
 
Programação estruturada
 
A muitos anos, softwares eram desenvolvidos apenas quando se tinha um problema de grandes proporções a se resolver, com um volume de dados considerável e que exigia grande número de operações. Claro que hoje em dia existem softwares ou aplicativos (apps) que lidam com problemas triviais, de baixa complexidade e volume de dados praticamente negligente, mas que atendem a um número grande de usuários.
Mesmo com estas diferenças, os programas sempre sofreram com a necessidade de ter relevância para que saíssem do projeto para as “prateleiras” das lojas de informática. E temos que considerar outra dinâmica dos programas: sua complexidade aumenta de acordo com a complexidade do que pretende resolver, em outras palavras,
Seria ótimo poder apresentar pequenos programas e, ao final, dizer: “agora expanda isso para programas maiores”. Infelizmente não é assim. Um programa de mil linhas tem muito pouco a ver com um programa de 10 linhas. Programar não é uma atividade escalável, ou seja, estar preparado para escrever um programa de 10 linhas não vai prepará-lo para escrever um programa de 1000 linhas. (RIBEIRO 2018, p. 78)
Aplicar um programa de baixa complexidade a uma situação que exige mais etapas para sua resolução, significa, em termos práticos, ter que expandir seu código fonte, algo que é puramente textual. Este oneroso processo costumava causar problemas quando os programadores tentavam atalhos no processo de composição do código, de seu fluxo de execução. Tal situação seria o mesmo que um escritor orientar, em seu texto, que o leitor pulasse páginas,
Esse processo aconteceria por todo o livro, de acordo com outras condições externas. Várias leituras seriam possíveis, mas o difícil seria manter a coerência entre as várias possibilidades de leitura. Cada percurso de leitura deveria contar uma história coerente. Isso não é impossível de ser feito, mas envolveria um grande esforço mental do escritor para domar toda a complexidade da tarefa. Três ou quatro linhas de narrativa poderiam ser fáceis de organizar, mas, e se essas narrativas chegassem à casa das dezenas ou centenas em um único livro? Facilmente poderia haver alguma linha de narrativa sem sentido. (RIBEIRO 2018, p. 78)
Dentro da lógica e dos processos não se deve criar atalhos dentro dos programas de computador, pois com os diversos caminhos que o fluxo de execução pode seguir, existe uma necessidade de amarração a uma estrutura básica, de forma que permita manter a coerência do sistema mesmo em casos de ampliação do seu código para agregar novas funcionalidades.
Quando se adiciona códigos inadvertidamente, temos o chamado código espaguete, um emaranhado de código praticamente ilegível e pouco eficiente na resolução do problema que propõe. Para Ribeiro (2018, p. 78), é preciso pôr ordem nesse caos. (RIBEIRO 2018, p. 78)
Na programação estruturada, dividimos a solução do problema em blocos. Cada bloco executa uma ação que pode consistir em um teste, na repetição de comandos ou na obtenção de um resultado. Para manter a complexidade em um nível compreensível, cada bloco possui apenas uma entrada e uma saída para o fluxo da informação. Isso quer dizer que um bloco recebe alguma informação, processa-a e devolve algum resultado ao seu final. Note que falo em “blocos”. Cada bloco engloba uma ou várias ações efetivas para a solução do problema. Isso impede o surgimento do “código espaguete”. (RIBEIRO 2018, p. 78)
 
Quando se impõe uma estrutura, são estabelecidos blocos lógicos, cuja estrutura estabelece entradas e saídas únicas e com isso a sistemática de programação ganha melhor controle, mesmo em casos de programas complexos, o que, inclusive, facilita a depuração dos eventuais erros, como podemos observar na figura a seguir:
Figura 02:  Bloco de processamento.
Existe grande praticidade na construção de sistemas pela lógica dos blocos, que podem, inclusive, ser incorporados por blocos maiores, tal como as Matrioskas, aquelas bonecas russas que se encaixam umas nas outras. Mas o processo de incorporação de blocos mantém a dinâmica das entradas e saídas únicas e temos que onde um bloco começa, outro acaba de terminar seu processo.
Com a programação estruturada os blocos passam a apresentar regras de escopo bem definidas, e desta forma outras partes de um programa não podem inadvertidamente modificar variáveis ou redistribuir o fluxo de execução padrão. Podemos dizer que um dos destaques da programação estruturada é exatamente o de definir regras até mesmo para os desvios que podem ser realizados.
De acordo com Ribeiro (2018, p. 79), “O escopo de uma variável define em quais blocos a variável é visível, ou seja, o valor dessa variável só pode ser lido e às vezes modificado dentro daquele bloco.” O mesmo efeito ocorre com os desvios de execução, fazendo com que os desvios de um bloco voltem ao mesmo bloco antes que as demais instruções tenham início.
Dentro do contexto da programação estruturada podemos usar o termo paradigma de forma extremamente positiva, pois aqui, paradigma é programação estruturada, pois representa um modelo a ser seguido. Mas na programação também apresenta outros modelos, como o paradigma, a exemplo: a programação funcional, a programação orientada a eventos, orientada a aspecto e a orientada a objetos.
Com isso podemos perceber que cada linguagem de programação nasce para comportar melhor determinado paradigma, e de acordo com Aléssio (2017, p. 08) “Essa técnica permite uma posterior codificação em qualquer linguagem de programação de computadores, pois não se atinge um detalhamento de instruções ou comandos específicos, os quais caracterizam uma linguagem.” De acordo com esta linha de pensamento podemos conceituar como sendo o objetivo deste tipo de metodologia de projeto:
· Agilizar a codificação da escrita de programas.
· Facilitar a depuração da sua leitura.
· Permitir a verificação de possíveis falhas apresentadas pelos programas.
 
O destaque, neste processo, é a facilidade de se conduzir as alterações e atualizações dos programas, mantendo seus objetivos e qualidade.
 
Cozinha x Computador
 
Longe da computação existe um processo vital ao ser humano que requer a mesma obrigatoriedade de sequência lógica que a criação de um software demanda: a Culinária! Já observou nos sites do tema que as receitas costumam ter instruções muito precisas, finitas, e em blocos? No que isso se assemelha senão na programação estruturada?
Portanto algoritmos são as receitas não culinárias que o computador vai seguir para produzir o prato das informações de saída que o usuário vai saborear ne desta forma,
Toda receita culinária é dividida em dois blocos de ação, sendo o bloco ingredientes, no qual se definem os dados a serem usados e as quantidades que devem estar preparadas e separadas para a elaboração da receita, e o bloco modo de preparo, em que estão descritos o programa de ações e a sequência de atividades. (MANZANO 2016, p. 27)
 
Embora a execução de um prato ou receita possa variar ligeiramente, tanto os blocos de ingredientes e de preparo trazem informações explícitas, um roteiro de sua realização e podem ocorrer problemas com o resultado final, e até mesmo inviabilizar a entrega do prato ou receita. De qualquer forma, ignorar algumas das informações dos blocos de ingredientes ou de procedimentos resulta em um produto final distinto ao proposto, e para Manzano (2016, p. 27)
Qualquer pessoa de possede uma receita consegue, se seguir os seus passos, preparar a refeição indicada sem grandes dificuldades; essas pessoas são os cozinheiros. No entanto, existem outras que criam e inventam receitas, normalmente chamadas de mestres-cucas. Há ainda uma terceira pessoa, que simplesmente vai provar a refeição; é o usuário da receita preparada pela pessoa que cozinhou, que não é necessariamente um mestre-cuca, mas alguém que, ao longo de um determinado tempo, pode se tornar um.
Fica claro a grande semelhança que apresenta a produção de softwares com os processos de cozinha. Neste sentido temos o programador de computador no mesmo esquema que um chef, um “Mestre-cuca”, aquele encarregado de preparar o prato/sistema para a degustação/utilização do usuário. Assim como nos restaurantes, o usuário não apresenta grande curiosidade em saber como o prato foi feito, na programação o degustador não será ávido em conhecer o código fonte do seu sistema, desde que entregue o proposto.
Continuando a comparação cozinha e programação, não temos apenas os mestre-cucas, temos também os que montam com algoritmos pré-construídos, “São, na verdade, simples "cozinheiros", o que não é demérito nenhum, porém não têm experiência para resolver todos os problemas que possam surgir.” (MANZANO 2016, p. 27).
Em termos de nível de experiência, temos o programador/Mestre-cuca com grande bagagem em lógica de programação e muita experiência, de nível sênior e com isso capaz de criar seus algoritmos. Já em um nível imediatamente abaixo, temos o programador cozinheiro, com pouca sensibilidade na lógica de programação, pouca experiência e com isso denominado nível júnior.
Neste nível, o programador é capaz de desenvolver algoritmos simples, mas carece de supervisão de um programador sênior, e de acordo com Manzano (2016, p. 28):
O profissional pleno consegue desenvolver algoritmos de nível médio a complexo e necessita de supervisão e auxílio esporádicos de um programador sênior. Ao usar algoritmos prontos e escritos por outros programadores, gradativamente o programador júnior é preparado até se tornar pleno, e o programador pleno se prepara para chegar a um nível sênior e tornar-se, de certa forma, um "mestre-cuca".(MANZANO 2016, p. 28)
No menor escalão da programação temos o ajudante de cozinheiro, o programador ajudante que está em início de carreira, não assume criação de códigos complexos fazendo a montagem de programas com base em algoritmos prontos. Os algoritmos produzidos pelos ajudantes são simplificados e determinam a necessidade de supervisão de um programador sênior.
 
 
Atividade Extra
 
 
Que tal ligar o tema desta aula a algo que está no cotidiano de todo cidadão conectado: o youtube e seu algoritmo. São centenas de milhares de pessoas que tentam faturar com seus vídeos no youtube e existem os mais entusiasmados que buscam formas de aprimorar seus ganhos, e para tal partem para uma avaliação de como a plataforma monetiza seus youtubers destrinchando o código de seu algoritmo.
 
Desta forma recomendo a leitura do artigo que aborda como a plataforma de vídeos youtube calcula o valor para vídeos de música pelo link: https://core.ac.uk/download/pdf/268325698.pdf
 
 
Referência Bibliográfica
 
 
 
ALÉSSIO, Simone Cristina. Lógica e Técnicas de Programação: UNIASSELVI, 2017.
 
DAVY, Rodrigo. O que é a programação estruturada. 2019. Disponível em: <https://platzi.com.br/blog/programacao-estruturada/> Acesso em: 13/05/2021.
 
MANZANO, José Augusto N. G. Algoritmos: Logica para desenvolvimento de programação de computadores. - São Paulo: Érica, 2016.
 
MORAIS, Izabelly Soares de... et al. Algoritmo e programação. – Porto Alegre: SAGAH, 2018.
 
RIBEIRO, João Araujo. Introdução à programação e aos algoritmos. - Rio de Janeiro: LTC, 2019.
 
WAZLAWICK, Raul Sidnei. História da computação. – Rio de Janeiro: Elsevier, 2016.
Ir para questão
· 
· 
· 
· 
· 
· 
Conceitos de Lógica de Programação
De forma geral a lógica representa dois aspectos: o estudo normativo e filosófico do raciocínio, e em outro, estuda os pensamentos em geral, e desta forma temos que não se constitui em um único conceito fechado, mas que se admite estar ligada a matemática, com a lógica formal, além de relacionada diretamente a toda e qualquer área do conhecimento e com isso,
Inicialmente, era ligada à matemática (lógica formal) e, atualmente, está relacionada a todas as áreas do conhecimento humano. Podemos relacionar a lógica 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. Como filosofia, ela procura saber por que pensamos assim e não de outro jeito; como arte ou técnica, ela nos ensina a usar corretamente as leis do pensamento (FORBELLONE; EBERSPACHER, 2005; MORAIS 2018, p. 09)
 
Dentro deste universo temos o algoritmo, ou seja, um conjunto de passos que orienta a realização de determinada tarefa, e que embora não seja explicitamente ou obrigatoriamente ligado a tecnologia, a todo momento alguma forma de algoritmo é criada em algum lugar.
Os algoritmos são, em essência, construções de pura lógica, pois também possuem (ao menos deveriam possuir) coerência e racionalidade. Para a lógica de programação, o algoritmo representa processos racionalizados formais que tem a intenção de alcançar certos objetivos. Neste universo entram em cena os números, parte do que viabiliza a lógica atual de programação, e que apresentam os seguintes tipos:
· Inteiros: é um número que não possui casas decimais; por exemplo, a idade de uma pessoa ou uma quantidade de itens em estoque.
· Real: é um número que possui casas decimais, ou seja, é um número fracionário; por exemplo, a altura de uma pessoa ou o peso de um determinado produto.
· Literal ou String (Alfanuméricos): são os textos, que podem conter letras, números e caracteres especiais. Não são utilizados para cálculos.
· Booleano (lógicos): é um dado que só pode conter 2 informações (verdadeiro ou falso. (MORAIS, 2018, p. 11)
 
Dentro da lógica de programação os números entram nas expressões, que assim como na matemática, são as sequências de operações feitas através de representações simbólicas, ou seja, entre operadores e operandos, buscando um resultado. Portanto, os algoritmos se fazem valer de dois tipos de expressões: as lógicas e as aritméticas. As expressões aritméticas possuem operadores aritméticos e operandos constantes, mas variáveis do tipo inteiro ou real. A seguir temos os operadores aritméticos:
· Soma:                             +
· Divisão:                          /
· Quociente de divisão inteira:     Div
· Radiciação:                     //
· Subtração:                      -
· Multiplicação:                            *
· Resto da Divisão:            Mod (MORAIS, 2018, p. 13)
 
A seguir temos um exemplo que demonstra uma divisão aritmética em forma lógica:
· 10 div 3 = 3 10 mod 3 = 1 3 div 5 = 0
· 25 div 5 = 5 25 mod 5 = 0 3 mod 5 = 3
 
Figura: Exemplo de operação de Divisão aritmética
As funções matemáticas, dentro da lógica de programação, vão realizar cálculos de dados entregues pelo usuário e cujos tipos mais comuns constam a seguir:
Quadro: Funções matemáticas
Tanto para a matemática pura, quanto dentro da lógica de programação existe a precedência entre os operadores, que indicam, dentro de uma função, quais operadores são acionados primeiro, o que se feito em qualquer ordem afeta o resultado invalidando a operação. Com isso temos que nas funções, devem ser executados os cálculos primeiro em:
Parênteses mais internos, em seguida
Funções matemáticas, onde primeiro vem:
Multiplicação e divisão; seguido das demais
Soma e subtração. (MORAIS, 2018, p. 14)
Por fim, se a função apresentar diversos operadores com a mesma precedência, o correto será aplicar e executar as operações no sentido da esquerda para a direita, conforme constam na função. A seguir temos alguns exemplos de como aplicar a precedência dos operadores:
1. 5 + 9 + 7 + 8 / 4
5 + 9 + 7 + 2 = 23
1. 1 - 4 · 3 /6 - 2 · 3
1 - 4 · 3 / 6 - 8
1 - 12 / 6 - 8
1 - 2 - 8 = -9
1. 3 · 2 - 4 / 2 + abs (5 - 3 · 5) / 2
3 · 2 - 4 / 2 + abs (5 - 15) / 2
3 · 2 - 4 / 2 + abs (-10) / 2
3 · 2 - 4 / 2 + 10 / 2
9 – 4 / 2 + 10 / 2
9 - 2 + 5 = 12 (MORAIS, 2018, p. 14)
 
Podemos concluir que a lógica de programação tem sua base na lógica da matemática e com isso vai usurpar de muitas regras comuns em ordem de manter coerente seus códigos, criando programas sofisticados e de qualidade.
 
 
Linguagens de Programação
 
 
A lógica de programação, a matemática, os algoritmos somados levaram a criação das linguagens de programação e com isso podemos dizer que toda a produção de software de décadas atrás passou a ser consideravelmente acelerada, pois uma linguagem de programação representa um método padronizado, um conjunto de regras. E na verdade esta criação humana não é nada nova, pois
Existem relatos de linguagens de programação muito antes de 1940, que foi quando as primeiras linguagens de programação modernas e os computadores começaram a surgir. As linguagens de programação no começo eram códigos matemáticos. A ideia de uma linguagem de programação era um código especializado para uma aplicação. As linguagens de programação surgiram da evolução da lógica matemática, no qual abstraía conceitos complexos da matemática e podia ser utilizada para resolver problemas específicos. (BERTOLINI 2019, p. 13)
 
Em muitos aspectos o processo de criação de um sistema, ou seja, da programação de um computador, tem similaridades com a estrutura dos projetos administrativos, pois começa com a análise da necessidade do cliente e de que forma o processo pode ser traduzido em instruções de máquina. Com isso, a primeira etapa ocorre na concepção do próprio programador a respeito de como ele imagina que deve usar de seus conhecimentos e da linguagem de programação, para dar vida ao programa.
Com isso o programador escreve seu diagrama de blocos, o que o permite realizar o pseudocódigo, ou seja, a linguagem de projeto de programação. A próxima etapa será a codificação em si, onde o programa recebe suas primeiras linhas de comando em português estruturado, que de acordo com Manzano (2016) representa uma linguagem de programação estruturada, mas orientada a objetos informal, pois não gera um software real. Apenas com uma linguagem de programação formal o software é criado.
É possível que existam mais de 700 diferentes linguagens de programação em uso no planeta hoje, ou seja, muito mais linguagens de programação que idiomas falados. Claro que existem as linguagens mais difundidas, mais populares, mas se forem levadas em conta todas elas, até as exclusivas de algumas empresas, o número certamente passa das 2.500. O que é argumento irrelevante para Manzano (2016, pg. 40), pois,
Na prática computacional não importa a linguagem de programação formal existente, pois qualquer programa escrito em qualquer linguagem deve ser traduzido para ser executado em um computador segundo a linguagem interna do próprio computador, que é baseada num formato binário. Assim sendo, um programa escrito em Pascal, C, C++, Assembly ou outra linguagem qualquer deve ser traduzida para o computador para nele ser executada. A tarefa de tradução de uma linguagem formal para a máquina poderá ser feita por um compilador ou interpretador.
 
Se pensarmos na programação do ponto de vista de seu produto final, vamos reconhecer o computador pessoal como sendo um pacote de instruções ordenadas (ao menos sua parte lógica), que condicionam o que pode e como pode fazer algo. Neste sentido, os programas podem ser percebidos como sendo os responsáveis pela manipulação dos dados do usuário para com isso fornecer informações e até mesmo outros dados. Portanto os computadores dependem que lhes sejam informados os dados e os programas capazes de manipular tais dados.
Isso é uma regra geral, uma lógica mais profunda na programação, ou seja, todo computador, independentemente de seu hardware ou software, é construído para manipular dados através de funções por ele executadas. Mas vale ressaltar que entre uma linguagem e outra existirão certas ações que poderão ou não ser executadas, mas não podemos pensar neste aspecto como somente uma questão de qualidade ou falta de, pois
É errado dizer que uma linguagem não presta e que outra é melhor. Não existe esta possibilidade, pois cada linguagem de programação atende certa classe de problemas. Assim sendo, uma linguagem excelente para solucionar certo problema pode ser péssima para solucionar outro tipo de problema. A ciência da programação está em saber qual é a melhor linguagem para aquele tipo de problema e para responder a esta questão é que existem os analistas de sistemas, pois não cabe ao programador traçar este tipo de julgamento. Um analista de sistemas deve possuir entre suas várias competências, a capacidade de perceber e orientar qual é a melhor linguagem para a classe de problema que efetuou sua análise.
Assim como qualquer produto ou serviço que for desenhado para servir a um propósito geral (pense nas roupas tamanho único, por exemplo), existem linguagens de programação de uso geral que terão eficácia em uma grande variedade de aplicações, mas que em casos mais específicos podem não oferecer a verdadeira solução ao problema.
Com esta profusão de linguagens, é preciso uma classificação que facilite a sua escolha pelos programadores, com isso podemos dividir em dois grandes grupos: as de estilo dinâmico e as de estilo estático.
As linguagens tipificadas como dinâmicas são as que apresentam a capacidade de escolher o tipo de dado de acordo com o dado em si, assim como pode ser observado no PHP. “Como exemplo de linguagens de estilo estático podem ser citadas as linguagens Pascal, C, C++, entre outras, e como linguagens de estilo dinâmico podem ser citadas as linguagens Lua, Classic BASIC, entre outras.” (MANZANO 2016, p. 41)
Dentro do universo da programação, o bom programador, o que se diz experiente, jamais vai levantar a bandeira de uma única linguagem de programação como sendo sua única forma de se desenvolver um sistema, pois no final das contas, seu conhecimento lhe permite utilizar ao menos todas as mais populares, com grande confiança.
 
 
Tipos de dados (primitivos)
 
 
A razão de existir de um programa não é necessariamente seu objetivo, após compilado, e sim sua capacidade de lidar com dados. Neste sentido devemos compreender que existem diversos tipos de dados. De acordo com Sebesta (2019) podemos conceituar os tipos de dados como uma coleção de valores de dados junto com um conjunto de operações definidas sobre estes dados.
Vale ressaltar que os sistemas tendem a realizar suas tarefas com maior eficiência se os tipos de dados forem bem compreendidos e isso sendo utilizado para a escolha da melhor linguagem de programação que se adapte ao problema a ser tratado, trocando em miúdos, o tipo de dado certo significa sua maior semelhança com o mundo real.
Nesta dinâmica temos os tipos de dados primitivos, aqueles que não são definidos em termos de outros dados e são compatíveis com a esmagadora maioria das linguagens de programação. E por um lado, de acordo com Sebesta (2019), temos os tipos primitivos reflexo do hardware, como os tipos inteiros, e por outro lado temos os que exigem algum suporte externo ao hardware em ordem de serem implementados.
Os tipos numéricos são a base de constituição das primeiras linguagens de programação, mas que ainda desempenham um papel de destaque nos tipos suportados nas linguagens de programação modernas. O quadro a seguir resume os tipos de dados primitivos:
Quadro 01: Tipos Numéricos
Os tipos de dados primitivos mais simples são os booleanos, pois sua faixa de valores tem apenas 2 elementos: o verdadeiro e o falso. A introdução dos tipos booleanos foi no ALGOL 60 assim como em praticamente todas as outras linguagens gerais desde este período, exceto na C89.
A linguagem C89 usava expressões numéricas como condicionais. Mas existe uma diferenciação no C99, o fato de que usam o tipo booleanoe com isso são capazes de trabalhar com expressões numéricas no lugar das booleanas. E “Tipos booleanos'' são geralmente usados para representar escolhas ou como flags em programas. Apesar de outros tipos, como inteiros, poderem ser usados para tais propósitos, o uso de tipos booleanos é mais legível.” (SEBESTA 2019, p. 239)
 
Um valor booleano poderia ser representado por um único bit, mas, como um único bit de memória não pode ser acessado de maneira eficiente em muitas máquinas, eles são armazenados na menor célula de memória eficientemente endereçável, um byte.
Apenas um bit é necessário para que um valor booleano possa ser representado, mas não se constitui um sistema eficiente e necessite acessar sua memória bit por bit. Algo que também é armazenado pelos computadores são os caracteres. Uma das codificações numéricas dos caracteres mais popular é o Padrão Americano de Codificação para Intercâmbio de Informação (ASCII – American Standard Code for Information Interchange) de 8 bits, trabalhando com a faixa entre o valor 0 e o 127 era capaz de codificar até 256 caracteres.
Existem muitas disciplinas de diversas matrizes do ensino superior que vão dialogar sobre algum efeito da globalização, e aqui não é diferente, pois com a globalização acelerou a adoção de computadores nas empresas e em suas operações de negócios internacionais, o que demandou uma mudança na escolha do conjunto de caracteres ASCII.
Com isso surge em 1991 o padrão UCS-2, criado pelo Unicode e que representava um conjunto de caracteres de 16 bits que englobava a maioria das linguagens naturais existentes na época, como por exemplo, o Cirílico da Sérvia, o Tailandês, etc. Um fato interessante é que a primeira parte, os 128 primeiros caracteres do USC-2 é a mesma do ASCII e teve o Java como primeira linguagem a fazer uso de sua codificação Unicode, seguido por JavaScript, Python, Perl, C# e F#. (SEBESTA 2019)
Nos anos seguintes nasceu o USC-4 em cooperação entre a Unicode e a ISO (International Standards Organization, ou Organização Internacional de Padrões). O UCS-4 apresentava codificação de 4 bytes.
Expressões Lógicas
 
De forma geral podemos definir as expressões lógicas como sendo expressões algébricas com operadores lógicos e operandos que podem ser relacionais ou variáveis lógicas.
Neste sentido, de acordo com Moraes (2018, pg. 15) as “Expressões lógicas são aquelas cujos operadores são lógicos e/ou relacionais e cujos operandos são relações e/ou constantes e/ou variáveis de tipo lógico.” Portanto, os resultados possíveis de uma expressão lógica somente podem assumir uma constante lógica sendo F para falsa ou V para verdadeira. Na figura a seguir estão descritos os operadores relacionais, responsáveis pelas operações das expressões lógicas:
Figura 1: Operadores relacionais
Exemplo de cálculo seguindo as prioridades e apresentando o uso de operadores relacionais:
· 2 + (8 – 7) > = 3 · 6 - 15
· 2 + 1 > = 18 - 15
· 3 > = 3 V
Quando certas condições necessitam de que dois ou mais relacionamentos lógicos precisam ser verdadeiros, entra em cena o operador lógico, e desta característica podemos tirar sua forma de financiamento. O quadro a seguir apresenta os símbolos e funções dos operadores lógicos:
Figura 2: Operadores lógicos
A seguir temos exemplos de operações feitas com os operadores lógicos:
Quadro 1: Exemplos de operadores óticos
Portanto, o operador lógico NÃO, de acordo com Moraes (2018, p. 17) pode ser utilizado quando é preciso estabelecer por fato que “uma determinada condição dever ser não verdadeira ou deve ser não falsa. O operador lógico NÃO se caracteriza por inverter o estado lógico de uma condição, isto é, inverter o resultado lógico da condição.”. Observe o exemplo de sua aplicação a seguir:
· Algoritmo prog1
· Var A, B, C, X: Inteiro
· Início Ler (X, A, B)
· SE NÃO (X > 5)
· Então C: = (A + B) · X Se não
· C: = (A – B) · X
· Fim-SE
· Escrever (C)
· Fim
 
Sendo a lógica matemática a base para a lógica da programação, temos na tabela verdade uma importante ferramenta capaz de apresentar o valor lógico de qualquer proposição e com isso conhecer seu status, se é verdadeira ou falsa, e com isso, temos que “A tabela verdade é o conjunto de todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas, as quais se encontram em apenas duas situações, é um conjunto de operadores lógicos.” (MORAIS 2018, p. 17).
Figura 3: Conjunto de oportunidades dos Operador E, OU e NÃO
Sobre as prioridades dos operadores lógicos, temos que NÃO sempre precede OU, e entre todos os operadores lógicos temos que preceder os parênteses mais internos, seguidos de funções matemáticas, operadores aritméticos, relacionais e lógicos.
 
 
Atividade Extra
 
 
Está no centro das atenções os algoritmos das principais redes sociais e vem se destacando quem compreende seu funcionamento. Esta dica é para quem deseja saber mais sobre como funciona o algoritmo do Instagram, basta acessar o vídeo: https://www.youtube.com/watch?v=TrbuQ0iehRo
 
 
Referência Bibliográfica
 
 
BERTOLINI, Cristiano... [et al.]. Linguagem de programação I.Santa Maria, RS: UFSM, NTE, 2019. Disponível em: <https://www.ufsm.br/app/uploads/sites/358/2020/02/linguagem-1.pdf > Acesso em: 13/05/2021.
 
MANZANO, José Augusto N. G. Algoritmos: Logica para desenvolvimento de programação de computadores.São Paulo: Érica, 2016.
 
MORAIS, Izabelly Soares de... [et al.]. Algoritmo e programação (engenharia). Porto Alegre: SAGAH, 2018.
 
SANTOS, Marcela Gonçalves dos. Algoritmos e programação.Porto Alegre: SAGAH, 2018.
 
SEBESTA, Robert W. Conceitos de linguagens de programação.Porto Alegre: Bookman, 2018.
Ir para questão
· 
· 
· 
· 
· 
· 
Observação: este site inclui um sistema de acessibilidade. Pressione Control-F11 para ajustar o site aos deficientes visuais que usam um leitor de tela; Pressione Control-F10 para abrir um menu de acessibilidade.
· Pressione Enter para acessar acessibilidade para cegosque usam leitores de tela
· Pressione Enter para Navegação pelo Teclado
· Pressione Enter para acessar o menu de acessibilidade
Evolução Histórica: do x86 ao PC Quântico
 
 
Os últimos anos mostraram dois fatos importantes sobre a tecnologia: que com boa pesquisa novos produtos são desenvolvidos com grandes melhorias, e que algumas tecnologias estão em seu limite de desenvolvimento, ao menos com os materiais comumente aplicados.
Os processadores dos computadores são um grande exemplo dessa dualidade entre evolução e limitação em seu desenvolvimento, e por este motivo, por seu papel central na evolução do computador pessoal que ele foi escolhido para este tema. De acordo com Ferreira Júnior (2017, p. 25), “A evolução da tecnologia é um tema que deve ser discutido em toda instância da aprendizagem, pois devemos conhecer o passado para compreender o presente e principalmente, conseguir projetar o futuro.”
O primeiro computador eletrônico foi lançado por volta de 1946 e foi incorporado à vida humana de tal forma que a cada ano demanda de seus desenvolvedores, muita evolução e criatividade. Do ponto de vista dos mais jovens a computação apresenta evolução bastante significativa, mesmo tendo nascidos na era dos computadores. E conforme Ferreira,
Os jovens conhecendo seu passado conseguem visualizar e calcular seu futuro, conseguem imaginar que mais produtos e inovações tecnológicas estão por vir e que, no futuro, os jovens da próxima geração também vão considerar os atuais equipamentos como ultrapassados e não entenderão como serão seu funcionamento. Os jovens desta geração dos anos 2010-2020 conseguem entender que serão os responsáveis pelas criações do próximo futuro? (FERREIRA JÚNIOR 2017, p. 25)
 
Vale ressaltar que a evolução de uma tecnologia analógica para a digital ocorreu de forma acelerada e permitiu o desenvolvimento de uma série de produtos e de novas tecnologias de comunicação. Após a segunda guerra mundial muita coisa mudou em um mundo temporariamente fragilizado, e com o quadro a seguir podemos compreender os principais momentos históricos:
Quadro 01– Evolução da informática
Se os computadores foram o grande lançamento no ano de 1946, a sua evolução vem promovendo grandes e sistemáticos lançamentos neste período moderno. Estes computadores sempre operaram se fazendo valer da divisão lógica do valor de 0 para falso e 1 para o verdadeiro, algo que foi praticamente ignorado pela computação quântica. Estes zeros e uns, os bits, de acordo com Santino (2019), são uma dualidade como já vista no grande ENIAC até os dias de hoje e,
[...] e tem sido o suficiente para inúmeras tarefas que hoje realizamos com maior agilidade graças a computadores e smartphones. No entanto, existem alguns desafios que a computação normal jamais será capaz de resolver, simplesmente por não haver poder suficiente para resolvê-los. Para isso, a ciência trabalha na evolução do computador quântico. (SANTINO 2019, Online).
Este computador quântico tem seu nome originado da física quântica que extrapola a fronteira dos dois bits, falso e verdadeiro e desta forma amplia e muito as possibilidades, a velocidade, a confiabilidade e o apoio à pesquisa científica.
 
 
 
Elementos Básicos da Arquitetura Computacional
 
 
De forma geral os computadores são bastante padronizados, ao menos nos itens que os constituem visualmente como: os monitores, o teclado, dispositivos de entrada, dispositivos de armazenamento, processador e que oferecem um ambiente para que softwares sejam oferecidos.
A diferenciação entre um computador e outro está na potência, na capacidade de seus componentes em realizar transações, requisições diversas e até mesmo nas formas de entrada e saída disponíveis. Cada profissão, cada cargo demanda um pacote de funcionalidades e desempenho específicos e que são utilizados para desenhar o sistema que os vai dar suporte.
Na profissão de programador é praticamente obrigatório que se deva conhecer a estrutura dos computadores, o funcionamento, ao menos básico, de suas partes, afinal, da somatória destas partes que nasce o equipamento que vai permitir que os sistemas por eles desenvolvidos, sejam executados a contento, portanto,
Para cada função que o computador executa existe uma série de placas e equipamentos que a torna possível. Cada função básica também pode ser chamada de Unidade, sendo assim temos Unidade de Entrada, Unidade de Saída, Unidade de Processamento e Unidade de Armazenamento, cada unidade com seus respectivos equipamentos e placas (OLIVEIRA, 2007; TANGON 2016, p. 09).
 
A base do funcionamento de um computador é seu código fonte, sua linguagem de máquina, os zeros e uns de seu código binário, mas que passam por compiladores que as traduzem numa linguagem que possa ser melhor trabalhada pelo usuário final que, em geral, não possui expertise quanto a linguagens de programação.
De forma estrutural podemos dizer que os computadores trabalham com as informações neles inseridas, realizando o processamento requerido pelo usuário que pode resultar em novas informações e que são oferecidas ao usuário em diversas formas e dispositivos de saída como monitores, caixas de som, impressoras, etc; e “Essa informação pode, ao final, ser descartada ou armazenada através de um disco rígido ou qualquer outra mídia usada para gravação e leitura de dados.” (OLIVEIRA, 2007; TANGON 2016, p. 10). Existem quatro funções básicas de um computador:
· Unidade de Entrada – Na qual podemos inserir/entrar com dados no computador. Exemplo: teclado, mouse, telas sensíveis ao toque (touch screen).
· Unidade de Saída – Em que os dados podem ser visualizados. – Exemplo: telas e impressoras.
· Unidade de Processamento – Onde acontece o processamento das informações, Unidade Central de Processamento (CPU – Central Processor Unit). Exemplo: processador do computador.
· Unidade de Armazenamento – Memórias (RAM, HD, discos externos). (SOUZA FILHO; ALEXANDRE, 2014; TANGON 2016, p. 10).
 
Fica fácil perceber o computador como um sistema de dispositivos de entrada e saída assistidos por um dispositivo que é capaz de trabalhar com inúmeros tipos e volumes de dados e cujo funcionamento pode ser melhor organizado, diagramado na figura a seguir:
Figura 1: Funções básicas de um computador
Se o nome já não deixa dúvidas de sua importância, a Unidade Central de Processamento, ou CPU (Central Processor Unit), é a peça central de qualquer computador e que executa os comandos dos usuários, e que de acordo com Tangon, 2016, p. 11)
A CPU tem a função de receber a entrada de dados e, após o processamento, devolver o resultado através de uma saída de dados. Além disso, ela gerencia se as informações serão armazenadas nas memórias do computador, se estas memórias serão as de trabalho apenas ou se serão gravadas em discos, a fim de serem usadas em outros momentos.
 
O grande limão desta história é o fato de que muitos usuários, no mundo todo, não escapam de confundir o processador do computador, com a caixa que abriga os diversos componentes diretamente encarregados em realizar os processamentos de mandados, inclusive a CPU, mas obviamente não somente ela.
Partindo para a área do computador mais vista, temos as unidades de entrada, os meios com os quais o usuário interage com o sistema, lhe demandando o tratamento de dados para posterior consulta. São os dispositivos de entrada mais comuns o teclado, o mouse, dentre muitos outros, mas que com o passar dos anos e com a evolução da computação, nasceram novos dispositivos, conforme Tangon (2016, p. 12),
Com a evolução da tecnologia de computadores, novos meios de entradas foram sendo adicionados a essa lista, tais como scanners, leitores de código de barra, entradas de áudio e vídeo, e o advento da internet trouxe uma forma de interconexão entre computadores pela qual dados são continuamente recebidos e enviados, em constante entrada e saída de dados e informações
 
Assim, tão importante quanto as unidades de processamento e entrada de dados são as unidades de saída, pois de nada adianta processar grandes quantidades de informação sem uma forma de exibição. E por dispositivos de saída, os que exibem os resultados do processamento dos dados enviados pelo usuário, e processados pela CPU, temos o monitor, as impressoras, e de acordo com Souza Filho e Alexandre (2014, TANGON 2016, p. 12),
Outra forma usada para a saída de dados são as saídas de som, e em sistemas mais avançados podemos ter saídas com imagem e som digitais, caso dos mais modernos sistemas de computação gráfica, empregados amplamente na criação de jogos e produções de diversos de filmes
 
Por se tratar de uma relação entre sistemas, usuários e dados, este último aspecto apresenta grande destaque e evolução nas últimas décadas em termos de ferramentas cada vez mais sofisticadas de armazenamento (como discos rígidos, SSD´s) e até mesmo de e execução de software como as memórias RAM.
 
O Computador como Ferramenta
 
 
Por volta do ano 2021 já soa um pouco estranho tratar dos computadores como ferramentas, principalmente pelo fato de que a cada ano a capacidade de computação vem sendo incorporada em diversos outros aparelhos e dispositivos. Já faz muitas décadas que o homem se acostumou a ter nos computadores uma excelente ferramenta de trabalho.
A muitos anos antes de Cristo, o homem dominou o fogo, podemos afirmar que outro grande salto foi dado com o domínio do silício que deu origem a uma era de desenvolvimento de sistemas computacionais que mudaram para sempre a forma com que trabalha, se diverte, faz pesquisa, busca melhor qualidade de vida, e de acordo com Delgado (2017, p. 03):
O desenvolvimento da humanidade tem sido marcado por inventos, descobertas e criações históricas, como a invenção da roda, a descoberta da eletricidade e a invenção do motor, quer seja o de combustão, quer seja o elétrico. Mas numa história de acontecimentos importantes, que se têm sucedido a uma cadência cada vez mais rápida, nenhum teve impacto mais bombástico, tanto em termos de abrangência como de rapidez de mudança face à escala humana, do que o aparecimento do computador, em particular, o do computador pessoal. (DELGADO 2017,p. 03)
 
Não existe dúvida que o computador é uma ferramenta extremamente avançada e sofisticada, com o assustador poder de mudar praticamente tudo ao seu redor, e seu impacto rivaliza com o de outra grande invenção: a televisão que para Delgado (2017, p. 04)
A televisão pode ser mais midiática, mas o computador supera-a no que se refere ao impacto nos mais variados aspectos da sociedade. Com o advento da televisão de alta definição e da melhoria das comunicações, a televisão e o computador parecem estar em “rota de colisão”, juntando-se à capacidade de distribuição de informação multimídia, de interatividade global e de processamento local de informação.
A evolução do computador como ferramenta ganhou recentemente um avanço talvez desejado desde a construção dos primeiros computadores, a inteligência artificial. Mesmo com tanta sofisticação, os computadores levaram décadas para receber a versão digital da inteligência humana emulada. Mas a geração atual de computadores ainda não usa Inteligência Artificial em larga escala, fazendo uso em algumas instâncias como certos sistemas e em aplicações específicas como aplicativos de telefones móveis. Para Delgado (2017, p. 05) podemos conceituar a Inteligência Artificial (IA) como sendo,
[...] um conjunto de técnicas que permite a um programa de computador aprender conhecimento e inferir daí novas conclusões, consegue dotar o computador de uma inteligência aparente, em particular quando conjugada com a Robótica, de forma a permitir a construção de sistemas autônomos que decidem sozinhos perante situações não programadas previamente. No entanto, ainda estamos longe da visão do computador (comum nos filmes de ficção científica) que consegue manter um diálogo e um raciocínio como se fosse uma pessoa.
 
Uma das formas de se classificar algo como inteligente é de se detectar a capacidade de aprendizado, com isso já existem diversos pesquisadores e programadores capazes de construir sistemas que simulam, não somente a capacidade de aprender, mas seguem a mesma estrutura do cérebro humano e com isso criam as chamadas redes neurais. Estas redes neurais vão se tornando ferramentas vitais em certos ramos, devido a sua elevada capacidade de processamento.
Na sociedade atual está com uma, talvez, alarmante dependência da computação, muito além do que se poderia observar no mundo dos negócios a uma década atrás e de acordo com Pessoa e Machado (2019, p. 233)
[...] o uso do computador ocupa todos os ambientes da sociedade, sendo inegável que seu uso exerce relevante importância no contexto social de todas as pessoas. A inserção desta tecnologia em diferentes contextos modifica as ações dos sujeitos e ressignifica práticas tradicionais, uma vez que possibilita comunicação, interação virtual, pesquisa, dentre outras formas de uso.
Podemos dizer que os que não nasceram com a computação tão avançada como é hoje, conseguem ver melhor sua porção ferramenta, já aqueles que nasceram na última década e os da década anterior já não conseguem facilmente dissociar a computação ferramenta da computação entretenimento dada sua praticamente completa integração com a vida moderna.
 
O Futuro dos Computadores
 
 
 
Se for feita uma pesquisa a respeito do que as pessoas pensam ser o futuro dos computadores muitas respostas serão centradas em argumentos como seu tamanho, capacidade de bateria, de processamento, talvez até hologramas, mas dificilmente entrará em pauta temas como a real e atual revolução tecnológica que de fato vai redesenhar por completo o computador: a computação quântica.
De acordo com Russon (2017, online) o computador quântico é uma máquina capaz de,
[...] solucionar problemas computacionais muito difíceis de forma incrivelmente ágil. Em computadores convencionais, a unidade de informação de "bit" e pode ter um valor 1 ou 0. Seu equivalente no sistema quântico – o qubit (bit quântico) – pode ser 1 e 0 ao mesmo tempo. O fenômeno permite que múltiplos cálculos sejam realizados simultaneamente. (RUSSON 2017, Online)
Em termos de poder de processamento bruto, um computador quântico pode ser até 3 milhões de vezes mais rápido que um computador comum e por este motivo seu maior uso, no momento, é na área da pesquisa científica e acadêmica.
A disponibilidade para a venda e até mesmo para o desenvolvimento de computadores pessoais quânticos depende de superar algumas dificuldades e simplificar processos, pois “No entanto, qubits precisam ser sincronizados usando um efeito quântico conhecido como entrelaçamento, o que Albert Einstein chamou de uma "ação fantasma à distância". (RUSSON, 2017, Online)
Em sua forma atual, tanto no aspecto construtivo quanto na oferta como serviço, o computador quântico apresenta uma série de aplicações, como a modelagem de reações químicas que ajudam na descoberta de novos medicamentos, no desenvolvimento de novos aparelhos médicos para exames como radiografias e tomográficas e muito mais.
Um grande avanço na segurança online está ocorrendo com o desenvolvimento da criptografia quântica, algo de grande importância para o comércio eletrônico pois o nível de criptografia que pode ser gerado por um computador quântico jamais poderá ser quebrado. De acordo com Russon (2017, online), temo que “Essa tecnologia já existe, e foi primeiro demonstrada no espaço por uma equipe de pesquisadores da Universidade Nacional de Cingapura e da Universidade de Strathclyde, no Reino Unido, em dezembro de 2015.” (RUSSON 2017, Online).
 
 
Atividade extra 
 
A humanidade está passando por sua maior revolução tecnológica: a era da computação quântica. Relatos dão conta que os novos computadores quânticos estão superando de forma agressiva os mais rápidos computadores da humanidade e isso é só o começo. Saiba mais sobre como funcionam os computadores quânticos no vídeo a seguir:
 
https://www.youtube.com/watch?v=MTxKAE6lWVk
 
 
 
Referência Bibliográfica
 
 
CARDOSO, Andiara Pereira dos Santos; FERRARI, Paulo Celso; ALMEIDA, Norton Gomes de. Potencialidades da computação quântica problematizada para discutir ciência, tecnologia e sociedade. 2019. Disponível em: <https://if.ufmt.br/eenci/artigos/Artigo_ID599/v14_n2_a2019.pdf> Acesso em: 14/05/2021.
 
DELGADO, José Arquitetura de computadores. - Rio de Janeiro: LTC, 2017.
 
FERREIRA JÚNIOR, Wilton Alves. Túnel do tempo e a evolução da tecnologia: conhecendo o passado para calcular e projetar o futuro. 2017. Disponível em: < http://catolicadeanapolis.edu.br/revistamagistro/wp-content/uploads/2018/09/tunel-do-tempo-e-a-evolu%C3%A7%C3%A3o-da-tecnologia-conhecendo-o-passado-para-calcular-e-projetar-o-futuro.pdf> Acesso em: 14/05/2021.
 
PESSOA, Regina Ribeiro; MACHADO, Socorro Balieiro. A importância do uso do computador no processo de ensino e aprendizagem dos alunos da 3ª etapa da educação de jovens e adultos da Escola Estadual Joanira Del Castillo. - Revista Exitus, Santarém/PA, Vol. 9, N° 1, 2019. Disponível em: <http://www.ufopa.edu.br/portaldeperiodicos/index.php/revistaexitus/article/download/722/422/1419> Acesso em: 14/05/2021.
 
RUSSON, Mary-Ann. Computação quântica: como será a internet super-rápida do futuro. 2017. Disponível em: < https://www.bbc.com/portuguese/geral-41697094> Acesso em: 14/05/2021.
 
SANTINO, Renato. Entenda o que são computadores quânticos e como eles funcionam. 2019. Disponível em: <https://olhardigital.com.br/2019/09/24/noticias/entenda-o-que-sao-computadores-quanticos-e-como-eles-funcionam/> Acesso em: 14/05/202.
 
TANGON, Leonardo Guimarães. Arquitetura e organização de computadores. – Londrina: Editora e Distribuidora Educacional S.A., 2016.  Disponível em: < http://cm-kls-content.s3.amazonaws.com/201601/INTERATIVAS_2_0/ARQUITETURA_E_ORGANIZACAO_DE_COMPUTADORES/U1/LIVRO_UNICO.pdf> Acesso em: 14/05/2021.
Conceitos e Funcionamento dos Sistemas Operacionais
 
 
Existem pessoas que afirmam que se você viajar no tempo, ao futuro, por exemplo, ficará assustado(a) com as inovações que verá, pois não terá presenciado seu desenvolvimento. Se a viagem no tempo for ao passado talvez não fique assustado(a),mas certamente perplexo(a) com como muitas coisas lhe parecem excessivamente rudimentares.
Um dos componentes da vida moderna que certamente vai lhe causar alvoroço no passado e no futuro, é o sistema operacional (SO), que como seu nome denuncia, operacionaliza tanto o hardware quanto o software dos computadores. Se o olhar para o SO for no passado o que você verá, estudante, será algo discreto, em modo texto e até mesmo em tela verde (telas de fósforo dos computadores antigos), ou seja, um sistema simples, sem muitos recursos ou funções.
Agora se o olhar for no futuro, vai presenciar SOs capazes de controlar muito mais que os computadores onde estão embarcados, mas outros dispositivos, e mais, verá que terão a capacidade de estar onde você estiver, mesmo que esteja longe do seu computador. Mas antes de prosseguir com sua viagem no tempo, vamos parar no presente e compreender melhor o que a geração atual de SOs representa, para o usuário principalmente.
Resumidamente temos que um SO nasceu para governar o hardware e o software de um computador, permitindo que os sistemas do usuário façam uso dos recursos de hardware disponíveis. Portanto os sistemas operacionais fazem parte de um sistema maior, o sistema computacional, que por sua vez é composto de hardware e software, onde o hardware representa os componentes físicos, os circuitos eletrônicos como o processador, as memórias, os periféricos como teclado, mouse, etc. Já o Software representa a parte lógica de um sistema computacional, que de acordo com Maziero (2019, p. 02)
Por sua vez, o software de aplicação é representado por programas destinados ao usuário do sistema, que constituem a razão final de seu uso, como editores de texto, navegadores Internet ou jogos. Entre os aplicativos e o hardware reside uma camada de software multifacetada e complexa, denominada genericamente de Sistema Operacional (SO). (MAZIERO 2019, p. 02)
Com estas conceituações de hardware e software, você, estudante, passa a compreender que a tarefa de se criar um SO foi tremenda, pois imagine a sua ausência, imagine um PC sem sistema operacional onde cada software fosse encarregado de ter sua interface, sua rotina de inicialização. Agora imagine como seria trabalhoso trocar de aplicativos, como fazemos com frequência em um pc moderno, se cada aplicativo fosse isolado, autossuficiente.
Desta forma, faz mais sentido ter um ambiente que sirva de ecossistema a todos os softwares que necessitamos, e que permita acesso aos recursos de hardware necessários em nossas aplicações, e como apresenta Córdova Júnior (2018, p. 15), ao dizer que “Os sistemas operacionais foram criados, [...], para oferecer uma maneira razoável de resolver o problema de criar um sistema de computação utilizável, com o objetivo fundamental de executar programas e facilitar a solução de problemas do usuário.
Figura 1. Estrutura do sistema computacional
Portanto, podemos definir SO como sendo um programa sendo executado a todo momento, em um computador, e este sistema carrega consigo uma série de recursos que a décadas seriam oferecidos por softwares de terceiros, mas que por questões comerciais e estratégicas passaram a ser incorporados pelos SOs.
Um grande exemplo de como os sistemas operacionais estão incorporando aplicações antes oferecidas por terceiros, são os SOs de dispositivos móveis, como smartphones, tablets e outros, e incluem o Kernel, assim como SOs de desktops, mas também o que chamamos de middleware, ou seja, pacotes de aplicações de desenvolvedores de aplicativos. Sobre a evolução e os aperfeiçoamentos dos SOs, Córdova Júnior (2018, p. 15), afirma que,
Com o passar do tempo, os sistemas operacionais foram aperfeiçoados para fazer melhor gerência de memória e discos, mais opções de segurança foram adicionadas, usabilidade e estilos foram melhorados. Além disso, a grande quantidade de sistemas operacionais disponíveis atualmente, sejam pagos ou gratuitos, de código aberto ou fechado, permite que o usuário encontre aquele que melhor se encaixa em suas necessidades. (CÓRDOVA JUNIOR, 2018, p. 15)
 
Sobre o funcionamento de um sistema operacional devemos compreender que ele atua entre o hardware e o software promovendo a ligação entre estes componentes físicos e o lógico através das instruções contidas nos softwares, das funcionalidades embarcadas no hardware e de acordo com os anseios e dados inseridos pelo usuário.
Portanto, podemos afirmar que o sistema operacional faz a comunicação entre as diversas aplicações e pelas instruções contidas em tais aplicações, faz requisições ao hardware. Assim, temos que o SO se comunicará com a memória, onde aloca, modifica e remove arquivos, com a CPU, onde envia instruções e dela recebe resultados, e dos demais dispositivos de hardware. Desta forma, temos que o SO é responsável por diversas funções, como as contidas no quadro a seguir:
Quadro 1: Funções do sistema operacional
Os sistemas operacionais se organizam em processos, que são os programas em execução, que são associados a seus respectivos endereços lógicos, ou seja, um local na memória do computador. Juntamente ao processo estão os recursos como os registradores, que são os contadores dos programas e ponteiros de suas pilhas respectivas, e com isso podemos definir processo como sendo “[...] um contêiner com todas as informações necessárias para executar um programa (SILBERSCHATZ; GAGNE; GALVIN, 2018, apud CÓRDOVA JUNIOR, 2018, p. 18)
 
Sistema Operacional e Outros Tipos de Software
 
Mesmo com toda a relevância e importância, o SO não é o único software embarcado em um computador, independente da aplicação na qual este computador foi destinado. Juntamente com o SO existem diversos outros softwares que vão sendo incorporados ao computador e de acordo com a necessidade do usuário, como editores de texto, planilhas eletrônicas, sistemas de gestão empresarial, jogos e muitas outras categorias.
A ideia central aqui é compreender que apenas com o SO não se produz muito, principalmente no universo corporativo, e que a cada software nele instalado, configurado, o computador vai ganhando forma e utilidade ao usuário. Assim como o SO permite acesso aos recursos de hardware, ele funciona como o meio com o qual os outros softwares são instalados e permite a execução destes quando prontos.
De uma forma geral o que o SO faz em seu computador é abstrair do hardware todas as suas funcionalidades e gerenciar todos os recursos nele alocados. A figura a seguir demonstra com claridade as interações que o SO mantém com hardware e software:
Figura 1: Estrutura de um sistema de computação típico
Existem muitas categorias de softwares se a análise for feita tendo em vista a sua função, como editores de texto, responsáveis por fornecer um ambiente onde o usuário pode criar, ler e editar seus documentos de texto como cartas, mensagens, receitas culinárias e documentos corporativos. Outra categoria e das mais vastas são as dos programas de gestão de empresas, capazes de controlar e fornecer relatórios sobre estoque, vendas, RH e praticamente todos os aspectos de uma empresa.
Com isso fica claro que não nos serve grande propósito enumerar as diferentes categorias de softwares, ao menos não do ponto de vista do usuário, portanto nossa abordagem será apresentar os tipos de software do ponto de vista dos sistemas operacionais, como podemos compreender nas categorias a seguir:
Programas utilitários:
Dentro de toda a amplitude de funções e recursos que o SO disponibiliza ao usuário, em alguns momentos são criados pequenos softwares programados especificamente para atender o usuário em funcionalidades que são complementares ao SO. Estamos falando dos utilitários, “[...] como formatação de discos e mídias, configuração de dispositivos, manipulação de arquivos (mover, copiar, apagar), interpretador de comandos, terminal, interface gráfica, gerência de janelas, etc. (MAZIERO 2019, p. 02)
Drivers:
Para que o usuário tenha acesso às funções de seu hardware o SO precisa compreender o que é este hardware, qual sua função, quais seus recursosdisponíveis, e de que forma estes recursos podem ser disponibilizados ao SO e demais softwares. O responsável por estabelecer o contato do hardware com o software é chamado Driver, representado por um conjunto de módulos de código específico a cada tipo e modelo de componente.
Cada modelo de placa de vídeo, mesmo que de um mesmo fabricante, vai ter seu driver específico, mesmo que sejam disponibilizados softwares genéricos que instalam, além do driver, alguns recursos de configuração, monitoramento e até aumento de desempenho, o famoso overclocking.
O software [ou programa] aplicativo
O conceito de software aplicativo é interessante, pois embora sejam softwares de uso específico, são tão amplamente utilizados que se apresentam de forma padronizada a todo usuário. Dentro desta lista temos softwares muito conhecidos a anos pelos usuários de computador, como o pacote Office da Microsoft que contém o Word, Excel, PowerPoint e outros softwares muito utilizados como o Paint para desenhos e edições básicas de imagens, o Bloco de notas, a calculadora, etc.
De acordo com Amorin (2015, p.07) existem diversos outros softwares que se encaixam na categoria de aplicativos do sistema operacional, como “[...] os Browsers, isto é, os navegadores utilizados para acesso à internet. Os videojogos, bases de dados e sistemas de automação industrial, cujas atividades são consideradas específicas, também se enquadram neste tipo.
 
A Estrutura dos Sistemas Operacionais
 
A cada avanço em hardware, nas linguagens de programação, ou com o nascimento de novas tecnologias, novas demandas dos usuários por funcionalidades, os sistemas operacionais ganham em complexidade e gama de recursos embarcados, com isso sua arquitetura passa a ser cada vez mais complexa. Desta forma podemos classificar os SOs de acordo com a sua complexidade em sistemas monolíticos, sistemas micronúcleo, em camadas e híbridos.
 
Sistemas monolíticos
De acordo com Maziero (2019, p. 27) os sistemas operacionais monolíticos apresentam o SO como um bloco maciço, ou seja, um bloco que opera “[...] com acesso a todos os recursos do hardware e sem restrições de acesso à memória. Por isso, os componentes internos do sistema operacional podem se relacionar entre si conforme suas necessidades. (MAZIERO 2019, p. 27)
 
A grande vantagem da arquitetura monolítica está em seu desempenho, pelo fato de que o acesso entre componentes é feito diretamente, sem barreiras, o que torna desnecessário intermediários para a comunicação.
Sistemas micro núcleo
Nesta categoria estão inclusos os SOs que não possuem código de alto nível em seu núcleo, ou seja, contém apenas o código de baixo nível responsável por interagir com o hardware, onde “O restante do código seria transferido para programas separados no espaço de usuário, denominados serviços. Por fazer o núcleo do sistema ficar menor, essa abordagem foi denominada micronúcleo (ou µ-kernel).” (MAZIERO 2019, p. 28)
A construção de SOs micronúcleo representa uma estratégia modular, na medida em que cada serviço é desenvolvido independente dos outros, com maior flexibilidade, robustez o que garante, em caso de falhas, que somente o sistema específico será afetado.
Sistema em camadas
A construção de softwares em camada é muito comum, e no caso dos SOs, representa uma forma bastante concisa de construção lógica, uma vez que usa a noção de camadas, onde, de acordo com Maziero (2019), tem nas camadas mais baixas a interface com o hardware, as camadas intermediárias fazem a abstração e gestão de recursos, e por fim, a camada superior representa a interação entre o núcleo e as aplicações.
Sistemas híbridos
Embora os diferentes tipos de arquitetura básica de sistemas operacionais tenham seu destaque no que são propostos, fato é que muitos carecem de um melhor uso do seu hardware, como no caso dos sistemas micronúcleos onde mesmo com toda sua flexibilidade e robustez se apresentam lentos em comparação com outros tipos.
De acordo com Maziero (2019, p. 31) A solução ao desempenho medíocre dos sistemas micro núcleo seria “[...] trazer de volta ao núcleo os componentes mais críticos[...]. Essa abordagem intermediária entre o núcleo monolítico e micronúcleo é denominada núcleo híbrido. É comum observar também nos núcleos híbridos uma influência da arquitetura em camadas.” (MAZIERO 2019, p. 31)
Máquinas virtuais
Este assunto já entra bem no universo dos serviços em nuvem e dentro da estrutura física e lógica dos servidores, pois a virtualização representa a criação de um espaço onde o usuário pode ter acesso ao seu SO dentro de uma estrutura maior que já contém seu próprio SO, mas que muitas vezes é incompatível com a arquitetura dos sistemas do usuário.
Desta forma, as máquinas virtuais são uma camada de software responsável em dar ao usuário um outro sistema operacional completo, onde temos como exemplo o ambiente JVM (Java Virtual Machine) que usa como base um SO como o Windows ou Linux e dentro deste SO pode oferecer um sistema completo que opere em bytecode, o código binário comum dos programas escritos em Java. Outro exemplo são os VMWares que permitem uma instância Windows em sistemas Linux, ou vice-versa.
Contêineres
Podemos definir os contêineres como sendo uma forma de virtualização, mas desta vez focada em isolar o espaço do usuário de forma também virtualizada. Os contêineres também são conhecidos por servidores virtuais e onde em cada instância de usuário é alocada uma porção dos recursos de hardware disponíveis, onde temos principalmente a capacidade de processamento, memória e disco.
 
Os 36 Anos de História dos Sistemas Operacionais
 
O primeiro fato que devemos compreender sobre a evolução dos SOs está no surgimento da sua interface gráfica, ou seja, não existiria uma história de 36 anos a ser contada com tantos eventos como temos aqui se a interface gráfica não existisse, pois sem ela os computadores poderiam ser máquinas complexas restritas a programadores ou pessoas com treinamento especializado.
Mas o nascimento da computação digital moderna demorou a ver o nascer da interface gráfica (as telas e ícones que usamos para navegar entre os recursos e softwares contidos em um sistema operacional). Em seu primeiro momento as instruções que hoje damos ao sistema com um clique deveriam ser inseridas diretamente no hardware, o que lhes dava muita complexidade e se assemelhava ao procedimento antigo de controle de conexões telefônicas com dezenas de cabos sendo intercambiados de acordo com a necessidade de conexão a se completar.
Sem um conceito, mesmo que rudimentar, de sistema operacional, os primeiros computadores nem mesmo tinham a capacidade, hoje tida como trivial, de rodar softwares em sucessão, de forma automática, o que determinava que ao fim da execução de um programa, o usuário deveria retirar este programa do hardware e colocar outro para assim conseguir ter acesso a suas funcionalidades.
Assim, sem um sistema capaz de governar o hardware e agilizar acesso aos seus recursos, o que hoje entendemos por fila de trabalho eram filas indianas de pessoas que ali aguardavam sua oportunidade de rodar a rotina computacional que eram responsáveis. Extraoficialmente falando, na Universidade de Cambridge as filas eram as fitas perfuradas (antes usadas como forma de armazenar os programas), e sua prioridade de execução seria através da cor do prendedor que as mantinham em linhas tipo varais de roupa.
Mas, de acordo com Wazlawick (2016) na década de 1950 a evolução dos computadores lhes concedia cada vez mais velocidade, o que apresentou um severo gargalo, pois o tempo de se instalar o programa ao ponto de poder utilizar era, muitas vezes, maior do que o tempo necessário para sua execução. A questão era muito mais econômica, pois computador sendo preparado, não é computador trabalhando, algo precisava ser feito.
A solução veio na forma de programas capazes de executar outros programas em fila, de forma automática, os primeiros Sistemas Operacionais, que na época ganharam o nome de programas monitores, mas já faziam, em essência, o queo kernel (núcleo) dos sistemas operacionais modernos faziam.
Nomear os programas monitores de Sistemas Operacionais foi apenas uma questão de lógica, uma vez que substituíram os operadores encarregados de executar as filas de programas manualmente. Assim nasceram os primeiros computadores capazes de realizar muitas operações por conta própria, assim como define Wazlawick (2016, p. 197)
Bastava que os diversos programas fossem enfileirados na leitora de fita ou leitora de cartões e com as devidas diretivas (cartões de “job”) a máquina conseguiria sequenciar esses programas automaticamente, sem a necessidade do operador humano. (WAZLAWICK 2016, p. 197)
Se existe uma constante no universo dos SOs é sua capacidade de convenientemente agregar novas funções e transformar softwares de terceiros em seus utilitários, como o Microsoft Windows fez com o compactador de arquivos do tipo Winzip. Um dos primeiros casos de incorporação e de grande relevância aos SOs foram as bibliotecas de rotinas, que permitiram maior agilidade no acesso ao hardware, e periféricos, pois o que se tinha antes era a necessidade do operador em conhecer os comandos próprios de cada componente, algo lento e moroso.
Apresentando um pouco de cronologia histórica aos sistemas operacionais, temos que em três anos seguidos 1954, 1955 e 1956 foram lançados os três primeiros sistemas operacionais registrados, “Em 1955, a General Motors desenvolveu um sistema operacional para o seu IBM 701 e, em 1956, um outro chamado GM-NAA I/O para o seu IBM 704.” (WAZLAWICK 2016, p. 198)
Se tem um nome que sempre tem lugar cativo nos livros de história ligado a inovação e pioneirismo no mundo dos computadores pessoais é o Steve Jobs, que embora não esteja mais entre nós deixou um legado na computação que jamais será esquecido. Na década de 1970, Jobs desenvolveu o que considerou sua tentativa de criar um computador pessoal e para ele desenvolveu um sistema operacional que pudesse ser operado por usuários comuns, ou seja, quem não tivesse conhecimento algum de programação.
A iniciativa de Jobs deu início a era da microinformática e que por volta do ano de 1976 viu Bill Gates, fundador da Microsoft, desenvolver seu sistema, o PC-DOS que logo passou a ser conhecido como o MS-DOS. Gates lançou o seu produto mais conhecido, o SO Windows, depois que a sua parceria com a IBM tomou rumos inesperados e distintos.
 
 
Atividade Extra
 
 
Já foi o tempo em que instalar o sistema operacional Windows em um PC era tarefa quase de programador, pois atualmente nem mesmo é preciso o famoso disco de inicialização, o responsável por carregar um mini sistema operacional DOS, responsável por permitir que o usuário formatasse seu disco e instalasse seu SO.
A inovação atual é poder ter sistemas operacionais como Windows ou Linux que funcionam sem a sua completa instalação no computador, podendo até mesmo funcionar a partir de uma mídia removível como um pen drive.
 
Caso tenha curiosidade de saber como pode ser feito este procedimento, recomendo que consulte o artigo “Criando um pendrive de boot com vários sistemas operacionais” pelo link: https://www.infonova.com.br/artigo/criando-um-pen-drive-de-boot-com-varios-sistemas-operacionais/#:~:text=Um%20desses%20aplicativos%20%C3%A9%20o,ou%2C%20ainda%2C%20do%20Linux.
 
 
Referência Bibliográfica
 
 
AMORIM, Diego Felipe Borges de. Softwares de sistemas e de aplicações livres: benefícios e limitações no uso dessas tecnologias nos negócios. 2015. Disponível em: <https://semanaacademica.org.br/system/files/artigos/dfba_artigo.pdf> Acesso EM: 14/05/2021.
 
CÓRDOVA JUNIOR, Ramiro Sebastião. Sistemas operacionais. – Porto Alegre: SAGAH, 2018.
 
MAZIERO, Carlos Alberto. Sistemas operacionais: conceitos e mecanismos. – Curitiba: DINF - UFPR, 2019.
 
COSTA, Téo. Evolução Dos Sistemas Operacionais. 2016. Disponível em: <https://www.teo.com.br/2016/03/20/evolucao-dos-sistemas-operacionais/> Acesso em: 14/05/2021.
 
WAZLAWICK, Raul Sidnei. História da computação. – Rio de Janeiro: Elsevier, 2016.
Ir para questão
Observação: este site inclui um sistema de acessibilidade. Pressione Control-F11 para ajustar o site aos deficientes visuais que usam um leitor de tela; Pressione Control-F10 para abrir um menu de acessibilidade.
· Pressione Enter para acessar acessibilidade para cegosque usam leitores de tela
· Pressione Enter para Navegação pelo Teclado
· Pressione Enter para acessar o menu de acessibilidade
Lógica Booleana
 
Os computadores nasceram como máquinas de calcular mais sofisticadas e até hoje possuem na matemática sua estrutura maior, tanto que grande parte do que constitui o núcleo dos processadores é puramente voltada à matemática. Com isso não é de se estranhar que os primeiros computadores tenham surgido por esforços de matemáticos e engenheiros.
Esta origem matemática nos diz que a construção do computador sempre envolveu grande lógica e tal lógica dá seu primeiro ar da graça com o matemático britânico George Boole, e sua obra intitulada An Investigation of the Laws of Thought (Uma Investigação sobre as leis do pensamento), onde apresentou um novo sistema matemático capaz de realizar uma análise lógica que viria a ser conhecida, em seguida, como Álgebra de Boole.
Complementando a construção da Álgebra de Boole, temos a sua aplicação em circuitos elétricos de chaveamento, para soluções de problemas de lógica pelo engenheiro elétrico Claude Elwwod Shannon em 1938, e que passou a ser chamado de Portas Lógicas. Com Boole e Elwwod a computação ganhou a base do que veio a se consolidar como circuitos integrados, e desta forma,
Em 1854, George Boole formalizou o tratamento sistemático lógico da álgebra a qual ganharia seu sobrenome, fundamental para o desenvolvimento da computação moderna. Enquanto na Álgebra primária as variáveis possíveis podem ser extraídas do conjunto dos números Reais (), as variáveis na álgebra booleana só podem assumir dois valores possíveis 0 (Falso) e 1 (Verdadeiro), “Boole estava interessado em regras algébricas para o raciocínio lógico, semelhantes às regras algébricas para o raciocínio numérico” (GERTING, 2004, p. 375; (SANTOS; OLIVEIRA 2016, p. 64).).
De forma categórica a álgebra booleana se apresenta como uma importante ferramenta matemática no desenvolvimento da computação digital moderna, juntamente com a tabela de verdades, que por sua vez atua na organização dos dados. A grande defesa, a respeito da importância da álgebra booleana e das tabelas verdade está no fato de que contribuem para a construção de todas as técnicas lógicas e com isso tornam os computadores máquinas capazes de abstrair a crítica, distinguir argumentos, inferências e provas concretas.
De acordo com Santos e Oliveira (2016) a tabela verdade atua com o princípio da indução lógica, assim como várias propriedades matemáticas trabalham, dentro da teoria dos números assim como na álgebra, são demonstradas pelo princípio da indução finita. O quadro a seguir apresenta um exemplo de tabela verdade:
Quadro 1 – Tabela verdade com duas entradas
Com esta tabela verdade podemos exemplificar um conjunto lógico para duas entradas (A e B), encontradas nas primeiras colunas, e onde a última coluna X representa a saída lógica resultante. Tal resultado depende da operação lógica utilizada, assim como do conjunto de suas entradas finitas. (SANTOS; OLIVEIRA, 2016).
 
Aplicações dos conceitos apresentados de álgebra booleana e circuitos lógicos digitais
 
Nos dias atuais, frente aos diversos avanços tecnológicos que contribuem para uma melhor qualidade de vida, os circuitos lógicos digitais estão presentes em diversas aplicações que facilitam nosso dia a dia. SANTOS; OLIVEIRA 2016, p. 66).
Existem diversos motivos para tantos avanços tecnológicos: cura para as doenças diversas, aprimoramentos para as empresas, para a produção e uma busca por melhorar a qualidade de vida das pessoas. Portanto, os circuitos lógicos digitais foram capazes de revolucionar muitos aspectos da vida e o fizeram graças ao desenvolvimento da álgebra booleana e de acordo com Santos

Outros materiais