Introdução à Programação
Aula Teórica 1b: variáveis e tipo de dados em CMarco Giunti
Variáveis e linguagens de programação
A memoriaA majoria dos linguagens de programação são baseados na mesma técnica: a manipulação dos valores conteúdos em uma variável
Em programação, uma variável é um nome atribuído a um espaço da memoria (central) do computador
E importante compreender que não é o programador que escolha o espaço, seja o endereço na memoria
O programador só declara que precisa de um espaço escolhendo um nome qualquer
Mais atenção: o nome escolhido e importante para o(s) programador(es)!
Variáveis: conceito e pratica
Variáveis e linguagens de programação
Exemplos de escolha errada do nome de uma variável A caso: fnskdlfn
Ninguém compreende
Só para mim: fofinha
O que acontece se quero a ajuda de um outro programador?
Críptica: ex-nop-b1-ife
Esta é uma pratica usual para ganhar tempo escrevendo o programa, mais no nal precisa de algumas regras para concordar sobre o signicado
Ambígua: comprimento
Há dois programadores de um sistema de gestão de docas: um acredita que o comprimento de um barco é em pés, o outro que é em metros!
Variáveis e linguagens de programação
Variáveis versus constantesO termine variável sugere que este espaço da memoria deveria ser destinado a registrar uma mutação de valores durante a computação
Exemplo: variável saldo para gravar o conteúdo efectivo em euro do vosso conto bancário
Inciso: sabiam que não e possível depositar uma moeda diferente no vosso (mesmo) conto? Que sejam as razoes, se isto fosse possível seria categórico resolver as ambiguidades da variável saldo. Ideias?
Mais os programadores precisam também de espaço para gravar informação que não muda
Exemplos: local-nascimento, pi para gravar o numero 3.14159, ensino-primario para gravar sim o não - esta é uma constante se o programa só considera adultos
Variáveis: conceito e pratica
Variáveis e linguagens de programação
Variáveis versus constantesE uma boa pratica não declarar como variável um endereço que não deve mudar de valores durante a computação E porque? Porque em programação faz sentido seguir uma lógica. Isso é de bastante ajuda quando o programa tem um comportamento inesperado
Exemplo de erro: declarar uma variável root para gravar root, o nome do administrador de sistema
Infelizmente, um erro de programação pode mudar o conteúdo da root e comprometer o sistema.
Quando acontece, e difícil descobrir as razoes de estes erros Solução: declarar root como uma constante
Tipos de dados de uma variável
Diferencias na informaçãoEm informática, e noção comum que a informação - pode ser em forma de cheiros - tem formatos diferentes
Exemplo: isto e o resultado de abrir a imagem conteúda no cheiro arduino.png com o editor de texto
Tipos: o que são? Para que servem
Tipos de dados de uma variável
Números e stringsO tipo de uma variável fala de isso, e de muito mais
No caso mais intuitivo, o tipo permite de distinguir os números das strings.
A declaração: string nome-utente
signica que a variável nome-utente contem uma string A declaração: int idade
signica que a variável idade contem um numero inteiro Intuitivamente, isto signica que não posso trocar os valores das variaveis entre ilhes porque são de natura diferente O tipos servem para impedir erros de esta natura nos programas
Inciso: funções e operações
Um esclarecimento (to be on the safe side)
Em matemática, uma função f é denotada na seguinte
maneira: f : X → Y
X é o domínio, Y e o contradomínio
Quando f é total cada elemento de X e associado a um elemento de Y , denotado: f (x) = y
x e o argumento, y e o valor da função no x Exemplo: square: R → R+
Uma função e uma operação quando X = Y : f : X → X
Exemplo: next: N → N
Na teoria dos tipos, são especialmente as operações que interessam
Tipos: o que são? Para que servem
Tipos de dados de uma variável
A abstracção de tipoO tipo de uma variável indica uma colecção de operações que pode ser efectuadas sobre o conteúdo da variável.Indica também as limitações dos valores que podem ser gravados Sao estas operações que descrevem a semântica dos valores de um dado tipo
Exemplo: os axiomas de Peano que denem os números naturais podem ser derivados a partir da função sucessor (cf. von Neumann)
As limitações também são importantes
No ano 1996 o foguete Ariane 5, lançado no espaço para a primeira vez, explodiu depois 40. Foi depois descoberto um ($500-million) erro gerado da o tentativo de por em uma variável integer de 16 bit um valor mais grande
C: uma linguagem de programação tipicada
Papel dos tiposUm tipo representa um conjunto nito de valores.Tem associado: um nome (palavra reservada do C),
um conjunto de literais, que denotam as constantes do conjunto que representa,
um conjunto de operações, que recebendo argumentos do tipo devolvem resultado desse tipo.
Exemplo: int n;
E possível utilizar a função abs com argumento n para calcular o valor absoluto de n
O C tem um conjunto de tipos de dados disponíveis (ditos primitivos) e suporta a denição de tipos pelo programador.
Tipos numéricos
Tipos primitivos do C
Os tipos de dados primitivos são
void designa a ausência de valor. Usa-se em funções sem parâmetros (domínio vazio) ou que não devolvem nada (contradomínio vazio).
Inteiros, que compreendem 3 subtipos:
int representa um conjunto de valores inteiros; um valor é codicado com pelo menos 16 bits (2 bytes), mas pode ter mais (32 ou mesmo 64 nas arquitecturas típicas de hoje); bool representa o conjunto dos valores lógicos true e false (internamente, 1 e 0); um valor é codicado com 1 byte. char representa um conjunto de caracteres; um valor é codicado com pelo menos 1 byte.
Reais (float), que representa um conjunto de valores reais; um valor é codicado com pelo menos 4 bytes.
Complexos (complex), que representa um conjunto de valores complexos; um valor é codicado com pelo menos 6 bytes.
Tipos de valores inteiros do C
O tipo boolÉ o tipo dos valores lógicos, ou booleanos (Boole foi um lógico). Os literais true e false são representados pelos valores inteiros 1 e 0.
As operações disponíveis são:
lógicas (recebem booleanos e devolvem booleanos):
negação ! (NOT), disjunção || (OR) ou conjunção && (AND) relacionais (recebem valores numéricos e devolvem booleanos): <, >, <=, >=, ==, ! =
Tipos inteiros
Tabela verdade
A mais básica tabela para a álgebra de Boole e a seguinte:
Para formulas mais complexas e bem devolver uma tabela ad-hoc para ser seguros que a formula descreve a condição intendida
Tabela verdade
Tabela de Boole para a formula do código
Regras para uma correcta compreensão de uma formula:
1 Fazer atenção e por parênteses para evitar ambiguidades
a && (b||c) e diferente da a && b || c
2 Escrever a tabela para todos os casos
a = 0, 1, b = 0, 1, c = 0, 1 (quantos são?) Talvez, a tabela permite de simplicar a formula
Exemplo: considerem a formula: a && (b || c) && !(c || a)
Esta formula e equivalente a false Porque?
Tipos inteiros
Tipos de valores inteiros do C
QualicadoresHá dois tipos de qualicadores de tipos em C: de sinal (signed ou unsigned); e
de comprimento (short, long ou long long). Cada tipo qualicado denota um conjunto de valores. Tipos char
O tipo inteiro char contém, se o compilador usar 1 byte para codicar valores do tipo, 28 =256 valores.
Cada valor numérico corresponde a um caracter, de acordo com uma tabela (por exemplo, a ASCII).
Pode ter associado um qualicador de sinal; por defeito, char é unsigned e denota o conjunto {0, . . . , 255}; signed char é o conjunto {−128, . . . , 127}.
Tipos de valores inteiros do C
Tipos intO tipo de dados inteiro int pode ter associados os dois tipos de qualicadores.
Há portanto 6 tipos (2x3) int:
signed ou unsigned short int; signed ou unsigned long int; signed ou unsigned long long int.
Por defeito, int é signed (sem qualicador de comprimento). O tipo dos naturais é unsigned int
Tipos inteiros
Tipos de valores inteiros do C
Tipos int: alguns conjuntos denotadosAssumindo 2 bytes para um short int, tem-se:
short (signed short int): {−32768, . . . , 32767} int (signed int): {−2147483648, . . . , 2147483647} long long int:
{−9223372036854775808, . . . , 9223372036854775807}
Operações (aritméticas): adição +, subtracção -, multiplicação *, divisão (inteira) /, resto da divisão %.
Os conjuntos de valores são percorridos circularmente: se uma operação dá um valor que extravaza os limites do conjunto, o resultado está no extremo oposto, na posição correspondente aos valores em que se ultrapassou o limite.
Exemplo: no tipo short tem-se que −32768 − 2 = 32766 e 32766 + 2 = −32768
Tipos de valores reais do C
Tipos float e doubleOs tipos de dados reais admitem um uso limitado dos qualicadores.
Há 3 tipos reais: float , double ou long double.
Um valor do tipo float é representado com no mínimo 4 bytes e 6 dígitos de precisão.
Um valor do tipo double é representado com no mínimo 8 bytes e 16 dígitos de precisão.
Um valor do tipo long double é representado com no mínimo 10 bytes e 20 dígitos de precisão.
Exemplos de literais: 3.14159, 12.3e56, -1e-2, 12.0, etc. Operações: aritméticas (adição, subtracção, multiplicação e divisão), trigonométricas, logaritmicas, etc.
A motivação do utilizo dos tipos
Redo from start: a que serve isso?
A ajuda na prevenção dos errosA impedir erros de programação causados da uma confusão na tipologia dos dados
Exemplo básico: void x();
O tentativo de efectuar a operação x()+1 da erro! O que signica dar erro?
Signica que um programa que contem esta operação nao compila. A consequência é que não e possível executar esta operação no sistema, porque é errada e pode ser perigosa para todo o sistema
Mais notam que estes erros, ainda os mais básicos, acontecem na pratica da programação!
Tipo void e erros
stackoverflow.orgI'm having trouble compiling some C code. When I compile, I get this error:
player.c: In function login:
player.c:54:17: error: void value not ignored as it ought to be This is the code of the error (segue o codigo).
Any way to bypass this kind of error? (Answer):
sp-err = sp-session-login(sess, username, password, remember-me);