Um algoritmo é um descrição de um padrão de comportamento, expresso em termos de um conjunto finito de ações, ou
um algoritmo é uma seqüência de ações executáveis para a obtenção de uma solução para um determinado problema.
Exemplos: Receita culinária, Itinerário, Instruções para o uso de medicamentos.
Resolução de problema
Compreender o problema;
Levantar necessidades de entrada e saída;
Definir as transformações ou o processamento de cálculos e restrições;
Dividir o problema em módulos funcionais;
Construir e testar a solução proposta.
Programas
Programar é basicamente construir algoritmo através do uso de uma linguagem de programação.
As linguagens de programação podem ser classificadas em três níveis:
Linguagem de máquina
Conjunto de instruções em código binário.
Linguagem de montagem ou de 2o nível
São utilizados códigos especiais chamados mnemônicos;
Um programa montador traduz as instruções simbólicas da linguagem de montagem para a linguagem de máquina.
Linguagem de alto nível
Comandos que se assemelham a linguagem natural (inglês);
Um programa compilador ou interpretador traduz para a linguagem de máquina.
Elementos de uma linguagem:
Sintaxe diz respeito à forma. (Escrita correta);
Semântica refere-se ao conteúdo. (Significado
Desenvolvimento de algoritmos
A construção da seqüência lógica para a solução de um problema pode ser realizada através de notação gráfica como a de
diagrama de blocos ou fluxograma
e/ou de técnica narrativa denominada
pseudocódigo ou portugol.
Etapas a percorrer para a resolucão do problema:
ou
Exemplo:
Ler dois valores A e B, efetuar a soma em X e apresentar o resultado obtido.
Nota: Para a resolução de qualquer problema ter sempre em mente os três conceitos fundamentais: entrada, processamento e saída de dados.
Diagrama de blocos
Pseudocódigo
Diagrama de blocos
Principais símbolos gráficos utilizados em diagrama de blocos:
Tópicos fundamentais
Tipos de dados
(Em C++ uma string de caracteres é delimitada por aspas duplas.)
O tipo de uma variável determina a quantidade de memória que ela ocupará, em bytes, e o modo de armazenamento.
C++ possui cinco tipos básicos que são:
Nota: Ao contrário de outras linguagens, não existe um tipo de dado lógico que assuma um valor verdade ou falsidade (true/false).
Qualquer valor diferente de zero é considerado verdade e zero, falsidade.
Tipos modificados
Os tipos básicos podem ser acompanhados de modificadores na declaração de variáveis, exceto o tipo float e void. O tipo double só aceita o modificador long.
Os modificadores de tipo são: unsigned, short e long.
Conversão de tipos
Declaração de variáveis
Uma variável é uma área na memória referenciada por um identificador, onde pode ser armazenado um valor de certo tipo e alterado a qualquer momento.
Exemplos:
Um identificador nomeia a informação. O nome de variável, constante, função, etc. é considerado um identificador.
Um nome de identificador deve começar por uma letra ou por um caractere de sublinhado, ser único dentro de seu escopo, não pode ser igual a uma palavra reservada da linguagem ou que pertence a sintaxe da linguagem e é vedado o uso de caracteres especiais, exceto o símbolo de sublinhado.
C++ é sensível a letras maiúsculas e minúsculas (case-sensitive). É recomendável utilizar sempre identificadores com letras minúsculas.
Palavras reservadas:
Quais dos seguintes nomes são válidos para a declaração de variáveis em C++?
Denominação de variáveis
Recomenda-se para a declaração de variáveis a utilização de letras minúsculas. Caso o nome seja composto de mais de uma palavra, as demais devem ser iniciadas com letras maiúsculas. Exemplos:
total
contador
valorMedio
segundaFase
somaValorReal
contaLinhaRel2
Dicas: Utilize nomes significativos na denominação de variáveis. Dê um nome que represente o mais precisamente possível o propósito desta variável. Evite nomes sem significado ou abreviaturas não usuais.
Constantes
Uma constante é representada por um valor fixo que não pode ser alterado ao longo da execução do programa.
Exemplos:
Pseudocódigo
C++
const real PI <-- 3.14159
const float PI = 3.1419;
const caractere LETRA <-- ‘x’
const char LETRA = ‘x’;
Comando de atribuição
Utilizado para atribuir ou fornecer um valor a uma determinada variável.
Exemplos:
Pseudocódigo
C++
salario 508.50
salario = 508.50;
resto <-- 120 – 49
resto = 120 – 49;
Atribuições múltiplas em C++:
z = x = 8; ou z = (x = 8);
Operadores aritméticos
As variáveis e constantes numéricas podem ser utilizadas em cálculos matemáticos, aplicando os operadores:
Pseudocódigo
Função
C++
*
Multiplicação
*
/
Divisão
/
+
Adição
+
-
Subtração
-
Mod
Divisão (resto)
%
ou serem utilizadas em funções matemáticas.
Algumas funções matemáticas pré-definidas:
Operação
Sintaxe
Exemplo
raiz quadrada
double sqrt(double)
sqrt (9.0)
potenciação
double pow(double base, double exp)
pow (2,5)
valor absoluto
int abs(int)
abs (-5)
valor absoluto
double fabs(double)
fabs (-4.3)
Operadores de incremento e de decremento
Os operadores de incremento (++) e de decremento (--) são operadores unários que adicionam e subtraem uma unidade do conteúdo da variável respectiva:
Instrução
Equivalência
var++
var = var + 1
++var
var = var + 1
var--
var = var – 1
--var
var = var – 1
O valor da variável será incrementado (ou decrementado) depois ou antes da execução da instrução de que ela faz parte.
Operadores aritméticos de atribuição
Estes operadores combinam as operações aritméticas com atribuição:
Aritmética de atribuição
Instrução equivalente
i += 5;
i = i + 5;
j -= x;
j = j – x;
k *= y + 2;
k = k * (y + 2);
m /= 4.2;
m = m / 4.2;
n %= 2;
n = n % 2;
Operadores relacionais
Operadores relacionais fazem comparações, ou seja, verificam a relação de magnitude e igualdade entre dois valores.
São seis os operadores relacionais:
Pseudocódigo
Operação
C++
=
Igual a
==
>
Maior que
>
<
Menor que
<
<>
Diferente de
!=
>=
Maior ou igual a
>=
<=
Menor ou igual a
<=
Operadores lógicos
Utilizados em expressões lógicas compostas ou para inverter o estado lógico de uma condição. Retornam o valor verdadeiro ou falso.
Pseudocódigo
Operação
C++
e
Conjunção
&&
ou
Disjunção
| |
não
Negação
!
Os operadores && e | | são binários e o operador ! é unário.
Estes operadores avaliam os operandos como lógicos (0 ou 1), sendo o valor lógico 0 considerado falso e o valor lógico 1, verdadeiro.
As tabelas-verdade, a seguir, expressam operações lógicas:
conjunção (&&)
disjunção (||)
negação (!)
0 e 0 = 0
0 ou 0 = 0
não 0 = 1
0 e 1 = 0
0 ou 1 = 1
não 1 = 0
1 e 0 = 0
1 ou 0 = 1
1 e 1 = 1
1 ou 1 = 1
Operador ternário ou condicional
O operador ternário (?:) opera sobre três expressões:
condição ? expr1 : expr2
condição é uma expressão lógica que será avaliada primeiro. Se o valor for diferente de zero (verdade) a expr1 será o valor da condicional. Caso contrario a expr2 será o valor da condicional.
Precedência dos operadores
A precedência é o criterio que especifica a ordem de avaliação dos operadores de uma expressão qualquer.
Os operadores de cada categoria possuem a mesma prioridade e são executados na ordem em que são escritos na instrução da esquerda para direita:
Categorias e operadores:
1. Negativo, incr/decr. e não lógico: -, ++, --, !
2. Aritméticos: (*, /, %), (+, -)
3. Relacionais: (<, <=, >, >=), (==, !=)
4. Lógicos: &&, ||
5. Ternário: ?:
(Parêntesis podem ser utilizados para determinar uma forma específica de avaliação de uma expressão.)
Exercícios (Para obter as respostas posicione o cursor sobre a letra da expressão)
São comandos que permitem obter dados do ambiente exterior para a memória do computador e fornecer dados ao mundo exterior.
Exemplos:
Pseudocódigo
C++
leia (nota)
cin >> nota;
escreva (resultado)
cout << resultado;
cin utiliza o operador de extração (>>)
cout utiliza o operador de insersão (<<)
Caracteres de controle
Utilizados para controle de páginas e exibição de códigos especiais. Algumas seqüências de controle:
Caractere de controle
Significado
\n
nova linha
\t
tabulação
\r
início da linha
\\
imprime barra invertida (\)
\”
imprime aspa dupla
\’
imprime apostrofo
A instrução endl (end line) encerra a linha de dados e coloca o cursor no início da próxima linha.
Tem, portanto, a mesma função do caractere de controle \n.
Exemplos:
cout<<"Imprime e alimenta linha\n";
cout<<"\nAlimenta linha e imprime";
cout<<"Imprime e alimenta linha"<<endl;
cout<<endl<<"Alimenta linha e imprime";
Formato de impressão
O tamanho de um campo de dado pode ser definido no comando cout para permitir o alinhamento na apresentação dos dados:
setw
determina o tamanho do campo a ser exibido
setfill
estabelece o caractere de preenchimento do espaço em branco
setprecision
determina a quantidade de casas decimais dos números reais ou de ponto flutuante (float);
O arquivo de inclusão iomanip.h define os manipuladores de alinhamento.
Codificação:
int ban=2300, uva=58;
cout << setfill('.'); // caratere de prenchimento
cout << '\n' << "Bananas" << setw(10) << ban;
cout << '\n' << "Uvas " << setw(10) << uva;
Saída (resultado):
Bananas . . . . . . 2300
Uvas . . . . . . . . 58
Codificação:
float ban=2300.3, uva=58.476;
cout << setprecision(2); // exibe duas casas decimais
cout << '\n' << "Bananas" << setw(10) << ban;
cout << '\n' << "Uvas " << setw(10) << uva;
Saída (resultado):
Bananas 2300.30
Uvas 58.48
Comentários
São utilizados com a finalidade de documentar o programa-fonte. Eles não são tratados pelo compilador.
Os símbolos utilizados são:
Símbolo
Exemplo
/* e */
/* comentario delimitado por esses símbolos pode estender-se por várias linhas */
//
// conhecido como comentário de linha
Exemplo de um algoritmo
Problema
Calcular a média aritmética de três notas fornecidas pelo usuário e imprimir o resultado.
Pré-algoritmo
1. ler três notas para as variáveis nt1, nt2, nt3;
2. efetuar o cálculo da média, implicando o valor à variável media;
3. apresentar a média contida na variável media.
Diagrama de blocos (solução do algoritmo)
Pseudocódigo
algoritmo calcMedia
declare nt1, nt2, nt3, media real
escreva ('Informe as tres notas:')
leia (nt1,nt2,nt3)
media <-- (nt1 + nt2 + nt3) / 3
escreva ('Média aritmética: ', media)
fim algoritmo
Implementação em C++
Um programa ou função em C++ tem a seguinte estrutura:
#include é uma diretiva de compilação que inclui no programa códigos de arquivo pré-definido nomeado entre os símbolos < e >.
Diretivas são instruções dadas ao pré-processador e são iniciadas com o caractere #. Conhecidas também como arquivos-cabeçalho.
Aplicações de console
Os exercícios serão desenvolvidos no modo console do sistema operacional para a interação com o usuário. Na criação do projeto deve-se selecionar a opção “Win32 Console Application” para que as operações de entrada e saída de dados sejam realizadas através da janela do MS-DOS.
Bibliografia
ASCENCIO, Ana Fernanda Gomes, CAMPOS, Edilene Aparecida Veneruchi de. Fundamentos da programação de computadores : algoritmos, Pascal e C/C. São Paulo : Prentice Hall, 2002. xviii, 355p.
FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de programação : a construção de algoritmos e estruturas de dados. 2.ed. São Paulo : Makron Books, 2000. 197p.
JAMSA, Kris A. Aprendendo C. São Paulo : Makron Books do Brasil, 1999. 271p.
MIZRAHI, Victorine Viviane. Treinamento em linguagem C. Sao Paulo : Makron, 1994. v.
BERRY, John Thomas. Programando em C. Sao Paulo : Makron Books, 1991. xvi, 385p.
UCCI, Waldir; SOUSA, Reginaldo Luiz; KOTANI, Alice Mayumi, et al. . Lógica de programação : os primeiros passos. 8.ed. Sao Paulo : Erica, 1999. 339p.