Algoritmo e Programação 1
1 – Introdução a Lógica e Conceitos de
Programação
Prof. Brenno Pimenta da Costa
Diferença entre Hardware e Software
Hardware:
São os itens físicos e tangíveis do dispositivo, desde seu gabinete até as
peças que o compõe.
 monitor
 memória
 placas de som
 placa de vídeo
 chips
 processadores
 etc.
Software:
conjunto de componentes lógicos de um computador ou sistema de
processamento de dados; programa, rotina ou conjunto de instruções que
controlam o funcionamento de um computador; suporte lógico.
- Sistemas Operacionais
- Aplicativos de musicas
- Antivirus
- etc.
Dispositivos de Entrada e Saída e Relação com a
Programação
Os dispositivos de entrada são os que inserem informações em um
computador a partir de uma fonte externa.
Ex: teclado, mouse, microfone, scanner e telas sensíveis ao toque.
Os Dispositivo de saída são dispositivos que exibem dados e informações
processadas pelo computador, também chamados de unidades de saída.
Ex: Impressora; Monitor; Placa gráfica; Projetor de vídeo.
Link com artigo sobre funcionamento dos dispositivos de entrada e saída:
https://www.devmedia.com.br/como-funcionam-os-dispositivos-de-entrada-
e-saida/28275
Processador, Memória e relação com a
Programação
Processadores (Concorrência, Paralelismo, Processos, Threads,
programação síncrona e assíncrona)
O que é um processo?
Um processo pode ser visto como um container de recursos utilizados por uma ou
mais tarefas. Processos são isolados entre si, não compartilham memória.
O que é uma thread?
Os processos podem ter uma série de threads associadas e as threads de um
processo são conhecidas como threads de usuário, por executarem no modo-
usuário e não no modo-kernel. Uma thread é uma “linha” de execução dentro de
um processo. Cada thread tem o seu próprio estado de processador e a sua
própria pilha, mas compartilha a memória atribuída ao processo com as outras
threads “irmãs” (filhas do mesmo processo).
Concorrência e paralelismo
É comum achar que concorrência e paralelismo são a mesma coisa, mas não
são.
Concorrência é sobre lidar com várias coisas ao mesmo tempo e paralelismo
é sobre fazer várias coisas ao mesmo tempo. Concorrência é um conceito mais
a nível de software e paralelismo mais a nível de hardware.
Paralelismo é sobre a execução paralela de tarefas, ou seja, mais de uma por
vez (de forma simultânea), a depender da quantidade de núcleos (cores) do
processador. Quanto mais núcleos, mais tarefas paralelas podem ser
executadas. É uma forma de distribuir processamento em mais de um núcleo.
Paralelismo implica concorrência, mas o contrário não é verdadeiro, pois é
possível ter concorrência sem paralelismo, é só pensar no caso de uso de uma
única thread gerenciando milhares de tarefas, pausando e resumindo-as, esse
é um modelo de concorrência sem paralelismo.
Síncrono e assíncrono
Síncrono e assíncrono são modelos de programação que estão intimamente ligados
ao fluxo de execução, eles determinam como o código será escrito e como ele
rodará.
No modelo síncrono uma operação precisa ser finalizada para que outra tenha a
oportunidade de ser executada. É um modelo linear, previsível, onde a execução
acontece etapa por etapa e ele é base padrão da maior parte das linguagens de
programação.
Já no modelo assíncrono, uma operação não precisa esperar a outra ser finalizada,
ao contrário disso, elas alternam o controle da execução entre si. É um modelo não
previsível e que não garante a ordem da execução. É um modelo que favorece a
concorrência.
Link com artigo:
https://www.treinaweb.com.br/blog/concorrencia-paralelismo-processos-threads-
programacao-sincrona-e-assincrona
Memória
Alocação de Memória em ciência da computação, consiste no processo de
solicitar/utilizar memória durante o processo de execução de um programa de
computador. A alocação de memória no computador pode ser dividida em dois
grupos principais:
* Alocação Estática
* Alocação Dinâmica
* Alocação Estática: os dados tem um tamanho fixo e estão organizados
sequencialmente na memória do computador. Um exemplo típico de alocação
estática são as variáveis globais e arrays. A alocação estática de memória tem
como principal ponto positivo a simplicidade com que pode ser realizada pelos
programadores, mantendo o algoritmo simples e de fácil organização das variáveis
utilizadas. No entanto, como principal ponto negativo, a alocação estática ocupa
uma porção fixa da memória, em casos em que essas variáveis não sejam
utilizadas após um certo ponto, a alocação estática consome desnecessariamente
esta porção reservada da memória, podendo levar o programa a fica muito pesado
desnecessariamente. Apesar disso, é importante ressaltar, que na maioria das
linguagens de programação, as variáveis criadas com alocação estática são
liberadas automaticamente após o fim de uma determinada função.
Em C, um exemplo de alocação estática é simplesmente a declaração de uma
variável:
int variável;
Alocação Dinâmica: os dados não precisam ter um tamanho fixo, pois é possível
definir para cada dado quanto de memória que deseja-se usar. Sendo assim aloca-
se espaços de memória (blocos) que não precisam estar necessariamente
organizados de maneira sequencial, podendo estar distribuídos de forma dispersa
(não ordenada) na memória do computador. Na alocação dinâmica, é possível
alocar/desalocar blocos de memória, de acordo com a necessidade, reservando ou
liberando blocos de memória durante a execução de um programa. Para poder
“achar” os blocos que estão dispersos ou espalhados na memória usa-se as
variáveis do tipo Ponteiro (indicadores de endereços de memória). É importante
ressaltar que, na maioria das linguagens de programação, as variáveis criadas com
alocação dinâmica não são liberadas automaticamente após o fim de funções,
sendo necessário liberá-las manualmente.
Em C, um exemplo de alocação dinâmica é o seguinte:
int *ponteiro;
ponteiro = (int *) malloc(sizeof(int));
Conceito de Algoritmo e Programação de
Computadores
Conceitos de Algoritmo:
“Um algoritmo é uma forma de organizar a sua lógica, a solução para o problema
que está solucionando. Normalmente, um algoritmo é uma sequência de passos,
em ordem e sem ambiguidade, que deve ser seguida para resolver um problema.”
“Um algoritmo nada mais é do que uma receita que mostra passo a passo os
procedimentos necessários para a resolução de uma tarefa. Ele não responde
a pergunta “o que fazer?”, mas sim “como fazer”. “
“Em matemática e ciência da computação, um algoritmo é uma sequência finita
de ações executáveis que visam obter uma solução para um determinado tipo
de problema. Segundo Dasgupta, Papadimitriou e Vazirani; "Algoritmos são
procedimentos precisos, não ambíguos, padronizados, eficientes e corretos."
Conceitos de Programação:
Programação é o processo de escrita, teste e manutenção de um programa de
computador. O programa é escrito em uma linguagem de programação, embora
seja possível, com alguma dificuldade, o escrever diretamente em linguagem de
máquina. Diferentes partes de um programa podem ser escritas em diferentes
linguagens.
Conceito de linguagem de programação:
Linguagem de Programação é uma linguagem escrita e formal que especifica um
conjunto de instruções e regras usadas para gerar programas (software). Um
software pode ser desenvolvido para rodar em um computador, dispositivo móvel
ou em qualquer equipamento que permita sua execução. Existem várias
linguagens e elas servem para muitos propósitos. Alguns óbvios, como criar um
software, outros menos, como controlar um carro ou uma torradeira.
Algoritmo em forma de fluxograma
para verificar se o aluno está
aprovado ou reprovado de acordo
com as notas (1 e 2) informadas
Algoritmo escrito observando o fluxograma
anterior.
Por quê aprender a programar?
"Todo mundo deveria aprender a programar um computador, porque isso ensina
você a pensar". A famosa frase de Steve Jobs sobre aprender programação, ficou
conhecida em 2013 pela campanha da Code.org, e resume bem por que aprender
a programar é tão importante para a sociedade e para o próprio desenvolvimento
das pessoas.
* Programação é a nova alfabetização
*Aprenda várias disciplinas ao mesmo tempo
*Desenvolve a habilidade de resolver problemas
*Não é só uma questão de máquinas, nem números, tem a ver com humanidade
*Trabalha a persistência e a capacidade de superação
*Todo mundo é capaz de aprender
Video motivacional:
Link https://www.youtube.com/watch?v=mHW1Hsqlp6A
Tipos de Linguagem de Programação
(Alto e Baixo nível)
Indo direto ao ponto, chamamos de linguagem de alto nível aquela cuja sintaxe é
voltada para o entendimento humano. Isso significa que esse tipo de linguagem é
muito mais intuitivo, amigável e mais fácil de aprender, principalmente para
iniciantes na área de programação.
Ao contrário das linguagens de alto nível, as de baixo nível são voltadas para o
entendimento da máquina. Por isso, elas têm uma sintaxe mais complexa e não
contam com comandos tão intuitivos.
Vantagens e desvantagens das linguagens de baixo nível
Sem dúvidas, a principal vantagem de uma linguagem de baixo nível é o tempo de
processamento mais rápido do que o de uma de alto nível. Além disso, a arquitetura
dos dispositivos é mais bem aproveitada com esse tipo de linguagem.
Em contrapartida, a pessoa que vai utilizar essa ferramenta de baixo nível pode
levar mais tempo para compreender e dominar a sintaxe. Sem contar que ainda
será necessário conhecer profundamente o hardware da máquina, o que exige mais
investimento em estudo e treinamento.
Ademais, visto que o código escrito é mais direcionado ao processador, a
portabilidade também é prejudicada, pois ele pode não rodar em processadores de
famílias diferentes.
Linguagens de Alto Nível
JavaScript.
Java;
Ruby;
Python;
C#;
Swift;
PHP.
etc...
Linguagem de Baixo Nível
Assembly
Obrigado!
Prof. Brenno Pimenta da Costa
https://www.linkedin.com/in/brenno-
pimenta-da-costa-01b37810/

Introdução a Lógica e Conceitos de Programação.ppt

  • 1.
    Algoritmo e Programação1 1 – Introdução a Lógica e Conceitos de Programação Prof. Brenno Pimenta da Costa
  • 2.
    Diferença entre Hardwaree Software Hardware: São os itens físicos e tangíveis do dispositivo, desde seu gabinete até as peças que o compõe.  monitor  memória  placas de som  placa de vídeo  chips  processadores  etc.
  • 4.
    Software: conjunto de componenteslógicos de um computador ou sistema de processamento de dados; programa, rotina ou conjunto de instruções que controlam o funcionamento de um computador; suporte lógico. - Sistemas Operacionais - Aplicativos de musicas - Antivirus - etc.
  • 6.
    Dispositivos de Entradae Saída e Relação com a Programação
  • 7.
    Os dispositivos deentrada são os que inserem informações em um computador a partir de uma fonte externa. Ex: teclado, mouse, microfone, scanner e telas sensíveis ao toque. Os Dispositivo de saída são dispositivos que exibem dados e informações processadas pelo computador, também chamados de unidades de saída. Ex: Impressora; Monitor; Placa gráfica; Projetor de vídeo.
  • 9.
    Link com artigosobre funcionamento dos dispositivos de entrada e saída: https://www.devmedia.com.br/como-funcionam-os-dispositivos-de-entrada- e-saida/28275
  • 10.
    Processador, Memória erelação com a Programação
  • 11.
    Processadores (Concorrência, Paralelismo,Processos, Threads, programação síncrona e assíncrona) O que é um processo? Um processo pode ser visto como um container de recursos utilizados por uma ou mais tarefas. Processos são isolados entre si, não compartilham memória. O que é uma thread? Os processos podem ter uma série de threads associadas e as threads de um processo são conhecidas como threads de usuário, por executarem no modo- usuário e não no modo-kernel. Uma thread é uma “linha” de execução dentro de um processo. Cada thread tem o seu próprio estado de processador e a sua própria pilha, mas compartilha a memória atribuída ao processo com as outras threads “irmãs” (filhas do mesmo processo).
  • 12.
    Concorrência e paralelismo Écomum achar que concorrência e paralelismo são a mesma coisa, mas não são. Concorrência é sobre lidar com várias coisas ao mesmo tempo e paralelismo é sobre fazer várias coisas ao mesmo tempo. Concorrência é um conceito mais a nível de software e paralelismo mais a nível de hardware. Paralelismo é sobre a execução paralela de tarefas, ou seja, mais de uma por vez (de forma simultânea), a depender da quantidade de núcleos (cores) do processador. Quanto mais núcleos, mais tarefas paralelas podem ser executadas. É uma forma de distribuir processamento em mais de um núcleo. Paralelismo implica concorrência, mas o contrário não é verdadeiro, pois é possível ter concorrência sem paralelismo, é só pensar no caso de uso de uma única thread gerenciando milhares de tarefas, pausando e resumindo-as, esse é um modelo de concorrência sem paralelismo.
  • 13.
    Síncrono e assíncrono Síncronoe assíncrono são modelos de programação que estão intimamente ligados ao fluxo de execução, eles determinam como o código será escrito e como ele rodará. No modelo síncrono uma operação precisa ser finalizada para que outra tenha a oportunidade de ser executada. É um modelo linear, previsível, onde a execução acontece etapa por etapa e ele é base padrão da maior parte das linguagens de programação. Já no modelo assíncrono, uma operação não precisa esperar a outra ser finalizada, ao contrário disso, elas alternam o controle da execução entre si. É um modelo não previsível e que não garante a ordem da execução. É um modelo que favorece a concorrência.
  • 14.
  • 15.
    Memória Alocação de Memóriaem ciência da computação, consiste no processo de solicitar/utilizar memória durante o processo de execução de um programa de computador. A alocação de memória no computador pode ser dividida em dois grupos principais: * Alocação Estática * Alocação Dinâmica
  • 16.
    * Alocação Estática:os dados tem um tamanho fixo e estão organizados sequencialmente na memória do computador. Um exemplo típico de alocação estática são as variáveis globais e arrays. A alocação estática de memória tem como principal ponto positivo a simplicidade com que pode ser realizada pelos programadores, mantendo o algoritmo simples e de fácil organização das variáveis utilizadas. No entanto, como principal ponto negativo, a alocação estática ocupa uma porção fixa da memória, em casos em que essas variáveis não sejam utilizadas após um certo ponto, a alocação estática consome desnecessariamente esta porção reservada da memória, podendo levar o programa a fica muito pesado desnecessariamente. Apesar disso, é importante ressaltar, que na maioria das linguagens de programação, as variáveis criadas com alocação estática são liberadas automaticamente após o fim de uma determinada função. Em C, um exemplo de alocação estática é simplesmente a declaração de uma variável: int variável;
  • 17.
    Alocação Dinâmica: osdados não precisam ter um tamanho fixo, pois é possível definir para cada dado quanto de memória que deseja-se usar. Sendo assim aloca- se espaços de memória (blocos) que não precisam estar necessariamente organizados de maneira sequencial, podendo estar distribuídos de forma dispersa (não ordenada) na memória do computador. Na alocação dinâmica, é possível alocar/desalocar blocos de memória, de acordo com a necessidade, reservando ou liberando blocos de memória durante a execução de um programa. Para poder “achar” os blocos que estão dispersos ou espalhados na memória usa-se as variáveis do tipo Ponteiro (indicadores de endereços de memória). É importante ressaltar que, na maioria das linguagens de programação, as variáveis criadas com alocação dinâmica não são liberadas automaticamente após o fim de funções, sendo necessário liberá-las manualmente. Em C, um exemplo de alocação dinâmica é o seguinte: int *ponteiro; ponteiro = (int *) malloc(sizeof(int));
  • 19.
    Conceito de Algoritmoe Programação de Computadores
  • 20.
    Conceitos de Algoritmo: “Umalgoritmo é uma forma de organizar a sua lógica, a solução para o problema que está solucionando. Normalmente, um algoritmo é uma sequência de passos, em ordem e sem ambiguidade, que deve ser seguida para resolver um problema.” “Um algoritmo nada mais é do que uma receita que mostra passo a passo os procedimentos necessários para a resolução de uma tarefa. Ele não responde a pergunta “o que fazer?”, mas sim “como fazer”. “ “Em matemática e ciência da computação, um algoritmo é uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema. Segundo Dasgupta, Papadimitriou e Vazirani; "Algoritmos são procedimentos precisos, não ambíguos, padronizados, eficientes e corretos."
  • 21.
    Conceitos de Programação: Programaçãoé o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito em uma linguagem de programação, embora seja possível, com alguma dificuldade, o escrever diretamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens. Conceito de linguagem de programação: Linguagem de Programação é uma linguagem escrita e formal que especifica um conjunto de instruções e regras usadas para gerar programas (software). Um software pode ser desenvolvido para rodar em um computador, dispositivo móvel ou em qualquer equipamento que permita sua execução. Existem várias linguagens e elas servem para muitos propósitos. Alguns óbvios, como criar um software, outros menos, como controlar um carro ou uma torradeira.
  • 22.
    Algoritmo em formade fluxograma para verificar se o aluno está aprovado ou reprovado de acordo com as notas (1 e 2) informadas
  • 23.
    Algoritmo escrito observandoo fluxograma anterior.
  • 24.
    Por quê aprendera programar?
  • 25.
    "Todo mundo deveriaaprender a programar um computador, porque isso ensina você a pensar". A famosa frase de Steve Jobs sobre aprender programação, ficou conhecida em 2013 pela campanha da Code.org, e resume bem por que aprender a programar é tão importante para a sociedade e para o próprio desenvolvimento das pessoas. * Programação é a nova alfabetização *Aprenda várias disciplinas ao mesmo tempo *Desenvolve a habilidade de resolver problemas *Não é só uma questão de máquinas, nem números, tem a ver com humanidade *Trabalha a persistência e a capacidade de superação *Todo mundo é capaz de aprender
  • 26.
  • 27.
    Tipos de Linguagemde Programação (Alto e Baixo nível) Indo direto ao ponto, chamamos de linguagem de alto nível aquela cuja sintaxe é voltada para o entendimento humano. Isso significa que esse tipo de linguagem é muito mais intuitivo, amigável e mais fácil de aprender, principalmente para iniciantes na área de programação. Ao contrário das linguagens de alto nível, as de baixo nível são voltadas para o entendimento da máquina. Por isso, elas têm uma sintaxe mais complexa e não contam com comandos tão intuitivos.
  • 29.
    Vantagens e desvantagensdas linguagens de baixo nível Sem dúvidas, a principal vantagem de uma linguagem de baixo nível é o tempo de processamento mais rápido do que o de uma de alto nível. Além disso, a arquitetura dos dispositivos é mais bem aproveitada com esse tipo de linguagem. Em contrapartida, a pessoa que vai utilizar essa ferramenta de baixo nível pode levar mais tempo para compreender e dominar a sintaxe. Sem contar que ainda será necessário conhecer profundamente o hardware da máquina, o que exige mais investimento em estudo e treinamento. Ademais, visto que o código escrito é mais direcionado ao processador, a portabilidade também é prejudicada, pois ele pode não rodar em processadores de famílias diferentes.
  • 30.
    Linguagens de AltoNível JavaScript. Java; Ruby; Python; C#; Swift; PHP. etc... Linguagem de Baixo Nível Assembly
  • 31.
    Obrigado! Prof. Brenno Pimentada Costa https://www.linkedin.com/in/brenno- pimenta-da-costa-01b37810/