Buscar

Apostila_AEDSI_Newton_Forbellone

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Apostila de 
 
 
Algoritmos e 
 
 
Estrutura de 
 
 
Dados I 
 
 
 
Professor: Sinaide Nunes Bezerra
2________________________________________ Algoritmos e Estrutura de Dados I 
 
1. ALGORITMOS COMPUTACIONAIS 
Segundo Cormem (2001) um algoritmo computacional pode ser entendido 
como “... qualquer procedimento computacional bem definido que toma algum 
valor ou conjunto de valores como entrada e produz algum valor ou conjunto de 
valores como saúda. Portanto, um algoritmo é uma sequência de passos 
computacionais que transformam a entrada na saída”. 
 
Outras definições: 
– “Algoritmo é uma seqüência de passos que visa atingir um objetivo bem 
definido” (FORBELLONE, 1999) 
– “Algoritmo é a descrição de uma seqüência de passos que dever ser seguida 
para a realização de uma tarefa” (ASCENCIO, 1999). 
– “Algoritmo é uma seqüência finita de instruções ou operações cuja execução, 
em tempo finito, resolve um problema computacional, qualquer que seja sua 
instância” (SALVETTI, 1999). 
– “Algoritmo são regras formais para a obtenção de um resultado ou da solução 
de um problema, englobando fórmulas de expressões aritméticas” 
(MANZANO, 1997). 
– “Ação é um acontecimento que, a partir de um estado inicial, após um 
período de tempo finito, produz um estado final previsível e bem-definido. 
Portanto, um algoritmo é a descrição de um conjunto de comandos que, 
obedecidos, resultam numa sucessão finita de ações” (FARRER, 1999). 
Com vistas às definições citadas, pode-se dizer que: 
Um algoritmo é como uma “receita de bolo” para o computador, onde estão 
definidos todos os comandos que ele deve executar para se chegar a um 
resultado. Daí, temos que, o algoritmo é uma seqüência de instruções, onde cada 
instrução representa uma AÇÃO que deve ser entendida e realizada. 
Em algoritmos computacionais, o computador possui um conjunto limitado de 
instruções e o algoritmo deve ser expresso nos termos destas instruções. O 
computador utiliza dois conceitos básicos para construir e interpretar algoritmos, 
são eles: 
Estruturas de Dados � para manipulação das informações 
Estruturas de Controle� para manipulação das ações 
 
 Discursão 
Discuta com o professor qual a importância de se desenvolver algoritmos. 
3________________________________________ Algoritmos e Estrutura de Dados I 
 
 
2. TIPOS DE ALGORITMOS 
 
Descrição Narrativa: A descrição narrativa consiste em analisar o enunciado do 
problema e escrever, utilizando um linguagem natural (por exemplo, a língua 
portuguesa), os passos a serem seguidos para rsolução do problema ( semelhante 
a escrever uma receita ). 
• Vantagem: Não é necessário aprender nenhum conceito novo, pois uma 
língua natural já é bem conhecida. 
• Desvantagem: A linguagem natural (não padronizada e informal) abre 
espaço para várias interpretações. Será mais difícil estrutura-la e transcrever este 
algoritmo para uma linguagem de programação. 
 
Fluxograma: Analisar o enunciado do problema e escrever, utilizando símbolos 
gráficos pré-definidos, os passos a serem seguidos para a resolução do problema. 
• Vantagem: Visão geral do fluxo de processamento. 
• Desvantagem: É necessário aprender a simbologia dos fluxogramas e, 
além disso o algoritmo resultante não apresenta muitos detalhes, dificultando sua 
transcrição para uma linguagem de programação. 
 
Os símbolos utilizados para representar o uso em fluxograma podem variar 
dependendo do autor. A seguir é apresentada a lista de símbolos a ser utilizada 
nas aulas deste curso. 
 
 Indica o início ou fim do algoritmo. 
 
 Leitura de dados. 
 
 Processamento dos dados. 
 
 
 Saída de dados 
 
 
Pseudocódigo: Consiste em analisar o enunciado do problema e escrever, por 
meio de regras predefinidas, os passos a serem seguidos para a resolução do 
problema. 
Início / fim 
processamento 
entrada 
Escrita 
4________________________________________ Algoritmos e Estrutura de Dados I 
 
• Vantagem: A passagem (transcrição) do algoritmo para uma linguagem 
de programação é quase imediata, bastando conhecer as regras e palavras 
reservadas da linguagem que será utilizada. 
• Desvantagem: É necessário aprender as regras do pseudocódigo, que 
serão apresentadas nas próximas aulas. 
 
3. ESTRUTURAS DE DADOS 
Uma estrutura de dados é um meio para armazenar e organizar dados 
com o objetivo de facilitar o acesso e as modificações. Nenhuma estrutura de 
dados única funciona bem para todos os propósitos, e assim é importante 
conhecer os pontos fortes e as limitações de várias delas (CORMEN, 2001). 
As estruturas de dados representam as informações do problema a ser 
resolvido. Tais estruturas estão organizadas em tipos distintos de informações. 
Dentro do escopo das estruturas de dados, define-se os seguintes termos: - 
Constante, Variável e Identificador. 
 
• Constantes 
Representam valores constantes, ou seja, que não variam no decorrer do 
algoritmo. 
Exemplo 1: 
Seja x = 2, efetuando as seguintes operações: 
y = x² � y = 4 
A = 3x² + 5x � A = 3*(2)² + 5 * 2 � A = 22 
 
Exemplo 2: 
Seja PI = 3,14, efetuando as seguintes operações: 
A = PI .*1 � A = 3,14 
A = PI * 2 � A = 6,28 
A = PI * 3 � A = 9,42 
 
Nos exemplos 1 e 2, tanto o valor de x quanto PI não variam a medida que 
as operações são executadas. 
 
• Variáveis 
Representam informações cujos valores são modificados ao longo do 
tempo. 
Exemplo 1: 
5________________________________________ Algoritmos e Estrutura de Dados I 
 
Deseja-se saber o salário de um funcionário considerando que ele recebe 
R$ 1.000, 00 por mês, supondo que teve um aumento de 20% e deve-se descontar 
8% de INSS do novo salário, qual será o salário liquído? 
R.) salario = 1.000 
reajuste = salario * 0,2 
salario = salario + reajuste 
imposto = salario * 0,08 
salario = salario - imposto 
 
Matematicamente, variável é a representação simbólica dos elementos de 
um certo conjunto. Computacionalmente, pode-se definir variável como um local 
reservado na memória do computador usado para armazenar dados. 
Uma variável possui nome (identificador) e tipo, possui apenas um valor em 
um determinado instante, mas seu conteúdo pode variar ao longo do tempo. 
O conceito de variável, em computação, corresponde a posições de 
memória RAM (Random Access Memory) onde são armazenados os dados 
manipulados pelo programa quando este for executado. 
 
• Identificador 
Nome de um local onde se pode colocar qualquer valor do conjunto de 
valores possíveis de um tipo básico associado. Usado para manipular os dados 
necessários no algoritmo. 
O identificador é também usado para rotular valores constantes, assim 
como o nome PI, utilizado no exemplo 2, em constantes (o identificador PI foi 
utilizado para representar o valor constante 3,14). 
 
Regras para formação de identificadores: 
• Começar sempre o nome com uma letra ou o caractere sublinhado “_”; 
• Não usar espaços em branco, pontuação, acentos nem caracteres 
especiais (@, #, etc); 
• Não usar palavras reservadas, ou seja, palavras que pertençam a 
linguagem de programação que estiver sendo usada (ex: if, for, case, int, 
etc). 
6________________________________________ Algoritmos e Estrutura de Dados I 
 
� Importante: 
Um identificador deve representar o melhor possível o papel da variável no 
algoritmo 
 
Ex. de identificadores válidos: 
nota, nota1, nota_1, operador, salario, nome, x, y, enderecoResidencial, 
aluno01, preco_produto, Area, Tensao_A, tensao_B, media, soma, S. 
 
Ex. de identificadores inválidos: 
1K, nota 1, salário,nome, x@1, y%2, aluno 01, preco produto. 
 
4. TIPOS PRIMITIVOS DE DADOS 
São os grupos de informações que o computador manipula. Podem ser: 
1. Numéricos 
a) Inteiros. Ex: ...-100... -2, -1, 0, 1, 2, ..., 100, ... 
b) Reais. Ex: ... -100, ..., -50.2, ..., -2, ..., -1.5, ..., 0, ..., 1, ..., 2, ..., 25.12, ... 
 
2. Não-numéricos 
a) Literal, caractere ou alfanuméricos. Ex: “ESCOLA” “livro” “18” “R$ 55,36”... 
b) Lógicos ou booleanos. Ex: Falso, Verdadeiro (ou F, V) 
Obs: O delimitador usado para alfanuméricos pode ser : “ ” ou ‘ ‘. 
 
Sistema BINÁRIO – Base 2 
Computadores trabalham com o sistema numérico binário. Nesse sistema 
todos dados são transformados em 0 e 1 (zeros e uns) para então serem 
armazenados na memória. Cada dígito binário “bit” (0 ou 1) ocupa porções de 
memória chamadas bytes formadas por conjunto de 8 bits. 
 
bit = 0 ou 1 
byte – conjunto de 8 bits, identificado e acessado por um endereço de 
memória 
 
Declaração de Variáveis 
7________________________________________ Algoritmos e Estrutura de Dados I 
 
É a criação (ou definição) de locais na memória rotulados com o identificador 
da variável (ou constante) que será utilizado no algoritmo para a manipulação de 
um determinado tipo de informação. 
a) Todas as variáveis utilizadas em algoritmos serão definidas no início 
do mesmo, por meio de um comando de uma das formas seguintes: 
 
<tipo_da_variável>:<identificador>; 
<tipo_da_variável>:<identificador1, identificador2, ..., identificadorn>; 
 
b) Em uma mesma linha podem ser definidas uma ou mais variáveis do 
mesmo tipo, separando-se os nomes das mesmas por vírgulas. 
c) Variáveis de tipos diferentes devem ser declaradas em linhas 
diferentes. 
 
Ao se declarar uma variável ainda não existe nenhum valor associado a 
mesma. A atribuição de valores deve ser executada no corpo do algoritmo 
destinado as tais ações. 
Para facilitar o entendimento do algoritmo, comentários podem ser 
introduzidos para explicar determinados trechos do algoritmo ou dado utilizado, 
para inserir um comentário utiliza-se { } (chaves). Eles podem ser colocados em 
qualquer ponto do algoritmo, desde de que os delimitadores { } sejam utilizados. 
Exemplo de declaração de variáveis: 
inteiro: Idade; 
real: salario; 
caracter: Nome; 
lógico: temFilhos; 
 
No exemplo anterior, foram declaradas quatro variáveis, sendo elas: 
1) A variável Nome, capaz de armazenar dados literais; 
2) A variável Idade, capaz de armazenar um número inteiro; 
3) A variável salario, capaz de armazenar um número real; 
4) A variável temFilhos, capaz de armazenar um valor lógico (V ou F). 
 
Exercícios 
1) Assinale com ‘C’ os identificadores corretos e com ‘E’ os errados, explique 
o que está errado. 
( ) tensao ( ) _H2O ( ) nota*do*aluno ( ) a1b2c3 
( ) 16 x 9 ( ) Pedro ( ) nome empresa ( ) km/h 
8________________________________________ Algoritmos e Estrutura de Dados I 
 
( ) V.t ( ) "nota" ( ) sala1021 ( ) ah! 
 
2) Supondo que as variáveis Mat, Nome, Curso, Nota sejam utilizadas para 
armazenar a matrícula, nome, curso e nota do aluno, declare corretamente as 
variáveis, associando-se o tipo adequado. 
 
5. OPERAÇÕES BÁSICAS 
Comando de Atribuição em Pseudocódigo 
O comando de atribuição é utilizado para atribuir valores ou operações a 
variáveis, sendo representado pelo símbolo . 
 
Exemplo: 
X  4; 
X  X + 2; 
Y  “aula”; 
TESTE_1  Falso; 
nome “Escola”; 
pi  3.14; 
erro  verdadeiro; {ou, simplesmente, Erro = V} 
media  (p1 + p2)/2; 
 
Comando de Entrada em Pseudocódigo 
O comando de entrada é utilizado para receber dados digitados pelo usuário. 
Os dados recebidos são armazenados em variáveis (espaços endereçados na 
memória de um computador). Esse comando é em pseudocódigo representado 
pela palavra Leia. 
 
Exemplo: 
leia (X); 
leia (X, Y, Z); 
 
Comando de Saída em Pseudocódigo 
O comando de saída é utilizado para mostrar dados na tela ou impressora. 
Esse comando é em pseudocódigo representado pela palavra “escreva”, os 
dados podem ser conteúdos de variáveis ou mensagens pré-definidas no 
algoritmo. 
 
9________________________________________ Algoritmos e Estrutura de Dados I 
 
Exemplo: 
//escreverá o valor da variável X 
escreva (X); 
//escreverá a mensagem entre as aspas e em seguida o valor da variável X 
escreva (“o valor é”, X); 
 
Comando de Atribuição em Pseudocódigo 
Serve para atribuir (ou associar) um valor a uma variável ou constante. 
Representa-se através do símbolo “”. 
Exemplo: 
X  2; 
Nome = “Escola”; 
 
Estrutura Sequencial em Pseudocódigo 
 
Na estrutura sequencial os comandos de um algoritmo são executados 
numa sequência pré-estabelecida. Cada comando é executado somente após o 
término do comando anterior. 
Em termos de fluxogramas, a estrutura sequencial é caracterizada por um 
único fluxo de execução (um único caminho orientado) no diagrama. Em 
pseudocódigos, a estrutura sequencial caracteriza-se por um conjunto de 
comandos dispostos ordenadamente. 
Estrutura básica: 
início //identificação do início do bloco correspondente ao algoritmo 
 //declaração das variávieis 
 tipo: variável1, variável2; 
//Comando(s) de entrada 
leia (variável1, variável2); 
//Ações a serem executadas 
<instrução_1> 
<instrução_2> 
. 
. 
. 
<instrução_n> 
escreva (“Mensagem pré-determinada”, variável1); 
fim. 
 
Exemplo1: Algoritmo que calcule a soma de dois valores informados pelo usuário. 
 
início 
10________________________________________ Algoritmos e Estrutura de Dados I 
 
real: a, b, c; 
leia a, b; 
c  a + b; 
escreva (“A soma é”, c); 
Fim. 
 
Exemplo2: Algoritmo para calcular a média de um aluno baseada em quatro notas. 
início 
//declaração de variáveis 
real: p1, p2, p3, p4, media; 
//comandos de entrada de dados} 
leia (p1, p2, p3, p4); 
//processamento - cálculo da média} 
media  (p1 + p2 + p3 + p4)/4; 
//saída de dados} 
escreva (“Média final = “, Media); 
fim. 
 
Exercícios de fixação 
1) Faça 02 exemplos para cada um dos conceitos abaixo: 
a) entrada de dados 
b) saída de dados 
c) declaração de variáveis 
d) inicialização de variáveis 
e) atribuição do resultado de uma expressão aritmética a uma variável 
 
2) Utilizando tipos primitivos de dados, crie declarações de variáveis, que 
armazenem as seguintes informações: o nome de uma figura geométrica, a 
quantidade de lados, a área, o perímetro e se a figura é regular ou não. 
 
3) Faça um algoritmo que leia uma sequência de caracteres e apresente-a 
como saída, precedida da mensagem “A palavra informada é “. 
4) Faça um algoritmo que calcule a multiplicação e divisão de dois valores 
informados pelo usuário. 
5) Desenvolva um algoritmo que: 
a) Leia 4 (quatro) números 
b) Calcule o quadrado para cada um 
c) Somem todos e 
11________________________________________ Algoritmos e Estrutura de Dados I 
 
d) Mostre o resultado 
 
Estrutura Sequencial na linguagem C/C++ 
 
Definição de início e fim de um bloco de código em C/C++: 
 
#include <nome da biblioteca> 
void main() 
{ 
 Bloco de comandos; 
} 
 
Bibliotecas são arquivos contendo várias funções que podem ser chamadas 
no programa que as importarem. 
Ex: As bibliotecas iostream.h e conio.h permitem a utilização de diversos 
comandos de entrada e saída. 
 
Declaração de Variáveis em EM C/C++ 
� Importante 
A linguagem C/C++ é sensível a letras maiúsculas e minúsculas (case 
sensitive), ou seja, considera que letras maiúsculassão diferentes de 
minúsculas e , portanto uma variável identificada por Media será diferente de 
outra identificada por MEDIA ou mesmo media. 
 
As variáveis são declaradas após a especificação de seus tipos. Os tipos de 
dados mais usandos são: int (para números inteiros) , float (para números reais) e 
char (para um caractere). A linguagem C/C++ não possui tipo de dados LOGICO 
(boolean que pode assumir verdadeiro ou falso), pois considera qualquer valor 
diferente de 0 (zero) como sendo verdadeiro. A linguagem C/C++ não possui um 
tipo especial para armazenar cadeias de caracteres (strings). Deve-se, quando 
necessário, utilizar um vetor contendo vários elementos do tipo char. Os vetores 
serão abordados no Capítulo 5. 
 
Exemplo de declarações: 
Declaração de uma variável denominada X, onde pode ser armazenado um 
número real a cada instante. 
float X; 
12________________________________________ Algoritmos e Estrutura de Dados I 
 
Declaração de duas variáveis denominadas Y e Z, onde cada uma contem 
um número real 
float Y, Z; 
Declaração de uma variável denominada sexo, onde pode ser armazenado 
um único caractere. 
char sexo; 
 
declara uma variável chamada NOME, onde podem ser armazenados 40 
caracteres 
 
char NOME[40] 
 
COMANDO DE ATRIBUIÇÃO EM C/C++ 
O comando de atribuição é utilizado para atribuir valores ou operações a 
variáveis, sendo representado por = (sinal de igualdade). 
 
Exemplo: 
X = 4; 
X = X + 3; 
Y = 2.5; 
sexo = ‘f’; 
 
Em C/C++ os caracteres são representados entre apóstrofos (‘). As cadeias 
de caracteres devem ser representadas entre aspas (“). 
 
Caso seja necessário aramazenar uma cadeia de caracteres dentro de uma 
variável, deve-se utilizar uma função para manipulação de caracteres, conforme 
apresentado a seguir: 
 
strcpy(nome, “João”); 
 
Para que seja possível a utilização da função strcpy deve-se inserir ao 
programa, por meio da diretiva include, a biblioteca string.h. As funções de 
manipulação de strings serão abordadas no Capítulo 7. 
 
IMPORTANTE! – Em C/C++ cada linha de comando é finalizada com o sinal 
de ponto-e-vírgula (;) . 
13________________________________________ Algoritmos e Estrutura de Dados I 
 
 
 
COMANDO DE ENTRADA EM C/C++ 
 
O comando de entrada é utilizado para receber dados digitados pelo usuário. 
Os dados recebidos são armazenados em variáveis. Os comandos de entrada 
mais utilizados em C são: 
Entrada de dados: scanf, cin, gets 
Ex: Um valor digitado pelo usuário será armazenado na variável X. 
scanf(“%f”, &X); 
cin >> X; 
 
Um ou vários caracteres digitados pelo usuário serão armazenados na 
variável NOME. 
gets(NOME); 
 
O comando gets deve ser utilizado quando se deseja digitar uma cadeia 
contendo espaços em branco, por exemplo, um nome completo como João da 
Silva. O comando cin consegue armazenar os caracteres até que seja encontrado 
o primeiro espaço em branco e os caracteres posteriores serão desprezados 
(sendo assim, seria armazenado apenas João). O comando gets e o comando 
scanf armazenam toda a cadeia até que seja pressionada a tecla ENTER. 
 
COMANDO DE SAÍDA EM C/C++ 
 
O comando de saída é utilizado para mostrar dados na tela ou na impressora. 
Os comandos de saída mais utilizados na linguagem C/C++ são cout e printf. 
Exemplos: 
Mostra na tela o valor armazenado na variável X. 
cout << X; 
Mostra a mensagem “Conteúdo de X = “ e em seguida o valor armazenado 
em X. 
cout << “Conteúdo de X = ” << X; 
Mostra o número real aramazenado na variável X, utilizando cinco casas para 
parte inteira e duas casas decimais. 
printf(“%5.2f” , X); 
Mostra a mensagem “Conteudo de Y = ” e em seguida o número inteiro 
armazenado na variável Y. 
Printf(“Conteudo de Y = %d”, Y) 
14________________________________________ Algoritmos e Estrutura de Dados I 
 
 
 
COMENTÁRIOS EM C/C++ 
 
Comentários são textos que podem ser inseridos em programas com o 
objetivo de documentá-lo. Os comentários não são analisados pelo compilador. 
 
Os comentários podem ocupar uma ou varias linhas. 
 
Comentário de blocos são iniciados por /* e terminados por */ 
Ex: 
 
/* 
Este programa é para fazer 
soma de três números inteiros 
*/ 
 
Para fazer comentários em uma única basta inicia-la por // 
Ex: 
 
//PROGRAMA CRIADO POR: Alexandre Márton 
 
 
OPERADORES E FUNÇÕES PREDEFINIDAS EM C/C++ 
Operações Matemáticas 
nome da função (argumento); 
 
O argumento é a informação que é dada à função para que ela possa ser 
efetuada adequadamente. Pode ser uma constante ou uma variável. 
 
Exemplos de Funções Matemáticas que utilizaremos: 
 
sin (x) - Função que calcula o seno da variável X 
sqrt (y) - Função que calcula a raiz quadrada de y 
int (z) - Função que retorna a parte inteira da variável z (que deve ser do 
tipo real) 
 
15________________________________________ Algoritmos e Estrutura de Dados I 
 
a. Operadores Aritméticos + - (unários) 
pow (x,y) exponenciação de xy 
* multiplicação 
/ divisão 
+ - soma e subtração (binários) 
div divisão truncada (ou inteira) (ex: x div y) 
% resto da divisão inteira 
 
b. Operadores Relacionais < <= > >= = != (diferente) 
c. Operadores Lógicos ! (not) && (and) || (or) 
Podemos usar parênteses para alterar ordem de prioridade das operações. 
6. TIPOS DE LINGUAGEM DE PROGRAMAÇÃO: 
COMPILADAS (instrução de máquina / código binário) 
O texto (ou código-fonte) do programa é lido por um programa chamado 
compilador, que cria um arquivo binário, executável diretamente pelo hardware da 
plataforma-alvo. Exemplos deste tipo de linguagem são C ou Fortran. 
Compilar é traduzir código legível por humanos (código fonte) para código 
legivel pela máquina. Neste sentido java é compilada. Tem um compilador , o 
javac. O codigo fonte é compilado em codigo máquina. A máquina é a JVM. 
• alto nível -> baixo nível 
• performance 
• tipo específico de computador/processador (somente nele funcionará). 
 
INTERPRETADA (código fonte texto/script) 
O texto ou código-fonte não é convertido em um arquivo executável. Eles são 
executados utilizando um outro programa, o interpretador, que lê o código-fonte e 
o interpreta diretamente, durante a sua execução. Exemplos de linguagem 
interpretada incluem o BASIC tradicional, vbscript (ASP), javascript, Perl e Python. 
 
Interpretar é executar sem gerar código nativo. 
• Código fonte 
• Interpretador 
• Portabilidade 
 
16________________________________________ Algoritmos e Estrutura de Dados I 
 
 HÍBRIDA 
A JVM (Java Virtual Machine) portável em cada máquina compila os em 
bytecodes. Outra JVM em outra maquina ou processador interpreta os bytecodes 
por meio de uma estratégia adaptativa, a máquina virtual detecta os "hot spots" - 
pontos de código de maior atividade - e compila esses bytecodes para código 
nativo. Isso é chamado de Just-In-Time compiling. 
É possível, no entanto, alterar o modo de funcionamento da máquina virtual. 
Ou seja, Java é uma linguagem híbrida compilada e interpretada por uma JVM 
(Java Virtual Machine) em cada máquina. 
 
7. ESTRUTURA CONDICIONAL EM ALGORITMOS: 
Estrutura condicional simples 
 
se (condição) 
 então 
 inicio 
 comando1 
comando2 
comando3 
 fim; 
 fimse; 
 
O comando só será executado se a condição for verdadeira. Uma condição é 
uma comparação que possui dois valores possíveis, verdadeiro ou falso. 
 
Os comando 1,2 e 3 só serão executados se a condição for verdadeira. As 
palavras INÍCIO e FIM serãonecessárias apenas quando dois ou mais comandos 
forem executados. 
 
Estrutura condicional composta 
se (condição) 
então 
comando1 
senão 
 comando2; 
fimse; 
 
17________________________________________ Algoritmos e Estrutura de Dados I 
 
Se a condição for verdadeira, será executado o comando1; caso contrário, 
se a condição for falsa, será executado o comando2. 
se (condição) 
 então 
inicio 
 comando1; 
comando2; 
 fim; 
 senão 
 início 
 comando3 
comando4 
fim; 
fimse; 
 
Se a condição for verdadeira, o comando1 e o comando2 serão executados; 
caso contrário, se a condição for falsa, o comando3 e o comando4 serão 
executados. 
 
ESTRUTURA CONDICIONAL EM C/C++: 
 
1) Estrutura condicional simples 
 
if ( condição ) 
 comando; 
 
O comando só será executado se a condição for verdadeira. 
Uma condição é uma comparação que possui dois valores possíveis: 
verdadeiro ou falso. 
 
if ( condição ) 
{ 
 comando1; 
 comando2; 
 comando3; 
} 
 
18________________________________________ Algoritmos e Estrutura de Dados I 
 
Em C/C++, torna-se obrigatória a utilização de chaves quando 
houver mais de um comando a ser executado. Os comandos entre as 
chaves {} só serão executados se a condição for verdadeira. 
 
* Todas as condições devem estar entre parênteses. 
 
2) Estrutura condicional composta 
 
if ( condição ) 
 comando1; 
else 
 comando2; 
 
 
Se a condição for verdadeira será executado o comando1; caso contrário , 
se a condição for falsa, será executado o comando2. 
 
if ( condição ) 
{ 
 comando1; 
 comando2; 
} 
else 
{ 
 comando3; 
 comando4; 
} 
 
Se a condição for verdadeira o bloco de comandos contendo comando1 e 
comando2 será executado, caso contrário se a condição for falsa, o bloco de 
comandos contendo comando3 e comando4 é que será executado. 
 
* Todas as condições devem estar entre parênteses. 
 
ESTRUTURA CONDICIONAL CASE: 
 
Em alguns programas existem comandos mutuamente exclusivos, isto é, se 
um comando for executado, os demais não o serão. Quando esse for o caso, um 
19________________________________________ Algoritmos e Estrutura de Dados I 
 
comando seletivo é o mais indicado e esse comando seletivo em C/C++ tem a 
seguinte sintaxe: 
 
Switch (variável) 
{ 
 case valor1 : lista de comandos; 
break; 
case valor2: lista de comandos; 
break; 
default: lista de comandos; 
 } 
 
 
O comando switch (variável) avalia o valor de uma variável para decidir 
qual case será executado. Cada case está associado a um possível valor da 
variável. O comando break deve ser utilizado para impedir que sejam executados 
os comandos definidos nos cases subseqüentes. 
 
Quando o valor da variável não coincidir com aqueles especificados nos 
cases, será executado então o default. 
 
 
OPERADORES LÓGICOS: 
 
Os operadores lógicos são: &&, || e ! significam e , ou , não e são usados 
para conjunção, disjunção e negação , respectivamente. 
 
Tabela Verdade 
TABELA E TABELA OU TABELA NÃO 
V e V = V V ou V = V NÃO V = F 
V e F = F V ou F = V NÃO F = V 
F e V = F F ou V = V 
F e F = F F ou F = F 
 
Quando existe mais de uma condição , essas devem estar entre 
parênteses assim como todas as condições. 
 
Ex: 
If ( (X > 5) && ( X < 10 ) ) 
 cout << “Número entre 5 e 10” ; 
20________________________________________ Algoritmos e Estrutura de Dados I 
 
 
 
Exercícios 
1) Tendo as variáveis salario, ir, salLiq, e considerando os valores abaixo. 
Informe se as expressões são verdadeiras ou falsas. 
salario ir salLiq expressão V ou F 
100.00 0.00 100.00 salLiq >=100.00 
200.00 10.00 190.00 salLiq < 190.00 
300.00 15.00 285.00 salLiq = salario - ir 
 
2) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são 
verdadeiras ou falsas: 
a) (A+C) > B ( ) 
b) B >= (A + 2) ( ) 
c) C = (B –A) ( ) 
d) (B + A) <= C ( ) 
e) (C+A) > B ( ) 
 
21________________________________________ Algoritmos e Estrutura de Dados I 
 
1ª TRABALHO EM EQUIPE 
INSTRUÇÕES: 
� Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de 
atraso e 0,5 pontos a cada dia consecutivo. 
� Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. 
� Entregar em folha A4. 
 
Pesquisar sobre os itens de 1 a 5. 
1) Linguagem de programação: compilada e interpretada 
2) Tipos de algoritmos 
3) Conceito de variáveis e tipos de dados 
4) Formação e exemplo de identificadores 
5) Estrutura sequencial, declaração de variáveis, comando de atribuição, 
comando de entrada e saída. 
 
Resolva utilizando pseudocódigo: 
6) Escreva um algoritmo para ler as notas da 1ª e 2ª avaliações de um aluno, 
calcular e mostrar a média das notas. 
 
7) O custo de um carro novo ao consumidor é a soma do custo de fábrica com a 
porcentagem do distribuidor e dos impostos (aplicados ao custo de fábrica). 
Supondo que o percentual do distribuidor seja de 28% e os impostos de 45%, 
escreva um algoritmo para ler o custo de fábrica de um carro, calcular e 
escrever o custo final ao consumidor. 
 
8) Faça um algoritmo para ler as seguintes informações do cliente: crédito e 
débito, calcular e escrever o saldo atual. 
 
9) A equipe Ferrari (F-1) deseja calcular o número mínimo de litros que deverá 
colocar no tanque de seu carro para que ele possa percorrer um determinado 
número de voltas até o primeiro reabastecimento. Escreva um algoritmo que 
leia o comprimento da pista (em metros), o número total de voltas a serem 
percorridas no grande prêmio, o número de reabastecimentos desejados e o 
consumo de combustível do carro (em Km/L). Calcular e escrever o número 
mínimo de litros necessários para percorrer até o primeiro reabastecimento. 
OBS: Considere que o número de voltas entre os reabastecimentos é o 
mesmo 
22________________________________________ Algoritmos e Estrutura de Dados I 
 
 
10) Uma empresa deseja interligar alguns computadores, para isso deseja saber 
quantos switch’s comprar. Faça um algoritmo que leia o número de 
computadores a serem interligados e a quantidade de portas por switch, 
informe quantos switch’s deverão ser adquiridos. 
 
11) Faça um algoritmo que leia um valor e escrever se é positivo, negativo ou 
zero. 
 
12) Faça um algoritmo que tendo como dados de entrada a altura e o sexo (M ou 
F) de uma pessoa, calcule e mostre seu peso ideal, utilizando as seguintes 
fórmulas: 
o para sexo masculino: peso ideal = (72.7 * altura) – 58 
o para sexo feminino: peso ideal = (62.1 * altura) - 44.7 
 
13) Em uma escola, o aluno faz duas provas por período, com as notas variando 
de 0 a 10. Caso a média aritmética das duas notas seja maior ou igual a 6, 
ele passa de ano; senão, é reprovado. Faça um algoritmo que receba as duas 
notas de um aluno e escreva se ele passou ou não de ano 
 
14) Dois carros percorreram diferentes distâncias em diferentes tempos. Sabendo 
que a velocidade média é a razão entre a distância percorrida e o tempo 
gasto para percorrê-la, faça um programa que leia as distâncias que cada 
carro percorreu e o tempo que cada um levou, e indique o carro que teve 
maior velocidade média. 
 
15) A jornada de trabalho semanal de um funcionário é de 40 horas. O funcionário 
que trabalhar mais de 40 horas receberá hora extra, cujo cálculo é o valor da 
hora regular com um acréscimo de 50%Escreva um algoritmo que leia o 
número de horas trabalhadas em um mês, o salário por hora e escreva o 
salário totaldo funcionário, que deverá ser acrescido das horas extras, caso 
tenham sido trabalhadas. Considere que o mês possua 4 semanas exatas 
 
16) Escreva um algoritmo que leia o salário fixo e o valor das vendas efetuadas 
pelo vendedor de uma empresa. Sabendo-se que ele recebe uma comissão 
de 3% sobre o total das vendas até R$ 1.500,00 mais 5% sobre o que 
ultrapassar este valor, calcular e escrever o seu salário total. 
 
17) 
23________________________________________ Algoritmos e Estrutura de Dados I 
 
 
Deseja se construir um pilar que suporte um peso p. 
O peso suportado é dado, hipoteticamente, por p = (500 a / 
h). Faça um algoritmo que leia os parâmetros da viga e 
informa o peso suportado: 
Critérios: 0,2 m <= a <= 0,6 m 
 1 m <= h <= 5 m 
Caso algum dos parâmetros informados esteja fora dos intervalos, informe 
uma mensagem de erro. 
 
18) Menu de opções: Escreva um programa para ler 2 valores inteiros e 
uma das seguintes operações a serem executadas (codificada da 
seguinte forma: 1.Adição, 2.Subtração, 3.Divisão, 4.Multiplicação). 
Calcular e escrever o resultado dessa operação sobre os dois valores lidos. 
Observação: Considere que só serão lidos os valores 1, 2, 3 ou 4. 
24________________________________________ Algoritmos e Estrutura de Dados I 
 
8. ESTRUTURAS DE REPETIÇÃO 
• São aquelas que permitem executar mais de uma vez (repetir) um 
determinado trecho do algoritmo 
• O trecho do algoritmo em repetição é também chamado de laço (ou “loop”) 
• As repetições devem ser sempre finitas 
• Quanto a quantidade de repetições, os laços podem ser 
– Pré-determinados: Sabe-se antes a quantidade de execuções 
– Indeterminados: Não se conhece a quantidade de execuções 
• Quanto ao critério de parada, os laços podem utilizar 
– Variável de controle 
– Teste no início 
– Teste no final 
 
Repetição com Teste no Início 
Enquanto... faça 
• Laço que verifica antes de cada execução, se é “permitido” executar o 
trecho do algoritmo 
• Trata-se de um laço que se mantém repetindo enquanto uma dada condição 
permanecer verdadeira 
 
Pseudocódigo 
enquanto <condição> faça 
comando 1; 
 comando 2; 
 ... 
 comando n; 
fimenquanto; 
Em C/C++ 
while (condição) 
{ 
comando 1; 
 comando 2; 
 ... 
 comando n; 
} 
25________________________________________ Algoritmos e Estrutura de Dados I 
 
EXEMPLO: 
início 
 //declaração de variáveis 
 Real: N1, N2, N3, N4, MA; 
 Inteiro: COM; 
 CON  0; //inicialização do contador 
 enquanto (CON < 50) faça //teste da condição de parada 
 Leia (N1, N2, N3, N4); 
 MA  (N1 + N2 + N3 + N4) / 4; 
 Escreva MA; 
 se (MA >= 7) 
então 
 Escreva (“Aluno Aprovado. Parabéns!”); 
 senão 
 Escreva (“Aluno Reprovado. Estude mais!”); 
 fimse; 
 CON  CON + 1 {incremento do contador} 
 fimenquanto; 
 fim. 
Para... até... faça 
• Utilizada somente em casos nos quais o número de repetições da 
seqüência de instruções é previamente conhecido. 
• Laço simplificado para utilização em repetições de quantidade 
predeterminada 
• Incorpora internamente o funcionamento de um contador de repetições 
 
Em C/C++: 
for(i = 0; i < n; i++) 
{ 
comando 1; 
comando 2; 
... 
comando n; 
} 
Pseudocódigo: 
para i de <valor incial> até <valor final> passo p faça 
comando 1; 
comando 2; 
... 
comando n; 
fimpara; 
26________________________________________ Algoritmos e Estrutura de Dados I 
 
repita... até 
• Laço que verifica depois de cada execução, se é “permitido” continuar 
executando o trecho do algoritmo 
• Trata-se de um laço que se mantém repetindo até que uma dada condição 
se torne verdadeira 
 
Comparação entre Estruturas de Repetição 
• Aprendemos 3 maneiras de construir laços de repetição 
• É importante perceber que existem laços mais adequados ou convenientes 
para cada situação 
Estrutura Condição Quantidade de Execuções Condição de Existência 
Enquanto Início zero ou muitas Condição verdadeira 
Para Início zero ou muitas Condição verdadeira 
Repita Final ((vf – vi) div p) + 1 v <= vf 
Pseudocódigo 
repita 
comando 1 
 comando 2 
... 
comando n 
até (condição); 
Em C/C++ 
do 
{ 
comando 1; 
 comando 2; 
... 
comando n; 
} 
while (condição); 
27________________________________________ Algoritmos e Estrutura de Dados I 
 
2ª TRABALHO EM EQUIPE 
INSTRUÇÕES: 
� Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de 
atraso e 0,5 pontos a cada dia consecutivo. 
� Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. 
� Entregar em folha A4. 
 
1) Escreva um algoritmo que leia três números e imprima o maior deles. 
 
2) Escreva um algoritmo que leia três números e os imprima em ordem crescente. 
 
3) Elabore um algoritmo que imprima os números pares de 2 a 20. 
 
4) Imprima os 10 primeiros números pares a partir de um valor digitado pelo 
usuário. 
 
5) Elabore um algoritmo que calcule a soma dos 15 primeiros números da série: 0, 
3, 6, 9, 12, 15..... 
 
6) Elabore um algoritmo que calcule a soma dos n primeiros números inteiros da 
série: 0, 3, 6, 9, 12, 15..... 
 
7) Faça um algoritmo que leia a idade de uma pessoa, continue lendo até que a 
idade informada seja igual a 999. Mostre a mensagem: 
a) “Criança” caso a idade lida seja menor que 14. 
b) “Adolescente” caso a idade lida seja maior ou igual a 14 e 
menor que 18. 
c) “Adulto” caso a idade lida seja maior ou igual a 18. 
 
8) Elabore um algoritmo que lê um número inteiro do teclado e exibe os resultados 
da multiplicação desse número por 1, 2, 3 ... 20. Utilize repetição com variável de 
controle (para...até...faça). 
 
9) Faça um algoritmo que leia 100 números digitados pelo usuário e imprima o 
maior deles. 
 
10) Faça um algoritmo que calcule o fatorial de um número n. 
 
28________________________________________ Algoritmos e Estrutura de Dados I 
 
11) Escreva um algoritmo que leia um numero e calcule o seu fatorial utilizando a 
estrutura de repetição enquanto. Reescreva o algoritmo utilizando a estrutura de 
repetição repita. Há diferença entre as duas estruturas? Explique. 
 
12) A figura a seguir representa um leito de um rio na região urbana de uma 
cidade. Os círculos de 1 a 7 representam tanques de contenção, destinados a 
evitar enchentes. 
 
Faça um algoritmo que obtenha a capacidade de cada tanque e informe: 
a) O tanque com maior capacidade; 
b) O tanque com menor capacidade; 
c) A média de capacidade de todo o sistema; 
d) A capacidade total do sistema. 
 
13) Faça um algoritmo que leia a nota de uma turma de 50 alunos e apresente a 
quantidade de alunos com notas entre [0, 3], ]3, 6], ]6, 8] e ]8, 10]. Considere 
que a nota informada esteja entre [0, 10]. 
 
14) O salário de um pedreiro de alvenaria (reboco) é calculado conforme sua produção 
média diária, da seguinte maneira: 
a) Até 40 m² recebe R$ 9,80 por m²; 
b) Acima de 40 m² recebe R$ 10,00 por m². 
Faça um algoritmo em que leia o total de reboco produzido em 22 dias e calcule seu 
salário. Repita a operação para 150 funcionários e apresente o valor total da folha de 
pagamento. 
 
15) Uma indústria de peças automotivas fez uma pesquisa de preços entre seus 
fornecedores para saber o valor de uma determinada chapa metálica para a 
manufatura de peças. Os fornecedores apresentaram seus preços, totalizando 20 
ofertas. Faça um algoritmo que mostre ao diretor da indústria o menor e o maio 
preço, juntamente com o nome de seus respectivosfornecedores. 
 
16) Mostre quais os resultados apresentados na tela gerados pelo seguinte 
pseudocódigo: 
29________________________________________ Algoritmos e Estrutura de Dados I 
 
Programa XPTO; 
var 
i, j inteiro; 
início 
i  1 
Enquanto (i <= 5) faça 
início 
Para j  0 até 9 passo 3 faça 
Escreva (i + j) 
fimenquanto; 
fim; 
 
 
17) Mostre quais os resultados apresentados na tela gerados pelo seguinte 
pseudocódigo: 
Programa Mult; 
var 
cont, mult: inteiro; 
início 
mult 1; 
Para cont  3 até 15 passo 3 faça 
mult  mult * cont; 
Escreva mult; 
fim; 
 
18) Elabore um algoritmo que calcule o resultado da potência XY, onde X e Y serão 
valores inteiros fornecidos pelo usuário. A operação de potenciação não poderá 
ser usada, utilize somente operação de multiplicação. 
 
19) Elabore um algoritmo que apresente os N primeiros termos da série de 
Fibonacci (aquela que aparece no livro e no filme “O Código da Vinci”). A série de 
Fibonacci é formada pela seqüência 1, 1, 2, 3, 5, 8, 13, 21... O elemento Ei da série 
é obtido pela soma dos elemento Ei-1 + Ei-2. 
30________________________________________ Algoritmos e Estrutura de Dados I 
 
9. ESTRUTURA HOMOGÊNEA DE DADOS (ARRAYS) 
Um array é um agregado homogêneo de dados, no qual, cada elemento é 
identificado unicamente pela posição que ocupa no agregado. A posição é iniciada 
no primeiro elemento do grupo. O tipo dos elementos que ocupam o array é 
previamente definido em tipos primitivos ou por referência (endereço de memória 
do elemento). Os ar 
Vetores (Array unidimensional) 
• Vetores são variáveis com múltiplas posições. 
• Podem ser vistos como lista de elementos do mesmo tipo. 
• Temos os seguintes tipos de dados básicos: inteiros, reais, lógicos e literais. 
• Para trabalhar com conjuntos de variáveis do mesmo tipo básico, usamos 
os conceitos de vetores. 
 
Declaração de um vetor 
<nome>[linha][coluna]: tipo; 
Exemplo: 
A[3][5]: inteiro; 
 
Problemas resolvidos utilizando vetores 
 
1) Elabore um algoritmo que leia 10 números inteiros digitados pelo usuário e 
armazene-os em um vetor. Em seguida, o algoritmo deverá escrever na tela cada 
número digitado e o seu quadrado, sendo que esses valores (quadrados de cada 
número do vetor) deverão estar armazenados em outro vetor. 
 
início 
inteiro: i; //variável que indica a posição no vetor 
inteiro: Vetor1[10], Vetor2[10]; //vetores de 10 posições cada 
para i de 1 até 10 passo1 faça 
 escreva (“Digite um número inteiro: “); 
 leia Vetor1[i]; 
fimpara; 
 
para i ← 1 até 10 passo 1faça 
Vetor2[i] ← Vetor1[i] * Vetor1[i]; 
escreva (“O quadrado é: “, Vetor2[i]); 
31________________________________________ Algoritmos e Estrutura de Dados I 
 
fimpara; 
fim; 
 
2) Elabore um algoritmo que leia do teclado 20 números inteiros, armazene-os em 
um vetor e em seguida calcule e apresente a soma dos números ímpares 
digitados. 
inicio 
inteiro: i, A[20]; 
real: rest, soma; 
para i de 1 até 20 passo 1 faça 
escreva “Digite um número inteiro: “; 
leia A[i]; 
fimpara; 
 
para i de 1 até 20 passo 1 faça 
 rest ← Resto(A[i] / 2); {resto recebe o resto da divisão inteira de A[posicao] por 2} 
 Se (rest = 1) 
então {se o resto igual a 1, ou seja, se o número é ímpar} 
soma ← A[i] + soma; 
fimpara; 
 
 Escreva (“A soma dos números ímpares é: “, soma); 
fim. 
 
3) Leia do teclado 20 números inteiros, armazenando os valores em dois vetores 
(10 em cada vetor). Construa um terceiro vetor onde cada elemento é soma dos 
elementos de mesma posição nos dois primeiros vetores. Ao final, apresente os 
valores do terceiro vetor. 
início 
inteiro: Z[10], B[10], C[10], i; 
Para i de 1 até 10 passo 1 faça {preenche o primeiro vetor} 
 Escreva (“Digite um número inteiro: “); 
 Leia (A[i]); 
 Escreva (“Digite um número inteiro: “); 
 Leia (B[i]); 
Fimpara; 
 
Para i de 1 até 10 passo 1 faça {preenche o terceiro vetor} 
32________________________________________ Algoritmos e Estrutura de Dados I 
 
C[i] ← A[i] + B[i]; 
//mostra os valores do terceiro vetor 
Para i de 1 até 10 passo 1 faça 
Escreva (“Somando A com B, temos: “, C[i]); 
Fim. 
 
4) Leia do teclado um vetor de 15 números inteiros positivos. Em seguida, copie 
esses números para um segundo vetor de mesmo tamanho, alterando o sinal dos 
números que estiverem em posições pares. Ao final, mostre os valores do vetor 
resultante na tela. 
Programa Troca_Par; 
Var 
A[15], B[15], i, vlrNegativo: inteiro; 
Início 
 Para i ← 1 até 15 faça {preenche o vetor A} 
 Início 
 Leia A[i]; 
 B[i]  A[i]; 
 Se (Resto(i / 2) = 0) então {verifica se a posição é par 0} 
 B[i] ← B[i] * -1; {troca o sinal do valor que está em B[i]} 
 Fim; 
 
 Para i ← 1 até 15 faça {Mostra o vetor B} 
 Escreva B[i]; 
 Fim; 
 
5) Considerando o algoritmo abaixo: 
 
Programa Sequencia1; 
Var 
Vet1[10], i: inteiro; 
Início 
i ← 0; 
Enquanto (i < 10) faça 
 Início 
 Vet1[i] ← i * 4 – 3; 
i ← i + 1; 
Fim; 
Fim; 
33________________________________________ Algoritmos e Estrutura de Dados I 
 
 
Indique o valor armazenado em: 
a) Vet1[1] 
R.: 1 
b) Vet1[5] 
R.: 17 
 
6) Considerando o algoritmo abaixo: 
inicio 
 declare Vet1[20], Vet2[20], Vet3[20] numérico 
 posicao numérico 
 
 para posicao ← 0 até posicao < 20 faça 
 inicio 
 Vet1[posicao] ← posicao 
 Vet2[posicao] ← 19 – posicao 
 fim 
 
 para posicao ← 0 até posicao < 20 faça 
 Vet3[posicao] ← Vet1[posicao] + Vet2[posicao] 
 
fim. 
 
Indique o valor armazenado em: 
a) Vet3[1] 
R.: 19 
b) Vet3[7] 
R.: 19 
c) Vet3[20] 
R.: 19 
 
Problemas resolvidos utilizando vetores em C 
 
Problema1: Ler 4 idades e guardar em vetor. 
 
1ª Solução com while 
 
#include <cstdlib> 
#include <iostream> 
34________________________________________ Algoritmos e Estrutura de Dados I 
 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
 int idade[4]; //declaração do vetor idade com 4 posições 
 int posicao; 
 posicao = 0; 
 
 while (posicao < 4) 
 { 
 cout << "Digite a idade "; //mostra na tela 
 cin >> idade[posicao]; //posição posicao do vetor idade 
 // recebe valor digitado 
 posicao = posicao + 1; 
 } 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
 
Problema2: Ler 4 idades, guardar em vetor e mostrar as idades armazenadas. 
 
1ª Solução com while 
 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
 int idade[4]; //declaração do vetor idade com 4 posições 
 int posicao; 
 posicao = 0; 
 
 while (posicao < 4) 
 { 
 cout << "Digite a idade " << posicao << ":"; //mostra na tela 
 cin >> idade[posicao]; //posição posicao do vetor idade 
 // recebe valor digitado 
 posicao = posicao + 1; 
 } 
 
35________________________________________ Algoritmos e Estrutura de Dados I 
 
 posicao = 0; 
 
 while (posicao < 4) 
 { 
 //mostra a idade armazenada no vetor idade 
 cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; 
 posicao = posicao + 1; 
 } 
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
 
2ª Solução com for 
 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
int main(int argc,char *argv[]) 
{ 
 int idade[4]; //declaração do vetor idade com 4 posições 
 int posicao; 
 
 for(posicao = 0; posicao < 4; posicao++) 
 { 
 cout << "Digite a idade " << posicao << ":"; //mostra na tela 
 cin >> idade[posicao]; //posição posicao do vetor idade 
 // recebe valor digitado 
 } 
 
 for(posicao = 0; posicao < 4; posicao++) 
 { 
 //mostra a idade armazenada no vetor idade 
 cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; 
 } 
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
36________________________________________ Algoritmos e Estrutura de Dados I 
 
 
2ª Solução com do...while 
 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
 int idade[4]; //declaração do vetor idade com 4 posições 
 int posicao; 
 posicao = 0; 
 
 do 
 { 
 cout << "Digite a idade " << posicao << ":"; //mostra na tela 
 cin >> idade[posicao]; //posição posicao do vetor idade 
 // recebe valor digitado 
 posicao = posicao + 1; 
 }while (posicao < 4); 
 
 posicao = 0; 
 
 do 
 { 
 //mostra a idade armazenada no vetor idade 
 cout << "Idade " << posicao << ": " << idade[posicao] << "\n"; 
 posicao = posicao + 1; 
 }while (posicao < 4); 
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
 
Problema3: Ler a nota de 10 alunos e mostrar as notas digitadas. 
 
#include <cstdlib> 
#include <iostream> 
using namespace std; 
int main(int argc, char *argv[]) 
37________________________________________ Algoritmos e Estrutura de Dados I 
 
{ 
 int Notas[10], cont; 
 cont = 0; 
 while (cont < 10) 
 { 
 //Escreve na tela pedindo a nota do aluno 
 cout << "Digite a nota " << cont + 1 << " : "; 
 cin>> Notas[cont]; //guarda no vetor Notas a nota digitada 
 cont ++; //incrementa 1 em cont 
 } 
 cont = 0; 
 while (cont < 10) 
 { 
 cout << Notas[cont] << " "; //Escreve na tela a nota do aluno 
 cont++; 
 } 
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
} 
Matriz (Array bidimensional) 
Uma matriz é uma variável composta homogênea bidimensional formada por 
uma seqüência de variáveis, todas do mesmo tipo, com o mesmo identificador e 
alocadas seqüencialmente na memória. Uma vez que as variáveis têm o mesmo 
nome, o que as distingue são índices que referenciam sua localização dentro da 
estrutura. 
A matriz é composta por linhas e colunas 
Declaração de matriz 
<nome>[linha, coluna]: tipo; 
Exemplo: 
A[3, 5]: inteiro; 
 
Atribuição de valores a uma matriz 
Para i 1 até 3 faça 
Início 
 Para j 1 até 5 faça 
 Leia A[i, ,j]; 
38________________________________________ Algoritmos e Estrutura de Dados I 
 
Fim; 
 
Apresentar uma matriz 
Para i 1 até 3 faça 
Início 
 Para j 1 até 5 faça 
 Escreva A[i, j]; 
Fim; 
 
Exemplos resolvidos 
1) Elabore um algoritmo que leia de 50 alunos a matrícula, 3 notas recebidas 
durante o curso. Após obter estas informações de cada aluno, calcule a nota final. 
Armazene todas estas informações em uma matriz. 
 
Solução: 
Inicio 
 Declare linha, coluna Numérico //variáveis que indicam a posição na matriz 
 Notas[50,5] Numérico //matriz 50 x 5, 50 linhas e 5 colunas 
 
 Para linha ← 0 até linha < 50 faça 
 Inicio 
 posicao ← 0 
 Escreva “Digite a matrícula: “ 
 Leia Notas[linha][posicao] 
 
Para posicao ← 1 até posicao < 4 faça 
Inicio 
 Escreva “Digite a nota: “ 
 Leia Notas[linha][ posicao] 
Fim 
 Fim 
 
 Para linha ← 0 até linha < 50 faça 
 Inicio 
 Para posicao ← 1 até posicao < 4 faça 
 Notas[linha][4] ← Notas[linha][4] + Notas[linha][ posicao] 
 Fim 
Fim. 
39________________________________________ Algoritmos e Estrutura de Dados I 
 
 
1) Elabore um algoritmo que carregue: 
i. Um vetor com oito códigos de lojas 
ii. Outro vetor com quatro posições com os códigos dos produtos 
iii. Uma matriz com os preços de todos os produtos em cada loja 
O algoritmo deve mostrar todas as relações (código produto – código loja) 
nas quais os preços não ultrapasse R$ 120,00. 
 
Solução: 
Programa Loja; 
Var 
 lojas[8], produtos[4]: inteiro; 
 pre[4,8]:real; 
 posicao, linha, coluna: inteiro; 
Inicio 
 Para posicao ← 0 até 8 faça 
 Leia lojas[posicao] 
 
 Para posicao ← 0 até 4 faça 
 Leia produtos[posicao] 
 
 Para linha ←0 até linha < 4 faça 
 Inicio 
 Para coluna ←0 até 8 faça 
 Leia pre[linha, coluna] 
 Fim; 
 
 Para linha ← 0 até 4 faça 
 Inicio 
 Para coluna ← 0 até 8 faça 
 Inicio 
 Se (pre[linha, coluna] < 120) então 
 Escreva produtos[linha], lojas[coluna] 
 Fim; 
 Fim; 
Fim; 
 
 
40________________________________________ Algoritmos e Estrutura de Dados I 
 
10. SUBPROGRAMA 
Subprogramas, também chamados de sub-rotinas, são blocos de 
instruções que realizam tarefas específicas. São utilizados frequentemente 
nas várias linguagens de programação para facilitar a construção dos 
programas, pois, uma ação executada várias vezes pode ser chamada 
através de uma sub-rotina. 
Características 
• Cada subprograma tem um único ponto de entrada 
• A unidade de programa chamadora é suspensa durante a execução 
do subprograma chamado, o que implica na execução de um único 
subprograma em cada momento. 
• Ao encerrar o subprograma, o controle retorna ao chamador. 
• Um subprograma pode ser executado quantas vezes for 
necessário. 
• Com sub-rotinas os programas tendem a ficar menores e mais 
organizados, uma vez que o problema pode ser subdividido em 
pequenas tarefas. 
 
Cabeçalho de um subprograma 
 
Subprograma <identificador>(var1:tipo, var2:tipo, ..., varn:tipo) 
 
Exemplo de algoritmo em pseudocódigo 
Programa Salário; 
Var 
sal, aum, novo_sal: real; 
início 
Leia sal; 
aum  calculo(sal); 
 novo_sal  sal + aum; 
 Escreva novo_sal; 
Fim; 
 
Subprograma calculo(sal: real) 
Var 
 perc, valor: real; 
41________________________________________ Algoritmos e Estrutura de Dados I 
 
 Início 
Leia perc; 
valor  sal * perc / 100; 
Retorne valor; 
Fim; 
Passagem de parâmetro por valor 
Passagem de parâmetro por valor significa que, para a execução da função, 
serão geradas cópias dos valores de cada um dos parâmetros. 
 
Passagem de parâmetro por referência 
Passagem de parâmetro por referência significa que os parâmetros passados 
para uma função correspondem ao endereço de memória ocupados pelas 
variáveis. 
 
42________________________________________ Algoritmos e Estrutura de Dados I 
 
Exercícios Resolvidos 
1. Faça uma função que retorne 1 (verdadeiro) se o número digitado for positivo 
ou 0 (falso) se o número for negativo. 
Programa Num_Positivo; 
Var 
 num, x: inteiro; 
Início 
 Leia num; 
 x verifica(num); 
 Se (x = 0) então 
 Escreva “Numero positivo”; 
 Senão 
 Escreva “Numero negativo”; 
Fim; 
 
Subprograma Verifica(num: inteiro) 
Var 
 res:inteiro; 
Início 
 Se num >= 0 então 
 res 1; 
 Senão 
 res  0; 
 Retorne res; 
Fim; 
 
 
2. Faça uma função que transforme e mostre segundos em hora, minutos e 
segundos. Todas as variáveis devem ser passadas como parâmetro, não 
havendo variáveis globais. 
 
Programa Trans_seg; 
Var 
 seg: inteiro; 
Início 
 Leia seg; 
 transforma(seg);Fim; 
43________________________________________ Algoritmos e Estrutura de Dados I 
 
 
Subprograma transforma(num: inteiro) 
Var 
 h, m, s, r: inteiro; 
Início 
 h  num / 3600; 
 r  Resto(num / 3600); 
 m  r / 60; 
 s  Resto(r / 60); 
 Escreva h, m, s; 
Fim; 
 
 
3. Faça um procedimento que receba como parâmetro um valor inteiro que 
caracteriza o nível de um alarme, informe a gravidade conforme tabela aseguir: 
Nível Classificação 
1 à 2 Informativo 
3 à 4 Alerta de erro 
5 à 6 Alarme de prioridade alta 
7 à 8 Emergência 
 
Programa Alarme; 
Var 
 nivel: inteiro; 
Início 
 Leia nivel; 
Aviso(nivel); 
Fim; 
 
Subprograma Aviso(num: inteiro) 
Início 
Se ((nível >= 1) e (nível <= 2) então 
Escreva (“Aviso informativo: baixa prioridade”); 
Senão se ((nível >= 3) e (nível <= 4) então 
Escreva (“Aviso de erro: fique atento”); 
Senão se ((nível >= 5) e (nível <= 6) então 
Escreva (“Alarme de alta prioridade! Ação corretiva faz-se necessário”); 
Senão se ((nível >= 7) e (nível <= 8) então 
Escreva (“Alarme de emergência! Ação corretiva imediata”); 
Fim; 
44________________________________________ Algoritmos e Estrutura de Dados I 
 
 
Exercício de Fixação 
1) Foi realizada uma pesquisa de algumas características físicas de cinco 
habitantes de uma certa região. De cada habitante foram coletados os seguintes 
dados: sexo (F ou M), cor dos olhos (A – azuis ou C – castanhos), cor dos cabelos 
(L – louros, P – pretos ou C – castanhos) e idade. 
– Faça uma função que leia esses dados e armazene em uma matriz. 
Determine, por meio de outra função, a média de idade das pessoas com 
olhos castanhos e cabelos pretos. Mostre esse resultado no programa 
principal 
– Faça uma função que determine e devolva ao programa principal a maior 
idade entre os habitantes. 
– Faça uma função que determine e devolva ao programa principal a 
quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35 
(inclusive) e que tenham olhos azuis e cabelos louros. 
 
2) Resolva o fatorial de um número utilizando subprograma. Para isto, leia o valor 
no programa principal, calcule em uma sub-rotina e imprime o resultado no 
programa principal. 
45________________________________________ Algoritmos e Estrutura de Dados I 
 
3ª Trabalho em Equipe 
 
INSTRUÇÕES: 
� Entrega fora da data prevista terá penalidade de 1 ponto no primeiro dia de 
atraso e 0,5 pontos a cada dia consecutivo. 
� Máximo 5 integrantes, 5 será descontado 1 ponto por integrante excedente. 
� Entregar em folha A4. 
 
1) Ler 5 números, armazenando-os no vetor X[5]. Calcular a soma destes 5 
números e mostrá-la na tela. 
2) Escreva um algoritmo que leia e mostre um vetor de 20 elementos inteiros. 
A seguir, conte quantos valores pares existem no vetor. 
3) Escreva um algoritmo que leia dois vetores de 10 posições e faça a 
multiplicação dos elementos de mesmo índice, colocando o resultado em 
um terceiro vetor. Mostre o vetor resultante. 
 
4) Escreva um algoritmo que leia um vetor de 10 elementos inteiros. Depois, 
encontre e mostre o menor elemento e sua posição no vetor. 
5) Elabore um algoritmo e um programa em C para ler duas matrizes A e B, 
cada uma com 5 linhas e 3 colunas. Construir uma matriz C de mesma 
dimensão, que seja formada pela soma dos elementos da matriz A com os 
elementos da Matriz B. Apresentar os elementos da matriz C. 
6) Elabore um algoritmo e um programa em C para ler uma matriz A de 
10 linhas e 10 colunas. Apresentar o somatório dos elementos situados 
na diagonal principal (A[1,1], A[2,2], A[3,3]...A[10,10]) da matriz. 
7) Escrever um algoritmo que lê uma matriz M(10x10) e a escreve. Troque, a 
seguir: 
a) linha 2 com a linha 8 
b) a coluna 4 com a coluna 10 
c) a diagonal principal com a diagonal secundária 
d) a linha 5 com a coluna 10 
Escreva a matriz assim modificada. 
Obs : Diagonal principal e diagonal secundária 
 
46________________________________________ Algoritmos e Estrutura de Dados I 
 
 
Principal Secundária 
X X 
 X X 
 X X 
 X X 
 
8) Elabore um algoritmo para ler 20 números inteiros e armazená-los em 
uma matriz 5 X 4. Em seguida armazenar em dois vetores (um de 5 
elementos e um de 4) o somatório das linhas e das colunas da matriz. Ao 
final, mostrar a matriz digitada e as somas das linhas e colunas. 
9) Uma empresa fez uma pesquisa de mercado para saber se as pessoas 
gostaram ou não de um novo produto lançado no mercado. Para isso forneceu 
o sexo do entrevistado (“M” ou “F”) e sua resposta (“S” ou “N”). Sabendo-se 
que foram entrevistadas 20 pessoas, elabore um algoritmo para calcular e 
informar: 
a) Número de pessoas que responderam “Sim”; 
b) Número de pessoas que responderam “Não”; 
c) Percentual de pessoas do sexo feminino que responderam “Sim”; 
d) Percentual de pessoas do sexo masculino que responderam “Não”; 
10) Uma empresa de pesquisa deseja saber algumas informações sobre a renda 
média da população no estado de Minas Gerais, para isso, efetuou uma 
amostragem em 100 municípios. Cada cidade foi mapeada em 5 regiões, norte, 
sul, leste, oeste e centro. Deseja-se saber a renda média da população, a região 
com maior renda média, a com menor renda média e a diferença entre as duas. 
Para solução deste problema é necessário uma matriz e um vetor. 
11) Uma empresa de construção civil têm 6 obras em diferentes locais. O custo de 
cada obra é calculado com base em cinco itens, enumerados da seguinte 
maneira: 
� Mão de obra; 
� Material; 
� Transporte, 
� Equipamentos; 
� Custo administrativo. 
 Faça um algoritmo que armazene em uma matriz todas os dados referente a cada 
obra, informa o total gasto por obra, o custo por item em todas as obras e o 
custo total. 
47________________________________________ Algoritmos e Estrutura de Dados I 
 
Dica: As linhas da matriz podem representar a obra e as colunas os itens 
12) Considere um prédio residencial com 10 andares e 4 apartamentos por andar. 
Considere que cada apartamento possui um sensor de alarme que pode estar 
ativo (1) ou não (0). Com base nesta formulação, faça um algoritmo que 
preencha uma matriz, onde as linhas representam os andares e as colunas os 
apartamentos. Execute outro loop procurando se existe algum alarme ativo, 
caso encontre algum, informe o andar e o apartamento, sendo que o número 
do apartamento é obtido multiplicando o andar por 100, mais a posição do 
apartamento, ou seja: 
Num_apto = linha matriz * 100 + coluna matriz. 
 
13) Coloque o exemplo anterior em um loop cíclico, executando assim uma 
varredura no sistema de alarme a todo momento. 
14) Faça uma sub-rotina que receba três números inteiros como parâmetros, 
representando horas, minutos e segundos, e os converta em segundos. 
 Exemplo: 2 h, 40 min e 10 s corresponde a 9.610 segundos. 
15) Faça uma sub-rotina que receba um número inteiro positivo (n) como 
parâmetro, retorne a soma dos números inteiros existentes entre 1 e n 
(inclusive). 
16) Faça uma sub-rotina que receba como parâmetro dois vetores de dez números 
reais, determine e mostre o conjunto (elementos) da intersecção entre eles. Os 
valores dos vetores devem ser informados pelo usuário no programa principal. 
Os valores que compõem a intersecção dos vetores, são aqueles que se 
encontram nos dois vetores. 
17) Escreva um algoritmo que permita a leitura das notas de uma turma de 60 
alunos, faça uma sub-rotina para calcular e escrever a média da turma e 
quantos alunos obtiveram nota acima desta média. 
18) Escreva umprograma em C utilizando subprograma que efetue a conversão 
de temperatura em graus Celsius para Fahrenheit. 
19) Escreva um algoritmo e um programa em C utilizando subprograma que 
calcule o fatorial de um número n qualquer. 
20) Pesquise qual a vantagem em se utilizar subprogramas em algoritmos. 
48________________________________________ Algoritmos e Estrutura de Dados I 
 
21) Qual a diferença entre passagem de parâmetro por valor e passagem de 
parâmetro por referência? Caso seja necessário economizar o máximo de 
espaço possível, qual das duas você utilizaria? Explique o motivo. 
22) Qual a diferença entre procedimento e função? 
 
REFERÊNCIA BIBLIOGRÁFICA 
ASCENCIO, A. F. G. e Campos, E. A. V., Fundamentos da Programação de Computadores: 
Algoritmos, Pascal, C/C++ e Java, 2ª edição, editora Pearson, 2008. 
 
CORMEM, Thomas H., et al; Algoritmos, Teoria e Prática, Elsevier, 4ª Tiragem, 2001. 
 
SEBESTA, Robert W.. Conceitos de Linguagens de Programação. 5 ed. Porto Alegre: 
Bookman, 2003. 638 p.

Outros materiais