Programação II
Leandro Tonietto Algoritmos e Programação em C++ Curso de Segurança da Informação ltonietto@unisinos.br http://www.inf.unisinos.br/~ltonietto/tsi/ica/programacao2.pdf out-08
Introdução
O programa não funciona apenas com números e
textos, é necessário guardar valores em um momento para serem utilizados em outro.
Compiladores operam de maneira diferente de
acordo com os tipos de dados.
Comentários favorecem a compreensão do
código-fonte. Além disso, a organização do código em blocos, favorece a organização e definição de escopo de código dos comandos.
Dados
Dados são informações sobre alguém ou alguma
coisa. São atributos ou campos de determinados objetos ou entidades do mundo real.
Por exemplo:
Nome, salário, endereço, nascimento, cor preferida e etc.
Quando se está modelando e programando um
sistema, o programador deve se perguntar sobre quais são os atributos ou campos envolvidos no problema.
Dados
Exemplo:
O problema em questão é emitir um relatório com os
“olerites” da folha de pagamento de uma empresa. Quais são os campos necessários para fazer este relatório?
São necessários os seguintes campos por funcionário:
Nome, identificação funcional, cargo, valor/hora, carga
horária de trabalhada, atributos de arrecadação (IRRF, INSS, FGTS e etc.), entre outros específicos da empresa.
Podem ser necessários outros atributos que são comuns a
todos os funcionários e, portanto, são atributos da empresa:
Nome da empresa, CNPJ e etc.
Além disso, atributos específicos do relatório em questão:
Processamento com dados
Os dados são entendidos de acordo com o
seu tipo pelo compilador.
Por exemplo, quando tem-se uma soma, os tipos
de dados suportados são numéricos, não possível somar caracteres, a princípio.
Para fazer o cálculo de raiz quadrada, é
necessário se utilizar dados do tipo ponto flutuante.
Tipos de Dados
Todos os dados possuem algum tipo específico de dado. Um domínio
de abrangência.
Os compiladores possuem instruções específicas para cada tipo de
dado.
Inclusive, a própria aplicação possui tratamento diferenciado de acordo
com o tipo de informação.
Tipos de dados primitivos ou simples: aqueles nativos ao compilador e
não são combinações de outros tipos. São atômicos.
Tipos de dados estruturados: são composição de dados primitivos ou
outros estruturados para formar uma estrutura maior significativa. Por exemplo, podemos considerar o tipo de dado Cor. Uma cor, no
computador, é representada com a combinação de três componentes básicas de cor RGB (red-green-blue ou vermelho-verde-azul). Não existe nenhum tipo primitivo para cor, então é necessário se utilizar da combinação de três bytes para formar uma cor (veremos mais em tipos de dados compostos).
Tipos de Dados básicos
Char: representa um caractere o símbolo da tabela ASCII. Um char é um elemento
desta tabela, por exemplo o caractere da posição 65 da tabela ASCII é o ‘A’ (letra a maiúscula). Utilizados para representar letras simples ou combinados para formar cadeias de caracteres (string). Caracteres são representados por símbolos entre aspas simples (‘ ’) ou através de seu número na tabela ASCII. As strings são representadas entre aspas duplas (“ ”).
Por exemplo, um nome ou texto é formado pela concatenação de diversos caracteres
(char): “Fulano” é a junção dos caracteres ‘F’(70), ‘u’(117), ‘l’(108), ‘a’(97), ‘n’(110) e ‘o’(111).
Perceba que as letras possuem valores diferentes sua representação maiúscula e
minúscula. Por exemplo, a letra ‘A’ (maiúscula) é o número 65 da tabela ASCII e a correspondente minúscula ‘a’ é o número 97. Por isto na maioria das linguagens de programação a palavra “Fulano” é diferente de “fulano”, pois como palavras são comparadas letra-a-letra, haveria uma diferença entre elas, pois ‘F’ e ‘f’. Esta característica de funcionamento chama-se “case-sensitive” (sensível ao caso)
As strings, ao contrário do exposto no primeiro parágrafo, não tipos de dados atômicos, mas
são longe a maior utilidade para o tipo de dados char.
Os caracteres possuem precisão de um byte, portanto, com valores entre 0 e 255, inclusive. Exemplos de tipos de variáveis char e string:
Char: sexo, tipo de pessoa, tipo de contato, nota (quando’A, B, C, D ou E). Normalmente,
quando a faixa de valores possíveis para o dado é pequena e/ou são letras.
String: nome, endereço, descrição e etc. Quais atributos que sejam formados por palavras,
Tipos de Dados básicos
Byte: representa um número de 256 valores
possíveis (-128 a 127). Normalmente, usado
na gravação de bytes em áreas de memória,
transferência de dados, representação de
canais de cores em imagens e etc.
Associado a gravação de streams (áreas de
memória em bytes)
Exemplo:
Para representar uma imagem em tons-de-cinza,
Tipos de Dados básicos
Int: tipo de dado numérico, com possibilidade de representar 232
(4.294.967.296) valores inteiros, de -2.147.483.648 a 2.147.483.647.
Tipos numéricos são utilizados em expressões aritméticas (soma,
subtração, multiplicação, divisão e módulo)
Os números representam quantidade ou valor e tem tratamento
diferenciado em relação aos dados alfanuméricos.
Por exemplo, ‘1’ é diferente de 1; o primeiro é o símbolo gráfico ‘1’ (um char
ou dígito numérico) e o segundo é a quantidade ou valor 1. Quando temos o texto “1.024”, temos apenas uma junção dos caracteres ASCII: ‘1’(49) ‘.’(46) ‘0’(48) ‘2’(50) ‘4’(52), o que completamente diferente do valor ou número 1024.
Quando somamos 1024 + 1024, o resultado esperado é 2048. Se tentarmos
“1.024” + “1.024”, alguns compiladores acusaram erros, pois não é possível somar dois textos. Embora, em algumas linguagens a soma de textos
signifique a concatenação dos mesmos: “1.0241.024”
Exemplos de dados numéricos do tipo int:
Número de matrícula, quantidade de funcionários, identificador único de
Tipos de Dados básicos
Long: tipo de dado numérico de dupla precisão, com
possibilidade de representar 264 (18.446.744.073.709.551.616)
valores inteiros, de
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
Tem as mesmas características dos int, porém por serem
representados em 64 bits, possuem uma faixa de representação muito maior. Em contrapartida ocupam o dobro de espaço para armazenamento.
Exemplos de dados numéricos do tipo long:
CPF ou CNPJ (sem máscara do formato, apenas números), identificador único para tabelas/arquivos muito extensos,
representação de tempo (com dia, mês, ano, horas, minutos, segundos e milissegundos), acumulador de valores e etc.
Tipos de Dados básicos
Float: tipo de dado numérico de com precisão de ponto-flutuante,
com possibilidade de representar 232 (4 bytes). A faixa de
valores depende da quantidade de dígitos da parte inteira x dígitos de precisão.
Os números representados neste tipo de dado são os números
reais, portanto, além dos inteiros, também são permitidos os números com frações. Exemplo: 1.5f, 3.0f, 1.3333f,
1.82f e etc. Usa-se o ponto para separação da parte inteira da fracionada. O sufixo “f” é utilizado para diferenciar float de
double.
Exemplos de dados numéricos do tipo float:
Ângulo, distância em metros, altura, peso e etc. Normalmente, números reais com uma faixa de representação pequena; caso contrário utilize double.
Tipos de Dados básicos
Double: tipo de dado numérico de com dupla
precisão de ponto-flutuante, com possibilidade de
representar 264 (8 bytes). A faixa de valores
depende da quantidade de dígitos da parte inteira x dígitos de precisão.
Segue o padrão de representação utilizada pelo
float, porém sem o sufixo “f”. Exemplo: 10.0,
2.333, 5.75 e etc.
Exemplos de dados numéricos do tipo double:
Tipos de Dados básicos
Bool ou boolean: tipo de dado que representa um
estado binário: 0 ou 1, verdadeiro ou falso.
Valores possíveis são dependentes da linguagem
de programação. Na liguagem Java, por exemplo, utiliza-se apenas true (verdadeiro) e false (falso). Em C/C++ utiliza-se tanto true e false, quanto 1 e 0, respectivamente.
Exemplos de dados booleanos:
Status de objetos (ativo/inativo), sexo ou qualquer dado
Tipos de Dados compostos
São campos que são compostos por tipos primitivos
ou outros tipos compostos:
String: junto de vários caracteres
Cor: composto por três bytes (R, G e B)
Data: composto por três inteiros (dia, mês e ano)
Hora: composto por três inteiros (horas, minutos e
segundos)
Monetário: composto por um double com precisão de duas
casas decimais e um símbolo monetário (R$, US$, ...).
Exemplos de campos:
Nome, endereço, cor preferida, data de nascimento, data
Variáveis
São posições de memória que guardam valores para serem
“endereçados” ou referenciados no programa.
Por exemplo, uma variável pode guardar o resultado de uma
expressão. Esta variável pode tanto ser lida ou utilizada em uma outra expressão, como pode ter seu conteúdo alterado.
Uso de variáveis permite um processamento dinâmico, pois os
dados não necessitam serem constantes, eles podem ser calculados ou processados em tempo de execução.
Uma variável pode assumir qualquer em tempo de execução,
desde que dentro das limitações de tipo e precisão (domínio ou capacidade de representação)
Variáveis
As variáveis precisam ser declaradas e inicializadas.
Declaração de variáveis é dizer ao compilador qual o identificador que será utilizado para a variável e qual é o seu tipo. A sintaxe da declaração é dependente da linguagem de programação. Exemplo em C:
<tipo_de_dado> <nome_da_variável>[=<valor_incial>];
Inicialização é a atribuição de algum valor para colocar um estado inicial para a variável. Exemplo em C:
<nome_da_variável> = <valor>;
Para a disciplina nós utilizaremos o mesmo padrão de declaração e inicialização da linguagem C.
Variáveis
Exemplo:
Declaração de variável para acumular o salário
dos funcionários da empresa: double total;
Inicialização da variável é indispensável.
total = 0.0;
Imagine se o acumulador não possuísse valor
inicial zero, qual seria o valor ao final do processo?
Variáveis
Outros exemplos de declaração e uso de variáveis:
string nome;
nome = “Fulano”; int idade;
int quantidade = quantidade + 1; bool sexoMasculino = true;
char statusRegistro = ‘A’; float angulo;
angulo = 45.0f;
Variáveis
Repetindo, declaração de variáveis deve ser feita
passado o tipo de dado que ela deve ter e podendo já ser inicializada na declaração, ou não:
<tipo_de_dado> <nome_variável>[=<valor>];
string nome = “fulano”;
Inicialização durante a declaração é opcional
Comandos de linguagem
São instruções ou palavras reservadas da
linguagem de programação utilizadas para codificar (escrever) os programas.
Os comandos visam viabilizar a implementação da
seqüência de instruções de um fluxo de execução. Temos, no mínimo, um comando para cada tipo de elemento gráfico do fluxo.
Comando de Atribuição: representado pelo símbolo
“=” (igual) e tem o sentido de variável “recebe” algum valor. Sintaxe:
Comandos de linguagem
Desvio condicional de fluxo:
Instrução que permite mudar o fluxo de execução dada
uma condição. A condição é uma expressão booleana.
Possui duas possibilidades de execução (desvio de fluxo).
Uma caso a expressão seja verdadeira e outra caso contrário.
Sintaxe:
SE <expressao_bool> ENTAO
<bloco de instruções caso o resultado da expressão seja verdadeiro>
SENAO
<bloco de instruções caso o resultado da expressão seja falso>
Comandos de linguagem
Exemplo. Verificar se um saldo está abaixo
de um limite e proceder processamento ou
imprimir uma mensagem adequada:
SE saldo < limite ENTAO
ESCREVER saldo, “ abaixo do limite”; SENAO
saldoConta = saldoConta – saldo; FIMSE
Comandos de linguagem
Exercício:
Fazer um programa que verifique qual de dois números é
o menor.
Fazer um programa que calcula o valor a ser recolhido na
fonte pagadora para desconto salarial de IR. O progrma deve solicitar o valor do salário e conforme a faixa de valor, deve utilizar um percentual de desconto diferente. Faixas:
Até 1200,00, IR é zero
De 1200,00 até 1500,00, o desconto será de 7% De 1500,00 até 2000,00, o desconto será de 15% De 2000,00 até 2500,00, o desconto será de 22% Acima de 2500,00, o desconto deve ser de 25%