Prévia do material em texto
IFB / Campus Taguatinga
Curso Tecnológico em Automação Industrial
AJ - Antonio Justiniano
Algoritmos e Programação
de Computadores - ALPC
PPC - Projeto Pedagógico de Curso
Objetivo: desenvolver algoritmos e programas de computadores a partir da
abordagem estruturada com uso de estruturas sequenciais, condicionais e de
repetição.
Pré-requisito: nenhum, mas recomenda-se Cálculo Diferencial e Integral I - CDI1.
Pós-requisito: Programação de Computadores I - PRG1.
Ementa:
● Conceito e desenvolvimento de algoritmos;
● Tipos de dados;
● Operações de entrada e saída;
● Estruturas fundamentais: sequência, decisão e repetição;
● Vetores e matrizes;
● Funções;
● Implementação de algoritmos usando uma linguagem de programação.
Conteúdo Programático
1. Introdução à computação;
2. Fundamentos da programação de computadores;
3. Lógica de programação de computadores;
4. Variáveis, atribuições e operadores aritméticos;
5. Comandos de entrada e saída;
6. Estruturas fundamentais:
6.1. Estruturas condicionais;
6.2. Estruturas de repetição;
7. Vetores e Matrizes;
8. Funções;
9. Introdução à Linguagem de Programação.
Metodologia de Trabalho
● Aulas participativas, onde o professor é o facilitador do
conhecimento, em laboratório computacional com:
○ Uso de ambiente virtual da disciplina;
○ Apresentação de slides;
○ Explicação dos conteúdos;
○ Exploração dos procedimentos;
○ Análise de situações-problema;
○ Debate acerca de opiniões, podendo ser convergentes
e divergentes;
○ Realização de atividades individuais e colaborativas.
● Todos devem preparar-se para os encontros, buscando o
material necessário para atingir as metas de cada.
Avaliações e Recursos
Avaliações de aprendizagem:
● Nota = NA1*0,3+NA2*0,4+NAC*0,3 (N1*P1+N2*P2+N3*P3), onde:
○ A1: avaliação individual escrita;
○ A2: avaliação individual (produção de relatório técnico);
○ AC: avaliação colaborativa (resolução de atividades e seminário);
● Poderá haver uma prova substitutiva, ao final, com matéria
cumulativa, para aqueles que desejarem substituir a menor das notas,
considerando o peso daquela que se substituirá.
Recursos necessários:
● Quadro branco e pincéis;
● Projetor de slides;
● Computadores em rede com os seguintes softwares:
○ Navegador;
○ VisualG; DevC++ ou CodeBlocks.
Bibliografia Disponível
● Principal:
○ ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida
Veneruchi de. Fundamentos da programação de computadores:
algoritmos, Pascal, C/C++ e Java. 3ª ed. São Paulo: Pearson Education
do Brasil, 2012 (pgs.3-270).
○ FORBELLONE, André Luiz Villar; EBERSPÄCHER, Henri Frederico.
Lógica de programação: a construção de algoritmos e estruturas de
dados. 3ª ed. São Paulo: Prentice Hall, 2005 (pgs.14-67).
○ SCHILDT, Herbert. C completo e total. Tradução de Roberto Carlos
Mayer. 3. ed. São Paulo: Pearson/Makron, 2009.
● Complementar:
○ MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo.
Algoritmos: Lógica para Desenvolvimento de Programação de
Computadores. São Paulo: Érica, 26ª Ed., 2012.
○ MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo:
Pearson Prentice Hall, 2ª. Edição, 2008.
○ Conteúdos da Web, cujos links estão no documento de apresentação.
ALPC 72h/a
- Agenda de
2018s1 -
Parte 1/3
02/03
Apresentações; Introdução à computação;
Fundamentos da Programação de Computadores;
Exercício 1.
09/03 Exercício 1: debate; Pensamento Computacional.
16/03
Avaliações: debate;
Ambiente para Programação de Computadores;
Técnicas de Programação de Computadores; Exercício 2.
23/03
Exercício 2: debate;
Português Estruturado; Uso do VisualG; Exercício 3.
06/04
Exercício 3: debate; Estruturas de controle;
Exercício 4.
13/04 Exercício 4: debate.
ALPC 72h/a
- Agenda de
2018s1 -
Parte 2/3
20/04 Avaliação 1: aplicação.
27/04
Avaliação 2: elaboração;
Estruturas de repetição; Exercício 5.
04/05
Exercício 5: debate;
Vetores e Matrizes; Exercício 6.
11/05
Avaliação 1: resultado;
Semana de Ciência & Tecnologia.
18/05
Exercício 6: debate;
Funções; Exercício 7.
08/06
Exercício 7: debate; Avaliação colaborativa:
elaboração; Introdução à linguagem de programação
C; Entrada e saída de dados em C.
ALPC 72h/a
- Agenda de
2018s1 -
Parte 3
09/06
(sábado) Avaliação 2: entrega. (5 aulas)
15/06
Exercício 8: debate;
Estruturas de controle condicional.
22/06
Exercício 9: debate;
Estruturas de Repetição.
29/06 Exercício 10: debate; Avaliação 2: resultado.
30/06
(sábado)
Avaliação colaborativa: finalização; resultado até
4/07. (5 aulas)
05/07 Avaliação substitutiva; Resultado final. (2 aulas)
Atendimento: por e-mail ou agendar terças-feiras, 18h,
Linf1/AT-05
Introdução à Computação
● Qual o Papel da Informática?
● Como ocorre o processamento de dados?
● O que é um computador? Para que serve?
● Como os computadores funcionam?
● Quais são os seus principais componentes?
● Como trabalhar com computadores?
● Qual é a organização básica de dados e informações?
Fundamentos da Programação de Computador
O que é lógica?
● O que você acha desta classificação? “Os animais se dividem em: a)
pertencentes ao imperador, b) embalsamados, c) domesticados, d) leitões, e)
sereias, f) fabulosos, g) cães em liberdade, h) incluídos na presente
classificação, i) que se agitam como loucos, j) inumeráveis, k) desenhados
com um pincel muito fino de pêlo de camelo, l) mas acabaram de quebrar a
bilha, n) que de longe aparecem moscas.” (As palavras e as coisas)
● Percebemos que há uma mistura de assuntos e tentamos “por ordem na
casa”, restabelecendo um critério, buscando aproximar e distinguir os animais
pelas suas semelhanças e diferenças
● Ao tentarmos compreender a realidade, procuramos formas corretas para
pensá-la. A lógica é a antessala da filosofia. Lógica vem do grego logos, que
significa palavra, expressão, pensamento, conceito, discurso, razão
● A lógica é a arte de pensar corretamente e, visto que a forma mais complexa
do pensamento é o raciocínio, a lógica estuda a “correção do raciocínio”, ou
seja, a lógica visa “a ordem da razão”, colocar ordem no pensamento
Lógica Matemática ou Simbólica
● Teve como precursor George Boole e foi desenvolvida depois por Whitehead
e Bertrand Russell
● Visa superar as dificuldades e ambiguidades de qualquer língua, que
poderiam atrapalhar o rigor lógico do raciocínio
● Para evitar essas dificuldades, criou-se uma linguagem simbólica artificial. Por
exemplo: usa-se as letras p, q, r, p1, q1, r1, etc. para indicar as variáveis; e,
para designar os conectivos, usa-se os sinais:
○ ┓ para “não”
○ ∨ para “ou”
○ ∧ para “e”
○ ⇒ para “implica” ou “se ...., então ...”
○ ⇔ para “equivalente a” ou “se e somente se”
● Consideremos como exemplo:
○ O país está em guerra ou a situação externa é calma (p ∨ q)
○ Se o país não está em guerra (┓ p)
○ Logo, a situação externa é calma (⇒ q)
Álgebra das Proposições
● Álgebra das proposições, ou Álgebra de Boole, trabalha exclusivamente com
afirmações em que se pode dizer: é falsa ou verdadeira, mas nunca ambas
● Conjunção
○ Duas proposições podem ser combinadas pelo conectivo “e” para resultar
em outra proposição chamada conjunção. A conjunção das proposições p
e q representamos por:
○ p ∧ q (leia-se p e q)
○ Na conjunção, apenas quando p e q são verdadeiras é que temos um
resultado verdadeiro
● Disjunção
○ Quando a combinação de duas proposições é realizada pelo conectivo
“ou” temos como resultado uma outra proposição chamada disjunção. A
disjunção das proposições p e q representamos por:
○ p ∨ q (leia-se p ou q)
○ Na disjunção, basta que p ou q seja verdadeira que teremos um resultado
verdadeiro
Prioridades na Álgebra das Proposições● Negação
○ Em uma proposição faz o mesmo efeito de se acrescentar a
expressão “é falso que” no início ou a palavra “não” próxima
ao verbo que gera a afirmação. A negação da proposição p
representamos por:
○ ┓p(leia-se não p)
○ A negação inverte o resultado, de modo que se a afirmação
é falsa será verdadeira, se é verdadeira será falsa
● A prioridade para os cálculos na álgebra das proposições é:
○ Negação, devendo ser resolvida primeiro
○ Conjunção, que é calculada em seguida
○ Disjunção, que deve ser resolvida por último
● Os parênteses são usados para alterar essas prioridades
Álgebra das Proposições e Funções Lógicas
● Considerando que cada proposição pode assumir apenas duas
situações: verdadeiro ou falso, pode-se representar as
proposições com variáveis binárias, conforme a álgebra
booleana
● Em 1930 Alan Turing percebeu a estreita relação entre
dispositivos de chaves e relés (circuitos), a álgebra de Boole e a
teoria dos conjuntos
● Demonstrou que apenas três funções lógicas: E, OU e NÃO,
são necessárias para o processo de determinação dos falsos e
verdadeiros
● Fez circuitos elétricos que pudessem, usando apenas dois
valores: presença e ausência de tensão, calcular os resultados
possíveis para cada função
Tabelas da Verdade
● Conjunção
● Negação
A B S = A ∧ B
0 0 0
0 1 0
1 0 0
1 1 1
A S = ┓A
0 1
1 0
● Disjunção A B S = A ∨ B
0 0 0
0 1 1
1 0 1
1 1 1
O que é algoritmo?
● Conjunto de regras de operação cuja
aplicação permite resolver um
problema enunciado por meio de um
número finito de operações
● O exemplo mais comum de algoritmo
é uma receita culinária: cada passo
deve ser detalhado e executado em
sequência para se atingir o resultado
desejado
● Ao ser descrito, deve-se definir as
ações de modo claro e específico
● Parte de um estado inicial e, após um
período de tempo previsto, chega a
um resultado previsto e definido
● Estabelece uma norma de execução
e um final previsto que sempre será
alcançado se o mesmo algoritmo for
executado novamente
Biscoitos de Nozes
Ingredientes:
1 xícara de manteiga ou margarina
1/2 xícara açúcar de confeiteiro
1 colher (chá) baunilha
2 1/4 xícaras de farinha de trigo
1 pitada de sal
3/4 xícara de nozes bem picadas
Açúcar de confeiteiro para enfeitar
Preparo:
1 – Misture bem a manteiga e o açúcar. 2 –
Junte a baunilha e a farinha peneirada com o
sal. 3 – Misture novamente. 4 – Adicione as
nozes e leve a massa à geladeira por uns 15
minutos. 5 – Aqueça o forno em temperatura
média (200 graus). 6 – Faça bolinhas de 2 cm
de diâmetro e 7 – coloque numa assadeira
sem untar. 8 – Leve para assar por uns 10 a
12 minutos. 9 – Passe no açúcar de
confeiteiro enquanto estão mornos.
Fundamentos da Programação de Computador
● Algoritmo pode ser traduzido segundo uma linguagem de
programação em um programa que pode ser executado por um
computador. O que é usado para a programação de computadores?
● Pseudolinguagem ou pseudocódigo (Português estruturado ou
Portugol): notação que se assemelha a uma linguagem de
programação, mas que também possibilita ao programador
concentrar-se no problema a ser modelado sem “se prender” aos
detalhes, simulando comandos e definições de dados de uma
linguagem de programação qualquer
● Fluxograma (diagrama de blocos): diagrama que auxilia a explicar a
sequência de instruções em algoritmos, usando símbolos para
representar componentes como vídeo, impressão, processamento,
armazenamento, etc.
● Diagrama de Chapin: quadro dividido por linhas que delimitam a
ordem de execução dos comandos e instruções descritos
Narrativa
Exercício 1 (no Nead)
● Considere as seguintes proposições:
○ p: Paris está na França
○ q: Paris está na Inglaterra
○ r: 2 + 2 = 5
○ s: 2 + 2 = 4
1. Qual será o valor verdade
(falso/verdadeiro) das seguintes
conjunções?
a. p ∧ s
b. p ∧ r
c. q ∧ s
d. q ∧ r
e. p ∧ q
f. r ∧ s
g. q ∧ s ∧ p
2. E o valor verdade destas
disjunções?
a. p ∨ s
b. p ∨ r
c. q ∨ s
d. q ∨ r
e. p ∨ q
f. r ∨ s
g. q ∨ s ∨ p
3. Qual o valor verdade destas negações?
a. ┓p
b. ┓r
c. ┓p ∧ s
d. ┓q ∧ s
e. p ∨ ┓s
f. q ∨ ┓s
g. ┓q ∨ ┓s
h. ┓q ∧ s ∧ ┓p
4. Faça as tabelas da verdade de:
a ∧ ┓b, ┓a ∨ b e ┓(a ∧ b)
Ambiente para Programação de Computadores
● Linguagem de programação: uma linguagem desenvolvida para viabilizar a
programação de computadores (C, Java, PHP, SQL, etc.)
● Ambiente de programação: conjunto de tecnologias que dá suporte à
programação de computadores (sistema operacional, editor de texto,
compilador, interpretador, etc.)
● Linguagem de máquina: conjunto de instruções que podem ser interpretados
e executados diretamente pelo computador. É específica para cada um
● Linguagem Assembler (linguagem de baixo nível): representação da
linguagem de máquina através de códigos mnemônicos
● Linguagem de alto nível: independe do conjunto de instruções da linguagem
de máquina. Cada instrução de alto nível equivale a várias instruções da
linguagem de máquina, sendo assim mais produtiva
● Compilador: tradutor de programas escritos em uma linguagem de
programação para linguagem de máquina (ex. GCC). O programa convertido
pode ser executado independente do compilador e do programa original
● Interpretador: é um programa que interpreta e executa outros programas
escritos em alguma linguagem de programação
1. Descrever a sequência de instruções de maneira simples e
objetiva, construindo um código limpo. Para isso há algumas
diretrizes:
1.1. Usar somente uma instrução (verbo) por frase (linha)
1.2. Usar frases curtas e simples
1.3. Ser objetivo
1.4. Imaginar que está desenvolvendo um algoritmo para quem
não trabalha com informática
1.5. Não usar palavras que tenham sentido dúbio
2. Ao montar um algoritmo, precisamos dividir o problema
apresentado em três fases fundamentais:
2.1. Entrada
2.2. Processamento
2.3. Saída
Técnicas de Programação de Computadores
Exemplo de Construção de Algoritmo
● Calcular a média final de alunos, que realizaram quatro provas
● Média Final - P1 + P2 + P3 + P4
4
● Para montar o algoritmo proposto, responderemos a três perguntas:
○ Quais são os dados de entrada? Os dados são P1, P2, P3 e P4
○ Qual será o processamento a ser usado? Somar os dados de entrada e
dividi-los por 4
○ Qual será o dado de saída? Será o valor da média final
● A narrativa então terá estas etapas:
○ Receba a nota da prova1 (entrada...)
○ Receba a nota da prova2
○ Receba a nota da prova3
○ Receba a nota da prova4
○ Some todas as notas (processamento...)
○ Divida o resultado da soma por 4
○ Mostre o resultado da divisão (saída)
Testes de Códigos
● Servem para revelar erros na codificação e busca examinar o resultado para
ter precisão (testes e garantia da qualidade de software)
● O custo do erro é diretamente proporcional ao tempo que se leva para
descobrí-lo, gerando custos maiores de retrabalho quando descobertos
durante a implementação do SW
● Ao desenvolver um algoritmo deve-se sempre testá-lo
● Pode-se usar o TESTE DE MESA, que significa seguir as instruções do
algoritmo de maneira precisa para verificar se o procedimento usado está
correto, anotando-se as entradas e os resultados em tabela
Prova1 Prova2 Prova3 Prova4 Média
Constantes e Tipos de Dados
● É um determinado valor fixo, isto é, um valor que não se
modifica durante a execução de um programa
● Os tipos de dados podem ser:
○ Numérica, positiva ou negativa
○ Lógica, que representa as situações falso e verdadeiro
○ Literal, composta por números, letras e símbolos
● No algoritmo uma constante literal deve aparecer entre
aspas para que não seja confundida com outros itens
Variáveis
● Cada variável corresponde a uma posição de memória,cujo conteúdo pode
variar durante a execução do programa, mas assume um valor a cada instante
● O nome da variável é formado por um ou mais caracteres, sendo que o
primeiro sempre será uma letra. Deve ser o mais significativo possível,
indicando a natureza dos dados que nelas estão sendo armazenados
● Só podem armazenar valores de um mesmo tipo de dados (numéricos,
lógicos ou literais), tendo a seguinte sintaxe:
declare lista-de-identificadores nome-do-tipo, onde:
○ declare é uma palavra-chave do algoritmo
○ lista-de-identificadores são os nomes das variáveis e devem ser
separadas por vírgula
○ nome-do-tipo é uma das três palavras-chaves: numérico, lógico ou literal
● Palavra-chave tem significado próprio, independente do algoritmo em que
esteja inserida. São palavras reservadas, não podendo ser usadas como
identificadores
Código Limpo, Comentários e Indentação
● São fundamentais para a clareza do algoritmo
● Comentário é um instrumento constituído de um texto
explicativo que aparece após barras duplas
● Comentários são incluídos desde o início, contendo: definição
do algoritmo, autor e data de alteração
● Exemplos:
○ declare MAT, //número da matrícula do aluno
NOTA, //total de pontos no semestre letivo
COD //código do curso
numerico
○ declare NOME, //nome completo do aluno
END, //endereço do aluno
C //conceito final
literal
Comandos de Entrada e Saída
● Entrada
○ Sintaxe: leia lista-de-identificadores, onde:
■ leia é a palavra-chave
■ lista-de-identificadores contém os nomes das variáveis,
separados por vírgula, nas quais serão armazenados os
valores provenientes do meio de entrada
● Saída
○ Sintaxe: escreva lista-de-identificadores e/ou
constantes, onde:
■ escreva: palavra-chave
■ lista-de-identificadores: nomes das variáveis, separados por
vírgula, cujos conteúdos serão mostrados através de um meio
de saída
■ Constantes também são mostradas, expressas entre aspas
Comando de Atribuição
● Sintaxe:
identificador ← expressão, onde:
○ identificador é o nome da variável à qual está sendo
atribuído o valor
○ ← é o símbolo de atribuição
○ expressão aritmética, lógica ou literal, cujo resultado é
atribuído à variável, devendo ser compatível com o seu
tipo
● O sinal de igual é usado apenas como operador relacional
Expressões Aritméticas
● São aquelas cujos operadores são aritméticos e cujos
operandos são constantes e/ou variáveis do tipo numérico
● Possuem um conjunto de operações básicas que estão a
seguir, em ordem de prioridade
● As prioridades podem ser alteradas com parênteses
PRIORIDADE OPERAÇÃO
1ª Potenciação, radiciação
2ª Multiplicação, divisão
3ª Adição, subtração
Expressões Literais
● Formadas por operadores e operandos (variáveis ou
constantes) do tipo literal, tendo os primeiros uma grande
variedade, dependendo de cada linguagem de programação
● Supondo que A e B são variáveis literais e que o símbolo | é
um operador de concatenação (junção), a expressão A|B
fornece como resultado um literal formado pelo conteúdo de
A seguido pelo conteúdo de B
● Muitas vezes encontraremos estas expressões sob forma de
funções, podendo fornecer os resultados como:
○ o número de caracteres de um literal
○ os N primeiros caracteres de um literal
○ os N últimos caracteres de um literal
Expressões: Exemplos
● Expressões aritméticas
○ MEDIA ← (NOTA1 + NOTA2) / 2
● Expressões lógicas
○ Se MEDIA > 7 e FALTA < CARGAHR * 0,25
■ então
● escreva “Aprovado”
■ senão
● escreva “Reprovado”
● Expressões literais
○ NOME ← “José”
○ SOBRENOME ← “Silva”
○ NOMECMPLT ← NOME|” “|SOBRENOME
○ escreva NOMECMPLT (José Silva)
Diagrama de Blocos
● Fluxograma é uma forma padronizada e eficaz para representar
os passos lógicos de um determinado processamento
● Com o diagrama podemos definir uma sequência de símbolos,
com significado bem definido, para facilitar a visualização dos
passos de uma determinada atividade
● Alguns dos símbolos que iremos utilizar:
○ TERMINADOR: indica o INÍCIO ou FIM de um
processamento
○ ENTRADA MANUAL: indica entrada de dados manual
(teclado, mouse), com a mesma função do leia
○ PROCESSO: realiza um processamento como uma soma
○ DECISÃO: condições que sujeitam a execução do algoritmo
○ EXIBIR: mostra informações ou resultados, tendo a mesma
função do escreva
Ferramentas de Apoio à Programação
● Para desenvolver em Português Estruturado (Portugol):
○ Notepad++
○ Visualg
■ Observe que há exemplos em Browse All Files
■ No ambiente Windows
● Após baixar, basta descompactar. Não precisa instalar
● Descompactadores Windows: Winrar, 7zip
■ No ambiente Ubuntu
● Instalar antes o Wine, necessário para executar aplicativos
Windows no Linux, no Ubuntu Software ou em terminal
● Ou usar o Portugol Studio
● Os diagramas de blocos (Fluxograma) podem ser feitos em:
○ Ferramenta de desenho do Documentos Google (Inserir Desenho
-> Forma e Linha)
○ Pencil (flowchart)
Exercício 2 (no Nead)
1. Construa algoritmos, com comentários, em português estruturado que:
a. Receba um número qualquer e mostre o dobro deste;
b. Receba dois números e informe a soma e o produto destes;
c. Receba o nome e o salário bruto de um funcionário, calcule e mostre o
valor do imposto calculado, 8% sobre o salário bruto, e o salário líquido.
2. Elabore um algoritmo para pagamento de comissão de vendedores de peças,
considerando que sua comissão será de 5% do total da venda e que serão
informados os seguintes dados:
a. Identificação do vendedor;
b. Código da peça;
c. Preço unitário da peça;
d. Quantidade vendida.
3. Faça um diagrama de blocos (fluxograma) que leia a cotação do Dólar e um
valor em Dólares, converta esse valor para Real e mostre o resultado
4. Crie os testes de mesa dos dois últimos problemas resolvidos
Português Estruturado
● Consiste na simulação de comandos de uma linguagem de
programação qualquer, através de palavras do português,
sendo obedecidos uma série de critérios e normas
● É uma simplificação extrema do Português, limitada a poucas
palavras e estruturas que têm um significado muito bem
definido
● Para que o algoritmo possa ser executado por uma máquina é
importante que as instruções sejam corretas e sem
ambiguidades
● Ao conjunto de palavras e regras que definem o formato das
sentenças válidas chamamos sintaxe da linguagem
● Apesar de ser uma linguagem bastante simplificada, possui
todos os elementos básicos e uma estrutura semelhante à de
uma linguagem para programação de computadores
Formato do VisualG
Palavras Reservadas
● São palavras que fazem parte da sintaxe da linguagem e não podem ser
usadas para outro propósito em um algoritmo que não seja aquele previsto
nas regras de sintaxe
● Também são chamadas de palavras-chaves
aleatorio escreva leia real
algoritmo faca logico repita
arquivo falso nao se
e fimalgoritmo mod senao
ate funcao ou var
enquanto inicio para vetor
entao inteiro pausa verdadeiro
Operadores Aritméticos
● Na construção de algoritmos é feito também o
mapeamento dos operadores da aritmética tradicional
para os do Português Estruturado
Linearização de Expressões
● Na construção de algoritmos que realizam
cálculos matemáticos todas as expressões
aritméticas devem estar colocadas em linhas
● Podem haver parênteses dentro de parênteses
no lugar do que seriam os colchetes e as
chaves
● É a divisão de uma expressão em partes para
proporcionar maior compreensão, definindo prioridades
para a resolução da mesma
● Os parênteses indicam quais sub-expressões, dentro de
uma expressão, serão executadas antes
● A princípio a execução é da esquerda para direita, mas
devem ser consideradas:
○ as prioridades entre os operadores envolvidosna
expressão
○ os parênteses que redefinem as prioridades
Modularização de Expressões
Regras para Nomeação de Variáveis
● Nomes de variáveis não podem ser iguais a palavras
reservadas
● Devem possuir como primeiro caractere uma letra. Os
demais caracteres podem ser letras, números e
sublinhado
● Devem ter no máximo 127 caracteres
● Não podem conter espaços em branco
● A sintaxe do Portugol não é sensível à caixa das letras
(case sensitivity), sem diferenciar letras maiúsculas de
minúsculas, sendo NOME o mesmo que noMe
● Não podem haver duas variáveis com o mesmo nome,
exceto os elementos de um mesmo vetor
Declaração de Variáveis no Portugol
● A seção de declaração de variáveis começa com a
palavra-chave var, e continua com as seguintes sintaxes:
○ <lista-de-variáveis> : <tipo-de-dado>
○ <lista-de-variáveis> : vetor "["<lista-de-intervalos>"]" de
<tipo-de-dado>
● Em <lista-de-variáveis>, os nomes das variáveis estão
separados por vírgulas
● Em <lista-de-intervalos> os <intervalo> são separados por
vírgulas, e têm a seguinte sintaxe:
○ <intervalo>: <valor-inicial> .. <valor-final>
○ Tanto <valor-inicial> como <valor-final> devem ser
inteiros, onde <valor-final> deve ser maior do que
<valor-inicial>
Variáveis no Portugol: Exemplos
● Exemplos de identificadores válidos:
○ NOME, Nota1, ESTADO_CIVIL, EstadoCivil
● Exemplos de identificadores inválidos:
○ 3Endereco, Estado Civil, PARA, numero/complemento
● Exemplos válidos de declaração:
var a: inteiro
Valor1, Valor2: real
vet: vetor [1..10] de real
matriz: vetor [0..4,8..10] de inteiro
nome_do_aluno: caractere
sinalizador: logico
○ vet tem 10 elementos, com os índices de [1] a [10]
○ matriz tem 15 elementos, com índices [0,8], [0,9], [0,10],
[1,8], [1,9], [1,10], ... até [4,10]
Variáveis e Comentários
Tipos de Dados
● Podemos declarar variáveis em português estruturado
com os seguintes tipos
Operador de Atribuição
● Para atribuir um valor em uma variável em um algoritmo
utilizamos o operador de atribuição, que é representado
por um sinal de maior que seguindo de um hífen (<-)
● Sempre à esquerda do comando de atribuição deve haver
somente um identificador de variável
● Só se pode atribuir às variáveis valores do mesmo tipo da
variável
Atribuições Possíveis Exemplos
variável <- constante idade <- 12 (lê-se idade recebe 12)
variável <- variável preço <- valor
variável <- expressão A <- B + C
Atribuição e Comentário: Exemplos
● Exemplos corretos:
○ Peso <- 78.7 //Este atribui à variável Peso o valor 78.7
○ IMPOSTO <- TOTAL * 0.12 //Calcula 12% do total da venda
○ Nome <- "João da Silva" //Atribui à Nome o valor João da Silva
○ Achei <- FALSO //Atribui à variável Achei o valor FALSO
● Exemplos errados:
○ 2060 <- NumeroAgencia
○ IDADE <- VERDADEIRO
○ NumeroConta + digitoControle <- 2345 + 0
○ NomeCliente + Sobrenome <- “João” | “Silva”
○ var salario: REAL
inicio
salario <- "Insuficiente“
Expressões Lógicas
● São representações das condições que sujeitam a
execução do algoritmo
● Numa expressão lógica os operadores são lógicos e os
operandos são relações, constantes e/ou variáveis do tipo
lógico
Operadores
Lógicos Relações
não (negação) = (igual a) <> (diferente de)
e (conjunção) > (maior que) < (menor que)
ou (disjunção) >= (maior ou igual) <= (menor ou igual)
Exercício 3 (Nead)
1. Defina se os seguintes nomes
de variáveis são válidos ou não
❏ 123a
❏ A123
❏ etc.
❏ enquanto
❏ guarda-chuva
❏ salario_liquido
2. Defina os conteúdos das
variáveis abaixo de acordo com
seu tipo, assinalando C para
literal, I p/ inteiro, L p/ lógico e
N p/ numérico
❏ 5.7
❏ -49
❏ +342
❏ VERDADEIRO
❏ "444"
❏ “FALSO”
3. A partir da declaração seguinte, defina se os comandos de
atribuição são inválidos ou não
var NOME, COR, TESTE, DIA: caracter
SOMA, NUM: inteiro
Salario: real
X: lógico
❏ NOME <- “5”
❏ SOMA <- NUM + 2 * X
❏ TESTE <- SOMA
❏ NUM <- SOMA
❏ X <- X + 1
❏ X <- (NOME = COR)
❏ Salario <- SOMA * 0.8
4. Quais os valores de SOMA, NOME e TUDO, sendo NUM,
X, COR, DIA, TESTE e TESTE2 respectivamente 5, 2,
"AZUL", "TERÇA", FALSO e VERDADEIRO?
❏ NOME <- DIA
❏ SOMA <- (NUM^2/X) + (X + 1)
❏ TUDO <- NÃO ((TESTE OU TESTE2) E (X <> NUM))
5. Construa um algoritmo que divide um número inteiro por
outro, devolvendo o quociente e o resto
6. Desenvolva um algoritmo que calcule a quantidade de litros
de combustível e o valor em Real gastos em uma viagem,
recebendo a distância, o consumo e o preço unitário
Estruturas de Controle
● O comando de controle é o responsável por, em função de
uma condição, desviar o fluxo de execução do programa
● Condição: uma obrigação que se impõe e se aceita, que
em computadores é uma expressão booleana cujo
resultado é um valor lógico
● Decisão: ato ou efeito de decidir, ou seja, de optar, de
tomar uma decisão, que só pode ser tomada se houver
uma condição
● Em Portugol, a condição deve estar entre parênteses
● Nos Fluxogramas é usado o símbolo de decisão para
representar blocos adjacentes de instruções subordinadas
à condição definida
Operadores Relacionais
● Estabelecem uma
condição, ou seja, a
relação lógica entre
dois elementos
● Realizam a
comparação entre
dois operandos ou
duas expressões e
resultam em valores
lógicos
(VERDADEIRO ou
FALSO)
Comparações Possíveis
● Os elementos relacionados em uma expressão lógica
(condição) são representados por relações binárias entre
variáveis e constantes
Comparação Válida Exemplo
Variável e constante (X = 3)
Variável e variável (A <> B)
Variável e expressão (Y > W + J)
Expressão e expressão (X * 1 <= Y + 4)
Prioridades das Expressões
● O conjunto de operações básicas que estão a seguir
definem a ordem de prioridade dos três tipos de
expressões
Prioridade Operador
1ª Aritmético
2ª Relacional
3ª Não
4ª E
5ª Ou
Desvio Condicional Simples
● É processado apenas quando o resultado da condição for verdadeira
● Em diagramas (de Blocos ou Chapin) é importante representar os dois fluxos
para sim (S) e não (N), deixando clara a ação considerada para a condição
verdadeira
● Em Portugol são usados os comandos se, entao e fimse, assim
se (<condição>) entao
<instruções a serem executadas se a condição for verdadeira>
fimse
<instruções a serem executadas após a condição e independente desta>
condição
bloco
S
N
Desvio Condicional Composto
● A tomada de decisão composta é tomada tanto quando o resultado
da condição é verdadeira, como quando é falsa
● Em Portugol são usados os comandos se, entao, senao e fimse.
Sendo a condição verdadeira, é executada a instrução que estiver
posicionada logo após a instrução entao; mas sendo falsa é
executada a instrução que estiver posicionada logo após a
instrução senao
se (<condição>) entao
<instruções a serem executadas se a condição for verdadeira>
senao
<instruções a serem executadas caso a condição seja falsa>
fimse
<instruções a serem executadas independente da condição>
Desvio Condicional Composto (cont.)
● Em diagramas (de Blocos ou Chapin) são representado os dois fluxos,
para sim (S) e não (N), deixando claras as ações consideradas para
as condições verdadeira e falsa
○ Após a tomada de decisão composta, independente do resultado,
as demais instruções, após o símbolo conector, são executadas
condição
bloco
S
N
bloco
Outras Formas de Desvios Condicionais
São usadas em casos de sucessivas verificações lógicas baseadas em
diversas condições, sendo possíveis três tomadas de decisões
1. Sequencial: ocorre quando se usa tomadas de decisão simples ou
composta sucessiva, ou seja, umas após as outras. Em Portugol, a
estrutura é assim
se (<condição1>) entao
<instruçõesa serem executadas se a condição1 for verdadeira>
fimse
se (<condição2>) entao
<instruções a serem executadas se a condição2 for verdadeira>
senao
<instruções a serem executadas caso a condição2 seja falsa>
fimse
se ...
<instruções a serem executadas independente da condição>
Tomada de Decisão Sequencial
Algoritmo “DefineAprovacao”
Var
// Seção de Declarações das variáveis
Nota1, Nota2, Nota3, Media : real
Falta : inteiro
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc...
leia (Nota1, Nota2, Nota3, Falta)
Media <- (Nota1 + Nota2 + Nota3) / 3
se (Media >= 6) entao
escreval ("Aprovado por nota")
fimse
se (Falta > 80) entao
escreval ("Reprovado por falta")
fimse
escreval (Media)
fimalgoritmo
Outras Formas de Desvios Condicionais
2. Encadeada simples: casos em que uma determinada ação poderá ser
executada se um conjunto anterior de instruções ou condições for
satisfeito, sendo que se a ação for executada, ela poderá ainda
estabelecer novas condições. Isso significa utilizar uma condição
dentro de outra condição
○ Este tipo de estrutura poderá possuir diversos níveis de condição,
sendo chamada de aninhamento ou encadeamento
○ Estrutura de decisão simples encadeada
se (<condição1>) entao
se (<condição2>) entao
<ações executadas se condição1 e condição2 forem verdadeiras>
fimse
fimse
<instruções a serem executadas após as condições>
Tomada de Decisão Encadeada Simples
Algoritmo “DefineAprovacao2”
var
Nota1, Nota2, Nota3, Media : real
Falta : inteiro
inicio
leia (Nota1, Nota2, Nota3, Falta)
Media <- (Nota1 + Nota2 + Nota3) / 3
se (Media >= 6) entao
escreval ("Aprovado por nota")
se (Falta > 80) entao
escreval ("Mas reprovado por falta")
fimse
fimse
escreval (Media)
fimalgoritmo
Outras Formas de Desvios Condicionais
3. Encadeada composta: estrutura de decisão composta encadeada
se (<condição1>) entao
se (<condição2>) entao
<ações executadas se condição1 e condição2 forem
verdadeiras>
senao
<ação executada se condição1 for verdadeira e condição2
for falsa>
fimse
senao
<instruções a serem executadas caso a condição1 seja falsa>
fimse
<instruções a serem executadas após as condições>
Tomada de Decisão Encadeada Composta
Algoritmo “DefineAprovacao3”
var
Nota1, Nota2, Nota3, Media : real
Falta: inteiro
inicio
leia (Nota1, Nota2, Nota3, Falta)
Media <- (Nota1 + Nota2 + Nota3) / 3
se (Media >= 6) entao
escreval ("Aprovado por nota")
se (Falta <= 80) entao
escreval ("Aprovado também por presença")
senao
escreval ("Reprovado por falta")
fimse
senao
escreval ("Reprovado por nota")
fimse
escreval (Media)
fimalgoritmo
Outras Formas de Desvios Condicionais
4. Por seleção: é usada nos casos em que há a verificação de cada
condição da estrutura de decisão, a partir da seleção de uma variável,
desviando o fluxo para a ação prevista
○ No Diagrama de Blocos após a ação prevista o fluxo é desviado
para o único conector existente na estrutura
○ Em Portugol são usados os comandos escolha, caso, faca,
outrocaso e fimescolha, desta maneira
escolha <variável>
caso <opção1> faca
<ação para condição1 verdadeira>
caso <opção2> faca
<ação para condição2 verdadeira>...
outrocaso
<ação para nenhuma condição satisfeita>
fimescolha
Tomada de Decisão por Seleção
Algoritmo “DefineMensao”
var
Nota1, Nota2, Nota3, Media : real
inicio
leia (Nota1, Nota2, Nota3)
Media <- (Nota1 + Nota2 + Nota3) \ 3
escolha Media
caso 0,1,2,3,4,5
escreval ("MI")
caso 6
escreval ("MM")
caso 7,8
escreval ("MS")
outrocaso
escreval ("SS")
fimescolha
escreval (Media)
fimalgoritmo
Exercício 4 (no Nead)
Usando estruturas de decisão, construa algoritmos em Portugol que possibilite:
1. Definir e mostrar o maior de três valores informados
2. Calcular e mostrar a condição a partir do IMC (índice de massa corporal), que
é um critério para indicar sobre a condição de peso de uma pessoa adulta,
sabendo que IMC=peso/altura², onde: se for menor que 18,5 está abaixo do
peso; entre 18,5 e 25 peso está normal; entre 25 e 30 está acima do peso; a
partir de 30 está obesa
3. Solicitar a entrada de um valor numérico (real) e apresentar mensagens que
afirmem se o valor numérico é inteiro ou fracionário e se é positivo ou negativo
4. Calcular e mostrar o reajuste de salário de um funcionário, considerando que
este deverá receber um reajuste de 15%, caso seu salário seja menor que
500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu
reajuste será de 10%; caso seja maior que 1000, o reajuste deverá ser de 5%
5. Ler um valor numérico inteiro entre 1 e 12 e apresentar por extenso o nome do
mês correspondente ao valor recebido. Caso sejam fornecidos valores fora
deste intervalo, o programa deve indicar que é inválido
Estruturas de Repetição
● Laços ou malhas de repetição (looping)
○ Interativos: quando necessitam de intervenção de usuário
○ Iterativos: executam as repetições previstas de forma
automática um número de vezes
● Laços de repetição condicional pré-teste, com teste no início
○ Controle condicional verdadeiro: executa as instruções
subordinadas de um bloco adjacente, repetindo enquanto o
resultado lógico da condição permanece verdadeiro
○ No Portugol são usados os comandos enquanto, faca e
fimenquanto
enquanto (<condição>) faca
<instruções executadas durante o período em que a condição
é verdadeira>
fimenquanto
Laço de repetição condicional pré-teste
Algoritmo “MediaAritmeticaDeAlunos”
var
Nota1, Nota2, Nota3, Media : real
Con : inteiro
inicio
Con <- 0
enquanto (Con <50) faca
leia (Nota1, Nota2, Nota3)
Media <- (Nota1 + Nota2 + Nota3) / 3
escreval ("Média é", Media)
se (Media >= 6) entao
escreval ("Aprovado!")
senao
escreval ("Reprovado!")
fimse
Con <- Con + 1
fimenquanto
fimalgoritmo
Estruturas de Repetição
● Laços de repetição condicional pós-teste, com teste no
final
○ Controle condicional falso: executa no mínimo uma
vez as instruções subordinadas de um bloco
adjacente e repete a execução no período em que o
resultado lógico da condição permanece falso,
encerrando quando esta for verdadeira
○ No Portugol usa-se os comandos repita e ate
repita
<instruções executadas durante o período em que a
condição é verdadeira>
ate (<condição>)
Laço de repetição condicional pós-teste
Algoritmo “MediaAritmeticaDaTurma”
var
Media, Somatorio, MediaTurma : real
Con : inteiro
inicio
Con <- 0
Somatorio <- 0
repita
leia (Media)
Somatorio <- Somatorio + Media
Con <- Con + 1
ate (Con >= 50)
MediaTurma <- Somatorio/Con
escreval ("Média da turma é", MediaTurma)
fimalgoritmo
Estruturas de Repetição
● Laço de repetição incondicional
○ Repete a execução do bloco adjacente um número
predeterminado de vezes, não prevendo uma condição
de teste
○ No Portugol usa-se os comandos para, de, ate, passo,
faca e fimpara
para <variavel> de <inicio> ate <fim> passo <incremento> faca
<instruções executadas durante o ciclo de contagem da
variável de controle>
fimpara
Laço de Repetição Incondicional
Algoritmo “MediaAritmeticaDaTurma”
var
Media, Somatorio, MediaTurma : real
Con : inteiro
inicio
Somatorio <- 0
para Con de 1 ate 50 passo 1 faca
leia (Media)
Somatorio <- Somatorio + Media
fimpara
MediaTurma <- Somatorio/Con
escreval ("Média da turma é", MediaTurma)
fimalgoritmo
Estruturas de Repetição: Interrupção
● As três estruturas de repetição permitem o uso do
comando interrompa que causa uma saída imediata do
laço
● Embora esta técnica esteja em desacordo com os
princípios da programação estruturada, pode ser
encontrada na literatura de introdução à programação
● Deve ser usado em situações específicas:
○ de forma temporária
■ paratestes de mesa
■ para o entendimento de um código
○ para correção ou expansão de software legado
Laço de repetição condicional pós-teste: interrupção
Var ...
Inicio
Contador <- 0
Somatorio <- 0
repita
escreval ("Informe a média do estudante.")
leia (Media)
se (Media < 0) entao
escreval ("A nota média está incorreta.")
interrompa
fimse
Somatorio <- Somatorio + Media
Contador <- Contador +1
ate (Contador = 50)
MediaTurma <- Somatorio / Contador
escreval ("A média da turma é ", MediaTurma)
Fimalgoritmo
Como evitar interrupção e melhorar a qualidade?
Algoritmo "CalculaMediaTurmaMelhor"
Var
Media, Somatorio, MediaTurma :real
Contador, QtdEstudantes :inteiro
Inicio
Contador <- 0
Somatorio <- 0
escreval ("Quantos estudantes tem a turma?")
leia (QtdEstudantes)
repita
escreval ("Informe a média do estudante.")
leia (Media)
se (Media < 0) ou (Media > 10) entao
escreval ("A nota média está incorreta.")
senao
Somatorio <- Somatorio + Media
Contador <- Contador + 1
fimse
ate (Contador = QtdEstudantes)
MediaTurma <- Somatorio / QtdEstudantes
escreval ("A média da turma é ", MediaTurma)
Fimalgoritmo
Exercício 5 (Nead)
Usando estruturas de repetição, construa algoritmos em Portugol que possibilite:
1. Ler um número inteiro positivo N e imprimir todos os divisores inteiros positivos
de N. Por exemplo, se entrado o valor 18, o programa deverá retornar 1 2 3 6 9
18. Caso o valor informado seja nulo ou negativo, avisar isso ao usuário
2. Calcular o fatorial de x (x!). Pela definição, fatorial de 1 (1!) é 1 e fatorial de x é
o produto de todos os valores positivos deste até 1: x!=x*(x-1)*(x-2)... 1
3. Ler sucessivamente valores numéricos positivos e apresentar ao final o
somatório, a quantidade de valores lidos e a média. O programa deve finalizar
quando o usuário fornecer um valor nulo ou negativo
4. Imprimir um menu com 4 opções de pratos na tela, tendo uma quinta opção
para sair do programa. O programa deve informar cada prato solicitado e
terminar quando for escolhida a quinta opção, apresentando a quantidade de
pratos solicitados
5. Calcular a área de uma residência. Deve solicitar o nome, a largura e o
comprimento de cômodos, apresentando a área (LxC) de cada um seguida de
uma solicitação para saber se o usuário quer informar outro cômodo. Quando
a resposta for “N” (não), será apresentada a área total calculada
Vetores
● Vetores são úteis para representar dados compostos que consistem de vários
itens individuais e similares. Assim um vetor é definido como variável
composta homogênea unidimensional
● Um vetor consiste de um conjunto finito de objetos (chamados elementos),
todos do mesmo tipo, que são agrupados continuamente na memória
● Somente o vetor tem um nome simbólico, não os elementos
● Cada elemento é identificado por um índice que denota a posição do
elemento no vetor. O número de elementos num vetor é denominado sua
dimensão
● A dimensão de um vetor é fixa e predeterminada, não podendo ser mudada
durante a execução do programa
● Suponha um vetor para representar a temperatura média brasileira em cada
estação do ano:
Primavera Verão Outono Inverno
26 35 22 17
Uso de Vetor
● Declaração
○ declare nome_vetor[tamanho] tipo, onde
■ nome é como se denomina a variável do tipo vetor
■ tamanho é a dimensão do vetor (quantidade de variáveis)
■ tipo indica o tipo dos dados que serão armazenados
● Sintaxe no VisualG
○ <nome_variavel>: vetor [posInicial..posFinal] de <tipo>
● Atribuição de valores
○ nome_vetor[ídice] <- conteúdo, onde
■ Deve-se informar em qual das suas posições (índice) o valor ficará
armazenado
■ conteúdo é o valor, de acordo com o tipo, a ser atribuído à posição
informada da variável
● Exemplo
V: vetor [1..5] de inteiro
V[1] <- 45
V[4] <- 0
Uso de Vetor
● Preenchimento de um vetor
○ É atribuir valores a todas as suas posições
○ Exemplo
para i de 1 ate 5 faca
escreval(“Informe o “, i, “º número”)
leia(V[i])
fimpara
● Mostrando os elementos de um vetor
○ Implica mostrar os valores em todas as suas posições
○ Exemplo
para i de 1 ate 5 faca
escreva(“Este é o “, i, “º número do vetor: ”)
escreval(V[i])
fimpara
Matrizes
● Uma matriz nada mais é do que um vetor de vetores. É também
conhecida como variável composta homogênea multidimensional
● Uma variável do tipo matriz precisa de um índice para cada uma das
suas dimensões
● Por exemplo, suponha que se queira representar as temperaturas
médias em três cidades brasileiras por estação do ano:
● Pode ser representado por uma matriz de inteiros:
○ declare TempEstacao[3, 4] int
Primavera Verão Outono Inverno
Santos 26 34 22 17
São Paulo 24 32 19 13
Rio de Janeiro 28 38 25 20
Uso de Matriz
● Declaração
○ declare nome_matriz[dimensão1, dimensão2, …, dimensãoN]
tipo, onde
■ nome é como se denomina a variável do tipo matriz
■ dimensão1 é a quantidade de elementos da 1ª dimensão
(conhecida como linha)
■ dimensão2 é a quantidade de elementos da 2ª dimensão
(conhecida como coluna)
■ dimensão3 é a quantidade de elementos da 1ª dimensão
(conhecida como profundidade)
■ dimensãoN é a quantidade de elementos da enésima
dimensão
■ tipo indica o tipo dos dados que serão armazenados
● Sintaxe no VisualG
○ <nome_variavel>: vetor [li..lf, ci..cf] de <tipo>
Uso de Matriz
● Atribuição de valores
○ nome_matriz[dimensão1, dimensão2, …,
dimensãoN] <- conteúdo, onde
■ Deve-se informar em qual das suas posições
(índice) o valor ficará armazenado
■ conteúdo é o valor, de acordo com o tipo, a ser
atribuído à posição informada da variável
● Exemplo
Mat: vetor [1..5,1..4] de inteiro
Mat[1,3] <- 10
Mat[2,4] <- 45
Mat[3,1] <- -8
Uso de Matriz
● Preenchendo uma matriz - exemplo
para I de 1 ate 5 faca
para J de 1 ate 4 faca
escreval(“Informe o número da linha ”, I, “ e coluna “, J)
leia(Mat[I,J])
fimpara
fimpara
● Mostrando os elementos de uma matriz - exemplo
para I de 1 ate 5 faca
para J de 1 ate 4 faca
escreva(“Número da linha ”, I, “ e coluna “, J, “:”)
escreval(Mat[I,J])
fimpara
fimpara
Exercício 6 (no Nead)
A partir do uso de vetores e matrizes, elabore os códigos com VisualG que:
1. Preencha um vetor com seis elementos numéricos inteiros e depois calcule e
mostre: todos os números pares; e a quantidade de números pares e ímpares
2. Preencha um vetor com dez números reais, calcule e mostre dois vetores
resultantes, um com valores positivos e outro com os negativos, informando ainda a
quantidade de números negativos e a soma dos números positivos
3. Leia sucessivamente valores numéricos positivos, armazenando-os em vetor,
devendo parar quando o usuário fornecer um valor negativo. Ao final deve
apresentar o somatório e a média desses valores
4. Calcule a área de uma residência, devendo solicitar a quantidade de cômodos, o
número, a largura e o comprimento de cada cômodo, armazenando em matriz
essas informações. Ao final deve apresentar:
a. o número de cada cômodo e sua área (largura x altura)
b. o valor total calculado da residência
5. Preencha uma matriz 6 x 5 com valores, some as colunas individualmente e guarde
os resultados na 7ª linha da matriz, mostrando o resultado de cada coluna
Funções
● É um conjunto de instruções que realizam uma tarefa específica,
recebendo um nome, pelo qual será referenciado
● Dividem tarefas complexas de computação em partes menores,
processo conceitualmente denominado modularização
● Também são conhecidas como sub-rotinas ou subprogramas
● A existênciade funções evita que o programador escreva o mesmo
código mais de uma vez, permitindo assim o reuso destes
● Uma outra razão para se escrever funções é permitir que outros
programadores as utilizem (reuso)
● Quando uma função é carregada (referenciada), seu código é
agregado ao programa, que pode usá-la quantas vezes forem
necessárias
● As funções podem ou não receber e da mesma forma podem ou não
retornar valores
Declaração Conceitual de Funções (Módulos)
Declaração de Funções
● A declaração deve estar entre o final da declaração de variáveis e a linha inicio
do programa principal, e segue esta sintaxe:
funcao <nome-de-função> [(<seqüência-de-declarações-de-parâmetros>)]:
<tipo-de-dado>
// Seção de declarações internas
inicio
// Seção de comandos
fimfuncao
● O <nome-de-função> obedece as mesmas regras de nomenclatura de variáveis
● A <seqüência-de-declarações-de-parâmetros> é uma sequência de: [var]
<seqüência-de-parâmetros>: <tipo-de-dado> separadas por ponto e vírgula
● A presença (opcional) da palavra-chave var indica passagem de parâmetros
por referência; caso contrário, a passagem será por valor
● Já a <seqüência-de-parâmetros> é uma sequência de nomes de parâmetros,
que obedecem a mesma regra de nomenclatura de variáveis, separados por
vírgulas
Declaração de Funções: Exemplo 1
● Com uma função sem parâmetros, utiliza uma variável aux para armazenar
provisoriamente o resultado deste cálculo, antes de atribuí-lo à variável res
funcao soma: inteiro
var aux: inteiro // n, m e res são variáveis globais
inicio
aux <- n + m
retorne aux
fimfuncao
● No programa principal há os seguintes comandos:
n <- 4
m <- -9
res <- soma
escreva(res)
● O valor retornado pela função será do tipo especificado na sua declaração,
logo após os dois pontos. De modo geral no final da função, este valor deve
ser retornado através do comando retorne
Declaração de Funções: Exemplo 2
● Por meio de uma função com parâmetros faz o mesmo
cálculo e ainda o retorna o resultado da soma à variável
res
funcao soma (x,y: inteiro): inteiro
inicio
retorne x + y
fimfuncao
● No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
res <- soma(n,m)
escreva(res)
Regras de Escopo
● As regras de escopo definem que porção do código conhece ou tem acesso a
determinados dados ou porção de código
● Governam em que parte do código uma variável pode ser acessada
● As variáveis definidas dentro de uma função só podem ser acessadas na
função onde foram definidas e são chamadas de variáveis locais
● Variáveis definidas antes de qualquer função podem ser acessadas por
quaisquer destas e são chamadas de variáveis globais
● O uso de variável global deve ser evitado por tornar mais difícil a manutenção
dos programas
● Em Portugol:
○ Se o parâmetro for passado por valor, então a variável do cabeçalho será
local da função
○ Caso seja passado por referência, a variável do cabeçalho se comportará
como global
Passagem de Parâmetros por Referência
● Neste caso, a função não recebe apenas um valor, mas sim o endereço de
uma variável global
● Portanto, qualquer modificação que for realizada no conteúdo deste
parâmetro afetará também a variável global que está associada a ele
● Essa passagem é feita através da palavra var na declaração do parâmetro
● Voltando ao exemplo da soma, este código faz a mesma tarefa usando
passagem de parâmetros por referência:
funcao soma (x,y: inteiro; var result: inteiro)
inicio
result <- x + y
fimfuncao
● No programa principal deve haver os seguintes comandos:
n <- 4
m <- -9
soma(n,m,res)
escreva(res)
Exercício 7 (no Nead)
Por meio de funções, elabore os códigos em linguagem C que:
1. Receba um valor numérico inteiro entre 1 e 12 e mostre o nome do
mês correspondente ao valor recebido. Caso sejam fornecidos
valores diferentes, o programa deve informar que são inválidos (ex.
4.5)
2. Receba a quantidade de valores inteiros a serem informados e
armazene em vetor estes valores, devendo avisar quando o valor não
for válido. Duas funções devem receber o vetor e calcular a soma e
média dos valores. Ao final, o código principal deve apresentar o
somatório e a média dos valores
3. Calcule a área de uma residência, devendo receber a quantidade de
cômodos e armazenar em matriz o número, a largura e o
comprimento de cada cômodo. Uma função deve calcular e
apresentar o número e a área de cada cômodo e retornar o valor total
da área da residência, que deverá ser apresentado ao final (ex. 6.4)
Introdução à Linguagem de Programação C
● Surgiu em 1972, no Lab. Bell, criada por Dennis e Ken
Thompson
● É aplicável para a programação de qualquer tipo de sistema,
como é o caso do sistema operacional (SO) Unix
● Após existirem diversas versões, o Ansi estabeleceu, em
1983, um comitê para definir padrão de implementação desta
● A linguagem C++ é uma extensão desta, cujos incrementos
dão suporte para a programação orientada a objetos
● Proporciona portabilidade, flexibilidade e padronização de
códigos, permitindo ao programador bons hábitos de
programação, de tal forma que viabiliza a construção
compartilhada de software, em que cada programador pode
construir bibliotecas de funções separadamente
Criação de um Programa Executável
1. Os códigos em C devem ser compilados. Quando não há erros,
é criado um arquivo com extensão OBJ, contendo as instruções
traduzidas
2. Com a agregação das demais funções usadas no programa é
criado um arquivo com extensão EXE, podendo ser executado
pelo SO
3. Para estas atividades use o Dev-C++ (compactado) ou
Code::Blocks
3.1. Digite o código no processador de texto, em modo texto
3.2. Compile o código fonte seguindo as instruções do
compilador, que criará o arquivo OBJ
3.3. Linkedite o objeto seguindo as instruções do linkeditor,
gerando o arquivo C
Programa em C: Estrutura Básica
● Possui uma ou mais funções, basicamente assim:
tipo nomeFunc(declaração dos parâmetros)
{
declaração de variáveis;
instrução_2;
…
instrução_n;
return var_tipo;
}
● O menor código em C é:
int main()
{
return 0;
}
Programa em C: Estrutura Geral
● É sensível a letras maiúsculas e minúsculas (case sensitive)
a. Todos os comandos devem ser escritos com letras
minúsculas
b. Os identificadores como estes são 3 variáveis distintas: char
letra, Letra, LETRA;
● Todo programa deve conter uma função chamada main(),
sendo que:
a. os parênteses após main indicam que trata-se de uma
função
b. int neste caso indica que a função main() deve retornar um
número inteiro
c. as chaves marcam o início, com {, e o fim, com }
d. cada sentença é finalizada com ponto e vírgula
Palavras Reservadas em C
1. auto
2. break
3. case
4. char
5. const
6. continue
7. default
8. do
9. double
10. else
11. enum
12. extern
13. float
14. for
15. goto
16. if
17. int
18. long
19. register
20. return
21. short
22. signed
23. sizeof
24. static
25. struct
26. switch
27. typedef
28. union
29. unsigned
30. void
31. volatile
32. while
Declaração de Variáveis em C: Tipos
Tipo Memória Valores
char 1 byte -128 a 127
int 2 bytes -32768 a 32767 (em ambientes
de 32 b é o mesmo que long)
float 4 bytes 6 dígitos de precisão
long 4 bytes -2.147.483.648 a 2.147.483.648
double 8 bytes 10 dígitos de precisão
void 0 Nenhum
Declaração de Variáveis em C
● Todas as variáveis devem ser declaradas antes de serem usadas
● Modificadores de tipo: altera todos os tipos, exceto void
○ long como long double
○ short como short int
○ unsigned para que sejam apenas positivos, como unsigned char ->
valores de 0 a 255
○ Quando um modificador é usado sem o tipo, então o padrão assumido é
int, como unsigned-> valores de 0 a 65535
● O tipo void é usado em funções que não retornam valores ou para criar
ponteiros genéricos
● No tipo char, se o conteúdo puder ser maior que um caracter, usa-se: char
Nome[30]; // Nome poderá armazenar até 30 caracteres
● Não há uma inicialização implícita na declaração, mas é possível inicializar
as variáveis globais no momento da declaração
○ Usa-se para isso o operador de atribuição = como:
float sum = 0.0; int bigsum = 0; char ch = 'A';
Declaração de Constantes em C
● Constante: posição nomeada de memória que armazena um valor
que não pode ser alterado durante a execução do programa, por
exemplo:
○ const int n=10;
● Também podem ser definidas com a macro define, após os
includes, onde não se coloca ponto e vírgula, por exemplo:
○ #define n 10
○ #define letra 'A'
○ #define nome "Ana"
● Importante:
○ valores numéricos são atribuídos sem aspas, onde as partes
inteira e fracionária são separadas por ponto (.)
○ caracteres são representados entre apóstrofos (')
○ string são representadas entre aspas (")
Operações Aritméticas
● As operações aritméticas são representadas pelos mesmos
símbolos vistos
● Outros operadores aritméticos são os operadores de
incremento e decremento, representados respectivamente por
++ e --, como:
○ x++; // x = x + 1
○ y--; // y = y - 1
○ y=++x; // x = x + 1 e y = x
● Suporta também operadores compostos de atribuição, como:
○ n += 9; // n = n + 9
○ n -= 5; // n = n - 5
○ n *= 2; // n = n * 2
○ n /= 2; // n = n / 2
○ n %= y; // n = n % y
Comentários
● Vêm após //
● Podem ser iniciados com /* e finalizados com */
/* Um programa em linguagem C
Autor AJ */
#include <stdio.h> // Arquivo de cabeçalho (header)
void main()
{
int a, i = 10; char c = 'A'; double d = 0.315155;
printf("Digite um número inteiro: ");
scanf("%d", &a); //recebe um inteiro e armazena em a
printf("a vale %d, i vale %i, c equivale a %c e d vale %g", a, i,
c, d);
}
Bibliotecas
● Fornecem o restante da funcionalidade da linguagem:
○ Entrada e saída
○ Controle de processos e multiprogramação
○ Comunicação com sistema operacional
○ Matemática
○ Gráficos e multimídia
○ Etc.
● Usar uma biblioteca requer:
○ Inclusão dos headers da biblioteca no programa cliente, por
meio da diretiva #include
■ Os sinais < e > indicam que o arquivo a ser incluído no
código antes de ser compilado será procurado somente
na pasta include
○ “link-edição” da biblioteca com o executável
Entrada e Saída de Dados em C
● As trocas de informação entre o computador e o usuário são chamadas
entrada e saída (input e output, em inglês), onde entrada é a informação
fornecida a um programa e saída é a informação fornecida pelo programa
● Frequentemente são usados os termos "saída padrão" (standard output,
stdout) e "entrada padrão" (standard input, stdin) para referir ao monitor e
ao teclado, que são os meios básicos de interação com o usuário
● No entanto, os SO permitem redirecionar a saída e a entrada de
programas para outros dispositivos ou arquivos
● A entrada e saída em C são feitas da mesma maneira, com as mesmas
funções, não importando o dispositivo com o qual estamos nos
comunicando (teclado, terminal, arquivo, etc.).
● As mesmas funções que descrevem o acesso aos arquivos podem ser
utilizadas para se acessar um terminal de vídeo
● Em C as funções da biblioteca padrão para entrada e saída estão
declaradas no cabeçalho stdio.h
A função printf()
● Printf vem de "print formatted", sendo usada para exibir
valores
● Sintaxe básica:
printf(“Mensagem a ser escrita na tela”);
● Também é possível mostrar texto e valores de variáveis
usando argumentos. Sintaxe:
printf(“Mensagem a ser escrita na tela”, lista de argumentos);
● Exemplo de mensagem que inclui o valor de uma variável:
printf("Total a pagar: R$ %f", total);
○ onde:
○ %f representa o local onde será escrita uma variável float
○ total é a variável float que será mostrada na posição
marcada por %f
Especificações de Formato
● %d Número decimal inteiro (int)
● %i Número decimal inteiro com sinal
● %u Número decimal natural (unsigned int), ou seja, sem sinal
● %f Número decimal de ponto flutuante. No caso da função printf, devido às
conversões implícitas da linguagem C, serve tanto para float como para double
● %e Número em notação científica, por exemplo 5.97e-12
● %E Número em notação científica com o "e"maiúsculo, por exemplo 5.97E-12
● %g Escolhe automaticamente entre %f ou %e, o que for menor
● %G Escolhe automaticamente entre %f ou %E, o que for menor
● %c Imprime o caractere com o código ASCII correspondente ao valor dado
● %s Sequência de caracteres (string, em inglês)
● %p Exibe o endereço de memória do ponteiro em notação hexadecimal
● %n Exibe o ponteiro inteiro
● %% Imprime um %
● Modificadores l, h, L:
○ %ld, %li, %lo, %lu e %lx para informar que o tipo associado será long
○ h ou L para informar que o tipo associado será short ou long double
A função scanf()
● É utilizada para fazer a leitura de dados formatados. Sintaxe:
scanf("expressão de controle", lista de argumentos);
● Exemplo:
scanf("%f", &salario);
● Onde é esperada uma variável float (indicada por "%f"). O valor
lido será armazenado no endereço da variável salário
● Na lista de argumentos devemos indicar os endereços das
variáveis. Para fazer isso adicionamos o símbolo “&” como
prefixo na frente do nome da variável
● Importante: ao manipular endereços, é preciso cuidado
redobrado
scanf ("%d %s %g", &i, &c, &f);
● Nesse caso, scanf espera caracteres em c e não valores!
Printf: Máscara de Dados
● %.2f define a quantidade de casas
decimais (2)
● \t insere uma tabulação
● \b (backspace) move para a
posição anterior
● \n (new line) move para o início da
próxima linha
● \r (carriage return) move para a
posição inicial da linha atual
● \a (beep) emite som no auto-falante
● \f salta pg. de formulário
● \0 \’ \” apresentam os caracteres
que que seguem a \
1. Exemplos de possibilidades:
#include<stdio.h>
main()
{
int a,b;
float c,d;
a = 15;
b = a / 2;
printf("%d\n",b);
printf("%3d\n",b);
printf("%03d\n",b);
c = 15.3;
d = c / 3;
printf("%3.2f\n",d);
}
Printf: Máscara de Dados
2. Exemplo de outras
possibilidades:
#include <stdio.h>
#include <conio.h>
int main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
_getch(); // faz pausa
}
3. Exemplo do que pode dar
errado:
#include <stdio.h>
int main (void)
{
int nr=65;
printf ("Este e um int\t-> %d\n", nr);
printf ("Este e um char\t-> %c\n",
nr);
printf ("Este e um float\t-> %.2f\n",
nr);
return 0;
}
Exercício 8 (no Nead)
A partir dos algoritmos e fluxogramas (diagramas de bloco) construídos nos
exercícios 2 e 3 elabore os códigos em linguagem C que:
1. Receba um nº qualquer e mostre o dobro desse número
2. Receba dois números e informe a soma e o produto destes
3. Divide um número inteiro por outro, devolvendo o quociente e o resto
4. Receba o nome e o salário bruto de um funcionário e imprima o salário
líquido e o valor do imposto calculado, que é 8% sobre o salário bruto
5. Leia a cotação do Dólar e um valor em Dólares, converta esse valor para
Real e mostre o resultado
6. Calcule o valor da comissão de vendedores de peças, considerando que
esta será 5% do total da venda e que serão informados os seguintes
dados:
a. Identificação do vendedor
b. Código da peça
c. Preço unitário da peça
d. Quantidade vendida
Estrutura de Controle Condicional Simples
● Na estrutura condicional simples a instrução será
executada se a condição for verdadeira
if (condição)
instrução;
● Quando há mais de uma instrução é preciso usar chaves
if (condição)
{
instrução 1;
instrução 2;
}
Expressões Lógicasem C
● Todas as condições devem estar entre parênteses,
podendo existir também parênteses para alterar a
prioridade de execução das condições, como em:
if (X == 5 && (Y == 2 || Y == 3))
printf(“X é igual a 5 e Y é igual a 2 ou Y é igual a 3”);
Operadores Lógicos Relações
&& para conjunção (e) == (igual a) != (diferente de)
|| para disjunção (ou) > (maior que) < (menor que)
! para negação (não) >= (maior ou igual) <= (menor ou igual)
Estrutura de Controle Condicional Composta
● Na estrutura condicional composta a instrução 1 será executada se a
condição for verdadeira e a instrução 2, se a condição for falsa
if (condição)
instrução 1;
else
instrução 2;
● Quando há mais de uma instrução em cada bloco, é preciso usar chaves:
if (condição)
{
instrução 1;
instrução 2;
}
else
{
instrução 3;
instrução 4;
}
Estrutura de Controle Condicional Seletiva
● A estrutura condicional seletiva é usada quando existem situações
mutuamente exclusivas, ou seja, apenas uma das várias situações pode ser
executada
switch (variável)
{
case valor 1:
lista de instruções;
break;
case valor 2:
lista de instruções;
break;
...
default:
lista de instruções;
}
● O break é usado para impedir a execução de instruções nos cases seguintes
● Quando o valor não coincidir com os especificados, será executado o default
Exercício 9 (no Nead)
A partir dos exercícios 3 e 4 elabore estes códigos em C que permitam:
1. Calcular a quantidade litros de combustível e o valor em Real gastos em uma
viagem, mas incluindo o tratamento de erros
2. Definir e mostrar o maior de três valores
3. Mostrar a condição a partir do IMC, índice de massa corporal, que é um critério
para indicar a condição de peso de uma pessoa adulta. O IMC=peso/altura²,
onde: se for menor que 18,5, está abaixo do peso; entre 18,5 e 25 peso está
normal; entre 25 e 30 está acima do peso; a partir de 30 está obeso
4. Solicitar a entrada de um valor numérico inteiro e apresentar mensagem que
afirme se o valor numérico é ou não inteiro e se é positivo ou negativo
5. Efetuar o cálculo do reajuste de salário de um funcionário, considerando que
este deverá receber um reajuste de 15%, caso seu salário seja menor que 500.
Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste
será de 10%; caso seja maior que 1000, o reajuste deverá ser de 5%
6. Ler um valor numérico inteiro entre 1 e 12 e apresentar por extenso o nome do
mês correspondente ao valor recebido. Caso sejam fornecidos valores
diferentes, o programa deve indicar que é inválido
Estruturas de Repetição: While
● Pode ser usada quando o número de repetições necessárias
não for fixo (Laço de repetição condicional pré-teste), tendo este
formato
while (condição)
instrução;
● Quando há mais de uma instrução em cada bloco, é preciso
usar chaves
while (condição)
{
instrução 1;
instrução 2;
}
Exemplo
de While
float Nota1, Nota2, Nota3, Media;
int Quant, Con=1;
printf("Informe a quantidade de estudantes: \n");
scanf("%d",&Quant);
while (Con <= Quant)
{
printf("Informe as três notas: \n");
scanf("%f%f%f",&Nota1, &Nota2, &Nota3);
Media = (Nota1 + Nota2 + Nota3) / 3;
printf("A média do estudante %d é %.2f\n", Con, Media);
if (Media >= 6)
printf("Aprovado!\n");
else
printf("Reprovado!\n");
Con++;
}
Estruturas de Repetição: Do-While
● Pode ser usada quando o número de
repetições necessárias não for fixo (Laços de
Repetição Condicional Pós-teste), onde o teste
condicional ocorre ao final, tendo este formato
do
{
instruções;
}
while (condição);
Exemplo
de
Do-While
#include <stdio.h>
main ()
{
float Media, Somatorio = 0, MediaTurma;
int Con = 1;
char Opcao;
do
{
printf("Digite a média do estudante %d: \n", Con);
scanf("%f",&Media);
Somatorio = Somatorio + Media;
printf("Quer informar outro estudante? (S/N)\n");
scanf("%s",&Opcao);
Con++;
}
while (Opcao=='S' || Opcao=='s');
MediaTurma = Somatorio/(Con-1);
printf("Média da turma é %.2f\n", MediaTurma);
}
Estruturas de Repetição: For
● É usada quando se sabe o número de vezes que um bloco do
programa será repetido (Laço de Repetição Incondicional),
tendo este formato
for (i = valor inicial; condição; incremento/decremento de i )
instrução;
● Quando há mais de uma instrução em cada bloco, é preciso
usar chaves
for (i = valor inicial; condição; incremento/decremento de i )
{
instrução 1;
instrução 2;
}
Estruturas de Repetição: Exemplos de For
● Exemplo 3
float Media, Somatorio, MediaTurma;
int Quant, Con;
printf("Informe a quantidade de estudantes: \n");
scanf("%d",&Quant);
for (Con=1; Con <= Quant; Con++)
{
printf("Digite a média do estudante %d: \n", Con);
scanf("%f",&Media);
Somatorio = Somatorio + Media;
}
MediaTurma = Somatorio/(Con-1);
printf("Média da turma é %.2f\n", MediaTurma);
● Exemplo 1
for (a = 0; a <= 20; a=a+5)
printf("\nO valor de a é:
%d", a);
● Exemplo 2
int a, x;
for (a = 15; a >= 1; a -= 2)
{
printf("Digite um número:
");
scanf("%d", &x);
printf("%d * %d = %d\n", a,
x, a*x);
}
Estruturas de Repetição: Flexibilidade do For
● Qualquer expressão pode conter várias instruções separadas por
vírgula
for (i = 0, j = 1; (i+j) < 100; i++, j++)
printf("\n%d", i + j);
● A variável pode ser do tipo char
char ch;
for (ch = 'a'; ch <= 'z'; ch++)
printf("\nO valor ASCII de %c é %d", ch, ch);
● Qualquer uma das expressões do for pode ser omitida, mas os
ponto-e-vírgulas devem permanecer
int y=0, z=1;
for (; (y+z) < 100; y++, z++)
printf("\n%d", y + z);
● É possível chamar funções dentro de expressões do for...
Exercício 10 (no Nead)
A partir dos algoritmos feitos no exercício 5 elabore os códigos em C que possibilitem:
1. Ler um número inteiro positivo N e imprimir todos os divisores inteiros positivos de
N. Por exemplo, se entrado o valor 18, o programa deverá retornar 1 2 3 6 9 18.
Caso o valor informado seja nulo ou negativo, avisar isso ao usuário
2. Calcular o fatorial de x (x!). Pela definição, fatorial de 1 é 1 (1!=1) e fatorial de x é o
produto de todos os valores positivos deste até 1: x!=x*(x-1)*(x-2)... 1
3. Ler sucessivamente valores numéricos positivos e apresentar ao final o somatório,
a quantidade de valores lidos e a média. O programa deve finalizar quando o
usuário fornecer um valor nulo ou negativo
4. Receba 10 números reais, informe os que são positivos, nulos ou negativos, e ao
final a quantidade de números negativos e a soma dos números positivos
5. Imprimir um menu com 4 opções de pratos na tela, tendo uma quinta opção para
sair do programa, devendo informar cada prato solicitado e apresentar a
quantidade de pratos solicitados quando a 5ª opção for escolhida
6. Calcular a área de uma residência. Deve solicitar o nome, a largura (L) e o
comprimento (C) de cômodos, apresentando a área (LxC) de cada um seguida de
solicitação para saber se o usuário quer informar outro cômodo. Quando a resposta
for não (N), será apresentada a área total calculada
Comparativo de Instruções Entre Portugol e C
Portugol C Portugol C Portugol C
interrrompa break fflush(stdin) real float
algoritmo { inicial fim... ...} se if
ate fim_se ; seja case
caso case fimalgoritmo } final repita
e && funcao senao else, default
enquanto while inicio { ou ||
entao inteiro int pausa
escreva printf() leia scanf() var
faca logico verdadeiro
Funções Comumente Usadas em C
● stdio
○ gets(string)
○ printf("Digite um valor:\n")
○ puts(string)
○ scanf("%d",&x)
○ stdlib
○ system(“PAUSE”)
● locale
○ setlocale(LC_ALL,"portuguese")
● conio
○ getch() lê o caractere do
teclado, mas sem mostrá-lo
○ getche() nãoaceita argumentos
e devolve o caractere lido
○ clrscr() limpa a tela
● string
○ strcpy (variável, "constante
string")
● math
○ pow(X,Y): calcula potência XY
Programação para Automação
● Curso: Programação para Automação - Moodle USP
● Curso online gratuito de programação em C
● Programação Progressiva.net
● Programação com Arduino
● Ardublock - Programação Gráfica para Arduino
○ Ardublock | A Graphical Programming Language for
Arduino
○ Ardublock - Programação Gráfica para Arduino
○ ArduBlock - Programação visual para Arduino
○ Sourceforge - Download
● Lego Mindstorms Education EV3
○ Software
ConectaIF
● Informações
● Credenciamento
● Oficinas do Qualific Express
● Programação
● Incluído como item da 2ª avaliação