Introdução e
Conceitos Básicos
DC199 - Algoritmos
Organização básica
de um Computador
Processador Memória principal
Canal de comunicação
Memória secundária Dispositivos de Entrada Dispositivos de Saída
Processador
● Principal componente de um computador.
● Executa sequências de operações muito simples e
precisas, sempre uma por vez.
● Muito rápido na execução de operações
(i7 é capaz de executar cerca de [Link]
operações matemáticas por segundo)
3
Memória Principal
(RAM – Random Access Memory)
● É a unidade encarregada de armazenar os programas
e dados que estão sendo processados.
● É considerada um meio temporário de
armazenamento de dados, pois estes permanecem ali
somente durante o tempo em que estiverem sendo
utilizados pelo processador.
● É na memória principal que o processador armazena
os resultados de cada uma das operações que ele
realiza.
4
Memória Secundária
● Pode ser composta por vários dispositivos capazes de
armazenar grandes quantidades de dados e
programas.
● É um tipo de memória não volátil, teoricamente
permanente e mais lenta.
● Um programa armazenado em memória secundária
precisa ser carregado na memória principal antes de
ser executado.
5
Dispositivos de entrada
● São os recursos ou componentes que permitem que o
usuário forneça dados para o computador.
● Nesta disciplina, o dispositivo padrão para entrada de
dados nos programas é o teclado.
6
Dispositivos de saída
● São os recursos ou componentes que permitem que o
computador forneça dados para o usuário.
● Nesta disciplina, o dispositivo padrão para saída de
dados nos programas é o monitor.
7
Canal de comunicação
● A comunicação entre os dispositivos é
realizada através de diferentes tipos de cabos
que, em geral, transmitem um sinal contínuo.
● Dados são transmitidos utilizando apenas
dois estados possíveis: ausência ou presença
do sinal a cada instante.
8
Bits e bytes
Bit (“Binary DigiT” – dígito binário)
● Menor unidade de Informação, que armazena
somente um dos valores “0” ou “1”;
Byte (“BinarY Term” – termo binário)
● Conjunto de 8 bits, com o qual pode-se representar
os números, as letras, os sinais de pontuação, etc...
Palavra (Word)
● É a quantidade de bits que a CPU processa por vez.
● Nos computadores atuais, são comuns palavras de
32 ou 64 bits.
9
Bits e bytes
Unidades Usual Informática
Kilo (K) 103 210 bytes
6 20
Mega (M) 10 2 bytes
Giga (G) 109 230 bytes
12 40
Tera (T) 10 2 bytes
Exemplo: Qual a quantidade exata de bits que
um PEN DRIVE de 8 GB possui?
8 GB = 8 * 230 * 8 = 68719476736 bits
10
Bits e bytes
Representação de uma memória de 1 KB:
Endereço Byte
0
1
2 0 1 0 0 0 0 0 1
...
1023
● No byte com endereço 2 está armazenado o
código binário que representa o caractere “A”.
● O processador acessa o conteúdo de um byte a
partir do endereço desse byte.
11
Bits e bytes
● Os computadores só trabalham com bytes e
palavras.
● Toda informação armazenada e processada é
um conjunto de bits e bytes:
● Letras, dígitos e símbolos;
● Cores, ícones, figuras e fotos;
● Textos, músicas e vídeos...
12
Bits e bytes
● Tabela ASCII:
padrão para letras,
dígitos e símbolos.
13
Bits, bytes e programas
● O computador é capaz de executar diferentes
programas, desenvolvidos com finalidades
distintas: processador de texto, planilha
eletrônica, calculadora, navegador, etc.
● Cada programa só pode ser executado através
de um arquivo executável.
14
Bits, bytes e programas
● Um arquivo executável é composto por milhares
de instruções simples definidas através de
sequências de 0’s e 1’s.
● A linguagem que define a estrutura de um arquivo
executável é denominada Linguagem de
Máquina.
15
Linguagem de Máquina
● A Linguagem de Máquina é a linguagem que o
computador é capaz de entender e executar.
● Por se tratar de uma sequência muito grande
de 0’s e 1’s, programar em Linguagem de
Máquina é uma tarefa extremamente difícil.
16
Linguagens de Programação
● Um grande avanço ocorreu na computação
quando começaram a surgir programas que
traduziam instruções para Linguagem de
Máquina.
● Instruções em Linguagens de Programação
(ou Linguagens de Alto Nível) são escritas de
forma muito mais clara e legível para o
programador.
17
Tradutor
O Programador escreve um programa Código
em uma Linguagem de Programação. Fonte
Um programa específico é utilizado
para traduzir as instruções definidas Tradução
em Linguagem de Programação.
O resultado é um programa em Arquivo
executável
Linguagem de Máquina.
18
Tradutor
[Link]
Nesta disciplina:
● Linguagem de Programação:
linguagem C++
● Código fonte: arquivos com
Compilador
extensão “.cpp”
● Tradutor: compilador
● Traduzir: compilar
[Link]
19
Tradutor
[Link]
Para que o processo de
tradução seja possível, é
necessário que o compilador
consiga identificar cada
instrução no código fonte. Compilador
Por este motivo, o programador
precisa observar uma série de
regras ao utilizar uma linguagem
de programação. [Link]
20
Sintaxe e semântica
SINTAXE:
● Conjunto de regras que definem como uma
linguagem de programação pode ser utilizada.
● O programador precisa seguir estas regras ao
escrever as instruções dos programas para
que o compilador possa “entendê-las” e
traduzi-las.
21
Sintaxe e semântica
SEMÂNTICA:
● Cada instrução tem uma finalidade bem
específica.
● A combinação de instruções tem um
significado lógico, isto é, uma sequência de
instruções colabora de forma parcial para que
os objetivos do programa sejam alcançados
durante sua execução.
22
Sintaxe e semântica
SINTAXE:
● Se o programador comete um erro de sintaxe,
o compilador interrompe o processo de
tradução e indica a linha do arquivo onde o
erro provavelmente ocorreu (o arquivo
executável não é gerado).
● Exemplos de erros de sintaxe:
● Palavras com erro de grafia;
● Parênteses ou aspas que não fecham;
● Ausência de vírgulas, pontos ou ponto e vírgula;
● Entre outros.
23
Sintaxe e semântica
SEMÂNTICA:
● Se o programa gerado não cumpre ou cumpre
parcialmente seus objetivos, seu código fonte
provavelmente contém erros de lógica.
● É comum um programa funcionar corretamente
na maioria das vezes e apresentar um erro de
lógica só em condições muito específicas.
● Erros de lógica não são apontados pelo
compilador; encontrá-los é tarefa do programador.
● Estes erros costumam ser difíceis de se
encontrar...
24
Sintaxe e semântica
Qual o erro de lógica na sequência de instruções
do programa abaixo?
1. Peça ao usuário do programa que digite o
número de pontos do time 1 (chamaremos este
valor de pt1)
2. Peça ao usuário que digite o número de pontos
do time 2 (chamaremos este valor de pt2)
3. Se pt1 > pt2:
3.1. Escreva “Time 1 venceu”
4. Senão:
4.1. Escreva “Time 2 venceu”
25
Sintaxe e semântica
No desenvolvimento de um programa, estes dois
aspectos estão presentes todo o tempo:
SINTAXE:
é necessário conhecer a linguagem de
programação e suas regras para poder construir o
programa.
SEMÂNTICA:
é necessário conhecer a finalidade de cada
instrução da linguagem e, principalmente, é
necessário saber combinar estas finalidades
isoladas para se alcançar o objetivo do programa.
26
Lógica de Programação
● No desenvolvimento de um programa, o
programador utiliza um modo de raciocínio
pouco comum em outras áreas do
conhecimento:
encontrar uma sequência de instruções que
resolvam um determinado problema.
● A Lógica de Programação pode ser entendida
como o conjunto de raciocínios utilizados nesta
tarefa.
27
Algoritmos
Algoritmo
Sequência de instruções que resolve
determinado problema.
Programa
Algoritmo escrito em uma linguagem de
programação específica, isto é, um algoritmo
que pode ser executado em um computador.
Lógica de Programação
Conjunto de raciocínios utilizados para criar um
algoritmo.
28
Algoritmos
● De forma mais detalhada, um algoritmo:
● É uma sequência de instruções bem definidas;
● Pode receber ou gerar informações (dados de
entrada e saída);
● Tem um início e é finito (sempre termina);
● Cumpre um propósito específico.
29
Algoritmos
● Na maior parte das vezes, elaborar o algoritmo
para resolver um problema é o maior desafio na
programação.
● Embora algoritmos já façam parte do dia a dia
das pessoas, elaborar algoritmos de forma
sistemática é uma atividade raramente
exercitada.
30
Algoritmos - exemplos
Treino de corrida para iniciantes
1. Caminhe por 5 minutos em ritmo lento;
2. Repita 5 vezes a seguinte sequência:
2.1. Corra por 30 segundos em um ritmo em
que você respire com dificuldade;
2.2. Caminhe por 60 segundos.
3. No final, caminhe por 5 minutos em ritmo lento.
31
Algoritmos - exemplos
Receita de brigadeiro
1. Coloque em uma panela o conteúdo de uma lata de leite
condensado, três colheres de sopa de chocolate em pó e uma
colher de sopa de manteiga;
2. Misture bem;
3. Leve ao fogo baixo;
4. Até que o brigadeiro comece a desprender do fundo da panela:
4.1. Mexa o brigadeiro para que não grude na panela;
5. Retire do fogo;
6. Coloque em um prato untado com manteiga;
7. Enquanto houver brigadeiro no prato:
7.1. Retire uma parte do brigadeiro com uma colher pequena;
7.2. Faça uma bolinha;
7.3. Passe a bolinha sobre o chocolate granulado;
32
7.4. Coloque em uma forminha.
Algoritmos
Observe que (como vimos anteriormente):
● A ordem das instruções é significativa.
● Dificilmente existe um único algoritmo para
resolver um problema.
33
Algoritmos
● Vamos tentar?
Elabore um algoritmo para trocar
uma lâmpada em um quarto vazio,
assumindo que estão disponíveis
uma escada e uma lâmpada nova.
34
Algoritmos
Como trocar uma lâmpada comum em um quarto vazio
1. Se o interruptor está ligado: 10. Enquanto não chegar no chão:
1.1. Desligue o interruptor; 10.1. Desça um degrau;
2. Pegue a escada; 11. Acione o interruptor;
3. Leve a escada até o local; 12. Jogue a lâmpada queimada
4. Posicione a escada; no lixo apropriado;
5. Busque a lâmpada nova; 13. Guarde a escada.
6. Suba um degrau;
7. Enquanto não alcançar a lâmpada
queimada e houver degrau acima:
7.1. Suba um degrau;
8. Retire a lâmpada queimada;
9. Coloque a lâmpada nova;
35
Algoritmos
● Ao longo do curso, vamos resolver:
● Problemas matemáticos, como, por exemplo,
média aritmética de uma sequência numérica,
raízes de uma equação de segundo grau,
máximo divisor comum entre dois números,
operações em matrizes, etc.
36
Algoritmos
● Ao longo do curso, vamos resolver:
● Questões genéricas de leitura,
armazenamento e processamento de dados,
como, por exemplo, atualizar o saldo de uma
conta, encontrar os dados de uma pessoa pelo
seu nome, verificar quantas pessoas são
maiores de idade em um evento, etc.
● Entre outros.
37
Algoritmos
Formas de representação
● Dentre as formas de representação de
algoritmos mais conhecidas,
sobressaltam:
● A Descrição Narrativa
● O Fluxograma Convencional
● O Diagrama de Chapin
● A Pseudolinguagem
38
Descrição Narrativa
● Nesta forma de representação, os algoritmos
são expressos diretamente em linguagem
natural (como fizemos até agora).
Troca de um pneu furado
1. Afrouxe ligeiramente as porcas;
2. Suspenda o carro;
3. Retire as porcas e o pneu;
4. Coloque o pneu reserva;
5. Aperte as porcas;
6. Abaixe o carro;
7. Dê o aperto final nas porcas.
39
Descrição Narrativa
Cálculo da média de um aluno
1. Obter as notas da primeira e da segunda prova;
2. Some as duas notas e divida o resultado por 2;
3. Se a média for maior ou igual a 6,
3.1. Escreve “Aprovado”;
4. Senão,
4.1. Escreve “Reprovado”.
● Esta representação precisa ser usada com
cuidado porque o uso de linguagem natural
pode dar oportunidade a más interpretações,
ambigüidades e imprecisões.
40
Fluxograma
● Representação gráfica de algoritmos onde
formas geométricas diferentes indicam
instruções distintas.
● Tal propriedade facilita o entendimento das
idéias contidas nos algoritmos.
41
Fluxograma
Principais formas geométricas usadas em fluxogramas.
= Início e final do fluxograma .
= Operação de entrada de dados
= Operação de saída de dados em impressora
= Operação de saída de dados em vídeo
= Operações de atribuição
42
Fluxograma
= Decisão
= Seta do fluxo de dados
= Conector utilizado quando é
preciso particionar o diagrama,
colocando uma letra ou número no
símbolo para indentificar os pares
da conexão
43
Fluxograma
A figura ao lado mostra
a representação do
algoritmo para cálculo
da média de um aluno
sob a forma de um
fluxograma.
44
Fluxograma
● Desenhar o fluxograma é uma tarefa difícil
dependendo da complexidade do algoritmo.
● Modificar ou corrigir o algoritmo, depois de
desenhado o fluxograma, pode ser complicado.
45
Diagrama de Chapin
● O diagrama foi criado por Ned Chapin.
● Surgiu para substituir o fluxograma tradicional
possibilitando uma visão hierárquica e
estruturada da lógica do programa.
46
Diagrama de Chapin
Na figura ao lado
encontra-se um
diagrama de Chapin
representando o
algoritmo para cálculo
da média de um aluno.
47
Diagrama de Chapin
● Representar o diagrama é difícil,
especialmente quando há muitos comandos
aninhados (isto é, quando um item do
algoritmo tem um subitem, que tem um
subitem...).
● Assim como ocorre no fluxograma, modificar
ou corrigir o algoritmo pode ser complicado.
48
Pseudolinguagem
● Esta forma de representação de algoritmos,
também conhecida como pseudocódigo,
português estruturado ou portugol, é
bastante rica em detalhes e assemelha-se
bastante à forma em que os programas são
escritos.
● A tradução do pseudocódigo de um algoritmo
para uma linguagem de programação é
praticamente direta.
49
Pseudolinguagem
O pseudocódigo que representa o algoritmo de
cálculo da média de um aluno:
principal
{
real n1, n2, media;
leia(n1, n2);
media ← (n1 + n2)/2;
se (media >= 6)
{
imprima ("Aprovado");
}
senão
{
imprima ("Reprovado");
}
}
50
Algoritmos
Formas de representação
● Nesta disciplina, não é exigida nenhuma
forma específica de representação de
algoritmos e você deverá resolver todos os
exercícios na linguagem de programação
C++.
● No entanto, descrever o algoritmo antes de
escrever o código em C++ muitas vezes
auxilia o aluno a compreender melhor o
problema e a solução acaba sendo mais fácil.
51
Introdução e
Conceitos Básicos
DC5199 - Algoritmos - Prática
Algoritmos
Definição: sequência finita de instruções que,
quando executada, resolve o problema
proposto.
● Um algoritmo pode ser representado de
diversas formas (descrição narrativa,
fluxograma, diagrama de Chapin,
pseudocódigo).
53
Linguagem de Programação
● “É um conjunto de regras sintáticas e
semânticas usadas para definir um programa
de computador. Uma linguagem permite que
um programador especifique precisamente
sobre quais dados um computador vai atuar,
como estes dados serão armazenados ou
transmitidos e quais ações devem ser
tomadas sob várias circunstâncias.”
54
Linguagem de Programação
● A primeira linguagem de programação surgiu
na década de 40.
● Lista de linguagens de programação
● Linha do tempo com aproximadamente 40
linguagens de programação
55
Linguagem C++
● Linguagem de programação que será utilizada
durante a disciplina.
● A linguagem C++ foi criada em 1982 pelo
pesquisador Bjarne Stroustrup como sucessora
da linguagem C e possui diversas vantagens
em relação à sua antecessora.
56
Linguagem C++
● A linguagem C++ é amplamente utilizada,
incluindo o desenvolvimento de sistemas
embarcados, bibliotecas gráficas, jogos,
sistemas operacionais, entre outros
● A linguagem C++ é considerada simples
● Muito utilizada em aplicações de alto
desempenho
57
Programas de computadores
● Um programa é um algoritmo escrito em uma
linguagem de programação.
● Programas devem ter uma finalidade específica:
● Games
● Processadores de Texto
● Navegadores (Browsers)
● Etc.
● Para que um programa escrito em Linguagem de
Programação seja executado no computador, é
necessário anteriormente convertê-lo para
Linguagem de Máquina (0’s e 1’s).
58
O compilador
O Programador escreve um programa
[Link]
em uma Linguagem de Programação
(por exemplo, a linguagem C++).
O compilador é um programa
específico utilizado para traduzir as Compilador
instruções definidas em C++ para
Linguagem de Máquina.
O resultado é o arquivo executável [Link]
do programa em Linguagem de
Máquina.
59
O compilador
● O compilador também é um programa, escrito
em alguma linguagem de programação.
● Quem controla a execução do compilador (e de
qualquer outro programa) é o Sistema
Operacional do computador.
60
Sistema Operacional (SO)
● É um programa especial que controla e
coordena todas as operações básicas de um
computador.
● Ele controla a execução de outros programas e
pode proporcionar funções como:
● controle de entrada e saída de dados;
● alocação de memória;
● gerenciamento de dados, etc ...
61
Sistema Operacional - Linux
● Sistema instalado nos computadores do
laboratório.
● Criado inicialmente como um hobby pelo
estudante Linus Torvalds, na Universidade de
Helsinki (Finlândia).
● Linus tinha um interesse especial pelo
Sistema Operacional Minix, baseado no
sistema Unix.
62
Sistema Operacional - Linux
● 1991 : versão 0.02
● 1994 : versão 1.0
● O código do núcleo (kernel) é aberto: gratuito
e disponível a todos
● Com base no kernel diversas distribuições
podem ser encontradas: Linux Mint, Ubuntu,
Debian, Mandriva, Fedora ...
[Link]
63
Programa em C++
● Toda linguagem de programação deve seguir uma
sintaxe.
● A sintaxe são regras detalhadas que permitem a
construção de uma instrução válida.
● Como ainda não aprendemos nada sobre a
linguagem C++, nesta aula vamos ver apenas
exemplos bem simples...
64
Programa em C++
● Neste começo, vamos utilizar sempre uma
estrutura básica para construir nossos
programas. Esta estrutura não será explicada
em detalhes agora, mas, ao longo da disciplina,
você irá entendê-la melhor.
#include <iostream>
using namespace std;
int main( )
{
return 0;
}
65
Programa em C++
● Todo programa em C++ deve conter uma função
identificada por main que será sempre a primeira
função do programa a ser executada. Neste
caso, nada é feito no programa.
#include <iostream>
usingmain(
namespace
) std;
{
int main( )
{ }
return 0;
}
66
Programa em C++
● Para seu primeiro programa fazer alguma coisa,
use a instrução cout para imprimir um texto na
tela, como no exemplo abaixo. Dois símbolos de
menor (<<), aspas duplas e ponto e vírgula são
necessários.
#include <iostream>
usingmain( )
namespace std;
{
int main( )
{ }
cout << " Um texto qualquer ";
return 0;
} 67
IDE - Integrated Development
Environment
● Ambiente Integrado de Desenvolvimento:
programa de computador que reúne
características e ferramentas de apoio ao
desenvolvimento de software com o objetivo
de agilizar este processo.
68
IDE - Integrated Development
Environment
● Ambiente para programação que combina:
● editor de texto (especificamente
desenvolvido para edição de código fonte),
● compilador,
● depurador (funcionalidade que ajuda a testar
e encontrar erros em um código),
● entre outros.
69
IDE – CodeBlocks
● CodeBlocks: IDE disponível para Linux e
Windows
[Link]
● Download gratuito
● Como instalar o CodeBlocks no Windows
[Link]
/tutorial/codeblocks-tutorial/
70
IDE – CodeBlocks
71
IDE – CodeBlocks
Criando um Programa.
72
IDE – CodeBlocks
73
IDE – CodeBlocks
74
IDE – CodeBlocks
75
IDE – CodeBlocks
76
IDE – CodeBlocks
77
IDE – CodeBlocks
78
IDE – CodeBlocks
79
Outras maneiras
● Outro IDE muito utilizado é o Visual Studio Code
(VS Code)
● Neste vídeo você pode ver um tutorial de como
realizar a instalação e configuração:
[Link]
80
Outras maneiras
● Diversos sites oferecem uma versão online de um
IDE e compilador.
● Nestes sites não há necessidade de realizar a
instalação de um software em sua máquina
● Alguns exemplos:
IDEOne: [Link]
OnlineGDB: [Link]
[Link]: [Link]
81
Exercícios
1. Faça um programa que imprima o seu nome e
sobrenome no formato (Sobrenome,Nome).
2. Sabendo que a instrução
cout << "\n";
faz com que o cursor da saída mude de linha,
faça um programa que forme a letra inicial de
seu nome utilizando sequências de espaço e
letra X. Ex:
XXX XXX
XXXX XXXX
XX XX XX XX
XX XXX XX
XX X XX 82
Exercícios
3. O código a seguir apresenta um erro. Copie no
IDE da sua preferência e tente compilar. Qual
erro foi reportado? Em qual linha do código ele
ocorreu? Realize a correção do erro.
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 cout << "O compilador pode nos ajudar a identificar erros"
6 return 0;
7 }
83
Exercícios
4. O código a seguir apresenta erros. Copie no
IDE da sua preferência e tente compilar.
Quais erros foram reportados? Realize a
correção dos erros, na ordem em que são
reportados.
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 cout << "Erros devem ser ;
5 cout << "corrigidos na ordem em que sao identificados,";
6 out << " pois ao corrigir ";
7 cout < "um erro \nOutros podem ser identificados";
8 return 0;
9 }
84