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 manipular um 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, respeitandoa 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 deixadasjuntamente 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 internos tem 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 algoritmoque 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áusulas senao 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 Categoria0 – 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 76
Construa 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ávelpara 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úmeros
iguais 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 117Construa 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- Melhor legibilidade 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.