Sunteți pe pagina 1din 79

DEPARTAMENTO DE INFORMTICA

ALGORITMOS e
PROGRAMAO

otas de Aula

a
Prof . Beatriz Lux
Prof. Joo Carlos Furtado
Reviso: Profa. Daniela Saccol Peranconi (2009/01)
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1. ITRODUO
Imagine a seguinte situao: o gerente de uma pequena fbrica de parafusos necessita que
seja realizada uma alterao nos preos dos produtos que a fbrica vende, em funo de novos
valores adotados pelo Governo para imposto sobre circulao de mercadorias. As diversas
mercadorias esto catalogadas com seus preos de produo e preos de venda em um fichrio e
caber a um funcionrio novo e inexperiente fazer as alteraes. Para auxiliar o trabalho do
funcionrio e garantir que o resultado seja correto, o gerente resolve passar-lhe as orientaes
por escrito e elabora o seguinte roteiro:

Instrues para clculo dos novos preos das mercadorias:

1- Pegue a ficha da mercadoria no fichrio;

2- Leia o preo de produo da mercadoria;

3- Considere o percentual de lucro igual a 0.80;

4- Calcule o preo de venda conforme a frmula:

preo de venda = preo de produo x (1.15 + percentual de lucro);

5- Escreva na ficha o novo preo de venda.

Qualquer pessoa que siga a seqncia de passos acima dever concluir a tarefa
satisfatoriamente, bastando, para isso, que possua os seguintes conhecimentos prvios:

1- Saber onde est o fichrio com as fichas;


2- Saber ler e escrever;
3- Ser capaz de efetuar as operaes de soma e multiplicao com nmeros fracionrios.

As instrues acima constituem um algoritmo que, em sntese, nada mais do que a


descrio de um conjunto de passos ou aes que visam atingir um objetivo determinado.

1
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo de um algoritmo cujo objetivo usar um telefone pblico:

Incio

1. Tirar o fone do gancho;

2. Ouvir o sinal de linha;

3. Introduzir o carto;

4. Teclar o nmero desejado;

5. Se der o sinal de chamar

5.1 Conversar;

5.2 Desligar;

5.3 Retirar o carto;

6. Seno

6.1 Repetir;

Fim.

Uma definio completa e que salienta as caractersticas principais de um algoritmo a


que segue:
Um algoritmo uma seqncia finita de instrues, bem definidas e no ambguas,
cada uma das quais podendo ser executada mecanicamente num perodo de tempo finito e com
uma quantidade de esforo finito.
- Trata-se de uma seqncia finita de instrues: as informaes apresentam-se em
uma ordem, uma aps a outra e so em nmero limitado;
- As instrues so bem definidas e no ambguas, ou seja, so claras, no
permitindo variadas interpretaes;
- As instrues podem ser executadas mecanicamente, o que significa que no
necessitamos de imaginao para execut-las;

2
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

- A execuo das instrues encontra um trmino e despende uma quantidade


determinada de esforo.
Como exerccio escreva um algoritmo que apresente os passos necessrios para trocar o
pneu de um carro. Considere que esto disponveis no porta-malas um macaco, uma chave de
roda e um pneu reserva em boas condies.
Com o desenvolvimento de computadores cada vez mais rpidos e baratos e a
possibilidade de passar para eles a resoluo de tarefas que possam ser resolvidas utilizando uma
seqncia finita de instrues, evoluram grandemente as pesquisas em algoritmos e
linguagens de programao. Para que o computador execute as tarefas necessrio que estejam
descritas em uma linguagem apropriada (que possui suas prprias regras) e, tambm, que nossas
instrues possuam uma lgica que, sem dvida nenhuma, leve ao resultado esperado.
A Lgica surgiu na Grcia Antiga, numa poca em que era necessrio, com urgncia,
colocar ordem no raciocnio humano. Naquela poca havia uma prtica chamada Sofismo,
atravs da qual pessoas bem treinadas utilizavam o raciocnio para comprovar em juzo fatos que
beneficiariam aos interesses de alguns, sem nenhum compromisso com a verdade. Para
exemplificar, conta-se a histria que envolveu um conhecido sofista, Protgoras:

Protgoras era um mestre na arte do sofismo e certa vez foi procurado por um
jovem que queria receber um treinamento que o capacitasse a atuar como sofista. Foi
aceito e assinou um contrato pelo qual pagaria durante as aulas metade do valor total
do curso e o restante quando vencesse sua primeira causa. Passado um tempo aps o
trmino das aulas, como o discpulo no se animasse a defender nenhuma causa,
Protgoras encaminhou reclamao de pagamento Justia com o seguinte
argumento: Se meu discpulo perder, paga-me por deciso da Corte, se ganhar, paga-
me por fora do contrato entre ns acertado. O discpulo, que havia se dedicado com
afinco s aulas, argumentou em sua defesa: Se eu vencer, no pago, por deciso da
Corte, mas se perder, no pago pelo estabelecido em nosso contrato. Com quem
estaria a verdade?

Para se contrapor a esta forma de conduzir o raciocnio e permitir a obteno de


concluses verdadeiras, surgiu a Lgica, que pode ser resumidamente conceituada como a arte
de pensar corretamente. Seu fundador e primeiro sintetizador foi o filsofo grego Aristteles,
que criou determinadas regras lgicas, que conduzem a concluses acertadas, quase como se
fossem um clculo. Tais regras constituem o Silogismo, cujo exemplo clssico :

Todo homem mortal,


Scrates homem,
Logo, Scrates mortal.

3
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O silogismo caracteriza-se por iniciar com uma sentena que afirme uma propriedade de
uma classe, que uma verdade maior (Todo homem mortal). A sentena seguinte apresenta
um indivduo pertencente classe (Scrates mortal) e a terceira sentena conclui que o
indivduo possui a propriedade da classe (Logo, Scrates mortal).
Outro exemplo:

Todos os metais so bons condutores de eletricidade,


O mercrio um metal,
Logo, o mercrio conduz bem a eletricidade.

Foi a Matemtica, dentre todas as cincias, aquela que mais se aproximou da Lgica, por
ser baseada no raciocnio dedutivo. Vejamos como exemplo, as duas proposies abaixo e a
deduo que lhes segue:

3 + 1 = 4;
2 + 2 = 4;
Logo, 3 + 1 = 2 + 2

Do silogismo de Aristteles, a Lgica evoluiu posteriormente para a teoria clssica dos


juzos que, ao invs de perguntar o que a verdade?, preocupa-se em avaliar quando uma
proposio ou juzo verdadeiro. Tomemos como exemplo a afirmao Carlos estudante, que
exprime um estado mental (juzo) que ser verdadeiro se estiver de acordo com o fato externo de
Carlos estudar. Um juzo falso se exprime ou une mentalmente o que na realidade est
separado.
Utilizando, ento, a Lgica, poderamos escrever as instrues para o cobrador de
entradas em um cinema:

Se Carlos estudante Ento


cobre meia entrada
Seno
cobre entrada inteira.

A finalidade da disciplina de Algoritmos, fundamental em todos os cursos de Ensino


Superior que preparam profissionais para atuar na rea das Cincias Exatas, fornecer os
fundamentos tericos bsicos para o desenvolvimento do raciocnio lgico necessrio na
resoluo de problemas computacionais.
Mas, o que so problemas computacionais?

4
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Este assunto ser visto no prximo captulo, onde tambm so abordados conceitos
bsicos sobre processamento de dados, organizao de um computador, memria e tipos de
dados, identificadores, estrutura de um algoritmo e programao.
No terceiro captulo veremos expresses aritmticas, operadores aritmticos, funes
matemticas, expresses lgicas, operadores relacionais, operadores lgicos, tabelas verdade e
prioridades entre operadores.
O quarto captulo dedicado a comandos de atribuio, de entrada e de sada. J, o quinto
captulo apresenta os comandos de seleo e no sexto captulo so estudados os comandos de
repetio. No captulo sete so vistos os tipos estruturados homogneos (vetores e matrizes) e o
oitavo captulo aborda conhecimentos bsicos da linguagem C.

5
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

2. COCEITOS BSICOS
2.1 PROBLEMAS COMPUTACIOAIS

Problemas computacionais so aqueles que esto relacionados com a manipulao de


informaes. Um computador , basicamente, uma mquina que recebe informaes, as processa
e fornece o resultado deste processamento, que so, novamente, informaes.

INFORMAO PROCESSAMENTO INFORMAO


Entrada de Dados CPU, MEMRIA Sada de Dados

O processamento das informaes pelo computador envolve sua parte central que
formada pela memria do computador, onde ficam armazenados o sistema operacional da
mquina, o programa e as informaes ou dados, e pela Unidade Central de
Processamento (CPU) que ficar encarregada de executar as instrues e operaes
necessrias para obter o resultado esperado. Os dados que entram no computador chegam atravs
de dispositivos de entrada (como o teclado ou o driver de disco) e so armazenados
na memria RAM do computador. Os dados produzidos pelo processamento so, tambm,
armazenados na memria RAM e chegam ao usurio atravs de dispositivos de sada
(como o vdeo, o driver de disco ou a impressora).

2.2 TIPOS DE DADOS

Os dados com que um computador trabalha podem ser de trs tipos: numricos,
alfanumricos (caracteres) ou lgicos (booleanos). Dependendo do tipo do dado, a ele
estar associado um tamanho necessrio em memria para armazen-lo e as operaes que o tipo
suporta. Faz-se, ento, distino entre os diversos dados quanto a seu tipo, para que o
computador esteja preparado para oper-los e armazen-los.
Os dados tambm devem ser diferenciados quanto a serem constantes ou
variveis:
1. Constante a informao dita constante quando no existe a possibilidade de que
sofra nenhuma variao no decorrer do tempo em que executado o algoritmo.
Exemplo: no clculo da rea de um crculo qualquer, o valor de Pi ser sempre o mesmo,
no importando qual seja o crculo, o que o caracteriza como constante.

6
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

2. Varivel a informao dita varivel, quando se admite que seu valor possa sofrer
alteraes durante a execuo do algoritmo, ou que ela possa assumir diferentes valores a cada
nova execuo do algoritmo.
Exemplo: no clculo da rea de um crculo qualquer, o raio do crculo uma informao
varivel, dependendo do crculo para o qual se deseja calcular a rea.

2.3 TIPOS PRIMITIVOS DE DADOS

Como vimos anteriormente, os dados ou informaes que so processados por um


computador devero ter seu tipo declarado, o que pode ser entendido como classificar a
informao quanto ao seu tipo e solicitar um espao que comporte seu valor, para armazenagem
na memria RAM do computador.
So quatro os tipos primitivos:
1. Inteiro - declaramos como sendo do tipo inteiro qualquer informao que assuma
valores numricos pertencentes ao conjunto dos nmeros inteiros (por exemplo, -34, 90, 0).
Exemplo: inteiro quantidade;
inteiro idade;
2. Real - serve para declararmos variveis que podero assumir valores numricos
pertencentes ao conjunto dos nmeros reais (por exemplo, 23.56, -34.00, 0.0).
Exemplo: real preco;
real notas;
3. Caractere - quando declaramos uma varivel como sendo do tipo caractere ela poder
assumir qualquer dos caracteres do teclado, tanto alfanumricos como especiais (por exemplo,
aula, 5 de fevereiro, 178, 0.55).
Exemplo: caractere nome_aluno;
caractere profissao;
4. Lgico - declaramos como sendo do tipo lgico (ou booleano) qualquer informao
que possa assumir apenas os valores verdadeiro ou falso.
Exemplo: lgico ligado;
lgico aprovado;

2.4 FORMAO DE IDETIFICADORES

Identificadores so os nomes que criamos e associamos as variveis e constantes de um


algoritmo e que devem observar as regras abaixo:

7
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1. Devem ser formados por um ou mais caracteres, sendo que o primeiro dever ser uma
letra;
2. Caracteres especiais no so vlidos (por exemplo: % * + ; : @ ` ?)
3. No podem conter espao;
4. O caractere de sublinha (_) considerado vlido.

Exemplo: Mdia Aritmtica no pode ser usado como identificador por utilizar o
acento agudo que um caractere especial e por conter espao. Para tornar-se vlido, deveria ser
escrito: Media_Aritmetica ou MediaAritmetica.

Vamos, tambm, considerar diferenas quanto aos caracteres maisculos e minsculos,


de tal forma que os identificadores Aluno, aLuno e aluno correspondem a diferentes
variveis ou constantes. Com isso, estaremos seguindo as regras da linguagem C, porm h
outras linguagens que no fazem esta diferena.
Deve-se observar que no permitido utilizar o mesmo identificador para nomear
diferentes variveis e/ou constantes ou nomear o algoritmo.

2.5 PROGRAMAO ESTRUTURADA E PROGRAMAO ORIETADA A


OBJETOS

Os problemas computacionais, para que possam ser resolvidos por um computador,


devero estar escritos em uma linguagem computacional. Isto significa que, aps ser elaborado
o algoritmo que resolve o problema, este dever ser traduzido para uma linguagem conhecida
pelo computador. A linguagem que utilizaremos para testar nossos algoritmos no computador
chama-se C. Esta linguagem foi criada em 1972 por Dennis M. Ritchie e Ken Thompson e tem
sido muito usada desde ento. Foi projetada para a construo de sistemas computacionais, sendo
o sistema operacional UNIX, por exemplo, desenvolcido em C. uma linguagem poderosa,
porttil e flexvel, que permite planejar programas estruturados.
Existem em programao vrios paradigmas, como: Programao Estruturada,
Programao Orientada a Objetos, Programao Lgica. Trataremos aqui das caractersticas dos
dois primeiros.
A Programao Estruturada caracterstica de linguagens como Pascal, C e Fortran.
Baseia-se, como o nome diz, na estruturao dos programas, o que consiste em subdividir o
problema a ser resolvido em tarefas, que vo constituir pequenos blocos, independentes entre si

8
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

e acion-los a partir de um bloco principal. Tal caracterstica torna mais fcil a tarefa de testar
programas, uma vez que os blocos podem ser testados em separado, e, tambm, auxilia na
manuteno dos cdigos. Quando analisamos um problema sob este paradigma, nossa primeira
preocupao compreender e definir muito bem a ao que proporcionar o resultado a atingir
e, depois, definimos os dados que estaro envolvidos na tarefa.
J a Programao Orientada a Objetos, que vem tendo uso crescente nos ltimos anos,
preocupa-se com o objeto, que basicamente possui caractersticas (atributos ou dados) e
propriedades (mtodos ou ao). Exemplos de linguagens orientadas a objeto so: Delphi, C++ e
Java.
Para melhor exemplificar as diferenas bsicas entre as duas, analisemos o problema de
calcular a mdia aritmtica de um aluno, sendo dados de entrada suas duas notas e como sada
queremos a sua mdia aritmtica.
Ao resolvermos este problema utilizando o raciocnio da programao estruturada, vamos
nos preocupar em conhecer bem e depois descrever a ao de calcular a mdia aritmtica (m =
(nota1 + nota2)/2) e vamos nos utilizar (de forma secundria) de dados para executar a ao, ou
seja, necessitaremos de espao em memria para armazenar as duas notas e o resultado do
clculo e, todas so do tipo numrico real.
J pelo paradigma da programao orientada a objetos, vamos, primeiramente, nos
preocupar com o objeto mdia que possui caractersticas prprias e que vamos descrever
apontando seus atributos e seus comportamentos. Os atributos (ou dados) sero as notas e os
comportamentos ou mtodos sero, neste caso, a frmula para clculo da mdia aritmtica. Este
modelo de programao, como vincula a um objeto seus dados e mtodos, trouxe um novo
conceito programao de computadores, que a possibilidade de agruparmos objetos com as
mesmas caractersticas e com eles formarmos o que se chama classes. Criamos classes de objetos
para no repetirmos a definio de propriedades iguais para objetos diversos que as possuem.
Tomemos como exemplo o problema mesa e vamos analis-lo sob o paradigma da orientao a
objetos. Existem mesas de diversos tipos, formas e materiais, porm todas tm: atributos (um
tampo e pernas de sustentao) e mtodos (sustentar outros objetos sobre o tampo).
Com esta definio, criamos a classe mesa e dela podem derivar vrios objetos: mesa
com tampo redondo e quatro pernas; mesa fixa na parede com duas pernas e tampo retangular de
madeira e outras tantas mais.
Uma boa definio para classe :

9
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Uma classe um agrupamento de objetos que revelam profundas semelhanas entre si,
no aspecto estrutural e funcional.
Os objetos pertencentes a uma classe, dela herdaro os atributos e mtodos e
acrescentaro aqueles que necessitam pela suas particularidades.
Quando, dentro deste paradigma, chegamos no nvel de resoluo dos mtodos dos
objetos, voltamos a utilizar o paradigma da programao estruturada, preocupando-nos com a
ao. Podemos, portanto, dizer que a Programao Orientada a Objetos inclui os conhecimentos
bsicos da Programao Estruturada. Em nossa disciplina vamos nos preocupar em aprender esta
forma estruturada de programar que envolve o aprendizado de regras bsicas, instrues e
comandos da lgica de desenvolvimento de algoritmos e em disciplinas posteriores os alunos
iro utiliz-la novamente, tanto nas disciplinas de programao estruturada como nas que
utilizam orientao a objetos.

2.6 ESTRUTURA DE UM ALGORITMO

Ao elaborarmos um algoritmo na forma estruturada de programao, devemos observar


as seguintes subdivises:

(a) Cabealho do algoritmo:


Serve para nomear o algoritmo. Deve iniciar pela palavra algoritmo (ou programa)
e ser seguido pelo identificador do algoritmo (nome) e o sinal ; (ponto e vrgula). O sinal de
ponto e vrgula utilizado ao longo de todo o algoritmo como separador de instrues.

Exemplos: algoritmo area_do_circulo;


algoritmo raizquadrada;

(b) Zona de declaraes:


Nesta parte do algoritmo so definidas as constantes e declaradas as variveis necessrias
ao seu processamento.

- Definio de Constantes
A declarao de cada constante deve ser precedida pela palavra const e a seguir
colocado o identificador da constante, o sinal de igualdade (=) e o valor que possui, finalizando
com o separador ; (ponto e vrgula).

10
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplos: algoritmo area_do_circulo;


const Pi = 3.1416;
const Nome = Jose;

- Declarao de Variveis
Declaram-se variveis para reservar uma quantidade de memria apropriada para
armazenar um dado e indicar que seu contedo ser referenciado pelo nome que foi escolhido.

Exemplo: inteiro idade;

Com a declarao do exemplo acima estaremos reservando um espao em memria,


chamado idade, com tamanho suficiente para guardar um nmero do tipo inteiro e toda vez que
usarmos a palavra idade nas instrues do algoritmo, estaremos nos referindo ao valor numrico
que est armazenado neste espao da memria do computador.

Exemplo: real area, raio;

Pelo exemplo, pode-se ver que, havendo mais de uma varivel do mesmo tipo, elas
podem ser declaradas na mesma linha, separadas por vrgula.

(c) Corpo do algoritmo


Faz parte do corpo do algoritmo toda a seqncia de instrues que conduz resoluo
do problema. O corpo do algoritmo tem seu comeo determinado pela palavra inicio, seguida por
todas as instrues separadas por ; (ponto e vrgula) e termina com a palavra fim.

Exemplo: algoritmo area_do_circulo;


real area, raio;
const Pi = 3.1416;
inicio
instruo 1;
instruo 2;
-
-
instruo n;
fim.

11
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

*****************************************************************************
2.7 EXERCCIOS PROPOSTOS

1) Dentre os identificadores abaixo, indique quais so corretos (C) e quais so incorretos


(I). Para os indicados como incorretos, justifique sua resposta:

a) X1YZ
b) A9PQ
c) GF,3W
d) 123casa
e) Lpis_cor
f) Aula hoje
g) inteiro

2) Escreva o tipo de dado ideal para se representar cada uma das seguintes informaes:

a) O nmero de telefone
b) Nmero de estudantes da universidade
c) Se uma pessoa gosta de bala ou no
d) O valor de uma casa
e) A cor de um carro
f) Resultado de uma diviso

3) Identificar os tipos dos seguintes dados:

a) 13 de agosto
b) 0.8
c) ?
d) 27
e) -27

12
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3. EXPRESSES, OPERADORES E FUES


Neste captulo abordaremos os diversos operadores e funes que sero utilizados na
construo de algoritmos.

3.1 EXPRESSES ARITMTICAS

So aquelas cujos operadores so aritmticos e cujos operandos so constantes e/ou


variveis do tipo numrico (inteiro e/ou real).

Exemplos: a = b * 5;
y = n * (b +c);

3.1.1 OPERADORES ARITMTICOS

+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Resto inteiro da diviso entre inteiros

Observao: o resultado da diviso entre dois inteiros ser tambm um inteiro. Porm, basta que
um dos valores envolvidos na operao de diviso seja real, para que o resultado
seja um real.

3.1.2 FUES MATEMTICAS

Sempre retornam um valor (resultado), cujo tipo depende do que est definido para cada
funo;
Dependem sempre dos parmetros (argumentos), que so colocados dentro dos
parnteses, separados por vrgula, se houver necessidade de mais de um.

13
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Tipo do Tipo do
Resultado Funo
argumento resultado
Logaritmo neperiano log(x) real real
log10(x)
Logaritmo base 10 real Real

e elevado potencia x exp(x) real Real

fabs(x) real, int Real


Valor absoluto de x fabs(-2.5) = 2.5
int, real
abs(-5) = 5 abs(x) (trunca o Int
real)
Decompe um real x em duas partes: y recebe a parte
fracionria e a funo devolve a parte inteira, ambas como modf(x,y) real, real Real
real.
Arredonda o valor de x para cima ceil(5.4) = 6.0 ceil (x) real Real

Arredonda o valor de x para baixo floor(5.4) = 5.0 floor(x) real Real

Retorna x elevado a potncia y pow(2,2) = 4 pow(x,y) real Real

Raiz quadrada de x sqrt(36) = 6 sqrt(x ) real real

Retorna o resto da diviso de x por y fmod (25.55 , 2) = 1.55 fmod(x,y) real, real real

Seno de x sin(x ) real Real

Cosseno de x cos( x) real Real

Arco-tangente de x atan( x) real Real

e = constante de Euler = 2.718

3.1.3 PRIORIDADES AS EXPRESSES ARITMTICAS

1) Parnteses mais internos


2) - (menos unrio)
3) Funes matemticas
4) * / %
5) + -

os casos de operadores com a mesma prioridade, a expresso ser executada


observando a seqncia de operadores da esquerda para a direita.

14
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3.2 EXPRESSES LGICAS

So expresses onde os operandos so relaes e/ou variveis do tipo lgico e os


operadores so relacionais ou lgicos.

Exemplos: A>B
(X = Y) OU (X = Z)

3.2.1 OPERADORES RELACIOAIS

Uma relao uma comparao realizada entre valores do mesmo tipo, que podem ser
constantes, variveis ou expresses. O resultado de uma operao relacional ser sempre lgico
(verdadeiro ou falso).
So os seguintes os operadores relacionais:

= Igualdade
> Maior
< Menor
<> Diferente
<= Menor ou igual
>= Maior ou igual

3.2.2 OPERADORES LGICOS

So os seguintes os operadores lgicos:

Operador E: utilizado quando necessitamos estabelecer que todos os relacionamentos


lgicos de uma sentena devem ser verdadeiros.

Exemplo: Se (Media_aluno >= 7) E (Presena_aluno >= 0.75) Ento


considere o aluno aprovado

Tabela verdade do operador E: apresenta o resultado obtido de todas as combinaes


possveis do operador:

Condio 1 Condio 2 Condio 1 E Condio 2


V V V
V F F
F V F
F F F

15
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Operador OU: utilizado quando necessitamos estabelecer que basta que uma das
relaes lgicas de uma sentena seja verdadeira. tambm conhecido como OU INCLUSIVO.

Exemplo: Se (Media_aluno < 7) OU (Presenca_aluno < 0.75) Ento


considere o aluno reprovado

Tabela verdade do operador OU:

Condio 1 Condio 2 Condio 1 OU Condio 2


V V V
V F V
F V V
F F F

Operador XOU: utilizado quando necessitamos estabelecer que apenas uma das
relaes lgicas de uma sentena pode ser verdadeira. tambm conhecido como OU
EXCLUSIVO.

Tabela verdade do operador XOU:

Condio 1 Condio 2 Condio 1 XOU Condio 2


V V F
V F V
F V V
F F F

Operador O: utilizado quando necessrio estabelecer o valor contrrio de uma


determinada condio.

Exemplo: Se NO(Media_aluno) >= 7 Ento


considere aluno reprovado

Tabela verdade do operador O:

Condio O Condio
V F
F V

16
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3.2.3 PRIORIDADE ETRE OS OPERADORES LGICOS:

1) NO
2) E
3) OU
4) XOU

3.3 PRIORIDADE ETRE TODOS OS OPERADORES:

1) Parnteses mais internos


2) (menos unrio)
3) Funes matemticas
4) Operadores aritmticos: 4.2 * / %
4.3 + -
5) Operadores relacionais
6) Operadores lgicos 6.1 NO
6.2 E
6.3 OU
6.4 XOU

os casos de operadores com a mesma prioridade, ser observada a ordem de


execuo da esquerda para a direita.

*****************************************************************************
EXERCCIOS RESOLVIDOS:

17
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

*****************************************************************************
3.4 EXERCCIOS PROPOSTOS

1) Considerando X 1, Y 2 e Z 5, desenvolva:

a) (Z % Y/Y)
b) X + Y + Z/3
c) (sqrt(Z/Y + X * Y))
d) Z abs(X sqrt(Y * Y))

2) Sendo A = VERDADEIRO e B = FALSO, qual o resultado das expresses abaixo?

a) NO A E B OU A E NO B
b) NO(NO(A OU B) E (A OU B))
c) A OU B E NO A OU NO B
d) (A OU B) E (NO A OU NO B)

18
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

3) Resolva as relaes abaixo:

a) Falso OU 20 % 18/3 <> 18/3 % 20


b) 2 + 8 % 7 >= 3 * 6 - 15 E 3 * 5/4 <= pow(2, 3)/0.5
c) ceil(20/3) > sqrt(36) OU floor(18/4) >= pow(2, 2)
d) NO(5 <> 10/2 OU Verdadeiro E 2 - 5 > 5 - 2 XOU Verdadeiro)
e) Verdadeiro E 40/4 + 3 < 150/3
f) Z 12.55
ceil(Z)/2 + 50 % 5 <> abs(-20/3)
g) fabs(-50/2) 20 > pow(2, 4) XOU (13/2) < sqrt(36)
h) X 7
X = sqrt(45 + 4) OU NO (6 + 2 <> floor(8.25)) E 9 < 9 % 1
i) A 8
abs(pow(A, 2) + 0.1 * (-1)) > fmod(25.5 * 2, 2) XOU FALSO

19
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

4. COMADO DE ATRIBUIO, BLOCOS E COMADOS DE ETRADA


E SADA DE DADOS
4.1 COMADO DE ATRIBUIO

O comando de atribuio utilizado para atribuir valor a uma varivel, que dever ser do
mesmo tipo da varivel. Utiliza-se para simbolizar a atribuio o sinal e l-se recebe.

Sintaxe do comando atribuio:

Identificador valor;

Exemplo: algoritmo Area_doCirculo;


/* Algoritmo que, dado o raio de um crculo, calcula a sua rea */
const Pi = 3.1416;
real area, raio;
inicio
raio 5;
--------------------;
fim.

No algoritmo acima, a instruo

raio 5.0;

estabelece que a varivel raio recebe o valor 5.0, o que, em termos de programao,
significa que a varivel raio armazenar na memria do computador o valor 5.

Exemplo: algoritmo Area_doCirculo;


/* Algoritmo que, dado o raio de um crculo, calcula a sua rea*/
const Pi = 3.1416;
real area, raio;
inicio
raio 5;
--------------------;
--------------------;
raio 20.78
fim.

No algoritmo acima, a primeira instruo de atribuio varivel raio armazena em


memria o valor real 5, mas, seguindo as instruoes seqencialmente, o computador encontra
outra atribuio para raio, onde ele armazena 20.78. Com isto, o valor anterior (5) substituido
pelo novo valor, 20.78. O valor 5 que havia sido anteriormente armazenado perdido.

20
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

4.2 COMADO DE ETRADA DE DADOS

Sintaxe do comando de entrada de dados:

leia(identificador_da_variavel);

Exemplo: algoritmo Area_doCirculo;


/* Algoritmo que, dado o raio de um crculo, calcula a sua rea*/
const Pi = 3.1416;
real area, raio;
inicio
leia(raio);
area Pi * pow(raio,2);
fim.

No exemplo acima, a instruo leia(raio) permite que seja fornecido um valor vlido para
a varivel raio. Desta forma, aps executada a instruo, a varivel armazenar na memria do
computador o valor que foi lido, se este for do mesmo tipo da varivel. A seguir, ser executada
a prxima instruo que atribui varivel area o resultado da expresso Pi*pow(raio,2).

4.3 COMADO DE SADA DE DADOS

Sintaxe do comando de sada de dados:

escreva(texto, identificador_da_variavel);

Exemplo: algoritmo Area_do_Circulo;


// Algoritmo que, dado o raio de um crculo, calcula a sua rea
const Pi = 3.1416;
real area, raio;
inicio
leia(raio);
area Pi * pow(raio);
escreva(A rea do crculo de raio , raio, , area, ,
onde considerou-se o valor de Pi = , Pi);
fim.

O comando escreva poder fornecer apenas o contedo de uma varivel, ou, se


quisermos, poderemos adicionar um texto, como no exemplo acima. Todos os caracteres que
configurarem um texto devero estar entre apstrofes ou aspas duplas (inclusive o espao) e
deveremos separar com vrgula o texto das variveis (ou constantes) dentro do comando escreva.
Se, ao executarmos o algoritmo acima, fornecssemos o valor 2 para raio, a instruo escreva
iria fornecer como sada:

21
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

A rea do crculo de raio 2 12.5664, onde considerou-se o valor de Pi = 3.1416

*****************************************************************************
4.4 EXERCCIOS PROPOSTOS
(Exerccios identificados com (*) esto resolvidos ao final do captulo)

1. Se x possui o valor 15 e forem executadas as seguintes instrues:


X X + 3;
X X - 6;
X 3 * X;
qual ser o valor armazenado em X?

2. (*) Escreva um algoritmo que tenha como entrada o nome de um funcionrio, o nmero de
horas que trabalhou e o nmero de filhos com menos de 18 anos que possui. O algoritmo
dever fornecer como sada o salrio que este funcionrio ir receber, considerando:
Um valor igual a R$ 10.00 por hora trabalhada;
Um acrscimo de R$50.00 por filho;
Um desconto de 9% como contribuio ao INSS, sobre o total de ganhos.

3. Escreva um algoritmo que recebe como entrada trs valores numricos reais (X, Y e Z),
calcula e informa:
A rea do tringulo que tem X por base e Y por altura;
O comprimento da circunferncia de raio Z;
A rea do trapzio que tem X e Z por bases e Y por altura;
A rea do retngulo de lados Y e Z;
A rea da superfcie de um cubo que tem X por aresta.

4. (*) Escreva um algoritmo que leia dois valores numricos inteiros, armazenando-os em duas
variveis (A e B). O algoritmo dever trocar o valor das duas variveis, de tal forma que em A
fique armazenado o valor de B e vice-versa. Ao final, o algoritmo dever escrever os valores
de A e B.

5. Faa um algoritmo para calcular a rea da figura hachurada a seguir, sabendo que o dimetro
do crculo menor igual ao raio do crculo maior. Calcule, tambm, a percentagem da rea do
crculo menor sobre a rea do crculo maior.

6. (*) Escreva um algoritmo para calcular e informar o valor de converso para graus
centgrados de uma temperatura em graus Farenheit, sabendo que C = (5 * (F - 32))/9.

22
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

7. Escreva um algoritmo para calcular o consumo mdio de combustvel de um automvel em


Km/l. Considere como dados de entrada: quilometragem inicial, quilometragem final,
volume de combustvel consumido.

8. Escreva um algoritmo que leia dois valores numricos do tipo inteiro e escreva o resultado da
soma dos quadrados destes nmeros e o resultado da diviso dos dois valores.

9. Faa um algoritmo para calcular o valor de Y como funo de X segundo a funo

Y= (5X + 2)2/X2, considerando um domnio real.

10. Faa um algoritmo para calcular e escrever a tabuada at 10 de um nmero lido.

11. Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano,
P(x1,y1) e P(x2,y2), escreva a distncia entre eles. A frmula que efetua tal clculo :

12. (*) Escreva um algoritmo que leia trs nmeros inteiros e positivos (A, B, C) e calcule a
seguinte expresso:

sendo

13. Faa um algoritmo que leia a idade de uma pessoa expressa em anos, meses e dias e mostre-a
expressa apenas em dias.

14. Ler um valor inteiro e escrever seu antecessor e seu sucessor.

15. Faa um algoritmo para calcular o valor total em metros quadrados necessrios para revestir
as paredes de um banheiro.

16. Faa um algoritmo que leia o nmero de votos brancos, nulos e vlidos de uma eleio e
escreva o percentual que cada um representa em relao ao total de votantes.

17. Uma loja de brinquedos oferece descontos de 15% sobre o preo de venda de todo o seu
estoque. Escreva um algoritmo que leia o preo de um brinquedo antes da promoo e
calcule quanto deve ser o novo preo.

18. Escreva um algoritmo que calcule e escreva o fatorial de 5.

19. O custo ao consumidor de um carro novo a soma do custo de fbrica mais a percentagem
do distribuir e o percentual de impostos. Faa um algoritmo que leia estas informaes e
fornea o valor a ser pago por um automvel.

23
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

20. Escrever um algoritmo que l o pblico possvel em um estdio de futebol e o total de


pessoas conforme o lugar ocupado no estdio (arquibancada ou cadeiras) em um
determinado jogo de futebol. O algoritmo dever informar a renda do jogo, considerando
valor de cada lugar nas arquibancadas igual a R$8.00 e valor de cada lugar nas cadeiras
igual a R$12.00. Informe, tambm, o percentual de pblico presente ao jogo.

*****************************************************************************
4.5 EXERCCIOS RESOLVIDOS

Exerccio 2:
Algoritmo C

algoritmo salario_func; #include <stdio.h>


char nome[15];
caractere nome; int horas, nfilhos;
inteiro horas, nfilhos; float salario;
real salario;
void main(void)
inicio {
leia(nome, nfilhos, horas); printf("\n Digite o nome do funcionario\n");
salario(horas*10+50*nfilhos); scanf("%s", &nome);
salariosalario*0.91; printf("\n Digite o no. filhos com menos de 18 anos\n");
escreva(salario); scanf("%d", &nfilhos);
fim. printf("\n Digite o total de horas trabalhadas\n");
scanf("%d", &horas);
salario = (horas*10+50*nfilhos);
salario = salario*0.91;
printf("\nSalario a receber: %5.2f\n", salario);
return 0;
}

Exerccio 4:
Algoritmo C
algoritmo troca; #include <stdio.h>
inteiro a, b, aux; int a,b,aux;

inicio void main(void)


leia(a, b); {
aux a; scanf("%i%i", &a, &b);
a b; aux = a;
b aux; a = b;
escreva(a, b); b = aux;
fim. printf("\n%i\n%i", a, b);
return 0;
}

24
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exerccio 6:
Algoritmo C
algoritmo temperatura; #include <stdio.h>

real gc, gf; float gf, gc;

inicio void main(void)


leia(gf); {
gc (5 * (gf - 32))/9; printf("Digite a temperatura farenheidt\n");
escreva(gc); scanf("%f", &gf);
fim. gc = (5 * (gf - 32))/9;
printf("\nTempertura Celsius: %5.2f", gc);
}

Exerccio 12:
Algoritmo C
algoritmo Ex_12; #include <stdio.h>
#include <math.h>
int a, b, c;
float d, r, s; int a,b,c;
float d,r,s;
inicio
leia(a, b, c); void main(void)
r pow((a + b), 2); {
s pow((b + c), 2); printf("Digite os valores de a, b e c\n");
d (r + s)/2; scanf("%d%d%d", &a, &b, &c);
escreva(d); r = pow((a + b), 2);
fim. s = pow((b + c), 2);
d = (r + s)/2;
printf ( "\n Diviso dos valores: %5.2f\n", r, d);
return 0;
}

25
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. COMADOS CODICIOAIS
Os comandos condicionais permitem que sejam determinadas as instrues a serem
executadas em funo do resultado de expresses lgicas (condies).

5.1 COMADO CODICIOAL SE

5.1.1 SITAXE:

se (condio) ento
Comando1;
seno
Comando2;

Onde:
se, seno e ento so palavras reservadas do comando;
condio uma expresso lgica.

O comando se determina que, caso o resultado lgico de condio seja verdadeiro,


dever ser executado Comando1, em caso contrrio dever ser executado Comando2.
Comando1 e Comando2 simbolizam aqui, tanto um comando apenas, como uma
seqncia de comandos. Quando tivermos mais de um comando para serem executados, em
funo da deciso de uma condio, devemos demarc-los com um bloco, que fica delimitado
pelos comandos inicio e fim.
Observe bem!!!: demarcando um bloco de comandos estaremos garantindo que aqueles
comandos devero ser executados conjuntamente, na seqncia em que esto escritos. No caso
de no demarcarmos os comandos por um bloco, o comando se ir considerar apenas o primeiro
de todos os comandos que lhe seguem como sendo dependente do seu resultado lgico.
Podemos, ento, ampliar a sintaxe do comando se para a situao de termos mais de um
bloco de comandos a serem executados conforme o resultado da expresso lgica:

se (condio) ento
inicio
Comando;
Comando;
Comando;
fim;
seno
inicio
Comando;

26
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Comando;
fim;

O comando se pode ser, tambm, utilizado na sua forma simples, onde no aparece o
seno:

se condio ento
Comando ou bloco;

5.1.2 SELEO ECADEADA

SITAXE:

se condio1 ento
se condio2 ento
Comando ou Bloco1;
seno
Comando ou Bloco2;
seno
se condio3 ento
Comando ou Bloco3;
seno
Comando ou Bloco4;

No caso de condio1 ser verdadeira, ser testada condio2 que, se for verdadeira,
levar execuo do Bloco1. Se condio2, porm, for falsa, ser executado o comando
seno que conduz a execuo do Bloco2. Se condio1 for falsa, levar direto para o
seno do primeiro se onde ser avaliada a condio3.
Podemos encadear quantos comandos se forem necessrios. A necessidade ou no de
delimitar blocos depender do nmero de comandos dependentes.

5.1.3 EXEMPLO:

Faa um algoritmo cuja finalidade calcular o salrio final de um funcionrio em funo de


abono concedido pela empresa. O algoritmo dever ler o salrio base e considerar os seguintes
limites para o abono:
salrio menor que 300.00 dever receber um abono de 30%;
salrio entre os limites 300.00 (inclusive) e 1000.00 (exclusive) dever receber abono de
20%;
salrio com valor igual ou superior a 1000.00 dever receber abono de 10%.

algoritmo Salario;

real sal_base, sal_final;

27
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio
leia(sal_base);
se sal_base < 300 ento
sal_final sal_base * 1.30;
seno
se sal_base >= 300 e sal_base < 1000 ento
sal_final sal_base * 1.20;
seno
sal_final sal_base * 1.1;
escreva(O salrio com abono R$ , sal_final);
fim.

No exemplo acima, no houve necessidade de demarcar blocos, j que cada comando


tinha sempre um nico comando na sua dependncia.

5.2 COMADO CODICIOAL ESCOLHA

O comando escolha tambm conhecido como comando de seleo de mltipla


escolha.

5.2.1 SITAXE:

escolha seletor
Caso1: comando ou bloco;
Caso2: comando ou bloco;
Cason: comando ou bloco;
seno
Comando ou Bloco;
fim;

Onde:
escolha, seno e fim so palavras reservadas do comando;
seletor uma varivel ou expresso de tipo escalar (exceto real);
Caso1,...Cason so os valores esperados para seletor.

O comando determina que em funo do valor contido em seletor seja executado o


comando ou bloco pertencente ao caso que se identifica com o seletor. Caso poder ser um ou
mais escalares ou um intervalo de escalares.

escolha N1
0 .. 10:
Comando ou bloco;
11 .. 20:
Comando ou bloco;
seno
Comando ou bloco;
fim;

28
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

escolha Letra
A,a:
Comando ou bloco;
B, b:
Comando ou bloco;
C .. F:
Comando ou bloco;
seno
Comando ou bloco;
fim;

5.2.2 EXEMPLO:

Faa um algoritmo que leia dois nmero reais (N1 e N2) e um caractere. Conforme o valor lido
para o caractere, o algoritmo dever calcular e informar:
Se caractere for +, dever ser calculada a soma de N1 e N2;
Se caractere for -, dever ser calculada a diferena entre os dois valores;
Se caractere for *, dever ser calculado o produto de N1 e N2;
Se caractere for /, dever ser calculada a diviso de N1 por N2.

algoritmo calculadora;
real n1,n2;
caractere operador;

inicio
leia(n1,n2);
leia(operador);
escolha operador
+: inicio
escreva(O resultado da soma entre n1 e n2 : );
escreva(n1+n2);
fim;
-: inicio
escreva(O resultado da diferena entre n1 e n2 : );
escreva(n1-n2);
fim;
*: inicio
escreva(O resultado da multiplicao entre n1 e n2 : );
escreva(n1*n2);
fim;
/: inicio
escreva(O resultado da diviso entre n1 e n2 : );
escreva(n1/n2);
fim;
seno
escreva(Operador invlido!);
fim;
fim.

29
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Observe no exemplo acima que os caracteres so sempre escritos entre apstrofes e que
eles so do mesmo tipo da varivel operador. Observe, ainda, que o comando escolha
permite que apenas um dentre os vrios valores apresentados para a varivel seletora seja
escolhido. Caso nenhum valor seja adequado, ser executado o comando seno.
Identicamente ao comando se, tambm o comando escolha poder ser utilizado sem o
seno. Seria escrito, ento, com a seguinte sintaxe:

escolha seletor
Caso1:
Comando ou bloco;
Caso2:
Comando ou bloco;
Cason:
Comando ou bloco
fim;

*****************************************************************************
5.3 EXERCCIOS PROPOSTOS:
(Exerccios identificados com (*) esto resolvidos ao final do captulo)

1. (*) Faa um algoritmo para calcular a mensalidade a ser paga pelos alunos de uma academia
de ginstica que pratica os seguintes descontos:
Mulheres com idade igual ou inferior a 15 anos tero desconto de 15%;
Mulheres com idade superior a 15 anos tero desconto de 10%;
Homens com idade inferior a 22 anos no tero desconto;
Homens com idade igual ou superior a 22 anos tero desconto de 20%.
Considerar a mensalidade bsica como R$45.00.

2. Faa um algoritmo para calcular o resultado de um aluno aps trs provas, considerando a
seguinte tabela:
Mdia igual ou superior a 7 aluno aprovado;
Mdia igual ou superior a 5 e inferior a 7 aluno em exame;
Mdia inferior a 5 aluno reprovado.
A mdia do aluno obtida atravs do clculo de mdia ponderada, considerando peso = 3
para a Nota 1, peso = 2 para a Nota 2 e peso = 5 para a Nota 3.

3. Faa um algoritmo para determinar se um nmero inteiro lido par.

4. (*) Faa um algoritmo que l um cdigo (1, 2, 3 ou 4) e dois valores do tipo inteiro, calcula e
fornece:
A adio dos nmeros para cdigo = 1
A subtrao dos nmeros para cdigo = 2
A multiplicao dos nmeros para cdigo = 3
A diviso dos nmeros para cdigo = 4.

30
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. Faa um algoritmo que calcula as razes de uma equao do 2 Grau, considerando que no
possvel a diviso por zero (informar caso ocorra) e considerando tambm invivel o clculo de
razes imaginrias (informar caso ocorra).

6. Faa um algoritmo que l dois valores numricos e informa se so mltiplos entre si.

7. Faa um algoritmo para ler trs valores numricos e escrever o maior entre eles. Considere
que no haver valores iguais.

8. Dados trs valores, A, B e C, verificar se eles podem ser lados de um tringulo. Caso sejam,
dever informar sua rea e se compem um tringulo issceles, escaleno ou equiltero.

A = s * ( s a)( s b)( s c)

Frmula de Heron para a rea de um tringulo qualquer, onde s o semi-permetro do


tringulo (s = (a+b+c)/2).
Para que trs valores possam ser lados de um tringulo, cada um deles dever ser inferior a
soma dos outros dois.

9. Faa um algoritmo para ler trs valores inteiros e escrev-los em ordem crescente (suponha
nmeros diferentes).

10. Escreva um algoritmo que leia um valor referente a dinheiro (por exemplo R$540.00) e
calcula qual o menor nmero possvel de notas de 50.00, 10.00, 5.00 e 1.00 reais em que o valor
lido pode ser decomposto. O algoritmo dever fornecer o valor lido e a relao de notas
necessrias.

11. (*) Escreva um algoritmo que l a hora de incio e fim de um jogo (considere apenas horas
inteiras) e calcula a durao do jogo, sabendo-se que o tempo mximo de durao do jogo
inferior a 24 horas e que o jogo pode iniciar em um dia e terminar no seguinte.

12. Elabore o mesmo algoritmo acima descrito, porm considerando agora a possibilidade de ler
minutos.

13. Faa um programa que l 2 valores, o primeiro servindo de indicador de operao e o


segundo correspondendo ao raio de uma circunferncia. Se o valor for 1, calcular e imprimir a
rea da circunferncia. Se o valor lido for 2, calcular e imprimir o permetro da circunferncia, e
se o valor lido for diferente destes dois valores, imprimir uma mensagem dizendo que o
indicador de operao foi mal fornecido.

14. Faa um programa que l quatro valores, I, A, B e C, onde I um nmero inteiro e positivo e
A, B e C so quaisquer valores reais. O programa deve escrever os valores lidos e:
se I = 1, escrever os trs valores A, B e C em ordem crescente;
se I = 2, escrever os trs valores A, B e C em ordem decrescente;
se I = 3, escrever os trs valores A, B e C de forma que o maior valor fique entre os
outros dois;
se I no for um dos trs valores acima, escrever uma mensagem indicando isto.

31
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

15. Uma loja fornece 5% de desconto para funcionrios e 10% de desconto para clientes
especiais. Faa um programa que calcule o valor total a ser pago por uma pessoa. O programa
dever ler o valor total da compra efetuada e um cdigo que identifique o tipo de cliente.

16. A partir do preo vista de um determinado produto, calcular o preo total a pagar e o valor
da prestao mensal, referentes ao pagamento parcelado. Se o pagamento for parcelado em trs
vezes dever ser dado um acrscimo de 10% no total a pagar. Se for parcelado em 5 vezes, o
acrscimo de 20%.

17. O cardpio de uma lanchonete o seguinte:


Cdigo Especificao Preo unitrio
100 Cachorro quente R$3,50
101 Bauru simples R$4,00
102 Bauru c/ovo R$4,50
103 Hamburger R$4,00
104 Cheeseburger R$3,00

Escrever um algoritmo que leia o cdigo do item pedido e a quantidade e calcule o valor a
ser pago por aquele lanche. Considere que a cada execuo somente ser calculado um item.

18. Uma empresa conceder um aumento de salrio aos seus funcionrios, varivel de acordo
com o cargo, conforme a tabela abaixo. Faa um algoritmo que leia o salrio e o cargo de um
funcionrio e calcule o novo salrio. Se o cargo do funcionrio no estiver na tabela, ele dever,
ento, receber 40% de aumento. Ao final, mostre o salrio antigo, o novo salrio e a diferena
entre o antigo e o novo salrios.

Cdigo Cargo Percentual


101 Gerente 10%
102 Engenheiro 20%
103 Tcnico 30%

19. Ler um valor e escrever se positivo, negativo ou zero.

20. As mas custam R$0.50 cada se forem compradas menos do que uma dzia, recebem 5%
de desconto se for comprada uma dzia e 10% de desconto se forem compradas duas dzias ou
mais. J as peras, custam R$0.65 cada se for comprada menos do que uma dzia, recebem 4%
de desconto se for comprada uma dzia e 8% de desconto se forem compradas trs dzias ou
mais. Escreva um algoritmo que leia a quantidade comprada de cada fruta, calcule e escreva o
custo total da compra.

21. Faa um programa para ler o nome e o nmero de votos de quatro candidatos em uma
eleio. Ao final dever ser escrito o nome do vencedor.

22. Um posto est vendendo combustvel com a seguinte tabela de descontos:


lcool: at 30 litros, desconto de 3% por litro; acima de 30 e at 40 litros 5% de
desconto; acima de 40 litros, desconto de 7% por litro.
Gasolina: at 20 litros, desconto de 4% por litro; acima de 20 litros e at 30, desconto de
6% por litro; acima de 30 litros desconto de 8% por litro.

32
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Escreva um algoritmo que leia o nmero de litros vendidos, o tipo de combustvel (codificado
da seguinte forma: A lcool, G - gasolina), calcule e imprima o valor a ser pago pelo cliente
sabendo que o preo da gasolina de R$ 2,63 o litro e do lcool R$ 1,56.

23. O departamento que controla o ndice de poluio do meio ambiente mantm controle sobre
3 grupos de indstrias que so altamente poluidoras. Faa um algoritmo que, aps ler o tipo da
empresa e o nvel de poluio do ar, emite uma notificao adequada conforme os ndices da
tabela abaixo:

Grupo Nvel aceitvel Ajustar produo Paralisar produo


1 <0.35 0.35 - 0.45 Acima de 0.45
2 <0.3 0.30 - 0.4 Acima de 0.4
3 <025 0.25 0.35 Acima de 0.35

24. Escrever um algoritmo que leia a idade de dois homens e duas mulheres (considere que a
idade dos homens ser sempre diferente, assim como a das mulheres). Calcule e escreva a soma
das idades do homem mais velho com a mulher mais nova e o produto das idades do homem
mais novo com a mulher mais velha.

25. Faa um algoritmo que leia uma data (dia, ms e ano), verifique e informe se ela vlida.

*****************************************************************************
5.4 EXERCCIOS RESOLVIDOS:

Exerccio 1:
Algoritmo C
algoritmo mensalidade; #include <stdio.h>
#include <stdlib.h>
const mens = 45;
const mens = 45;
inteiro idade;
caractere sexo; int idade;
real total; char sexo;
float total;
inicio
total mens; void main(void){
leia(sexo, idade); total = mens;
se sexo = f ento printf("Digite sexo e idade\n");
se idade <= 15 ento scanf("%c%d", &sexo, &idade);
total mens * 0.85; if (sexo == 'F' || sexo == 'f')
seno if (idade <= 15)
total mens * 0.9; total = mens * 0.85;
seno else
se idade >= 22 ento total = mens * 0.9;
total mens * 0.8; else
escreva(total); if (idade >= 22)
fim. total = mens * 0.8;
printf("\nMensalidade: %.2f\n", total);
return (EXIT_SUCCESS);
}

33
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exerccio 4:
Algoritmo C
algoritmo operacoes; #include <stdio.h>
#include <stdlib.h>
inteiro n1, n2, codigo;
real r; int n1, n2, codigo;
float r;
inicio
leia(codigo, n1,n2); void main(void){
escolha codigo printf("1 - adicao 2 - subtracao 3 - multiplicacao 4 - divisao\n");
1: printf("Digite a opcao\n");
r n1 + n2; scanf("%i", &codigo);
2 printf("Digite os dois valores inteiros\n");
r n1 - n2; scanf("%i%i", &n1, &n2);
3 switch (codigo){
r n1 * n2; case 1:
4: r = n1 + n2;
r n1/n2; break;
seno case 2:
escreva('Cdigo invlido!'); r = n1 - n2;
fim; break;
escreva('Resultado: ', r); case 3:
fim. r = n1 * n2;
break;
case 4:
r = n1/n2;
break;
default:
printf("\nOpcao invalida!\n");
}
printf("Resulatdo: %.2f\n", r);
return 0;
}

Exerccio 11:
Algoritmo C
algoritmo jogo; #include <stdio.h>

inteiro hi, hf, dh; int hi, hf, dh;

inicio void main(void){


leia(hi, hf); printf("Digite hora inicial e final (meia noite = 0)\n");
se hi < hf ento scanf("%i%i", &hi, &hf);
dh hf - hi if (hi < hf)
seno dh = hf - hi;
dh 24 hi + hf; else
escreva(dh,' horas.'); dh = 24 hi + hf;
fim. printf("%i horas.\n",dh);
return 0;
}

34
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

6. COMADOS DE REPETIO
Um de nossos exemplos anteriores previa o clculo da mdia de um aluno e que fosse
fornecido seu resultado final (aprovado, reprovado) em funo desta mdia. Normalmente este
clculo necessrio no s para um aluno, mas para toda uma turma, que poderia, digamos, ser
composta por 45 alunos. Neste caso, deveramos declarar 45 vezes mais variveis, considerando
um conjunto bsico de variveis para cada aluno. Imaginem o tamanho que este algoritmo teria e
tudo isto porque iremos repetir um bloco bsico de instrues, alterando apenas as variveis.
Felizmente isto pode ser feito de forma muito mais gil e automtica (e j era de esperar porque
em programao buscamos conciso, agilidade, menor tempo e menor esforo).
Existem comandos apropriados para determinar a repetio de um bloco de instrues.
Tais comandos so trs: comando para, comando enquanto e comando repita. Eles se
diferenciam tanto por utilizarem ou no uma expresso lgica para testar a repetio, quanto por
testarem a realizao da repetio antes ou depois da execuo do bloco de instrues. Vamos
estud-los.

6.1 COMADO PARA

6.1.1 SITAXE:

para var_de_controle valor_inicial at valor_final faa


Comando ou bloco de comandos;

Onde:
para, at e faa so palavras reservadas do comando;
var_de_controle uma varivel ou expresso pertencente ao tipo escalar (exceto
real);
valor_inicial e valor_final so do mesmo tipo de var_de_controle e
delimitam a repetio do comando ou bloco de comandos.

6.1.2 EXEMPLO:

Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma, considerando que
cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja mdia aritmtica
das notas for igual ou superior a 7. Considere como dados de entrada o nome do aluno e suas
notas. Dever ser fornecido, ao final, o nome do aluno, sua mdia e resultado (aprovado ou
reprovado).

35
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

algoritmo resultado_final;

caractere nome;
real n1, n2, m ;
inteiro x;

inicio
para x 1 at 45 faa
inicio
leia(nome);
leia(n1, n2);
m (n1+n2)/2;
se m >= 7 ento
escreva(nome, est aprovado com mdia , m)
seno
escreva(nome, foi reprovado e sua mdia , m);
fim;
fim.

Analisemos o exemplo:
A varivel de controle do comando para inicia a varivel x com o valor 1 e x ter seu
valor incrementado em uma unidade at que ultrapasse o valor limite estabelecido em 45. A cada
novo valor desta varivel de controle, que ainda no superou o valor limite, ser executado o
bloco de instrues que lhe segue, onde so lidos os dados para cada aluno e determinado o seu
resultado. A repetio dos comandos ser executada, portanto, at que a varivel x atinja o valor
46, que ultrapassa o limite superior de x.
O acrscimo dado a varivel de controle do comando para denominado passo. Caso o
problema exija, possvel determinar um acrscimo na varivel de controle maior do que a
unidade, o que seria escrito na seguinte sintaxe:

para var_de_controle valor_inicial at valor_final passo n faa

O comando para executa a repetio de um bloco de comandos por um nmero fixo de


vezes, que fica bem claro e determinado no cabealho do comando e o teste para determinar ou
no a repetio executado antes da execuo do bloco de comandos.
Observe: no dever haver, dentro do bloco de comandos a serem repetidos, nenhuma
instruo que altere o valor da varivel de controle do comando para. A varivel de controle
dever ter sua incrementao efetuada e controlada pelo comando para exclusivamente, de
forma automtica, como se fosse um contador.

36
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Vejamos ento o que um contador.

6.2 COTADORES E ACUMULADORES

6.2.1 COTADORES

Muitas vezes, dentro da lgica para resoluo de uma tarefa, necessitamos que uma
varivel seja encarregada de armazenar o nmero de vezes que determinada condio foi
satisfeita.

EXEMPLO:

Faa um algoritmo para ler 20 valores inteiros e informar quantos destes so pares.

A resoluo do algoritmo vai envolver a repetio por 20 vezes de:


Leitura de um valor inteiro;
Testar o valor para verificar se par e caso for, acrescentar uma unidade varivel
encarregada de contar os valores pares.

algoritmo pares;

inteiro numero, contador, x;

inicio
contador 0;
para x 1 at 20 faa
inicio
leia(numero);
se numero % 2 = 0 ento
contador contador + 1;
fim;
escreva(Foram lidos , contador, valores pares.);
fim.

Observe a necessidade de atribuir zero inicialmente ao contador, para garantir que a cada
nova execuo do programa, no permaneam valores anteriores na varivel, o que iria fornecer
um resultado errado.

Uma varivel contador uma varivel que recebe um valor inicial (normalmente
zero) e incrementada posteriormente de algum valor constante (geralmente a unidade).

37
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

6.2.2 ACUMULADORES

Outra situao frequente em algoritmos a necessidade de realizar o somatrio de


determinados valores. Por exemplo, para calcular a mdia das notas finais de uma turma de 45
alunos, seria necessrio ir acumulando a mdia de cada aluno e aps, dividir a soma das mdias
pelo nmero de alunos. A varivel encarregada de armazenar este somatrio conhecida em
programao como acumulador.

algoritmo media_da_turma;

caractere nome;
real n1, n2, m, acumulador;
inteiro x;

inicio
acumulador 0;
para x 1 at 45 faa
incio
leia(nome);
leia(n1, n2);
m (n1+n2)/2;
acumulador acumulador + m;
se m >= 7 ento
escreva(nome, est aprovado com mdia , m)
seno
escreva(nome, foi reprovado e sua mdia , m);
fim;
escreva(A mdia da turma , acumulador/45);
fim.

Uma varivel utilizada como acumulador uma varivel que recebe um valor inicial
(geralmente zero) e incrementada posteriormente de um valor varivel.

6.3 COMADO EQUATO

6.3.1 SITAXE:

enquanto condio faa


Comando ou bloco de comandos;

Onde:
enquanto e faa so palavras reservadas do comando;
condio uma expresso lgica.

38
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O comando enquanto serve para estabelecermos que um comando ou um bloco de


comandos deve ser executado repetidamente enquanto uma determinada condio for verdadeira.
O fato de utilizar uma expresso lgica para controlar a repetio amplia bastante a
utilizao do comando enquanto se comparado ao comando para, pois poderemos utiliz-lo
para um nmero previamente conhecido de repeties e tambm para a situao em que o
nmero de repeties a executar desconhecido.

6.3.2 EXEMPLOS

Exemplo 1: Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma,
considerando que cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja
mdia aritmtica das notas for igual ou superior a 7. Considere como dados de entrada, o nome
do aluno e suas notas. Dever ser fornecido o nome do aluno, sua mdia e resultado.

algoritmo resultado_final2;

caractere nome;
real n1, n2, m;
inteiro x;

inicio
x 0;
enquanto x < 45 faa
inicio
leia(nome);
leia(n1, n2);
m (n1+n2)/2;
se m >= 7 ento
escreva(nome, est aprovado com mdia , m);
seno
escreva(nome, foi reprovado e sua mdia , m);
x x + 1;
fim;
fim.

Como o comando enquanto controla a repetio atravs de uma condio e temos um


nmero conhecido (45) de repeties a executar, necessitamos de uma varivel para fazer o papel
de contador de repeties e sobre o seu valor estabelecermos o teste. Foi escolhida para contador
a varivel x, que inicia com um valor igual a zero e incrementada aps cada repetio em uma
unidade.
Pense no que seria necessrio alterar no algoritmo acima se a varivel contador iniciasse
com o valor 1.

39
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo 2: Faa um algoritmo que dever calcular e informar a mdia de n nmeros inteiros
lidos, encerrando a leitura destes nmeros com a entrada de um valor negativo.

algoritmo media_de_valores;

inteiro cont, valor;


real acum, media;

inicio
cont 0;
acum 0;
leia(valor);
enquanto valor >= 0 faa
inico
acum acum + valor;
cont cont + 1;
leia(valor);
fim;
se cont > 0 ento
inicio
media acum/cont;
escreva(A mdia entre os valores lidos : , media);
fim;
fim.

Observe: para que seja possvel a realizao do primeiro teste no comando enquanto
necessria a leitura prvia de valor e a varivel valor dever ser lida novamente antes do
final do bloco de repetio, para permitir novo teste no comando enquanto.

6.4 COMADO REPITA

6.4.1 SITAXE:

repita
Comando(s);
at condio;

Onde:
repita e at so palavras reservadas do comando;
condio uma expresso lgica.

O comando repita serve para estabelecermos que um ou vrios comandos sejam


executados repetidamente at que uma determinada condio seja verdadeira.

40
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O comando repita diferencia-se dos dois comandos de repetio anteriores por realizar
o teste da condio de repetio aps a execuo de todos os comandos e por no necessitar da
forma de bloco para delimitar os comandos que lhe so dependentes.

6.4.2 EXEMPLOS:

Exemplo 1: Faa um algoritmo para calcular o resultado final de 45 alunos de uma turma,
considerando que cada aluno tem duas notas e que ser considerado aprovado aquele aluno cuja
mdia aritmtica das notas for igual ou superior a 7. Considere como dados de entrada, o nome
do aluno e suas notas. Dever ser fornecido o nome do aluno, sua mdia e resultado.

algoritmo resultado_final3;

caractere nome;
real n1, n2, m;
inteiro x;

inicio
x 0;
repita
leia(nome);
leia(n1, n2);
m (n1+n2)/2;
se m >= 7 ento
escreva(nome, est aprovado com mdia , m)
seno
escreva(nome, foi reprovado e sua mdia , m);
x x + 1;
at x = 45;
fim.

Como o comando repita tambm controla a repetio atravs de uma condio e temos
um nmero conhecido (45) de repeties a executar, necessitamos de uma varivel para servir
como contador de repeties e sobre o seu valor estabelecermos o teste. Foi escolhida para
contador a varivel x, que inicia com um valor igual a zero e incrementada aps cada repetio
em uma unidade.

Exemplo 2: Faa um algoritmo que dever calcular e informar a mdia de n nmeros inteiros
lidos, encerrando a leitura destes nmeros com a entrada de um valor negativo.

algoritmo media_de_valores;

inteiro cont, valor;


real acum, media;

41
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio
cont 0;
acum 0;
repita
leia(valor);
se valor >= 0 ento
inicio
acum acum + valor;
cont cont + 1;
fim;
at valor < 0;
se cont > 0 ento
inicio
media acum/cont;
escreva(A mdia entre os valores lidos : , media);
fim;
fim.

Observe: na resoluo do segundo exemplo foi necessrio introduzir mais um teste para
impedir de acrescentar ao acumulador um valor negativo e para que o mesmo no fosse contado
como valor vlido. Isto mostra que, devido a sua caracterstica de testar a condio depois de
executar os comandos da repetio, no ser sempre o comando repita uma boa escolha. Neste
exemplo o comando enquanto proporciona uma soluo melhor construda.

*****************************************************************************
6.5 EXERCCIOS PROPOSTOS
(Exerccios identificados com (*) esto resolvidos ao final do captulo)

1. (*) Faa um algoritmo que leia cinco valores inteiros, calcule e escreva:
a soma dos nmeros pares;
o menor entre os valores lidos.

2. Faa um programa que calcule o fatorial de um nmero lido (n) por repetidas vezes. Encerra
com n menor que zero.

3. Faa um algoritmo que apresente a srie de Fibonacci, at o dcimo quinto termo. A srie de
Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34 (esta srie se caracteriza por
iniciar com dois valores determinados que formam o primeiro e segundo termos (t1 = 1 e t2 = 1)
e, a partir destes, cada termo obtido atravs da soma dos seus dois termos anteriores (t3 = t1+
t2) .

4. Faa um programa que l um nmero e informa se ele primo. (Os nmeros primos so
divisveis por um e por si mesmos somente)

42
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5. Duas tartarugas possuem 3,1 e 4,5 cm respectivamente. A menor tartaruga cresce 0,21 cm ao
ano e a maior 0,16 cm ao ano. Faa um algoritmo que calcule o nmero de anos necessrios para
que a tartaruga menor fique maior que a maior.

6. Faa um algoritmo que l um nmero indeterminado de valores, todos inteiros, um de cada


vez, finalizando a leitura com o nmero zero e fornea como sada:
a soma dos nmeros que esto no intervalo 10 (inclusive) a 20(inclusive);
a mdia dos nmeros que esto no intervalo de 1 (inclusive) a 10 (exclusive);
o menor entre os valores lidos.

7. Faa um algoritmo que leia um nmero inteiro repetidas vezes, paralisando a leitura com
nmero <= zero e escreva, para cada valor lido, a soma de todos os nmeros menores e no sub-
mltiplos do nmero lido.

8. (*) Faa um programa que l duas notas de alunos e calcula suas mdias individuais e a mdia
geral da turma. Finaliza com 5 alunos ou quando a mdia geral for menor ou igual a cinco.

9. Faa um programa que l nmeros inteiros e finaliza quando a soma destes atinge um valor
superior a 30.

10. Faa um algoritmo para ler as notas (N1 e N2) de alunos (para um total de 5 alunos) e
calcular suas mdias individuais, escrevendo, para cada um: "aprovado" - se mdia superior ou
igual a sete, "reprovado" - se inferior a sete. O programa tambm dever informar a mdia geral
da turma e o percentual de alunos aprovados.

11. Faa um algoritmo que calcule a mdia aritmtica de todos os nmeros pares que forem
fornecidos pelo usurio. O valor de finalizao deve ser a entrada do nmero zero. O usurio
pode entrar com nmeros mpares, mas estes no sero acumulados.

12. Faa um algoritmo para apresentar os quadrados dos nmeros inteiros mltiplos de 5 no
intervalo de 15 a 100.

13. Construa um algoritmo que permita fazer um levantamento do estoque de vinhos de uma
adega, tendo como dados de entrada tipos de vinho (branco, tinto e ros). Especifique a
porcentagem de cada tipo sobre o total geral de vinhos. Considere que a quantidade de vinhos
desconhecida (usar como finalizador da leitura a constante fim).

14. (*) Faa um algoritmo que escreve a tabuada at 10 dos dez primeiros nmeros inteiros
positivos permitindo a repetio do clculo para novo nmero aps ler Sou Ncomo resposta
para: Escrever nova tabuada(S/N)?.

15. Faa um algoritmo que calcule o imposto de renda de um grupo de contribuintes


considerando que os dados de cada contribuinte, nmero do CPF, nmero de dependentes e
renda mensal so valores fornecidos pelo usurio. Para cada contribuinte ser dado um desconto
de 5% de salrio mnimo por dependente. Os valores da alquota para calculo do imposto so:

At 2 salrios mnimos (exclusive) isento


2 (inclusive) .. 3 (inclusive) 5%
3 (exclusive) .. 5 (inclusive) 10%

43
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

5 (exclusive) .. 7 (inclusive) 15%


Acima de 7 salrios mnimos 20%

O ltimo valor (para encerrar o programa), que no ser considerado, ter CPF igual a zero.
Deve ser lido o valor atual do salrio mnimo.

16. Construa um algoritmo que, dado um conjunto de valores inteiros e positivos, determine qual
o menor e o maior valor do conjunto. O final do conjunto de valores conhecido atravs do 0
(zero), que no deve ser considerado.

17. A converso de graus Farenheidt para centgrados obtida pela frmula C = (5*(f-32))/9.
Escreva um algoritmo que calcule e escreva uma tabela de graus centgrados em funo de graus
Farenheidt que varie de 50 a 150, de 1 em 1.

18. Elabore um algoritmo que calcule o valor de H, sendo que ele determinado pela srie:

H = 1/1 + 3/2 + 5/3 + 7/4 + ... + 99/50

19. Elabore um algoritmo que efetue a soma de todos os nmeros mpares que so mltiplos de
trs e que se encontram no conjunto dos nmeros de 1 at 500.

20. Considerando a altura dos N alunos de uma turma, faa um algoritmo para calcular a mdia
das alturas e determinar a quantidade de alunos com altura > 1.60 e < 1.75 m. Encerrar leitura
com altura <= 0.

21. Um banco utiliza recursos computacionais para efetuar suas transaes e uma das
necessidades bancrias saber o total de dinheiro que o banco girou durante o dia. Para tanto, a
cada dbito ou crdito que o caixa executa, digitado o respectivo valor, sendo que o dbito
sempre precedido do sinal negativo. Faa um algoritmo para calcular o total de crditos e dbitos
e o total global (movimento do dia) em valor absoluto. Encerrar entradas com zero.

22. Faa um algoritmo que escreva os 30 primeiros termos da seguinte srie: 0, 1, 2, 5, 12, 29.

23. Foi realizada uma pesquisa em um edifcio para otimizar a utilizao dos elevadores, para um
nmero indeterminado de usurios. O edifcio possui quatro elevadores (a, b, c, d) que so
usados livremente. Os usurios responderam as seguintes questes:
qual o elevador utilizado(a,b,c,d);
qual o turno, seguindo os cdigos: manh, tarde e noite (m, t, n).

O algoritmo deve fornecer o elevador mais utilizado e qual o turno em que os elevadores so
mais utilizados. Encerrar com um tipo invlido para elevador.

24. Faa um algoritmo que leia dia, ms e ano respectivamente, ou seja, uma data qualquer, e
faa consistncia desta data (avaliar se valida ou no). O algoritmo dever prever teste para ano
bissexto. Faa o algoritmo para ler datas repetidamente, finalizando leitura com dia = 0.

25. Faa um programa para verificar se um valor lido nmero perfeito. Para que um valor seja
considerado nmero perfeito, a soma dos seus divisores deve resultar num valor igual a ele
mesmo. (Ex: os divisores de 6 so: 1, 2, 3 que somados totalizam 6 6 quadrado perfeito).

44
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

26. Faa um programa que receba os nomes de 5 produtos de uma loja e o preo unitrio de cada
um deles (em reais). O programa dever informar, com mensagens explicativas:
o nome dos produtos cujo preo superior a 20 reais;
o nome e o preo correspondente dos produtos cujo preo inferior a 10 reais;
o preo mdio dos produtos;

27. Escrever um algoritmo que leia um nmero inteiro e positivo n por um nmero
indeterminado de vezes. Se n for par, verificar e informar quantos divisores possui. Se n for
mpar e menor que 8, escrever seu fatorial. Se n for mpar e maior ou igual a 8, escrever a soma
dos inteiros de 1 a n. Finalizar com n <= 0.

28. Escreva um algoritmo que l um nmero no determinado de pares de valores a, b (com a <
b) todos inteiros e positivos, um par de cada vez, calcula e escreve a soma dos n inteiros
consecutivos a partir de a inclusive at b. Encerrar com valor = 0.

29. Escrever um algoritmo que l n, inteiro e positivo, calcula e escreve o termo de ordem n da
sucesso abaixo:

ordem: 1 2 3 4 5 6 7 8 9 10
termo -1 0 5 6 11 12 17 18 23 24

30. Fez-se uma pesquisa entre os 2500 habitantes de uma regio para coletar os seguintes dados:
sexo, idade e altura. Escreva um algoritmo que l estas informaes e informa:
A mdia da idade do grupo;
A mdia da altura das mulheres com mais de 21 anos;
A maior altura entre os homens;
O percentual de pessoas com idade entre 18 e 30 anos.

31. Foi feita uma pesquisa nas 20 principais cidades do estado para coletar dados sobre acidentes
de trnsito. Foram obtidos os seguintes dados:
Cdigo da cidade (1 a 20);
Nmero de veculos de passeio do ano 2001;
Nmero de acidentes com vtimas do ano 2001.

Escreva um algoritmo que l um conjunto de dados, conforme acima descrito, para cada
cidade, um de cada vez, calcula e escreve:
Qual o maior e o menor nmero de acidentes e a que cidade pertencem;
Qual a mdia de veculos das cidades pesquisadas;
Qual a mdia de acidentes entre as cidades pesquisadas.

32. Foi realizada uma pesquisa de algumas caractersticas fsicas da populao de uma certa
regio. Foram entrevistadas 500 pessoas e coletados os seguintes dados:
sexo: M (masculino) e F (feminino);
cor dos olhos: A (azuis), V (verdes) e C (castanhos);
cor dos cabelos: L (loiros), C (castanhos) e P (pretos);
idade.

45
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Deseja-se saber:
a maior idade do grupo;
a quantidade de indivduos do sexo feminino, cuja idade est entre 18 e 35 anos e que
tenham olhos verdes e cabelos loiros.

33. Faa um algoritmo que leia o nome e a idade dos nadadores de uma competio e
classifique-os nas categorias abaixo:
5 a 7 anos : Infantil A;
8 a 11 anos: Infantil B;
12 a 14 anos: Juvenil A;
15 a 17 anos: Juvenil B.

O algoritmo termina quando for lida idade = 0, devendo, ento, ser informado:
quantos nadadores participaram em cada categoria;
qual o percentual da cada categoria sobre o total de nadadores.

34. Foi realizada uma pesquisa em Santa Cruz, com um grupo de 1000 pessoas. De cada
entrevistado foram colhidos os seguintes dados:
clube de preferncia (G- Grmio; I Internacional; O Outros);
cidade de origem (S Santa Cruz; O- Outras).

Deseja-se saber:
Nmero total de torcedores do Grmio e do Internacional;
Nmero de pessoas nascidas em Santa Cruz e que no torcem nem pelo Grmio e nem
pelo Inter.

35. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre o
salrio e nmero de filhos. A prefeitura deseja saber:
mdia do salrio da populao;
mdia do nmero de filhos;
maior salrio;
percentual de pessoas com salrio at R$200,00.
Encerrar a leitura dos dados com salrio negativo.

36. Em uma eleio presidencial existem quatro candidatos. Os votos so informados atravs de
cdigos. Os dados utilizados para a contagem dos votos obedecem seguinte codificao:
1,2,3,4 = voto para os respectivos candidatos;
5 = voto nulo;
6 = voto em branco;
0 = encerrar leitura.

Elabore um algoritmo que leia o cdigo do candidato e um voto. Calcule e escreva:


total de votos para cada candidato;
total de votos nulos.

37. Escrever um algoritmo que leia uma quantidade desconhecida de nmeros e conte quantos
deles esto nos seguintes intervalos: [0, 25], [26, 50], [51, 75] e [76, 100]. A entrada de dados
deve terminar quando for lido um nmero negativo.

46
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

38. Escreva um algoritmo que gere os nmeros de 1000 a 1999 e escreva aqueles que divididos
por 11 do resto igual a 5.

39. Escrever um algoritmo que leia 5 conjuntos de 2 valores, o primeiro representando o nmero
de um aluno, e o segundo representando a sua altura em centmetros. Encontre o aluno mais alto
e o mais baixo. Mostre o nmero do aluno mais alto e do mais baixo, junto com suas alturas.

40. Escrever um algoritmo que calcule e escreva o produto dos nmeros primos entre 92 e 1478.

*****************************************************************************
6.6 EXERCCIOS RESOLVIDOS:

Exerccio 1 resolvido com o comando para:


Algoritmo C
algoritmo valores; #include <stdio.h>

inteiro v, s, me, x; int v, s, me, x;

inicio void main(void){


s 0; s = 0;
para x1 at 5 faa printf("Digite 5 valores inteiros\n");
inicio for (x = 1; x <= 5; x++){
leia(v); scanf("%i", &v);
se x = 1 ento if (x == 1)
me v; me = v;
seno else
se v < me ento if (v < me)
me v; me = v;
se v % 2 = 0 ento if (v % 2 == 0)
s s + v; s = s + v;
fim; }
escreva(menor valor: , me); printf("Menor valor: %i", me);
escreva('soma dos pares: , s); printf("\nSoma dos pares: %i\n", s);
fim. }

Exerccio 1 resolvido com o comando enquanto:


Algoritmo C
programa valores; #include <stdio.h>

inteiro v, s, me, x; int v, s, me, x;

inicio void main(void){


x 1; printf("Digite 5 valores inteiros\n");
enquanto x <= 5 faa x = 1;
inicio s = 0;
leia(v); while (x <= 5){
se x = 1 ento scanf("\n%i", &v);
me v; if (x == 1)
seno me = v;
se v < me ento else
me v; if (v < me)
se v % 2 = 0 ento me = v;

47
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

s s + v; if (v % 2 == 0)
x x + 1; s = s + v;
fim; x++;
escreva(O menor entre os valores lidos }
: , me); printf("\nMenor Valor %i", me);
escreva(A soma dos nmeros pares : , printf("\nSoma dos pares: %i\n", s);
s); }
fim.

Exerccio 1 resolvido com repita:


Algoritmo C
algoritmo valores; #include <stdio.h>

inteiro v, s, me, x; int v, s, me, x;

inicio void main(void){


x 1; printf("Digite 5 valores inteiros\n");
repita x = 1;
leia(v); do{
se x = 1 ento scanf("\n%i", &v);
me v if (x == 1)
seno me = v;
se v < me ento else
me v; if (v < me)
se v % 2 = 0 ento me = v;
s s + v; if (v % 2 == 0)
x x + 1; s = s + v;
at x = 6; x++;
escreva(O menor entre os valores lidos : }while (x <= 5);
, me); printf("\nMenor Valor %i", me);
escreva(A soma dos nmeros pares : , printf("\nSoma dos pares:%i\n", s);
s); }
fim.

Exerccio 8:
Algoritmo C
algoritmo ex_8; #include <stdio.h>

real nota1, nota2, mediaa, mediag, float nota1, nota2, mediaa, mediag, acummedia;
acummedial; int a;
inteiro a;
void main(void){
inicio a = 1;
a 1; acummedia = 0;
acummedia 0; mediag = 10;
mediag 10; while (a <= 5 && mediag > 5){
enquanto ((a <= 5) e (mediag > 5)) faa printf("Digite as 2 notas do aluno %i\n", a);
inicio mediaa = 0;
mediaa 0; scanf("\n%f%f", &nota1, &nota2);
leia(nota1, nota2); mediaa = (nota1 + nota2)/2;
mediaa (nota1 + nota2)/2; acummedia = acummedia + mediaa;
acummedia acummedia + mediaa; printf("\nMediaaluno:%.2f\n", mediaa);
mediag acummedia/a; mediag = acummedia/a;

48
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

a a + 1; a = a + 1;
escreva(Mdia aluno: , mediaa); }
fim; printf("\nMedia geral: %.2f\n", mediag);
escreva(Mdia geral: , mediag); }
fim.

Exerccio 14:
Algoritmo C
algoritmo tabuada; #include <stdio.h>
#include <conio.h>
caractere op;
inteiro num, c; int op;
int num, c;
inicio
repita void main(void){
escreva(Digite um nmero:); printf("\nEscrever a tabuada(s/n)?\n");
leia(num); op = getch();
para c1 at 10 faa while (op == s || op == S){
escreva(c, x , num, = , c*num); printf("\nDigite o numero\n");
escreva(Escrever a tabuada?(s/n):); scanf("%i", &num);
leia(op); for (c = 1; c <= 10; c++)
at (op = N) ou (op = n); printf("\n%i x %i = %i", c, num, c*num);
fim. printf("\nEscrever a tabuada(s/n)?\n");
op = getch();
}
return 0;
}

49
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

7. TIPO ESTRUTURADO HOMOGEO: VETORES E MATRIZES


7.1 VETORES

Um vetor um tipo de dados que permite que armazenemos na memria do computador


um nmero determinado de dados, todos do mesmo tipo, que ficam organizados de forma bem
estruturada.
A declarao de uma varivel do tipo vetor tem a seguinte sintaxe:

tipo_base identificador[tamanho];

Onde:
identificador o nome escolhido para a varivel;
tamanho identifica o tamanho do vetor ou quantidade de elementos;
tipo_base o tipo que tm os elementos do vetor.

Exemplo:

inteiro v1[5];

Podemos desenhar a estrutura de v1 da seguinte forma:

v1 =

Aps a leitura dos dados que sero armazenados em v1 teramos, por exemplo:

v1 = 2 10 5 4 21

Cada elemento de v1 tem uma posio bem definida, de tal forma que podemos afirmar
que v1[2] = 5, ou seja, esta estrutura atribui um ndice a cada um dos seus elementos que
identifica a posio do elemento na estrutura. Estes ndices sero sempre valores inteiros,
consecutivos e a primeira posio do vetor sempre indicada pelo ndice 0 (zero). O acesso a
qualquer dos elementos se dar atravs do seu ndice.
Se fizermos as atribuies v1[1] 25 e v1[4] 30, teremos:

V1 = 2 25 5 4 30

Dadas estas caractersticas, conclumos que a leitura dos elementos de um vetor deve ser
feita utilizando um comando de repetio, onde o teste de repetio se dar sobre uma varivel

50
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

do tipo inteiro, que iniciar com o valor 1 e ser incrementada at atingir o valor que define o
tamanho do vetor.
Adotando o vetor v1, acima declarado, mais uma varivel x do tipo inteiro, teramos:

para x 0 at 4 faa
leia(v1[x]);

Da mesma forma, seria feita a apresentao dos elementos do vetor:

para x 0 at 4 faa
escreva(v1[x]);

Exemplo: Faa um algoritmo para ler os elementos de um vetor (A) com 10 elementos inteiros e
construir um segundo vetor (B) de mesma dimenso e cujos elementos sero os elementos de A
multiplicados por 5.

algoritmo vetor1;

inteiro a[10], b[10], x;

inicio
para x 0 at 9 faa
inicio
leia(a[x]);
b[x] a[x] * 5;
fim;
fim.

7.2 MATRIZES

Como os vetores, as matrizes tambm permitem que armazenemos na memria do


computador um nmero determinado de dados, todos do mesmo tipo, que ficam organizados de
forma bem estruturada, porm cada elemento ter sua posio definida atravs de dois ndices.
A declarao de uma varivel do tipo matriz tem a seguinte sintaxe:

tipo_base identificador[m][n];

Onde:
identificador o nome escolhido para a varivel;
m identifica o nmero de linhas da matriz e n identifica o nmero de colunas;
tipo_base o tipo que tm os elementos da matriz.

51
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo:

inteiro m1[2][3];

Podemos desenhar a estrutura de m1 da seguinte forma:

m1 =

Aps a leitura dos dados que sero armazenados em m1 teramos, por exemplo:

30 5 22
m1 =
11 42 13

Cada elemento de m1 tem uma posio bem definida, de tal forma que podemos afirmar
que m1[1][2] = 13, ou seja, esta estrutura atribui dois ndices a cada um dos seus elementos
que identificam a posio do elemento na estrutura. O primeiro ndice indica a linha e o segundo
a coluna da matriz.
Se fizermos as atribuies m1[0][1] 25 e m1[1][1] 10, teremos:

30 25 22
m1 =
11 10 13

Dadas estas caractersticas, conclumos que a leitura dos elementos de uma matriz deve
ser feita utilizando dois comandos de repetio aninhados. Adotando a matriz m1, acima
declarada, mais duas variveis x e y, do tipo inteiro, teramos:

para x 0 at 1 faa
para y 0 at 2 faa
leia(m1[x][y]);

Da mesma forma, seria feita a apresentao dos elementos da matriz:

para x 0 at 1 faa
para y 0 at 2 faa
escreva(m1[x][y]);

Exemplo: Faa um algoritmo para ler os elementos de uma matriz (A) com 10 x 5 elementos
inteiros e construir uma segunda matriz (B) de mesma dimenso e cujos elementos sero os
elementos de A multiplicados por 5.

algoritmo matriz1;

inteiro a[10][5], b[10][5], x, y;

52
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

inicio
para x 0 at 9 faa
para y 0 at 4 faa
inicio
leia(a[x][y]);
b[x][y] a[x][y] * 5;
fim;
fim.

*****************************************************************************
7.3 EXERCCIOS PROPOSTOS

1. Faa um algoritmo que leia, via teclado, 200 valores do tipo inteiro e armazene-os em um
vetor. A seguir o algoritmo dever informar:
todos os nmeros pares que existem no vetor;
o menor e o maior valor existente no vetor;
quantos dos valores do vetor so maiores que a mdia desses valores.

2. Crie um algoritmo para ler 100 nomes e imprimir o nome caso este seja 'Ado', informando
tambm sua posio no vetor.

3. (*) Crie um algoritmo para ler 30 nmeros reais e imprimir os nmeros que esto nas posies
pares do vetor.

4. Crie um algoritmo para ler 38 nmeros e imprimir a quantidade de nmeros primos existentes
neste vetor.

5. Faa um algoritmo para localizar os nomes iguais existentes entre dois vetores, A com n
elementos e B com m elementos, imprimindo o resultado para o usurio. Considere n = 20 e
m = 25. Considere que no haver repetio de nomes no vetor A e nem no vetor B.

6. Fazer um algoritmo para ler 100 nmeros e imprimir um vetor resultante onde os elementos
sero o dobro dos elementos lidos.

7. Escrever um algoritmo para ler um vetor com 100 elementos reais e inverter a posio destes
elementos, de tal modo que o primeiro elemento venha a ser o ltimo depois da inverso.

8. Dado que para cada aluno de uma turma de 35 alunos se tenha, o seu nome e as notas de 3
avaliaes, faa um algoritmo que:
Imprima o nome e a mdia de cada aluno;
Calcule a percentagem de alunos com mdia acima da mdia da turma;
Para cada aluno imprima uma mensagem dizendo se o aluno tem ou no notas repetidas;
Determine quantos alunos tem pelo menos duas notas acima de 7;

9. Faa um algoritmo que leia nome, idade e sexo de 50 pessoas. Aps a leitura faa:
Imprima o nome, idade e sexo das pessoas cuja idade seja maior que a idade da primeira
pessoa.
Imprima o nome e idade de todas as mulheres.
Imprima o nome dos homens menores de 21 anos.

53
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

10. Faa um algoritmo para ler 2 nmeros, n1 e n2 . A soma destes no deve ultrapassar 10, se
ultrapassar, os nmeros devero ser lidos novamente. A seguir, ler um vetor de 10 posies,
de modo que contenha n1 valores mpares e n2 pares, obrigatoriamente.

11. Faa um algoritmo que leia o nome e trs notas de N alunos de um colgio. O usurio
informar qual o valor de N, sendo possvel, porm, um mximo de 50 alunos. Aps a
leitura faa:
Imprima o nome e a mdia de cada aluno aprovado (Mdia >= 7.0);
Imprima o nome e a mdia dos alunos reprovados (Mdia < 5.0);
Imprima o percentual de alunos aprovados.

12. Dado nome, tempo de servio em anos e salrio de 30 funcionrios faa:


Imprima o nome e o salrio dos funcionrios que ganham mais de R$ 500,00;
Para os funcionrios que ganham menos de R$ 200,00 conceda um aumento de 20%;
Para os funcionrios que trabalham a mais de 3 anos na empresa, fornea um aumento de
R$100,00;
Imprima nome e o novo salrio destes funcionrios aumentados.

13. Faa um algoritmo para ler 50 valores inteiros. Aps imprima tais valores ordenados
crescentemente.

14. Faa um algoritmo que leia 25 valores numricos inteiros em um vetor e trs valores inteiros,
nas variveis A, B e C. Aps a leitura, emita um relatrio com cada valor diferente de A, B e
C e o nmero de vezes que o mesmo apareceu no vetor.

15. Faa um algoritmo que:


Leia um vetor A com 10 elementos e um vetor B com 15 elementos do tipo real.
Intercale estes vetores A e B, formando um outro vetor C da seguinte forma.
C[1] A[1]
C[2] B[1]
C[3] A[2]
C[4] B[2]
Como A tem menos elementos que B, o vetor C dever ser preenchido ao final com os
elementos restantes do vetor B.

16. Elaborar um algoritmo que l um conjunto de 30 valores e os coloca em 2 vetores conforme


forem pares ou mpares. O tamanho de cada vetor de 5 posies. Se algum vetor estiver cheio,
escrev-lo. Terminada a leitura, escrever o contedo dos dois vetores. Cada vetor pode ser
preenchido tantas vezes quantas forem necessrias.

17. Dado um vetor V de 100 elementos inteiros faa um algoritmo que:


Crie outro vetor W contendo os valores de V que esto no intervalo 10 (inclusive) a 40
(inclusive);
Crie outro vetor Z contendo os valores de V que esto em posies mltiplas de 3 ou de
5.

18. Fazer um algoritmo que:

54
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

leia um vetor A com 30 valores inteiros;


leia um outro vetor B com 30 valores inteiros;
leia o valor de uma varivel X;
fornea quais os elementos de A que so mltiplos de X e suas posies no vetor;
informe o vetor soma de A e B.

19. Escreva um algoritmo que leia um vetor de inteiros com 20 posies e a seguir altere esse
vetor de modo que os valores mpares apaream intercalados.

20. Faa um algoritmo que leia nome, idade e sexo de 50 pessoas. Aps a leitura faa:
Imprima o nome, idade e sexo das pessoas cuja idade seja maior que a idade da primeira
pessoa;
Imprima o Nome e idade de todas as mulheres;
Imprima o Nome dos homens menores de 21 anos.
Todos os dados devem ser armazenados em vetores.

21. Escrever um algoritmo para ler uma matriz 5 X 5 de elementos inteiros, aps somar em um
acumulador todos os elementos das linhas pares e em outro acumulador os elementos das
linhas mpares

22. Faa um algoritmo para ler os valores inteiros de uma matriz com dimenso 4 x 6 e calcular
quantos destes elementos so valores primos.

23. Faa um algoritmo que leia uma matriz 10 X 50 de valores inteiros e acumule somente os
elementos que esto posicionados onde ambos os ndices sejam mltiplos de 3 ou de 5.

24. Faa um algoritmo para ler os valores de uma matriz com 4 linhas e 4 colunas e fornecer:
A soma dos elementos da diagonal secundria;
Os valores pares que compem a diagonal principal.

25. Faa um algoritmo que leia os valores reais de uma matriz 10 x 15 e fornea a soma dos
elementos que se encontram em posies cuja soma dos ndices seja um nmero mpar.

26. Faa um programa que leia os elementos de uma matriz 5 x 7 de valores inteiros e fornea o
maior e o menor elementos desta matriz e a posio em que esto dentro da estrutura.

27. Faa um algoritmo para ler as notas de uma turma com 30 alunos considerando trs notas por
alunos. Utilize uma matriz para armazenar estes valores considerando que em cada linha da
matriz estaro as trs notas de cada aluno. O algoritmo dever calcular a mdia aritmtica de
cada aluno e a mdia geral da turma.

28. Escreva um algoritmo que leia uma matriz 5 X 6 de valores reais, a seguir divida cada um
dos nmeros de cada linha pelo maior nmero da linha, criando assim uma nova matriz.
Escreva a matriz original e a nova matriz.

29. Ler um vetor de 25 elementos inteiros e a partir desse vetor, criar uma matriz 5 X 5
preenchendo-a da seguinte forma: os cinco primeiros elementos do vetor formaro a primeira
linha, os prximos 5 elementos formaro a segunda linha e assim por diante. Imprimir o
vetor e a matriz no final.

55
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

30. Escreva um algoritmo que l uma matriz M (5 x 5) e troque a seguir, conforme abaixo
indicado:
A linha 2 com a linha 5;
A coluna 1 com a coluna 4;
A diagonal principal com a diagonal secundria.

31. Escreva um algoritmo que l uma matriz M (5 x 5) e cria dois vetores SL e SC que
contenham, respectivamente, as somas das linhas e das colunas de M. Escrever os vetores.

32. Ler um vetor de 5 elementos inteiros e preencher cada linha de uma matriz de 3 X 5 com esse
vetor.

33. Escrever um algoritmo que l uma matriz A(15 x 5) e a escreva. Verifique, a seguir, quais os
elementos de A que esto repetidos e quantas vezes cada um est repetido. Escrever cada
elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A.

34. Ler um nmero no determinado de valores inteiros at que o nmero lido seja 0 e, para
cada nmero lido, verificar se ele pertence a uma matriz 8x8, cujos valores, tambm inteiros,
j haviam sido lidos anteriormente. Em caso afirmativo, escreva o valor, e a posio em que
foi encontrado, caso contrrio, escreva o valor e a mensagem No encontrado.

35. Escreva um algoritmo que leia uma matriz M (5 x 5) e determine o elemento minimax desta
matriz, escrevendo o seu valor e a posio em que se encontra na matriz. O elemento
minimax de uma matriz o menor elemento da linha em que se encontra o maior elemento
da matriz.

36. Escrever um algoritmo que l um vetor G com 13 elementos inteiros que o gabarito de um
teste da loteria esportiva. Neste vetor sero lidos os valores 1 (para coluna 1), 2 (para coluna
2) e 3 (para coluna do meio). Ler, a seguir, para cada 50 apostadores, o nmero de seu carto
e um vetor R, com 13 elementos, onde estaro as suas apostas e cujos valores tambm sero
1, 2 ou 3. Aps:
verificar para cada apostador o nmero de acertos e escrever o nmero de seu carto e
seu nmero de acertos;
para cada jogador que tiver 13 acertos, acrescentar a mensagem: "GANHADOR";
no final escrever quantos apostadores conseguiram 13 pontos e quantos no acertaram
nenhum ponto.

37. Escrever um algoritmo que l uma matriz M (5 x 5) e um valor A, inteiro e multiplica cada
elemento de M pelo valor A e coloca estes resultados em um vetor com 25 elementos. O
algoritmo dever escrever os valores do vetor.

38. Faa um algoritmo que leia uma matriz 4 x 2 de elementos inteiros e calcule a sua
transposta, sabendo que a transposta de uma matriz m uma outra matriz n obtida da
seguinte forma: as linhas de m passam a ser as colunas de n.
Ex: sendo m uma matriz 3x3 e n a sua transposta

56
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

1 2 3 1 4 7
m=4 5 6 n =2 5 8
7 8 9 3 6 9

39. Deseja-se fazer uma pesquisa a respeito do consumo de energia eltrica em uma
determinada cidade. Para isso deve ser lido um vetor com 12 elementos reais, onde cada
elemento representa o consumo em KWH de um ms do ano. Calcular e escrever os
seguintes resultados para cada habitante:
o menor e o maior consumo residencial e o ms que ocorreu;
a mdia do consumo residencial nos meses de vero (1,2,12) e nos meses de inverno
(6,7,8).
Considere um total de 100 moradores para a pesquisa.

40. Faa um programa que leia uma matriz A 2 x 3 com elementos inteiros e uma matriz B 3 x
2 tambm com elementos inteiros, calcule e informe a matriz C, que o resultado da
multiplicao de A por B.

41. Faa um algoritmo que calcule a multiplicao de duas matrizes A e B, sendo inicialmente
lidos os valores que correspondem ao nmero de linhas e colunas destas matrizes. Dever,
ento, ser feito o teste para verificar se pode ocorrer multiplicao entre A e B e caso seja
possvel, o algoritmo dever ler as duas matrizes e informar a sua multiplicao.

42. Faa um algoritmo que utiliza uma matriz 4 x 3 para ler os preos de trs produtos da cesta
bsica (colunas) em quatro supermercados (linhas). O algoritmo dever calcular e informar:
a posio (linha e coluna) do maior preo;
a soma dos produtos por supermercado;
a mdia dos preos de cada produto.

43. Faa um programa que leia uma matriz 8x8 de inteiros e informe a mdia dos valores que se
encontram acima da diagonal principal.

44. Faa um programa que leia uma matriz 12x12 e calcule e escreva a soma da rea hachurada
na letra a e o maior elemento da rea hachurada na letra b abaixo:

45. Faa um programa que leia os valores inteiros de uma matriz 3 x 3 e crie a partir destes um
vetor cujos elementos sejam o fatorial dos elementos da matriz lida

57
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

*****************************************************************************
7.4 EXERCCIOS RESOLVIDOS

Faa um algoritmo para ler os valores (inteiros) de um vetor com 10 posies, sendo que o valor
lido somente ser aceito se for mltiplo do ndice correspondente.
Algoritmo C
algoritmo multiplo; #include<stdio.h>

inteiro n, i, vet[10] ; int n, i, vet[10];

inicio void main(void){


escreva('forneca os valores do vetor'); printf("Forneca os valores do vetor\n");
para i 0 at 9 faa for (i = 0; i <= 9; i++){
inicio scanf("%i", &n);
leia(n); if(i > 0)
se i > 0 ento while ((n<=i) || (n%i!=0)){
enquanto (n <= i) ou (n % i <> 0) faa printf("\nInvalido\n");
leian(n); scanf("%i",&n);
vet[i] n; }
fim; vet[i]=n;
para i 0 at 9 faa }
escreva(vet[i]); for (i = 0; i <= 9;i++)
fim. printf("\nposicao %i valor = %i ",i,vet[i]);
return 0;
}

Faa um programa que leia um vetor com 30 elementos do tipo real e informe os que se
encontram em posies pares do vetor.
Algoritmo C
algoritmo vetor_pares; #include <stdio.h>

real vetor[30] ; float vetor[30];


inteiro x; int x;

inicio void main(void){


para x0 at 30 faa printf("Digite os valores do vetor\n");
leia(vetor[x]); for (x=0; x<=29; x++)
para x0 at 29 faa scanf("%f", &vetor[x]);
se x % 2 = 0 ento printf("\nEstes sao os valores das posicoes
escreva(vetor[x]); pares:\n");
fim. for (x=0; x<=29; x++)
if (x%2==0)
printf("%.2f ",vetor[x]);
return 0;
}

58
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Escreva um algoritmo que leia duas matrizes M1(2x3) e M2(2x3) de elementos inteiros e cria:
uma matriz M3 que seja a soma de M1 e M2 e uma matriz M4 que seja a diferena de M1 e M2;
Algoritmo C
algoritmo matriz; #include <stdio.h>
#include <conio.h>
inteiro m1[2][3], m2[2][3], m3[2][3],
m4[2][3]; int m1[2][3], m2[2][3],m3[2][3],m4[2][3],x,y;
inteiro x,y;
void main(void)
inicio {
para x0 at 1 faa printf("Digite os valores de m1 e depois de m2");
para y0 at 2 faa for (x=0;x<2;x++)
inicio for (y=0;y<3;y++){
leia(m1[x][y]); move((x+1)*2,(y+1)*5);
leia(m2[x][y]); scanw("%i",&m1[x][y]);
fim; }
para x0 at 1 faa for (x=0;x<2;x++)
para y0 at 2 faa for (y=0;y<3;y++){
inicio move((x+1)*2,(y+1)*5+30);
m3[x][y]m1[x][y]+m2[x][y]; scanw("%i",&m2[x][y]);
m4[x][y]m1[x][y]-m2[x][y]; }
fim; for (x=0;x<2;x++)
para x0 at 1 faa for (y=0;y<3;y++){
para y0 at 2 faa m3[x][y]=m1[x][y]+m2[x][y];
escreva(m3[x][y]); m4[x][y]=m1[x][y]-m2[x][y];
para x0 at 1 faa }
para y0 at 2faa move((x+1)*2,(y+1*5));
escreva(m4[x][y]); printw("\nResultados:");
fim. for (x=0;x<2;x++)
for (y=0;y<3;y++)
{ move((x+5)*2,(y+1)*5);
printw("%i",m3[x][y]);
move((x+5)*2,(y+1)*5+30);
printw("%i",m4[x][y]);
}
getch();
endwin();
return 0;
}

59
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8. COMADOS BSICOS DA LIGUAGEM C


Este captulo dedicado a apresentar os comandos bsicos da linguagem C para
possibilitar a execuo em computador dos algoritmos estudados. A traduo dos algoritmos
para C no tarefa obrigatria da disciplina, mas recomendada como facilitadora do
aprendizado. Este material foi baseado no compilador Turbo C/C++ da Borland para sistema
operacional DOS, que ser utilizado nas aulas prticas e encontra-se instalado nos laboratrios
de programao da UNISC.

8.1 ESTRUTURA BSICA DE UM PROGRAMA C

Um programa em C constitudo de uma ou mais funes. Uma destas funes dever


ser, necessariamente denominada main esta funo em um programa C ser sempre aquela que
executada primeiro (por isso chamada de principal). O contedo da disciplina no envolve a
teoria de diviso da tarefa de um algoritmo em subprogramas, assim, teremos sempre apenas
uma funo, a funo main.

Tipicamente, nossos programas em C tero a seguinte estrutura:

#include <nome da bibblioteca>


void main (void)
{
comando;
comando;
------------;
------------;
}

A primeira linha, que inicia com #include serve para identificar as bibliotecas que sero
necessrias na execuo do programa porque o compilador far uso de comandos (funes), que
esto implementados nestas bibliotecas.
J a segunda linha o cabealho da funo principal. Funes so blocos de comandos
que sempre retornam um valor e por isso necessrio declararmos um tipo para cada funo
criada. Porm a funo principal no retorna nenhum valor e especificamos isso atravs da
declarao void. O tipo void especifica que uma varivel ou funo no possui valor. Da mesma
forma, declaramos void dentro dos parnteses para indicar que main no possui parmetros.
O smbolo de abertura de chaves ( { ) da terceira linha identifica o incio do bloco de
comandos da funo que deve ser encerrado com o smbolo de fechar chaves ( } ).

60
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Existe uma tradio entre os profissionais da rea de Computao que consiste em


escrever o primeiro programa em determinada linguagem apresentando-se ao mundo:

#include <stdio.h>
/*acesso a biblioteca stdio.h que contm (entre outras) as funes pritf() e getch()
usadas no programa*/
int main(void)
{ /*inicio do bloco de comandos da funo*/
printf("Ola Mundo!"); /* esta funo faz a sada de dados na tela*/
return (0); /* main sempre retorna 0 (zero) */
} /*fim do bloco de comandos da funo*/

8.2 TIPOS DE DADOS

A tabela abaixo apresenta alguns tipos bsicos em C , seu consumo de memria em


Bytes, a escala dos valores que poden armazenar e sua correspondncia em portugol.

Tipos em Bytes Escala Tipos em portugol


C
char 1 -128 a 127 Caractere
int 2 -32768 a 32767 Inteiro
float 4 3.4 E -38 a 3.4 E 38 real preciso simples
double 8 1.7E-308 a 1.7E+308 real preciso dupla
void 0 sem valor No existe

C no possui o tipo booleano, ou lgico, e considera resultado falso em testes quando


uma varivel ou expresso equivale a 0 (zero). Os demais valores (1, 67, a, -1) so
considerados resultado verdadeiro.
Para declararmos uma varivel que comporte uma cadeia de caracteres devemos declarar
um vetor de char.
As variveis do tipo char devero receber valores entre aspas simples ( ).

Os nomes escolhidos para variveis e constantes deve seguir as mesmas regras vistas para
algoritmos em pseudocdigo (portugol) mas o nome de uma varivel no pode ser igual a
uma palavra reservada, nem igual ao nome de uma funo declarada pelo programador,
ou pelas bibliotecas do C. Variveis de at 32 caracteres so aceitas. O C "case
sensitive" e, portanto, deve-se prestar ateno s maisculas e minsculas. Costuma-se

61
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

usar letras minsculas para nomes de variveis e maisculas para nomes de constantes.
Isto facilita na hora da leitura do cdigo.

Dica: se escolhermos nomes em portugus, estaremos evitando utilizar palavras da


linguagem, que so todas em ingls.

Abaixo um a tabela com as palavras reservadas da linguagem.

Auto Double if static


break Else int struct
Case Entry long switch
Char Extern register typedef
continue Float return union
Default For sizeof unsigned
Do Goto short while

8.3 DECLARAO DE VARIVEIS E COSTATES, COMADO DE ATRIBUIO

Declarao de Variveis
As variveis no C devem ser declaradas antes de serem usadas. A declarao feita
escrevendo o tipo da varivel, a seguir seu identificador e o sinal de ; (ponto e vrgula).

tipo_da_varivel lista_de_variveis;
Ex:
int idade;
float valor, salario;
char letra, opo

Definio de Constantes

As constantes referem-se a valores fixos que o programa no pode alterar e podem ser de
qualquer um dos tipos bsicos de dados.
Sua definio iniciado pela declarao const seguida pelo identificador da constante o
sinal de igualdade, o valor da constante e o sinal de ponto e vrgula.

Ex:
const PI = 3.15;

Atribuio de Valor
O sinal de igualdade utilizado para atribuies de valor, para constantes e variveis.

62
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

#include <stdio.h>
const
V=3;
int a;
int main(void)
{
a=V*2;
printf(" %d",a);
}

Os valores literais (alfanumricos) que so impressos na tela atravs do comando de


sada, devem ser considerados como constantes.
Conforme o tipo da constante, ser sua representao.
Constantes de caractere so envolvidas por aspas simples ();
Ex; a
Constantes formadas por cadeia de caracteres so envolvidas por aspas duplas;
Ex: Tecle algo para sair do programa
Constantes com valor inteiro so representadas por um nmero inteiro;
Ex: 10, -100
Constantes com valor real (float) devem apresentar o ponto decimal seguido da parte
fracionria do nmero;
Ex: 19.55

8.4 OPERADORES E FUES

Operadores aritmticos

Operador Ao
+ Soma (inteira e ponto flutuante)
- Subtrao ou Troca de sinal (inteira e ponto flutuante)
* Multiplicao (inteira e ponto flutuante)
/ Diviso (inteira e ponto flutuante)
% Resto de diviso (de inteiros)
-- Decremento
++ Incremento

63
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

O operador / (diviso) quando aplicado a variveis inteiras, fornece o resultado da diviso


inteira; quando aplicado a variveis em ponto flutuante fornece o resultado da diviso "real". O
operador % fornece o resto da diviso de dois inteiros.

Observe o trecho de cdigo a seguir,


int a ,b, x, y;
float z , z1, z2;
{
a=17;
b=3;
z=17.0
x = a / b;
y = a % b;
z1 = z / b;
z2 = a/b;
}
ao final da execuo destas linhas, os valores calculados seriam x = 5, y = 2, z1 = 5.666666 e
z2 = 5.0 . Note que, na linha correspondente a z2, primeiramente feita uma diviso inteira (pois
os dois operandos so inteiros). Somente aps efetuada a diviso que o resultado atribudo a
uma varivel float.

8.5 FUES PARA CLCULOS MATEMTICOS

So funes implementadas na biblioteca math.h.


Na tabela a seguir so apresentadas algumas funes matemticas em C

Resultado funo tipo do tipo do


argumento resultado
Logaritmo neperiano log(x) Real real

Logaritmo base 10 log10(x) Real real

e elevado potencia x exp(x) Real real

Valor absoluto de x fabs(x) Real real

abs(x) Int int

Decompe um real x em duas partes: modf(x,y) Real, real real


y recebe a parte fracionaria e a funo devolve a parte inteira,
ambas como real

Arredonda o valor de x para cima ceil (x) Real real

Arredonda o valor de x para baixo floor(x) Real real

64
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Retorna x elevado a potncia y pow(x,y) Real real

Raiz quadrada de x sqrt(x ) Real real

Retorna o resto da diviso de x por y fmod(x,y) Real, real real


Ex: fmod (25.55 , 2) = 1.55
Seno de x sin(x ) Real real

Cosseno de x cos( x) Real real

Arco-tangente de x atan( x) Real real

8.6 OPERADORES RELACIOAIS

Operador Ao
> Maior do que
>= Maior ou igual a
< Menor do que
<= Menor ou igual a
== Igual a
!= Diferente de

8.7 OPERADORES LGICOS

Operador Ao
&& E
|| OU
! NO

8.8 FUES DE ETRADA E SADA DE DADOS

8.8.1 FUES DE SADA DE DADOS

Forma Geral:
printf (expresso de controle, lista de argumentos);

Esta funo permite escrever na tela um comando da biblioteca stdio.h A expresso de


controle pode conter caracteres que sero exibidos na tela e os cdigos de formatao (ou
controle) que indicam o formato em que os argumentos devero ser impressos. Cada argumento
deve ser separado por vrgula. Os cdigos de controle usam a notao % para formatar variveis
e \ para formatar a disposio na tela (quebra d linha, tabulao, etc).
Para cada formatao de varivel na expresso de controle deve haver uma varivel na
lista de argumentos.

65
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

printf("O MDC entre %d e %d eh: %d\n",m,n,x);

Cdigos de controle para formatar variveis:

Cdigo Significado
%d Inteiro
%f Float
%c Caractere
%s String
%% Coloca na tela um %

Cdigos de controle para disposio na tela

Cdigo Significado
\b Retrocesso ("back")
\f Alimentao de formulrio ("form feed")
\n Nova linha ("new line")
\t Tabulao horizontal ("tab")
\" Aspas
\' Apstrofo
\0 Nulo (0 em decimal)
\\ Barra invertida
\v Tabulao vertical
\a Sinal sonoro ("beep")
\N Constante octal (N o valor da constante)
\xN Constante hexadecimal (N o valor da constante)

Na lista de argumentos pode haver variveis e/ou constantes, sempre separadas por
vrgula, veja o exemplo do trecho de programa abaixo:

int p
p= 65487 * 236597 ;
printf("O Produto entre %d e %d eh: %d\n",65487, 236597 ,p);

A funo printf():
Imprime a partir do ltimo caracter impresso.
No muda de linha at que a linha acabe ou que encontre um \n.

66
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Alguns exemplos de printf() e o que eles exibem:

printf ("Teste %% %%") -> "Teste % %"


printf ("%f",40.345) -> "40.345"
printf ("Um caractere %c e um inteiro %d",'D',120) -> "Um caractere D e um inteiro 120"
printf ("%s e um exemplo","Este") -> "Este e um exemplo"
printf ("%s%d%%","Juros de ",10) -> "Juros de 10%"

8.8.2 FUES DE ETRADA DE DADOS

Permitem ler dados pelo teclado. Sua sintaxe semelhante ao printf:


Forma Geral:

scanf(expresso de controle, lista de argumentos);

A expresso de controle pode conter cdigos de formatao, precedidos por %.


A lista de argumentos:
Depende da String de Formato.
Separados por ,.
Sempre variveis.
As variveis devem ser precedidas por &

int mat;
float media;
int main (void)
{
printf(Entre com a matrcula do aluno e sua media: ");
scanf(%d %f, &mat, &media);
-------;
--------;
}

%* indica que ser lido um valor do tipo especificado, mas no ser atribudo a nenhuma
varivel (sem parmetro na lista de argumentos).
A lista de argumentos consiste ento no endereo das variveis.
C oferece um operador para tipos bsicos chamado operador de endereo &, que
retorna o endereo do operando.

Exemplo para o operador de endereos:

67
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

int main( void ){


int num;
num = 2;
printf (Valor %d, endereo = %u, num, &num);
}

O programa acima imprime o valor e o endereo de memria de num.


%u usado pois endereo visto como inteiro sem sinal.
Ex. de sada: Valor=2, endereo = 1370

8.8.3 REVEDO A FORMATAO DE DADOS

Conforme o item anterior a cada um dos 4 tipos de dados base corresponde um caractere
de formatao especial para as instrues printf e scanf:

%d ou %i para int
%f para float
%lf para double
%e para double em notao cientfica
%c para char
%u para valor sem sinal
%g para o compilador escolher a forma mais curta entre float e notao cientfica.

Exemplo:

#include <stdio.h>
int i;
float x;
double y;
char c;

void main(void){
i = 347;
x = 3.558;
y = 2.9E7;
c = 'Z';

printf("valor de i = %d\n", i );
printf("valor de x = %f\n", x );
printf("valor de y = %lf\n", y );
printf("valor de c = %c\n", c );
}

68
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Ao ser executado, o programa vai mostra na tela o seguinte:

valor de i = 347
valor de x = 3.558000
valor de y = 29000000.000000
valor de c = Z

Para se alterar o nmero de casas decimais quando se pretende escrever uma varivel do
tipo float ou double, deve acrescentar-se ao %f ou %e o nmero de preciso desejada precedido
de ponto. Por exemplo, se no exemplo acima tivssemos escrito:
...
printf("valor de x = %.2f\n", x );
...
iria aparecer escrito:
valor de x = 3.56

Veja mais em Schildt, 1996, pgina 209.

8.8.4 LEITURA DE CADEIA DE CARACTERES (STRIG)

No C uma string um vetor de caracteres terminado com um caractere nulo. O caracter


nulo um caractere com valor inteiro igual a zero (cdigo ASCII igual a 0).

Forma geral da declarao:


char nome_da_string[tamanho];
Isto declara um vetor de caracteres (uma string) com nmero de posies igual a
tamanho. Note que, como temos que reservar um caractere para ser o terminador nulo, temos que
declarar o comprimento da string como sendo, no mnimo, um caractere maior que a maior string
que pretendemos armazenar.
Supondo a declarao de uma string de 7 posies e coloquemos a palavra Joo nela.
Teremos:
J o a o \0
Neste caso as duas clulas vazias tm valores indeterminados. Isto acontece porque o C
no inicializa variveis, cabendo ao programador esta tarefa. Portanto as nicas clulas que so
inicializadas so as que contm os caracteres 'J', 'o', 'a', 'o' e '\0' (este ltimo o caracter nulo).
Se quisermos ler uma string fornecida pelo usurio podemos usar a funo gets(). Um
exemplo do uso desta funo apresentado abaixo. A funo gets() coloca o terminador nulo na
string, quando voc aperta a tecla "Enter".

69
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

#include <stdio.h>
int main (void)
{
char string[100];
printf ("Digite uma string: ");
gets (string);
printf ("\n\nVoce digitou %s",string);
return(0);
}
Neste exemplo o tamanho mximo que pode ser lido na string uma seqncia de 99
caracteres.
Como as strings so vetores de caracteres, para se acessar um determinado caractere de
uma string, basta "indexarmos", ou seja, usarmos um ndice para acessarmos o caractere
desejado dentro da string.
Supondo uma string chamada s que est armazenado Paula . Podemos acessar a
segunda letra de s da seguinte forma:

str[1] = 'a';
Na linguagem C, o ndice de um vetor comea em zero. Assim, a primeira letra da string
sempre estar na posio 0. A segunda letra sempre estar na posio 1 e assim sucessivamente.
Para ler uma string fornecida pelo usurio podemos usar a funo gets(). Um exemplo do
uso desta funo apresentado abaixo. A funo gets() coloca o terminador nulo na string,
quando voc aperta a tecla "Enter".

#include <stdio.h>
char string[100];
int main (void)
{
printf ("Digite uma string: ");
gets (string);
printf ("\n\nVoce digitou %s",string);
}

Neste programa, o tamanho mximo da string que voc pode entrar uma string de 99
caracteres.

70
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8.9 COMADOS CODICIOAIS

8.9.1 COMADO IF

O comando IF especifica que um comando deve ser executado somente se o resultado


de uma expresso lgica (boolean ) for verdadeira. Se for falsa, ento outro comando deve ser
executado, ou nenhum comando da sua estrutura deve ser executado.

Formas do comando IF:

A) if (condio)
instruo;

A condio ser avaliada, se for zero (se for falsa) a instruo no ser executada. Se a
condio for verdadeira (diferente de zero) a instruo ser realizada. Instruo pode ser um
bloco de comandos, neste caso sero delimitados por chaves.

Exemplo:

#include <stdio.h>
#include<conio.h>
int num;
int main(void)
{
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10)
printf ("\n\n O numero e maior que 10");
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.");
}
if (num<10)
printf ("\n\nO numero e menor que 10");

B) if (condio)
comando1;
else
comando2;

71
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Neste caso, se a condio for verdadeira ser executado o comando 1. Caso a condio
for falsa, ser executado o comando 2. Tanto o comando 1 como o comando 2 podem conter
blocos.

Exemplos:

#include <stdio.h>
int num;
int main (void)
{
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.\n");
}
else
{
printf ("\n\nVoce errou!\n");
printf ("O numero e diferente de 10.\n");
}
}

Exemplo para ifs aninhados:

#include <stdio.h>
int num;
int main (void)
{ printf ("Digite um numero: ");
scanf ("%d",&num);
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.\n");
}
else
if (num>10)
printf ("O numero e maior que 10.");
else
printf ("O numero e menor que 10.");

72
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

8.10 COMADO CODICIOAL SWITCH

O comando switch prprio para se testar uma varivel em relao a diversos valores
pr-estabelecidos. basicamente usado na implementao de menus. Sua forma geral :

switch (varivel)
{
case constante_1:
declarao_1;
break;
case constante_2:
declarao_2;
break;
. ..
case constante_n:
declarao_n;
break;
default
declarao_default;
}

A estrutura switch no aceita condies, apenas constantes. O switch testa a varivel e


executa a declarao cujo case corresponda ao valor atual da varivel. A declarao default
opcional e ser executada apenas se a varivel, que est sendo testada, no for igual a nenhuma
das constantes. No h necessidade de chaves envolvendo as instrues de cada case, pois estas
instrues no so consideradas um bloco, mas deve haver um conjunto de chaves envolvendo
todo o corpo de cases, incluindo default.
O comando break, faz com que o switch seja interrompido assim que uma das
declaraes seja executada. Mas ele no essencial ao comando switch. Se aps a execuo da
declarao no houver um break, o programa continuar executando os cases do switch, na
ordem seqencial, at o fim do switch.

#include <stdio.h>
int num;
int main (void)
{ printf ("Digite um numero: ");
scanf ("%d",&num);
switch (num)
{
case 9:
printf ("\n\nO numero e igual a 9.\n");
break;
case 10:
printf ("\n\nO numero e igual a 10.\n");

73
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

break;
case 11:
printf ("\n\nO numero e igual a 11.\n");
break;
default:
printf ("\n\nO numero no e nem 9 nem 10 nem 11.\n");
}
}

8.11 COMADOS DE REPETIO

8.11.1 COMADO FOR


Forma geral:
for (inicializao;teste;incremento)
comando ou bloco;

Havendo um bloco de comandos, este dever ser envolvido por chaves.

Exemplo:

#include <stdio.h>
int count;
int main (void)
{
for (count=1; count<=100; count++)
printf ("%d ",count);
}

8.11.2 COMADO WHILE

Forma Geral :
while (condio)
comando ou bloco;
Exemplo:

#include <stdio.h>
int ch;
void main(void)
{
ch= 0;
while (ch >=0
scanf(%d,&ch);
}

8.11.3 COMADO DO-WHILE


Forma geral:

74
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

do
{
instruo;
} while (condio);

Mesmo que a declarao seja apenas um comando uma boa prtica deixar as chaves. O
ponto-e- vrgula final obrigatrio.
A estrutura do-while executa a instruo, testa a condio e, se esta for verdadeira, volta
para a instruo. Este comando, ao contrrio do for e do while, garante que a instruo ser
executada pelo menos uma vez.

8.12 TIPO ESTRUTURADO HOMOGEO

Forma Geral:
tipo_da_varivel nome_da_varivel [tamanho];

Cada elemento deste tipo distinguido pelo ndice que referencia sua posio dentro
da estrutura.

8.12.1 VETOR:

Estrutura unidimensional onde cada elemento referenciado por uma varivel com um
nico ndice.

Forma geral:
tipo_da_varivel nome_da_varivel [tamanho];

Exemplo:

int vet [10];

Na linguagem C o primeiro elemento est na posio zero. Isto significa que, no exemplo
acima, os dados sero indexados de 0 a 9. Para acess-los vamos escrever:

vet[0]
vet[1]
.
.
.
vet[9]

75
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

A linguagem C, no entanto no vai impedi-lo de escrever:


vet[10]

O C no verifica se o ndice que voc usou est dentro dos limites vlidos, isto
tarefa para o programador.

Exemplo de utilizao de vetores:

#include <stdio.h>
int num[3]; /* Declara um vetor de inteiros de 3 posies */
int x=0;
int totalnums;
int main (void)
{ do
{ printf ("\nEntre com um numero (999 p/ terminar): ");
scanf ("%d",&num[x]);
x++;
} while (num[x-1]!=999);
totalnums=x-1;
printf ("\n\n\n\t Os nmeros que voc digitou foram:\n\n");
for (x=0;x<totalnums;x++)
printf (" %d",num[x]);
}

No exemplo acima, o inteiro x inicializado em . O programa pede pela entrada de


nmeros at que o usurio entre com o flag 999.
Os nmeros so armazenados no vetor num. A cada nmero armazenado, o contador do
vetor incrementado para, na prxima iterao, armazenar na prxima posio do vetor. Quando
o usurio digita o flag, o programa abandona o primeiro loop e armazena o total de nmeros
gravados.
Por fim, todos os nmeros so impressos.
Se o usurio digitar mais de 3 nmeros, estes sero lidos normalmente, mas sero
armazenados em uma parte no alocada de memria, pois o espao alocado foi para somente 3
inteiros. Isto pode resultar nos mais variados erros no instante da execuo do programa.

8.12.2 MATRIZ

Estrutura bidimensional onde cada elemento referenciado por uma varivel com dois
ndices.

Forma geral:
tipo_da_varivel nome_da_varivel [linhas][colunas]

76
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

Exemplo:
int mat[10] [10];

A declarao acima armazena espao em memria para uma tabela com 10 linhas e 10
colunas.
Como nos vetores os ndices variam de zero ao valor declarado, menos um porm o C
no vai verificar isto para o usurio. Manter os ndices na faixa permitida tarefa do
programador.

Exemplo:
#include <stdio.h>
int mat [20][10];
int i,j,c;
int main (void)
{ c=1;
for (i=0;i<20;i++)
for (j=0;j<10;j++)
{ mat[i][j]=c;
c++;
}
}

No exemplo acima, a matriz mat preenchida, sequencialmente por linhas, com os


nmeros de 1 a 200.

Bibliografia

FARRER, Harry. Programao estruturada de computadores: Algoritmos Estruturados. Rio de


Janeiro: Editora Guanabara Dois S.A, 1985.

FORBELLONE, Andr L. V.. Lgica de Programao A construo de Algoritmos e


Estruturas de Dados. So Paulo: Makron Books, 1993

GUIMARES, Angelo de Moura; LAGES, Newton A. De C.. Algoritmos e Estrutura de Dados.


Rio de Janeiro: Ed.Livros Tcnicos e Cientficos Ltda, 1985.

MANZANO, Jos Augusto N. G.. Estudo dirigido de Algoritmos So Paulo: rica, 1997.

MANZANO, Jos Augusto N.G.. Algoritmos: lgica para desenvolvimento de programao.


So Paulo: rica, 1996.

MIZRAHI, Viviane Victorine. Treinamento em linguagem C. So paulo: McGraw-Hill, 1990.

ORTH, Afonso Incio. Algoritmos e programao com resumo das linguagens Pascal e C.
Porto Alegre: AIO, 2001.

77
Universidade de Santa Cruz do Sul
Algoritmos e Programao Notas de Aula - Profa. Beatriz Lux, Prof. Joo Carlos Furtado

PINTO, Wilson Silva. Introduo ao desenvolvimento de algoritmos e estruturas de dados. So


Paulo: rica, 1990.

SCHILDT, Herbert. C completo e total. So Paulo: Makron Books, 1996.

78

S-ar putea să vă placă și