Buscar

INTRODUÇÃO A ALGORITMOS E LINGUAGENS DE PROGRAMAÇÃO - Ivan Moreira

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 41 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 41 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 41 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

Unidade I - INTRODUÇÃO A ALGORITMOS E LINGUAGENS DE PROGRAMAÇÃO 
 
1 ALGORITMOS 
 
I.1.1 DEFINIÇÃO 
 
A palavra algoritmo, à primeira vista, nos parece estranha. Embora possua 
designação desconhecida, fazemos uso constantemente de algoritmos em nosso 
cotidiano: a maneira como uma pessoa toma banho é um algoritmo. Outros algoritmos 
freqüentemente encontrados são: 
 
 Instruções para se utilizar um aparelho eletrodoméstico; 
 Uma receita para preparo de algum prato; 
 Guia de preenchimento para declaração do imposto de renda; 
 A regra para determinação de máximos e mínimos de funções por 
derivadas sucessivas; 
 A maneira como as contas de água, luz e telefone são calculados 
mensalmente. 
 
São vários os conceitos para algoritmo. Escolhemos alguns para serem 
apresentados aqui: 
 
“Um conjunto finito de regras que provê uma seqüência de operações para resolver um 
tipo de problema específico.” 
[KNUTH] 
 
“Seqüência ordenada, e não ambígua, de passos que levam à solução de um dado 
problema.” 
[TREMBLAY] 
 
“Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que 
se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do 
resultado ou da solução do problema.” 
[AURÉLIO] 
 
Um conjunto de instruções organizadas numa sequência lógica, que conduzem o 
interpretador a solucionar um determinado problema. 
ÂNGELO STROLIGO PECLY 
 
 
Resumindo, um algoritmo é uma interpretação, passo a passo, de um 
determinado problema do mundo real, estabelecendo todos os passos na busca de 
uma solução. 
 
Existem duas técnicas que se completam para melhor documentar o algoritmo: 
 
 Diagrama de Blocos: consiste em representar a seqüência de operações do 
algoritmo utilizando símbolos geométricos. 
 Português Estruturado: consiste em transformar o diagrama de blocos numa 
forma narrativa, denominada pseudocódigo, muito próximo de uma linguagem 
computacional. 
I.1.2 CARACTERÍSTICAS 
 
Todo algoritmo deve apresentar algumas características básicas: 
 
 Ter fim; 
 Não dar margem à dupla interpretação (não ambíguo); 
 Capacidade de receber dado(s) de entrada do mundo exterior; 
 Poder gerar informações de saída para o mundo externo ao do ambiente do 
microcomputador; 
 Ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis 
em um tempo finito). 
 
I.1.3 SOLUÇÃO DE PROBLEMAS 
 
 
 
 
O aluno de algoritmos deve ter sempre em mente que a solução de um 
problema do mundo real não está relacionado à informática, a menos que se queira 
informatizar tal solução. 
 
Observe que, pela afirmação anterior a solução já deve existir para que se 
possa informatizá-la, ou seja, primeiro deve-se descobrir a solução do problema, 
independentemente de qualquer ferramenta de informática. 
 
A solução de problemas envolve duas principais etapas: 
 
 Deve-se conhecer/entender muito bem o problema que se deseja solucionar. 
Estude o problema. Leia sobre o problema. Converse com quem conhece o 
problema. Enfim, procure dominar o problema; 
 Busque uma solução para problema. Muitas vezes, basta conhecer o problema 
para solucioná-lo, em outras, deve-se aplicar muito raciocínio lógico para 
encontrar uma solução. 
 
Como já foi dito, algoritmos são utilizados para expressar (escrever, tornar 
legível por outra pessoa) um raciocínio, logo, de posse da solução, basta representá-la 
através de algoritmos, ou seja, traduzir a solução encontrada para uma linguagem 
mais específica e padronizada, para que outras pessoas possam ler o raciocínio 
utilizado para solucionar o problema. 
 
Compreender Solucionar 
Representação 
a solução 
I.1.4 EXEMPLOS 
 
Os algoritmos são comuns em nosso cotidiano como, por exemplo, uma receita 
de bolo. 
Em uma receita de bolo, está descrita uma série de ingredientes necessários e 
uma seqüência de passos a serem cumpridos para atingir o objetivo que é ter um bolo 
pronto. 
 
ALGORITMO 1: Receita de Bolo 
 
Providencie manteiga, ovos, 2 quilos de massa; 
Misture os ingredientes; 
Despeje a mistura na fôrma de bolo; 
Leve a fôrma ao forno; 
Espere 20 minutos; 
Retire a fôrma do forno; 
Deixe esfriar; 
Prove. 
 
Outra atividade algorítmica comum em nosso dia a dia é o ato de trocar uma 
lâmpada queimada. Apesar de aparentemente bastante óbvio, muitas vezes fazemos 
esse tipo de atividade sem percebermos determinados detalhes. Podemos descrever de 
maneira simples: 
 
ALGORITMO 2: Troca de lâmpadas 
 
Pegue uma escada; 
Posicione-a embaixo da lâmpada queimada; 
Pegue uma lâmpada nova; 
Suba na escada; 
Retire a lâmpada velha; 
Coloque a lâmpada nova, desça e guarde a escada. 
 
Já se deparou com alguém lhe abordando na rua e lhe perguntando sobre como 
chegar a algum lugar? Sua resposta à dúvida desta pessoa nada mais é do que um 
algoritmo. 
 
I.1.5 EXERCÍCIOS 
 
1 - Elabore um algoritmo que mova os três discos da haste “1” para a haste “2” ou 
para a haste “3”. Só é possível movimentar um único disco de cada vez para qualquer 
haste, contanto que nunca seja colocado um disco maior sobre um disco menor. O 
objetivo é transferir os três discos para a haste destino, tal como se apresentam 
ordenados na haste “1”, conforme a figura a seguir: 
 
 
 
 
 
2 - Três jesuítas e três canibais precisam atravessar um rio. Para tal, dispõem de um 
barco com capacidade para duas pessoas. Por medidas de segurança não se permite 
que em alguma margem a quantidade de jesuítas seja inferior à de canibais. Qual a 
seqüência de passos que permitiria a travessia com segurança? 
 
3 - Um homem precisa atravessar um rio com um barco que possui capacidade de 
transportar apenas ele mesmo e mais uma de suas três cargas que são: um lobo, um 
bode e um mole de alfafa. O lobo e o bode não podem ficar sozinhos em uma margem, 
pois o lobo comerá o bode. O bode e a alfafa também não podem ficar sozinhos em 
uma margem, pois o bode comerá a alfafa. O que o homem deve fazer para conseguir 
atravessar o rio sem perder suas cargas? 
 
4 - Um algoritmo não pode conter um comando como “Escreva todos os números 
inteiros positivos”. Por quê? 
 
5 – Descreva um algoritmo para trocar o pneu de um carro. 
 
6 – Você dispõe de nove bolas – das quais oito possuem um mesmo peso e uma é 
mais pesada que as demais – e uma balança. Descreva um algoritmo para descobrir 
qual é a bola mais pesada, utilizando-se apenas de duas pesagens na balança. 
 
7 – Você está em uma sala que contém três interruptores. Cada interruptor está ligado 
a uma lâmpada presente em uma sala ao lado. As três lâmpadas estão inicialmente 
apagadas. Descreva um algoritmo para descobrir qual interruptor está ligado a qual 
lâmpada, sabendo que você só pode ir uma única vez à sala ao lado. 
 
8 – Como você descreveria um algoritmo para resolver o problema proposto no 
Exercício 1, porém com quatro discos?
I.2 ESTRUTURAS DE DADOS 
 
 Representação dos dados que serão manipulados pelo algoritmo. 
 
Como representar dados? 
 
 Depende da ferramenta usada na solução; 
 É, geralmente, uma tarefa difícil; 
 Não existe uma única solução; 
 Não existe receita. 
 
Os dados utilizados por um algoritmo podem ser muito simples ou muito 
complexos. Veja os exemplos a seguir: 
 
 Calcular quantos dias faltam para terminar o ano; 
 Este algoritmo manipula dados inteiros, que nos são bastante familiares, ou 
seja, são dados simples. 
 
 Controlar o cadastramento de uma nota fiscal, considerando todo seu cabeçalho 
assim como todo seus itens. 
 Este algoritmo já deve manipularum tipo de dado bem complexo, 
principalmente por ser composto de outros tipos de dados e ainda possuir 
um relacionamento entre o cabeçalho da nota com seus respectivos itens. 
 
Resumindo, deve-se exercitar-se bastante, ou seja, aprender com a prática. 
 
I.3 PROGRAMAS 
 
 Um programa nada mais é que um algoritmo expresso numa linguagem formal, 
Linguagem de Programação. 
 
 A Linguagem de Programação nos faz um grande serviço, o de traduzir um 
programa escrito por nós, respeitando a sintaxe da linguagem escolhida, na linguagem 
reconhecida pelo computador, ou seja, a linguagem binária, que é a única executável 
pelo computador. 
 
I.3.1 O processo de construção de programas: 
 
 compreender o problema do mundo real; 
 solucionar o problema; 
 formular o algoritmo (representação do comportamento); 
 definir as estruturas de dados a serem usadas (representação da informação); 
 transcrever o algoritmo para a linguagem de programação desejada. 
 
Toda linguagem envolve dois aspectos: 
 
 Sintaxe: forma, a correta escrita dos comandos; 
 Semântica: conteúdo, sequência lógica dos comandos; 
 
 
 
 
I.4 LINGUAGENS DE PROGRAMAÇÃO 
 
Nós podemos descrever algoritmos através da língua portuguesa, já que o 
Português é a linguagem que conhecemos e usamos em nossa comunicação. No 
entanto, os computadores só compreendem uma linguagem composta de combinações 
entre zero e um, conhecida como linguagem de máquina, que é bastante complicada 
para nós, seres humanos. Por exemplo, suponhamos que as letras „o‟ e „i‟ sejam 
reconhecidas pela máquina pelos símbolos 10010110 e 01101001, respectivamente. 
Vamos supor também que um comando responsável por escrever algo na tela do 
computador seja 00001111. Pois bem, para escrever a palavra „oi‟ no monitor, seria 
necessário enviar a seguinte mensagem para o computador: 
 
0000111110010110 01101001 
 
Complicado, não? Dá para se ter idéia que, para descrever um algoritmo ao 
computador, fazendo uso da linguagem de máquina, é necessário ter ao lado uma lista 
de códigos compreendidos pela máquina. Além disso, para compreender um algoritmo 
já escrito em linguagem de máquina, também se torna primordial ter em mãos a 
mesma lista de códigos. 
 
Para eliminar este inconveniente, foram criadas a linguagens de programação. 
Estas linguagens são formadas por comandos de alto nível, representados por palavras 
em inglês – já que foram criadas por pessoas oriundas de países de língua inglesa. As 
linguagens de programação possuem um módulo chamado compilador – ou 
interpretador, dependendo da linguagem – que é responsável por traduzir programas 
de computadores em linguagem de máquina. 
 
Alguns exemplos de linguagens de programação são: Fortran, Basic, Cobol, 
Clipper, C e Pascal. Neste documento, abordaremos a linguagem C, por ser bastante 
poderosa, acadêmica e estruturada. 
 
 
 
 
I.5 PORTUGUÊS ESTRUTURADO 
 
A partir deste ponto, começaremos a estudar a representação de algoritmos 
através do Português Estruturado. 
 
I.5.1 TIPOS PRIMITIVOS DE DADOS 
 
VARIÁVEL 
 
Uma variável funciona como um container de algum dado, ou seja, um “lugar” 
onde podemos guardar um valor para ser utilizado ao longo do algoritmo. A primeira 
vista, pode soar estranho ter que guardar dados num “lugar” para poder utilizá-lo 
mais adiante, isso devido ao fato de que em nosso cotidiano fazemos isso de maneira 
muito automática. Vejamos um exemplo de forma mais minuciosa: 
 
 Considere o valor 5; 
 Considere o valor 3; 
 Considere a operação de adição; 
 Qual o resultado da operação? 
 
Automaticamente dizemos oito, sem pestanejar. Mas o que realmente fizemos? 
Ao considerar o valor 5, nosso cérebro armazenou este valor em algum lugar em nossa 
memória. Com o segundo valor aconteceu a mesma coisa, porém o valor 3 foi 
armazenado num lugar diferente do primeiro valor. Os dois valores não poderiam ser 
armazenados no mesmo lugar pois o segundo valor sobrescreveria o primeiro. A 
terceira informação, a operação desejada, também foi armazenada em nossa 
memória, num terceiro lugar. Ao considerar o comando para efetuar o cálculo, nosso 
cérebro, de posse de todos os argumentos necessários, efetua o cálculo e também 
armazena o resultado numa posição de nossa memória. 
 
No ambiente computacional, já pensando em como representar o raciocínio 
acima através de um algoritmo, devemos considerar uma variável como sendo uma 
referência à uma posição da memória principal do computador, é como se 
estivéssemos dando nomes às posições de nossa memória (cérebro). Assim sendo, 
para resolvermos o cálculo acima, precisaremos de três variáveis, as duas primeiras 
para armazenar os dois primeiros valores e a terceira para armazenar o resultado. O 
comando de adição, no alto nível de raciocínio em que é escrito um algoritmo, não 
precisará ser armazenado na memória. Dessa forma, podemos esboçar um pequeno 
algoritmo: 
 
A=5; 
B=3; 
C=A+B; 
 
Por todo raciocínio descrito acima, o resultado armazenado na variável C é o 
número inteiro 8. 
 
TIPOS DE DADOS 
 
As variáveis utilizadas anteriormente respeitam, perfeitamente, as regras 
impostas pelo Português Estruturado para se descrever algoritmos, porém, antes de 
utilizar uma variável, devemos antes criá-las, ou seja, requisitar ao computador que 
reserve uma posição de memória para um determinado tipo de dado e que construa a 
referência desta posição de memória ao nome dado pelo programador como 
identificador da variável. 
 
Na afirmação acima podemos constatar algumas características fundamentais 
de uma variável: 
 
 A posição de memória reservada; 
 Não estaremos preocupados com esta informação no contexto deste curso. 
 O identificador da variável; 
 É o nome que damos à variável para que possamos referenciá-la durante o 
desenvolvimento do algoritmo. 
 O tipo de dado a ser armazenado. 
 Esta informação é de suma importância, pois cada tipo de dado ocupa um 
determinado espaço na memória, por exemplo, um número inteiro ocupa menos 
espaço que um nome de uma pessoa. 
 
O nome/identificador de uma variável pode ser uma seqüência de um ou mais 
caracteres alfabéticos e numéricos, iniciados por uma letra ou ainda pelo caracter „_‟. 
Os nomes não podem conter outros símbolos gráficos, operadores ou espaços em 
branco. É importante ressaltar que as letras minúsculas são consideradas diferentes 
das letras maiúsculas, assim temos como exemplos válidos: 
 
a total x2 min_sal 
_especial VALOR Maximo ExpData 
 
Seguindo as mesmas regras temos abaixo exemplos inválidos de nomes de 
variáveis: 
 
1x Total geral numero-minimo 
 
A razão destes nomes serem inválidos é simples: o primeiro começa com um 
algarismo, o segundo possui um espaço em branco e o terceiro contém o operador de 
subtração. 
 
Além das regras de formação de nome em si (identificadores), uma variável não 
pode utilizar como identificador uma palavra reservada da linguagem. 
 
Desta forma para declararmos uma variável devemos seguir a seguinte sintaxe: 
 
tipo nome1 [, nome2 [, nome3 [ …, nomeN]]]; 
 
Ou seja, primeiro indicamos um tipo, depois declaramos uma lista contendo um 
ou mais nomes (identificadores) de variáveis desejadas deste tipo, onde nesta lista os 
nomes são separados por vírgulas e a declaração terminada por „;‟ (ponto-e-vírgula). 
 
No Português Estruturado existem os seguintes tipos de dados: 
 
Tipo Tamanho/Formato Descrição 
Numéricas 
Int 32-bit complemento a dois Inteiro 
Real 32-bit IEEE 754 Ponto flutuante 
Outros tipos 
Logico 8-bit Tipo booleano(true e false) 
char 8-bit Um único caracter 
String 8-bit por caractere Conjunto de caracteres 
 
Vejamos alguns exemplos: 
 
int i; 
real total, preco; 
 
Também é possível definirmos um valor inicial para uma variável diretamente 
em sua declaração: 
 
int quantidade = 0; 
real angulo = 1.57; 
logico ok = false; 
char letra = „c‟; 
string nome = “Unesa”; 
 
Algumas observações importantes: 
 
 Um número em ponto flutuante é sempre representado com um “.” (ponto) 
para separar a parte inteira da fracionária; 
 O dado do tipo char deve ser representado sempre entre aspas simples „‟; 
 O dado do tipo string deve ser representado sempre entre aspas “”; 
 O dado do tipo booleano possui apenas os valores true e false, sempre SEM 
aspas; 
 
COMENTÁRIOS 
 
Comentários são trechos de texto, usualmente explicativos, inseridos no 
programa de forma que não sejam considerados como parte do código, ou seja, são 
informações deixadas juntamente com o código como informação para quem 
programa. 
 
O Português Estruturado aceita dois tipos de comentários: 
 
 de uma linha 
 de múltiplas linhas 
 
O primeiro, de uma linha, utiliza duas barras (//) para marcar seu início: 
 
// comentário de uma linha 
// tudo após as duas barras é considerado comentário 
 
O segundo usa a combinação /* e */ para delimitar uma ou mais linhas de 
comentários: 
 
/* comentário 
 de múltiplas linhas */ 
 
OPERADORES 
 
Operadores aritméticos 
 
Operador Uso Descrição 
+ op1 + op2 Soma op1 com op2 
- op1 - op2 Subtrai op2 de op1 
* op1 * op2 Multiplica op1 por op2 
/ op1 / op2 Divide op1 por op2 
% op1 % op2 Calcula o resto da divisão inteira de op1 por op2 
div op1 div op2 Calcula o quociente da divisão inteira 
** op1 ** op2 Calcula op1 elevado à potência op2 
 
Operadores relacionais 
 
Operador Uso Retorna verdadeiro se 
> op1 > op2 op1 é maior que op2 
>= op1 >= op2 op1 é maior ou igual que op2 
< op1 < op2 op1 é menor que op2 
<= op1 <= op2 op1 é menor ou igual que op2 
== op1 == op2 op1 e op2 são iguais 
!= op1 != op2 op1 e op2 são diferentes 
 
Operadores Lógicos 
 
Operador Uso Retorna verdadeiro se 
&& op1 && op2 
Ambos op1 e op2 são verdadeiros. Avalia a expressão op1 e 
condicionalmente avalia a expressão op2 
|| op1 || op2 
Ou op1 ou op2 é verdadeiro. Avalia a expressão op1 e 
condicionalmente avalia a expressão op2 
! ! op Negação de op 
 
 
 
 
Operadores de atribuição 
 
Operador Uso Equivalente a 
= op1 = op2 op1 recebe o valor de op2 
+= op1 += op2 op1 = op1 + op2 
-= op1 -= op2 op1 = op1 – op2 
*= op1 *= op2 op1 = op1 * op2 
/= op1 /= op2 op1 = op1 / op2 
%= op1 %= op2 op1 = op1 % op2 
 
EXERCÍCIOS 
 
1 – Defina variável. 
 
2 – Qual a finalidade de declararmos uma variável? 
 
3 – Escreva o tipo de dado ideal para se representar as seguintes informações: 
 a) O número da conta bancária; 
 b) A altura de uma pessoa em metros; 
 c) A placa de um veículo; 
 d) O número de filhos de uma pessoa; 
 e) A população de um país; 
 f) A cor de um objeto. 
 
4 – Quais os tipos de dados nativos do Português Estruturado? 
 
5 – Quais os valores possíveis para um dado do tipo Logico? 
 
6 – O que é uma string? 
 
7 – Identifique os tipos dos seguintes dados: 
 a) "Processamento de Dados" 
 b) 0.4 
 c) "4.5E10" 
 d) true 
 e) '?' 
 f) ' ' 
 g) -5.3E-02 
 h) ".05" 
 i) "false" 
 j) 0 
 
8 – O que são identificadores? 
 
9 – Quais as regras básicas para a formação de identificadores? 
 
10 – Assinale os identificadores inválidos, justificando. 
 a) A1BC 
 b) XA,1d 
 c) NomeDoAluno 
 d) 198aberto 
 e) prog 
11 - Escreva os comandos necessários para declarar: uma variável que receba 
uma frase, três variáveis que recebam as três notas de um aluno e uma variável que 
receba a idade de uma pessoa. 
 
12 – Qual a finalidade de um comentário dentro de um programa? Como deve 
ser escrito em Português Estruturado? 
 
 
ESTRUTURA DE UM ALGORITMO ESCRITO EM PORTUGUÊS ESTRUTURADO 
 
Algoritmo, assim como muitas linguagens de programação, é uma linguagem 
altamente estruturada que possui uma rigidez definida, embora sua estrutura de 
programa seja flexível. Cada seção ou parte de um programa deve aparecer numa 
seqüência apropriada e ser sistematicamente correta, senão ocorrerá um erro. 
 
Por outro lado, não há regras específicas para o uso de espaço e linhas 
quebradas, dando ao programador liberdade para escrever programas mais adequados 
ao seu estilo. 
 
Um algoritmo escrito em Português Estruturado tem o seguinte formato: 
 
PROG <identificador> 
tipo identificador1 [,identificador2 [,identificador3 [,identificador N]]]; 
[<comando1>;] 
[...;] 
[<comandoN>;] 
FIMPROG 
 
COMANDOS DE ENTRADA E SAÍDA DE DADOS 
 
SAÍDA 
 
Normalmente, em programação, quando nos referimos à saída de dados 
estamos particularmente interessados em exibir mensagens no monitor do 
computador. O comando utilizado para isso é o imprima, veja a sintaxe acompanhada 
de alguns exemplos: 
 
imprima expressão ou variável ; 
 
Algoritmo 01 
prog imp1 
 imprima “Aprendendo algoritmo!!!”; 
fimprog 
 
Este algoritmo faz com que seja exibida, na tela do computador, a mensagem: 
Aprendendo Algoritmo!!! 
 
Algoritmo 02 
prog imp2 
 int x; 
x=10; 
 imprima “Valor de x = ”, x; 
fimprog 
 
Este algoritmo faz com que seja exibida, na tela do computador, a mensagem e 
o conteúdo da variável x: Valor de x = 10 
 
Algoritmo 03 
prog imp3 
 int x; 
x=10; 
 imprima “Resultado = ”, x+1; 
fimprog 
 
Este algoritmo faz com que seja exibida, na tela do computador, a mensagem e 
o conteúdo da variável x acrescido em uma unidade, sem alterar o valor de x: 
Resultado = 11. 
 
 
ENTRADA 
 
O comando de entrada faz com que uma informação digitada no teclado, pelo 
usuário, entre no computador e fique armazenada numa variável previamente 
declarada, ou seja, o dado digitado parte do teclado e vai direto para uma posição de 
memória RAM, veja a sintaxe acompanhada de alguns exemplos: 
 
leia nome da variável ; 
 
Algoritmo 04 
prog leia1 
 int x; 
leia x; 
 imprima “Número lido = ”, x; 
fimprog 
 
Este algoritmo exibirá, na tela do computador, a mensagem e o número 
digitado pelo usuário. 
 
EXPRESSÕES 
 
O conceito de expressão em termos computacionais está intimamente ligado ao 
conceito de expressão matemática onde um conjunto de variáveis e constantes 
numéricas relacionam-se por meio de operadores compondo uma fórmula que, ao ser 
avaliada, resulta num valor. As expressões se dividem em: 
 
 Aritméticas 
Nas expressões aritméticas fazemos o uso dos operadores aritméticos que são 
símbolos utilizados para efetuarmos cálculos matemáticos. Os operadores aritméticos 
são utilizados somente com dados do tipo int e do tipo real. 
 
Expressão Resultado 
3 + 2 5 
8 – 5 3 
3 * 3.5 10.5 
5 / 2 2.5 
A=5; 
A div 2; 
2 
A=5; 
B=2; 
C = A % B; 
C vale 1 
 
Prioridades 
 
As prioridades seguem o mesmo contexto das regras de precedência nas 
expressões matemáticas. Segue abaixo uma tabela contendo as prioridades e suas 
exceções. 
 
Prioridade Operadores 
1ª * / div % 
2ª + - 
 
Observações: 
 
1 – Quando houver expressões com operadores de mesma prioridade, 
executa-se da esquerda para direita. 
 
2 – A utilização de parênteses indica que as expressões contidas nos 
mesmos tem prioridade máxima. E se houver parêntese aninhados os 
parênteses mais internostem prioridade. 
 
 Relacionais e Lógicas 
 
As expressões lógicas sempre retornaram true (Verdadeiro) e false (Falso). 
Para se montar expressões lógicas utilizamos de operadores relacionais e operadores 
lógicos. Veremos como funciona cada um destes operadores e exemplificaremos cada 
um deles. A utilização das expressões lógicas somente serão aplicadas em termos com 
o mesmo tipo de dados. 
 
 
Expressão Resultado 
1 == 2 false 
„A‟ == „a‟ False 
5 > 2 True 
3 <= 3 True 
true < false False 
„JOAO‟ > „JOSE‟ False 
(2 + 3) != 5 False 
„comp‟ != „COMP‟ True 
11 > 4 True 
 
 
 
EXERCICIOS RESOLVIDOS 
 
1- Considerando que X = 1, Y = 2 e Z = 5, desenvolva. 
 
a) Z % Y div Y 
b) X + Y + Z / 3 
 
2- Dadas as comparações abaixo, escreva os resultados. 
 
a) 3 == 3.0 
b) „a‟ <= „A‟ 
c) „ „ == „ „ 
d) „CASA‟ != „casa‟ 
e) false == false 
f) „JOAQUIM‟ < „JOSE‟ 
g) „22‟ > „200‟ 
 
3- Sendo A = true e B = false. Qual o resultado das expressões abaixo 
 
a) !A && B || A && !B 
b) !(!(A || B) && (A || B)) 
c) A || B && !A || !B 
d) (A || B) && (!A || B) 
 
GABARITO 
1- a) Resp.: 5 mod 2 div 2 -> 1 div 2 -> 0 
b) Resp.: 1 + 2 + 5 / 3 -> 3 + 1.667 -> 4.667 
 
2- a) Resp.: false 
 b) Resp.: false 
 c) Resp.: true 
 d) Resp.: true 
 e) Resp.: true 
 f) Resp.: true 
 g) Resp.: true 
 
3- a) Resp.: true 
b) Resp.: true 
c) Resp.: true 
 d) Resp.: false 
 
EXERCÍCIOS 
 
Algoritmo 05 
Construa um algoritmo que obtenha do usuário, via teclado, o seu nome e exiba 
a mensagem: Olá <nome digitado>! 
 
Algoritmo 06 
Construa um algoritmo que imprima o produto entre 28 e 43. 
 
Algoritmo 07 
Construa um algoritmo que imprima a média aritimética entre os números 8, 9 
e 7. 
 
Algoritmo 08 
Construa um algoritmo que leia um número inteiro e imprima seu antecessor e 
seu sucessor. 
 
Algoritmo 09 
Construa um algoritmo que leia um nome, um endereço e um telefone e 
imprima-os na tela do micro. 
 
Algoritmo 10 
Construa um algoritmo que leia dois números inteiros e imprima a soma. Antes 
do resultado, deverá aparecer a mensagem: Soma. 
 
Algoritmo 11 
Construa um algoritmo que leia dois números inteiros e imprima o produto. 
 
Algoritmo 12 
Construa um algoritmo que leia um número real e imprima a terça parte deste 
número. 
 
Algoritmo 13 
Construa um algoritmo que obtenha do usuário, via teclado, dois números 
inteiros e mostre a média destes números. 
 
Algoritmo 14 
Construa um algoritmo que obtenha do usuário/aluno o seu nome e suas duas 
melhores notas em Av´s. Como resultado o algoritmo deve exibir o nome do aluno 
seguido de sua média. 
 
Algoritmo 15 
Construa um algoritmo que obtenha o nome e o sobrenome de uma pessoa e, 
como resultado, escreva-os na seguinte forma: sobrenome seguido por uma vírgula e 
pelo nome. 
Exemplo: entrada: “Ângelo”, “Pecly” 
saída: Pecly, Ângelo 
 
Algoritmo 16 
Construa um algoritmo que leia um número inteiro positivo e exiba o dobro do 
mesmo. 
 
Algoritmo 17 
Construa um algoritmo que leia dois números inteiros e imprima a seguinte 
saída: 
Dividendo: 
Divisor: 
Quociente: 
Resto: 
 
Algoritmo 18 
Construa um algoritmo que leia um número inteiro de três casas e imprima o 
algarismo da casa das dezenas. 
 
 
Algoritmo 19 
Construa um algoritmo que leia uma data no formato ddmmaa e imprima: dia, 
mês e ano separados. 
 
Algoritmo 20 
Construa um algoritmo que leia uma data no formato ddmmaa e imprimano 
formato mmddaa. 
 
Algoritmo 21 
Construa um algoritmo que leia quatro números inteiros e imprima a média 
ponderada, sabendo-se que os pesos são respectivamente 1, 2, 3 e 4. 
 
Algoritmo 22 
Construa um algoritmo que leia um saldo de uma aplicação bancária e imprima 
este saldo reajustado em 2%. 
 
Algoritmo 23 
Construa um algoritmo para calcular a área de um triângulo, sendo dados a sua 
base e a sua altura. 
 
Algoritmo 24 
Construa um algoritmo para calcular e exibir o comprimento de uma 
circunferência, sendo dado o valor de seu raio. 
 
C= 2πR 
Defina π como sendo uma constante de valor igual a 3.1415. 
 
Algoritmo 25 
Construa um algoritmo para ler uma temperatura dada na escala Fahrenheit e 
exibir o equivalente em Celsius. 
 
 
Algoritmo 26 
 Construa um algoritmo que leia duas variáveis inteiras e troque o conteúdo de 
uma com a outra. 
 
Algoritmo 27 – Desafio 01 
 Construa um algoritmo que leia um número inteiro e informe se ele é maior 
que zero. 
 
 
 
 
ESTRUTURAS DE SELEÇÃO 
 
Um programa de computador é uma seqüência de instruções organizadas de 
forma tal a produzir a solução de um determinado problema. Naturalmente tais 
instruções são executadas em seqüência, o que denomina-se fluxo seqüencial de 
execução. Em inúmeras circunstâncias é necessário executar as instruções de um 
programa numa ordem diferente da estritamente seqüencial. Tais situações são 
caracterizadas pela necessidade de repetição de instruções individuais ou grupos de 
instruções e também pelo desvio do fluxo de execução. 
 
As linguagens de programação tipicamente possuem alguns comandos 
estruturados destinados ao controle do fluxo de execução, isto é, estruturas que 
permitem a repetição e o desvio do fluxo de execução. 
 
Para que fique mais claro, vamos, mais uma vez, considerar um exemplo do 
nosso cotidiano. Imagine que você esteja planejando passar o fim de semana numa 
praia, mas esteja preocupado com as condições do clima, dessa forma você teria, 
naturalmente, o seguinte raciocínio: ...amanhã, SE fizer um dia ensolarado, viajarei 
para praia, MAS SE estiver chovendo, passarei pela locadora de vídeo. 
 
Por este exemplo, fica evidente que alguns “comandos” não serão executados, 
ou seja, se você for à praia, não irá à locadora. Você fará uma coisa ou outra. Neste 
tipo de situação, os “comandos” excluídos pela condição nunca serão executados. 
 
COMANDO SE 
 
No Português Estruturado, para que se implemente um desvio simples no fluxo 
de execução do programa, deve-se utilizar o comando se. Este comando deve 
respeitar a seguinte sintaxe: 
 
se ( expressão lógica ) { 
 comando1_1; 
 [ coamndo1_2; 
 comando1_N;] 
} [ senao { 
 comando2_1; 
 comando2_2; 
 comando2_N; 
}] 
 
Alguns aspectos importantes da sintaxe acima: 
 
 O comando se, em si, não possui “;”, apenas os comandos embutidos nele; 
 Este comando pode ter um ou mais comandos dentro dele, mas pelo menos um 
deve existir; 
 Os comandos dentro do comando se ou da cláusula senao, são delimitados por 
{ e }; 
 A cláusula senao, também é opcional; 
 Caso exista a cláusula senao, dentro dela também pode existir um ou mais 
comandos, mas pelo menos um deve existir. 
 
O comando se funciona da seguinte forma: caso a expressão lógica (condição) 
tenha como resultado um valor true, o(s) comando(s), logo abaixo, é (serão) 
executado(s). No caso de existir a cláusula senao, o(s) comando(s) embutido(s) nela, 
só será (serão) executado(s) caso a expressão lógica (condição) retorne false. Desta, 
forma, pode-se perceber que os comandos do primeiro grupo são excludentes em 
relação ao segundo, ou seja, não há uma circunstância possível em que os dois grupos 
sejam executados. 
 
Uma observação importante neste ponto, é que os comandos embutidos no 
comando se, podem ser quaisquer comandos da linguagem, inclusive outro comando 
se. Caso isto ocorra, diz-se que estes comandos se são aninhados. Ao se aninhar 
comandos se, deve-se redobrar a atenção em relação às cláusulassenao no que diz 
respeito a identificar a qual comando se pertence um determinado senao. Veja como 
ficaria a sintaxe: 
 
se ( expressão lógica ) { 
 comando1_1; 
 [ coamndo1_2; 
 comando1_N;] 
 se ( expressão lógica ) { 
 comando1_1_1; 
 [ coamndo1_1_2; 
 comando1_1_N;] 
 } 
} [ senao { 
 comando2_1; 
 comando2_2; 
 comando2_N; 
}] 
 
Observe que o comando se mais interno não possui a cláusula senao. 
 
É comum encontrar na literatura a denominação estrutura de decisão simples 
para um comando se sem a cláusula senao e, estrutura de decisão composta, para o 
comando se seguido da cláusula senao. 
 
Veja o algoritmo do fim de semana: 
 
... 
se (clima == “sol”) { 
 viajar; 
} senao { 
 ir à locadora; 
} 
... 
 
Algoritmo 28 
Construa um algoritmo que leia um número e se ele for maior do que 20, 
imprima a metade do número. 
 
prog metade 
 real numero, metade; 
 imprima “Digite um numero: ”; 
 leia numero; 
 se ( numero > 20 ) { 
 metade = numero / 2; 
 imprima “Metade: ”, metade; 
 } 
fimprog 
 
Algoritmo 29 
Construa um algoritmo que leia um número e, se for positivo, mostre seu 
inverso; caso contrário, imprima o valor absoluto do número. 
 
prog inversoabsoluto 
 real numero, inverso, absoluto; 
 imprima “Digite um número”; 
 leia numero; 
 se ( numero > 0.0 ) { 
 inverso = 1 / numero; 
 imprima “Inverso: ”,inverso; 
 } senao { 
 absoluto = numero * -1; 
 imprima “Absoluto: ”,absoluto; 
 } 
 fimprog 
 
Algoritmo 30 
Construa um algoritmo que leia um número inteiro e diga (mostre a mensagem) 
se ele é divisível por 3. 
 
prog div3 
 int n, resto; 
 imprima “Digite um numero inteiro: ”; 
 leia n; 
 resto = n % 3; 
 se ( resto == 0 ) { 
 imprima “O numero e múltiplo de 3!!!”; 
 } senao { 
 imprima “O numero NÃO e múltiplo de 3!!!”; 
 } 
fimprog 
 
Algoritmo 31 
Construa um algoritmo que leia um número inteiro e diga se ele é PAR ou 
ÍMPAR. 
 
Algoritmo 32 
Construa um algoritmo que leia um número e diga se ele é positivo, negativo ou 
nulo. 
 
Algoritmo 33 
Construa um algoritmo que leia dois números e mostre o maior deles. 
 
 
 
 
COMANDO ESCOLHA 
 
O comando escolha é um comando de desvio múltiplo de fluxo, isto é, baseado 
na avaliação de uma expressão ordinal é escolhido um caminho de execução dentre 
vários possíveis. Um resultado ordinal é aquele que pertence a um conjunto onde se 
conhece precisamente o elemento anterior e posterior, ou seja, um valor dentro de um 
conjunto, cujos valores podem ser claramente ordenados („A‟,„B‟,„C‟, . . . ). 
 
O escolha equivale, logicamente, a um conjunto de comandos se aninhados, 
embora seja usualmente mais eficiente durante a execução. 
 
A sintaxe é a seguinte: 
 
escolha(expressão ordinal) { 
caso ordinal1: comando1_1; 
[comando1_2; 
comando1_N;] 
interrompe; 
 
caso ordinal2: comando2_1; 
 [comando2_2; 
comando2_N;] 
interrompe; 
 
[padrao: comando_padrao1; 
 [comando_padrao2; 
 comando_padraoN;]] 
} 
 
A expressão utilizada pelo escolha deve, necessariamente, retornar um 
resultado ordinal. Conforme o resultado é selecionado em cada um dos casos indicados 
pela construção caso. Os comandos encontrados a partir do caso escolhido são 
executados até o final do comando escolha ou até encontrar um comando 
interrompe. Se o valor resultante não possuir um caso específico, serão executados os 
comandos colocados na cláusula padrao, que é opcional neste comando. 
 
Exercícios 
 
1 - Qual a utilidade da estrutura de decisão? 
 
2 – Qual a diferença entre a estrutura de decisão simples e a composta? 
 
3 – Quais são os comandos de decisão existentes no Português Estruturado? 
 
4 – Em que situações é mais indicado o uso do comando escolha? 
 
Algoritmo 34 
Construa um algoritmo que leia dois números e mostre o maior deles. 
 
Algoritmo 35 
Construa um algoritmo que leia dois números e os mostre em ordem crescente 
e decrescente. 
 
Algoritmo 36 
Deseja-se calcular a conta de consumo de energia elétrica de um consumidor. 
Para isto, escreva um algoritmo que leia o código do consumidor, o preço do Kw e a 
quantidade de Kw consumido, e exiba o código do consumidor e o total a pagar. 
- total a pagar = preço x quantidade 
- total a pagar mínimo = R$ 11,20 
 
Algoritmo 37 
Construa um algoritmo que, dado as três notas de um aluno, determine e exiba 
a sua média final e o seu conceito, sabendo-se que: 
-a média final é calculada pela média aritmética das três notas; 
-o conceito é determinado de com base na tabela abaixo: 
 
Média Final Conceito 
>=8.0 A 
>=5.0 e <8.0 B 
<5.0 C 
 
Algoritmo 38 
Construa um algoritmo que determine o grau de obesidade de uma pessoa, 
sendo fornecido o peso e a altura da pessoa. O grau de obesidade é determinado pelo 
índice da massa corpórea (Massa = Peso / Altura2) através da tabela abaixo: 
 
Massa Corpórea Grau de Obsidade 
<26 Normal 
>= 26 e <30 Obeso 
>=30 Obeso Móbido 
 
Algoritmo 39 
Uma empresa deseja aumentar o salário de seus empregados. O reajuste 
deverá obedecer a seguinte tabela: 
 
Salário Atual (R$) Rejuste 
0.0 a 1000.00 20% 
1000.01 a 5000.00 10% 
Acima de 5000.00 0% 
 
Construa um algoritmo que leia o nome e o salário atual de um empregado, e 
exiba o nome, o salário atual e o salário reajustado. 
 
Algoritmo 40 
Construa um algoritmo que calcule a conta final de um hóspede de um hotel, 
considerando que: 
 
a) serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou 
D), o número de diárias utilizadas pelo hóspede e o valor do consumo interno do 
hóspede; 
b) o valor da diária é determinado pela seguinte tabela: 
 
Apartamento Valor da Diária (R$) 
A 150.00 
B 100.00 
C 75.00 
D 50.00 
 
c) o valor total das diárias é o número de dias hospedados multiplicado pelo 
valor da diária; 
d) o subtotal é calculado pela soma do valor total das diárias e o valor do 
consumo interno; 
e) o valor da taxa de serviço equivale a 10% do subtotal; 
f) o total geral resulta da soma do subtotal com a taxa de serviço. 
 
Escreva a conta final contendo: o nome do hóspede, o tipo do apartamento, o 
número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor 
do consumo interno, o subtotal, o valor da taxa de serviço e o total geral. 
 
Algoritmo 41 
Deseja-se calcular o imposto de renda de um contribuinte. Para isto, escreva 
um algoritmo que: 
a) leia os seguintes dados do contribuinte: CPF, nome, rendimento anual, 
imposto retido na fonte, contribuição previdenciária, despesas médicas, número de 
dependentes; 
b) seja deduzido o valor de R$ 1080.00 por cada dependente; 
c) calcule o valor total das deduções: contribuição previdenciária + despesas 
médicas + dedução dos dependentes; 
d) calcule a base de cálculo: rendimento anual – total das deduções; 
e) calcule o imposto devido: (base de cálculo * alíquota) - parcela a deduzir, 
com base na tabela abaixo: 
 
Base de Cálculo Alíquota Parcela a Deduzir 
até 10800.00 Isento - 
De 10800.01 até 21600.00 15% 1620.00 
acima de 21600.00 25% 3780.00 
 
Haverá imposto a pagar se a diferença entre o imposto devido e o imposto 
retido na fonte for positiva; caso contrário, haverá imposto a restituir; 
 
Algoritmo 42 
Construa um algoritmo que leia um número e informe se ele é divisível por 3 e 
por 7. 
 
Algoritmo 43 
Construa um algoritmo que leia um número inteiro de 3 casas e informe se o 
algarismo da casa das centenas é par ou ímpar.Algoritmo 44 
Construa um algoritmo que leia o ano de nascimento de uma pessoa e o ano 
atual e informe a idade da pessoa. Não se esqueça de verificar se o ano de nascimento 
é um ano válido. 
Obs.: Não se preocupe com o mês e o dia do nascimento da pessoa. 
 
 
Algoritmo 45 
Construa um algoritmo que implemente uma calculadora básica. Para isto o 
algoritmo deverá obter dois números do teclado e um operador (caractere que 
representará a operação matemática desejada [„+‟, „-‟, „*‟ e „/‟]). De posse dos dados 
de entrada, o algoritmo deve efetuar o calculo desejado e exibir o resultado. 
 
Algoritmo 46 
Construa um algoritmo que leia a sigla do estado de uma pessoa e informe se 
ela é carioca, paulista, mineiro ou outros. 
 
Algoritmo 47 
Construa um algoritmo que leia dois nomes e os mostre em ordem alfabética. 
 
Algoritmo 48 
Construa um algoritmo que leia três números e mostre o maior deles. 
 
Algoritmo 49 
Construa um algoritmo que leia três números e os mostre em ordem crescente 
e decrescente. 
 
Algoritmo 50 
Construa um algoritmo que leia cinco números e mostre o maior e o menor 
deles. 
 
Algoritmo 51 
Construa um algoritmo que leia as três notas de um aluno. Das três, o 
algoritmo deve calcular e mostrar, a média aritmética das duas maiores notas. 
 
Algoritmo 52 
Construa um algoritmo que leia uma quantia em reais e transforme para dólar. 
 
Algoritmo 53 
Segundo uma tabela médica, o peso ideal de uma pessoa está relacionado com 
a altura e o sexo. Construa um algoritmo que leia a altura e o sexo da pessoa e calcule 
e mostre o seu peso ideal, utilizando as seguintes fórmulas: 
 para homens: (72.7 * H) – 58 
 para mulheres: (62.1 * H) – 44.7 
 
Algoritmo 54 
Construa um algoritmo que leia um número inteiro entre 1 e 7 e mostre o dia 
da semana correspondente. 
Exemplos: Entrada: 1 Saída: Domingo 
 Entrada: 4 Saída: Quarta 
 
Algoritmo 55 
Construa um algoritmo que leia um número inteiro entre 1 e 12 e mostre o mês 
correspondente. 
 
Algoritmo 56 
Construa um algoritmo que leia o tipo de carro e a distância, em Km, que se 
deseja percorrer. O programa deverá, baseado na tabela a seguir, calcular o consumo 
de combustível para o percurso. 
 
Tipo de carro Consumo 
A 13.5 Km/l 
B 12.0 Km/l 
C 10.5 Km/l 
D 9.0 Km/l 
E 7.5 Km/l 
 
 
Algoritmo 57 
Construa um algoritmo que leia uma data no formato ddmmaaaa e informe se a 
data é válida ou não. 
 
Algoritmo 58 
Construa um algoritmo que leia uma letra do teclado e informe: se é uma vogal 
maiúscula; se é uma vogal minúscula; ou se é uma consoante. 
 
Algoritmo 59 
Construa um algoritmo que leia o ano de nascimento de um nadador e o 
classifique de acordo com a tabela a seguir: 
 
Faixa de Idade Categoria 
0 – 4 anos Não aceito 
5 – 7 anos Infantil A 
8 – 10 anos Infantil B 
11 – 13 anos Juvenil A 
14 – 17 anos Juvenil B 
Maiores de 17 anos Sênior 
 
 
Algoritmo 60 – Desafio 02 
Construa um algoritmo que calcule a média de idade dos moradores de uma 
cidade, ou seja, leia a idade de cada pessoa da cidade e calcule a média. O algoritmo 
deve obter do usuário, via teclado (comando leia), o número de habitantes da cidade. 
 
 
 
ESTRUTURAS DE REPETIÇÃO 
 
No ambiente computacional, consideramos repetição um comando ou um trecho 
de código que deve se repetido por algumas vezes. A repetição é uma das tarefas mais 
comuns da programação utilizada para efetuarmos contagens, para obtenção de dados 
a serem manipulados pelo programa. Em Português Estruturado dispomos do comando 
para, cuja sintaxe é dada a seguir: 
 
para(inicialização; condição de execução; incr/decremento) { 
 Lista de comandos 
} 
O comando para possui três campos ou seções, todas opcionais, delimitados 
por um par de parênteses que controlam a repetição de um comando individual ou de 
um bloco de comandos. Cada campo é separado um do outro por um ponto e vírgula. 
O primeiro campo é usado para dar valor inicial a uma variável de controle (um 
contador). O segundo campo é uma expressão lógica que determina a execução ou 
não do(s) comando(s) associado(s) ao para. O terceiro campo realiza uma operação 
sobre a variável de controle, geralmente incrementando ou decrementando tal 
variável. 
 
Algoritmo 61 
Construa um algoritmo que conte de 1 à 5. 
 
prog contador01 
 imprima “1”; 
 imprima “2”; 
 imprima “3”; 
 imprima “4”; 
 imprima “5”; 
fimprog 
 
Algoritmo 62 
Construa um algoritmo que conte de 1 à 5000. 
 
prog contador01 
 imprima “1”; 
. 
. 
. 
 imprima “5000”; 
fimprog 
 
Para que o Algoritmo 62 funcione, o computador deveria entender o significado 
da reticência, mas como isso não ocorre, devemos repetir a digitação do comando 
imprima por 5000 vezes. Felizmente temos uma alternativa a este exaustivo trabalho, 
o comando para apresentado anteriormente se adapta perfeitamente a esta situação. 
Veja como ficaria a solução do Algoritmo 62: 
 
Algoritmo 63 
prog contador02 
 int i; 
 para (i=1; i<=5000; i=i+1) { 
 imprima i; 
 } 
fimprog 
 
Outro comando bastante utilizado para construir laços de repetição é o 
comando enquanto, cuja sintaxe é dada a seguir: 
 
enquanto (expressão lógica) { 
 lista de comandos 
} 
 
O comando enquanto, assim como no comando para, avalia o resultado da 
expressão lógica antes de executar o(s) comando(s) associado(s), assim, caso a 
condição seja inicialmente falsa, tal(tais) comando(s) não será(serão) executado(s). 
Um problema típico relacionado à aos comandos de repetição é o seguinte: se a 
condição nunca se tornar falsa o laço será repetido ininterruptamente. Esta situação 
pode ocorrer tanto no comando para como no comando enquanto, porém, é muito 
mais comum no comando enquanto devido sua estrutura menos rígida. No para as 
três seções em que se divide o controle do loop, impõem uma maior formalidade à 
construção do comando, o que inconscientemente, nos induz a sermos mais 
cautelosos. Veja o exemplo: 
 
Algoritmo 64 
prog contador03 
 int i; 
 i=1; 
 enquanto (i<=5000) { 
 imprima i; 
 i=i+1; 
 } 
fimprog 
 
Os algoritmos 63 e 64 executam exatamente a mesma tarefa, porém, observe 
que é mais fácil o programador se distrair e esquecer-se do comando “i=1;” ou do 
comando “i=i+1;”. Isto exposto, fica a critério de cada um a opção por adotar um 
comando ou o outro. 
 
Exercícios 
 
Algoritmo 65 
Tente resolver o Algoritmo 60 – Desafio 02, utilizando algum dos comandos 
de repetição. 
 
Algoritmo 66 
Construa um algoritmo que obtenha cinco números e mostre o quadrado de 
cada um dos números. 
 
Algoritmo 67 
Construa um algoritmo que imprima todos os números inteiros entre 1 e 100. 
 
Algoritmo 68 
Construa um algoritmo que imprima todos os números inteiros entre 100 e 1. 
 
Algoritmo 69 
Construa um algoritmo que imprima os 200 primeiros números pares. 
 
Algoritmo 70 
Construa um algoritmo que mostre os múltiplos de 5 no intervalo entre 1 e 500. 
 
Algoritmo 71 
Construa um algoritmo que imprima os quadrados dos inteiros entre 1 e 50. 
 
Algoritmo 72 
Construa um algoritmo que imprima os números pares no intervalo entre 400 e 
600. 
 
Algoritmo 73 
Construa um algoritmo que imprima a soma dos inteiros entre 1 e 100 . 
 
Algoritmo 74 
Construa um algoritmo que obtenha o nome, a idade e o sexo de 29 pessoas e 
imprima o nome se a pessoa for do sexo masculino e tiver mais de 21 anos. 
 
Algoritmo 75 
Construa um algoritmo que leia um número N, some todos os números inteiros 
de 1 a N, e mostre o resultado obtido. 
 
Algoritmo 76Construa um algoritmo que leia N e uma lista de N números e mostre a soma 
de todos os números lidos. 
 
Algoritmo 77 
Construa um algoritmo que leia um conjunto de 100 números inteiros 
positivos e determine o maior deles. 
 
Algoritmo 78 
Construa um algoritmo que leia um conjunto de 100 números inteiros 
(positivos ou negativos) e determine o maior deles. 
 
Algoritmo 79 
Construa um algoritmo que leia um conjunto de números inteiros (positivos 
ou negativos) e determine o maior e o menor deles. A leitura do valor 0 (zero) indica 
o fim da entrada dos dados. 
 
Algoritmo 80 
Construa um algoritmo que leia um conjunto de números inteiros positivos 
terminado pelo número 0 (zero). Ao final, o programa deverá mostrar a média 
aritmética de todos os números lidos. 
 
Algoritmo 81 
Construa um algoritmo que leia dois números inteiros e mostre o produto entre 
eles. Calcule o produto através de somas sucessivas. 
 
Algoritmo 82 
Construa um algoritmo que calcule o fatorial de um número inteiro lido, 
sabendo-se que: N! = 1 x 2 x 3 x . . . x N-1 x N; 0! = 1. 
 
Algoritmo 83 
Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele 
próprio. Escreva um algoritmo que leia um número inteiro e determine se ele é ou não 
primo. 
 
Algoritmo 84 
Construa um algoritmo que leia dois números inteiros (X e Y) e mostre todos os 
primos entre X e Y. 
 
Algoritmo 85 
Construa um algoritmo que leia um número N, calcule e mostre os N primeiros 
termos da sequência de Fibonacci. A sequência de Fibonacci é formada inicialmente 
pelos valores 0 e 1 e, a partir de então, cada novo elemento desta sequência é obtido 
pela soma dos dois elementos imediatamente anteriores. 
Exemplo: (0,1,1,2,3,5,8,13,...) 
 
Algoritmo 86 
A série de RICCI difere da série de Fibonacci pelo fato de que os dois primeiros 
termos são fornecidos pelo usuário. Os demais termos são gerados da mesma forma 
que na série de Fibonacci. Construa um algoritmo que leia um número inteiro N, 
calcule e mostre os N primeiros termos da série de RICCI. 
 
Algoritmo 87 
Construa um algoritmo que leia o número de alunos de uma turma. Baseado 
neste número, obtenha a nota na AV1 de cada aluno e mostre, ao final, a média da 
turma. 
 
Algoritmo 88 
Construa um algoritmo que leia 200 números inteiros e imprima quantos são 
pares e quantos são ímpares. 
 
Algoritmo 89 
Construa um algoritmo que leia 200 números inteiros e imprima quantos são 
pares e quantos são ímpares. 
 
Algoritmo 90 – Desafio 03 
Construa um algoritmo que leia 100 números inteiros e, após a leitura do último 
número, os mostre na ordem inversa da que foram lidos, ou seja, do último até o 
primeiro. 
 
VETOR 
 
Em muitas aplicações os tipos básicos de dados não são suficientes para suprir 
as necessidades da estrutura de dados do problema. Já vimos em algoritmos passados 
a necessidade de lermos diversos valores, para isso usamos uma única variável, o que 
atendeu perfeitamente a demanda oriunda do problema. Porém, caso seja necessário 
recuperar um valor lido anteriormente, não será possível, pois a cada nova leitura o 
conteúdo da variável é sobrescrito. 
 
A única maneira de guardarmos todos os valores lidos (individualmente) é 
declarando uma variável para cada valor. Já pensou, declarar 100, 200 ou até mil 
variáveis? Pois existe uma maneira muito simples de se fazer isso, basta criarmos um 
tipo de dado chamado VETOR. 
 
O vetor é uma estrutura de dados homogênea indexada, ou seja, devemos 
entender um vetor como sendo um conjunto de variáveis do mesmo tipo, onde cada 
uma dessas “variáveis” é acessada através de um índice. É importante ressaltar que os 
índices de um vetor sempre variam de 0 (zero) à N-1, onde N é o tamanho do vetor. A 
declaração de um vetor deve respeitar a a seguinte sintaxe: 
 
tipo_dos_dados nome_do_vetor[Quantidade_de_elementos]; 
 
Algoritmo 91 
prog vetor01 
 int i, vet[5]; 
 vet[0]=3; 
 vet[1]=5; 
 vet[2]=2; 
 vet[3]=6; 
 vet[4]=8; 
 imprima “A terceira posição do vetor guarda o nº ”, vet[2]; 
fimprog 
 
Assim sendo, o Algoritmo 91 exibirá como resultado a seguinte mensagem: 
 
A terceira posição do vetor guarda o nº 2 
 
Algoritmo 92 
prog vetor02 
 int i, vet[5]; 
 para(i=0;i<5;i++) { 
 imprima “Digite um número inteiro: ” 
 leia vet[i]; 
 } 
 imprima “A terceira posição do vetor guarda o nº ”, vet[2]; 
fimprog 
 
Para o Algoritmo 92, vamos imaginar que o usuário tenha digitado os números 
3, 5, 2, 6 e 8. Desta forma o vetor vet deverá ter a seguinte configuração em 
memória: 
 
Índice 0 1 2 3 4 
Valor 3 5 2 6 8 
 
Assim sendo, o Algoritmo 92 exibirá como resultado a seguinte mensagem: 
 
A terceira posição do vetor guarda o nº 2 
 
Exercícios 
 
Algoritmo 93 
Tente resolver o Algoritmo 90 – Desafio 03, utilizando um vetor para 
armazenar os números. 
 
Algoritmo 94 
Construa um algoritmo que declare três vetores, A, B e C, de inteiros com 10 
elementos cada um. O algoritmo deverá preencher os dois primeiros vetores com 
dados lidos à partir do teclado. O terceiro vetor deverá ser preenchido à partir da 
soma, dos elementos posicionalmente correspondentes, dos dois primeiros vetores. 
 
Algoritmo 95 
Construa um algoritmo que armazene 15 números inteiros num vetor e imprima 
uma listagem numerada contendo o número e uma mensagem informando se ele é par 
ou ímpar. 
 
Algoritmo 96 
Construa um algoritmo que armazene o nome e o salário de 20 pessoas, 
aplique um reajuste de 20% para todas as pessoas e gere uma listagem contendo os 
nomes e os novos salários. 
 
Algoritmo 97 
Construa um algoritmo que armazene o preço de compra e o preço de venda de 
100 mercadorias e imprima quantas mercadorias proporcionam: 
➢ lucro < 10% 
➢ lucro entre 10% e 20% 
➢ lucro > 20% 
 
Algoritmo 98 
Um professor tem uma turma de 80 alunos e deseja calcular e imprimir a nota 
de cada aluno seguida da média da turma. 
 
Algoritmo 99 
Construa um algoritmo que armazene código, nome, quantidade, valor de 
compra e valor de venda de 100 produtos e gere uma listagem de todos os produtos 
ou somente de um, quando se digitar o código. 
 
Algoritmo 100 
Construa um algoritmo que armazene dois conjuntos de números inteiros, 
tendo um 10 e o outro 20 elementos e apresente os elementos comuns aos dois 
conjuntos. 
 
Algoritmo 101 
Construa um algoritmo que armazene dois conjuntos de números inteiros, 
tendo um 10 e o outro 20 elementos e apresente os elementos comuns aos dois 
conjuntos. Podem existir números repetidos nos conjuntos de dados, porém, a saída 
não deverá mostrar repetições. 
 
Algoritmo 102 
Construa um algoritmo que armazene um vetor vet01 de 10 números inteiros e 
positivos e gere um vetor vet02 contendo os quadrados dos respectivos componentes 
de vet01. 
 
Algoritmo 103 
Construa um algoritmo que armazene 100 números inteiros e positivos, que 
imprima o maior e menor dos números e imprima o percentual de números pares e 
ímpares. 
 
Algoritmo 104 
Num torneio de futsal inscreveram-se 12 times. Construa um algoritmo que 
armazene os nomes dos times e imprima a tabela de jogos. 
 
Algoritmo 105 
Construa um algoritmo que armazene dois conjuntos de 25 números inteiros, 
preencha um terceiro vetor intercalando os elementos dos dois primeiros e mostre o 
terceiro vetor. 
 
Algoritmo 106 
Construa um algoritmo que armazene números inteiros e positivos. A entrada 
de dados deve parar ao ser digitado o número 0 (zero) ou ser atingido o limite do 
vetor, que é de 100 posições. O algoritmo deverá imprimir a quantidade de númerosiguais ao último número lido. 
 
Algoritmo 107 
Construa um algoritmo que armazene um conjunto de 100 números reais e 
imprima a quantidade de números maiores que a média do vetor. 
 
Algoritmo 108 
No vestibular de uma universidade, no curso de informática, inscreveram-se 
1200 pessoas. Construa um algoritmo que armazene o gabarito da prova que tinha 
100 questões, sendo que cada questão valia 1 ponto. O algoritmo deverá ainda obter o 
número de inscrição, o nome e as respostas de cada candidato. Ao final, deve-se 
imprimir o número de inscrição, o nome e a nota de cada candidato. 
 
Algoritmo 109 
Construa um algoritmo que armazene nome, endereço e telefone de 50 pessoas 
e mostre, a partir de um nome digitado, as informações referentes ao nome. 
 
Algoritmo 110 – Desafio 04 
No vestibular de uma universidade, no curso de informática, inscreveram-se 
1200 pessoas. Construa um algoritmo que armazene o gabarito da prova que tinha 
100 questões, sendo que cada questão valia 1 ponto. O algoritmo deverá ainda obter o 
número de inscrição, o nome e as respostas de cada candidato. Ao final, deve-se 
imprimir o número de inscrição, o nome, as respostas e a nota de cada candidato. 
 
MATRIZ 
 
Os vetores são arranjos homogêneos unidimensionais, no entanto, podemos 
encontrar diversos problemas que envolvem na sua solução arranjos homogêneos 
multi-dimensionais, particularmente de duas ou três dimensões. 
 
tipo_dos_dados nome_da_matriz[Qtd,...,Qtd]; 
 
Exemplo: 
 
 int m[5,10]; 
 
Este exemplo cria uma matriz, ou vetor multi-dimensional, com cinco linhas e 
dez colunas. Na memória esta matriz terá a seguinte configuração. 
 
 0 1 2 3 4 5 6 7 8 9 
0 
1 
2 
3 
4 
 
 
Para que se possa acessar um elemento da matriz, será necessário um número 
de índices igual à dimensão da matriz, ou seja, numa matriz bi-dimensional serão 
necessários 2 índices, um para referenciar as linhas e outro para as colunas. 
 
Na matriz dada como exemplo, para referenciarmos o elemento em destaque, 
teremos que utilizar as coordenadas linha 2 e coluna 3, dessa forma, caso queiramos 
ler um determinado número do teclado e guardá-lo nesta posição da matriz, 
deveremos utilizar o comando a seguir: 
 
leia m[2,3]; 
 
Algoritmo 111 
Construa um algoritmo que crie e preencha, com números inteiros lidos do 
teclado, uma matriz 7x6. 
 
prog matriz01 
 int i,j, m[7,6]; 
 para(i=0;i<7;i++) { 
 para(j=0;j<6;j++) { 
 imprima “Digite um número inteiro: ” 
 leia m[i,j]; 
 } 
 } 
fimprog 
 
Exercícios 
 
Algoritmo 112 
Construa um algoritmo que crie duas matrizes 2x3, A e B, de inteiros e as 
preencha com dados lidos do teclado. O algoritmo deverá preencher e exibir a matriz 
C, também 2x3, com a soma da matriz A com a matriz B. 
 
Algoritmo 113 
Construa um algoritmo que leia uma matriz de ordem 3x5 de elementos 
inteiros, calcule e imprima: 
a) o maior elemento da matriz; 
b) a soma dos elementos da matriz; e 
c) a média dos elementos da matriz. 
 
Algoritmo 114 
Construa um algoritmo que leia uma matriz quadrada de ordem 5 de inteiros e 
exiba os elementos da diagonal principal. 
 
Algoritmo 115 
Tente resolver o Algoritmo 110 – Desafio 04, utilizando o conceito de 
matrizes. 
 
Algoritmo 116 
A tabela abaixo demonstra a quantidade de vendas dos fabricantes de veículos 
durante o período de 1993 a 1998, em mil unidades. 
 
 
Construa um algoritmo que: 
a) leia os dados da tabela; 
b) determine e exiba o fabricante que mais vendeu em 1996; 
c) determine e exiba o ano de maior volume geral de vendas; 
d) determine e exiba a média anual de vendas de cada fabricante no período. 
 
Algoritmo 117 
Construa um algoritmo que leia uma matriz quadrada de ordem 10 e, a pós a 
leitura dos dados, mostre os números ímpares constantes na matriz. 
 
Algoritmo 118 
Construa um algoritmo que leia uma matriz 8x10 e a preencha com números 
reais. Após o preenchimento da matriz o algoritmo deverá somar os elementos de cada 
linha armazenando tais resultados num vetor. Ao final, deve-se mostrar o vetor 
resultante. 
 
Algoritmo 119 
Construa um algoritmo que leia uma matriz 5x3 e gere a transposta desta 
matriz. Obs.: Uma matriz transposta é gerada trocando-se as linhas pelas colunas. 
 
Algoritmo 120 
Construa um algoritmo que leia uma matriz de ordem 10 e a imprima. A seguir, 
troque: 
a) a segunda linha pela oitava linha; 
b) a quarta coluna pela décima coluna; e 
c) a diagonal principal pela diagonal secundária. 
 
Imprima a matriz resultante. 
 
Algoritmo 121 
Construa um algoritmo que armazene as alturas dos atletas de cinco delegações 
que participarão dos jogos de verão. Cada delegação tem 10 atletas. O algoritmo 
deverá imprimir a maior altura de cada delegação e a maior entre todos os atletas. 
 
Algoritmo 122 
A viação XPTO tem na rodoviária Novo Rio uma tabela contendo os horários de 
partidas dos ônibus para Nova Friburgo nos sete dias da semana. 
Construa um algoritmo que possa armazenar estes horários e que dê duas 
opções de consulta ao usuário: 
➢ por dia da semana – o usuário deverá digitar o dia da semana [1..7] e o 
algoritmo deverá mostrar todos os horários daquele dia; 
➢ por dia da semana entre os horários x e y – o usuário deverá entrar com os três 
argumentos e o algoritmo deverá exibir os horários que se encaixem nas 
condições. 
 
Algoritmo 123 
Construa um algoritmo que leia uma matriz 5x5 de inteiros e apresente uma 
determinada linha da matriz, solicitada via teclado. 
 
Algoritmo 124 
Construa um algoritmo que leia uma matriz 12x4 com os valores das vendas de 
uma loja. Cada linha representará um mês do ano e cada coluna representará uma 
semana no mês. O algoritmo deverá calcular e exibir os seguintes dados: 
a) total vendido em cada mês; 
b) total vendido em cada semana durante todo o ano; 
c) total vendido em cada semana de um determinado mês digitado pelo 
usuários; 
d) total vendido no ano; 
 
 
MIGRAÇÃO PARA LINGUAGEM C 
 
**********[ Reescrever os Algoritmos em Linguagem C ]********** 
 
FUNÇÕES 
 
Uma Função é um trecho de programa independente com um objetivo 
determinado, simplificando o entendimento do programa e proporcionando-o menores 
chances de erro e de complexidade. 
 
A Função, na programação imperativa, é a melhor ferramenta para 
particionamento do programa. Mas qual a finalidade de se particionar um programa? 
Um programa ao ser particionado passa a ser visto, obrigatoriamente, naturalmente e 
intuitivamente, como um conjunto de partes, onde cada uma delas pode ser pensada e 
implementada separadamente. 
 
Serve para se reduzir a complexidade do programa? 
 Sim, pois quando se esta pensando numa parte, o programador abstrai a 
existência das outras. É claro que a abstração não é total, pois as partes deverão ser 
capazes de interagir. 
 
Podemos dizer que um programa desenvolvido de forma particionada trás 
benefícios quanto à confiabilidade de sua correta execução? 
 Sim, uma vez concluída, testada e aprovada, uma parte poderá ser 
usada futuramente de maneira confiável e sem a necessidade de ser reescrita. 
 
Ganha-se alguma performance no desenvolvimento do programa? 
 Em programas menores, os ganhos são menores, porém, em sistemas 
maiores a reusabilidade das Funções é de fundamental importância para o sucesso do 
produto final. 
 
Podemos resumir as vantagens do emprego de Funções em: 
 
1- Dividir e estruturar um programa em partes logicamente coerentes; 
2- Facilidade em testar trechos em separados; 
3- Melhorlegibilidade do programa; 
4- Evitar redundância de programação; 
5- Possibilidade de criar bibliotecas de Funções. 
 
Quando uma Função é chamada, o fluxo de controle de execução é desviado 
para a Função. Ao terminar a execução dos comandos da Função, o fluxo retorna ao 
comando seguinte àquele onde ela foi ativada. 
 
A seguir, a estrutura de uma Função: 
 
<tipo_de_retorno> nome_da_função(parâmetros) { 
 
 Declaração das variáveis 
 
 Comandos que formam o corpo da Função 
 
 Retorno de valores 
} 
 
Algoritmo 125 
Construa um programa em C que receba três números inteiros e mostre o 
dobro de cada um deles. Use uma Função para o cálculo. 
 
#include <conio.h> 
 
int dobro(int num) { 
 int r; 
 r=num*2; 
 return r; 
} 
 
void main(void) { 
 int i, n, resultado; 
 for(i=0;i<3;i++) { 
 printf("Entre com um n£mero inteiro: "); 
 scanf("%d",&n); 
 resultado=dobro(n); 
 printf("O dobro de %d eh %d.\n\n",n,resultado); 
 } 
 getch(); 
} 
 
Algoritmo 126 
Construa um programa em C que receba três notas de um aluno e calcule a sua 
média. Use uma Função para o cálculo. 
 
Algoritmo 127 
Construa um programa em C que receba três números inteiros e mostre o 
maior deles. Utilize um Função para encontrar o maior dos números. 
 
Algoritmo 128 
Construa um programa em C que receba um número inteiro e mostre o seu 
fatorial. Utilize uma Função para realizar o cálculo. 
 
Algoritmo 129 
Construa um programa em C que receba um caracter via teclado e informe se 
ele é uma consoante ou uma vogal. Utilize uma Função para descobrir se o caracter é 
consoante ou vogal. A Função não deverá emitir mensagens ao monitor. 
 
Algoritmo 130 
Construa um programa em C que receba um número inteiro na base 10 e o 
represente na base 2 e na base 8. Utilize uma Função para cada base. 
 
Algoritmo 131 
Construa um programa em C que implemente uma Função que receba um vetor 
de inteiros e seu tamanho e retorne o menor dos elementos do vetor. 
 
Algoritmo 132 
Construa um programa em C que implemente uma Função que receba um vetor 
de 10 posições e um número e verifique se tal número existe no vetor. 
 
Algoritmo 133 
Construa um programa em C que implemente uma Função que receba um vetor 
de 20 caracteres e um caracter e retorne a quantidade de vezes que o caracter 
aparece no vetor. 
 
Algoritmo 134 
Construa um programa em C que implemente uma Função que receba um vetor 
com 10 inteiros e informe o vetor esta em ordem crescente. 
 
Algoritmo 135 
Construa um programa em C que implemente uma Função que receba um 
número inteiro e mostre a tabuada deste número. 
 
 
ESCOPO DAS VARIÁVEIS 
 
Entende-se por escopo de variáveis a visibilidade/acessibilidade que 
determinada variável terá dependendo de onde ela for declarada. Existem três 
possibilidades: 
 
 Variáveis Locais; 
 Variáveis Globais; e 
 Variáveis Formais. 
 
LOCAIS 
 
As variáveis locais possuem visibilidade apenas dentro do bloco onde foram 
declaradas, ou seja, são de uso exclusivo do bloco em questão. Por exemplo, uma 
variável declarada dentro da função main(), não é acessível dentro de outras funções. 
 
Algoritmo 136 
//**************[ Exemplo Correto ]************** 
int dobro(int x) { 
 return x*2; 
} 
 
void main(void) { 
 int i; 
 printf(“Entre com um inteiro: ”); 
 scanf(“%d”,&i); 
 printf(“O dobro de %d eh %d\n”,i,dobro(i)); 
 getch(); 
} 
 
Algoritmo 137 
//**************[ Exemplo Errado ]************** 
int dobro(void) { 
 return i*2; // Erro de acesso à variável i 
} // i é reconhecida apenas na função main() 
 
void main(void) { 
 int i; 
 printf(“Entre com um inteiro: ”); 
 scanf(“%d”,&i); 
 printf(“O dobro de %d eh %d\n”,i,dobro()); 
 getch(); 
} 
 
FORMAIS 
 
As variáveis formais são os parâmetros declarados nas funções. Alguns autores 
e a própria linguagem C, tratam estas variáveis como locais, isto porque a única 
diferença entre estas e as locais, é o local onde elas são declaradas...na linha em que 
se cria uma função, quanto ao funcionamento e a acessibilidade, as locais e formais 
funcionam da mesma forma. 
 
 
 
int dobro(int x) { // x é uma variável formal. 
 return x*2; 
} 
 
GLOBAIS 
 
As variáveis globais são declaradas fora de qualquer bloco/função. Elas são 
acessíveis, tanto para leitura ou manipulação, por qualquer bloco ou função do 
programa. 
 
Algoritmo 138 
//**************[ Exemplo Correto ]************** 
int i; 
 
int dobro(void) { 
 return i*2; 
} 
 
void main(void) { 
 printf(“Entre com um inteiro: ”); 
 scanf(“%d”,&i); 
 printf(“O dobro de %d eh %d\n”,i,dobro()); 
 getch(); 
} 
 
Observe que a variável i foi declarada antes de qualquer função e isso a torna 
global e consequentemente acessível em qualquer lugar. Note que tanto a função 
dobro() quanto a função main() acessam normalmente a variável i. 
 
 Num primeiro instante esta versatilidade pode parecer atrativa e simplificadora. 
Porém, algumas confusões podem ocorrer. Veja que a função dobro() só é capaz de 
efetuar o cálculo sobre esta variável, caso se necessário dobrar o valor de outra 
variável, a função dobro() não poderá ser utilizada. Outra confusão pode ser gerada, 
normalmente em programas maiores, quanto a duplicidade de nomes de variáveis. Um 
terceiro problema ocorre em contraste à principal vantagem das variáveis 
locais/formais que é a liberação do espaço de memória ocupado por uma variável 
local quando o bloco em que ela foi definida não esta em execução. As variáveis 
globais existem durante todo o tempo de execução do programa, mesmo que não 
sejam utilizadas. 
 
Algoritmo 139 
Construa um programa em C que armazene um vetor de caracter de vinte 
posições. Implemente uma função que receba um caracter e que percorra o vetor 
trocando a ocorrência deste caracter por um *. A função deverá retornar a quantidade 
de substituições efetuadas. 
 
Algoritmo 140 
Construa um programa em C que armazene um vetor de caracter de vinte 
posições. Implemente uma função que receba dois caracteres e que percorra o vetor 
trocando a ocorrência do primeiro caracter pelo segundo. 
 
 
Algoritmo 140 – Desafio 05 
Construa um programa em C que armazene um vetor de 20 inteiros. Após o 
preenchimento do vetor, deve-se chamar a função Ordena(), que deverá colocar vetor 
em ordem crescente.

Outros materiais