SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Disciplina: Algoritmo e Programação
Professor: Esp. Fábio Marques
Breves - PA
Fevereiro/2012
1
Conteúdo
Plano de Ensino .............................................................................................................................. 1
Apresentação .................................................................................................................................. 2
Unidade 1: Introdução a algoritmos e programas............................................................................. 3
1.1 Introdução............................................................................................................................. 3
1.2 Formas de representação........................................................................................................ 3
1.2.1 Fluxograma .................................................................................................................... 3
1.2.2 Diagrama de bloco (ou diagrama de fluxo): .................................................................... 4
1.2.3 Algoritmo ....................................................................................................................... 4
1.2.4 UML: Unified Model Language (Linguagem de modelagem unificada).......................... 5
1.2.5 Português estruturado ..................................................................................................... 6
Unidade 2: Elementos básicos variáveis e constantes. ..................................................................... 7
2.1 Tipos de dados....................................................................................................................... 7
2.1.1 Dados numéricos ............................................................................................................ 7
2.1.2 Tipo caractere................................................................................................................. 8
2.1.2 Tipo lógico ..................................................................................................................... 8
2.2 Variáveis................................................................................................................................ 8
2.3 Constantes............................................................................................................................. 9
Unidade 3: Operadores e Expressões............................................................................................. 10
3.1 Operação de atribuição ........................................................................................................ 10
3.2 Operadores aritméticos........................................................................................................ 10
3.3 Expressões aritméticas......................................................................................................... 10
Unidade 4: Entrada e Saída de Dados............................................................................................ 12
Unidade 5: Comandos de Controle................................................................................................ 15
5.1 Desvio condicional simples ................................................................................................. 15
5.2 Operadores relacionais ........................................................................................................ 15
5.3 Desvio condicional composto.............................................................................................. 15
5.4 Desvios condicionais encadeados ........................................................................................ 16
5.5 Operadores lógicos.............................................................................................................. 18
Unidade 6: Estruturas de repetição ................................................................................................ 19
6.1 Repetição do tipo: Teste lógico no inicio do looping............................................................ 20
6.2 Repetição do tipo: Teste lógico no fim do looping ............................................................... 20
6.3 Repetição do tipo: variável de controle................................................................................ 21
6.4 Estruturas de controle encadeadas........................................................................................ 22
6.4.1 Encadeamento de estruturas de repetição enquanto com enquanto................................. 22
6.4.2 Encadeamento de estruturas de repetição enquanto com repita...................................... 23
6.4.3 Encadeamento de estruturas de repetição enquanto com para........................................ 23
6.4.4 Encadeamento de estruturas de repetição repita com repita ........................................... 23
6.4.5 Encadeamento de estruturas de repetição repita com enquanto...................................... 23
6.4.6 Encadeamento de estruturas de repetição repita com para ............................................. 23
6.4.7 Encadeamento de estruturas de repetição para com para................................................ 24
6.4.8 Encadeamento de estruturas de repetição para com enquanto........................................ 24
6.4.9 Encadeamento de estruturas de repetição para com repita ............................................. 24
Unidade 7: Tipos Estruturados de Dados....................................................................................... 25
7.1 Vetores unidimensionais ...................................................................................................... 25
7.2 Vetores bidimensionais........................................................................................................ 26
7.3 Vetores multidimensionais................................................................................................... 27
Unidade 8: Apresentação da linguagem de programação C............................................................ 28
8.2 Nosso primeiro programa .................................................................................................... 28
8.2 Entrada e Saída de Dados .................................................................................................... 30
8.3: Comandos de Controle ....................................................................................................... 31
8.3.1 Desvio condicional simples........................................................................................... 32
8.3.2 Desvio condicional composto ....................................................................................... 32
8.3.4 Desvios condicionais encadeados.................................................................................. 33
8.4 Estruturas de repetição......................................................................................................... 34
8.4.1 Repetição do tipo: Teste lógico no inicio do looping ..................................................... 34
8.4.2 Repetição do tipo: Teste lógico no fim do looping......................................................... 34
8.4.3 Repetição do tipo: variável de controle ......................................................................... 34
8.5 Tipos Estruturados de Dados ............................................................................................... 35
Referência Bibliográficas.............................................................................................................. 36
1
Plano de Ensino
Identificação Geral
Instituição: IFPa – Instituto Federal de Educação, Ciência e Tecnologia do Pará
Curso: Licenciatura em Computação
Disciplina: Algoritmos e Programação
Professor: Esp. Fábio Marques
Hora Aula Presencial: 64h
Hora Aula Auto-estudo: 16h
Total de Hora Aula: 80h
Ementa
Introdução a algoritmos e programas: Conceitualização das formas de representação;
Elementos básicos variáveis e constantes. Operadores e Expressões: Operação de atribuição;
Operadores e expressões relacionais e lógicas. Entrada e saída de dados por teclado e vídeo.
Comandos de Controle: Uso de estruturas de decisão em algoritmos; Uso de estruturas de repetição
em algoritmos. tipos Estruturados de Dados: Vetores unidimensionais e multidimensionais;
Desenvolvimento de algoritmos. Apresentação de uma Linguagem de Programação (linguagem C).
Componentes Básicos de um Programa na Linguagem C. Desenvolvimento e Programação na
linguagem C. Modularização. Depuração de programas.
Objetivo
Apresentar ao aluno a estrutura e a funcionalidade de uma linguagem de programação
utilizando formas de representações de problemas com construções de algoritmos e programas.
Introduzir componentes básicos de um programa utilizando uma linguagem imperativa (linguagem
C) e desenvolver a habilidade de programação utilizando de forma básica, elementos, variáveis,
operadores, laços de repetição, expressões e tipos estruturados de dados.
Bibliografia básica
MANZANO J. A. N. G.; OLIVEIRA J. F. O. Algoritmos: lógica para desenvolvimento de
programação de computadores. 14.ed. São Paulo: Érica, 2002.
KERNINGHAN, B. W.; RITCHIE, D. C A Linguagem de Programação. Rio de Janeiro: Campus,
2003.
ZIVIANI, Nívio. Projeto de Algoritmos: com implementações em Pascal e C. 4.ed. São Paulo:
Pioneira. 1999.
Bibliografia complementar:
SEBESTA, ROBERT W. Conceitos de Linguagem de Programação. Porto Alegre: Bookman. 2003.
2
Apresentação
Os algoritmos estão presentes no nosso dia a dia, em todas as nossas mais simples rotinas, as
instruções para o uso de medicamentos e uma receita de culinária são alguns exemplos de
algoritmos. E é claro, que formam uma importante etapa do desenvolvimento de sistemas, em toda
linguagem de programação, independente de paradigma ou classificação da linguagem de
programação adotada.
O presente curso mostra os principais recursos disponíveis na grande maioria das linguagens
de programação existentes, tais como variáveis, constantes, operadores, laços e estrutura de decisão.
São utilizados pseudocódigos para facilitar o entendimento dos conceitos e elaboração de exemplos,
alguns exemplos ora apresentados em pseudocódigos serão recodificados utilizando a linguagem C.
3
Unidade 1: Introdução a algoritmose programas
1.1 Introdução
Os algoritmos estão presentes no nosso dia a dia, e pode ser visto como uma sequencia bem
definida de ações a serem seguidas para se alcançar um determinado objetivo, ou para se alcançar a
resolução de um conjunto de problemas de um determinado tipo. Segundo Dijkstra (1971) um
algoritmo corresponde a uma descrição de um padrão de comportamento, expresso em termos de
um conjunto finito de ações.
Desenvolver um programa é basicamente estruturar dados e construir algoritmos. Os
algoritmos construídos pelos programadores precisam possuir uma característica vital: serem
seguidos por computadores. No entanto, computadores só são capazes de seguir programas (ou
algoritmos) escritos em linguagem de máquina, que são sequencias binárias (zeros e uns) de difícil
compreensão. Para facilitar o desenvolvimento de programas, utilizamos linguagens de
programação construídas para este fim, normalmente utilizando-se de códigos próximos a
linguagem falada.
Para alguns programadores mais experientes, criar algoritmos intermediários, antes da
codificação em uma linguagem de programação propriamente dita pode parecer perda de tempo, no
entanto, a eliminação desta etapa de planejamento pode causar erros e atraso na entrega do produto
final, pois a solução do problema não foi pensada de forma detalhada e com maior profundidade.
Com a evolução do oficio de desenvolver sistemas, e das técnicas de programação, as
formas de representação dos algoritmos e do raciocínio lógico também foram evoluindo e se
modificando, conforme será apresentado no próximo item.
1.2 Formasde representação
Muitas formas de representação dos algoritmos e do raciocínio lógico foram utilizadas no
decorrer da evolução do oficio de se desenvolver sistemas. Independente da técnica ou da forma
adotada, o objetivo era sempre obter um produto que estabelecia a sequencia de ações a serem
executadas em um programa, sem o detalhamento de instruções ou comandos específicos,
permitindo assim, uma posterior codificação em qualquer linguagem de programação. Veremos, a
seguir, algumas das formas de representação já utilizadas.
1.2.1 Fluxograma
Ferramenta gráfica desenvolvida pelos profissionais da área de análise de sistemas, que
utiliza símbolos convencionais (ISO 5807:1985) tais como desenhos geométricos básicos, com a
finalidade de descrever o fluxo de ação de um determinado trabalho lógico, manual ou mecânico. A
Figura 1 mostra um exemplo de um fluxograma.
4
1.2.2 Diagrama de bloco (ou diagrama de fluxo):
Ferramenta gráfica desenvolvida pelos
profissionais envolvidos diretamente com a
programação, utiliza-se de diversos símbolos
geométricos (ISO 5807:1985), podendo ser
elaborado em diversos níveis de detalhamento. Tem
por objetivo a descrição do método e sequencia de
processo num computador, podendo, logo após a
elaboração deste diagrama, ser realizada a
codificação do programa. Na Figura 2 podemos ver
um diagrama de bloco, perceba que para utilização
destes diagramas, faz-se necessário o conhecimento
prévio de cada um dos símbolos utilizados.
1.2.3 Algoritmo
São um conjunto de regras formais para a obtenção de um resultado ou para a solução de um
conjunto de problemas, que se utiliza de fórmulas e expressões aritméticas para alcançar seu
objetivo e é utilizado sempre que é exigido um resultado final “correto” e/ou “coerente”. Na área de
desenvolvimento de sistemas, o termo algoritmo foi, muitas vezes, relacionado a diagrama de
blocos, neste caso, um algoritmo gráfico. Podemos visualizar na Figura 3 um algoritmo para cálculo
da situação de um estudante, mediante análise das notas obtidas pelo mesmo.
Figura 1: Exemplo de fluxograma
Figura 2: Exemplo de diagrama de bloco
5
1.2.4 UML:Unified Model Language (Linguagem de modelagem unificada).
A UML é uma linguagem de modelagem não proprietária que está se tornando um padrão da
indústria, sendo criada como uma forma de padronização para as diversas técnicas de representação
de algoritmos e outros artefatos do desenvolvimento de sistemas. É composta por 16 diagramas,
formados por um conjunto de regras e símbolos, cada um com a finalidade de documentar uma faze
específica do desenvolvimento de sistemas.
Na figura X, temos o diagrama de sequencia, responsável pela representação das trocas de
mensagens e fluxo de dados entre as entidades do sistema. Neste caso, as trocas de mensagens
necessárias entre o cliente e o servidor de e-mails.
Figura 3: Algoritmo representado em diagrama de blocos
6
1.2.5 Portuguêsestruturado
É uma técnica de algoritmização que se utiliza de narrativa em idioma corrente, denominada
pseudocódigo, também conhecida por portugol. A forma original faz uso do idioma inglês,
conhecido como inglês estruturado, muito próximo da notação utilizada na linguagem de
programação PASCAL.
Tem por vantagem ser genérica, e independente da linguagem de implementação do
algoritmo. Algoritmos escritos em português estruturado podem ser facilmente utilizados para a
elaboração de código em linguagem computacional (C, PASCAL, Delphi ou Java). A seguir, vemos
um algoritmo escrito em português estruturado que calcula a área de um triângulo.
algoritmo “AreaTriangulo”
var
b, h, a: REAL
inicio
Escreva(“Entre com o valor da base: ”)
Leia (b)
Escreva(“Entre com o valor da altura: ”)
Leia (h)
a  (b * h) / 2
Escreva(“A área desse triângulo é: ”, a)
fimalgoritmo
Figura 4: Exemplo de diagrama de sequencia
7
Unidade 2: Elementosbásicosvariáveise constantes.
Para se construir algoritmos usando pseudocódigo é necessário se conheça conceitos básicos
sobre dados e tipos de dados, independente da linguagem de programação. A partir desta unidade
veremos a parte mais prática do desenvolvimento de algoritmos, culminando com a codificação de
alguns códigos em C.
Como vimos anteriormente, um algoritmo é uma sequencia bem definida de ações a serem
seguidas para se alcançar um determinado objetivo, utilizaremos computadores como a ferramenta
para executar esses algoritmos. Podemos dizer, a grosso modo, que a solução de problemas
envolvem a manipulação de dados e instruções para a manipulação.
2.1 Tiposde dados
Os dados representam as informações que serão manipuladas nos algoritmos elaborados e
submetidos a um computador. Podemos dividir os dados em três tipos básicos, de acordo com a
essência dos mesmos.
São exemplo de dados manipuladas por algoritmos computacionais:
As vendas de uma loja de departamentos;
Nomes e endereços de um cadastro de clientes;
Notas dos alunos de um curso;
Medidas de uma experiência;
Como podemos observar nos exemplos acima, os dados podem ter várias representações e
são manuseados de formas diferentes no computador. Para trabalhar com esta variedade de tipos de
dados é necessário conhecer bem o problema a ser resolvido, para que seja escolhido o tipo de dado
certo.
2.1.1 Dadosnuméricos
Os dados numéricos podem ser representados de duas maneiras distintas: inteiros ou reais, e
são aqueles passíveis das operações aritméticas.
2.1.1.1 Tiponuméricointeiro
São dados do tipo numérico, quer sejam negativos, positivos ou nulo, correspondendo aos
números inteiros da aritmética. Também são conhecidos como números de ponto fixo, embora não
apresentem pontos (ou vírgulas) em sua representação.
São exemplos de números inteiros: 1508 602 0 -10 -56
8
2.1.1.2 Tiponuméricoreal
São dados do tipo numérico, quer sejam negativos, positivos ou nulo, inclusos os números
fracionários, e são utilizados por algoritmos que necessitam de um maior domínio (valor) que o
oferecido pelos números inteiros. Os números reais sempre apresentam o ponto (vírgula) decimal,
sendo também utilizados para representar as frações.
Por limitações técnicas, a representação gráfica de frações é diferente da representação
matemática, assim a representação gráfica da fração é representada da seguinte forma: 1/2.
Numericamente, a fração equivale a 0.5, pois não há mecanismos para guardar numeradores e
numeradores, logo, apenas o valor numérico equivalente será guardado.
São exemplos de números reais: -21.04 1.44 100.8 0.0 0.5
2.1.2 Tipo caractere
São dados não numéricos (aqueles não passíveis das operações aritméticas), tais como os
caracteres alfabéticos, dígitos numéricos e caracteres especiais. Este tipo também é conhecido como
alfanumérico, string, literal ou cadeia.
Uma sequencia de caracteres deve sempre ser delimitada por um apóstrofo ( ‘’ ). Para efeito
de programação deve-se notar a sintaxe da linguagem a ser utilizada, pois esses delimitadores
variam de linguagem para linguagem de programação.
São exemplos de cadeias de caracteres: ‘Pará’ ‘3233-3331’ ‘ ’ ‘7’ ‘BELÉM’
2.1.2 Tipo lógico
Caracterizam-se como tipo lógico os dados com valor VERDADEIRO ou FALSO, este tipo de dado
pode assumir apenas um valor a cada momento. É também conhecido como tipo boleano, devido
aos estudos sobre lógica matemática do filósofo inglês George Boole. A representação deste tipo de
dado, quando estamos usando uma linguagem de programação, varia de linguagem para linguagem.
2.2 Variáveis
O termo variável dá-se ao fato de que, em problemas computacionalmente trabalhados, o
volume de informações serem extremamente grande e diversificado, ou seja, variáveis.
Para que possamos armazenar algum dado na memória do computador, possibilitando assim
que o mesmo seja utilizado e manipulado posteriormente, faz-se necessária a identificação do tipo
do dado, ou seja, o dado precisa ser classificado segundo sua essência.
O conceito de variáveis é muito familiar na matemática, e em um programa de computador
ela é conhecida como uma entidade que possui um valor. Como na matemática, em informática, as
variáveis têm nome e recebem valores e para identificarmos identificá-la melhor.
Imagine a memória de um computador como um grande arquivo com várias gavetas,
9
conforme é visualizado na Figura 5, sendo que em cada gaveta é possível guardar apenas um único
valor por vez, e essas gavetas, como em um arquivo, deverão estar identificadas com uma
“etiqueta” contendo um nome. Este nome, será utilizado posteriormente para utilização da variável,
sendo assim, deve ser único e seguir as seguintes regras:
 Nomes de variáveis podem possuir um ou mais caracteres, sendo que o primeiro caractere
deve ser sempre uma letra;
 O nome de uma variável não poderá possuir espaços em branco, caso seja necessário deve-
se usar um caractere de ligação ( _ ) para representar um espaço;
 Não poderá ser usado como nome de variável uma palavra reservada para uso do
compilador;
 Alguns caracteres especiais não poderão ser utilizados.
São exemplos de nomes válidos de variáveis: Totalizacao, LaTA, lado3, B52, Rua_das_Flores,
CodProd, CPF
São contra exemplos de nomes válidos de variáveis: Totalização, 3Quarteiroes, Rua das Flores,
X+Y
Além de seguirmos estas regras devemos prestar atenção, ainda, para o tipo de dado que
uma variável deve receber. Este tipo dever ser previamente identificado para podermos
armazenar o valor correto.
2.3 Constantes
Por definição, constante é tudo aquilo que não se altera, que é fixo, que é estável, em
programação existem diversos momentos onde este conceito pode ser aplicado, como por exemplo:
no cálculo da área de uma circunferência. 2
rA   . Onde A é a variável responsável por
armazenar a área, r é a variável que guardará o comprimento do raio da circunferência, que deve ser
fornecido pelo usuário, e π é a constante matemática (aproximadamente 3.1415).
A definição do nome da constante segue exatamente as mesmas regras que apresentamos
para definição do nome de uma variável.
Figura 5: Abstração gráfica da memória de um computador
em nível de variável de programação.
10
Unidade 3: Operadorese Expressões
Variáveis e constantes, desde que definidas como tipos numéricos, poderão ser utilizadas
para a elaboração de cálculos matemáticos, através da elaboração de expressões aritméticas,
fazendo uso dos operadores aritméticos.
O resultado da avaliação de uma expressão é o valor que será atribuído à variável indicada.
Vale lembrarmos que o tipo da variável indicada também deve ser cuidadosamente analisado.
3.1 Operação de atribuição
Esta operação especifica que um determinado valor está sendo atribuído (guardado) em uma
determinada variável, e é representada pelo símbolo de seta (  ).
Logo A  3 (leia-se: variável “A” recebe três), indica que a variável A está recebendo para
armazenamento o valor numérico inteiro três. A operação de atribuição de valores é destrutiva, isto
é, ao atribuir-se um novo valor a variável, o valor anterior é perdido.
3.2 Operadoresaritméticos
Os operadores aritméticos são classificados como binários ou unários. São classificados
como binários quando envolvem dois operandos, como é o caso da multiplicação, exponenciação,
divisão, adição e subtração, e são classificados como unários quando envolvem apenas um
operando, como é o caso da inversão de sinais (positivo e negativo).
A seguir, veremos a tabela de operadores aritméticos, bem como a ordem de prioridade dos
mesmos, além do tipo e retorno de cada um deles:
OPERADOR OPERAÇÃO TIPO PRIORIDADE RESULTADO
+ Manutenção de sinal Unário 1 Positivo
- Inversão de sinal Unário 1 Negativo
 Exponenciação Binário 2 Inteiro ou real
* Multiplicação Binário 3 Inteiro ou real
/ Divisão Binário 3 Real
div Resto da divisão Binário 4 Inteiro
+ Adição Binário 4 Inteiro ou real
- Subtração Binário 4 Inteiro ou real
3.3 Expressõesaritméticas
Dado ao fato que grande parte do trabalho computacional utilizar-se de cálculos
matemáticos, o estudo e a utilização de expressões aritméticas (e fórmulas matemáticas) serão
bastante comuns no desenvolvimento de programas. As expressões são basicamente o
relacionamento entre variáveis e constantes através da utilização dos operadores aritméticos.
Iremos considerar novamente, a fórmula para o cálculo da área de uma circunferência.
2
rA   , onde A representa a área da circunferência, r representa o comprimento do raio da
11
circunferência e onde π representa a constante matemática (aproximadamente 3.1415). A equação
matemática representada na forma computacional ficaria da seguinte forma: A 3.1415 * r  2
Para a representação de expressões aritméticas em programas precisaremos nos ater a
algumas diferenças existentes entre as formas matemática e computacional.
A primeira característica é a inexistência de colchetes ou chaves na forma computacional,
devendo ser substituídos por parênteses, que serão resolvidos dos mais internos para os mais
externos da expressão. A expressão matemática )]}230(:55[43{ x será representada
computacionalmente como x  (43 * (55 / (30 + 2))).
Outra mudança percebida é a substituição do sinal de igualdade (=) pelo sinal de atribuição
(), que indica que o valor resultante da expressão aritmética será atribuído a variável em questão
(x).
12
Unidade 4: Entrada e Saída de Dados
Um programa executável em um computador usualmente possui três itens básicos de
trabalho: a entrada de dados, o seu processamento e a saída do resultado, logo, trabalharemos todas
as soluções computacionais através da elaboração de programas com estes três itens. Uma
consequencia disto é que se os dados forem entrados de forma errada, ou se estiverem sendo
processados de forma equivocada, a resposta será um resultado errado.
Agora já sabemos que qualquer erro antes atribuído a um computador, na realidade fora
causado por um erro humano, quer seja voluntario ou involuntário. Quando recebemos uma
cobrança indevida, ou detectamos um erro no nosso saldo bancário, podemos afirmar que se trata de
um erro humano.
A Figura 6 ilustra os três pontos básicos do trabalho de resolver problemas de forma
computacional e suas relações.
Em um programa real, a entrada e saída de dados poderão ocorrer de diferentes formas. Uma
entrada de dados pode ser realizada, por exemplo, de tais formas: via teclado, via modem, através
de um leitor ótico, dentre outras. Enquanto as saídas de dados podem ser realizadas, por exemplo,
das seguintes formas: em vídeo, em impressora, em um arquivo em disco e etc.
Devido à grande variedade de dispositivos de entrada e saída existentes, e devido à
complexidade de manipulação destes nas diversas linguagens de programação, iremos nos ater em
utilizar os comandos Leia, Escreva e Escreval, para representar a entrada e a saída de dados
respectivamente, abstraindo a interface dos dispositivos existentes. Por motivos didáticos,
adotaremos que toda entrada será realizada através do teclado, e toda saída realizada através do
monitor. A diferença entre os comandos Escreva e Escreval está apenas no fato do segundo pular
uma linha após escrever a lista de dados.
Em Português estruturado:
Leia (<lista de dados>)
Escreva (<lista de dados>)
Escreval (<lista de dados>)
Como exemplo de um problema resolvível computacionalmente por um programa, podemos
ter: “Deverá ser criado um programa que efetue a leitura de dois valores numéricos. Calcule a
média aritmética dos dois valores e apresente o resultado obtido.”
Figura 6: Três pontos básicos de um programa
13
Para a resolução de problemas como estes, precisaremos compreender bem o mesmo, e
buscarmos uma solução computacional para o mesmo, delimitando os passos a serem seguidos pelo
computador para resolução de tal problema de forma genérica.
Para tanto, deveremos observar que será realizada a leitura de dois valores que não
conhecemos (e que realmente não precisamos conhecer), e para isto, utilizaremos duas variáveis
para trabalhar com as incógnitas do problema, v1 e v2. E, para trabalhar com o resultado da média,
utilizaremos uma terceira variável, chamada de M.
O algoritmo para resolução de tal problema seria muito parecido com o seguinte:
1. Ler dois valores numéricos (variáveis v1 e v2);
2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M.
2
21 vv
M


3. Apresentar o valor da variável M após a realização do cálculo.
O algoritmo acima representa apenas uma das soluções corretas para o problema acima,
podendo ser feito de diversas formas, haja vista que se trata da interpretação do referido
problema.
Tendo estabelecido os passos para resolução do problema de forma genérica, podemos
iniciar a resolução do mesmo através da codificação, para tanto, utilizaremos a técnica da
utilização do português estruturado.
Todo algoritmo escrito em português estruturado deverá seguir uma estrutura rígida,
conforme apresentada a seguir:
Primeiro devemos definir o nome do algoritmo, que deve ser algo sugestivo, para que
possamos nos lembrar do se trata o algoritmo apenas pela análise do nome, sem ter que analisar
o algoritmo na integra.
algoritmo “MediaAritmetica”
Após a definição do nome do algoritmo, temos uma área destinada à declaração (identificação)
de todas as variáveis que serão necessárias para a execução do algoritmo e obtenção do respectivo
resultado. Esta área inicia-se com a palavra var, conforme abaixo:
var
v1, v2, M: REAL
Percebe-se que as variáveis foram agrupadas, pois todas pertencem ao mesmo tipo de dado, o
tipo Real. A sintaxe para declaração de variáveis é a seguinte: <lista de variáveis>: <tipo de dado>
A partir de agora, podemos utilizar as variáveis, dando prosseguimento à resolução do
problema. Para delimitar a área de execução das instruções que irão realizar o passo a passo
utilizaremos o par inicio/fim. Note que o bloco de instruções de programa (bloco compreendido
pelo par inicio/fim) é apresentado um pouco deslocado para a direita, isto se chama endentação, e
facilita a leitura de um bloco do programa, por tanto, trata-se de uma boa prática endentar seus
códigos de blocos. No entanto, a endentação não influencia na execução das instruções.
14
Para a realização da leitura do valor de uma variável utilizaremos o comando Leia indicando
como argumento para o mesmo a variável desejada. Para fins informativos, e para instrução do
operador do sistema, serão exibidas mensagens indicando o que o operador deve fazer, a exibição
de mensagens será realizada pelo comando Escreva recebendo como argumento a mensagem a ser
exibida, conforme a seguir:
Escreva(“Entre com o primeiro valor: ”)
Leia(v1)
A seguir, realizaremos a conversão da equação
2
21 vv
M

 do modelo matemático para o
computacional, e a atribuição do resultado a variável M:
M  (v1 + v2) / 2
Só nos resta agora, exibir o resultado da expressão aritmética atribuído a variável M
conforme a seguir:
Escreva(“A média dos valores é: ”, M)
Perceba que utilizamos o comando Escreva com dois argumentos, uma mensagem e a
variável M, desta forma serão exibidos a mensagem e o valor de M respectivamente.
O algoritmo completo pode ser visualizado a seguir:
algoritmo “MediaAritmetica”
var
v1, v2, M: REAL
inicio
Escreva(“Entre com o primeiro valor: ”)
Leia(v1)
Escreva(“Entre com o segundo valor: ”)
Leia(v2)
M  (v1 + v2) / 2
Escreva(“A média aritmética dos valores é: ”, M)
fimalgoritmo
Em linhas gerais, basta que a estratégia acima adotada seja seguida sempre que se necessita
escrever um algoritmo para a resolução de um problema genérico, por tanto, vamos rever a
estratégia para uma melhor fixação:
1. Compreender bem o problema;
2. Buscarmos uma solução computacional para o mesmo, delimitando os passos a serem
seguidos.
3. Elaborar a resolução do mesmo através da codificação em português estruturado
Adicionalmente, poderíamos realizar testes sobre o nosso algoritmo: uma forma seria a reescrita
do mesmo uma linguagem de programação, para que o compilador possa convertê-lo em linguagem
de máquina, ou ainda a utilização de uma ferramenta que interprete o nosso português estruturado
(pseudocódigo) e o execute.
Uma ferramenta que realiza a interpretação de nossos pseudocódigos escritos em português
estruturado é o Visualg (Visualizador de Algoritmos) como se nossos algoritmos fossem programas
de computador (APOIO INFORMÁTICA, 2012).
15
Unidade 5: Comandosde Controle
Com as informações apresentadas até agora, já conseguimos solucionar alguns problemas,
como por exemplo: calcula a média das notas de um aluno. No entanto, ainda temos algumas
limitações, como por exemplo, tratar a média deste aluno para realizarmos um processamento mais
adequado, como a exibição de uma mensagem informando se o aluno foi ou não aprovado. Observe
que a média do aluno terá de ser verificada de acordo com um parâmetro e então terá de ser tomada
uma decisão: qual mensagem imprimir.
5.1 Desvio condicional simples
Para a resolução do problema da mensagem de aprovação do aluno, será necessário
conhecermos uma nova instrução: se...então...fimse. Esta instrução desvia a execução do algoritmo
para uma determinada área de acordo com a condição, caso a condição seja VERDADEIRA, serão
executados todos os comandos entre o se...então, e caso a condição seja FALSA serão executados
todos os comandos após o fimse.
se <condição> entao
<sequencia de comandos>
fimse
5.2 Operadoresrelacionais
Para a utilização da instrução se...entao...fimse precisaremos conhecer os operadores relacionais
para que possamos verificar o estado de uma variável enquanto VERDADEIRO ou FALSO. Esta
verificação é efetuada com a utilização dos operadores relacionais, conforme tabela a seguir:
SÍMBOLO SIGNIFICADO
= Igual a
<> Diferente de
> Maior que
< Menor que
>= Maior ou igual que
<= Menor ou igual que
5.3 Desvio condicional composto
Para a realização de desvios condicionais compostos, faremos uso da instrução
se...então...senao...fimse, onde sendo a condição VERDADEIRA, serão executadas todas as
instruções que estiverem localizadas entre o se...entao e a instrução senao, enquanto que se a
condição for FALSA, serão executadas todas as instruções que estiverem localizadas entre o senao
e a instrução fimse.
se <condição> entao
<sequencia de comandos para condição VERDADEIRA>
senao
<sequencia de comandos para condição FALSA>
fimse
16
Com o conhecimento prévio das estruturas de decisão simples e composta, podemos retomar
a solução do problema da média: “Deverá ser criado um programa que efetue a leitura das duas
notas obtidas por um aluno. Calcule a média aritmética dos dois valores e apresente a mensagem
APROVADO caso a média seja maior ou igual a 7 ou REPROVADO, caso contrário.”
1. Ler dois valores numéricos (variáveis n1 e n2);
2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M.
2
21 nn
M


3. Se o valor da variável M for maior que 7 apresentar a mensagem APROVADO ou
REPROVADO caso contrário.
Algoritmo em português estruturado:
algoritmo “SituacaoAluno”
var
n1, n2, M: REAL
inicio
Escreva(“Entre com a primeira nota: ”)
Leia(n1)
Escreva(“Entre com a segunda nota: ”)
Leia(n2)
M  (n1 + n2) / 2
Se (M >= 7) entao
Escreva(“APROVADO”)
Senao
Escreva(“REPROVADO”)
Fimse
fimalgoritmo
5.4 Desvioscondicionaisencadeados
Em alguns problemas, será necessário combinar condições sucessivas para garantir que uma
ação somente seja executada se o conjunto de condições seja satisfeito. Para o conjunto de
instruções, ainda pode ser definido um novo conjunto de condições para serem testadas. Para este
tipo de estrutura de desvios condicionais, com diversos níveis de condição chamamos de
aninhamento ou encadeamento.
se <condição> entao
< comandos para condição1 VERDADEIRA>
senao
se <condição2> entao
<comandos para condição1 e condição2 VERDADEIRAS>
senao
<comandos para condição1 VERDADEIRA e condição2 FALSA>
fimse
fimse
O encadeamento foi realizado apenas na condição1 sendo FALSA, no entanto, o mesmo
poderá ser aplicado caso a condição1 fosse VERDADEIRA, ou até mesmo nos dois casos.
17
Com o conhecimento de desvios condicionais encadeados, podemos resolver o seguinte
problema: “Deverá ser criado um programa que efetue a leitura das duas notas obtidas por um
aluno. Calcule a média aritmética dos dois valores e apresente a mensagem APROVADO caso a
média seja maior ou igual a 7 ou RECUPERACAO caso a média seja maior que 5 ou ainda
REPROVADO, caso contrário.”
1. Ler dois valores numéricos (variáveis n1 e n2);
2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M.
2
21 nn
M


3. Se o valor da variável M for maior que 7 apresentar a mensagem APROVADO ou
RECUPERACAO caso a média seja maior que 5 ou REPROVADO caso contrário.
Algoritmo em português estruturado:
algoritmo “SituacaoAluno2”
var
n1, n2, M: REAL
inicio
Escreva(“Entre com a primeira nota: ”)
Leia(n1)
Escreva(“Entre com a segunda nota: ”)
Leia(n2)
M  (n1 + n2) / 2
Se (M >= 7) entao
Escreva(“APROVADO”)
Senao
Se (M >= 5) entao
Escreva(“RECUPERAÇÃO”)
Senao
Escreva(“REPROVADO”)
Fimse
Fimse
fimalgoritmo
18
5.5 Operadoreslógicos
Os operadores lógicos, assim como os operadores aritméticos, realizam a operação entre
operandos, neste caso, operandos lógicos. Também se classificam em unários e binários, de forma
análoga aos operadores aritméticos.
A seguir, veremos a tabela de operadores lógicos, bastante reduzida, se compararmos a
tabela de operadores aritméticos.
OPERADOR OPERAÇÃO TIPO RESULTADO
AND E Binário VERDADE se ambas as variáveis de
entrada forem VERDADE.
OR OU Binário VERDADE se pelo menos uma das
variáveis de entrada forem
VERDADE.
XOR OU
EXCLUSIVO
Binário VERDADE se e somente se
exatamente uma das variáveis de
entrada for VERDADE.
NOT NÃO Unário Negação da variável atual.
A seguir, veremos as tabelas-verdade (resultados) dos operadores acima relacionados.
Tabela verdade para o operador lógico AND.
OPERANDO 1 OPERANDO 2 OP1 AND OP2
VERDADEIRO VERDADEIRO VERDADEIRO
VERDADEIRO FALSO FALSO
FALSO VERDADEIRO FALSO
FALSO FALSO FALSO
Tabela verdade para o operador lógico OR.
OPERANDO 1 OPERANDO 2 OP1 OR OP2
VERDADEIRO VERDADEIRO VERDADEIRO
VERDADEIRO FALSO VERDADEIRO
FALSO VERDADEIRO VERDADEIRO
FALSO FALSO FALSO
Tabela verdade para o operador lógico XOR.
OPERANDO 1 OPERANDO 2 OP1 XOR OP2
VERDADEIRO VERDADEIRO FALSO
VERDADEIRO FALSO VERDADEIRO
FALSO VERDADEIRO VERDADEIRO
FALSO FALSO FALSO
Tabela verdade para o operador lógico NOT.
OPERANDO NOT OP
VERDADEIRO FALSO
FALSO VERDADEIRO
19
Unidade 6: Estruturasde repetição
Em alguns problemas faz-se necessária a repetição de um determinado trecho de instruções
por um determinado número de vezes. Nesses casos, realiza-se um looping que efetue a repetição
do determinado trecho pelo determinado número de vezes. Os loopings também são conhecidos
como laços de repetição ou malhas de repetição.
Com os conhecimentos adquiridos até o momento, teríamos de repetir o trecho de código
quantas vezes fossem necessárias, por exemplo, no seguinte problema: “Deverá ser criado um
programa que efetue a leitura de três valores numéricos. Calcule o triplo de cada um deles e
apresente o valor obtido respectivamente.”
1. Ler um valor numérico (variável valor);
2. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo
3. Apresentar o valor da variável triplo.
4. Ler um valor numérico (variável valor);
5. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo
6. Apresentar o valor da variável triplo.
7. Ler um valor numérico (variável valor);
8. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo
9. Apresentar o valor da variável triplo.
Algoritmo em português estruturado:
algoritmo “ValorTripo1”
var
valor, triplo: REAL
inicio
// primeira vez
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, triplo)
// segunda vez
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, triplo)
// terceira vez
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, triplo)
fimalgoritmo
Para a resolução deste tipo de problema, existem instruções mais apropriadas que
determinam um número variado de repetições, gerando códigos mais elegantes e menores.
20
6.1 Repetição do tipo: Teste lógico no inicio do looping
Tem como principal característica a realização de um teste lógico no início do looping,
verificando se o trecho de instruções subordinadas ao looping poderá ou não ser executada. Esta
estrutura de repetição é a enquanto...faça...fimenquanto.
enquanto <condição> faça
<sequencia de instruções>
fimenquanto
Reescrita do algoritmo ValorTripo em português estruturado com o uso do
enquanto...faça...fimenquanto:
algoritmo “ValorTripo2”
var
i: INTEIRO
valor, triplo: REAL
inicio
i  1
Enquanto i <= 3 faca
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, valor)
i  i + 1
Fimenquanto
fimalgoritmo
Para a resolução deste problema, com o uso da estrutura de repetição
enquanto...faça...fimenquanto, precisamos criar uma variável para controlar as iterações
(repetições), esta variável foi chamada de i e é do tipo INTEIRO. Esta variável recebe o valor 1
antes do início do looping, e é incrementada ao final de cada looping, para que possa ser testada no
início da próxima iteração.
6.2 Repetição do tipo: Teste lógico no fim do looping
Esta estrutura assemelha-se a anterior, diferindo apenas no fato de que o teste será realizado
apenas no final do looping, sendo assim, podemos dizer que esta estrutura de repetição tem o
funcionamento no sentido contrário da anterior. Por consequencia disso, tem-se que o bloco de
instruções será executado sempre, pelo menos uma vez. A estrutura de repetição é a repita...ate.
repita
<sequencia de instruções>
ate <condição>
21
Reescrita do algoritmo ValorTripo em português estruturado com o uso do repita...ate:
algoritmo “ValorTripo3”
var
i: INTEIRO
valor, triplo: REAL
inicio
i  1
Repita
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, triplo)
i  i + 1
Ate i > 3
fimalgoritmo
Para esta solução, utilizando a estrutura de repetições repita...ate também utilizamos uma
variável de controle chamada i, no entanto, perceba que a condição demonstrou-se contrária a
condição da estrutura enquanto...faça...fimenquanto.
6.3 Repetição do tipo: variável de controle
Nas duas estruturas de repetição anteriores, fizemos o uso de uma variável para controlar o
número de iterações, no entanto, existem estruturas de repetição que realizam o controle dessa
variável de forma controlada pela própria estrutura de repetição. Com a estrutura para...faça
poderemos executar loopings com um número finito de iterações, ou seja, nesses casos, não é
obrigatório conhecer antecipadamente o número de interações que devem ser executadas.
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
<sequencia de instruções>
fimpara
Reescrita do algoritmo ValorTripo em português estruturado com o uso do para...faça:
algoritmo “ValorTripo3”
var
i: INTEIRO
valor, triplo: REAL
inicio
Para i de 1 ate 3 faca
Escreva(“Entre com o valor: ”)
Leia(valor)
triplo  valor * 3
Escreval(“O triplo do valor é: ”, triplo)
i  i + 1
Fimpara
Fimalgoritmo
22
6.4 Estruturasde controle encadeadas
Dependendo do problema a ser resolvido, também é possível o aninhamento, ou
encadeamento, de estruturas de controle, assim como nas estruturas de decisão.
6.4.1 Encadeamento de estruturasde repetição enquanto com enquanto
Neste caso particular, utilizaremos duas instruções enquanto encadeadas, onde a sequencia
de instruções contidas dentro do enquanto mais interno será executada enquanto a condição1 e
condição2 forem verdadeiras. Perceba que o laço mais interno é executado a cada iteração do laço
mais externo.
enquanto <condição1> faca
enquanto <condição2> faca
<sequencia de instruções>
fimenquanto
fimenquanto
Vamos analisar o algoritmo em português estruturado abaixo.
algoritmo “EnquantosEncadeados”
var
i, j: INTEIRO
inicio
i  1
j  1
Enquanto i < 3 faca
Enquanto j < 5 faca
Escreval(“i vale ”, i, “ e j vale ”, j)
j  j + 1
Fimenquanto
i  i + 1
Fimenquanto
Fimalgoritmo
Agora, vamos analisar a saída do console:
i vale 1 e j vale 1
i vale 1 e j vale 2
i vale 1 e j vale 3
i vale 1 e j vale 4
i vale 2 e j vale 1
i vale 2 e j vale 2
i vale 2 e j vale 3
i vale 2 e j vale 4
*** Fim da execução.
Perceba que houve duas iterações de j (laço mais interno), uma para cada iteração de i (laço
mais externo.
23
6.4.2 Encadeamento de estruturasde repetição enquanto com repita
Neste caso particular, utilizaremos uma instrução enquanto e uma instrução repita.
enquanto <condição1> faca
repita
<sequencia de instruções>
ate <condição2>
fimenquanto
6.4.3 Encadeamento de estruturasde repetição enquanto com para
Neste caso particular, utilizaremos uma instrução enquanto e uma instrução para.
enquanto <condição1> faca
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
<sequencia de instruções>
fimpara
fimenquanto
6.4.4 Encadeamento de estruturasde repetição repita com repita
Neste caso particular, utilizaremos duas instruções repita encadeadas.
repita
repita
<sequencia de instruções>
ate <condição2>
ate <condição1>
6.4.5 Encadeamento de estruturasde repetição repita com enquanto
Neste caso particular, utilizaremos uma instrução repita e uma instrução enquanto.
repita
enquanto <condição2> faca
<sequencia de instruções>
fimenquanto
ate <condição1>
6.4.6 Encadeamento de estruturasde repetição repita com para
Neste caso particular, utilizaremos uma instrução repita e uma instrução para.
repita
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
<sequencia de instruções>
fimpara
ate <condição1>
24
6.4.7 Encadeamento de estruturasde repetição para com para
Neste caso particular, utilizaremos duas instruções para encadeadas.
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
<sequencia de instruções>
fimpara
fimpara
6.4.8 Encadeamento de estruturasde repetição para com enquanto
Neste caso particular, utilizaremos uma instrução para e uma instrução enquanto.
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
enquanto <condição> faca
<sequencia de instruções>
fimenquanto
fimpara
6.4.9 Encadeamento de estruturasde repetição para com repita
Neste caso particular, utilizaremos uma instrução para e uma instrução repita.
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
repita
<sequencia de instruções>
ate <condição>
fimpara
25
Unidade 7: TiposEstruturadosde Dados
Até o momento, realizamos o estudo apenas de variáveis do tipo simples, ou seja, aquelas
que armazenam apenas um valor por vez. A partir de agora, estaremos estudando uma técnica que
nos permitirá manipular um agrupamento de dados homogêneos dentro de uma única variável.
Classifica-se como uma estrutura de dados homogêneos, pois os dados armazenados sempre
obedecerão ao mesmo tipo de dado definido no momento da declaração da estrutura.
Na literatura encontramos diversas nomenclaturas para este tipo estruturado de dados, tais
como: variáveis indexadas, variáveis compostas, variáveis subscritas, arranjos, arrays (do inglês),
vetores, matrizes e outros. No nosso estudo defini-las-emos como vetores. Vale lembrar que as
regras para nomenclatura de tipos estruturados de dados seguem as mesmas regras das variáveis do
tipo simples, vistas anteriormente.
7.1 Vetoresunidimensionais
Caracteriza-se pela definição de uma única variável dimensionada por uma constante inteira
positiva que define o tamanho da mesma.
Para entendermos melhor o uso deste tipo de estrutura, vamos imaginar a seguinte situação:
suponha que exista uma relação de alunos com o nome de cada estudante e a nota da primeira prova
da disciplina Algoritmos e Programação. Deve-se imprimir o nome de cada estudante cuja nota é
maior do que a nota média da classe.
Utilizando variáveis simples, deveríamos criar uma variável para armazenar o nome de cada
estudante (isto é: nome1, nome2, nome3, ..., nomeN: CARACTERE), e uma variável para cada nota
de cada aluno (isto é: nota1, nota2, nota3, ..., notaN: REAL). Note que para a existência de um
número consideravelmente grande de alunos haverá um número extraordinariamente grande de
variáveis.
Uma solução mais adequada seria utilizarmos um conjunto para armazenar os nomes e um
conjunto para armazenar as notas dos estudantes, neste caso, tanto a variável de nomes quanto de
notas, seriam vetores unidimensionais. Caso a relação possua 20 alunos, as variáveis nomes e notas
seriam um conjunto com 20 elementos cada.
Sendo assim, a variável nome[1] indica o nome do primeiro aluno, sendo chamada de
variável indexada. O índice da variável poderá ser substituído por uma variável, sendo utilizado o
valor da mesma para descobrir-se a posição no vetor.
Utilizando os conhecimentos a respeito de vetores, podemos agora escrever o algoritmo para
a solução do problema com cinco alunos
1. Ler o nome e a primeira nota de cada um dos alunos;
2. Efetuar o cálculo da média das notas lidas, guardando o resultado em M.
5

notas
M
3. Verificar quais alunos ficaram acima da média e imprimir seus nomes.
26
algoritmo “VetorUnidimensional”
var
nomes: vetor [1..5] de caractere
notas: vetor [1..5] de real
i: INTEIRO
media: REAL
inicio
media  0
// Lendo o nome e notas; somando as notas
Para i de 1 ate 5 faca
Escreva(“Entre com o nome do ”, i, “º aluno: ”)
Leia(nomes[i])
Escreva(“Entre com a nota do ”, i, “º aluno: ”)
Leia(notas[i])
media  media + notas[i]
Fimpara
// Calculando a média
media  media / 5
// Imprimindo os nomes dos alunos acima da média
Escreval (“*** Lista de alunos acima da média”)
Para i de 1 ate 5 faca
Se notas[i] > media entao
Escreval(nomes[i])
Fimse
Fimpara
Fimalgoritmo
7.2 Vetoresbidimensionais
Anteriormente, vimos que os vetores unidimensionais possuíam apenas uma dimensão, no
entanto, a partir de agora, conheceremos uma nova opção, que será a de utilizarmos vetores
bidimensionais. Devemos lembrar que trata-se de um tipo homogêneo de dados, logo, todos os
elementos devem obedecer o tipo declarado.
Os vetores bidimensionais são usados para a representação de tipos estruturados de dados na
forma de tabelas. O vetor bidimensional também é uma variável do tipo indexada, no entanto, esta
possui dois índices: um para especificar as linhas, o primeiro; outro para especificar a coluna, o
segundo.
A seguir, vemos a representação gráfica de uma tabela de vendas de uma loja de
eletrodomésticos, tal estrutura poderá ser armazenada utilizando-se um vetor bidimensional. A
célula em destaque, que representa as vendas da quarta semana do “Eletrodoméstico 2” será
representada pelo índice [4, 2].
27
Semana Eletrodoméstico 1 Eletrodoméstico 2 Eletrodoméstico 3 Eletrodoméstico 4
1 6 3 9 5
2 5 10 3 2
3 7 8 8 5
4 8 10 12 7
5 4 7 3 3
6 7 15 5 4
7.3 Vetoresmultidimensionais
Como visto, podemos ter vetores com uma única dimensão, os monodimensionais, com duas
dimensões, os bidimensionais, e agora, veremos que os vetores podem apresentar mais de duas
dimensões, sendo classificados como vetores multidimensionais.
Suponha que o Museu de Carros Antigos está conduzindo um levantamento dos carros
antigos do Estado de São Paulo. Cada carro possui um registro com as seguintes informações:
fabricante (um código inteiro de zero a trinta), o ano do carro (de 1900 a 1950) e as condições do
carro (1 - ruim, 2 - regular, 3 - boa, 4 - excelente). Para permitir a execução de várias análises nos
dados, estes são armazenados num conjunto tridimensional, como o mostrado abaixo:
Logo, para o carro em destaque seria indexado pelo código do fabricante [26], pelo ano
[1904] e pelo estado de conservação [2] e teria o código 6. Logo, se o vetor chamar-se carros,
teríamos um item como: carros[26, 1904, 2] = 6.
Condição
Fabricante
Ano
1900 1950
30
0
4
2
26
1904
6
28
Unidade 8: Apresentação da linguagem de programação C
Estaremos apresentando, neste capítulo, aspectos básicos de uma poderosa linguagem de
programação, sendo bastante genérica para ser utilizada para a criação de diversos programas, tais
como: processadores de texto, sistemas operacionais, programas para solução de diversos
problemas da Engenharia, Física e outras ciências. Estaremos apresentando uma estrutura particular
do C, padronizada pela ANSI, chamada de ANSI C.
Esta unidade visa apresentar apenas os aspectos mais elementares da linguagem, que permita
ao aluno desenvolver os algoritmos acima expostos, bem como os exercícios disponibilizados, um
curso mais completo da linguagem C, bastante consolidado, que vêm sendo disponibilizado desde
1996, pode ser acessado gratuitamente a partir da página da UFSC (CPDEE/UFMG, 2012).
A linguagem de programação C nasceu ainda na década de 70, sendo implementada por
Dennis Ritchie, derivada de uma outra linguagem chamada B, criada por Ken Thompson.
Originalmente, o C foi implementada em DEC PDP-11 rodando o sistema operacional UNIX.
Uma das características primeiramente percebidas pelos iniciantes da programação, é que o
C é case-sensitive, e isso significa dizer que as letras maiúsculas são diferentes das letras
minúsculas, isso é: “Media” é diferente de “media”, que é diferente de “mEdia”, logo, o nome de
variáveis e de instruções tem de ser grafados exatamente como o exposto.
Por tratar-se de uma verdadeira linguagem de programação, nossos códigos escritos na
linguagem C (muito próximos do inglês) têm de ser traduzidos para a linguagem compreendida pelo
computador, ou seja, linguagem binária. A tradução do nosso arquivo em formato texto para um
arquivo binário é realizada pelo compilador. Existem diversos compiladores C disponíveis
gratuitamente na internet, aconselhamos o compilador Dev-C++ (BLOODSHED, 2012), que possui
um ambiente de desenvolvimento para o ambiente Windows, além de estar com este ambiente quase
todo traduzido para o Português Brasileiro.
8.2 Nosso primeiro programa
Estaremos agora, elaborando o nosso primeiro programa utilizando a linguagem C, trata-se
do mais famoso primeiro programa desenvolvido pelos aprendizes de uma linguagem de
programação: Hello word! (Olá mundo!). Logo o problema seria descrito da seguinte forma:
“Deverá ser criado um programa que apresente a mensagem: Olá Mundo !”
O algoritmo para resolução de tal problema seria muito parecido com o seguinte:
1. Apresentar a mensagem “Olá mundo!”.
Em português estruturado teríamos o seguinte código:
algoritmo “OlaMundo”
inicio
Escreva(“Olá mundo!”)
Fimalgoritmo
29
A tradução para a linguagem C é apresentada abaixo:
#include <iostream>
int main() {
printf(“Olá mundo!n”);
system(“PAUSE”);
}
Observando o código, percebemos o primeiro comando #include < iostream>, este comando,
informa ao compilador deve incluir o arquivo-cabeçalho iostream. Este arquivo é responsável
declarações de funções úteis para entrada e saída de dados, daí o seu nome: Standard Input/Output
(entrada e saída padrão, do inglês). Esse comando, de inclusão do arquivo-cabeçalho stdio.h será
utilizado sempre que formos utilizar algum comando de entrada ou saída (Escreva / Leia do
português estruturado).
Outra característica da linguagem é a obrigatoriedade da criação de uma função chamada
main, pois é ela quem será chamada quando o programa for executado, e possui por padrão a
seguinte assinatura.
int main() {
}
Entre as chaves deverão ser escritos todos os códigos na linguagem C, seria o equivalente ao
par início/fimalgoritimo do português estruturado.
A apresentação do texto na tela deve-se a instrução printf que recebe como parâmetro o
conteúdo a ser exibido, neste caso “Olá Mundo!”. Já o comando system(“PAUSE”) faz a pausa ao
final da execução do programa, do contrário, a janela se fecharia tão rápido que não conseguiríamos
ler a mensagem exibida.
Uma curiosidade da linguagem é a existência constante de controle ou especiais, chamas
constante barra ou constantes barra invertida, que podem ser adicionados as mensagens a serem
exibidas para causar um determinado efeito, neste caso, utilizamos os caracteres n (new line) que
gera uma quebra de linha, dando um efeito similar ao comando Escreval do português estruturado,
logo, após imprimir “Ola Mundo!” o cursor passará para a próxima linha.
Os caracteres barra existentes na linguagem C são os seguintes:
Caractere Significado Descrição
t Tabulação horizontal Move o cursor para a próxima parada de tabulação.
r Carriage return Posiciona o cursor no início da linha atual.
a Alerta Faz soar a campainha do sistema.
0 Null Caractere que em C termina um conjunto de caracteres.
n Nova linha Posiciona o cursor no início da nova linha.
Observe também que as instruções escritas em C possuem um ponto-e-vírgula (;) para
identificar o término daquela instrução.
30
8.2 Entrada e Saída de Dados
Agora que já vimos os primeiros conceitos da linguagem C, podemos nos aventurar em um
programa mais completo, contendo uma entrada e saída de dados. Veja o seguinte problema:
“Deverá ser criado um programa leia um valor numérico referente a uma quantidade em dias, e
imprima a quantidade de anos referentes aos dias.”
1. Ler um valor numérico referente a quantidade de dias (variável dias);
2. Realizar a conversão de dias em anos e guardar na variável anos.
25.365
dias
anos  .
3. Apresentar o conteúdo da variável anos após o cálculo.
Em português estruturado teríamos:
algoritmo “DiasAnos”
var
dias: INTEIRO
anos: REAL
inicio
Escreva(“Entre com o número de dias: ”)
Leia(dias)
anos  dias / 365.25
Escreva(dias, “ dia(s) equivalem a ”, anos, “ ano(s).”)
Fimalgoritmo
Já o mesmo algoritmo escrito em C seria:
#include <iostream>
int main () {
// declaração das variáveis
int dias;
float anos;
// Entrada, processamento e saída de dados
printf ("Entre com o número de dias: ");
scanf ("%d", &dias);
anos = dias / 365.25;
printf ("nn%d dias equivalem a %f anos.n", dias, anos);
system(“PAUSE”);
}
Pudemos observar algumas novidades no código acima, como por exemplo, a declaração das
variáveis dias e anos, dos tipos int (inteiro) e float (real) respectivamente. Os tipos básicos
suportados pelo C são os seguintes:
31
Tipo Significado Descrição
char Caractere O valor armazenado é um caractere. Caracteres geralmente são
armazenados em códigos (usualmente o código ASCII).
int Inteiro Número inteiro é o tipo padrão e o tamanho do conjunto que pode ser
representado normalmente depende da máquina em que o programa
está rodando, normalmente de -2.147.483.648 a 2.147.483.647
float Real Número em ponto flutuante (real) de precisão simples, com seis dígitos
de precisão.
double Precisão dupla Número em ponto flutuante (real) de precisão dupla, com dez dígitos
de precisão.
void Indefinido Este tipo serve para indicar que um resultado não tem um tipo definido.
Uma das aplicações deste tipo em C é criar um tipo vazio que pode
posteriormente ser modificado para um dos tipos anteriores.
Utilizamos também a instrução scanf (equivalente ao Leia do português estruturado), ela
recebe como parâmetros, o tipo de dado a ser lido, “%d” neste caso, que representa que será lido um
dado inteiro, e o endereço da variável onde será guardada a informação lida (representa-se o
endereço de uma variável pelo símbolo de percentual % e o nome da variável).
Há também o uso de uma expressão aritmética bem simples e similar aquelas que vínhamos
utilizando em nossos pseudo-códigos em português estruturado.
A instrução printf (equivalente ao Escreva do português estruturado) também está
recebendo dois caracteres barra n (nova linha), e os caracteres %d e %f que exibirão um inteiro e
um real respectivamente na tela, no meio do restante do texto.
Segue uma lista dos códigos % disponíveis na linguagem C:
Código Significado
%d Inteiro
%f Float
%c Caractere
%s String
%% Coloca um % na tela
8.3: Comandosde Controle
Veremos agora as equivalências entre os comandos de controle existentes no português
estruturado e na linguagem C.
32
8.3.1 Desvio condicional simples
Sintaxe em português estruturado:
se <condição> entao
<sequencia de comandos>
fimse
Sintaxe em C:
if (<condição>) {
<sequencia de comandos>
}
Código escrito em C:
#include <iostream>
int main () {
int num;
printf (“Digite um numero: ”);
scanf (“%d”, &num);
if (num > 10) {
printf (“O número digitado é maior que 10!n”);
}
system(“PAUSE”);
}
8.3.2 Desvio condicional composto
Sintaxe em português estruturado:
se <condição> entao
<sequencia de comandos para condição VERDADEIRA>
senao
<sequencia de comandos para condição FALSA>
fimse
Sintaxe em C:
if (<condição>) {
<sequencia de comandos para condição VERDADEIRA>
} else {
<sequencia de comandos para condição FALSA>
}
33
Código escrito em C:
#include <iostream>
int main () {
int num;
printf (“Digite um numero: ”);
scanf (“%d”, &num);
if (num >= 10) {
printf (“O número digitado é maior ou igual a 10!n”);
} else {
printf (“O número digitado é menor que 10!n”);
}
system(“PAUSE”);
}
8.3.4 Desvioscondicionaisencadeados
Sintaxe em português estruturado
se <condição1> entao
< comandos para condição1 VERDADEIRA>
senao
se <condição2> entao
<comandos para condição1 e condição2 VERDADEIRAS>
senao
<comandos para condição1 VERDADEIRA e condição2 FALSA>
fimse
fimse
Sintaxe em C:
if (<condição1>) {
<sequencia de comandos para condição1 VERDADEIRA>
} else {
if (<condição2>) {
<comandos para condição1 e condição2 VERDADEIRAS>
} else {
<sequencia comandos para condição1 VERDADEIRA e condição2 FALSA>
}
}
Código escrito em C:
#include <iostream>
int main () {
int num;
printf (“Digite um numero: ”);
scanf (“%d”, &num);
if (num >= 10) {
printf (“O número digitado é maior ou igual a 10!n”);
} else {
if (num >= 5) {
printf (“O número digitado está entre 5 e 10!n”);
} else {
printf (“O número digitado está entre 0 e 5!n”);
}
}
system(“PAUSE”);
}
34
8.4 Estruturasde repetição
Veremos agora as equivalências entre as estruturas de repetição existentes no português
estruturado e na linguagem C.
8.4.1 Repetição do tipo: Teste lógico no inicio do looping
Sintaxe em português estruturado:
enquanto <condição> faça
<sequencia de instruções>
fimenquanto
Sintaxe em C:
while (<condição>) {
<sequencia de instruções>
}
8.4.2 Repetição do tipo: Teste lógico no fim do looping
Sintaxe em português estruturado:
repita
<sequencia de instruções>
ate <condição>
Sintaxe em C:
do {
<sequencia de instruções>
} while (<condição>);
8.4.3 Repetição do tipo: variável de controle
Sintaxe em português estruturado:
para <variável> de <inicio> ate <fim> [passo <incremento>] faca
<sequencia de instruções>
fimpara
Sintaxe em C:
for (<inicialização>; <condição> ; <incremento>) {
<sequencia de instruções>
}
Código escrito em C:
#include <iostream>
int main () {
int i;
for (i = 1; i <= 100; i = i + 1) {
printf ("%d n", i);
}
system(“PAUSE”);
}
35
8.5 TiposEstruturadosde Dados
Como vimos anteriormente, existem os tipos simples de dados e os tipos estruturados,
vejamos agora como utilizar os tipos estruturados no C.
A declaração de um vetor em C, é caracterizada pelo tipo de dado a ser armazenado, o nome
e o tamanho do vetor. Adicionalmente o vetor poderá ser inicializado no momento de sua
declaração.
Sintaxe em C:
tipo nome_vetor[tamanho] = {lista_de_valores};
Veja o exemplo de código C que utiliza um vetor unidimensional.
#include <iostream>
int main () {
int i, soma, valores[10];
for (i = 1; i <= 10; i = i + 1) {
printf (“Entre com o %dº valor: ”, i);
scanf (“%d”, &valores[i]);
}
soma = 0;
for (i = 1; i <= 10; i = i + 1) {
soma = soma + valores[i];
}
printf (“nnA soma dos valores informados foi: %dn”, soma);
system(“PAUSE”);
}
36
Referência Bibliográficas
Apoio Informática. VisuAlg: Editor e Interpretador de Pseudocódigos. Disponível em:
<http://www.apoioinformatica.inf.br/o-visualg>. Acesso em 30 Jan 2012.
Bloodshed. Dev-C++. Disponível em: <http://www.bloodshed.net/dev/>. Acesso em 01 Fev 2012.
CPDEE/UFMG. Curso de C. Disponível em: < http://www.mtm.ufsc.br/~azeredo/cursoC/>. Acesso
em 01 Fev 2012.
Dijkstra, E.W. (1971) A Short Introduction to the Art of Programming. Technological University
Endhoven.

Weitere ähnliche Inhalte

Was ist angesagt?

Portal de Acompanhamento de Egressos
Portal de Acompanhamento de EgressosPortal de Acompanhamento de Egressos
Portal de Acompanhamento de EgressosCassiano Carraro
 
Python gtk
Python gtkPython gtk
Python gtkTiago
 
Como programar em educaçao especial
Como programar em educaçao especialComo programar em educaçao especial
Como programar em educaçao especialMagda Ferreira
 
Br Office Writer
Br Office WriterBr Office Writer
Br Office Writerntetlcursos
 
BrOffice - Apostila completa
BrOffice - Apostila completaBrOffice - Apostila completa
BrOffice - Apostila completaVera Mln Silva
 
X dialog
X dialogX dialog
X dialogTiago
 
Selinux
SelinuxSelinux
SelinuxTiago
 
Wx python
Wx pythonWx python
Wx pythonTiago
 
Conhecendo o br office.org 2.0 write
Conhecendo o br office.org 2.0  writeConhecendo o br office.org 2.0  write
Conhecendo o br office.org 2.0 writeLuciana
 
Tunelamento
TunelamentoTunelamento
TunelamentoTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
Squid guard
Squid guardSquid guard
Squid guardTiago
 
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...Gabriel Cabral
 

Was ist angesagt? (20)

Portal de Acompanhamento de Egressos
Portal de Acompanhamento de EgressosPortal de Acompanhamento de Egressos
Portal de Acompanhamento de Egressos
 
Python gtk
Python gtkPython gtk
Python gtk
 
Como programar em educaçao especial
Como programar em educaçao especialComo programar em educaçao especial
Como programar em educaçao especial
 
Br Office Writer
Br Office WriterBr Office Writer
Br Office Writer
 
BrOffice - Apostila completa
BrOffice - Apostila completaBrOffice - Apostila completa
BrOffice - Apostila completa
 
X dialog
X dialogX dialog
X dialog
 
Sql
SqlSql
Sql
 
Jclic
JclicJclic
Jclic
 
Selinux
SelinuxSelinux
Selinux
 
Horde
HordeHorde
Horde
 
Wx python
Wx pythonWx python
Wx python
 
Zope
ZopeZope
Zope
 
Conhecendo o br office.org 2.0 write
Conhecendo o br office.org 2.0  writeConhecendo o br office.org 2.0  write
Conhecendo o br office.org 2.0 write
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Uml
UmlUml
Uml
 
Nvu
NvuNvu
Nvu
 
Vim
VimVim
Vim
 
Squid guard
Squid guardSquid guard
Squid guard
 
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...
Monografia - Engenharia de software baseada em modelos um estudo sobre WebML ...
 

Ähnlich wie Algoritmo material apoio

Exercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalExercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalMarcos Pessoa
 
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002Java Básico-apostila - Universidade Regional de Blumenau - fev/2002
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002Marcelo Negreiros
 
Planejamento_e_Controle_de_Obras_Residen.pdf
Planejamento_e_Controle_de_Obras_Residen.pdfPlanejamento_e_Controle_de_Obras_Residen.pdf
Planejamento_e_Controle_de_Obras_Residen.pdfJenilsonPires1
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216Valter Inacio Jr.
 
Apostila linux educacional karen lowhany
Apostila linux educacional   karen lowhanyApostila linux educacional   karen lowhany
Apostila linux educacional karen lowhanyKaren Costa
 
Quanta
QuantaQuanta
QuantaTiago
 
Postfix
PostfixPostfix
PostfixTiago
 
Apostila vba excel
Apostila vba excelApostila vba excel
Apostila vba excelAndré Silva
 
Java basico
Java basicoJava basico
Java basicoTiago
 
Cópia de apostila nova curso idosos
Cópia de apostila nova curso idososCópia de apostila nova curso idosos
Cópia de apostila nova curso idososPaulo Rosa
 
Jspservlets
JspservletsJspservlets
JspservletsTiago
 
Aprenda a fazer temas wordpress
Aprenda a fazer temas wordpressAprenda a fazer temas wordpress
Aprenda a fazer temas wordpressRafael Stromdahl
 
Dissertação EDIÇÃO DE LVROS.pdf
Dissertação EDIÇÃO DE LVROS.pdfDissertação EDIÇÃO DE LVROS.pdf
Dissertação EDIÇÃO DE LVROS.pdfRuibeato1
 

Ähnlich wie Algoritmo material apoio (20)

Exercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalExercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacional
 
Introdução a estrutura de dados
Introdução a estrutura de dadosIntrodução a estrutura de dados
Introdução a estrutura de dados
 
Estrutura de dados 3
Estrutura de dados 3Estrutura de dados 3
Estrutura de dados 3
 
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002Java Básico-apostila - Universidade Regional de Blumenau - fev/2002
Java Básico-apostila - Universidade Regional de Blumenau - fev/2002
 
Planejamento_e_Controle_de_Obras_Residen.pdf
Planejamento_e_Controle_de_Obras_Residen.pdfPlanejamento_e_Controle_de_Obras_Residen.pdf
Planejamento_e_Controle_de_Obras_Residen.pdf
 
Programacao em java
Programacao em javaProgramacao em java
Programacao em java
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216
 
Apostila linux educacional karen lowhany
Apostila linux educacional   karen lowhanyApostila linux educacional   karen lowhany
Apostila linux educacional karen lowhany
 
Quanta
QuantaQuanta
Quanta
 
Postfix
PostfixPostfix
Postfix
 
Apostila vba excel
Apostila vba excelApostila vba excel
Apostila vba excel
 
Apostila vba excel
Apostila vba excelApostila vba excel
Apostila vba excel
 
Java basico
Java basicoJava basico
Java basico
 
Relatório de estágio
Relatório de estágioRelatório de estágio
Relatório de estágio
 
Cópia de apostila nova curso idosos
Cópia de apostila nova curso idososCópia de apostila nova curso idosos
Cópia de apostila nova curso idosos
 
Jdbc
JdbcJdbc
Jdbc
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Zope
ZopeZope
Zope
 
Aprenda a fazer temas wordpress
Aprenda a fazer temas wordpressAprenda a fazer temas wordpress
Aprenda a fazer temas wordpress
 
Dissertação EDIÇÃO DE LVROS.pdf
Dissertação EDIÇÃO DE LVROS.pdfDissertação EDIÇÃO DE LVROS.pdf
Dissertação EDIÇÃO DE LVROS.pdf
 

Kürzlich hochgeladen

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasSocorro Machado
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...Ilda Bicacro
 
Antero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaAntero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaPaula Duarte
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptxProjeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptxIlda Bicacro
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffNarlaAquino
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
praticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiopraticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiorosenilrucks
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 

Kürzlich hochgeladen (20)

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
 
Antero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaAntero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escrita
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptxProjeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
praticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiopraticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médio
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 

Algoritmo material apoio

  • 1. Disciplina: Algoritmo e Programação Professor: Esp. Fábio Marques Breves - PA Fevereiro/2012
  • 2. 1 Conteúdo Plano de Ensino .............................................................................................................................. 1 Apresentação .................................................................................................................................. 2 Unidade 1: Introdução a algoritmos e programas............................................................................. 3 1.1 Introdução............................................................................................................................. 3 1.2 Formas de representação........................................................................................................ 3 1.2.1 Fluxograma .................................................................................................................... 3 1.2.2 Diagrama de bloco (ou diagrama de fluxo): .................................................................... 4 1.2.3 Algoritmo ....................................................................................................................... 4 1.2.4 UML: Unified Model Language (Linguagem de modelagem unificada).......................... 5 1.2.5 Português estruturado ..................................................................................................... 6 Unidade 2: Elementos básicos variáveis e constantes. ..................................................................... 7 2.1 Tipos de dados....................................................................................................................... 7 2.1.1 Dados numéricos ............................................................................................................ 7 2.1.2 Tipo caractere................................................................................................................. 8 2.1.2 Tipo lógico ..................................................................................................................... 8 2.2 Variáveis................................................................................................................................ 8 2.3 Constantes............................................................................................................................. 9 Unidade 3: Operadores e Expressões............................................................................................. 10 3.1 Operação de atribuição ........................................................................................................ 10 3.2 Operadores aritméticos........................................................................................................ 10 3.3 Expressões aritméticas......................................................................................................... 10 Unidade 4: Entrada e Saída de Dados............................................................................................ 12 Unidade 5: Comandos de Controle................................................................................................ 15 5.1 Desvio condicional simples ................................................................................................. 15 5.2 Operadores relacionais ........................................................................................................ 15 5.3 Desvio condicional composto.............................................................................................. 15 5.4 Desvios condicionais encadeados ........................................................................................ 16 5.5 Operadores lógicos.............................................................................................................. 18 Unidade 6: Estruturas de repetição ................................................................................................ 19 6.1 Repetição do tipo: Teste lógico no inicio do looping............................................................ 20 6.2 Repetição do tipo: Teste lógico no fim do looping ............................................................... 20 6.3 Repetição do tipo: variável de controle................................................................................ 21 6.4 Estruturas de controle encadeadas........................................................................................ 22 6.4.1 Encadeamento de estruturas de repetição enquanto com enquanto................................. 22 6.4.2 Encadeamento de estruturas de repetição enquanto com repita...................................... 23 6.4.3 Encadeamento de estruturas de repetição enquanto com para........................................ 23 6.4.4 Encadeamento de estruturas de repetição repita com repita ........................................... 23 6.4.5 Encadeamento de estruturas de repetição repita com enquanto...................................... 23 6.4.6 Encadeamento de estruturas de repetição repita com para ............................................. 23 6.4.7 Encadeamento de estruturas de repetição para com para................................................ 24 6.4.8 Encadeamento de estruturas de repetição para com enquanto........................................ 24 6.4.9 Encadeamento de estruturas de repetição para com repita ............................................. 24 Unidade 7: Tipos Estruturados de Dados....................................................................................... 25 7.1 Vetores unidimensionais ...................................................................................................... 25 7.2 Vetores bidimensionais........................................................................................................ 26 7.3 Vetores multidimensionais................................................................................................... 27 Unidade 8: Apresentação da linguagem de programação C............................................................ 28 8.2 Nosso primeiro programa .................................................................................................... 28 8.2 Entrada e Saída de Dados .................................................................................................... 30
  • 3. 8.3: Comandos de Controle ....................................................................................................... 31 8.3.1 Desvio condicional simples........................................................................................... 32 8.3.2 Desvio condicional composto ....................................................................................... 32 8.3.4 Desvios condicionais encadeados.................................................................................. 33 8.4 Estruturas de repetição......................................................................................................... 34 8.4.1 Repetição do tipo: Teste lógico no inicio do looping ..................................................... 34 8.4.2 Repetição do tipo: Teste lógico no fim do looping......................................................... 34 8.4.3 Repetição do tipo: variável de controle ......................................................................... 34 8.5 Tipos Estruturados de Dados ............................................................................................... 35 Referência Bibliográficas.............................................................................................................. 36
  • 4. 1 Plano de Ensino Identificação Geral Instituição: IFPa – Instituto Federal de Educação, Ciência e Tecnologia do Pará Curso: Licenciatura em Computação Disciplina: Algoritmos e Programação Professor: Esp. Fábio Marques Hora Aula Presencial: 64h Hora Aula Auto-estudo: 16h Total de Hora Aula: 80h Ementa Introdução a algoritmos e programas: Conceitualização das formas de representação; Elementos básicos variáveis e constantes. Operadores e Expressões: Operação de atribuição; Operadores e expressões relacionais e lógicas. Entrada e saída de dados por teclado e vídeo. Comandos de Controle: Uso de estruturas de decisão em algoritmos; Uso de estruturas de repetição em algoritmos. tipos Estruturados de Dados: Vetores unidimensionais e multidimensionais; Desenvolvimento de algoritmos. Apresentação de uma Linguagem de Programação (linguagem C). Componentes Básicos de um Programa na Linguagem C. Desenvolvimento e Programação na linguagem C. Modularização. Depuração de programas. Objetivo Apresentar ao aluno a estrutura e a funcionalidade de uma linguagem de programação utilizando formas de representações de problemas com construções de algoritmos e programas. Introduzir componentes básicos de um programa utilizando uma linguagem imperativa (linguagem C) e desenvolver a habilidade de programação utilizando de forma básica, elementos, variáveis, operadores, laços de repetição, expressões e tipos estruturados de dados. Bibliografia básica MANZANO J. A. N. G.; OLIVEIRA J. F. O. Algoritmos: lógica para desenvolvimento de programação de computadores. 14.ed. São Paulo: Érica, 2002. KERNINGHAN, B. W.; RITCHIE, D. C A Linguagem de Programação. Rio de Janeiro: Campus, 2003. ZIVIANI, Nívio. Projeto de Algoritmos: com implementações em Pascal e C. 4.ed. São Paulo: Pioneira. 1999. Bibliografia complementar: SEBESTA, ROBERT W. Conceitos de Linguagem de Programação. Porto Alegre: Bookman. 2003.
  • 5. 2 Apresentação Os algoritmos estão presentes no nosso dia a dia, em todas as nossas mais simples rotinas, as instruções para o uso de medicamentos e uma receita de culinária são alguns exemplos de algoritmos. E é claro, que formam uma importante etapa do desenvolvimento de sistemas, em toda linguagem de programação, independente de paradigma ou classificação da linguagem de programação adotada. O presente curso mostra os principais recursos disponíveis na grande maioria das linguagens de programação existentes, tais como variáveis, constantes, operadores, laços e estrutura de decisão. São utilizados pseudocódigos para facilitar o entendimento dos conceitos e elaboração de exemplos, alguns exemplos ora apresentados em pseudocódigos serão recodificados utilizando a linguagem C.
  • 6. 3 Unidade 1: Introdução a algoritmose programas 1.1 Introdução Os algoritmos estão presentes no nosso dia a dia, e pode ser visto como uma sequencia bem definida de ações a serem seguidas para se alcançar um determinado objetivo, ou para se alcançar a resolução de um conjunto de problemas de um determinado tipo. Segundo Dijkstra (1971) um algoritmo corresponde a uma descrição de um padrão de comportamento, expresso em termos de um conjunto finito de ações. Desenvolver um programa é basicamente estruturar dados e construir algoritmos. Os algoritmos construídos pelos programadores precisam possuir uma característica vital: serem seguidos por computadores. No entanto, computadores só são capazes de seguir programas (ou algoritmos) escritos em linguagem de máquina, que são sequencias binárias (zeros e uns) de difícil compreensão. Para facilitar o desenvolvimento de programas, utilizamos linguagens de programação construídas para este fim, normalmente utilizando-se de códigos próximos a linguagem falada. Para alguns programadores mais experientes, criar algoritmos intermediários, antes da codificação em uma linguagem de programação propriamente dita pode parecer perda de tempo, no entanto, a eliminação desta etapa de planejamento pode causar erros e atraso na entrega do produto final, pois a solução do problema não foi pensada de forma detalhada e com maior profundidade. Com a evolução do oficio de desenvolver sistemas, e das técnicas de programação, as formas de representação dos algoritmos e do raciocínio lógico também foram evoluindo e se modificando, conforme será apresentado no próximo item. 1.2 Formasde representação Muitas formas de representação dos algoritmos e do raciocínio lógico foram utilizadas no decorrer da evolução do oficio de se desenvolver sistemas. Independente da técnica ou da forma adotada, o objetivo era sempre obter um produto que estabelecia a sequencia de ações a serem executadas em um programa, sem o detalhamento de instruções ou comandos específicos, permitindo assim, uma posterior codificação em qualquer linguagem de programação. Veremos, a seguir, algumas das formas de representação já utilizadas. 1.2.1 Fluxograma Ferramenta gráfica desenvolvida pelos profissionais da área de análise de sistemas, que utiliza símbolos convencionais (ISO 5807:1985) tais como desenhos geométricos básicos, com a finalidade de descrever o fluxo de ação de um determinado trabalho lógico, manual ou mecânico. A Figura 1 mostra um exemplo de um fluxograma.
  • 7. 4 1.2.2 Diagrama de bloco (ou diagrama de fluxo): Ferramenta gráfica desenvolvida pelos profissionais envolvidos diretamente com a programação, utiliza-se de diversos símbolos geométricos (ISO 5807:1985), podendo ser elaborado em diversos níveis de detalhamento. Tem por objetivo a descrição do método e sequencia de processo num computador, podendo, logo após a elaboração deste diagrama, ser realizada a codificação do programa. Na Figura 2 podemos ver um diagrama de bloco, perceba que para utilização destes diagramas, faz-se necessário o conhecimento prévio de cada um dos símbolos utilizados. 1.2.3 Algoritmo São um conjunto de regras formais para a obtenção de um resultado ou para a solução de um conjunto de problemas, que se utiliza de fórmulas e expressões aritméticas para alcançar seu objetivo e é utilizado sempre que é exigido um resultado final “correto” e/ou “coerente”. Na área de desenvolvimento de sistemas, o termo algoritmo foi, muitas vezes, relacionado a diagrama de blocos, neste caso, um algoritmo gráfico. Podemos visualizar na Figura 3 um algoritmo para cálculo da situação de um estudante, mediante análise das notas obtidas pelo mesmo. Figura 1: Exemplo de fluxograma Figura 2: Exemplo de diagrama de bloco
  • 8. 5 1.2.4 UML:Unified Model Language (Linguagem de modelagem unificada). A UML é uma linguagem de modelagem não proprietária que está se tornando um padrão da indústria, sendo criada como uma forma de padronização para as diversas técnicas de representação de algoritmos e outros artefatos do desenvolvimento de sistemas. É composta por 16 diagramas, formados por um conjunto de regras e símbolos, cada um com a finalidade de documentar uma faze específica do desenvolvimento de sistemas. Na figura X, temos o diagrama de sequencia, responsável pela representação das trocas de mensagens e fluxo de dados entre as entidades do sistema. Neste caso, as trocas de mensagens necessárias entre o cliente e o servidor de e-mails. Figura 3: Algoritmo representado em diagrama de blocos
  • 9. 6 1.2.5 Portuguêsestruturado É uma técnica de algoritmização que se utiliza de narrativa em idioma corrente, denominada pseudocódigo, também conhecida por portugol. A forma original faz uso do idioma inglês, conhecido como inglês estruturado, muito próximo da notação utilizada na linguagem de programação PASCAL. Tem por vantagem ser genérica, e independente da linguagem de implementação do algoritmo. Algoritmos escritos em português estruturado podem ser facilmente utilizados para a elaboração de código em linguagem computacional (C, PASCAL, Delphi ou Java). A seguir, vemos um algoritmo escrito em português estruturado que calcula a área de um triângulo. algoritmo “AreaTriangulo” var b, h, a: REAL inicio Escreva(“Entre com o valor da base: ”) Leia (b) Escreva(“Entre com o valor da altura: ”) Leia (h) a  (b * h) / 2 Escreva(“A área desse triângulo é: ”, a) fimalgoritmo Figura 4: Exemplo de diagrama de sequencia
  • 10. 7 Unidade 2: Elementosbásicosvariáveise constantes. Para se construir algoritmos usando pseudocódigo é necessário se conheça conceitos básicos sobre dados e tipos de dados, independente da linguagem de programação. A partir desta unidade veremos a parte mais prática do desenvolvimento de algoritmos, culminando com a codificação de alguns códigos em C. Como vimos anteriormente, um algoritmo é uma sequencia bem definida de ações a serem seguidas para se alcançar um determinado objetivo, utilizaremos computadores como a ferramenta para executar esses algoritmos. Podemos dizer, a grosso modo, que a solução de problemas envolvem a manipulação de dados e instruções para a manipulação. 2.1 Tiposde dados Os dados representam as informações que serão manipuladas nos algoritmos elaborados e submetidos a um computador. Podemos dividir os dados em três tipos básicos, de acordo com a essência dos mesmos. São exemplo de dados manipuladas por algoritmos computacionais: As vendas de uma loja de departamentos; Nomes e endereços de um cadastro de clientes; Notas dos alunos de um curso; Medidas de uma experiência; Como podemos observar nos exemplos acima, os dados podem ter várias representações e são manuseados de formas diferentes no computador. Para trabalhar com esta variedade de tipos de dados é necessário conhecer bem o problema a ser resolvido, para que seja escolhido o tipo de dado certo. 2.1.1 Dadosnuméricos Os dados numéricos podem ser representados de duas maneiras distintas: inteiros ou reais, e são aqueles passíveis das operações aritméticas. 2.1.1.1 Tiponuméricointeiro São dados do tipo numérico, quer sejam negativos, positivos ou nulo, correspondendo aos números inteiros da aritmética. Também são conhecidos como números de ponto fixo, embora não apresentem pontos (ou vírgulas) em sua representação. São exemplos de números inteiros: 1508 602 0 -10 -56
  • 11. 8 2.1.1.2 Tiponuméricoreal São dados do tipo numérico, quer sejam negativos, positivos ou nulo, inclusos os números fracionários, e são utilizados por algoritmos que necessitam de um maior domínio (valor) que o oferecido pelos números inteiros. Os números reais sempre apresentam o ponto (vírgula) decimal, sendo também utilizados para representar as frações. Por limitações técnicas, a representação gráfica de frações é diferente da representação matemática, assim a representação gráfica da fração é representada da seguinte forma: 1/2. Numericamente, a fração equivale a 0.5, pois não há mecanismos para guardar numeradores e numeradores, logo, apenas o valor numérico equivalente será guardado. São exemplos de números reais: -21.04 1.44 100.8 0.0 0.5 2.1.2 Tipo caractere São dados não numéricos (aqueles não passíveis das operações aritméticas), tais como os caracteres alfabéticos, dígitos numéricos e caracteres especiais. Este tipo também é conhecido como alfanumérico, string, literal ou cadeia. Uma sequencia de caracteres deve sempre ser delimitada por um apóstrofo ( ‘’ ). Para efeito de programação deve-se notar a sintaxe da linguagem a ser utilizada, pois esses delimitadores variam de linguagem para linguagem de programação. São exemplos de cadeias de caracteres: ‘Pará’ ‘3233-3331’ ‘ ’ ‘7’ ‘BELÉM’ 2.1.2 Tipo lógico Caracterizam-se como tipo lógico os dados com valor VERDADEIRO ou FALSO, este tipo de dado pode assumir apenas um valor a cada momento. É também conhecido como tipo boleano, devido aos estudos sobre lógica matemática do filósofo inglês George Boole. A representação deste tipo de dado, quando estamos usando uma linguagem de programação, varia de linguagem para linguagem. 2.2 Variáveis O termo variável dá-se ao fato de que, em problemas computacionalmente trabalhados, o volume de informações serem extremamente grande e diversificado, ou seja, variáveis. Para que possamos armazenar algum dado na memória do computador, possibilitando assim que o mesmo seja utilizado e manipulado posteriormente, faz-se necessária a identificação do tipo do dado, ou seja, o dado precisa ser classificado segundo sua essência. O conceito de variáveis é muito familiar na matemática, e em um programa de computador ela é conhecida como uma entidade que possui um valor. Como na matemática, em informática, as variáveis têm nome e recebem valores e para identificarmos identificá-la melhor. Imagine a memória de um computador como um grande arquivo com várias gavetas,
  • 12. 9 conforme é visualizado na Figura 5, sendo que em cada gaveta é possível guardar apenas um único valor por vez, e essas gavetas, como em um arquivo, deverão estar identificadas com uma “etiqueta” contendo um nome. Este nome, será utilizado posteriormente para utilização da variável, sendo assim, deve ser único e seguir as seguintes regras:  Nomes de variáveis podem possuir um ou mais caracteres, sendo que o primeiro caractere deve ser sempre uma letra;  O nome de uma variável não poderá possuir espaços em branco, caso seja necessário deve- se usar um caractere de ligação ( _ ) para representar um espaço;  Não poderá ser usado como nome de variável uma palavra reservada para uso do compilador;  Alguns caracteres especiais não poderão ser utilizados. São exemplos de nomes válidos de variáveis: Totalizacao, LaTA, lado3, B52, Rua_das_Flores, CodProd, CPF São contra exemplos de nomes válidos de variáveis: Totalização, 3Quarteiroes, Rua das Flores, X+Y Além de seguirmos estas regras devemos prestar atenção, ainda, para o tipo de dado que uma variável deve receber. Este tipo dever ser previamente identificado para podermos armazenar o valor correto. 2.3 Constantes Por definição, constante é tudo aquilo que não se altera, que é fixo, que é estável, em programação existem diversos momentos onde este conceito pode ser aplicado, como por exemplo: no cálculo da área de uma circunferência. 2 rA   . Onde A é a variável responsável por armazenar a área, r é a variável que guardará o comprimento do raio da circunferência, que deve ser fornecido pelo usuário, e π é a constante matemática (aproximadamente 3.1415). A definição do nome da constante segue exatamente as mesmas regras que apresentamos para definição do nome de uma variável. Figura 5: Abstração gráfica da memória de um computador em nível de variável de programação.
  • 13. 10 Unidade 3: Operadorese Expressões Variáveis e constantes, desde que definidas como tipos numéricos, poderão ser utilizadas para a elaboração de cálculos matemáticos, através da elaboração de expressões aritméticas, fazendo uso dos operadores aritméticos. O resultado da avaliação de uma expressão é o valor que será atribuído à variável indicada. Vale lembrarmos que o tipo da variável indicada também deve ser cuidadosamente analisado. 3.1 Operação de atribuição Esta operação especifica que um determinado valor está sendo atribuído (guardado) em uma determinada variável, e é representada pelo símbolo de seta (  ). Logo A  3 (leia-se: variável “A” recebe três), indica que a variável A está recebendo para armazenamento o valor numérico inteiro três. A operação de atribuição de valores é destrutiva, isto é, ao atribuir-se um novo valor a variável, o valor anterior é perdido. 3.2 Operadoresaritméticos Os operadores aritméticos são classificados como binários ou unários. São classificados como binários quando envolvem dois operandos, como é o caso da multiplicação, exponenciação, divisão, adição e subtração, e são classificados como unários quando envolvem apenas um operando, como é o caso da inversão de sinais (positivo e negativo). A seguir, veremos a tabela de operadores aritméticos, bem como a ordem de prioridade dos mesmos, além do tipo e retorno de cada um deles: OPERADOR OPERAÇÃO TIPO PRIORIDADE RESULTADO + Manutenção de sinal Unário 1 Positivo - Inversão de sinal Unário 1 Negativo  Exponenciação Binário 2 Inteiro ou real * Multiplicação Binário 3 Inteiro ou real / Divisão Binário 3 Real div Resto da divisão Binário 4 Inteiro + Adição Binário 4 Inteiro ou real - Subtração Binário 4 Inteiro ou real 3.3 Expressõesaritméticas Dado ao fato que grande parte do trabalho computacional utilizar-se de cálculos matemáticos, o estudo e a utilização de expressões aritméticas (e fórmulas matemáticas) serão bastante comuns no desenvolvimento de programas. As expressões são basicamente o relacionamento entre variáveis e constantes através da utilização dos operadores aritméticos. Iremos considerar novamente, a fórmula para o cálculo da área de uma circunferência. 2 rA   , onde A representa a área da circunferência, r representa o comprimento do raio da
  • 14. 11 circunferência e onde π representa a constante matemática (aproximadamente 3.1415). A equação matemática representada na forma computacional ficaria da seguinte forma: A 3.1415 * r  2 Para a representação de expressões aritméticas em programas precisaremos nos ater a algumas diferenças existentes entre as formas matemática e computacional. A primeira característica é a inexistência de colchetes ou chaves na forma computacional, devendo ser substituídos por parênteses, que serão resolvidos dos mais internos para os mais externos da expressão. A expressão matemática )]}230(:55[43{ x será representada computacionalmente como x  (43 * (55 / (30 + 2))). Outra mudança percebida é a substituição do sinal de igualdade (=) pelo sinal de atribuição (), que indica que o valor resultante da expressão aritmética será atribuído a variável em questão (x).
  • 15. 12 Unidade 4: Entrada e Saída de Dados Um programa executável em um computador usualmente possui três itens básicos de trabalho: a entrada de dados, o seu processamento e a saída do resultado, logo, trabalharemos todas as soluções computacionais através da elaboração de programas com estes três itens. Uma consequencia disto é que se os dados forem entrados de forma errada, ou se estiverem sendo processados de forma equivocada, a resposta será um resultado errado. Agora já sabemos que qualquer erro antes atribuído a um computador, na realidade fora causado por um erro humano, quer seja voluntario ou involuntário. Quando recebemos uma cobrança indevida, ou detectamos um erro no nosso saldo bancário, podemos afirmar que se trata de um erro humano. A Figura 6 ilustra os três pontos básicos do trabalho de resolver problemas de forma computacional e suas relações. Em um programa real, a entrada e saída de dados poderão ocorrer de diferentes formas. Uma entrada de dados pode ser realizada, por exemplo, de tais formas: via teclado, via modem, através de um leitor ótico, dentre outras. Enquanto as saídas de dados podem ser realizadas, por exemplo, das seguintes formas: em vídeo, em impressora, em um arquivo em disco e etc. Devido à grande variedade de dispositivos de entrada e saída existentes, e devido à complexidade de manipulação destes nas diversas linguagens de programação, iremos nos ater em utilizar os comandos Leia, Escreva e Escreval, para representar a entrada e a saída de dados respectivamente, abstraindo a interface dos dispositivos existentes. Por motivos didáticos, adotaremos que toda entrada será realizada através do teclado, e toda saída realizada através do monitor. A diferença entre os comandos Escreva e Escreval está apenas no fato do segundo pular uma linha após escrever a lista de dados. Em Português estruturado: Leia (<lista de dados>) Escreva (<lista de dados>) Escreval (<lista de dados>) Como exemplo de um problema resolvível computacionalmente por um programa, podemos ter: “Deverá ser criado um programa que efetue a leitura de dois valores numéricos. Calcule a média aritmética dos dois valores e apresente o resultado obtido.” Figura 6: Três pontos básicos de um programa
  • 16. 13 Para a resolução de problemas como estes, precisaremos compreender bem o mesmo, e buscarmos uma solução computacional para o mesmo, delimitando os passos a serem seguidos pelo computador para resolução de tal problema de forma genérica. Para tanto, deveremos observar que será realizada a leitura de dois valores que não conhecemos (e que realmente não precisamos conhecer), e para isto, utilizaremos duas variáveis para trabalhar com as incógnitas do problema, v1 e v2. E, para trabalhar com o resultado da média, utilizaremos uma terceira variável, chamada de M. O algoritmo para resolução de tal problema seria muito parecido com o seguinte: 1. Ler dois valores numéricos (variáveis v1 e v2); 2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M. 2 21 vv M   3. Apresentar o valor da variável M após a realização do cálculo. O algoritmo acima representa apenas uma das soluções corretas para o problema acima, podendo ser feito de diversas formas, haja vista que se trata da interpretação do referido problema. Tendo estabelecido os passos para resolução do problema de forma genérica, podemos iniciar a resolução do mesmo através da codificação, para tanto, utilizaremos a técnica da utilização do português estruturado. Todo algoritmo escrito em português estruturado deverá seguir uma estrutura rígida, conforme apresentada a seguir: Primeiro devemos definir o nome do algoritmo, que deve ser algo sugestivo, para que possamos nos lembrar do se trata o algoritmo apenas pela análise do nome, sem ter que analisar o algoritmo na integra. algoritmo “MediaAritmetica” Após a definição do nome do algoritmo, temos uma área destinada à declaração (identificação) de todas as variáveis que serão necessárias para a execução do algoritmo e obtenção do respectivo resultado. Esta área inicia-se com a palavra var, conforme abaixo: var v1, v2, M: REAL Percebe-se que as variáveis foram agrupadas, pois todas pertencem ao mesmo tipo de dado, o tipo Real. A sintaxe para declaração de variáveis é a seguinte: <lista de variáveis>: <tipo de dado> A partir de agora, podemos utilizar as variáveis, dando prosseguimento à resolução do problema. Para delimitar a área de execução das instruções que irão realizar o passo a passo utilizaremos o par inicio/fim. Note que o bloco de instruções de programa (bloco compreendido pelo par inicio/fim) é apresentado um pouco deslocado para a direita, isto se chama endentação, e facilita a leitura de um bloco do programa, por tanto, trata-se de uma boa prática endentar seus códigos de blocos. No entanto, a endentação não influencia na execução das instruções.
  • 17. 14 Para a realização da leitura do valor de uma variável utilizaremos o comando Leia indicando como argumento para o mesmo a variável desejada. Para fins informativos, e para instrução do operador do sistema, serão exibidas mensagens indicando o que o operador deve fazer, a exibição de mensagens será realizada pelo comando Escreva recebendo como argumento a mensagem a ser exibida, conforme a seguir: Escreva(“Entre com o primeiro valor: ”) Leia(v1) A seguir, realizaremos a conversão da equação 2 21 vv M   do modelo matemático para o computacional, e a atribuição do resultado a variável M: M  (v1 + v2) / 2 Só nos resta agora, exibir o resultado da expressão aritmética atribuído a variável M conforme a seguir: Escreva(“A média dos valores é: ”, M) Perceba que utilizamos o comando Escreva com dois argumentos, uma mensagem e a variável M, desta forma serão exibidos a mensagem e o valor de M respectivamente. O algoritmo completo pode ser visualizado a seguir: algoritmo “MediaAritmetica” var v1, v2, M: REAL inicio Escreva(“Entre com o primeiro valor: ”) Leia(v1) Escreva(“Entre com o segundo valor: ”) Leia(v2) M  (v1 + v2) / 2 Escreva(“A média aritmética dos valores é: ”, M) fimalgoritmo Em linhas gerais, basta que a estratégia acima adotada seja seguida sempre que se necessita escrever um algoritmo para a resolução de um problema genérico, por tanto, vamos rever a estratégia para uma melhor fixação: 1. Compreender bem o problema; 2. Buscarmos uma solução computacional para o mesmo, delimitando os passos a serem seguidos. 3. Elaborar a resolução do mesmo através da codificação em português estruturado Adicionalmente, poderíamos realizar testes sobre o nosso algoritmo: uma forma seria a reescrita do mesmo uma linguagem de programação, para que o compilador possa convertê-lo em linguagem de máquina, ou ainda a utilização de uma ferramenta que interprete o nosso português estruturado (pseudocódigo) e o execute. Uma ferramenta que realiza a interpretação de nossos pseudocódigos escritos em português estruturado é o Visualg (Visualizador de Algoritmos) como se nossos algoritmos fossem programas de computador (APOIO INFORMÁTICA, 2012).
  • 18. 15 Unidade 5: Comandosde Controle Com as informações apresentadas até agora, já conseguimos solucionar alguns problemas, como por exemplo: calcula a média das notas de um aluno. No entanto, ainda temos algumas limitações, como por exemplo, tratar a média deste aluno para realizarmos um processamento mais adequado, como a exibição de uma mensagem informando se o aluno foi ou não aprovado. Observe que a média do aluno terá de ser verificada de acordo com um parâmetro e então terá de ser tomada uma decisão: qual mensagem imprimir. 5.1 Desvio condicional simples Para a resolução do problema da mensagem de aprovação do aluno, será necessário conhecermos uma nova instrução: se...então...fimse. Esta instrução desvia a execução do algoritmo para uma determinada área de acordo com a condição, caso a condição seja VERDADEIRA, serão executados todos os comandos entre o se...então, e caso a condição seja FALSA serão executados todos os comandos após o fimse. se <condição> entao <sequencia de comandos> fimse 5.2 Operadoresrelacionais Para a utilização da instrução se...entao...fimse precisaremos conhecer os operadores relacionais para que possamos verificar o estado de uma variável enquanto VERDADEIRO ou FALSO. Esta verificação é efetuada com a utilização dos operadores relacionais, conforme tabela a seguir: SÍMBOLO SIGNIFICADO = Igual a <> Diferente de > Maior que < Menor que >= Maior ou igual que <= Menor ou igual que 5.3 Desvio condicional composto Para a realização de desvios condicionais compostos, faremos uso da instrução se...então...senao...fimse, onde sendo a condição VERDADEIRA, serão executadas todas as instruções que estiverem localizadas entre o se...entao e a instrução senao, enquanto que se a condição for FALSA, serão executadas todas as instruções que estiverem localizadas entre o senao e a instrução fimse. se <condição> entao <sequencia de comandos para condição VERDADEIRA> senao <sequencia de comandos para condição FALSA> fimse
  • 19. 16 Com o conhecimento prévio das estruturas de decisão simples e composta, podemos retomar a solução do problema da média: “Deverá ser criado um programa que efetue a leitura das duas notas obtidas por um aluno. Calcule a média aritmética dos dois valores e apresente a mensagem APROVADO caso a média seja maior ou igual a 7 ou REPROVADO, caso contrário.” 1. Ler dois valores numéricos (variáveis n1 e n2); 2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M. 2 21 nn M   3. Se o valor da variável M for maior que 7 apresentar a mensagem APROVADO ou REPROVADO caso contrário. Algoritmo em português estruturado: algoritmo “SituacaoAluno” var n1, n2, M: REAL inicio Escreva(“Entre com a primeira nota: ”) Leia(n1) Escreva(“Entre com a segunda nota: ”) Leia(n2) M  (n1 + n2) / 2 Se (M >= 7) entao Escreva(“APROVADO”) Senao Escreva(“REPROVADO”) Fimse fimalgoritmo 5.4 Desvioscondicionaisencadeados Em alguns problemas, será necessário combinar condições sucessivas para garantir que uma ação somente seja executada se o conjunto de condições seja satisfeito. Para o conjunto de instruções, ainda pode ser definido um novo conjunto de condições para serem testadas. Para este tipo de estrutura de desvios condicionais, com diversos níveis de condição chamamos de aninhamento ou encadeamento. se <condição> entao < comandos para condição1 VERDADEIRA> senao se <condição2> entao <comandos para condição1 e condição2 VERDADEIRAS> senao <comandos para condição1 VERDADEIRA e condição2 FALSA> fimse fimse O encadeamento foi realizado apenas na condição1 sendo FALSA, no entanto, o mesmo poderá ser aplicado caso a condição1 fosse VERDADEIRA, ou até mesmo nos dois casos.
  • 20. 17 Com o conhecimento de desvios condicionais encadeados, podemos resolver o seguinte problema: “Deverá ser criado um programa que efetue a leitura das duas notas obtidas por um aluno. Calcule a média aritmética dos dois valores e apresente a mensagem APROVADO caso a média seja maior ou igual a 7 ou RECUPERACAO caso a média seja maior que 5 ou ainda REPROVADO, caso contrário.” 1. Ler dois valores numéricos (variáveis n1 e n2); 2. Efetuar o cálculo da média aritmética dos valores obtidos e guardar o resultado em M. 2 21 nn M   3. Se o valor da variável M for maior que 7 apresentar a mensagem APROVADO ou RECUPERACAO caso a média seja maior que 5 ou REPROVADO caso contrário. Algoritmo em português estruturado: algoritmo “SituacaoAluno2” var n1, n2, M: REAL inicio Escreva(“Entre com a primeira nota: ”) Leia(n1) Escreva(“Entre com a segunda nota: ”) Leia(n2) M  (n1 + n2) / 2 Se (M >= 7) entao Escreva(“APROVADO”) Senao Se (M >= 5) entao Escreva(“RECUPERAÇÃO”) Senao Escreva(“REPROVADO”) Fimse Fimse fimalgoritmo
  • 21. 18 5.5 Operadoreslógicos Os operadores lógicos, assim como os operadores aritméticos, realizam a operação entre operandos, neste caso, operandos lógicos. Também se classificam em unários e binários, de forma análoga aos operadores aritméticos. A seguir, veremos a tabela de operadores lógicos, bastante reduzida, se compararmos a tabela de operadores aritméticos. OPERADOR OPERAÇÃO TIPO RESULTADO AND E Binário VERDADE se ambas as variáveis de entrada forem VERDADE. OR OU Binário VERDADE se pelo menos uma das variáveis de entrada forem VERDADE. XOR OU EXCLUSIVO Binário VERDADE se e somente se exatamente uma das variáveis de entrada for VERDADE. NOT NÃO Unário Negação da variável atual. A seguir, veremos as tabelas-verdade (resultados) dos operadores acima relacionados. Tabela verdade para o operador lógico AND. OPERANDO 1 OPERANDO 2 OP1 AND OP2 VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO FALSO VERDADEIRO FALSO FALSO FALSO FALSO Tabela verdade para o operador lógico OR. OPERANDO 1 OPERANDO 2 OP1 OR OP2 VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO VERDADEIRO FALSO FALSO FALSO Tabela verdade para o operador lógico XOR. OPERANDO 1 OPERANDO 2 OP1 XOR OP2 VERDADEIRO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO VERDADEIRO FALSO FALSO FALSO Tabela verdade para o operador lógico NOT. OPERANDO NOT OP VERDADEIRO FALSO FALSO VERDADEIRO
  • 22. 19 Unidade 6: Estruturasde repetição Em alguns problemas faz-se necessária a repetição de um determinado trecho de instruções por um determinado número de vezes. Nesses casos, realiza-se um looping que efetue a repetição do determinado trecho pelo determinado número de vezes. Os loopings também são conhecidos como laços de repetição ou malhas de repetição. Com os conhecimentos adquiridos até o momento, teríamos de repetir o trecho de código quantas vezes fossem necessárias, por exemplo, no seguinte problema: “Deverá ser criado um programa que efetue a leitura de três valores numéricos. Calcule o triplo de cada um deles e apresente o valor obtido respectivamente.” 1. Ler um valor numérico (variável valor); 2. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo 3. Apresentar o valor da variável triplo. 4. Ler um valor numérico (variável valor); 5. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo 6. Apresentar o valor da variável triplo. 7. Ler um valor numérico (variável valor); 8. Efetuar o cálculo do triplo do valor e guardar o resultado em triplo. 3 valortriplo 9. Apresentar o valor da variável triplo. Algoritmo em português estruturado: algoritmo “ValorTripo1” var valor, triplo: REAL inicio // primeira vez Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, triplo) // segunda vez Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, triplo) // terceira vez Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, triplo) fimalgoritmo Para a resolução deste tipo de problema, existem instruções mais apropriadas que determinam um número variado de repetições, gerando códigos mais elegantes e menores.
  • 23. 20 6.1 Repetição do tipo: Teste lógico no inicio do looping Tem como principal característica a realização de um teste lógico no início do looping, verificando se o trecho de instruções subordinadas ao looping poderá ou não ser executada. Esta estrutura de repetição é a enquanto...faça...fimenquanto. enquanto <condição> faça <sequencia de instruções> fimenquanto Reescrita do algoritmo ValorTripo em português estruturado com o uso do enquanto...faça...fimenquanto: algoritmo “ValorTripo2” var i: INTEIRO valor, triplo: REAL inicio i  1 Enquanto i <= 3 faca Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, valor) i  i + 1 Fimenquanto fimalgoritmo Para a resolução deste problema, com o uso da estrutura de repetição enquanto...faça...fimenquanto, precisamos criar uma variável para controlar as iterações (repetições), esta variável foi chamada de i e é do tipo INTEIRO. Esta variável recebe o valor 1 antes do início do looping, e é incrementada ao final de cada looping, para que possa ser testada no início da próxima iteração. 6.2 Repetição do tipo: Teste lógico no fim do looping Esta estrutura assemelha-se a anterior, diferindo apenas no fato de que o teste será realizado apenas no final do looping, sendo assim, podemos dizer que esta estrutura de repetição tem o funcionamento no sentido contrário da anterior. Por consequencia disso, tem-se que o bloco de instruções será executado sempre, pelo menos uma vez. A estrutura de repetição é a repita...ate. repita <sequencia de instruções> ate <condição>
  • 24. 21 Reescrita do algoritmo ValorTripo em português estruturado com o uso do repita...ate: algoritmo “ValorTripo3” var i: INTEIRO valor, triplo: REAL inicio i  1 Repita Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, triplo) i  i + 1 Ate i > 3 fimalgoritmo Para esta solução, utilizando a estrutura de repetições repita...ate também utilizamos uma variável de controle chamada i, no entanto, perceba que a condição demonstrou-se contrária a condição da estrutura enquanto...faça...fimenquanto. 6.3 Repetição do tipo: variável de controle Nas duas estruturas de repetição anteriores, fizemos o uso de uma variável para controlar o número de iterações, no entanto, existem estruturas de repetição que realizam o controle dessa variável de forma controlada pela própria estrutura de repetição. Com a estrutura para...faça poderemos executar loopings com um número finito de iterações, ou seja, nesses casos, não é obrigatório conhecer antecipadamente o número de interações que devem ser executadas. para <variável> de <inicio> ate <fim> [passo <incremento>] faca <sequencia de instruções> fimpara Reescrita do algoritmo ValorTripo em português estruturado com o uso do para...faça: algoritmo “ValorTripo3” var i: INTEIRO valor, triplo: REAL inicio Para i de 1 ate 3 faca Escreva(“Entre com o valor: ”) Leia(valor) triplo  valor * 3 Escreval(“O triplo do valor é: ”, triplo) i  i + 1 Fimpara Fimalgoritmo
  • 25. 22 6.4 Estruturasde controle encadeadas Dependendo do problema a ser resolvido, também é possível o aninhamento, ou encadeamento, de estruturas de controle, assim como nas estruturas de decisão. 6.4.1 Encadeamento de estruturasde repetição enquanto com enquanto Neste caso particular, utilizaremos duas instruções enquanto encadeadas, onde a sequencia de instruções contidas dentro do enquanto mais interno será executada enquanto a condição1 e condição2 forem verdadeiras. Perceba que o laço mais interno é executado a cada iteração do laço mais externo. enquanto <condição1> faca enquanto <condição2> faca <sequencia de instruções> fimenquanto fimenquanto Vamos analisar o algoritmo em português estruturado abaixo. algoritmo “EnquantosEncadeados” var i, j: INTEIRO inicio i  1 j  1 Enquanto i < 3 faca Enquanto j < 5 faca Escreval(“i vale ”, i, “ e j vale ”, j) j  j + 1 Fimenquanto i  i + 1 Fimenquanto Fimalgoritmo Agora, vamos analisar a saída do console: i vale 1 e j vale 1 i vale 1 e j vale 2 i vale 1 e j vale 3 i vale 1 e j vale 4 i vale 2 e j vale 1 i vale 2 e j vale 2 i vale 2 e j vale 3 i vale 2 e j vale 4 *** Fim da execução. Perceba que houve duas iterações de j (laço mais interno), uma para cada iteração de i (laço mais externo.
  • 26. 23 6.4.2 Encadeamento de estruturasde repetição enquanto com repita Neste caso particular, utilizaremos uma instrução enquanto e uma instrução repita. enquanto <condição1> faca repita <sequencia de instruções> ate <condição2> fimenquanto 6.4.3 Encadeamento de estruturasde repetição enquanto com para Neste caso particular, utilizaremos uma instrução enquanto e uma instrução para. enquanto <condição1> faca para <variável> de <inicio> ate <fim> [passo <incremento>] faca <sequencia de instruções> fimpara fimenquanto 6.4.4 Encadeamento de estruturasde repetição repita com repita Neste caso particular, utilizaremos duas instruções repita encadeadas. repita repita <sequencia de instruções> ate <condição2> ate <condição1> 6.4.5 Encadeamento de estruturasde repetição repita com enquanto Neste caso particular, utilizaremos uma instrução repita e uma instrução enquanto. repita enquanto <condição2> faca <sequencia de instruções> fimenquanto ate <condição1> 6.4.6 Encadeamento de estruturasde repetição repita com para Neste caso particular, utilizaremos uma instrução repita e uma instrução para. repita para <variável> de <inicio> ate <fim> [passo <incremento>] faca <sequencia de instruções> fimpara ate <condição1>
  • 27. 24 6.4.7 Encadeamento de estruturasde repetição para com para Neste caso particular, utilizaremos duas instruções para encadeadas. para <variável> de <inicio> ate <fim> [passo <incremento>] faca para <variável> de <inicio> ate <fim> [passo <incremento>] faca <sequencia de instruções> fimpara fimpara 6.4.8 Encadeamento de estruturasde repetição para com enquanto Neste caso particular, utilizaremos uma instrução para e uma instrução enquanto. para <variável> de <inicio> ate <fim> [passo <incremento>] faca enquanto <condição> faca <sequencia de instruções> fimenquanto fimpara 6.4.9 Encadeamento de estruturasde repetição para com repita Neste caso particular, utilizaremos uma instrução para e uma instrução repita. para <variável> de <inicio> ate <fim> [passo <incremento>] faca repita <sequencia de instruções> ate <condição> fimpara
  • 28. 25 Unidade 7: TiposEstruturadosde Dados Até o momento, realizamos o estudo apenas de variáveis do tipo simples, ou seja, aquelas que armazenam apenas um valor por vez. A partir de agora, estaremos estudando uma técnica que nos permitirá manipular um agrupamento de dados homogêneos dentro de uma única variável. Classifica-se como uma estrutura de dados homogêneos, pois os dados armazenados sempre obedecerão ao mesmo tipo de dado definido no momento da declaração da estrutura. Na literatura encontramos diversas nomenclaturas para este tipo estruturado de dados, tais como: variáveis indexadas, variáveis compostas, variáveis subscritas, arranjos, arrays (do inglês), vetores, matrizes e outros. No nosso estudo defini-las-emos como vetores. Vale lembrar que as regras para nomenclatura de tipos estruturados de dados seguem as mesmas regras das variáveis do tipo simples, vistas anteriormente. 7.1 Vetoresunidimensionais Caracteriza-se pela definição de uma única variável dimensionada por uma constante inteira positiva que define o tamanho da mesma. Para entendermos melhor o uso deste tipo de estrutura, vamos imaginar a seguinte situação: suponha que exista uma relação de alunos com o nome de cada estudante e a nota da primeira prova da disciplina Algoritmos e Programação. Deve-se imprimir o nome de cada estudante cuja nota é maior do que a nota média da classe. Utilizando variáveis simples, deveríamos criar uma variável para armazenar o nome de cada estudante (isto é: nome1, nome2, nome3, ..., nomeN: CARACTERE), e uma variável para cada nota de cada aluno (isto é: nota1, nota2, nota3, ..., notaN: REAL). Note que para a existência de um número consideravelmente grande de alunos haverá um número extraordinariamente grande de variáveis. Uma solução mais adequada seria utilizarmos um conjunto para armazenar os nomes e um conjunto para armazenar as notas dos estudantes, neste caso, tanto a variável de nomes quanto de notas, seriam vetores unidimensionais. Caso a relação possua 20 alunos, as variáveis nomes e notas seriam um conjunto com 20 elementos cada. Sendo assim, a variável nome[1] indica o nome do primeiro aluno, sendo chamada de variável indexada. O índice da variável poderá ser substituído por uma variável, sendo utilizado o valor da mesma para descobrir-se a posição no vetor. Utilizando os conhecimentos a respeito de vetores, podemos agora escrever o algoritmo para a solução do problema com cinco alunos 1. Ler o nome e a primeira nota de cada um dos alunos; 2. Efetuar o cálculo da média das notas lidas, guardando o resultado em M. 5  notas M 3. Verificar quais alunos ficaram acima da média e imprimir seus nomes.
  • 29. 26 algoritmo “VetorUnidimensional” var nomes: vetor [1..5] de caractere notas: vetor [1..5] de real i: INTEIRO media: REAL inicio media  0 // Lendo o nome e notas; somando as notas Para i de 1 ate 5 faca Escreva(“Entre com o nome do ”, i, “º aluno: ”) Leia(nomes[i]) Escreva(“Entre com a nota do ”, i, “º aluno: ”) Leia(notas[i]) media  media + notas[i] Fimpara // Calculando a média media  media / 5 // Imprimindo os nomes dos alunos acima da média Escreval (“*** Lista de alunos acima da média”) Para i de 1 ate 5 faca Se notas[i] > media entao Escreval(nomes[i]) Fimse Fimpara Fimalgoritmo 7.2 Vetoresbidimensionais Anteriormente, vimos que os vetores unidimensionais possuíam apenas uma dimensão, no entanto, a partir de agora, conheceremos uma nova opção, que será a de utilizarmos vetores bidimensionais. Devemos lembrar que trata-se de um tipo homogêneo de dados, logo, todos os elementos devem obedecer o tipo declarado. Os vetores bidimensionais são usados para a representação de tipos estruturados de dados na forma de tabelas. O vetor bidimensional também é uma variável do tipo indexada, no entanto, esta possui dois índices: um para especificar as linhas, o primeiro; outro para especificar a coluna, o segundo. A seguir, vemos a representação gráfica de uma tabela de vendas de uma loja de eletrodomésticos, tal estrutura poderá ser armazenada utilizando-se um vetor bidimensional. A célula em destaque, que representa as vendas da quarta semana do “Eletrodoméstico 2” será representada pelo índice [4, 2].
  • 30. 27 Semana Eletrodoméstico 1 Eletrodoméstico 2 Eletrodoméstico 3 Eletrodoméstico 4 1 6 3 9 5 2 5 10 3 2 3 7 8 8 5 4 8 10 12 7 5 4 7 3 3 6 7 15 5 4 7.3 Vetoresmultidimensionais Como visto, podemos ter vetores com uma única dimensão, os monodimensionais, com duas dimensões, os bidimensionais, e agora, veremos que os vetores podem apresentar mais de duas dimensões, sendo classificados como vetores multidimensionais. Suponha que o Museu de Carros Antigos está conduzindo um levantamento dos carros antigos do Estado de São Paulo. Cada carro possui um registro com as seguintes informações: fabricante (um código inteiro de zero a trinta), o ano do carro (de 1900 a 1950) e as condições do carro (1 - ruim, 2 - regular, 3 - boa, 4 - excelente). Para permitir a execução de várias análises nos dados, estes são armazenados num conjunto tridimensional, como o mostrado abaixo: Logo, para o carro em destaque seria indexado pelo código do fabricante [26], pelo ano [1904] e pelo estado de conservação [2] e teria o código 6. Logo, se o vetor chamar-se carros, teríamos um item como: carros[26, 1904, 2] = 6. Condição Fabricante Ano 1900 1950 30 0 4 2 26 1904 6
  • 31. 28 Unidade 8: Apresentação da linguagem de programação C Estaremos apresentando, neste capítulo, aspectos básicos de uma poderosa linguagem de programação, sendo bastante genérica para ser utilizada para a criação de diversos programas, tais como: processadores de texto, sistemas operacionais, programas para solução de diversos problemas da Engenharia, Física e outras ciências. Estaremos apresentando uma estrutura particular do C, padronizada pela ANSI, chamada de ANSI C. Esta unidade visa apresentar apenas os aspectos mais elementares da linguagem, que permita ao aluno desenvolver os algoritmos acima expostos, bem como os exercícios disponibilizados, um curso mais completo da linguagem C, bastante consolidado, que vêm sendo disponibilizado desde 1996, pode ser acessado gratuitamente a partir da página da UFSC (CPDEE/UFMG, 2012). A linguagem de programação C nasceu ainda na década de 70, sendo implementada por Dennis Ritchie, derivada de uma outra linguagem chamada B, criada por Ken Thompson. Originalmente, o C foi implementada em DEC PDP-11 rodando o sistema operacional UNIX. Uma das características primeiramente percebidas pelos iniciantes da programação, é que o C é case-sensitive, e isso significa dizer que as letras maiúsculas são diferentes das letras minúsculas, isso é: “Media” é diferente de “media”, que é diferente de “mEdia”, logo, o nome de variáveis e de instruções tem de ser grafados exatamente como o exposto. Por tratar-se de uma verdadeira linguagem de programação, nossos códigos escritos na linguagem C (muito próximos do inglês) têm de ser traduzidos para a linguagem compreendida pelo computador, ou seja, linguagem binária. A tradução do nosso arquivo em formato texto para um arquivo binário é realizada pelo compilador. Existem diversos compiladores C disponíveis gratuitamente na internet, aconselhamos o compilador Dev-C++ (BLOODSHED, 2012), que possui um ambiente de desenvolvimento para o ambiente Windows, além de estar com este ambiente quase todo traduzido para o Português Brasileiro. 8.2 Nosso primeiro programa Estaremos agora, elaborando o nosso primeiro programa utilizando a linguagem C, trata-se do mais famoso primeiro programa desenvolvido pelos aprendizes de uma linguagem de programação: Hello word! (Olá mundo!). Logo o problema seria descrito da seguinte forma: “Deverá ser criado um programa que apresente a mensagem: Olá Mundo !” O algoritmo para resolução de tal problema seria muito parecido com o seguinte: 1. Apresentar a mensagem “Olá mundo!”. Em português estruturado teríamos o seguinte código: algoritmo “OlaMundo” inicio Escreva(“Olá mundo!”) Fimalgoritmo
  • 32. 29 A tradução para a linguagem C é apresentada abaixo: #include <iostream> int main() { printf(“Olá mundo!n”); system(“PAUSE”); } Observando o código, percebemos o primeiro comando #include < iostream>, este comando, informa ao compilador deve incluir o arquivo-cabeçalho iostream. Este arquivo é responsável declarações de funções úteis para entrada e saída de dados, daí o seu nome: Standard Input/Output (entrada e saída padrão, do inglês). Esse comando, de inclusão do arquivo-cabeçalho stdio.h será utilizado sempre que formos utilizar algum comando de entrada ou saída (Escreva / Leia do português estruturado). Outra característica da linguagem é a obrigatoriedade da criação de uma função chamada main, pois é ela quem será chamada quando o programa for executado, e possui por padrão a seguinte assinatura. int main() { } Entre as chaves deverão ser escritos todos os códigos na linguagem C, seria o equivalente ao par início/fimalgoritimo do português estruturado. A apresentação do texto na tela deve-se a instrução printf que recebe como parâmetro o conteúdo a ser exibido, neste caso “Olá Mundo!”. Já o comando system(“PAUSE”) faz a pausa ao final da execução do programa, do contrário, a janela se fecharia tão rápido que não conseguiríamos ler a mensagem exibida. Uma curiosidade da linguagem é a existência constante de controle ou especiais, chamas constante barra ou constantes barra invertida, que podem ser adicionados as mensagens a serem exibidas para causar um determinado efeito, neste caso, utilizamos os caracteres n (new line) que gera uma quebra de linha, dando um efeito similar ao comando Escreval do português estruturado, logo, após imprimir “Ola Mundo!” o cursor passará para a próxima linha. Os caracteres barra existentes na linguagem C são os seguintes: Caractere Significado Descrição t Tabulação horizontal Move o cursor para a próxima parada de tabulação. r Carriage return Posiciona o cursor no início da linha atual. a Alerta Faz soar a campainha do sistema. 0 Null Caractere que em C termina um conjunto de caracteres. n Nova linha Posiciona o cursor no início da nova linha. Observe também que as instruções escritas em C possuem um ponto-e-vírgula (;) para identificar o término daquela instrução.
  • 33. 30 8.2 Entrada e Saída de Dados Agora que já vimos os primeiros conceitos da linguagem C, podemos nos aventurar em um programa mais completo, contendo uma entrada e saída de dados. Veja o seguinte problema: “Deverá ser criado um programa leia um valor numérico referente a uma quantidade em dias, e imprima a quantidade de anos referentes aos dias.” 1. Ler um valor numérico referente a quantidade de dias (variável dias); 2. Realizar a conversão de dias em anos e guardar na variável anos. 25.365 dias anos  . 3. Apresentar o conteúdo da variável anos após o cálculo. Em português estruturado teríamos: algoritmo “DiasAnos” var dias: INTEIRO anos: REAL inicio Escreva(“Entre com o número de dias: ”) Leia(dias) anos  dias / 365.25 Escreva(dias, “ dia(s) equivalem a ”, anos, “ ano(s).”) Fimalgoritmo Já o mesmo algoritmo escrito em C seria: #include <iostream> int main () { // declaração das variáveis int dias; float anos; // Entrada, processamento e saída de dados printf ("Entre com o número de dias: "); scanf ("%d", &dias); anos = dias / 365.25; printf ("nn%d dias equivalem a %f anos.n", dias, anos); system(“PAUSE”); } Pudemos observar algumas novidades no código acima, como por exemplo, a declaração das variáveis dias e anos, dos tipos int (inteiro) e float (real) respectivamente. Os tipos básicos suportados pelo C são os seguintes:
  • 34. 31 Tipo Significado Descrição char Caractere O valor armazenado é um caractere. Caracteres geralmente são armazenados em códigos (usualmente o código ASCII). int Inteiro Número inteiro é o tipo padrão e o tamanho do conjunto que pode ser representado normalmente depende da máquina em que o programa está rodando, normalmente de -2.147.483.648 a 2.147.483.647 float Real Número em ponto flutuante (real) de precisão simples, com seis dígitos de precisão. double Precisão dupla Número em ponto flutuante (real) de precisão dupla, com dez dígitos de precisão. void Indefinido Este tipo serve para indicar que um resultado não tem um tipo definido. Uma das aplicações deste tipo em C é criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores. Utilizamos também a instrução scanf (equivalente ao Leia do português estruturado), ela recebe como parâmetros, o tipo de dado a ser lido, “%d” neste caso, que representa que será lido um dado inteiro, e o endereço da variável onde será guardada a informação lida (representa-se o endereço de uma variável pelo símbolo de percentual % e o nome da variável). Há também o uso de uma expressão aritmética bem simples e similar aquelas que vínhamos utilizando em nossos pseudo-códigos em português estruturado. A instrução printf (equivalente ao Escreva do português estruturado) também está recebendo dois caracteres barra n (nova linha), e os caracteres %d e %f que exibirão um inteiro e um real respectivamente na tela, no meio do restante do texto. Segue uma lista dos códigos % disponíveis na linguagem C: Código Significado %d Inteiro %f Float %c Caractere %s String %% Coloca um % na tela 8.3: Comandosde Controle Veremos agora as equivalências entre os comandos de controle existentes no português estruturado e na linguagem C.
  • 35. 32 8.3.1 Desvio condicional simples Sintaxe em português estruturado: se <condição> entao <sequencia de comandos> fimse Sintaxe em C: if (<condição>) { <sequencia de comandos> } Código escrito em C: #include <iostream> int main () { int num; printf (“Digite um numero: ”); scanf (“%d”, &num); if (num > 10) { printf (“O número digitado é maior que 10!n”); } system(“PAUSE”); } 8.3.2 Desvio condicional composto Sintaxe em português estruturado: se <condição> entao <sequencia de comandos para condição VERDADEIRA> senao <sequencia de comandos para condição FALSA> fimse Sintaxe em C: if (<condição>) { <sequencia de comandos para condição VERDADEIRA> } else { <sequencia de comandos para condição FALSA> }
  • 36. 33 Código escrito em C: #include <iostream> int main () { int num; printf (“Digite um numero: ”); scanf (“%d”, &num); if (num >= 10) { printf (“O número digitado é maior ou igual a 10!n”); } else { printf (“O número digitado é menor que 10!n”); } system(“PAUSE”); } 8.3.4 Desvioscondicionaisencadeados Sintaxe em português estruturado se <condição1> entao < comandos para condição1 VERDADEIRA> senao se <condição2> entao <comandos para condição1 e condição2 VERDADEIRAS> senao <comandos para condição1 VERDADEIRA e condição2 FALSA> fimse fimse Sintaxe em C: if (<condição1>) { <sequencia de comandos para condição1 VERDADEIRA> } else { if (<condição2>) { <comandos para condição1 e condição2 VERDADEIRAS> } else { <sequencia comandos para condição1 VERDADEIRA e condição2 FALSA> } } Código escrito em C: #include <iostream> int main () { int num; printf (“Digite um numero: ”); scanf (“%d”, &num); if (num >= 10) { printf (“O número digitado é maior ou igual a 10!n”); } else { if (num >= 5) { printf (“O número digitado está entre 5 e 10!n”); } else { printf (“O número digitado está entre 0 e 5!n”); } } system(“PAUSE”); }
  • 37. 34 8.4 Estruturasde repetição Veremos agora as equivalências entre as estruturas de repetição existentes no português estruturado e na linguagem C. 8.4.1 Repetição do tipo: Teste lógico no inicio do looping Sintaxe em português estruturado: enquanto <condição> faça <sequencia de instruções> fimenquanto Sintaxe em C: while (<condição>) { <sequencia de instruções> } 8.4.2 Repetição do tipo: Teste lógico no fim do looping Sintaxe em português estruturado: repita <sequencia de instruções> ate <condição> Sintaxe em C: do { <sequencia de instruções> } while (<condição>); 8.4.3 Repetição do tipo: variável de controle Sintaxe em português estruturado: para <variável> de <inicio> ate <fim> [passo <incremento>] faca <sequencia de instruções> fimpara Sintaxe em C: for (<inicialização>; <condição> ; <incremento>) { <sequencia de instruções> } Código escrito em C: #include <iostream> int main () { int i; for (i = 1; i <= 100; i = i + 1) { printf ("%d n", i); } system(“PAUSE”); }
  • 38. 35 8.5 TiposEstruturadosde Dados Como vimos anteriormente, existem os tipos simples de dados e os tipos estruturados, vejamos agora como utilizar os tipos estruturados no C. A declaração de um vetor em C, é caracterizada pelo tipo de dado a ser armazenado, o nome e o tamanho do vetor. Adicionalmente o vetor poderá ser inicializado no momento de sua declaração. Sintaxe em C: tipo nome_vetor[tamanho] = {lista_de_valores}; Veja o exemplo de código C que utiliza um vetor unidimensional. #include <iostream> int main () { int i, soma, valores[10]; for (i = 1; i <= 10; i = i + 1) { printf (“Entre com o %dº valor: ”, i); scanf (“%d”, &valores[i]); } soma = 0; for (i = 1; i <= 10; i = i + 1) { soma = soma + valores[i]; } printf (“nnA soma dos valores informados foi: %dn”, soma); system(“PAUSE”); }
  • 39. 36 Referência Bibliográficas Apoio Informática. VisuAlg: Editor e Interpretador de Pseudocódigos. Disponível em: <http://www.apoioinformatica.inf.br/o-visualg>. Acesso em 30 Jan 2012. Bloodshed. Dev-C++. Disponível em: <http://www.bloodshed.net/dev/>. Acesso em 01 Fev 2012. CPDEE/UFMG. Curso de C. Disponível em: < http://www.mtm.ufsc.br/~azeredo/cursoC/>. Acesso em 01 Fev 2012. Dijkstra, E.W. (1971) A Short Introduction to the Art of Programming. Technological University Endhoven.