• Nenhum resultado encontrado

Introdução à Programação

N/A
N/A
Protected

Academic year: 2021

Share "Introdução à Programação"

Copied!
20
0
0

Texto

(1)

Introdução à Programação

Aula Teórica 1b: variáveis e tipo de dados em C

Marco Giunti

(2)

Variáveis e linguagens de programação

A memoria

A 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)!

(3)

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!

(4)

Variáveis e linguagens de programação

Variáveis versus constantes

O 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

(5)

Variáveis: conceito e pratica

Variáveis e linguagens de programação

Variáveis versus constantes

E 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

(6)

Tipos de dados de uma variável

Diferencias na informação

Em 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

(7)

Tipos: o que são? Para que servem

Tipos de dados de uma variável

Números e strings

O 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

(8)

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

(9)

Tipos: o que são? Para que servem

Tipos de dados de uma variável

A abstracção de tipo

O 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

(10)

C: uma linguagem de programação tipicada

Papel dos tipos

Um 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.

(11)

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.

(12)

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): <, >, <=, >=, ==, ! =

(13)

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

(14)

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?

(15)

Tipos inteiros

Tipos de valores inteiros do C

Qualicadores

Há 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}.

(16)

Tipos de valores inteiros do C

Tipos int

O 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

(17)

Tipos inteiros

Tipos de valores inteiros do C

Tipos int: alguns conjuntos denotados

Assumindo 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

(18)

Tipos de valores reais do C

Tipos float e double

Os 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.

(19)

A motivação do utilizo dos tipos

Redo from start: a que serve isso?

A ajuda na prevenção dos erros

A 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!

(20)

Tipo void e erros

stackoverflow.org

I'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);

Referências

Documentos relacionados

A Unidade de Ponto Flutuante (FPU) possui 32 registradores 32-bits de precisão simples, 32 registradores 64-bits de precisão dupla e 16 registradores 128-bits de precisão

Logo, ao analisarmos os Princípios Constitucionais que formam o Estatuto Mínimo do Contribuinte, é necessário olharmos não apenas para a norma, mas também para a

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

ano do Ensino Fundamental. Ainda, levamos em consideração a Teoria dos Campos Conceituais. Assim, na escolha das questões demos importância a natureza das situações, os

Francisca (concentração), Dona Romana, Rua Barão do Bom Retiro, Rua Verna Magalhães, Rua Cabuçu e Rua D. Automóvel Club esquina com

É importante ter em conta que, mesmo que a empresa do prestador do serviço não esteja registada como sujeito passivo para efeitos de IVA no

● Temos 16 bits para indicar o tamanho, portanto podemos ter pacotes IP de até 64K bytes. ● Mas… e o limite da

ABSTRACT: The toxicological effects of crude ethanolic extracts (CEE) of the seed and bark of Persea americana have been analyzed on larvae and pupae of