Você está na página 1de 41

Unidade I - INTRODUÇÃO A ALGORITMOS E LINGUAGENS DE PROGRAMAÇÃO

1 ALGORITMOS

I.1.1 DEFINIÇÃO

A palavra algoritmo, à primeira vista, nos parece estranha. Embora possua designação desconhecida, fazemos uso constantemente de algoritmos em nosso cotidiano: a maneira como uma pessoa toma banho é um algoritmo. Outros algoritmos freqüentemente encontrados são:

  • Instruções para se utilizar um aparelho eletrodoméstico;

  • Uma receita para preparo de algum prato;

  • Guia de preenchimento para declaração do imposto de renda;

  • regra para determinação de máximos e

A

mínimos de funções por

derivadas sucessivas;

  • maneira

A

como as contas

de água,

luz

e telefone são calculados

mensalmente.

São vários apresentados aqui:

os conceitos

para

algoritmo. Escolhemos alguns para serem

Um conjunto finito de regras que provê uma seqüência de operações para resolver um tipo de problema específico.”

[KNUTH]

Seqüência ordenada, e não ambígua, de passos que levam à solução de um dado problema.”

[TREMBLAY]

Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do

resultado ou da solução do problema.”

[AURÉLIO]

Um conjunto de instruções organizadas numa sequência lógica, que conduzem o interpretador a solucionar um determinado problema.

ÂNGELO STROLIGO PECLY

Resumindo,

um

algoritmo

é

uma

interpretação,

passo

a

passo,

de

um

determinado problema do mundo real, estabelecendo todos os passos na busca de

uma solução.

Existem duas técnicas que se completam para melhor documentar o algoritmo:

  • Diagrama de Blocos: consiste em representar a seqüência de operações do algoritmo utilizando símbolos geométricos.

  • Português Estruturado: consiste em transformar o diagrama de blocos numa forma narrativa, denominada pseudocódigo, muito próximo de uma linguagem computacional.

I.1.2 CARACTERÍSTICAS

Todo algoritmo deve apresentar algumas características básicas:

  • Ter fim;

  • Não dar margem à dupla interpretação (não ambíguo);

  • Capacidade de receber dado(s) de entrada do mundo exterior;

  • Poder gerar informações de saída para o mundo externo ao do ambiente do microcomputador;

  • Ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis em um tempo finito).

I.1.3 SOLUÇÃO DE PROBLEMAS

Compreender
Compreender
I.1.2 CARACTERÍSTICAS Todo algoritmo deve apresentar algumas características básicas:  Ter fim;  Não dar margem
Solucionar
Solucionar
I.1.2 CARACTERÍSTICAS Todo algoritmo deve apresentar algumas características básicas:  Ter fim;  Não dar margem
Representação a solução
Representação
a solução

O

aluno de algoritmos

deve ter

sempre em

mente

que

a

solução

de

um

problema do mundo real não está relacionado à informática, a menos que se queira

informatizar tal solução.

Observe que, pela

afirmação anterior a

solução já

deve existir para

que

se

possa informatizá-la, ou seja, primeiro deve-se descobrir a solução do problema,

independentemente de qualquer ferramenta de informática.

A solução de problemas envolve duas principais etapas:

  • Deve-se conhecer/entender muito bem o problema que se deseja solucionar. Estude o problema. Leia sobre o problema. Converse com quem conhece o problema. Enfim, procure dominar o problema;

  • Busque uma solução para problema. Muitas vezes, basta conhecer o problema para solucioná-lo, em outras, deve-se aplicar muito raciocínio lógico para encontrar uma solução.

Como já foi dito, algoritmos são utilizados para expressar (escrever, tornar legível por outra pessoa) um raciocínio, logo, de posse da solução, basta representá-la através de algoritmos, ou seja, traduzir a solução encontrada para uma linguagem mais específica e padronizada, para que outras pessoas possam ler o raciocínio utilizado para solucionar o problema.

I.1.4 EXEMPLOS

Os algoritmos são comuns em nosso cotidiano como, por exemplo, uma receita de bolo. Em uma receita de bolo, está descrita uma série de ingredientes necessários e uma seqüência de passos a serem cumpridos para atingir o objetivo que é ter um bolo pronto.

ALGORITMO 1: Receita de Bolo

Providencie manteiga, ovos, 2 quilos de massa; Misture os ingredientes; Despeje a mistura na fôrma de bolo; Leve a fôrma ao forno; Espere 20 minutos; Retire a fôrma do forno; Deixe esfriar; Prove.

Outra atividade algorítmica comum em nosso dia a dia é o ato de trocar uma lâmpada queimada. Apesar de aparentemente bastante óbvio, muitas vezes fazemos esse tipo de atividade sem percebermos determinados detalhes. Podemos descrever de maneira simples:

ALGORITMO 2: Troca de lâmpadas

Pegue uma escada; Posicione-a embaixo da lâmpada queimada; Pegue uma lâmpada nova; Suba na escada; Retire a lâmpada velha; Coloque a lâmpada nova, desça e guarde a escada.

Já se deparou com alguém lhe abordando na rua e lhe perguntando sobre como chegar a algum lugar? Sua resposta à dúvida desta pessoa nada mais é do que um algoritmo.

I.1.5 EXERCÍCIOS

  • 1 - Elabore um algoritmo que mova os três discos da haste “1” para a haste “2” ou para a haste “3”. Só é possível movimentar um único disco de cada vez para qualquer

haste, contanto que nunca seja colocado um disco maior sobre um disco menor. O objetivo é transferir os três discos para a haste destino, tal como se apresentam

ordenados na haste “1”, conforme a figura a seguir:

I.1.5 EXERCÍCIOS 1 - Elabore um algoritmo que mova os três discos da haste “1” para
  • 2 - Três jesuítas e três canibais precisam atravessar um rio. Para tal, dispõem de um barco com capacidade para duas pessoas. Por medidas de segurança não se permite que em alguma margem a quantidade de jesuítas seja inferior à de canibais. Qual a seqüência de passos que permitiria a travessia com segurança?

  • 3 - Um homem precisa atravessar um rio com um barco que possui capacidade de

transportar apenas ele mesmo e mais uma de suas três cargas que são: um lobo, um bode e um mole de alfafa. O lobo e o bode não podem ficar sozinhos em uma margem,

pois o lobo comerá o bode. O bode e a alfafa também não podem ficar sozinhos em uma margem, pois o bode comerá a alfafa. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas?

  • 4 - Um algoritmo não pode conter um comando como “Escreva todos os números

inteiros positivos”. Por quê?

  • 5 Descreva um algoritmo para trocar o pneu de um carro.

  • 6 Você dispõe de nove bolas das quais oito possuem um mesmo peso e uma é mais pesada que as demais e uma balança. Descreva um algoritmo para descobrir

qual é a bola mais pesada, utilizando-se apenas de duas pesagens na balança.

  • 7 Você está em uma sala que contém três interruptores. Cada interruptor está ligado a uma lâmpada presente em uma sala ao lado. As três lâmpadas estão inicialmente

apagadas. Descreva um algoritmo para descobrir qual interruptor está ligado a qual lâmpada, sabendo que você só pode ir uma única vez à sala ao lado.

  • 8

Como você descreveria um

algoritmo para resolver o problema proposto no

Exercício 1, porém com quatro discos?

I.2 ESTRUTURAS DE DADOS

Representação dos dados que serão manipulados pelo algoritmo.

Como representar dados?

  • Depende da ferramenta usada na solução;

  • É, geralmente, uma tarefa difícil;

  • Não existe uma única solução;

  • Não existe receita. Os dados

utilizados por um algoritmo podem ser muito simples

complexos. Veja os exemplos a seguir:

ou muito

  • Calcular quantos dias faltam para terminar o ano;

    • Este algoritmo manipula dados inteiros, que nos são bastante familiares, ou seja, são dados simples.

  • Controlar o cadastramento de uma nota fiscal, considerando todo seu cabeçalho assim como todo seus itens.

    • Este algoritmo já deve manipular um

tipo

de

dado

bem

complexo,

principalmente por ser composto de outros tipos de dados e ainda possuir um relacionamento entre o cabeçalho da nota com seus respectivos itens.

Resumindo, deve-se exercitar-se bastante, ou seja, aprender com a prática.

I.3 PROGRAMAS

Um programa nada mais é que um algoritmo expresso numa linguagem formal, Linguagem de Programação.

A Linguagem de Programação nos faz um grande serviço, o de traduzir um programa escrito por nós, respeitando a sintaxe da linguagem escolhida, na linguagem reconhecida pelo computador, ou seja, a linguagem binária, que é a única executável pelo computador.

I.3.1 O processo de construção de programas:

  • compreender o problema do mundo real;

  • solucionar o problema;

  • formular o algoritmo (representação do comportamento);

  • definir as estruturas de dados a serem usadas (representação da informação);

  • transcrever o algoritmo para a linguagem de programação desejada. Toda linguagem envolve dois aspectos:

  • Sintaxe: forma, a correta escrita dos comandos;

  • Semântica: conteúdo, sequência lógica dos comandos;

I.4 LINGUAGENS DE PROGRAMAÇÃO

Nós podemos descrever algoritmos através da língua portuguesa, já que o Português é a linguagem que conhecemos e usamos em nossa comunicação. No entanto, os computadores só compreendem uma linguagem composta de combinações entre zero e um, conhecida como linguagem de máquina, que é bastante complicada

para nós, seres humanos. Por exemplo, suponhamos que as letras „o‟ e „i‟ sejam

reconhecidas pela máquina pelos símbolos 10010110 e 01101001, respectivamente. Vamos supor também que um comando responsável por escrever algo na tela do

computador seja 00001111. Pois bem, para escrever a palavra „oi‟ no monitor, seria

necessário enviar a seguinte mensagem para o computador:

0000111110010110 01101001

Complicado, não? Dá para se ter idéia que, para descrever um algoritmo ao computador, fazendo uso da linguagem de máquina, é necessário ter ao lado uma lista de códigos compreendidos pela máquina. Além disso, para compreender um algoritmo já escrito em linguagem de máquina, também se torna primordial ter em mãos a mesma lista de códigos.

Para eliminar este inconveniente, foram criadas a linguagens de programação. Estas linguagens são formadas por comandos de alto nível, representados por palavras em inglês já que foram criadas por pessoas oriundas de países de língua inglesa. As linguagens de programação possuem um módulo chamado compilador ou interpretador, dependendo da linguagem que é responsável por traduzir programas de computadores em linguagem de máquina.

Alguns exemplos de linguagens de programação são: Fortran, Basic, Cobol, Clipper, C e Pascal. Neste documento, abordaremos a linguagem C, por ser bastante poderosa, acadêmica e estruturada.

I.5 PORTUGUÊS ESTRUTURADO

A partir deste ponto, começaremos a estudar a representação de algoritmos através do Português Estruturado.

I.5.1 TIPOS PRIMITIVOS DE DADOS

VARIÁVEL

Uma variável funciona como um container de algum dado, ou seja, um “lugar” onde podemos guardar um valor para ser utilizado ao longo do algoritmo. A primeira vista, pode soar estranho ter que guardar dados num “lugar” para poder utilizá-lo mais adiante, isso devido ao fato de que em nosso cotidiano fazemos isso de maneira muito automática. Vejamos um exemplo de forma mais minuciosa:

  • Considere o valor 5;

  • Considere o valor 3;

  • Considere a operação de adição;

  • Qual o resultado da operação?

Automaticamente dizemos oito, sem pestanejar. Mas o que realmente fizemos? Ao considerar o valor 5, nosso cérebro armazenou este valor em algum lugar em nossa memória. Com o segundo valor aconteceu a mesma coisa, porém o valor 3 foi armazenado num lugar diferente do primeiro valor. Os dois valores não poderiam ser armazenados no mesmo lugar pois o segundo valor sobrescreveria o primeiro. A terceira informação, a operação desejada, também foi armazenada em nossa memória, num terceiro lugar. Ao considerar o comando para efetuar o cálculo, nosso cérebro, de posse de todos os argumentos necessários, efetua o cálculo e também armazena o resultado numa posição de nossa memória.

No ambiente computacional, já pensando em como representar o raciocínio acima através de um algoritmo, devemos considerar uma variável como sendo uma referência à uma posição da memória principal do computador, é como se estivéssemos dando nomes às posições de nossa memória (cérebro). Assim sendo, para resolvermos o cálculo acima, precisaremos de três variáveis, as duas primeiras para armazenar os dois primeiros valores e a terceira para armazenar o resultado. O comando de adição, no alto nível de raciocínio em que é escrito um algoritmo, não precisará ser armazenado na memória. Dessa forma, podemos esboçar um pequeno algoritmo:

A=5;

B=3;

C=A+B;

Por todo raciocínio descrito acima, o resultado armazenado na variável C é o número inteiro 8.

TIPOS DE DADOS

As variáveis utilizadas anteriormente respeitam, perfeitamente, as regras impostas pelo Português Estruturado para se descrever algoritmos, porém, antes de utilizar uma variável, devemos antes criá-las, ou seja, requisitar ao computador que reserve uma posição de memória para um determinado tipo de dado e que construa a referência desta posição de memória ao nome dado pelo programador como identificador da variável.

Na afirmação acima podemos constatar algumas características fundamentais de uma variável:

  • A posição de memória reservada; Não estaremos preocupados com esta informação no contexto deste curso.

  • O identificador da variável;

É o nome que damos à variável para que possamos referenciá-la durante o desenvolvimento do algoritmo.

  • O tipo de dado a ser armazenado. Esta informação é de suma importância, pois cada

tipo

de dado

ocupa um

determinado espaço na memória, por exemplo, um número inteiro ocupa menos

espaço que um nome de uma pessoa.

O nome/identificador de uma variável pode ser uma seqüência de um ou mais

caracteres alfabéticos e numéricos, iniciados por uma letra ou ainda pelo caracter „_‟.

Os nomes não podem conter outros símbolos gráficos, operadores ou espaços em branco. É importante ressaltar que as letras minúsculas são consideradas diferentes das letras maiúsculas, assim temos como exemplos válidos:

a

total

x2

min_sal

_especial

VALOR

Maximo

ExpData

Seguindo as mesmas regras temos abaixo exemplos inválidos de nomes de variáveis:

1x Total geral numero-minimo
1x
Total geral
numero-minimo

A razão destes nomes serem inválidos é simples: o primeiro começa com um algarismo, o segundo possui um espaço em branco e o terceiro contém o operador de subtração.

Além das regras de formação de nome em si (identificadores), uma variável não pode utilizar como identificador uma palavra reservada da linguagem.

Desta forma para declararmos uma variável devemos seguir a seguinte sintaxe:

tipo nome1 [, nome2 [, nome3 [ …, nomeN]]];

Ou seja, primeiro indicamos um tipo, depois declaramos uma lista contendo um ou mais nomes (identificadores) de variáveis desejadas deste tipo, onde nesta lista os nomes são separados por vírgulas e a declaração terminada por „;‟ (ponto-e-vírgula).

No Português Estruturado existem os seguintes tipos de dados:

Tipo

Tamanho/Formato

Descrição

Numéricas

Int

 

Inteiro

Real

32-bit complemento a dois 32-bit IEEE 754

Ponto flutuante

Outros tipos

Logico

8-bit

 

char

8-bit

Tipo booleano (true e false) Um único caracter

String

8-bit por caractere

Conjunto de caracteres

Vejamos alguns exemplos:

int i; real total, preco;

Também é possível definirmos um valor inicial para uma variável diretamente em sua declaração:

int quantidade = 0; real angulo = 1.57; logico ok = false;

char letra = „c‟;

string nome = “Unesa”;

Algumas observações importantes:

  • Um número em ponto flutuante é sempre representado com um “.” (ponto) para separar a parte inteira da fracionária;

  • O dado do tipo char deve ser representado sempre entre aspas simples „‟;

  • O dado do tipo string deve ser representado sempre entre aspas “”;

  • O dado do tipo booleano possui apenas os valores true e false, sempre SEM aspas; COMENTÁRIOS

Comentários são trechos de texto, usualmente explicativos, inseridos no programa de forma que não sejam considerados como parte do código, ou seja, são informações deixadas juntamente com o código como informação para quem programa.

O Português Estruturado aceita dois tipos de comentários:

  • de uma linha

  • de múltiplas linhas O primeiro, de uma linha, utiliza duas barras (//) para marcar seu início:

// comentário de uma linha // tudo após as duas barras é considerado comentário

O segundo usa a combinação /* e */ para delimitar uma ou mais linhas de comentários:

/*

comentário de múltiplas linhas */

OPERADORES

Operadores aritméticos

Operador

Uso

Descrição

+

op1 + op2

Soma op1 com op2

-

op1 - op2

Subtrai op2 de op1

*

op1 * op2

Multiplica op1 por op2

/

op1 / op2

Divide op1 por op2

%

op1 % op2

Calcula o resto da divisão inteira de op1 por op2

div

   

**

op1 div op2 op1 ** op2

Calcula o quociente da divisão inteira Calcula op1 elevado à potência op2

 

Operador

Uso

Retorna verdadeiro se

>

op1 > op2

op1 é maior que op2

>=

op1 >= op2

op1 é maior ou igual que op2

<

op1 < op2

op1 é menor que op2

<=

op1 <= op2

op1 é menor ou igual que op2

==

   

!=

op1 == op2 op1 != op2

op1 e op2 são iguais op1 e op2 são diferentes

Operador

Uso

Retorna verdadeiro se

op1 && op2

op1 || op2

     

&&

 

Ambos op1 e op2 são verdadeiros. Avalia a expressão op1 e

||

 

condicionalmente avalia a expressão op2 Ou op1 ou op2 é verdadeiro. Avalia a expressão op1 e

!

! op

condicionalmente avalia a expressão op2 Negação de op

Operadores relacionais

Operadores Lógicos

Operadores de atribuição

 

Operador

Uso

Equivalente a

=

op1 = op2

op1 recebe o valor de op2

+=

op1 += op2

op1 = op1 + op2

-=

op1 -= op2

op1 = op1 op2

*=

op1 *= op2

op1 = op1 * op2

/=

   

%=

op1 /= op2 op1 %= op2

op1 = op1 / op2 op1 = op1 % op2

EXERCÍCIOS

 
  • 1 Defina variável.

  • 2 Qual a finalidade de declararmos uma variável?

  • 3 Escreva o tipo de dado ideal para se representar as seguintes informações:

    • a) O número da conta bancária;

    • b) A altura de uma pessoa em metros;

    • c) A placa de um veículo;

    • d) O número de filhos de uma pessoa;

    • e) A população de um país;

    • f) A cor de um objeto.

  • 4 Quais os tipos de dados nativos do Português Estruturado?

  • 5 Quais os valores possíveis para um dado do tipo Logico?

  • 6 O que é uma string?

  • 7 Identifique os tipos dos seguintes dados:

    • a) "Processamento de Dados"

    • b) 0.4

    • c) "4.5E10"

    • d) true

    • e) '?'

    • f) '

    '

    • g) -5.3E-02

    • h) ".05"

    • i) "false"

    • j) 0

    • 8 O que são identificadores?

    • 9 Quais as regras básicas para a formação de identificadores?

    10 Assinale os identificadores inválidos, justificando.

    • a) A1BC

    • b) XA,1d

    • c) NomeDoAluno

    • d) 198aberto

    • e) prog

    11

    - Escreva os comandos necessários para declarar: uma variável que receba

    uma frase, três variáveis que recebam as três notas de um aluno e uma variável que receba a idade de uma pessoa.

    • 12 Qual a finalidade de um comentário dentro de um programa? Como deve

    ser escrito em Português Estruturado?

    ESTRUTURA DE UM ALGORITMO ESCRITO EM PORTUGUÊS ESTRUTURADO

    Algoritmo, assim como muitas linguagens de programação, é uma linguagem altamente estruturada que possui uma rigidez definida, embora sua estrutura de programa seja flexível. Cada seção ou parte de um programa deve aparecer numa seqüência apropriada e ser sistematicamente correta, senão ocorrerá um erro.

    Por

    outro lado,

    não

    há regras

    específicas para

    o

    uso

    de

    espaço e linhas

    quebradas, dando ao programador liberdade para escrever programas mais adequados

    ao seu estilo.

    Um algoritmo escrito em Português Estruturado tem o seguinte formato:

    PROG <identificador> tipo identificador1 [,identificador2 [,identificador3 [,identificador N]]];

     

    [<comando1>;]

    [

    ...

    ;]

    [<comandoN>;]

    FIMPROG

    COMANDOS DE ENTRADA E SAÍDA DE DADOS

    SAÍDA

    Normalmente, em programação, quando nos referimos à saída de dados estamos particularmente interessados em exibir mensagens no monitor do computador. O comando utilizado para isso é o imprima, veja a sintaxe acompanhada de alguns exemplos:

    imprima

    expressão ou variável

    Algoritmo 01

    ;

    prog imp1 imprima “Aprendendo algoritmo!!!”; fimprog

    Este algoritmo faz com que seja exibida, na tela do computador, a mensagem:

    Aprendendo Algoritmo!!!

    Algoritmo 02

    prog imp2 int x;

    x=10;

    imprima “Valor de x = ”, x;

    fimprog

    Este algoritmo faz com que seja exibida, na tela do computador, a mensagem e o conteúdo da variável x: Valor de x = 10

    Algoritmo 03

    prog imp3

    int x;

    x=10;

    imprima “Resultado = ”, x+1; fimprog

    Este algoritmo faz com que seja exibida, na tela do computador, a mensagem e o conteúdo da variável x acrescido em uma unidade, sem alterar o valor de x:

    Resultado = 11.

    ENTRADA

    O comando de entrada faz com que uma informação digitada no teclado, pelo usuário, entre no computador e fique armazenada numa variável previamente declarada, ou seja, o dado digitado parte do teclado e vai direto para uma posição de memória RAM, veja a sintaxe acompanhada de alguns exemplos:

    leia

    nome da variável

    ;

    Algoritmo 04

    prog leia1 int x; leia x; imprima “Número lido = ”, x; fimprog

    Este algoritmo digitado pelo usuário.

    exibirá,

    na tela do computador,

    a mensagem

    e

    o

    número

    EXPRESSÕES

    O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão matemática onde um conjunto de variáveis e constantes numéricas relacionam-se por meio de operadores compondo uma fórmula que, ao ser avaliada, resulta num valor. As expressões se dividem em:

    • Aritméticas

    Nas expressões aritméticas fazemos o uso dos operadores aritméticos que são símbolos utilizados para efetuarmos cálculos matemáticos. Os operadores aritméticos são utilizados somente com dados do tipo int e do tipo real.

    Expressão

    Resultado

     

    3

    + 2

    5

     

    8

    5

    3

     
     

    3 * 3.5

    10.5

     
     

    5 / 2

    2.5

     

    A=5;

    2

    A div 2;

    A=5;

     

    B=2;

    C vale 1

    C = A % B;

    Prioridades

    As prioridades seguem o mesmo contexto das regras de precedência nas expressões matemáticas. Segue abaixo uma tabela contendo as prioridades e suas exceções.

    Prioridade

    Operadores

    * / div %

    + -

    Observações:

    • 1 Quando houver expressões com operadores de mesma prioridade, executa-se da esquerda para direita.

    • 2 A utilização de parênteses indica que as expressões contidas nos mesmos tem prioridade máxima. E se houver parêntese aninhados os

    parênteses mais internos tem prioridade.

    • Relacionais e Lógicas

    As expressões lógicas sempre retornaram true (Verdadeiro) e false (Falso). Para se montar expressões lógicas utilizamos de operadores relacionais e operadores lógicos. Veremos como funciona cada um destes operadores e exemplificaremos cada um deles. A utilização das expressões lógicas somente serão aplicadas em termos com o mesmo tipo de dados.

    Expressão

    Resultado

     

    1

    == 2

    false

     

    „A‟ == „a‟

    False

     
     

    5 > 2

    True

     

    3

    <= 3

    True

     

    true < false

    False

     

    „JOAO‟ > „JOSE‟

    False

     

    (2 + 3) != 5

    False

     

    „comp‟ != „COMP‟

    True

     
     

    11 > 4

    True

     

    EXERCICIOS RESOLVIDOS

    1- Considerando que X = 1, Y = 2 e Z = 5, desenvolva.

    • a) Z % Y div Y

    2- Dadas as comparações abaixo, escreva os resultados.

    • a) 3 == 3.0

    • b) „a‟ <= „A‟

    • c) „ „ == „ „

    • d) „CASA‟ != „casa‟

    • e) false == false

    • f) „JOAQUIM‟ < „JOSE‟

    • g) „22‟ > „200‟

    3- Sendo A = true e B = false. Qual o resultado das expressões abaixo

    • a) !A && B || A && !B

    • b) !(!(A || B) && (A || B))

    • c) A || B && !A || !B

    • d) (A || B) && (!A || B)

    GABARITO

    1-

    • a) Resp.: 5 mod 2 div 2 -> 1 div 2 -> 0

    • b) Resp.: 1 + 2 + 5 / 3 -> 3 + 1.667 -> 4.667

    2-

    • a) Resp.: false

    • b) Resp.: false

    • c) Resp.: true

    • d) Resp.: true

    • e) Resp.: true

    • f) Resp.: true

    • g) Resp.: true

    3-

    • a) Resp.: true

    • b) Resp.: true

    • c) Resp.: true

    • d) Resp.: false

    EXERCÍCIOS

    Algoritmo 05

    Construa um algoritmo que obtenha do usuário, via teclado, o seu nome e exiba a mensagem: Olá <nome digitado>!

    Algoritmo 06

    Construa um algoritmo que imprima o produto entre 28 e 43.

    Algoritmo 07

    Construa um algoritmo que imprima a média aritimética entre os números 8, 9

    e 7.

    Algoritmo 08

    Construa um algoritmo que leia um número inteiro e imprima seu antecessor e seu sucessor.

    Algoritmo 09

    Construa um

    algoritmo que leia

    imprima-os na tela do micro.

    um nome,

    um

    endereço e um telefone

    e

    Algoritmo 10

    Construa um algoritmo que leia dois números inteiros e imprima a soma. Antes do resultado, deverá aparecer a mensagem: Soma.

    Algoritmo 11

    Construa um algoritmo que leia dois números inteiros e imprima o produto.

    Algoritmo 12

    Construa um algoritmo que leia um número real e imprima a terça parte deste número.

    Algoritmo 13

    Construa um algoritmo que obtenha do usuário, via teclado, dois números inteiros e mostre a média destes números.

    Algoritmo 14

    Construa um algoritmo que obtenha do usuário/aluno o seu nome e suas duas melhores notas em Av´s. Como resultado o algoritmo deve exibir o nome do aluno seguido de sua média.

    Algoritmo 15

    Construa um algoritmo que obtenha o nome e o sobrenome de uma pessoa e, como resultado, escreva-os na seguinte forma: sobrenome seguido por uma vírgula e pelo nome. Exemplo: entrada: “Ângelo”, “Pecly” saída: Pecly, Ângelo

    Algoritmo 16

    Construa um algoritmo que leia um número inteiro positivo e exiba o dobro do mesmo.

    Algoritmo 17

    Construa um algoritmo que leia dois números inteiros e imprima a seguinte

    saída:

    Dividendo:

    Divisor:

    Quociente:

    Resto:

    Algoritmo 18

    Construa um algoritmo que leia um número inteiro de três casas e imprima o algarismo da casa das dezenas.

    Algoritmo 19

    Construa um algoritmo que leia uma data no formato ddmmaa e imprima: dia, mês e ano separados.

    Algoritmo 20

    Construa um algoritmo que leia uma data no formato ddmmaa e imprimano formato mmddaa.

    Algoritmo 21

    Construa um algoritmo que leia quatro números inteiros e imprima a média ponderada, sabendo-se que os pesos são respectivamente 1, 2, 3 e 4.

    Algoritmo 22

    Construa um algoritmo que leia um saldo de uma aplicação bancária e imprima este saldo reajustado em 2%.

    Algoritmo 23

    Construa um algoritmo para calcular a área de um triângulo, sendo dados a sua base e a sua altura.

    Algoritmo 24

    Construa

    um

    algoritmo para calcular e exibir
    algoritmo
    para
    calcular
    e
    exibir

    o

    comprimento

    de

    circunferência, sendo dado o valor de seu raio.

    uma

    C= 2πR Defina π como sendo uma constante de valor igual a 3.1415.

    Algoritmo 25

    Construa um algoritmo para ler uma temperatura dada na escala Fahrenheit e exibir o equivalente em Celsius.

    Algoritmo 26

    Algoritmo 19 Construa um algoritmo que leia uma data no formato ddmmaa e imprima: dia, mês

    Construa um algoritmo que leia duas variáveis inteiras e troque o conteúdo de uma com a outra.

    Algoritmo 27 Desafio 01

    Construa um algoritmo que leia um número inteiro e informe se ele é maior que zero.

    ESTRUTURAS DE SELEÇÃO

    Um programa de computador é uma seqüência de instruções organizadas de forma tal a produzir a solução de um determinado problema. Naturalmente tais instruções são executadas em seqüência, o que denomina-se fluxo seqüencial de execução. Em inúmeras circunstâncias é necessário executar as instruções de um programa numa ordem diferente da estritamente seqüencial. Tais situações são caracterizadas pela necessidade de repetição de instruções individuais ou grupos de instruções e também pelo desvio do fluxo de execução.

    As

    linguagens

    de

    programação

    tipicamente

    possuem

    alguns comandos

    estruturados destinados ao controle do fluxo de execução, isto é, estruturas que permitem a repetição e o desvio do fluxo de execução.

    Para que fique mais claro, vamos, mais uma vez, considerar um exemplo do nosso cotidiano. Imagine que você esteja planejando passar o fim de semana numa praia, mas esteja preocupado com as condições do clima, dessa forma você teria,

    naturalmente, o seguinte raciocínio: ...

    amanhã,

    SE fizer um dia ensolarado, viajarei

    para praia, MAS SE estiver chovendo, passarei pela locadora de vídeo.

    Por este exemplo, fica evidente que alguns “comandos” não serão executados,

    ou seja, se você for à praia, não irá à locadora. Você fará uma coisa ou outra. Neste

    tipo de situação, os “comandos” excluídos pela condição nunca serão executados.

    COMANDO SE

    No Português Estruturado, para que se implemente um desvio simples no fluxo de execução do programa, deve-se utilizar o comando se. Este comando deve respeitar a seguinte sintaxe:

    se ( expressão lógica ) {

    comando1_1;

    [ coamndo1_2;

    comando1_N;]

    } [ senao {

    comando2_1;

    comando2_2;

    comando2_N;

    }]

    Alguns aspectos importantes da sintaxe acima:

    • O comando se, em si, não possui “;”, apenas os comandos embutidos nele;

    • Este comando pode ter um ou mais comandos dentro dele, mas pelo menos um deve existir;

    • Os comandos dentro do comando se ou da cláusula senao, são delimitados por { e };

    • A cláusula senao, também é opcional;

    • Caso exista a cláusula senao, dentro dela também pode existir um ou mais comandos, mas pelo menos um deve existir.

    O comando se funciona da seguinte forma: caso a expressão lógica (condição) tenha como resultado um valor true, o(s) comando(s), logo abaixo, é (serão) executado(s). No caso de existir a cláusula senao, o(s) comando(s) embutido(s) nela, só será (serão) executado(s) caso a expressão lógica (condição) retorne false. Desta, forma, pode-se perceber que os comandos do primeiro grupo são excludentes em relação ao segundo, ou seja, não há uma circunstância possível em que os dois grupos sejam executados.

    Uma observação importante neste ponto, é que os comandos embutidos no comando se, podem ser quaisquer comandos da linguagem, inclusive outro comando se. Caso isto ocorra, diz-se que estes comandos se são aninhados. Ao se aninhar comandos se, deve-se redobrar a atenção em relação às cláusulas senao no que diz respeito a identificar a qual comando se pertence um determinado senao. Veja como ficaria a sintaxe:

    se ( expressão lógica ) {

    comando1_1;

    [ coamndo1_2;

    comando1_N;]

    se ( expressão lógica ) {

    comando1_1_1;

    [ coamndo1_1_2;

    comando1_1_N;]

    }

    } [ senao {

    comando2_1;

    comando2_2;

    comando2_N;

    }]

    Observe que o comando se mais interno não possui a cláusula senao.

    É comum encontrar na literatura a denominação estrutura de decisão simples para um comando se sem a cláusula senao e, estrutura de decisão composta, para o comando se seguido da cláusula senao.

    Veja o algoritmo do fim de semana:

    ... se (clima == “sol”) { viajar; } senao { ir à locadora;

    }

    ...

    Algoritmo 28

    Construa um

    algoritmo que leia

    imprima a metade do número.

    um número

    e

    se

    ele

    for

    maior do

    que 20,

    prog metade real numero, metade; imprima “Digite um numero: ”; leia numero;

    se ( numero > 20 ) { metade = numero / 2;

    imprima “Metade: ”, metade;

    }

    fimprog

    Algoritmo 29

    Construa

    um

    algoritmo que leia um

    número

    e,

    se

    for

    positivo, mostre seu

    inverso; caso contrário, imprima o valor absoluto do número.

    prog inversoabsoluto real numero, inverso, absoluto; imprima “Digite um número”; leia numero; se ( numero > 0.0 ) { inverso = 1 / numero; imprima “Inverso: ”,inverso; } senao {

    absoluto = numero * -1; imprima “Absoluto: ”,absoluto;

    }

    fimprog

    Algoritmo 30

    Construa um algoritmo que leia um número inteiro e diga (mostre a mensagem) se ele é divisível por 3.

    prog div3 int n, resto; imprima “Digite um numero inteiro: ”; leia n; resto = n % 3; se ( resto == 0 ) { imprima “O numero e múltiplo de 3!!!”; } senao { imprima “O numero NÃO e múltiplo de 3!!!”;

    }

    fimprog

     

    Algoritmo 31

    Construa um algoritmo que leia um número

    inteiro e diga

    se ele é PAR

    ou

    ÍMPAR.

     

    Algoritmo 32

    Construa um algoritmo que leia um número e diga se ele é positivo, negativo ou

    nulo.

     

    Algoritmo 33

    Construa um algoritmo que leia dois números e mostre o maior deles.

    COMANDO ESCOLHA

    O comando escolha é um comando de desvio múltiplo de fluxo, isto é, baseado na avaliação de uma expressão ordinal é escolhido um caminho de execução dentre vários possíveis. Um resultado ordinal é aquele que pertence a um conjunto onde se conhece precisamente o elemento anterior e posterior, ou seja, um valor dentro de um

    conjunto, cujos valores podem ser claramente ordenados („A‟,„B‟,„C‟,

    . . .

    ).

    O escolha equivale, logicamente, a um conjunto de comandos se aninhados, embora seja usualmente mais eficiente durante a execução.

    A sintaxe é a seguinte:

    escolha(expressão ordinal) {

    caso ordinal1:

    comando1_1;

    [comando1_2;

    comando1_N;]

    interrompe;

    caso ordinal2:

    comando2_1;

    [comando2_2;

    comando2_N;]

    interrompe;

    [padrao:

    comando_padrao1;

    [comando_padrao2;

    comando_padraoN;]]

    }

    A expressão utilizada pelo escolha deve, necessariamente, retornar um resultado ordinal. Conforme o resultado é selecionado em cada um dos casos indicados pela construção caso. Os comandos encontrados a partir do caso escolhido são executados até o final do comando escolha ou até encontrar um comando interrompe. Se o valor resultante não possuir um caso específico, serão executados os comandos colocados na cláusula padrao, que é opcional neste comando.

    Exercícios

    • 1 - Qual a utilidade da estrutura de decisão?

    • 2 Qual a diferença entre a estrutura de decisão simples e a composta?

    • 3 Quais são os comandos de decisão existentes no Português Estruturado?

    • 4 Em que situações é mais indicado o uso do comando escolha?

    Algoritmo 34

    Construa um algoritmo que leia dois números e mostre o maior deles.

    Algoritmo 35

    Construa um algoritmo que leia dois números e os mostre em ordem crescente e decrescente.

    Algoritmo 36

    Deseja-se calcular a conta de consumo de energia elétrica de um consumidor. Para isto, escreva um algoritmo que leia o código do consumidor, o preço do Kw e a quantidade de Kw consumido, e exiba o código do consumidor e o total a pagar.

    • - total a pagar = preço x quantidade

    • - total a pagar mínimo = R$ 11,20

    Algoritmo 37

    Construa um algoritmo que, dado as três notas de um aluno, determine e exiba a sua média final e o seu conceito, sabendo-se que:

    -a média final é calculada pela média aritmética das três notas; -o conceito é determinado de com base na tabela abaixo:

    Média Final

    Conceito

    >=8.0

    A

    >=5.0 e <8.0

    B

    <5.0

    C

    Algoritmo 38

    Construa um algoritmo que determine o grau de obesidade de uma pessoa, sendo fornecido o peso e a altura da pessoa. O grau de obesidade é determinado pelo índice da massa corpórea (Massa = Peso / Altura2) através da tabela abaixo:

    Massa Corpórea

    Grau de Obsidade

    <26

    Normal

    >= 26 e <30

    Obeso

    >=30

    Obeso Móbido

    Algoritmo 39

    Uma empresa deseja aumentar o deverá obedecer a seguinte tabela:

    salário de seus empregados. O reajuste

    Salário Atual (R$)

    Rejuste

    0.0 a 1000.00

    20%

    1000.01 a 5000.00

    10%

    Acima de 5000.00

    0%

    Construa um algoritmo que leia o nome e o salário atual de um empregado, e exiba o nome, o salário atual e o salário reajustado.

    Algoritmo 40

    Construa um algoritmo que calcule a conta final de um hóspede de um hotel, considerando que:

    • a) serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou

    D), o número de diárias utilizadas pelo hóspede hóspede;

    e o valor do consumo

    interno do

    • b) o valor da diária é determinado pela seguinte tabela:

    Apartamento

    Valor da Diária (R$)

    A

    150.00

    B

    100.00

    C

    75.00

    D

    50.00

    • c) o valor total das diárias é o número de dias hospedados multiplicado pelo

    valor da diária;

    • d) o subtotal

    consumo interno;

    é calculado pela soma do valor total

    das diárias e o valor do

    • e) o valor da taxa de serviço equivale a 10% do subtotal;

    • f) o total geral resulta da soma do subtotal com a taxa de serviço.

    Escreva a conta final contendo: o nome do hóspede, o tipo do apartamento, o número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo interno, o subtotal, o valor da taxa de serviço e o total geral.

    Algoritmo 41

    Deseja-se calcular o imposto de renda de um contribuinte. Para isto, escreva um algoritmo que:

    • a) leia os seguintes dados do contribuinte: CPF, nome, rendimento anual,

    imposto retido na fonte, contribuição previdenciária, despesas médicas, número de dependentes;

    • b) seja deduzido o valor de R$ 1080.00 por cada dependente;

    • c) calcule o valor total das deduções: contribuição previdenciária + despesas

    médicas + dedução dos dependentes;

    • d) calcule a base de cálculo: rendimento anual total das deduções;

    • e) calcule o imposto devido: (base de cálculo * alíquota) - parcela a deduzir,

    com base na tabela abaixo:

    Base de Cálculo

    Alíquota

    Parcela a Deduzir

    até 10800.00

    Isento

    -

    De 10800.01 até 21600.00

    15%

    1620.00

    acima de 21600.00

    25%

    3780.00

    Haverá imposto a pagar se a diferença entre o imposto devido e o imposto retido na fonte for positiva; caso contrário, haverá imposto a restituir;

    Algoritmo 42

    Construa um algoritmo que leia um número e informe se ele é divisível por 3 e

    por 7.

    Algoritmo 43

    Construa um algoritmo que leia um número inteiro de 3 casas e informe se o algarismo da casa das centenas é par ou ímpar.

    Algoritmo 44

    Construa um algoritmo que leia o ano de nascimento de uma pessoa e o ano atual e informe a idade da pessoa. Não se esqueça de verificar se o ano de nascimento é um ano válido.

    Obs.: Não se preocupe com o mês e o dia do nascimento da pessoa.

    Algoritmo 45

    Construa um algoritmo que implemente uma calculadora básica. Para isto o algoritmo deverá obter dois números do teclado e um operador (caractere que representará a operação matemática desejada [„+‟, „-‟, „*‟ e „/‟]). De posse dos dados de entrada, o algoritmo deve efetuar o calculo desejado e exibir o resultado.

    Algoritmo 46 Construa um algoritmo que leia a sigla do estado de uma pessoa e informe
    Algoritmo 46
    Construa um algoritmo que leia a sigla do estado de uma pessoa e informe se
    ela é carioca, paulista, mineiro ou outros.
    Algoritmo 47
    Construa um algoritmo que leia dois nomes e os mostre em ordem alfabética.
    Algoritmo 48
    Construa um algoritmo que leia três números e mostre o maior deles.
    Algoritmo 49
    Construa um algoritmo que leia três números e os mostre em ordem crescente
    e decrescente.
    Algoritmo 50
    Construa um algoritmo que leia cinco números e mostre o maior e o menor
    deles.
    Algoritmo 51
    Construa um
    algoritmo que leia
    as
    três notas
    de
    um
    aluno. Das
    três,
    o
    algoritmo deve calcular e mostrar, a média aritmética das duas maiores notas.
    Algoritmo 52
    Construa um algoritmo que leia uma quantia em reais e transforme para dólar.
    Algoritmo 53

    Segundo uma tabela médica, o peso ideal de uma pessoa está relacionado com a altura e o sexo. Construa um algoritmo que leia a altura e o sexo da pessoa e calcule e mostre o seu peso ideal, utilizando as seguintes fórmulas:

    para homens:

    • (72.7 * H) 58

    para mulheres:

    • (62.1 * H) 44.7

    Algoritmo 54

    Construa um algoritmo que leia um número inteiro entre 1 e 7 e mostre o dia da semana correspondente.

    Exemplos:

    Entrada: 1

    Saída: Domingo

    Entrada: 4

    Saída: Quarta

    Algoritmo 55

    Construa um algoritmo que leia um número inteiro entre 1 e 12 e mostre o mês correspondente.

    Algoritmo 56

    Construa um algoritmo que leia o tipo de carro e a distância, em Km, que se deseja percorrer. O programa deverá, baseado na tabela a seguir, calcular o consumo de combustível para o percurso.

    Tipo de carro

    Consumo

    A

    • 13.5 Km/l

    B

    • 12.0 Km/l

    C

    • 10.5 Km/l

    D

    • 9.0 Km/l

    E

    • 7.5 Km/l

    Algoritmo 57

    Construa um algoritmo que leia uma data no formato ddmmaaaa e informe se a data é válida ou não.

    Algoritmo 58

    Construa um algoritmo que leia uma letra do teclado e informe: se é uma vogal maiúscula; se é uma vogal minúscula; ou se é uma consoante.

    Algoritmo 59

    Construa um

    algoritmo que leia

    o

    ano

    de nascimento

    de

    um

    classifique de acordo com a tabela a seguir:

    nadador

    e

    o

    Faixa de Idade

    Categoria

    0

    4 anos

    Não aceito

    5

    7 anos

    Infantil A

    8 10 anos

    Infantil B

    11

    13 anos

    Juvenil A

    14

    17 anos

    Juvenil B

    Maiores de 17 anos

    Sênior

    Algoritmo 60 Desafio 02

    Construa um algoritmo que calcule a média de idade dos moradores de uma cidade, ou seja, leia a idade de cada pessoa da cidade e calcule a média. O algoritmo deve obter do usuário, via teclado (comando leia), o número de habitantes da cidade.

    ESTRUTURAS DE REPETIÇÃO

    No ambiente computacional, consideramos repetição um comando ou um trecho de código que deve se repetido por algumas vezes. A repetição é uma das tarefas mais comuns da programação utilizada para efetuarmos contagens, para obtenção de dados a serem manipulados pelo programa. Em Português Estruturado dispomos do comando para, cuja sintaxe é dada a seguir:

    para(inicialização; condição de execução; incr/decremento) { Lista de comandos }

    O comando para possui três campos ou seções, todas opcionais, delimitados por um par de parênteses que controlam a repetição de um comando individual ou de um bloco de comandos. Cada campo é separado um do outro por um ponto e vírgula. O primeiro campo é usado para dar valor inicial a uma variável de controle (um contador). O segundo campo é uma expressão lógica que determina a execução ou não do(s) comando(s) associado(s) ao para. O terceiro campo realiza uma operação sobre a variável de controle, geralmente incrementando ou decrementando tal variável.

    Algoritmo 61

    Construa um algoritmo que conte de 1 à 5.

    prog contador01 imprima “1”; imprima “2”; imprima “3”; imprima “4”; imprima “5”; fimprog

    Algoritmo 62

    Construa um algoritmo que conte de 1 à 5000.

    prog contador01 imprima “1”; . . . imprima “5000”; fimprog

    Para que o Algoritmo 62 funcione, o computador deveria entender o significado da reticência, mas como isso não ocorre, devemos repetir a digitação do comando imprima por 5000 vezes. Felizmente temos uma alternativa a este exaustivo trabalho, o comando para apresentado anteriormente se adapta perfeitamente a esta situação. Veja como ficaria a solução do Algoritmo 62:

    Algoritmo 63

    prog contador02 int i; para (i=1; i<=5000; i=i+1) { imprima i;

    }

    fimprog

    Outro

    comando bastante utilizado para

    construir laços

    de

    repetição é

    o

    comando enquanto, cuja sintaxe é dada a seguir:

    enquanto (expressão lógica) { lista de comandos }

    O comando enquanto, assim como no comando para, avalia o resultado da expressão lógica antes de executar o(s) comando(s) associado(s), assim, caso a condição seja inicialmente falsa, tal(tais) comando(s) não será(serão) executado(s). Um problema típico relacionado à aos comandos de repetição é o seguinte: se a condição nunca se tornar falsa o laço será repetido ininterruptamente. Esta situação pode ocorrer tanto no comando para como no comando enquanto, porém, é muito mais comum no comando enquanto devido sua estrutura menos rígida. No para as três seções em que se divide o controle do loop, impõem uma maior formalidade à construção do comando, o que inconscientemente, nos induz a sermos mais cautelosos. Veja o exemplo:

    Algoritmo 64

    prog contador03 int i;

    i=1;

    enquanto (i<=5000) { imprima i;

    }

    fimprog

    i=i+1;

    Os algoritmos 63 e 64 executam exatamente a mesma tarefa, porém, observe que é mais fácil o programador se distrair e esquecer-se do comando “i=1;” ou do comando “i=i+1;”. Isto exposto, fica a critério de cada um a opção por adotar um comando ou o outro.

    Exercícios

    Algoritmo 65

    Tente resolver o Algoritmo 60 Desafio 02, utilizando algum dos comandos de repetição.

    Algoritmo 66

    Construa um algoritmo que obtenha cinco números e mostre o quadrado de cada um dos números.

    Algoritmo 67

    Construa um algoritmo que imprima todos os números inteiros entre 1 e 100.

    Algoritmo 68

    Construa um algoritmo que imprima todos os números inteiros entre 100 e 1.

    Algoritmo 69

    Construa um algoritmo que imprima os 200 primeiros números pares.

    Algoritmo 70

    Construa um algoritmo que mostre os múltiplos de 5 no intervalo entre 1 e 500.

    Algoritmo 71

    Construa um algoritmo que imprima os quadrados dos inteiros entre 1 e 50.

     

    Algoritmo 72

    Construa um algoritmo que imprima os números pares no intervalo entre 400 e

    600.

     

    Algoritmo 73

    Construa um algoritmo que imprima a soma dos inteiros entre 1 e 100 .

     

    Algoritmo 74

    Construa um algoritmo que obtenha o nome, a idade e o sexo de 29 pessoas e imprima o nome se a pessoa for do sexo masculino e tiver mais de 21 anos.

     

    Algoritmo 75

    Construa um algoritmo que leia um número N, some todos os números inteiros de 1 a N, e mostre o resultado obtido.

     

    Algoritmo 76

    Construa um algoritmo que leia N e uma lista de N números e mostre a soma de todos os números lidos.

     

    Algoritmo 77

    Construa um algoritmo

    que

    leia

    um

    conjunto

    de

    100

    números

    inteiros

    positivos e determine o maior deles.

     
     

    Algoritmo 78

    Construa um algoritmo

    que

    leia

    um

    conjunto

    de

    100

    números

    inteiros

    (positivos ou negativos) e determine o maior deles.

     
     

    Algoritmo 79

    Construa um algoritmo que leia um conjunto de números inteiros (positivos ou negativos) e determine o maior e o menor deles. A leitura do valor 0 (zero) indica o fim da entrada dos dados.

    Algoritmo 80

    Construa um algoritmo que leia um conjunto de números inteiros positivos terminado pelo número 0 (zero). Ao final, o programa deverá mostrar a média aritmética de todos os números lidos.

    Algoritmo 81

    Construa um algoritmo que leia dois números inteiros e mostre o produto entre eles. Calcule o produto através de somas sucessivas.

    Algoritmo 82

    Construa um algoritmo

    que

    calcule o

    fatorial

    de

    um

    número inteiro lido,

    sabendo-se que: N! = 1 x 2 x 3 x

    x N-1 x N;

    0! = 1.

    Algoritmo 83

    Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele próprio. Escreva um algoritmo que leia um número inteiro e determine se ele é ou não primo.

    Algoritmo 84

    Construa um algoritmo que leia dois números inteiros (X e Y) e mostre todos os primos entre X e Y.

    Algoritmo 85

    Construa um algoritmo que leia um número N, calcule e mostre os N primeiros

    termos da sequência de Fibonacci. A sequência de Fibonacci é formada inicialmente pelos valores 0 e 1 e, a partir de então, cada novo elemento desta sequência é obtido pela soma dos dois elementos imediatamente anteriores.

    Exemplo: (0,1,1,2,3,5,8,13,

    ...

    )

    Algoritmo 86

    A série de RICCI difere da série de Fibonacci pelo fato de que os dois primeiros termos são fornecidos pelo usuário. Os demais termos são gerados da mesma forma que na série de Fibonacci. Construa um algoritmo que leia um número inteiro N, calcule e mostre os N primeiros termos da série de RICCI.

    Algoritmo 87

    Construa um algoritmo que leia o número de alunos de uma turma. Baseado neste número, obtenha a nota na AV1 de cada aluno e mostre, ao final, a média da turma.

    Algoritmo 88

    Construa um algoritmo que leia 200 números inteiros e imprima quantos são pares e quantos são ímpares.

    Algoritmo 89

    Construa um algoritmo que leia 200 números inteiros e imprima quantos são pares e quantos são ímpares.

    Algoritmo 90 Desafio 03

    Construa um algoritmo que leia 100 números inteiros e, após a leitura do último número, os mostre na ordem inversa da que foram lidos, ou seja, do último até o primeiro.

    VETOR

    Em muitas aplicações os tipos básicos de dados não são suficientes para suprir as necessidades da estrutura de dados do problema. Já vimos em algoritmos passados a necessidade de lermos diversos valores, para isso usamos uma única variável, o que atendeu perfeitamente a demanda oriunda do problema. Porém, caso seja necessário recuperar um valor lido anteriormente, não será possível, pois a cada nova leitura o conteúdo da variável é sobrescrito.

    A única maneira de guardarmos todos os valores lidos (individualmente) é declarando uma variável para cada valor. Já pensou, declarar 100, 200 ou até mil

    variáveis? Pois existe uma maneira muito simples de se fazer isso, basta criarmos um tipo de dado chamado VETOR.

    O vetor é uma estrutura de dados homogênea indexada, ou seja, devemos entender um vetor como sendo um conjunto de variáveis do mesmo tipo, onde cada

    uma dessas “variáveis” é acessada através de um índice. É importante ressaltar que os

    índices de um vetor sempre variam de 0 (zero) à N-1, onde N é o tamanho do vetor. A

    declaração de um vetor deve respeitar a a seguinte sintaxe:

    tipo_dos_dados nome_do_vetor[Quantidade_de_elementos];

    Algoritmo 91

    prog vetor01 int i, vet[5];

    vet[0]=3;

    vet[1]=5;

    vet[2]=2;

    vet[3]=6;

    vet[4]=8;

    imprima “A terceira posição do vetor guarda o nº ”, vet[2]; fimprog

    Assim sendo, o Algoritmo 91 exibirá como resultado a seguinte mensagem:

    A terceira posição do vetor guarda o nº 2

    Algoritmo 92

    prog vetor02 int i, vet[5]; para(i=0;i<5;i++) { imprima “Digite um número inteiro: ” leia vet[i];

    } imprima “A terceira posição do vetor guarda o nº ”, vet[2]; fimprog

    Para o Algoritmo 92, vamos imaginar que o usuário tenha digitado os números

    3,

    5,

    2,

    6

    e

    8. Desta

    forma

    o vetor

    vet deverá ter a seguinte configuração em

    memória:

     
     

    Índice

     
    • 0 2

    1

       
    • 3 4

     

    Valor

     

    5

    • 3 2

       
    • 6 8

    Assim sendo, o Algoritmo 92 exibirá como resultado a seguinte mensagem:

    A terceira posição do vetor guarda o nº 2

    Exercícios

    Algoritmo 93

    Tente resolver o Algoritmo 90 Desafio 03, utilizando um vetor para armazenar os números.

    Algoritmo 94

    Construa um algoritmo que declare três vetores, A, B e C, de inteiros com 10 elementos cada um. O algoritmo deverá preencher os dois primeiros vetores com dados lidos à partir do teclado. O terceiro vetor deverá ser preenchido à partir da soma, dos elementos posicionalmente correspondentes, dos dois primeiros vetores.

    Algoritmo 95

    Construa um algoritmo que armazene 15 números inteiros num vetor e imprima uma listagem numerada contendo o número e uma mensagem informando se ele é par ou ímpar.

    Algoritmo 96

    Construa um algoritmo que

    armazene o nome

    e

    o

    salário

    de

    20

    pessoas,

    aplique um reajuste de 20% para todas as pessoas e gere uma listagem contendo os nomes e os novos salários.

    Algoritmo 97

    Construa um algoritmo que armazene o preço de compra e o preço de venda de 100 mercadorias e imprima quantas mercadorias proporcionam:

    lucro < 10%

    lucro entre 10% e 20%

    lucro > 20%

    Algoritmo 98

    Um professor tem uma turma de 80 alunos e deseja calcular e imprimir a nota de cada aluno seguida da média da turma.

    Algoritmo 99

    Construa um algoritmo que armazene código, nome, quantidade, valor de compra e valor de venda de 100 produtos e gere uma listagem de todos os produtos ou somente de um, quando se digitar o código.

    Algoritmo 100

    Construa um algoritmo que armazene dois conjuntos de números inteiros,

    tendo um

    10

    e

    o

    outro 20 elementos

    e apresente os elementos comuns aos dois

    conjuntos.

    Algoritmo 101

    Construa um algoritmo que armazene dois conjuntos de números inteiros,

    tendo um 10 e o outro 20 elementos e apresente os elementos comuns aos dois conjuntos. Podem existir números repetidos nos conjuntos de dados, porém, a saída não deverá mostrar repetições.

    Algoritmo 102

    Construa um algoritmo que armazene um vetor vet01 de 10 números inteiros e positivos e gere um vetor vet02 contendo os quadrados dos respectivos componentes de vet01.

    Algoritmo 103

    Construa um algoritmo que armazene 100 números inteiros e positivos, que imprima o maior e menor dos números e imprima o percentual de números pares e ímpares.

    Algoritmo 104

    Num torneio de futsal inscreveram-se 12 times. Construa um algoritmo que armazene os nomes dos times e imprima a tabela de jogos.

    Algoritmo 105

    Construa um algoritmo que armazene dois conjuntos de 25 números inteiros, preencha um terceiro vetor intercalando os elementos dos dois primeiros e mostre o terceiro vetor.

    Algoritmo 106

    Construa um algoritmo que armazene números inteiros e positivos. A entrada de dados deve parar ao ser digitado o número 0 (zero) ou ser atingido o limite do vetor, que é de 100 posições. O algoritmo deverá imprimir a quantidade de números iguais ao último número lido.

    Algoritmo 107

    Construa um algoritmo que armazene um conjunto de 100 números reais e imprima a quantidade de números maiores que a média do vetor.

    Algoritmo 108

    No vestibular de uma universidade, no curso de informática, inscreveram-se

    • 1200 pessoas. Construa um algoritmo que armazene o gabarito da prova que tinha

      • 100 questões, sendo que cada questão valia 1 ponto. O algoritmo deverá ainda obter o

    número de inscrição, o nome e as respostas de cada candidato. Ao final, deve-se

    imprimir o número de inscrição, o nome e a nota de cada candidato.

    Algoritmo 109

    Construa um algoritmo que armazene nome, endereço e telefone de 50 pessoas e mostre, a partir de um nome digitado, as informações referentes ao nome.

    Algoritmo 110 Desafio 04

    No vestibular de uma universidade, no curso de informática, inscreveram-se

    • 1200 pessoas. Construa um algoritmo que armazene o gabarito da prova que tinha

      • 100 questões, sendo que cada questão valia 1 ponto. O algoritmo deverá ainda obter o

    número de inscrição, o nome e as respostas de cada candidato. Ao final, deve-se imprimir o número de inscrição, o nome, as respostas e a nota de cada candidato.

    MATRIZ

    Os vetores são arranjos homogêneos unidimensionais, no entanto, podemos encontrar diversos problemas que envolvem na sua solução arranjos homogêneos multi-dimensionais, particularmente de duas ou três dimensões.

    tipo_dos_dados nome_da_matriz[Qtd,

    ...

    ,Qtd];

    Exemplo:

    int m[5,10];

    Este exemplo cria uma matriz, ou vetor multi-dimensional, com cinco linhas e dez colunas. Na memória esta matriz terá a seguinte configuração.

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0
    1
    2
    3
    4

    Para que se possa acessar um elemento da matriz, será necessário um número de índices igual à dimensão da matriz, ou seja, numa matriz bi-dimensional serão necessários 2 índices, um para referenciar as linhas e outro para as colunas.

    Na matriz dada como exemplo, para referenciarmos o elemento em destaque, teremos que utilizar as coordenadas linha 2 e coluna 3, dessa forma, caso queiramos ler um determinado número do teclado e guardá-lo nesta posição da matriz, deveremos utilizar o comando a seguir:

    leia m[2,3];

    Algoritmo 111

    Construa um algoritmo que crie e preencha, teclado, uma matriz 7x6.

    com números inteiros lidos do

    prog matriz01 int i,j, m[7,6]; para(i=0;i<7;i++) { para(j=0;j<6;j++) { imprima “Digite um número inteiro: ” leia m[i,j];

    }

    }

    fimprog

    Exercícios

    Algoritmo 112

    Construa um algoritmo que crie duas matrizes 2x3, A e B, de inteiros e as preencha com dados lidos do teclado. O algoritmo deverá preencher e exibir a matriz C, também 2x3, com a soma da matriz A com a matriz B.

    Algoritmo 113

    Construa um

    algoritmo que leia

    uma

    inteiros, calcule e imprima:

    matriz

    de ordem

    3x5

    de

    elementos

    • a) o maior elemento da matriz;

    • b) a soma dos elementos da matriz; e

    • c) a média dos elementos da matriz.

    Algoritmo 114

    Construa um algoritmo que leia uma matriz quadrada de ordem 5 de inteiros e exiba os elementos da diagonal principal.

    Algoritmo 115

    Tente resolver o Algoritmo matrizes.

    110 Desafio 04, utilizando o conceito de

    Algoritmo 116

    A tabela abaixo demonstra a quantidade de vendas dos fabricantes de veículos durante o período de 1993 a 1998, em mil unidades.

    a) o maior elemento da matriz; b) a soma dos elementos da matriz; e c) a

    Construa um algoritmo que:

    • a) leia os dados da tabela;

    • b) determine e exiba o fabricante que mais vendeu em 1996;

    • c) determine e exiba o ano de maior volume geral de vendas;

    • d) determine e exiba a média anual de vendas de cada fabricante no período.

    Algoritmo 117

    Construa um algoritmo que leia uma matriz quadrada de ordem 10 e, a pós a leitura dos dados, mostre os números ímpares constantes na matriz.

    Algoritmo 118

    Construa um algoritmo que leia uma matriz 8x10 e a preencha com números reais. Após o preenchimento da matriz o algoritmo deverá somar os elementos de cada linha armazenando tais resultados num vetor. Ao final, deve-se mostrar o vetor resultante.

    Algoritmo 119

    Construa

    um

    algoritmo que leia uma

    matriz

    5x3

    e

    gere a transposta desta

    matriz. Obs.: Uma matriz transposta é gerada trocando-se as linhas pelas colunas.

    Algoritmo 120

    Construa um algoritmo que leia uma matriz de ordem 10 e a imprima. A seguir,

    troque:

    • a) a segunda linha pela oitava linha;

    • b) a quarta coluna pela décima coluna; e

    • c) a diagonal principal pela diagonal secundária.

    Imprima a matriz resultante.

    Algoritmo 121

    Construa um algoritmo que armazene as alturas dos atletas de cinco delegações que participarão dos jogos de verão. Cada delegação tem 10 atletas. O algoritmo deverá imprimir a maior altura de cada delegação e a maior entre todos os atletas.

    Algoritmo 122

    A viação XPTO tem na rodoviária Novo Rio uma tabela contendo os horários de partidas dos ônibus para Nova Friburgo nos sete dias da semana. Construa um algoritmo que possa armazenar estes horários e que dê duas opções de consulta ao usuário:

    por dia da semana

    o usuário deverá

    digitar

    o

    dia

    da semana

    [1

    7]

    e

    o

    algoritmo deverá mostrar todos os horários daquele dia;

     

    por dia da semana entre os horários x e y o usuário deverá entrar com os três

    argumentos e o algoritmo deverá exibir os condições.

    horários que se encaixem nas

    Algoritmo 123

    Construa um algoritmo que leia uma matriz 5x5 de inteiros e apresente uma determinada linha da matriz, solicitada via teclado.

    Algoritmo 124

    Construa um algoritmo que leia uma matriz 12x4 com os valores das vendas de uma loja. Cada linha representará um mês do ano e cada coluna representará uma semana no mês. O algoritmo deverá calcular e exibir os seguintes dados:

    • a) total vendido em cada mês;

    • b) total vendido em cada semana durante todo o ano;

    • c) total vendido em cada semana de um determinado mês digitado pelo

    usuários;

    • d) total vendido no ano;

    MIGRAÇÃO PARA LINGUAGEM C

    **********[ Reescrever os Algoritmos em Linguagem C ]**********

    FUNÇÕES

     

    Uma

    Função

    é

    um

    trecho de programa independente

    com

    um

    objetivo

    determinado, simplificando o entendimento do programa e proporcionando-o menores chances de erro e de complexidade.

    A Função, na programação imperativa, é a melhor ferramenta para particionamento do programa. Mas qual a finalidade de se particionar um programa? Um programa ao ser particionado passa a ser visto, obrigatoriamente, naturalmente e intuitivamente, como um conjunto de partes, onde cada uma delas pode ser pensada e implementada separadamente.

    Serve para se reduzir a complexidade do programa?

    Sim, pois quando se esta pensando numa parte, o programador abstrai a existência das outras. É claro que a abstração não é total, pois as partes deverão ser

    capazes de interagir.

    Podemos dizer que um programa desenvolvido de forma particionada trás benefícios quanto à confiabilidade de sua correta execução?

    Sim, uma vez concluída, testada

    e aprovada, uma parte poderá

    ser

    usada futuramente de maneira confiável e sem a necessidade de ser reescrita.

    Ganha-se alguma performance no desenvolvimento do programa?

    Em programas menores, os ganhos são menores, porém, em sistemas maiores a reusabilidade das Funções é de fundamental importância para o sucesso do produto final.

    Podemos resumir as vantagens do emprego de Funções em:

    1- Dividir e estruturar um programa em partes logicamente coerentes; 2- Facilidade em testar trechos em separados; 3- Melhor legibilidade do programa; 4- Evitar redundância de programação; 5- Possibilidade de criar bibliotecas de Funções.

    Quando uma Função é chamada, o fluxo de controle de execução é desviado para a Função. Ao terminar a execução dos comandos da Função, o fluxo retorna ao comando seguinte àquele onde ela foi ativada.

    A seguir, a estrutura de uma Função:

    <tipo_de_retorno> nome_da_função(parâmetros) {

    Declaração das variáveis

    Comandos que formam o corpo da Função

    Retorno de valores

    }

    Algoritmo 125

    Construa um programa em

    C

    que

    receba três números inteiros e

    mostre o

    dobro de cada um deles. Use uma Função para o cálculo.

    #include <conio.h>

    int dobro(int num) { int r;

    r=num*2;

    return r;

    }

    void main(void) { int i, n, resultado; for(i=0;i<3;i++) { printf("Entre com um n£mero inteiro: ");

    scanf("%d",&n); resultado=dobro(n); printf("O dobro de %d eh %d.\n\n",n,resultado);

    }

    getch();

    }

    Algoritmo 126

    Construa um programa em C que receba três notas de um aluno e calcule a sua média. Use uma Função para o cálculo.

    Algoritmo 127

    Construa um programa em

    C

    que

    receba três números inteiros e

    mostre o

    maior deles. Utilize um Função para encontrar o maior dos números.

    Algoritmo 128

    Construa um programa em C que receba um número inteiro e mostre o seu fatorial. Utilize uma Função para realizar o cálculo.

    Algoritmo 129

    Construa um programa em C que receba um caracter via teclado e informe se ele é uma consoante ou uma vogal. Utilize uma Função para descobrir se o caracter é consoante ou vogal. A Função não deverá emitir mensagens ao monitor.

    Algoritmo 130

    Construa um programa em C que receba um número inteiro na base 10 e o represente na base 2 e na base 8. Utilize uma Função para cada base.

    Algoritmo 131

    Construa um programa em C que implemente uma Função que receba um vetor de inteiros e seu tamanho e retorne o menor dos elementos do vetor.

    Algoritmo 132

    Construa um programa em C que implemente uma Função que receba um vetor de 10 posições e um número e verifique se tal número existe no vetor.

    Algoritmo 133

    Construa um programa em C que implemente uma Função que receba um vetor de 20 caracteres e um caracter e retorne a quantidade de vezes que o caracter aparece no vetor.

    Algoritmo 134

    Construa um programa em C que implemente uma Função que receba um vetor com 10 inteiros e informe o vetor esta em ordem crescente.

    Algoritmo 135

    Construa um programa

    em

    C

    que

    implemente uma Função que

    receba um

    número inteiro e mostre a tabuada deste número.

    ESCOPO DAS VARIÁVEIS

    Entende-se

    por

    escopo

    de

    variáveis

    a

    visibilidade/acessibilidade

    que

    determinada variável terá dependendo de possibilidades:

    onde

    ela for declarada. Existem

    três

    Variáveis Locais;

    Variáveis Globais; e

    Variáveis Formais.

    LOCAIS

    As variáveis locais possuem visibilidade apenas dentro do bloco onde foram declaradas, ou seja, são de uso exclusivo do bloco em questão. Por exemplo, uma variável declarada dentro da função main(), não é acessível dentro de outras funções.

    Algoritmo 136

    //**************[ Exemplo Correto ]**************

    int dobro(int x) { return x*2; }

    void main(void) { int i;

    printf(“Entre com um inteiro: ”); scanf(“%d”,&i);

    printf(“O dobro de %d eh %d\n”,i,dobro(i)); getch();

    }

    Algoritmo 137

    //**************[ Exemplo Errado ]************** int dobro(void) { return i*2; // Erro de acesso à variável i // i é reconhecida apenas na função main()

    }

    void main(void) { int i; printf(“Entre com um inteiro: ”); scanf(“%d”,&i); printf(“O dobro de %d eh %d\n”,i,dobro()); getch();

    }

    FORMAIS

    As variáveis formais são os parâmetros declarados nas funções. Alguns autores

    e a própria linguagem C, tratam estas variáveis como locais, isto porque a única

    diferença entre estas e as locais, é o local onde elas são declaradas

    ...

    na linha em que

    se cria uma função, quanto ao funcionamento e a acessibilidade, as locais e formais

    funcionam da mesma forma.

    int dobro(int x) { // x é uma variável formal. return x*2; }

    GLOBAIS

    As variáveis globais são declaradas fora de qualquer bloco/função. Elas são acessíveis, tanto para leitura ou manipulação, por qualquer bloco ou função do programa.

    Algoritmo 138

    //**************[ Exemplo Correto ]**************

    int i;

    int dobro(void) { return i*2; }

    void main(void) { printf(“Entre com um inteiro: ”); scanf(“%d”,&i); printf(“O dobro de %d eh %d\n”,i,dobro()); getch();

    }

    Observe que a variável i foi declarada antes de qualquer função e isso a torna global e consequentemente acessível em qualquer lugar. Note que tanto a função dobro() quanto a função main() acessam normalmente a variável i.

    Num primeiro instante esta versatilidade pode parecer atrativa e simplificadora. Porém, algumas confusões podem ocorrer. Veja que a função dobro() só é capaz de efetuar o cálculo sobre esta variável, caso se necessário dobrar o valor de outra variável, a função dobro() não poderá ser utilizada. Outra confusão pode ser gerada, normalmente em programas maiores, quanto a duplicidade de nomes de variáveis. Um terceiro problema ocorre em contraste à principal vantagem das variáveis locais/formais que é a liberação do espaço de memória ocupado por uma variável local quando o bloco em que ela foi definida não esta em execução. As variáveis globais existem durante todo o tempo de execução do programa, mesmo que não sejam utilizadas.

    Algoritmo 139

    Construa um programa em C que armazene um vetor de caracter de vinte posições. Implemente uma função que receba um caracter e que percorra o vetor trocando a ocorrência deste caracter por um *. A função deverá retornar a quantidade de substituições efetuadas.

    Algoritmo 140

    Construa um programa em C que armazene um vetor de caracter de vinte posições. Implemente uma função que receba dois caracteres e que percorra o vetor trocando a ocorrência do primeiro caracter pelo segundo.

    Algoritmo 140 Desafio 05

    Construa um programa em C que armazene um vetor de 20 inteiros. Após o preenchimento do vetor, deve-se chamar a função Ordena(), que deverá colocar vetor em ordem crescente.