Escolar Documentos
Profissional Documentos
Cultura Documentos
Lógica de
Programação II
Unidade I:
Introdução à linguagem C
Prof. Me. Pietro Martins de Oliveira
Introdução à linguagem C
• Linguagens:
• Interpretadas
• Compiladas (C)
• Processo de compilação+linkedição
Bibliotecas linkeditor
Programa - Executável
Introdução à linguagem C
• Comentários
• Há situações em que o programador quer
deixar anotações registradas no código fonte
• Tais informações não podem ser interpretadas
como instruções executáveis
• São apenas informações instrutivas
(documentação)
• O compilador deve desconsiderar qualquer coisa
que esteja em comentário
• Comandos “barra-barra” & “barra-asterisco”:
• // <comentário>
• /* <comentário> */
Algoritmos de
Lógica de
Programação II
Unidade I:
Conceitos fundamentais em programação
Prof. Me. Pietro Martins de Oliveira
Semântica × Sintaxe
• Sintaxe:
• Linguagem estruturada:
• Regras para a escrita do código
• Ordem de escrita do código
• Pontuação
• Semântica:
• Significado do código
• Passo a passo para a resolução do problema
• Lógica de programação
• O que o código executa e produz como
resultado
Idenfiticadores
• Estruturas de um programa:
• Palavras reservadas
• Tipos de dados
• Constantes
• Variáveis
• Atribuição
• Operadores
• Aritméticos, relacionais e lógicos
• Funções
• Entrada e saída de dados
Tipos de dados
• Exemplos de atribuição:
Unidade I:
Operadores
Prof. Me. Pietro Martins de Oliveira
Operadores aritméticos
• Soma • Módulo
• Símbolo: + • Resto de divisão
• Subtração inteira
• Símbolo: - • Símbolo: %
• Multiplicação • Prioridades –
• Símbolo: * parênteses
• Divisão • Símbolo: ()
• Símbolo: /
Operadores aritméticos
• Negação
• Inverte um valor lógico
• Símbolo: !
• Conjunção
• Operação “E” lógica
• Símbolo: &&
• Disjunção
• Operação “E” lógica
• Símbolo: ||
Operadores lógicos
Considere:
A = 2
B = 3
Algoritmos de
Lógica de
Programação II
Unidade I:
Funções intrínsecas
Prof. Me. Pietro Martins de Oliveira
Funções intrínsecas
• Exemplo
ATENÇÃO:
IDENTAÇÃO
Unidade I:
Entrada e saída de dados
Prof. Me. Pietro Martins de Oliveira
Entrada e saída de dados
• Execução do programa
Entrada e saída de dados
• Execução do programa
Entrada e saída de dados
• Execução do programa
Unidade II:
Estruturas Condicionais
Prof. Me. Pietro Martins de Oliveira
Introdução
• O comando if
• O bloco de comandos definido pelo if só é
executado caso sua condição seja verdadeira
• A condição deve ser expressa de uma
expressão lógico-relacional
• Há várias formas de se organizar a sintaxe do
comando if
• Simples
• Composta
• Aninhada
Estrutura condicional simples
ATENÇÃO:
INDENTAÇÃO
Exemplo
Exemplo
ATENÇÃO:
INDENTAÇÃO
Exemplo
TESTE DE
MESA!!!
TESTE DE
MESA!!!
TESTE DE
MESA!!!
numero → 11
Saída (tela) → Digite um número inteiro:
Exemplo
TESTE DE
MESA!!!
numero → 11
Saída (tela) → Digite um número inteiro:
Exemplo
TESTE DE
MESA!!!
numero → 11
Saída (tela) → Valor maior que 10.
Condições complexas
ATENÇÃO:
INDENTAÇÃO
Exemplo
TESTE DE
MESA!!!
TESTE DE
MESA!!!
TESTE DE
MESA!!!
num → 11
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 11
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 11
Saída (tela) → Valor entre 10 e 20
Exemplo
TESTE DE
MESA!!!
TESTE DE
MESA!!!
TESTE DE
MESA!!!
num → 5
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
Saída (tela) → Digite um número:
Unidade II:
O par de comandos if-else
Prof. Me. Pietro Martins de Oliveira
Estrutura condicional composta
ATENÇÃO:
INDENTAÇÃO
Estrutura condicional composta
TESTE DE
MESA!!!
num → <lixo>
resto → <lixo>
Exemplo
TESTE DE
MESA!!!
num → <lixo>
resto → <lixo>
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → <lixo>
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → 2
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → 1
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → 1
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → 1
Saída (tela) → Digite um número:
Exemplo
TESTE DE
MESA!!!
num → 5
resto → 1
Saída (tela) → Ímpar!
Observação Importante!!!
Essas duas
instruções podem
ser
substituídas pela
operação de
módulo
(%) que se
estudamos na
Unidade I
O mesmo exemplo, porém com o operador %
ATENÇÃO:
INDENTAÇÃO
Unidade II:
Encadeamento de comandos if e if-else
• Sintaxe genérica
ATENÇÃO:
IDENTAÇÃO
Exemplo
TESTE DE
MESA!!!
media →
Exemplo
TESTE DE
MESA!!!
media →
Saída (tela) → Digite a nota do aluno:
Exemplo
TESTE DE
MESA!!!
media → 6.9
Saída (tela) → Digite a nota do aluno:
Exemplo
TESTE DE
MESA!!!
media → 6.9
Saída (tela) → Digite a nota do aluno:
Exemplo
TESTE DE
MESA!!!
media → 6.9
Saída (tela) → Digite a nota do aluno:
Exemplo
TESTE DE
MESA!!!
media → 6.9
Saída (tela) → Digite a nota do aluno:
Exemplo
TESTE DE
MESA!!!
media → 6.9
Saída (tela) → Vai fazer sub.
Unidade II:
Os comandos switch-case
Prof. Me. Pietro Martins de Oliveira
Estrutura condicional múltipla
TESTE DE
MESA!!!
num →
Exemplo
TESTE DE
MESA!!!
num →
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Digite o número do dia da semana:
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Terça-feira.
Exemplo
TESTE DE
MESA!!!
num → 3
Saída (tela) → Terça-feira.
Unidade III:
Estruturas de repetição
Prof. Me. Pietro Martins de Oliveira
Introdução
Estruturas de Repetição
• Também conhecidas como Laços ou Loops
• Utilidade: iterar um bloco de comandos
• Toda estrutura de repetição possui um critério de
parada
• Critério de parada pode ser falho: loop infinito
Unidade III:
O comando for
Prof. Me. Pietro Martins de Oliveira
O comando for
ATENÇÃO:
INDENTAÇÃO
Exemplo
TESTE DE
MESA!!!
cont →
Saída (tela) →
Unidade III:
O comando while
Prof. Me. Pietro Martins de Oliveira
O comando while
TESTE DE
MESA!!!
Valor →
soma →
Saída (tela) → Digite um valor:
Unidade III:
O par de comandos do-while
Prof. Me. Pietro Martins de Oliveira
Os comandos do-while
• Estrutura do-while:
• O código do laço deve ser executado por pelo
menos uma vez, antes de se verificar a
condição
while(<Condição 1>){
while(<Condição 2>){
<bloco de comandos>
}
}
Estruturas de repetição aninhadas
• Exemplos de aninhamento:
• Um for dentro de outro for
For(var1=inicio1;var<fim1;var1++){
for(var2=inicio2;var<fim2;var2++){
<Bloco de instruções>
}
}
Estruturas de repetição aninhadas
• Exemplos de aninhamento:
• Um while dentro de um for
for(var=inicio;var<fim;var++){
while(<condição>){
<Bloco de instruções>
}
}
Estruturas de repetição aninhadas
• Exemplos de aninhamento:
• Um do-while dentro de um for
for(var=inicio;var<fim;var++){
do{
<Bloco de instruções>
}while(<condição>);
}
Estruturas de repetição aninhadas
• Exemplos de aninhamento:
• Um do-while dentro de um while
while(<condição1>){
do{
<Bloco de instruções>
}while(<condição2>);
}
Estruturas de repetição aninhadas
• Exemplos de aninhamento:
• Um Para dentro de um Enquanto
while(<condição>){
for(var=inicio;var<fim;var++){
<Bloco de comandos>
}
}
Estruturas de repetição aninhadas
for(var=inicio;var<fim;var++){
<Bloco de comandos do FOR>
do{
<Bloco de comandos do DO-WHILE>
while(<condição1>){
<Bloco de comandos do WHILE>
}
<Bloco de comandos do DO-WHILE>
}while(<condição2>);
<Bloco de comandos do FOR>
}
Utilidade das estruturas de repetição
• Contadores
• Variável utilizada em conjunto com um laço para
contar o número de vezes que um evento ocorreu
• Acumuladores
• Variável para somar uma série de números
• Vetores
• Controlar o índice do vetor
• Matrizes
• Controlar o acesso a linhas e colunas
• Algoritmos iterativos
Utilidade das estruturas de repetição
Vetor B:
Índice 0 1 2
Conteúdo 15 66 42
Vetores
▪Exemplo 1:
printf(“%d”, B[0]);
▪Exemplo 2:
B[i] = i + j;
▪Exemplo 3:
soma = soma + B[i];
Exemplo
Índice 1 2 3 4
Conteúdo 5,5 9,0 8,3 6,4
Índice inicial = 0
Índice final = N – 1 = TAM – 1 = 4 - 1 = 3
Exemplo
Índice 0 1 2 3
Valor 5.5 9.0 8.3 6.4
Exemplo
Algoritmo meu_vetor2
Var notas: Vetor[1..4] de real
Inicio
Para i de 1 até 4 passo 1 faça
escreva("Digite a nota ", i, ":")
leia(notas[i])
Fim_para
Fim
Teste de mesa
Fim da execução!
Unidade IV:
Strings – manipulando texto em C
Prof. Me. Pietro Martins de Oliveira
Strings
string
Strings
• Tamanho
Índice Conteúdo
0
1
2
3
4
5
6
Strings
• Inicialização
• Atribuição
• Não é possível atribuir vários valores ao mesmo
tempo, por ex.:
? ?
? ?
Strings
• scanf()
• Não lê frases com espaço
• Dispensa o operador &
• gets()
• Lê espaço, sintaxe mais simples
• Cuidado: permite textos maior que o tamanho
Strings
• strcpy()
• Copia ou atribui o conteúdo da string origem
para destino;
• Sintaxe: strcpy(destino,origem)
• O tamanho do destino deve ser igual ou maior
que a origem
Strings
• Igualdade
• Função strcmp()
• Compara o conteúdo da primeira string com o
da segunda
• Retorna 0, caso as strings sejam idênticas
• Retorna algo diferente de 0, caso contrário
• É case sensitive: maiúsculo ≠ minúsculo
Strings
• Igualdade
• Exemplo:
Strings
• Concatenação
• Função strcat();
• Sintaxe: strcat(destino,origem);
• Junta o conteúdo da string de origem ao final
do conteúdo da string de destino
Strings
• Estrutura
• Uma string é um vetor, com N caracteres
• Cada caractere em um índice
• Índices variam de 0 a N-1
• Final da string sempre deve conter o caractere
de controle ‘\0’
• N-1 caracteres “utilizáveis”
• Ex.:
0 1 2 3 4 5 6 7 8 9
A L G O R I T M O \0
Unidade IV :
Matrizes
Prof. Me. Pietro Martins de Oliveira
Introdução
• Considere a tabela:
ano 2010 2011 2012
produto
Arroz 6,00 6,50 7,00
Feijão 4,00 4,35 5,25
Macarrão 3,50 3,30 3,75
• Aplicações com tabelas são inerentemente
matriciais
• Solução: MATRIZES
Matrizes
Mat =
Matrizes
• Resultado da execução:
Unidade IV:
Registros
Prof. Me. Pietro Martins de Oliveira
Introdução
• Registros em linguagem C:
• Sintaxe:
struct <nome_do_registro>{
<tipo> <nome_do_campo1>;
<tipo> <nome_do_campo2>;
...
<tipo> <nome_do_campoN>;
};
• Esta é a declaração de um novo registro, um novo
tipo de dados, um tipo composto, reconhecido por
<nome_do_registro>
Exemplo
• Exemplo:
struct produto p1;
Structs
• Sintaxe:
<nome_da_variável>.<campo>
Structs
• Exemplos:
• Validação de CPF/CNPJ
• Encontrar um CEP
• Calcular frete
• Inicialização de vetores e matrizes
• Exibição de mensagens
• Parâmetros:
• Lista de variáveis de entrada
• Cada variável possui um tipo e um nome
• Podem existir nenhum, um ou vários parâmetros
Exemplo
• Invocando a função:
Exemplo
TESTE DE
MESA!!!
qui → gra →
Saída (tela) →
Unidade V:
Sub-rotinas - procedimentos
Prof. Me. Pietro Martins de Oliveira
Procedimentos
E se precisássemos realizar a
soma de mais dois números,
repetidamente???
Exemplo
Solução ineficiente e
deselegante!
Exemplo
Fonte: adaptado de
MANZANO;
OLIVEIRA (1997)
Passagem de parâmetros
Parâmetro formal!
Parâmetro real!
Exemplo – Passagem de parâmetro por valor
Passagem de
parâmetro
por valor!
Exemplo – Passagem de parâmetro por referência
Parâmetro formal!
Parâmetro real!
Exemplo – Passagem de parâmetro por referência
Passagem de
parâmetro
por referência!
Unidade V:
Recursividade
Prof. Me. Pietro Martins de Oliveira
Recursividade
• A função Fatorial:
• Na matemática, a função fatorial de um
número n, onde n ∈ Z+, é o resultado do
produto de todos os inteiros positivos que são
menores ou iguais ao próprio n.
• Ou seja:
• n! = n × (n-1) × (n-2) × ... × 3 × 2 × 1
• Exemplo: fatorial de 5
• 5! = 5 × 4 × 3 × 2 × 1 = 120
Exemplo
Fatorial:
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
▪5! = 5 × 4 × 3 × 2 × 1 = 120
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
▪5! = 5 × 4 × 3 × 2 × 1 = 120
▪Qual é o fatorial de 6?
▪6! = ?
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
▪5! = 5 × 4 × 3 × 2 × 1 = 120
▪6! = 6 × 5 × 4 × 3 × 2 × 1
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
▪5! = 5 × 4 × 3 × 2 × 1 = 120
▪6! = 6 × 5 × 4 × 3 × 2 × 1
Exemplo
Fatorial:
▪0! = 1
▪1! = 1
▪2! = 2 × 1 = 2
▪3! = 3 × 2 × 1 = 6
▪4! = 4 × 3 × 2 × 1 = 24
▪5! = 5 × 4 × 3 × 2 × 1 = 120
Ou seja...
▪É possível definir o fatorial de um número n como
sendo o próprio número n multiplicado pelo fatorial
do seu antecessor n-1
▪n! = n × (n-1)!
Exemplo:
▪0! = 1 (por definição)
▪1! = 1 (por definição)
▪2! = 2 × 1!
▪3! = 3 × 2!
▪4! = 4 × 3!
▪ e assim por diante...
Exemplo
1, 𝑠𝑒 𝑛 = 0 𝑜𝑢 𝑛 = 1;
• Γ(n) =
𝑛 × 𝑛 − 1 !, 𝑠𝑒 𝑛 > 1.
Caso base
Chamada recursiva
Exemplo
fat(5)
Exemplo
fat(5) 5*fat(4)
Exemplo
fat(5) 5*fat(4)
fat(4)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
fat(2)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
fat(2) 2*fat(1)
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
fat(2) 2*fat(1)
fat(1)
Exemplo
Caso base:
propagação
dos resultados
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
fat(2) 2*fat(1)
fat(1) 1
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*fat(2)
fat(2) 2*1
fat(1) 1
Exemplo
fat(5) 5*fat(4)
fat(4) 4*fat(3)
fat(3) 3*2
fat(2) 2
fat(1) 1
Exemplo
fat(5) 5*fat(4)
fat(4) 4*6
fat(3) 6
fat(2) 2
fat(1) 1
Exemplo
fat(5) 5*24
fat(4) 24
fat(3) 6
fat(2) 2
fat(1) 1
Exemplo
Solução:
combinação
dos
resultados
fat(5) 120
fat(4) 24
fat(3) 6
fat(2) 2
fat(1) 1
Unidade V:
Arquivos
Prof. Me. Pietro Martins de Oliveira
Arquivos
• Biblioteca: <stdio.h>
• Variável do “tipo arquivo”: Ponteiro para um FILE
• Função para abrir um arquivo:
• fopen(nome_do_arquivo,
modo_de_abertura)
• Modos de abertura:
• r – Abre apenas para leitura
• w – Cria um arquivo para escrita
• a – Anexa novos dados
• r+ – Abre para leitura e escrita
• w+ – Cria arquivo para leitura e escrita
• a+ – Anexa dados ou cria novo arquivo p/ leitura e
escrita
Arquivos