Fundamentos de Programação
Fundamentos de Programação
LOGOTIPOS
Sumário
Fundamentos de Programação......................................................................................... 3
1. Fundamentos de Programação......................................................................................................... 3
1.1. Tipos de Dados Primitivos.. ...................................................................................................................12
1.2. Declaração e Inicialização de Variáveis. ............................................................................... 14
1.3. Utilização de Literais e Strings......................................................................................................... 17
1.4. Categorias de Operadores e Precedência. ......................................................................... 18
1.5. Controle de Fluxo de Programas e Repetição. ...................................................................21
1.6. Sub-Rotinas. . ................................................................................................................................................ 33
1.7. Mecanismos de Passagem de Parâmetros em Sub-Rotinas............................... 37
1.8. Variáveis Globais e Locais.. .............................................................................................................. 38
1.9. Recursividade (Recorrência). ......................................................................................................... 39
Resumo.................................................................................................................................... 40
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
FUNDAMENTOS DE PROGRAMAÇÃO
1. Fundamentos de Programação
Programar é o ato de ensinar uma máquina ou computador na execução de tarefas e na
tomada de decisões, por meio do processo de criação de conjuntos de instruções que for-
mam um algoritmo. Essas instruções são formadas por regras definidas para executar algo
ou gerar um resultado.
www.grancursosonline.com.br 3 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Perceba que, em cada algoritmo acima, tentamos “solucionar um problema”, mas, para
isso, torna-se necessário seguir os passos sequencialmente e com um fim estabelecido
e finito. É com base na representação dos algoritmos que um software de computador, os
aplicativos e jogos funcionam.
Existem diversas linguagens de programação utilizadas no mundo, tais como Java, PHP,
Python, C# etc. Cada uma delas possui regras, requisitos mínimos e sintaxe limitada para
sua utilização, pois possibilita uma padronização e organização na execução dos passos
a serem seguidos nas instruções dos algoritmos. Observe abaixo, um exemplo de código
utilizando a linguagem de programação Java e C++:
www.grancursosonline.com.br 4 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Como cada linguagem de programação acima possui suas próprias regras e sintaxes
específicas, utilizaremos aqui um tipo de pseudocódigo, chamado português estruturado,
que nada mais é que uma linguagem de programação cujos comandos estão em português,
o que facilita a compreensão da execução do nosso programa.
A técnica é baseada em uma PDL (Program Design Language), que é uma linguagem ge-
nérica na qual é possível representar um algoritmo de forma semelhante à das linguagens
de programação.
www.grancursosonline.com.br 5 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Observe um exemplo abaixo de pseudocódigo que recebe um valor inteiro, fornecido pelo
usuário, e retorna esse valor inteiro no monitor:
algoritmo “exemplo 1”
var x: inteiro
inicio
leia(x)
escreva(x)
fim
Agora, vamos pegar esse primeiro exemplo e adicionar uma nova instrução, vamos adi-
cionar duas unidades (somar com 2) ao número digitado. Observe:
algoritmo “exemplo 2”
var numero, resposta: inteiro
inicio
escreva(“Digite um número inteiro: “)
leia(numero)
resposta ← numero + 2
escreva(“Resultado (numero + 2): “, resposta)
fim
Fluxograma é um tipo de diagrama, e pode ser entendido como uma representação es-
quemática de um processo ou algoritmo, muitas vezes feito por meio de gráficos que ilustram
de forma descomplicada a transição de informações entre os elementos que o compõem,
ou seja, é a sequência operacional do desenvolvimento de um processo, o qual caracteriza:
o trabalho que está sendo realizado, o tempo necessário para sua realização, a distância
percorrida pelos documentos, quem está realizando o trabalho e como ele flui entre os par-
ticipantes deste processo.
www.grancursosonline.com.br 6 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Observe um exemplo abaixo, com um fluxograma simples mostrando como lidar com uma
lâmpada que não funciona:
O fluxograma pode ser definido também como o gráfico em que se representa o percurso
ou caminho percorrido por certo elemento (por exemplo, um determinado documento), por
meio dos vários departamentos da organização, bem como o tratamento que cada um vai
lhe dando.
www.grancursosonline.com.br 7 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Outro detalhe importante é que, diferente do português estruturado, a maioria das lingua-
gens de programação são baseadas na língua inglesa, ou seja, para a programação, esse é o
idioma utilizado para a sintaxe das linguagens e para a maioria das referências.
Toda linguagem de programação tem uma sintaxe a ser seguida, que é um conjunto
de palavras e regras que definem o formato das sentenças válidas. Algumas palavras são
reservadas, pois 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. Tais palavras,
também são chamadas de palavras chaves. Nos exemplos acima que trabalhamos, as pala-
vras chaves estão em negrito.
As palavras chaves têm um fim específico no programa e não devem ser usadas para
qualquer outra coisa além daquilo que elas se propõem a fazer.
Todo programa possui uma estrutura básica que estabelece como os comandos e as
instruções devem ser incluídos em um algoritmo, estabelecendo um começo, um meio e um
fim. Quando escrevemos um programa, ele deve conter uma sequência que será seguida,
conforme exemplificado abaixo:
www.grancursosonline.com.br 8 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Algoritmo “MeuPrimeiroAlgoritmo”
início
imprima(“Olá, mundo!”)
fim
Observe no código acima que todo algoritmo/programa deve começar com a palavra re-
servada “algoritmo” seguida de “início”, uma ou mais funções e finalizar com a palavra “fim”.
Observem que acabamos de ver duas regras: uma para criar um programa e outra para chamar
uma instrução, e a isso chamamos de sintaxe.
Outra prática bastante recomendada e utilizada nos algoritmos e nas linguagens de pro-
gramação são os comentários em partes que necessitam de explicação e que são ignorados
pelas linguagens, pois eles servem apenas para detalhar determinadas instruções.
Na maioria das linguagens, para criação de um comentário em uma linha, basta colocar os
caracteres “//” seguido do texto que é o seu comentário ou, caso você precise escrever textos
muito longos, utilizamos o comentário multilinhas que é feito com a sintaxe: “/*” seguido do
texto que pode estar em várias linhas seguido de “*/”. Observe o exemplo a seguir:
/*
* Esse é o meu primeiro algoritmo.
* O resultado dele é a exibição na tela do texto “Olá, mundo!”
*/
algoritmo “OláMundo”
inicio // início do programa
imprima(“Olá, mundo!”)
// a função utilizada escreve uma mensagem na tela
fim /* fim do programa */
www.grancursosonline.com.br 9 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
O obtivo de se utilizar compilador é fazer com que um programa escrito em uma lin-
guagem de programação seja compreendido pelo computador e possa executar todas as
instruções escritas.
Vale salientar que não trataremos aqui como os compiladores e os interpretadores fun-
cionam, mas precisamos conhecer a sintaxe da linguagem de programação a fim de que o
compilador possa traduzir para a linguagem que a máquina possa executar.
Programa Programa
Compilador
fonte Objeto
Vale acrescentar que, quando dizemos que determinado programa é portável (portabili-
dade), significa que ele pode ser executado em diferentes plataformas, tais como Windows,
Linux, Mobile etc., ou seja, podemos dizer que o compilador consegue traduzir uma linguagem
fonte para diferentes linguagens de máquina.
Vala salientar que, mesmo que um programa seja compilado corretamente, isso não ga-
rante que o resultado sairá de forma correta, pois alguns erros podem acontecer e envolvem
a semântica do programa.
www.grancursosonline.com.br 10 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Por fim, para exemplificar, dentre alguns compiladores temos: GCC, pacote de programas
responsáveis por fazer a compilação do seu código em C, C++, Objective-C, Fortran, Ada, Go, and
D. Além disso, o NetBeans é uma Ambiente de Desenvolvimento Integrado (IDE) mas também
compilador de códigos em diversas linguagens, como C, C++ e PHP. Em resumo, muitas IDEs
possuem compiladores na sua estrutura de ferramentas e que provavelmente são utilizados.
Outro meio de traduzir um código de alto nível para um código que o computador com-
preenda, ou seja, linguagem de máquina, é por meio da utilização de um interpretador. Para
traduzir um programa escrito em uma linguagem de alto nível, o interpretador gera um novo
código, chamado de código objeto.
O interpretador trabalha interpretando o código linha por linha à medida em que ele vai
sendo executado e, dessa forma, dizemos que o programa é interpretado. Vejamos a ima-
gem abaixo:
Programa
fonte
Interpretador Saída
Entrada
O interpretador não traduz, mas realiza a interpretação do código fonte e de sua respec-
tiva entrada. Dessa forma, a interpretação é um processo mais lento e frequentemente requer
mais espaço em memória.
Por exemplo, a linguagem Java, que ficou muito popular, tinha como principal crítica a
lentidão dos programas gerados. A linguagem Java não era apenas interpretada, era chama-
da de híbrida pois gerava um código intermediário, chamado de byte code, que facilitava o
processo de interpretação.
www.grancursosonline.com.br 11 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
• Constantes: representam dados que não são modificados durante sua execução. Por
exemplo, ao definirmos uma constante matemática, chamada PI com valor aproximado
de 3,14, a cada execução do programa a referida constante terá o mesmo valor.
• Variáveis: representam dados que são manipulados e/ou possuem seu valor alterado
durante a execução. Por exemplo, ao definirmos uma variável chamada média, que
representa a média aritmética entre dois números, poderá assumir diferentes valores
dependendo da quantidade de valores de entrada no programa.
Existem duas categorias na qual podemos classificar: tipos de dados primitivos e os tipos
de dados customizados.
• Inteiro: para valores numéricos negativos ou positivos, sem casas decimais. Por exem-
plo, uma variável que irá armazenar a idade de algum usuário.
• Real: para valores numéricos negativos ou positivos, com inclusão de casas decimais.
Por exemplo, uma variável que irá armazenar informações de peso ou de altura.
• Lógico (ou booleano): assume somente dois valores, verdadeiro ou falso. Reserva um
bit na memória, em que o valor 1 representa “Verdadeiro” e o valor 0 representa “Falso”.
Por exemplo, uma variável que representa o estado de uma lâmpada, entre acesa ou
apagada.
• Texto: para variáveis que armazenam textos. Por exemplo, uma variável que irá arma-
zenar o nome de uma pessoa. O tipo de dado texto consiste em um único símbolo ou de
www.grancursosonline.com.br 12 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Na linguagem Java, por exemplo, o tipo de dados inteiro é dividido em 4 tipos primitivos:
byte, short, int e long. A capacidade de armazenamento de cada um deles é diferente, con-
forme segue abaixo:
www.grancursosonline.com.br 13 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
O conteúdo de uma variável pode ser alterado, consultado ou apagado diversas vezes
durante a execução de um programa, porém o valor apagado é perdido. Já as constantes são
fixas e não podem ser alteradas.
Vale destacar que, para atribuir valor a uma variável ou constante, é necessária uma no-
tação específica para associar um determinado valor, ou seja, para guardar o conteúdo no
endereço de memória específico. Vale lembrar que cada linguagem de programação adota
uma maneira de representá-la.
• O nome tem de começar por uma letra ou pelo caractere sublinhado (_) e não pode ser
uma palavra reservada da linguagem.
• O valor de inicialização tem de ser compatível com tipo de variável definido.
• Se o valor de inicialização for omitido, a variável é inicializada com os valores por defeito.
• É possível definir mais que uma variável utilizando o caractere vírgula (,).
• É possível omitir a palavra variável.
www.grancursosonline.com.br 14 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
As constantes seguem as mesmas regras que a declaração de variáveis, exceto que não
é possível omitir o valor de inicialização.
Na declaração de variáveis, podemos utilizar a palavra reservada “var”, de acordo com a
instrução abaixo:
var
<identificador 1>, < identificador 2>,..., <identificador n>: <tipo das variáveis>;
Em que <identificador 1> é o nome (identificador) de uma variável e <tipo das variáveis>
determina o tipo de valor que as variáveis poderão receber. Os identificadores das variáveis
são usados para referenciar as variáveis dentro do algoritmo. Devem ser claros e precisos,
dando uma ideia do “papel” da variável no algoritmo.
Existem regras básicas para formação dos identificadores, são elas:
• A
• A
• Nota
• NOTA
• X36
• IDADE
• _peso
• _nome
www.grancursosonline.com.br 15 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Para identificar uma variável ou uma constante, devemos utilizar um nome simbólico,
porém é importante lembrar que palavras-chaves não devem ser utilizadas para esse fim, ou
seja, palavras associadas a comandos e definições da linguagem (tais como if, for e int) são
reservadas, não podem ser utilizadas para o nome de variáveis e/ou constantes.
Os nomes de variáveis podem ser de qualquer tamanho, sendo que usualmente nomes
significativos devem ser utilizados.
constante
inteiro NotaMaxima ← 100;
var
inteiro idade ← 0;
real altura ← 1,79;
logico statusLampada ← 0; (onde o valor 0 é apagada e 1 é acesa)
Texto nomePessoa ← “Jose da Silva”;
Uma variável cujo valor não será alterado pelo programa pode ser qualificada como
constante. Vale ressaltar que a constante NotaMaxima não poderá ter seu valor alterado.
Evidentemente, constantes deste tipo devem ser inicializadas no momento de sua declaração.
www.grancursosonline.com.br 16 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Existem tipos de dados que podem ser decompostos, é o caso das literais ou strings. Elas
são utilizadas para armazenar caracteres agrupados, ou seja, caso seja necessário representar
o nome de uma pessoa, como “JOAO”, é possível decompor em caracteres: “J”, “O”, “A”, “O”.
Alguns detalhes importantes sobre manipulação de strings:
• Para representar o valor vazio para uma string, devemos seguir o exemplo abaixo:
texto ← “”;
Muitas linguagens de programação, tais como Java, C#, PHP etc., possuem funções que
permitem a manipulação de strings (caracteres/literais) e isto facilita bastante a sua utiliza-
ção. Abaixo, segue um exemplo de um algoritmo com strings:
/*
* Esse é o meu primeiro algoritmo utilizando strings
* O resultado dele é a exibição na tela do texto “Olá, mundo!”
*/
Algoritmo “MeuExemploComStrings”
var
nome1: texto;
nome2: texto;
meutexto: texto;
inicio
meutexto ← “Resultado: “;
escreva(“Digite o nome 1:”);
leia(nome1);
escreva(“Digite o nome 2:”);
leia(nome2);
se (nome1 = nome2) entao
escreva(texto, “Iguais”);
senao
escreval(texto, “Diferentes”);
fimse
fim
www.grancursosonline.com.br 17 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Uma expressão que utiliza a operação de adição, representa uma soma entre dois nú-
meros que ao final produz um resultado. É nesse momento que entram os operadores nos
algoritmos, pois eles possuem o objetivo de relacionar valores para resultar um outro valor.
Existem três tipos de operadores: aritméticos, lógicos e relacionais.
Operadores Aritméticos
• + (adição).
• - (subtração ou menos unário).
• ∗ (multiplicação).
• \ (divisão inteira).
• % (resto, aplicado apenas aos valores inteiros).
Com base nos operadores acima, podemos escrever expressões aritméticas que podem
envolver constantes e/ou variáveis inteiras. Como exemplo, suponha que idade1, idade2 e
idade3 sejam variáveis do tipo inteiro. Então, temos que:
www.grancursosonline.com.br 18 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
de multiplicação (*) tem maior precedência que o operador de adição (+). Podemos dizer que
o valor da expressão é igual a 17, se avaliarmos 5 * 3 primeiro e, depois, a expressão 15 + 2.
/*
* Esse algoritmo tem o objetivo de somar dois números inteiros;
*/
Algoritmo “Quadrado da soma de 2 inteiros”
var
a, b, quadrado: inteiro;
inicio
escreva(“Entre com o primeiro inteiro:”);
leia(a);
escreva(“Entre com o segundo inteiro:”);
leia(b);
quadrado ← (a+b)*(a+b);
escreva(“O quadrado da soma dos inteiros lidos e:”, quadrado );
fim
Operadores Relacionais
São utilizados para comparar números e literais, retornando valores lógicos. Não existe
um tipo específico para a representação de valores lógicos (verdadeiro e falso). Entretanto
qualquer valor pode ser interpretado como um valor lógico.
Podemos definir que 0 (zero) representa falso e qualquer outro valor representa verda-
de. Também é usual representar verdade com o valor 1 (um). Para produzir um valor lógico
(verdadeiro ou falso), usamos os operadores relacionais.
www.grancursosonline.com.br 19 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Dessa forma, podemos comparar dois valores e temos como resultado da avaliação de
um operador relacional 0, se a comparação é falsa, e 1, se a comparação é verdadeira.
Operador Resultado
x=y Verdade se x for igual a y
x!=y ou x<>y Verdade se for diferente de y
x<y Verdade se x for menor de y
x>y Verdade se x for maior que y
x<=y Verdade se x for menor ou igual a y
x>=y Verdade se x for maior ou igual a y
Operadores Lógicos
Os operadores lógicos são “and”, “or” e “not”, que significam “e”, “ou” e “não”, sendo utili-
zados respectivamente para conjunção, disjunção e negação. Algumas linguagens oferecem
operadores lógicos que funcionam da mesma forma que os operadores da lógica matemática.
A tabela abaixo apresenta os operadores lógicos, considerando a linguagem do português
estruturado:
Operador
E/And
Ou/Or
Não/Not
www.grancursosonline.com.br 20 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Operador de Atribuição – este operador é usado para definição de valor de uma variável,
ou seja, é guardado na memória apontada pela variável com o valor posicionado do lado
direito do operador de atribuição. Em algoritmo, é representado pelo símbolo: “←” (seta).
Em algumas linguagens de programação é utilizado o símbolo “:” (dois pontos). A sintaxe do
comando de atribuição é: NomedaVariavel ← expressão. Por exemplo, media ← 6.
Os algoritmos possuem um fluxo de execução único, ou seja, as instruções que são exe-
cutadas são as mesmas, independentemente dos valores de entrada, e irão produzir resulta-
dos diferentes dependendo desses valores. Porém, na realidade, algumas vezes executamos
determinados procedimentos dependendo de uma série de situações ou condições.
www.grancursosonline.com.br 21 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Início
Não
Fim
O controle de fluxo de um algoritmo e/ou programa pode ser classificado de quatro for-
mas diferentes, sendo essa classificação baseada na organização lógica existente em cada
situação. Essa classificação diferencia uma estrutura de decisão como: decisão simples,
decisão composta, decisão encadeada e decisão de múltipla escolha.
se (<condição>) então
<instruções para a condição verdadeira>
fim_se
www.grancursosonline.com.br 22 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Note que, no algoritmo acima, após a palavra reservada var, há a definição dos tipos de
variáveis. Em seguida, é solicitada a leitura dos valores para as variáveis A e B e, por fim,
esses valores são atribuídos à variável média, que realiza a operação desejada.
De acordo com o resultado calculado na variável média, há uma condição que permitirá
imprimir o resultado “aluno aprovado” caso esta seja maior que 6.0, e, não sendo, o programa
apenas imprime a mensagem “fim do algoritmo”, encerrando o programa sem apresentar a
média calculada, pois a condição estabelecida resultou em falso.
Assim, a condição composta permite desviar o fluxo para dois caminhos distintos. Observe
a representação desta estrutura por meio do português estruturado:
se (<condição>) então
<instruções para a condição verdadeira>
senão
<instruções para a condição falsa>
fim_se
<continuação das instruções do algoritmo>
www.grancursosonline.com.br 23 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Por exemplo:
Algoritmo par_impar;
Var
X: inteiro;
Inicio
leia(X);
se (X mod 2) = 0 então
escreva(X, ‘é par’);
senão
escreva(X, ‘é ímpar’);
fim_se
escreva(‘Fim do Algoritmo’);
Fim
Note que, após a palavra reservada var, em que há uma definição do tipo da variável,
é solicitada a leitura do valor para a variável X. Em seguida é verificado o resto da divisão
inteira do valor de X por 2, ou seja, é realizada uma verificação se X é divisível por 2. Nessa
condição, dependendo do resultado da avaliação da expressão “X mod 2=0”, é mostrado o
resultado “X é par”, caso seja verdadeiro ou “X é ímpar” caso seja falso.
Início
Fim
Uma instrução de condição pode ser inserida dentro de outra, formando uma estrutura de
condição, chamada de estrutura de decisão encadeada. O encadeamento dessas instruções
também é conhecido como aninhamento de instruções de condição.
O encadeamento de instruções permite tornar uma solução algorítmica ainda mais efi-
ciente, uma vez que diminui testes condicionais desnecessários.
www.grancursosonline.com.br 24 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
/*
* Esse algoritmo tem o objetivo de calcular a média de duas notas.
*/
Algoritmo media_de_notas;
Var
media: real;
Nota1: inteiro;
Nota2: inteiro;
Inicio
leia(Nota1);
leia(Nota2);
media ← (Nota1 + Nota2)/2;
se (Média >= 5.0) entao
se (Média >= 7.0) entao
escreva(“Aluno = Aprovado”);
senão
escreva(“Aluno = Recuperação”);
senão
escreva(“Aluno = Reprovado”);
fim_se
escreva(“Fim do algoritmo”);
Fim
Há uma estrutura de decisão utilizada em avaliações de valores para uma variável, é a de-
cisão de múltipla escolha. Diferentemente das estruturas condicionais anteriores, nesse caso
o teste condicional não retorna um valor lógico, mas sim um valor inteiro, real ou caractere.
Outra diferença está no fato de que essa estrutura permite desviar o fluxo de execução
para caminhos variados, ou seja, é verificada a igualdade da expressão de decisão no teste
condicional com as opções definidas, resultando na execução de um bloco, ou de uma única
instrução específica, para cada opção.
O comando Caso – é adequado quando precisamos escolher uma entre várias alternati-
vas previamente definidas, por exemplo, em um menu ou paleta de cores. Para cada “caso”,
é verificada a constante cujo valor é igual à expressão, depois são executados todos os co-
mandos seguintes. Caso não haja o “caso”, então é executado o comando associado ao caso
padrão/contrário. Vejamos abaixo sua representação no português estruturado:
www.grancursosonline.com.br 25 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Caso (Número):
Caso 1: Cor Vermelha;
Caso 2: Cor Verde;
Caso 3: Cor Azul;
Caso 4: Cor Amarela;
Caso 5: Cor Rosa;
Caso 6: Cor Preta;
Caso Outro: Cor inexistente;
Fim_Caso
Algoritmo escreve_mes;
Var
NumerodoMes: inteiro;
Inicio
Leia (numerodomes);
Caso (numerodomes) seja:
1: escreva(“Janeiro”);
2: escreva(“Fevereiro”);
3: escreva(“Março”);
4: escreva(“Abril”);
5: escreva(“Maio”);
6: escreva(“Junho”);
Caso Contrário:
escreva(“Mês inválido”);
Fim_Caso
Fim
www.grancursosonline.com.br 26 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Inicio
Receba
número do mês
Sim
Numerodomes = 1 Janeiro
Não
Sim
Numerodomes = 2 Fevereiro
Não
Sim
Numerodomes = 3 Março
Não
Sim
Numerodomes = 4 Abril
Não
Sim
Numerodomes = 5 Maio
Não
Não Sim
Mês inválido Numerodomes =6 Junho
Fim
www.grancursosonline.com.br 27 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Vale destacar que a maioria das linguagens de programação de programação utiliza co-
mandos parecidos quanto às estruturas de decisão até aqui estudadas. O comando Se-En-
tão-Senão nas linguagens de programação utiliza If-Then-Else, no inglês.
Estruturas de Repetição
Em algumas de nossas tarefas diárias, quando tentamos fechar a tampa de uma garrafa
pet, giramos a tampa várias vezes até que a garrafa feche completamente e fique apertado o
suficiente para não vazar líquido. Note que, durante esse processo, é verificado a cada volta,
se a tampa está bem apartada.
As estruturas de repetição são extremamente úteis para repetir uma série de operações
semelhantes que são executadas para todos os elementos de uma lista ou de uma tabela de
dados, ou simplesmente para repetir um mesmo processamento até que uma certa condição
seja satisfeita.
De forma análoga, podemos perceber diversas atividades da nossa rotina são repetitivas.
Durante uma fila de banco, por exemplo, o caixa chama o próximo da filha enquanto não chegar
ao último da fila. Outras repetições podem ser qualificadas com antecedência.
As estruturas de repetição são um modo que temos para executar blocos de comandos
obedecendo determinadas condições, contando também com a opção de repetir este bloco
quantas vezes precisarmos.
Observe que as repetições têm uma característica em comum que se refere ao fato de que
existe a verificação de condição de repetição, que pode ser representada por um valor lógico,
determinando se a repetição (comando) deve ou não prosseguir. Isso serve de base para a
implementação dos comandos de repetição em algoritmos. Ao invés de escrever a mesma
instrução várias vezes, ou então, utilizar uma estrutura de condição simples (IF_THEN_ELSE)
várias vezes, podemos utilizar uma estrutura que indique que uma instrução será executada
quantas vezes forem necessárias. Observe o exemplo abaixo:
Algoritmo imprimir_de_1_ate_5;
Inicio
escreva (1);
escreva (2);
escreva (3);
www.grancursosonline.com.br 28 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
escreva (4);
escreva (5);
Fim
No exemplo acima, utilizamos a instrução “escreva” repetidas vezes. Para o algoritmo aci-
ma, a quantidade de cinco instruções que utilizamos é bem viável e não nos dá tanto trabalho
para codificação, porém pense em um algoritmo que precise imprimir milhares de vezes uma
sequência de números, ou seja, teremos um trabalho tremendo repetindo comandos, além da
necessidade de escrever as sequências de números corretamente.
O comando Para (For) – define uma estrutura (instruções) que será repetida por um número
determinado de vezes. Para que seja possível determinar quantas vezes precisamos execu-
tar as instruções, precisamos sempre definir um contador para o comando, isto é, podemos
implementar um loop pré-definido. Vejamos a sintaxe abaixo:
Algoritmo “UtilizandoComando_Para”;
Var
contador, soma: inteiro;
Inicio
soma:= 0;
Para contador de 1 até 100 faça:
soma:= soma + contador;
Fim_Para
escreva(“O somatório de 1 a 100 é: “, soma);
Fim
www.grancursosonline.com.br 29 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Algoritmo Soma_Impares;
Var
num,soma: inteiro;
Inicio
soma ← 0;
Para (num de 1 até 100) faça:
Se (num mod 2 = 1) então:
soma ← soma+num;
Fim_Se
Fim_Para
escreva(“A soma dos números impares é:”soma);
Fim
www.grancursosonline.com.br 30 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
<instruções>
Fim_Enquanto
O comando Fim_Enquanto indica o fim das instruções que serão repetidas. Cada vez que
a execução atinge este ponto, retorna-se ao início do laço para que a expressão-lógica seja
avaliada novamente e assim sucessivamente, até que a condição seja falsa e o algoritmo
seja finalizado.
Algoritmo “UtilizandoComando_Enquanto”;
Var
contador, soma: inteiro;
Inicio
contador:= 1;
soma:= 0;
Enquanto contador < 1000 faça:
soma:= soma + contador;
contador:= contador + 1;
Fim_Enquanto
escreva(“O somatório de 1 a 100 é:”, soma);
Fim
www.grancursosonline.com.br 31 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Faça
<bloco de instruções>
Enquanto <condição booleana>
Algoritmo Soma_Media;
Var
contador: inteiro;
valor, soma, media: real;
Inicio
contador ← 0;
soma ← 0;
Faça:
escreva(“Entre com um valor:”);
www.grancursosonline.com.br 32 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
leia(valor);
soma ← soma + valor;
contador ← contador + 1;
Enquanto (contador >= 100);
media ← soma/contador;
escreva(“Soma:”, soma);
escreva(“Média:”, media);
Fim
1.6. Sub-Rotinas
Uma sub-rotina é um algoritmo que, geralmente, encerra em si próprio uma parte da solução
de um problema maior, que costuma ser o algoritmo a que essa sub-rotina está subordinada.
As sub-rotinas são importantes para:
Uma característica importante está na reutilização, pois tem sido adotada em soluções
por muitos grupos de desenvolvimento, pois diminui o retrabalho e gera economia de tempo.
www.grancursosonline.com.br 33 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Na maioria das vezes, as sub-rotinas são úteis para encerrar em si uma certa sequência
de comandos, pois, em algumas situações, esse subprograma é chamado várias vezes em um
algoritmo e, nestes casos, proporcionam uma redução do tamanho de algoritmos maiores.
Sub-rotinas são de instruções que realizam tarefas específicas, por isso segue algumas
características importantes:
• Carregado uma vez e pode ser executado quantas vezes for necessário.
• Podem ser usadas para economizar espaço e tempo de programação, já que podem ser
usadas várias vezes em um mesmo programa.
Vale destacar que as sub-rotinas podem ser uma função ou um procedimento, sendo que
a grande diferença é que no primeiro retorna‑se um valor e no segundo, não.
Funções
As funções são definidas como entidades separadas do algoritmo principal. Uma função
retorna um só valor, a partir de um determinado conjunto de argumentos.
www.grancursosonline.com.br 34 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Var
<variáveis locais>
Inicio
<instruções>
Fim
Temos que:
Além disso, no corpo da função, há o comando “retorne <expressão>”, que é usado para
retornar o valor calculado. Ao encontrar o comando retorne, a expressão entre parênteses é
avaliada, a execução da função é encerrada e o valor da expressão é retornado ao algoritmo
principal.
Vale lembrar que uma expressão pode ser uma simples constante, uma variável ou uma
combinação das duas por meio de operadores. Essa expressão deve ser do mesmo tipo que
o valor retornado pela função.
Algoritmo Exemplo_de_funcao;
Var
X, Y, Z: real;
funcao media(n1, n2: real): real
Var
med: real;
Inicio
med ← (n1+n2)/2;
retorne med;
www.grancursosonline.com.br 35 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Fim
Inicio
escreva(“Digite a nota 1”);
escreva(“Digite a nota 2”);
leia(X);
leia(Y);
Z ← Media(X,Y);
escreva (“A sua média é”, Z);
Fim
Procedimentos
Além disso, são estruturas que agrupam um conjunto de comandos, que são executados
quando o procedimento é chamado.
Em que:
Observe um exemplo:
Algoritmo Soma_Dois_Numeros;
Procedimento soma (a, b: inteiro)
www.grancursosonline.com.br 36 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Inicio
result ← a + b;
Fim
// Programa principal
Var
x,y, result: inteiro
Inicio
escreva(“entre com dois números:”);
soma(x,y);
escreva(“Resultado:”, result)
Fim
As sub-rotinas utilizam parâmetros que são repassados durante a invocação desse sub-
programa. Quando o módulo principal chama uma função ou procedimento, ele passa alguns
valores chamados argumentos de entrada.
Esses argumentos de entrada podem se dar segundo dois mecanismos distintos: passa-
gem por valor (ou por cópia) ou passagem por referência
Passagem de Parâmetros por Valor (ou Por Cópia) – o parâmetro é calculado e uma
cópia de seu valor é fornecida ao parâmetro formal, no ato da invocação da sub-rotina. A
execução da sub-rotina prossegue normalmente e todas as modificações feitas no parâmetro
formal não afetam o parâmetro real, pois trabalha-se apenas com uma cópia dele. Observe
um exemplo de passagem de parâmetro por valor:
Quando mais de um valor é do mesmo tipo, eles podem ser separados por vírgulas.
www.grancursosonline.com.br 37 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Significa que a passagem por referência irá receber ou armazenar um endereço de me-
mória relacionada a uma variável, e não o valor de uma variável.
Com a utilização das sub-rotinas, surgiu o conceito de variáveis globais e variáveis locais.
As variáveis globais são aquelas declaradas no algoritmo principal e visíveis, isto é, podem
ser usadas no algoritmo principal e por todas as demais sub-rotinas. Já as variáveis locais
são definidas dentro de uma sub-rotina e somente visíveis nessa sub-rotina, ou seja, sem
acesso para demais partes do algoritmo.
Vale salientar que o escopo das variáveis globais e locais são a região do programa onde
a variável é reconhecida e pode ser utilizada. As variáveis locais são aquelas que só têm
validade dentro da função/procedimento na qual foram declaradas, já as variáveis globais
têm validades para todas as funções/procedimentos do programa principal.
As variáveis locais são passadas como parâmetros ou declaradas no início de cada fun-
ção e são conhecidas como parâmetros formais, pois recebem cópias dos valores passados
para a função, e as alterações no valor dos parâmetros não serão percebidas pelo programa
que chamou a função.
Algoritmo exemplo_variáveis_locais_e_globais;
Var
X: real //variável global;
I: inteiro //variável global;
www.grancursosonline.com.br 38 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
Porém, vale ressaltar que essa simplicidade têm um preço que requer muita atenção em
sua implementação. Trazendo a recursividade para o nosso cotidiano, um ótimo exemplo
está na ação de contar um saco de moedas, em que cada ato de retirar uma moeda do saco
precisaria de uma função “contar dinheiro” que corresponde a identificar qual é o valor da
moeda e somar à quantia que ainda está no saco.
Para identificar a quantia que ainda está no saco basta chamar a mesma função “contar
dinheiro” novamente, porém dessa vez deve ser considerado que a moeda tirada anteriormente
não está mais lá. Este processo de retirar uma moeda, identificar seu valor e somar com o
restante do saco se repete até que o saco esteja vazio. Quando o ponto de parada for atingido
e a função retornar o valor zero, indica que não há mais moedas a serem contados no saco.
Por outro lado, um programa recursivo exige mais espaço de memória e é, na grande
maioria dos casos, mais lento do que a versão iterativa.
www.grancursosonline.com.br 39 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
RESUMO
Vimos também que as palavras reservadas são componentes de uma linguagem de pro-
gramação e que não podem ser utilizadas como identificadores de variáveis e constantes.
Além disso, apresentamos os conceitos entre compiladores, que têm a função de analisar
todo o código a fim de traduzi-lo de uma vez, e o interpretador, que tem a função de conver-
são/análise do código fonte aos poucos, ou seja, sempre que uma instrução é executada.
Quanto aos tipos primitivos de dados, aprendemos os tipos número real e inteiro, lógico
e texto. Vimos a importância dessas estruturas como entrada e saída para produção de um
resultado específico. Mostramos a forma de declaração e inicialização e o quanto isso é
importante no mundo da linguagem de programação.
Vale ressaltar que as variáveis e constantes possuem regras específicas e que não pode-
mos nomeá-las de forma inadequada para evitar problemas na compilação ou interpretação,
a depender da linguagem de programação utilizada. Tratamos também de uma dica importan-
tíssima, que é a distinção entre caracteres maiúsculos e caracteres minúsculos, conhecida
por muitas linguagens de case sensitive.
www.grancursosonline.com.br 40 de 41
LOGOTIPOS
Fundamentos de Programação
Sergio Sierro
falso, outra instrução ou um conjunto de instruções é executado. Além disso, temos as es-
truturas de decisão de múltipla escolha, utilizando o comando Caso, que utiliza avaliação de
valores possíveis em uma variável.
Vimos que o comando Para (for) define uma estrutura (instruções) que será repetida por
um número determinado de vezes. A estrutura Enquanto (While), que se caracteriza por uma
verificação de encerramento de atividades antes de se iniciar a execução de seu bloco de
instruções e o comando Faça-Enquanto (Do-While), que funciona de forma similar ao comando
enquanto, exceto pelo fato de que a condição de controle só é testada após a execução do
bloco de instruções e não antes.
www.grancursosonline.com.br 41 de 41