Upload
bruno-brolezi
View
678
Download
0
Embed Size (px)
Citation preview
Algoritmos e Programação
Algoritmos e Programação
Conceitos de Programação
Programa-fonte e Programa-objeto
Programa-fonte é o “texto” criado utilizando uma linguagem pré-definida, também é conhecido como código-fonte. Para que os computadores processem estes códigos é necessário que eles sejam traduzidos para comandos de baixo nível (linguagem de máquina). Para isto existem os compiladores que geram o programa-objeto, ou seja, o código-objeto. Mas mesmo depois disso o computador ainda não é capaz de executar o programa, pois ainda é necessário fazer o que chamamos de “linkagem”, que é a ligação entre bibliotecas e/ou outros códigos-objeto com o nosso código-objeto.
Montador (Assembler): traduz um programa-fonte em linguagem Assembly, gerando um programa-objeto.
Compilador: analisa, lê e traduz um programa-fonte, menos os em Assembly, gerando um programa-objeto, que depois de transformado pelo “Linker” (Link Editor) poderá ser executado pelo computador.
Interpretador: é parecido com o compilador, só que não gera um programa-objeto. Nele o programa é traduzido e executado logo após. é um processo mais demorado, pois interpreta uma linha e executa e assim sucessivamente.
Definições Básicas
As pessoas tendem a acreditar que o raciocínio lógico é fácil de usar, mas se forem solicitadas a executarem alguma tarefa utilizando o raciocínio lógico se embaraçarão. Para podemos pensar de maneira lógica é necessário o uso de fatores como paciência, calma, experiência, criatividade, entre outros.Existem muitas definições para o raciocínio lógico, uns dizem que é um conjunto de estudos que visam determinar os processos intelectuais que são as condições gerais do conhecimento verdadeiro, outros já dizem que é a seqüência coerente,
1
código-fonte
código-objeto
programa
Compilador
Link Editor
Algoritmos e Programação
regular e necessária de acontecimentos, de coisas ou fatos, ou até mesmo, que é a maneira do raciocínio particular que cabe a um indivíduo ou a um grupo. Mas podemos resumir como sendo: uma ciência que estuda as leis e critérios de validade que regem o pensamento e a demonstração, ou seja, ciência dos princípios formais do raciocínio. Na computação ele também é como algoritmo e pode ser definido como sendo uma seqüência de instruções ou operações básicas, cuja execução, em tempo finito, resolve um problema computacional. A seqüência em que são dispostas as instruções depende de como foi definida a estratégia para a solução do problema.
Técnica Top-Down
Nesta técnica são definidas genericamente as etapas de solução do problema e em seguida, cada etapa é detalhada, obtendo-se desta forma um refinamento da solução do problema até chegar a uma seqüência de operações básicas e definição dos tipos de dados.
iníciocalcula médiaverifica situaçãoimprime situação
fim
Descrição de um Algoritmo
Eles podem ser descritos através de pseudo-códigos, fluxogramas ou diagramas de blocos.
Fluxograma: tem como finalidade descrever o fluxo, especificando os suportes usados para os dados e as informações.
Exemplo:
Diagrama de Blocos: é utilizado para descrever o método e a seqüência do processo dos planos em um computador.
Exemplo:
2
“Aprovado”
Início
Média = (Nota1+Nota2)/2
Média>= 7 “Aprovado”Fim
Vai para Exame
Sim
Não
Nota Exame
Resultado final = (Média+Nota Exame)/2
Resultado final >= 5
Sim
“Reprovado”
Não
Fim
Algoritmos e Programação
Algoritmo:
Exemplo:
algoritmo Calcula médiainício
real media, nota1, nota2, exame, final;media (nota1 + nota2)/2;se (media >= 7)
então “Aprovado”;senão “Vai para Exame”;
fim seleia exame;
3
Algoritmos e Programação
final (media + exame)/2;se (final >= 5)
então “Aprovado”;senão “Reprovado”;
fim sefim
Estruturas Lógicas de um Algoritmo
São três as estruturas: seqüencial, repetitiva e seletiva, isto é, um algoritmo pode ser constituído por qualquer combinação dessas três estruturas.
Implementação
É a codificação de um algoritmo em uma linguagem de programação qualquer.
Tipos de Programação
Programação Linear: os programas são executados linha a linha, começando na 1º linha do código, seguindo o fluxo do programa.
Programação Estruturada: o programa é dividido em módulos ou sub-rotinas e utiliza as estruturas lógicas
Programação Visual (Orientada a Eventos): o programa é dividido em retalhos (procedimentos ou funções) que respondem a um evento externo iniciado pelo usuário sobre um objeto. Exemplo: clique do mouse sobre um botão de comando.
Passos para a construção de um Algoritmo
1. Identificar o problema (objetivo) lendo atentamente o enunciado.2. Retirar do enunciado as “entradas de dados”, ou seja, identificar os dados que
devem ser fornecidos.3. Retirar do enunciado as “saídas de dados” que devem ser geradas como
resultado da solução.4. Determinar o que deve ser feito para transformar as “entradas” nas “saídas”
desejadas (processamento). Neste ponto deve ser determinada a seqüência de ações que levem a solução do problema.
5. Construir o algoritmo, utilizando uma forma de representação.6. Testar a solução. Execução de todas as ações do algoritmo, seguindo o fluxo
estabelecido para verificar se ele está realmente gerando os resultados esperados ou detectar possíveis erros em seu desenvolvimento.
Exemplo: Construir um algoritmo para somar 2 números.
Entradas: (O que é preciso?)Primeiro número;
4
Algoritmos e Programação
Segundo número.
Processamento: (Como chegar ao que quero?)somar os números.
Saídas: (O que quero?)números somados.
Exercício A
1. Construir um algoritmo para calcular a média semestral antes do exame.
Resposta:Entradas:nota1nota2
Processamento:somar as notas e dividir por 2
Saídas:média semestral antes do exame
Estrutura Básica de um Algoritmo
algoritmo <nome>início //início do algoritmo
variáveis //declaração de variáveisconstantes //declaração de constantes{inicialização de variáveis de controle ou que receberão cálculos}{solicitação de entrada de dados}{entrada de dados}{processamento/cálculos}{saída de informações e resultados}
fim //final do algoritmo
Tipos de Dados Abstratos
Define qual o tipo de informação entrará ou sairá do programa, por exemplo se será um número inteiro, uma palavra ou cadeia de caracteres etc.Os tipos de dados são definidos sem a preocupação de como serão representados computacionalmente, isto para que não se prendam a uma única linguagem de programação.
Tipos de Dados: Os tipos de dados em uma linguagem de programação podem não representar exatamente os tipos de dados abstratos.
Tipos de Dados AbstratosInteiro Números inteiros com ou sem sinal
Exemplos: -41, 0, 52Real Números racionais com ou sem sinal
Exemplos: 13.5, -4.5, 6.023E23, -1.23E-2Booleano Valores lógicos
5
Algoritmos e Programação
True (verdadeiro) e False (falso)Representados por T ou 1 e F ou 0 respectivamente
Caracter(literal)
Caracteres alfanuméricos (letras maiúsculas/minúsculas, algarismos, sinais de pontuação e símbolos especiais)Exemplo: ‘A’, ‘2’, ‘.’, ‘<’
Tipos de Dados Básicos em Linguagem C++Tipo Bit Bytes Escala
char 8 1 -128 a 127int 16 2 -32768 a 32768float 32 4 3.4E-38 a 3.4E+38double 64 8 1.7E-308 a 1.7E+308void 0 0 sem valor
Modificadoreslong ou long int (4 bytes)unsigned char (0 a 255)unsigned int (0 a 65535)short (2 bytes)
Exercício B
Indique que tipo de dados você usaria para representar as informações abaixo:a) uma nota;b) uma idade;c) um nome;d) uma letra;e) um telefone;f) um CPF;g) uma data;h) um ano;i) um horário.
Constante
É um valor fixo, ou seja, que não se altera durante a execução de um programa, ela pode ser um número, um valor lógico ou uma cadeia de caracteres, de acordo com o tipo ela pode ser classificada como numérica, lógica ou literal (caracter).
Constante numérica: é um número com ou sem parte fracionária, negativo ou positivo, podendo haver parte exponencial.
Exemplos: 25, 3.14, 7.8x103, -15.
Constante lógica: é um valor lógico, podendo ser somente falso ou verdadeiro.
Constante literal: é uma seqüência qualquer de caracteres (letras, dígitos ou símbolos especiais), elas sempre aparecem entre aspas “ “.
6
Algoritmos e Programação
Exemplos: “José da Silva”, “12345”, “*A!B?-”.
Exercício C
Identificar o tipo de cada uma das constantes abaixo:j) 21;k) “Bola”;l) “Verdadeiro”;m) 0.21x102;n) falso;o) “1520”;p) verdadeiro;q) “-2.5x103”;r) “??Onde??”;s) 41025.44;
Variáveis
Uma variável corresponde a uma posição de memória, cujo conteúdo pode mudar ao longo da execução do programa. Toda variável tem um nome também conhecido como identificador. Por exemplo ax2 + bx + c = 0, o conteúdo dos identificadores a, b e c podem mudar (variar), por isso são considerados variáveis.O nome de uma variável pode ser composto de um ou mais caracteres, mas tem que seguir as regras abaixo:
1. Sempre começar com uma letra;2. Pode ser formado por letras e números;3. Pode utilizar o underline “_”;4. Não pode conter espaços;5. Não pode utilizar cedilha ou qualquer acentuação;6. Não pode ser igual as palavras reservadas;
Exemplos:
Identificadores Permitidos Identificadores Não PermitidosA X5 5B X-Y
Nota A32B E(13) Nota[1]Matricula F1G3H5 A:B B*D
Declaração de Variáveis
As variáveis só podem armazenar valores de um tipo, sendo também classificadas como numéricas, lógicas e literais.Uma vez declarada a variável o valor nela armazenado deve ser do tipo em que ela foi declarada.
Estrutura da declaração:
7
Algoritmos e Programação
nome-do-tipo é a palavra-chave que indica o tipo de dados associado às variáveis.
lista-de-identificadores são os nomes escolhidos para as variáveis, e devem ser separados por vírgula;
Exemplos em pseudocódigo:
a) inteiro NOTA, CODIGO, X5;b) booleano TESTE, SIM;c) caracter NOME, END1, END2, F1F2;
Exemplos em C++:
a) int NOTA, CODIGO, X5;b) char SEXO;
Exercício D
1) Assinalar com X os identificadores válidos:( ) valor ( ) salario-liquido ( )B248( ) x2 ( ) Nota*do*Aluno ( )A1B2C3( ) 3x4 ( ) Maria ( )KM/H( ) XYZ ( ) Nomedaempresa ( )Sala215( ) “Nota” ( ) Ah! ( )M{A}
2) Supondo-se que as variáveis NOM, PROF, ID e SALARIO serão utilizadas para armazenar o nome, profissão, idade e salário de uma pessoa, escrever o conjunto de declarações necessárias para criar essas variáveis e associar às mesmas os respectivos tipos.
Operadores
Os operadores aritméticos são usados em cálculos matemáticos.Os operadores relacionais são usados para fazer comparações.Os operadores lógicos são usados testes condicionais.
Operadores AritméticosAlgoritmo Linguagem C++
Atribuição =Adição + +Subtração - -Multiplicação * *Divisão real / /Divisão inteira div sem equivalenteResto de divisão mod %Menos Unário - -
8
Algoritmos e Programação
Operadores LógicosAlgoritmo Linguagem C++
Conjunção e &&Disjunção ou | |Negação não !
Operadores AritméticosAlgoritmo Linguagem C++
Menor < <Maior > >Igual = = =Diferente ! =Menor ou igual < =Maior ou igual > =
Palavras Reservadas
Em Pseudocódigointeiro se repita inícioreal então para fimbooleano senão selecione constanteleia escreva imprima registrocaracter enquanto caso
Em C++asm else _loadds sizeofauto enum long _ssbreak _es _near staticcase _export near structcatch extern new switch_cdecl _far operator templatecdecl far _pascal thischar float private typedefclass for protected unionconst friend public unsignedcontinue goto register virtual_cs huge return voiddefault if _saveregs volatiledo inline _seg whiledouble int short_ds interrupt signed
Pseudocódigo
9
Algoritmos e Programação
Comando leia: recebe o que foi digitado pelo usuário. Utilizado quando desejamos receber o que foi digitado pelo usuário.
Comando escreva: exibe informações na tela. Utilizado quando desejamos exibir em tela alguma informação ao usuário, seja ela resultado de um cálculo ou procedimento, ou ainda uma mensagem.
Exemplos de Algoritmos
1) Dados dois números, calcular a soma dos mesmos.inicio
inteiro A, B, Soma;escreva “Digite o valor de A:”;leia A;escreva “Digite o valor de B:”;leia B;Soma A + B;escreva Soma;
fim
Em C++
#include <iostream.h>void main(){
int A, B, Soma;cout<< “Digite o valor de A:”;cin>> A;cout<< “Digite o valor de B:”;cin>> B;Soma = A + B;cout << “A soma e ” << Soma;
}
2) Faça um algoritmo para calcular a área de uma circunferência.inicio
real A, R;escreva “Digite o raio da circunferência:”;leia R;A 3.14159 * (R * R);escreva A;
fim
Em C++
#include <iostream.h>void main(){
float A, R;cout<< “Digite o raio da circunferência:”;
10
Algoritmos e Programação
cin>> R;A = 3.14159 * (R * R);cout<< A;
} Algumas Definições da Linguagem C++
Os programas em C++ são compostos principalmente por funções, uma ou mais. A principal delas é a função main().
Estrutura básica de uma função
tipo nome( ) //nome e tipo da função{ //abertura do corpo do programa
instrução_1; //instruçõesinstrução_2;...instrução_n;
} //fechamento do corpo do programa
Exemplo:#include <iostream.h>void main( ){
cout << “Primeiro Programa”;}
A Diretiva #include
É utilizada para incluir em nosso código, um outro código-fonte, onde o processador encontra esta diretiva, ele a substitui pelo conteúdo do arquivo referenciado.
Exemplos:#include <iostream.h>#include “iostream.h”
quando são usadas aspas o compilador procura o arquivo primeiro no diretório atual se não encontra-lo, procurará no diretório INCLUDE.
Comando cout
O comando é usado para imprimir uma mensagem ou valor na tela, ele sempre está acompanhado do operador <<.
Exemplo:cout << “Primeiro Programa”;
Códigos Especiais Significado
11
Algoritmos e Programação
\n Nova linha\r Retorno do cursor\t Tab\b Retrocesso\” Aspas\ \ Barra\f Salta página de formulário\0 Nulo
Comando cin
O comando é usado para ler uma informação digitada no teclado (uma entrada), ele sempre está acompanhado do operador >>.
Exemplo:cin >> n;
Exemplos de Programas
1) Programa que imprime mensagem constantes na tela.#include < iostream.h >void main( ){
int evento;char corrida;float tempo;evento = 5;corrida = ‘C’;tempo = 27.25;cout << “O tempo vitorioso na eliminatória ” << corrida;cout << “ da competição “ << evento << ” foi ” << tempo <<”.”;
}
2) Programa que calcula a conversão de temperaturas em graus Celsius para Fahrenheit.
#include < iostream.h >void main( ){
float F, C;cout << “Digite a temperatura em graus Celsius:”;cin >> C;F = (9 * C + 160) / 5;cout << “O valor é ” << F;
}
Exercício E
1) Faça um programa que leia uma temperatura em graus Celsius e converta-a para graus Fahrenheit. A fórmula de conversão é: F = (9 * C + 160) / 5, sendo
12
Algoritmos e Programação
F a temperatura em Fahrenheit e C a temperatura em Celsius.
2) Faça um programa que efetue o cálculo da quantidade de litros de combustível gastos em uma viagem, utilizando-se um automóvel que faz 12Km por litro. Para obter o cálculo, o usuário deverá fornecer o tempo gasto e a velocidade média durante a viagem. Desta forma, será possível obter a distância percorrida com a fórmula DISTÂNCIA = TEMPO * VELOCIDADE. Tendo o valor da distância, basta calcular a quantidade de litros utilizados na viagem com a fórmula LITROS_USADOS = DISTÂNCIA / 12. O algoritmo deverá apresentar os valores da velocidade média, tempo gasto na viagem, a distância percorrida e a quantidade de litros gastos.
3) Fazer um programa que leia um número inteiro e apresente o resultado do quadrado desse número:
4) Fazer um programa que leia dois inteiros e imprima o resultado do quadrado da diferença do primeiro pelo do segundo.
5) Elaborar um programa que efetue a leitura de 3 valores (A, B e C) e apresente como resultado final a soma dos quadrados dos três valores lidos.
6) Fazer um programa para calcular e apresentar o valor do volume de uma lata de óleo, utilizando a fórmula: VOLUME = 3.14159 * (R * R) * ALTURA.
7) Faça um programa que calcule a área de um triângulo. Fórmula: a = (b * c) / 2.
8) Faça um programa que receba o salário de um funcionário, calcule e imprima o novo salário sabendo-se que este sofreu um aumento de 25%.
Estrutura de Condição
Este tipo de estrutura testa uma condição e de acordo com o resultado do teste (verdadeiro ou falso) executa uma operação.
Estrutura Condicional Simples
Nesta estrutura há uma única condição, que no caso de ser verdadeira, o algoritmo executará uma determinada instrução.
iniciointeiro A, B;escreva “Digite A:”;leia A;escreva “Digite B:”;leia B;se (A > B)
então escreva A;fim se
fim
13
Algoritmos e Programação
Estrutura Condicional Composta
Nesta estrutura há uma única condição, que no caso de ser verdadeira, o algoritmo executará uma determinada instrução e caso não seja verdadeira, ele executará uma segunda instrução.
iniciointeiro A, B;escreva “Digite A:”;leia A;escreva “Digite B:”;leia B;se (A > B)
então escreva A;senão escreva B;
fim sefim
Estrutura Condicional Encadeada
Nesta estrutura há no mínimo duas condições, no caso da primeira ser verdadeira, o algoritmo executará uma determinada instrução, caso não seja ele testará a segunda condição que se for verdadeira ele executará uma segunda instrução, caso não seja ele pode encerrar o processo ou se houver uma terceira condição ele irá testá-la e assim sucessivamente.
inicioreal salario, novo_salario;escreva “Digite salario:”;leia salario;se (salario < 500)
então novo_salario salario * 1.15;senão se (salario <= 1000)
então novo_salario salario * 1.10;senão novo_salario salario * 1.05;
fim sefim se
fim
Estrutura Condicional com Uso de Operadores Lógicos
Nesta caso podemos utilizar qualquer uma das estruturas citadas anteriormente, mas iremos ter o uso de operadores lógicos que auxiliam na composição da condição.
iniciointeiro A, B, C;escreva “Digite A:”;leia A;
14
Algoritmos e Programação
escreva “Digite B:”;leia B;escreva “Digite C:”;leia C;se (A > B) e (B < C)
então escreva B;fim se
fim
Operador Lógico ECondição 1 Condição 2 Resultado
falsa falsa falsaverdadeira falsa falsa
falsa verdadeira falsaverdadeira verdadeira verdadeira
Operador Lógico OUCondição 1 Condição 2 Resultado
falsa falsa falsaverdadeira falsa verdadeira
falsa verdadeira verdadeiraverdadeira verdadeira verdadeira
Operador Lógico NÃOCondição Resultado
falsa verdadeiraverdadeira falsa
Exemplo do uso de NÃO:
se não (x > 5)então C (A + B) * X;senão C (A - B) * X;;
fim se
Exercício F
1) Determine o resultado lógico das expressões mencionadas, assinalando se são verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 1, A = 3, B = 5, C = 8 e D = 7.
a) não (X > 3) V ( ) F ( )b) (X < 1) e não (B > D) V ( ) F ( )c) não (D < 0) e (C > 5) V ( ) F ( )d) não (X > 3) ou (C < 7) V ( ) F ( )e) (A > B) ou (C > B) V ( ) F ( )f) (X >= 2) V ( ) F ( )g) (X < 1) e (B >= D) V ( ) F ( )h) (D < 0) ou (C > 5) V ( ) F ( )
15
Algoritmos e Programação
i) não (D > 3) ou não (B < 7) V ( ) F ( )j) (A > B) ou não (C > B) V ( ) F ( )
Estruturas Condicionais em C
Estrutura if
Esta estrutura é equivale à estrutura se em pseudocódigo.
if (condição)instrução;
Exemplos:
#include <iostream.h>#include <conio.h>void main( ){
char ch;ch = getche( );if (ch == ‘p’)
cout << “Você pressionou a tecla p.”;}
#include <iostream.h>#include <conio.h>void main( ){
if (getche( ) == ‘p’){
cout << “Você pressionou a tecla p.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}}
Estrutura if-else
Esta estrutura é equivale à estrutura se-então-senão em pseudocódigo.
if (condição)instrução_1;
elseinstrução_2;
Exemplos:
#include <iostream.h>#include <conio.h>
16
Algoritmos e Programação
void main( ){
char ch;ch = getche( );if (ch == ‘p’)
cout << “Você pressionou a tecla p.”;else
cout << “Você não pressionou a tecla p.”;}
#include <iostream.h>#include <conio.h>void main( ){
if (getche( ) == ‘p’){
cout << “Você pressionou a tecla p.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}else{
cout << “Você não pressionou a tecla p.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}}
Estrutura if-else Encadeados
Esta estrutura é equivale à estrutura se-então-senão se em pseudocódigo.
if (condição_1)instrução_1;
else if (condição_2)instrução_2;
elseinstrução_3;
Exemplos:
#include <iostream.h>#include <conio.h>void main( ){
char ch;ch = getche( );if (ch == ‘p’)
printf(“Você pressionou a tecla p.”);
17
Algoritmos e Programação
else if (ch == ‘r’)cout << “Você pressionou a tecla p.”;
elsecout << “Você não pressionou nem a tecla p e nem a r.”;
}
#include <iostream.h>#include <conio.h>void main( ){
if (getche( ) == ‘p’){
cout << “Você pressionou a tecla p.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}else if (getche( ) == ‘r’)
{cout << “Você pressionou a tecla r.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}else{
cout << “Você não pressionou nem a tecla p e nem a r.”;cout << “Pressione qualquer tecla para terminar.”;getche( );
}}
Exercício G
Façam em pseudocódigo e linguagem C++:
1) Elaborar um programa que efetue a leitura de um determinado valor, e apresentá-lo caso não seja maior que 3.
2) Dados dois números verifique qual é o maior e imprima-o.
3) Faça um algoritmo que calcule a média das notas de dois alunos e imprima a maior delas. Considerando que cada aluno possui três notas.
4) Faça um algoritmo que leia dois números e apresente a diferença do maior pelo menor.
5) Faça um algoritmo que efetue a leitura de um valor inteiro positivo ou negativo e apresente o número lido como sendo um valor positivo, ou seja, o programa deverá apresentar o módulo de um número fornecido. Lembre-se de verificar se o número fornecido é menor que zero, sendo, multiplique-o por –1.
18
Algoritmos e Programação
6) Faça um algoritmo para:a) Ler um número inteiro qualquer, no caso o número N;b) Calcular o resto da divisão de N por 4, e armazenar na variável R4;c) Calcular o resto da divisão de N por 5, e armazenar na variável R5d) Verificar se ambas as variáveis possuem o valor zero, se sim apresentar a
variável N, se não, apresentar a mensagem “Não é divisível por 4 e 5”;
Exercício H
Façam em pseudocódigo e linguagem C++:
1) Faça um algoritmo que leia valores referentes a quatro notas escolares de um aluno e escreva uma mensagem dizendo que o aluno foi aprovado, se o valor da média for maior ou igual a 7. Se o valor for menor que 7, solicitar a nota de exame, somar com o valor da média e obter nova média. Se a nova média for maior ou igual a 5, escrever uma mensagem informando que o aluno foi aprovado em exame. Se for menos escrever uma mensagem informando que o aluno não foi aprovado. Apresentar junto com as mensagens o valor da média do aluno.
2) Efetuar a leitura de quatro números inteiros e apresentar os números que são divisíveis por 2 e 3.
3) Fazer um algoritmo que leia um número inteiro e apresentar uma mensagem informando se o número é par ou ímpar.
Operador Condicional Ternário “?”
Este operador tem função muito parecida com a do if-else mas o seu resultado é atribuído a uma variável.
resp = condição ? instrução_1 : instrução_2;
Exemplos:1) max = (num1 > num2) ? num1: num2;
equivale a
if (num1 > num2)max = num1;
elsemax = num2;
2) abs = (num < 0) ? –num: num;
equivale a
if (num < 0)abs = - num;
19
Algoritmos e Programação
elseabs = num;
Observação: este tipo de operador melhora a eficiência do algoritmo.
Exercício I
1) Refaça os exercícios G-2, G-3, G-4, G5, H-3 utilizando no lugar do if o operador Ternário (fazer somente em C++).
Estrutura selecione
Esta estrutura é muito parecida com se-então, mas o segundo permite apenas duas alternativas de execução para cada condição, enquanto o primeiro oferece a possibilidade de escolher entre várias alternativas com uma única condição. Vejamos sua estrutura para entender melhor.
selecione (expressão constante)caso constante 1:
instruções;caso constante 2:
instruções;...padrão:
instruções;fim selecione
Exemplo: Calculadora com 4 operações.
inicioreal num1, num2;caracter op;escreva “Digite um número, operador, número”;leia num1, op, num2;selecione (op)
caso ‘+’:escreva “ = ”, num1 + num2;quebra;
caso ‘-’:escreva “ = ”, num1 - num2;quebra;
caso ‘*’:escreva “ = ”, num1 * num2;quebra;
caso ‘/’:escreva “ = ”, num1 / num2;quebra;
padrão:escreva “Operador desconhecido!”;
20
Algoritmos e Programação
fim selecione}
Em C++
switch (expressão constante){
case constante 1:instruções;
case constante 2:instruções;
...default:
instruções;}
Exemplo: Calculadora com 4 operações.
#include <iostream.h>#include <conio.h>void main( ){
float num1, num2;char op;cout << “Digite um número, operador, número” << endl; cin >> num1, op, num2;switch (op){
case ‘+’:cout << “ = ” << num1 + num2;break;
case ‘-’:cout << “ = ” << num1 - num2;break;
case ‘*’:cout << “ =” << num1 * num2;break;
case ‘/’:cout << “ = ” << num1 / num2);break;
default:cout << “Operador desconhecido!”;
}getch( );
}Comando quebra
Este comando é utilizado para provocar a saída do switch. Se este comando não for utilizado o programa executará as instruções seguintes.
21
Algoritmos e Programação
Exemplo: Calculadora com 4 operações sem o comando quebra.
inicioreal num1, num2;caracter op;escreva “Digite um número, operador, número”;leia num1, op, num2;selecione (op)
caso ‘+’:escreva “ = ”, num1 + num2;quebra;
caso ‘-’:escreva “ = ”, num1 - num2;quebra;
caso ‘*’:caso ‘x’:
escreva “ = ”, num1 * num2;quebra;
caso ‘/’:caso ‘\’:
escreva “ = ”, num1 / num2;quebra;
padrão:escreva “Operador desconhecido!”;
fim selecione}
Em C++
Exemplo: Calculadora com 4 operações sem o comando break.
#include <iostream.h>#include <conio.h>void main( ){
float num1, num2;char op;cout << “Digite um número, operador, número” << endl; cin >> num1, op, num2;switch (op){
case ‘+’:cout << “ = ” << num1 + num2;break;
case ‘-’:cout << “ = ” << num1 - num2;break;
case ‘*’:case ‘x’:
22
Algoritmos e Programação
cout << “ =” << num1 * num2;break;
case ‘/’:case ‘\\’:
cout << “ = ” << num1 / num2);break;
default:cout << “Operador desconhecido!”;
}getch( );
}
Exercício O
1) Escreva um programa que pergunte ao usuário com qual velocidade costuma dirigir seu carro e imprima a resposta que o guarda de trânsito daria de acordo com a velocidade conforme definido na tabela abaixo.
75 km/h “Você está acima da velocidade máxima permitida.”65 km/h “Você está acima da velocidade máxima permitida.”55 km/h “Você está na velocidade máxima permitida.”45 km/h “Você está abaixo da velocidade máxima permitida.”
23
Algoritmos e Programação
Estruturas de Repetição
Estrutura enquanto-repita
enquanto <condição> repita<bloco>
fim enquanto
Nesta estrutura, <bloco> só será executado se <condição> for verdadeira. Dentro de <bloco> deve haver uma instrução que altere <condição> senão <bloco> será executado infinitamente (loop).
Exemplo: Calcular os quadrados de uma lista de números inteiros positivos, enquanto eles forem maiores que zero.inicio
inteiro A, t;escreva “Digite A:”;leia A;enquanto (A > 0) repita
t A * A;escreva t;escreva “Digite A:”;leia A;
fim enquantofim
Outro exemplo: Faça um algoritmo que leia 5 números e os multiplique por três exibindo o resultado de cada multiplicação.inicio
inteiro X, R, cont;cont 1;enquanto (cont <= 5) repita
escreva “Digite X:”;leia X;R X * 3;escreva R;cont cont + 1;
fim enquantofim
Laço while
while (condição)instrução;
Exemplo: Imprime números de 0 a 9.#include <iostream.h>void main( ){
int conta = 0;
24
Algoritmos e Programação
while (conta < 10){
cout << “conta = ” << conta;conta++;
}}
Exemplo: Conta caracteres de uma frase.#include <iostream.h>void main( ){
int cont = 0;cout << “Digite uma frase: \n”;while (getche( ) != ‘\r’)
cont++;cout << “\n O numero de caracteres e ” << cont;
}
Exemplo: Conta caracteres de uma frase e dá a alternativa de contar nova frase.#include <iostream.h>void main( ){
int cont = 0;char ch = ‘S’;while (ch == ‘S’){
cout << “Digite uma frase: \n”;while (getche( ) != ‘\r’)
cont++;cout << “\n O numero de caracteres e ” << cont;cout << “\n Deseja contar os caracteres de outra frase?”;ch = getche( );
}}
Exercício J
1) Construir um algoritmo que calcule a média aritmética de vários valores inteiros positivos, lidos externamente. O final da leitura acontecerá quando for lido um valor negativo.
2) Faça um programa, utilizando um laço while, que solicite ao usuário caracteres e imprima seus códigos decimais. O programa deve terminar quando o usuário pressionar a tecla <Enter>.
Estrutura repita-enquanto
repita <bloco>
enquanto <condição>
25
Algoritmos e Programação
Nesta estrutura, <bloco> é executado uma vez e após a execução se <condição> for verdadeira ela executará <bloco> outra vez e assim sucessivamente até que <condição> seja falsa.
Exemplo: Calcular os quadrados de uma lista de números inteiros positivos, enquanto eles forem maiores que zero.inicio
inteiro A, t;repita
escreva “Digite A:”;leia A;t A * A;escreva t;
enquanto (A > 0)fim
Outro exemplo: Faça um algoritmo que leia 5 números e os multiplique por três exibindo o resultado de cada multiplicação.inicio
inteiro X, R, cont;cont 1;repita
escreva “Digite X:”;leia X;R X * 3;escreva R;cont cont + 1;
enquanto (cont <= 5)fim
Funções getche( ) e getch( )
As duas funções lêem o caracter do teclado e diferente do cout não esperam pelo <enter> para finalizar a função, a diferença entre elas é que a getch( ) lê e guarda o caracter sem exibi-lo na tela e a getche( ) exibe.
Exemplos:#include <iostream.h>void main( ){
char ch;cout << “Digite algum caracter:”;ch = getche( );cout << “\nA tecla que você pressionou é ” << ch;
}
#include <iostream.h>void main( ){
26
Algoritmos e Programação
char ch;cout << “Digite algum caracter:”;ch = getch( );cout << “\nA tecla que você pressionou é ” << ch;
}
Laço do-while
Este laço tem a mesma função do laço while, a diferença entre eles é que neste é possível executar pelo menos uma vez as instruções, por que nele a condição é verificada somente no final, ou seja, quando temos um caso em que precisamos executar instruções pelo menos uma vez é que o utilizamos. Ele equivale a estrutura repita-enquanto do algoritmo.
do{
instrução;} while (condição);
Exemplo: Conta caracteres de uma frase e dá a alternativa de contar nova frase.#include <iostream.h>void main( ){
int cont = 0;char ch;do{
cout << “Digite uma frase: \n”;while (getche( ) != ‘\r’)
cont++;cout << “\n O numero de caracteres e ” << cont;cout << “\n Deseja contar os caracteres de outra frase?”;ch = getche( );
} while (ch == ‘S’);}
Exemplo: Calculadora com 4 operações.#include <iostream.h>void main(){
float num1, num2;char op, ch;do{
cout >> "Digite um numero, operador, numero \n";cin >> num1 << op << num2;switch (op){
case '+':cout << " = " << num1 + num2;
27
Algoritmos e Programação
break;case '-':
cout << " = " << num1 - num2;break;
case '*':case 'x':
cout << " = " << num1 * num2;break;
case '/': case '\\':
cout << " = " << num1 / num2;break;
default:cout << "Operador Invalido";
}cout << “Deseja fazer novo cálculo? ”;ch = getche( );
} while (ch == ‘S’ || ch == ‘s’);getch();
}
Exercício K
3) Faça um algoritmo que leia o ano de nascimento de uma pessoa e escreva a idade dela em anos. Depois do cálculo pergunte se deseja calcular outra idade, se sim reinicie o laço se não encerre o programa.
4) Faça um programa que solicite um número inteiro de até 4 dígitos ao usuário e inverta a ordem de seus algarismos. Coloque no programa, utilizando um laço do-while, a opção do usuário digitar um novo número para inverter.
Estrutura com variável de controle – para-até-repita
para i = 1 até n repita<bloco>
fim para
Nesta estrutura, <bloco> será executado de 1à n vezes, ou seja, a variável i funciona como controle, ela é iniciada em 1 e chegará a atingir um valor n, enquanto isso não acontecer ela executará as instruções do <bloco>.
Exemplo: Dado um número n, calcular a soma dos n primeiros números pares.inicio
inteiro n, s, i;escreva “Digite N:”;leia n;s 0;para (i = 0; i < n; i i + 1)
se (i mod 2 = 0)então s s + i;
28
Algoritmos e Programação
fim sefim paraescreva “A soma é: ”, s;
fim
Outro exemplo: Faça um algoritmo que leia 5 números e os multiplique por três exibindo o resultado de cada multiplicação.inicio
inteiro X, R, cont;para (cont = 0; cont < 5; cont cont + 1)
escreva “Digite X:”;leia X;R X * 3;escreva R;cont cont + 1;
fim para fim
Operadores de Incremento (++) e Decremento (--)
++ incrementa de 1 seu operando- - decrementa de 1 seu operando
Exemplos:i++ eqüivale a i = i + 1i - - eqüivale a i = i - 1
Estes operadores têm duas formas de serem usados: a pré-fixada e a pós-fixada.
Pré-fixada = ++i ou - - iPós-fixada = i++ ou i - -
Na pré-fixada primeiro a variável i é incrementada/decrementada depois ela é usada e na pós-fixada primeiro a variável é usada e depois incrementada/ decrementada.
Exemplo de pós-fixada:#include <iostream.h>void main( ){
int n, x;n = 5;x = n++;cout << “x = “ << x << “, n = ” << n;
}
Saída: x = 5 n = 6
Exemplo de pré-fixada:#include <iostream.h>
29
Algoritmos e Programação
void main( ){
int n, x;n = 5;x = ++n;cout << “x =” << x << “, n = “ << n;
}
Saída: x = 6 n = 6
Outros exemplos:K = 3 * n++;K = 3 * ++n;
Importante: estes operadores só podem ser usados com variáveis e não com constantes ou expressões.
Operadores Aritméticos de Atribuição +=, -=, *=, /=, %=
X op= exp;
Se X é uma variável, exp uma expressão e op um operador aritmético (+, -, *, / ou %) a expressão acima equivale a:
X = (X) op (exp);
Exemplos:i += 2; equivale a i = i + 2;x *= y + 1; equivale a x = x * (y + 1);t /= 2.5; equivale a t = t / 2.5;p %= 5; equivale a p = p % 5;d -= 3; equivale a d = d - 3;
Exemplo:#include <iostream.h>void main( ){
int total = 0, cont = 10;cout << “Total = ” << total << endl;total += cont;cout << “Total = ” << total <<endl;total += cont;cout << “Total = “ << total;
}
Laço for
for (inicialização; teste; incremento)instrução;
30
Algoritmos e Programação
Exemplo: Imprime números de 0 a 9.#include <iostream.h>void main( ){
int conta;for (conta = 0; conta < 10; conta++)
cout << “conta = ” << conta << endl;}
Exemplo: Imprime números de 9 a 0.#include <iostream.h>void main( ){
int conta;for (conta = 9; conta >= 0; conta--)
cout << “conta = ” << conta << endl;}
Exemplo: Imprime números de 0 a 9 pulando de três em três.#include <iostream.h>void main( ){
int conta;for (conta = 0; conta < 10; conta += 3)
cout << “conta = ” << conta << endl;}
Exemplo: Soma e exibe os números de 0 a 9, mostrando as parciais da soma.#include <iostream.h>void main( ){
int conta, total;for (conta = 0, total = 0; conta < 10; conta++){
total += conta;cout << “conta = ” << conta << “, total = ” << total << endl;
}}
Exemplo: Imprime a soma de x + y enquanto esta soma for menor que 100.#include <iostream.h>void main( ){
int x, y;for (x = 0, y = 0; x + y < 100; x++, y++)
cout << x + y << endl;}
Exercício L
31
Algoritmos e Programação
5) Faça um algoritmo que calcule e apresente a média de 10 alunos, considerando que cada aluno tenha 2 notas.
6) Faça um algoritmo que calcule o seguinte somatório, onde A e B devem ser fornecidos pelo usuário.
7) Faça um algoritmo que calcule o fatorial de um número N recebido via teclado.N! = N*(N-1)* (N-2)* (N-3)...0! = 1 e 1! = 1N pertence aos naturais (0 a 9)
Exemplos:2! = 2 * 1 = 23! = 3 * 2 * 1 = 64! = 4 * 3 * 2 * 1 = 245! = 5 * 4 * 3 * 2 * 1 = 120
8) Faça um algoritmo que leia n e calcule os valores da seguinte seqüência:S = 1, 2, 4, 8, 16, ..., nS = i + i
9) Faça um algoritmo que calcule a tabuada de multiplicação de um número fornecido pelo usuário. Exiba no seguinte formato n x i = r.
10)Dado um número real X e um número natural N, calcule e escreva o valor de xn.
11)Faça um programa que leia 5 valores para A, um de cada vez, e conte quantos deles são negativos, escrevendo esta informação.
12)Dado um número N, escreva todos os ímpares menores que N e maiores que 0, para n = 10 deverão ser exibidos os ímpares: 1, 3, 5, 7e 9.
13)Faça um programa para calcular o somatório dos pares de 0 a 100.
14)Dada um relação de 200 números, leia os mesmos e informe quantos deles são pares e ímpares.
15)Escreva um programa usando o laço for que imprima os caracteres da tabela ASCII de 32 a 255 decimal. O programa deve imprimir cada caracter, seu código decimal e seu código hexadecimal.
16)Escreva um programa usando o laço for que imprima o quadrado de todos os inteiros de 1 a 20.
32
Algoritmos e Programação
Estruturas de Dados Homogêneas (Vetores e Matrizes)
Vetor
É o agrupamento de várias informações, de mesmo tipo de dados, dentro de uma mesma variável. Os vetores são chamados também de matrizes unidimensionais.
inteiro V[10];
0 1 2 3 4 5 6 7 8 9V 45 32 66 2 0 12 5 77 31 10
Durante a execução do programa temos duas formas de atribuir valores aos vetores, a primeira delas é logo após a declaração, por exemplo:
Atribui duas notas e calcula a média.
inicioreal nota[2], media;nota[ 0 ] = 5.0;nota[ 1 ] = 7.0;media (nota[0] + nota[1])/2;escreva “A media e ”, media;
fim
A outra maneira é utilizando um laço, onde utilizamos um índice para indicar que elemento do vetor estamos acessando, por exemplo:
Recebe duas notas e calcula a média.inicio
real media, nota[2];inteiro i;para (i 0; i < 2; i i+1)
escreva “Digite a nota”, i+1;leia nota[ i ];
fim paramedia (nota[0] + nota[1])/2;escreva “A media e ”, media;
fim
Carrega um vetor de 10 posições com o valores de notas.
33
nome da
tamanho do
índice
Conteúdo
Nome da variável
Algoritmos e Programação
inicioreal nota[10];inteiro i;para (i 0; i < 10; i i+1)
escreva “Digite a nota:”;leia nota[ i ];
fim parafimOutro exemplo: Faça um algoritmo que leia 100 números, depois receba um número qualquer e verifique se ele existe entre os 100 anteriores e imprima a(s) posição(ões) onde ele aparece dentro do vetor.
iniciointeiro N[100], i, comp;para (i 0; i<100; i i + 1)
escreva “Digite o numero”, i+1;leia N[ i ];
fim paraescreva “Digite um numero para localizar”;leia comp;para (i 0; i<100; i i + 1)
se (N[ i ] = comp)escreva i;
fim sefim para
fim
Composição de Vetores
0 1 2 3 4 5 6 7 8 9peso 46.5 66.1 99.1 33.1 14.2 13.0 67.5 58.8 48.0 54.1
0 1 2 3 4 5 6 7 8 9idade 27 28 15 12 64 13 20 34 28 44
Cadastro de Produtos
0 1 2 3 4 5 6 7 8 9codig
o
0 1 2 3 4 5 6 7 8 9preco
34
Algoritmos e Programação
0 1 2 3 4 5 6 7 8 9quant
inicioreal preco[10];inteiro codigo[10], i, quant[10];escreva “Cadastro de produtos”;para (i 0; i<10; i i + 1)
escreva “Digite o codigo: ”;leia codigo[ i ];escreva “Digite o preco: ”;leia preco[ i ];escreva “Digite a quantidade: ”;leia quant[ i ];
fim paraescreva “Os valores em estoque por produto são:”;para (i 0; i<10; i i + 1)
escreva preco[ i ] * quant[ i ];fim para
fim
Em C++
Exemplos: Atribui duas notas e calcula a média.
#include <iostream.h>void main(){
float nota[2], media;nota[ 0 ] = 5.0;nota[ 1 ] = 7.0;media = (nota[0] + nota[1])/2;cout << “A media e ” << media;
}
Recebe duas notas e calcula a média.
#include <iostream.h>void main(){
float nota[2], media;int i;for (i=0; i < 2; i++){
cout << “Digite a nota ” << i+1;cin >> nota[ i ];
}media = (nota[0] + nota[1])/2;
35
Algoritmos e Programação
cout << “A media e ” << media;}
Carrega um vetor de 10 posições com o valores de notas.#include <iostream.h>void main(){
float nota[10];int i;for (i=0; i < 10; i++){
cout << “Digite a nota ”;cin >> nota[ i ];
}}
Outro exemplo: Faça um algoritmo que leia 100 números, depois receba um número qualquer e verifique se ele existe entre os 100 anteriores e imprima a(s) posição(ões) onde ele aparece dentro do vetor.
#include <iostream.h>void main(){
int N[100], i, comp;for (i=0; i<100; i++){
cout << “Digite o numero”;cin >> N[ i ];
}cout << “Digite um numero para localizar”;cin >> comp;for (i=0; i<100; i++)
if (N[ i ] == comp)cout << i;
}
Exercício M
1) Faça um algoritmo que calcule a média de 10 alunos, considerando que cada aluno tenha 2 notas. As médias devem ser armazenadas em um vetor de 10 posições.
2) Faça um algoritmo que leia 50 elementos em um vetor e apresente-os.
3) Elabore um algoritmo que contenha um vetor A de 10 valores inteiros e leia esses valores a partir do teclado, depois calcule o dobro do valor dos elementos de índices pares e exiba esta informação.
4) Construa um algoritmo leia em um vetor de 5 valores inteiros e apresente a soma de todos os elementos lidos.
36
Algoritmos e Programação
5) Faça um algoritmo que contenha dois vetores de 15 elementos e leia os valores, depois guarde no segundo o resultado da multiplicação do primeiro por 3, apresente os resultados.
6) Faça um programa que lê um vetor A[6] e o escreve. Conte, a seguir, quantos valores de A são negativos e escreva esta informação.
7) Escrever um programa que lê um vetor B[30] e o escreve. Substitua, a seguir, todos os valores pares de B por 1 e escreva novamente o vetor B.
37