© M@nso 2003 Introdução à programaçãoComputadores e programação I Linguagens de...

Preview:

Citation preview

© M@nso 2003

Introdução à programação Computadores e programação I

Linguagens de Linguagens de programaçãoprogramação

Introdução ao C

Introdução à programação Computadores e programação I

© M@nso 2004

SumárioSumário Execução de programas

interpretadores, compiladores Linguagem

Manipulação de informação Variáveis tipos de dados

Operadores aritméticos, lógicos

Leitura e escrita entrada e saída de dados

Selecção de instruções Instrução if Instrução Switch

Erros em programação

Introdução à programação Computadores e programação I

© M@nso 2004

Interpretação de ProgramasInterpretação de Programas

Basic, Java, Portugol

interpretadorinterpretador

Programa que Programa que converte as converte as instruções da instruções da linguagem de linguagem de alto nível em alto nível em instruções instruções máquina e as máquina e as executa.executa.

Programa que Programa que converte as converte as instruções da instruções da linguagem de linguagem de alto nível em alto nível em instruções instruções máquina e as máquina e as executa.executa.

Introdução à programação Computadores e programação I

© M@nso 2004

Compilação de programasCompilação de programas

C,C++, Pascal

Compilador (compiler)Compilador (compiler)

Programa que Programa que converte as converte as instruções da instruções da linguagem de alto linguagem de alto nível em instruções nível em instruções máquina formando máquina formando um programa um programa objectoobjecto

Programa que Programa que converte as converte as instruções da instruções da linguagem de alto linguagem de alto nível em instruções nível em instruções máquina formando máquina formando um programa um programa objectoobjecto

Ligador (linker)Ligador (linker)

Programa que Programa que reúne todos os reúne todos os programas objecto programas objecto e faz um programa e faz um programa executávelexecutável

Programa que Programa que reúne todos os reúne todos os programas objecto programas objecto e faz um programa e faz um programa executávelexecutável

ProgramasProgramas

Executados pelo Executados pelo sistema operativosistema operativo

Executados pelo Executados pelo sistema operativosistema operativo

© M@nso 2003

Introdução à programação Computadores e programação I

Introdução à linguagem Introdução à linguagem CC

Introdução à programação Computadores e programação I

© M@nso 2004

Porquê C++Porquê C++

É a base de linguagens de programação modernas

É um investimento Linguagem estandardizada Muitos programas escritos em C / C++

È uma linguagem genérica Serve para vários fins

É disciplinadora Programar com método

É eficiente Existem bons compiladores

Introdução à programação Computadores e programação I

© M@nso 2004

Ola mundoOla mundo #include <stdio.h>#include <stdio.h>

Biblioteca de funções de entrada e saida de dados int main(int argc, char* argv[])int main(int argc, char* argv[])

Função principalFunção principal { }{ }

Definição de um bloco de instruçõesDefinição de um bloco de instruções printf("ola mundo");printf("ola mundo");

escreverescrever return 0;return 0;

Retorno do programaRetorno do programaOlá mundoOlá mundo

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ printf("ola mundo")printf("ola mundo");; return 0return 0;;}}

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ printf("ola mundo")printf("ola mundo");; return 0return 0;;}}

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

Acções de um algoritmo computacional Manipular dados

Receber dados Guardar dados Imprimir dados

Executar instruções Fazer operações aritméticas Fazer operações lógicas Escolha entre várias instruções. Repetir um conjunto de instruções

Introdução à programação Computadores e programação I

© M@nso 2004

Tipos de dados em CTipos de dados em C

Simples Numéricos

inteiros reais

Caracter Lógico

Compostos Matrizes Estruturas Uniões

D0variável

11100 11100

D0variável

lógico

VERDADEIRO0100 0001

D0 variável caracter

A0100 0001

Variáveis Um nome Um Tipo Um só valor

A0 inteiro

50 000100 0001 0100 0001

Nome da variável

C Real

-3,14156100 0001 100 0001

Nome da variável

0100 0001 0100 0001

Introdução à programação Computadores e programação I

© M@nso 2004

Declaração de variáveisDeclaração de variáveis Tipo_de_dado nome_da_variável; Tipo_de_dado nome_da_variável = valor_inicial;• Tipo_de_dado nome_da_variável1,

nome_da_variável2, . . .;

NOTANOTA

A declaração das variáveis deve ser feita antes da sua utilizaçãoA declaração das variáveis deve ser feita antes da sua utilização

ExemplosExemplos

int int somasoma;;float float saldosaldo = = 0.00.0;;doule doule x, y, zx, y, z;;

int int somasoma;;float float saldosaldo = = 0.00.0;;doule doule x, y, zx, y, z;;

Introdução à programação Computadores e programação I

© M@nso 2004

Regras dos nomes de variáveisRegras dos nomes de variáveis Pode ser constituído por letras do alfabeto por

dígitos e pelo caracter _ (underscore) O primeiro caracter não pode ser um dígito As letras maiúsculas e minúsculas representam

caracteres diferentes Não pode ter o nome de uma palavra reservado da

linguagem Deve ser descritivo daquilo que armazena

Caso tenha mais que uma palavra utilizar o caracter _ para unir as palavras ou capitular as iniciais

Não é aconselhado A utilização de caracteres acentuados Começar por _ Ter apenas letras maiúsculas

Introdução à programação Computadores e programação I

© M@nso 2004

Palavras reservadas do CPalavras reservadas do C

Introdução à programação Computadores e programação I

© M@nso 2004

Atribuição de Valores – operador =Atribuição de Valores – operador =

NOTANOTA

O operado = é o operador de atribuição e significa que a variável passa a ter um novo valor (<- no portugol)

O operador == (igual) é o operador de comparação e devolve verdadeiro ou falso ( = no portugol)

O operado = é o operador de atribuição e significa que a variável passa a ter um novo valor (<- no portugol)

O operador == (igual) é o operador de comparação e devolve verdadeiro ou falso ( = no portugol)

ExemplosExemplos

soma soma == 10 ; 10 ;

saldo saldo == soma + 1;soma + 1;

area area == lado1 * lado2; lado1 * lado2;

soma soma == 10 ; 10 ;

saldo saldo == soma + 1;soma + 1;

area area == lado1 * lado2; lado1 * lado2;

variavel =

expressão;

Introdução à programação Computadores e programação I

© M@nso 2004

Atribuição de valoresAtribuição de valores Valores na Base:

Decimal numeração normal

00 22 63638383

Octal Começam por 0 (zero)

0000 0022 007777 00123123 Hexadecimal

Começam por 0x (zero xis) 0x0x00 0x0x22 0x0x3f3f 0x0x5353

atribuição do valor doze a xatribuição do valor doze a x

X = 12;X = 12;X = 014;X = 014;X = 0xC;X = 0xC;

X = 12;X = 12;X = 014;X = 014;X = 0xC;X = 0xC;

Introdução à programação Computadores e programação I

© M@nso 2004

Inteiros - intInteiros - int Sinal

signed – positivos e negativos 1 bit para representar o sinal

unsigned – apenas números positivos Tamanho

short – menor dimensão em bytes 2 bytes

long – maior dimensão em bytes 4 bytes

Exemplos unsigned short int x; signed short int y; unsigned long int total; long int votos; int nota;

NOTANOTApor defeito os inteiros são:

•signed•16 bits

•short•32 bits

•long

por defeito os inteiros são:

•signed•16 bits

•short•32 bits

•long

Introdução à programação Computadores e programação I

© M@nso 2004

Alcance dos inteirosAlcance dos inteiros

Introdução à programação Computadores e programação I

© M@nso 2004

exemplosexemplos Nota final da disciplina de IP

unsigned short int nota; unsigned short nota;

Soma das notas das disciplinas de uma aluno unsigned short int somaNotas; unsigned short somaNotas;

Número de segundos de vida de uma pessoa unsigned long int numMinutos; unsigned long numMinutos;

Diferença entre o número de segundos de duas pessoas

signed long difSegundos; long difsegundos;

Diferença entre o número de anos de duas pessoas signed short int difAnos; short difAnos;

Introdução à programação Computadores e programação I

© M@nso 2004

Números ReaisNúmeros Reais

Tipo float double

Representação Base e Mantissa

notação Notação corrente

1.23 .23 0.23 1.1.0

Notação científica 1.2E10 1.23e-15

Modificadores long

ExemploExemplo

float raio = .50;float raio = .50;long double taxa = 5E-2 ;long double taxa = 5E-2 ;

float raio = .50;float raio = .50;long double taxa = 5E-2 ;long double taxa = 5E-2 ;

base mantissa

102.8

NOTANOTA

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Introdução à programação Computadores e programação I

© M@nso 2004

Erro nos Números ReaisErro nos Números Reais

NOTANOTA

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Introdução à programação Computadores e programação I

© M@nso 2004

Caracteres (char)Caracteres (char) Ocupam um byte

256 caracteres disponíveis Representados por um número

Tabela ASCII Atribuição

Utilização do caracter plica (‘) char sexo = ‘m’;char sexo = ‘m’; char enter =‘\n’char enter =‘\n’

Utilização directa do código ASCII

char letra = 98; char letra = 98;

Modificadores signed unsigned

\a Sinal sonoro

\n New line

\r Carriage return

\v Vertical tabulation

\t Horizontal tabulation

\\ Caracter \

\’ Caracter ‘

\” Caracter “

\b Backspace

\0xff

Caracter 0xff ASCII

Caracteres especiais

Introdução à programação Computadores e programação I

© M@nso 2004

Tabela ASCIITabela ASCII

ExemploExemplo

char sexo;char sexo;

Sexo = ‘M’;Sexo = ‘M’;

Sexo = 77;Sexo = 77;

char sexo;char sexo;

Sexo = ‘M’;Sexo = ‘M’;

Sexo = 77;Sexo = 77;

Introdução à programação Computadores e programação I

© M@nso 2004

Definição de tipos - Definição de tipos - EnumeraçõesEnumerações

enum semana{ segunda=2, terca=3, quarta=4, quinta=5, sexta=6, sabado=7, domingo=8 };

segu

nda

terç

a

quar

ta

quin

ta

sext

a

saba

do

dom

ingo

-3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

Nome

Valor

Definição de nomes para valores Cores , Dias da semana , Meses, etc.

ExemploExemplo

enum semana teoricaIP, praticaIP;teoricaIP, praticaIP;teoricaIP = segunda;teoricaIP = segunda;praticaIP = teoricaIP +1 ;praticaIP = teoricaIP +1 ;

enum semana teoricaIP, praticaIP;teoricaIP, praticaIP;teoricaIP = segunda;teoricaIP = segunda;praticaIP = teoricaIP +1 ;praticaIP = teoricaIP +1 ;

Introdução à programação Computadores e programação I

© M@nso 2004

Definição de tipos - Definição de tipos - EnumeraçõesEnumerações

enum novo_tipo {nome_1=valor_1, nome_2, . . .,nome_n};novo_tipo nome_variavel = nome_x;

enum novo_tipo {nome_1=valor_1, nome_2, . . .,nome_n};novo_tipo nome_variavel = nome_x;

enum logica {falso, verdadeiro };enum logica condicao=verdadeiro;

NOTASNOTAS

•Quando omitimos o valor a enumeração toma o valor da anterior mais uma unidade.• Por defeito começam em zero

•Quando omitimos o valor a enumeração toma o valor da anterior mais uma unidade.• Por defeito começam em zero

enum Cores {verde= 0 , amarelo = 1, vermelho =2 };enum Cores semaforo = verde;

Introdução à programação Computadores e programação I

© M@nso 2004

Valores lógicos (bool)Valores lógicos (bool)

Dois valores definidos false (valor zero) true (um ou qualquer outro valor)

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

FA

LSO

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

-3 -2 -1 0 1 2 3 4 5 6 7 8

Nome

Valor

ExemploExemplo

bool aprovado, trabEstudante;bool aprovado, trabEstudante;aprovador = true;aprovador = true;trabEstudante = false;trabEstudante = false;

bool aprovado, trabEstudante;bool aprovado, trabEstudante;aprovador = true;aprovador = true;trabEstudante = false;trabEstudante = false;

Introdução à programação Computadores e programação I

© M@nso 2004

Definição de tipos - TypedefDefinição de tipos - Typedef

Definição de nomes para tipos

typedef tipo_de_dado novo_nome_do_tipo ;

Exemplos typedef unsigned long int int32;

definição de um novo tipo chamado int32

int32 somatorio; definicao de uma variável do tipo int32

Introdução à programação Computadores e programação I

© M@nso 2004

Tipos de dados do c++ BuilderTipos de dados do c++ Builder

tipotamanho(bits) Mínimo Máximo

unsigned char 8 0 255

char 8 -128 127

short int 16 -32,768 32,767

unsigned int 32 0 4,294,967,295

int 32 -2,147483648 2,147,483,647

unsigned long 32 0 4,294,967,295

enum 32 -2,147483648 2,147,483,647

long 32 -2,147483648 2,147,483,647

float 32 1.18  10^-38 < |X| < 3.40  10^38

double 64 2.23  10^-308 < |X| < 1.79  10^308

long double 80 3.37  10^-4932 < |X| < 1.18  10^4932

Introdução à programação Computadores e programação I

© M@nso 2004

ExercícosExercícos

Defina variáveis em C para manipular A média das notas de um ano lectivo O salário de um trabalhador O número de alunos de um país O saldo de uma conta bancária Número de dias entre duas datas O sexo de um aluno Factor rhesus do sangue (+ e -) A situação de uma aluno relativo à

aprovação A situação de uma aluno relativo á

matrícula.

© M@nso 2003

Introdução à programação Computadores e programação I

Entrada e saída de Entrada e saída de dadosdados

Introdução à programação Computadores e programação I

© M@nso 2004

Entrada e saida de dadosEntrada e saida de dados

scanf Entrada de dados pelo teclado

printf Saída de dado para a consola

scanf(“string de formato”, &&variavel , &&variavel ,…); scanf(“%f", &&altura); scanf(“%d", &&idade); scanf(“%f %d", &&altura, &&idade);

printf(“string de formato”, variavel , variavel ,…); printf(“ a altura é %f :", altura); printf(“ a idade é %d :", idade); printf(“\n altura: %f idade :%d \n", altura, idade);

Introdução à programação Computadores e programação I

© M@nso 2004

Formato de dados (I/O)Formato de dados (I/O) c c

caractercaracter s s

cadeia de caracterescadeia de caracteres d d

inteirointeiro f f

real no formato numéricoreal no formato numérico e e

real no formato cientificoreal no formato cientifico

u u sem sinal sem sinal

l l grandegrande

h h pequenopequeno

o o octaloctal

x x HexadecimalHexadecimal

%c Caracter char%s cadeias de caracteres char[]

%d numero decimal int%hd numero decimal pequeno (short) short int%ld numero decimal grande (long) long int%u numero decimal sem sinal unsigned int%hd numero decimal sem sinal pequeno unsigned short int%ld numero decimal grande sem sinal unsigned long int%o numero decimal em octal int%x numero decimal em hexadecimal int

%e numero real no formato cientifico ( 1.2e45) float%le numero real no formato cientifico grande (long) double%f numero real no formato numérico float%lf numero real double

Introdução à programação Computadores e programação I

© M@nso 2004

Programa gentilPrograma gentil

ExemploExemplo

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ int idade;int idade; printf(“qual a sua idade:”);printf(“qual a sua idade:”); scanf(“ scanf(“ %d%d ” , ” , &idade&idade);); printf(“parabens, voce tem printf(“parabens, voce tem %d%d anos“, anos“, idadeidade););}}

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ int idade;int idade; printf(“qual a sua idade:”);printf(“qual a sua idade:”); scanf(“ scanf(“ %d%d ” , ” , &idade&idade);); printf(“parabens, voce tem printf(“parabens, voce tem %d%d anos“, anos“, idadeidade););}}

Introdução à programação Computadores e programação I

© M@nso 2004

Ficheiros geradosFicheiros gerados

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

Acções de um algoritmo computacional Manipular dados

Receber dados Guardar dados Imprimir dados

Executar instruções Fazer operações aritméticas Fazer operações lógicas Escolha entre várias instruções. Repetir um conjunto de instruções

© M@nso 2003

Introdução à programação Computadores e programação I

OperadoresOperadores

Introdução à programação Computadores e programação I

© M@nso 2004

25 205 12

1

InteirosInteiros

Operadores unários - (sinal)

Operadores binários + (Soma) - (Subtracção) / (Divisão inteira) % (Módulo)

NOTANOTAQualquer operação entre inteiros devolve um inteiro

Qualquer operação entre inteiros devolve um inteiro

ExemploExemplo

25 - 2 = 23 25 - 2 = 23 --3 - 2 = -53 - 2 = -525 / 2 = 12 25 + 2 = 2725 / 2 = 12 25 + 2 = 2725 % 2 = 1 25 * 2 = 5025 % 2 = 1 25 * 2 = 50

25 - 2 = 23 25 - 2 = 23 --3 - 2 = -53 - 2 = -525 / 2 = 12 25 + 2 = 2725 / 2 = 12 25 + 2 = 2725 % 2 = 1 25 * 2 = 5025 % 2 = 1 25 * 2 = 50

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores unários – Pós fixoOperadores unários – Pós fixo

Operadores unários ++ (incremento) -- (decremento)

NotaNota

X++X++X = X+1X = X+1X++X++X = X+1X = X+1

NotaNota

X--X--X = X-1X = X-1X--X--X = X-1X = X-1

NotaNota

y = x++y = x++

y = xy = xx = x+1x = x+1

y = x++y = x++

y = xy = xx = x+1x = x+1

NotaNota

y = x--y = x--

y = xy = xx = x-1x = x-1

y = x--y = x--

y = xy = xx = x-1x = x-1

xx

3333yy

expressãoexpressão

y = x++;y = x++; y = x++;y = x++;

xx

4444yy

3333

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores unários – Pré fixoOperadores unários – Pré fixo

Operadores unários ++ (incremento) -- (decremento)

NotaNota

++X++XX = X+1X = X+1++X++XX = X+1X = X+1

NotaNota

--X--XX = X-1X = X-1--X--XX = X-1X = X-1

NotaNota

y = ++xy = ++x

x = x+1x = x+1y = xy = x

y = ++xy = ++x

x = x+1x = x+1y = xy = x

NotaNota

y = --xy = --x

x = x-1x = x-1y = xy = x

y = --xy = --x

x = x-1x = x-1y = xy = x

xx

3333yy

expressãoexpressão

y = --x;y = --x; y = --x;y = --x;

xx

2222yy

2222

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bitOperadores bit a bit

Manipulam directamente a representação binária dos números

e (and) &

ou (or) |

ou exclusivo (Xor) ^

Deslocamento à esquerda <<

Deslocamento à direita >>

OU 0 1

0 0 1

1 1 1

E 0 1

0 0 0

1 0 1

Multiplicação

Lógica

Multiplicação

Lógica

SomaLógica

SomaLógica

xor

0 1

0 0 1

1 1 0diferença

Lógica

diferençaLógica

0 0 0 0 0 1 1 0

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit - OROperadores bit a bit - OR

xx

91919191yy

121288121288

expressãoexpressão

z = x | y ;z = x | y ; z = x | y ;z = x | y ;

xx

91919191yy

121288121288

zz

zz

212199212199

OU 0 1

0 0 1

1 1 1

SomaLógica

SomaLógica

0 1 0 1 1 0 1 1 91

1 0 0 0 0 0 0 0 128|

1 1 0 1 1 0 1 1 219

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit - ANDOperadores bit a bit - AND

xx

90909090yy

20202020

expressãoexpressão

z = x & y ;z = x & y ; z = x & y ;z = x & y ;

xx

90909090yy

20202020

zz

zz

16161616

128 64 32 16 8 4 2 1

0 1 0 1 1 0 1 0 90

0 0 0 1 0 1 0 0 20&

0 0 0 1 0 0 0 0 16

E 0 1

0 0 0

1 0 1

Multiplicação

Lógica

Multiplicação

Lógica

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit - XOROperadores bit a bit - XOR

xx

90909090yy

20202020

expressãoexpressão

z = x ^ y ;z = x ^ y ; z = x ^ y ;z = x ^ y ;

xx

90909090yy

20202020

zz

zz

78787878

0 1 0 1 1 0 1 0 90

0 0 0 1 0 1 0 0 20^

0 1 0 0 1 1 1 0 78

xor

0 1

0 0 1

1 1 0diferença

Lógica

diferençaLógica

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit - DeslocamentoOperadores bit a bit - Deslocamento

xx

20202020yy

expressãoexpressão

y = x << y = x << 2;2; y = x << y = x << 2;2;

xx

20202020yy

80808080

0 0 0 1 0 1 0 0 20<< 2

0 1 0 1 0 0 0 0 80

•Algoritmo•deslocam-se os bites para a esquerda•os últimos bites perdem-se•introduzem-se zeros no inicio

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit - DeslocamentoOperadores bit a bit - Deslocamento

xx

20202020yy

expressãoexpressão

y = x >> y = x >> 2;2; y = x >> y = x >> 2;2;

xx

20202020yy

5555•Algoritmo

•deslocam-se os bites para a direita•os primeiros bites perdem-se•introduzem-se zeros no fim

0 0 0 1 0 1 0 0 20>>2

0 0 0 0 0 1 0 1 5

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores sobre reaisOperadores sobre reais

Aritméticos multiplicação divisão soma subtracção

C Real

-3,14156100 0001 100 0001

Nome da variável

0100 0001 0100 0001

mantissa expoente

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores compostosOperadores compostos

+= , -=,%=, *=, /=, >>=, <<=, &=, |=, ^= += , -=,%=, *=, /=, >>=, <<=, &=, |=, ^=

variável Operador= expressão Variavel = variavel operador expressão

exemplosexemplos

X+= 3;X+= 3;X = X+3;X = X+3;X+= 3;X+= 3;X = X+3;X = X+3;

exemplosexemplos

x/=y;x/=y;x = x /y;x = x /y;x/=y;x/=y;x = x /y;x = x /y;

exemplosexemplos

X*= 3;X*= 3;X = X*3;X = X*3;X*= 3;X*= 3;X = X*3;X = X*3;

exemplosexemplos

X|= y;X|= y;X = X | y;X = X | y;X|= y;X|= y;X = X | y;X = X | y;

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores sobre lógicosOperadores sobre lógicos

RELACIONAIS Maior

> Menor

< Igual

== Maior ou igual

>= Menor ou igual

<= Diferente

!=

LÒGICOS Conjunção

&& Disjunção

|| Negação

!

Introdução à programação Computadores e programação I

© M@nso 2004

AssociatividadeAssociatividade

Associatividade esquerda=> direita x + y + z

3 + z 7

z / x * y 2 * z

2

xx

2222yy

1111zz

4444rr

1111

Associatividade direita => esquerda r =x + y + z

7 r = 7 teste = !matriculado

teste = true x = -z

x=-4

matriculadomatriculado

falsefalsefalsefalsetesteteste

falsefalsefalsefalse

Introdução à programação Computadores e programação I

© M@nso 2004

Prioridade dos operadoresPrioridade dos operadores

Operadores Associatividade () esquerda para a direita ! - ++ -- direita para a esquerda * / % esquerda para a direita + - esquerda para a direita << >> esquerda para a direita < <= > >= esquerda para a direita == != esquerda para a direita & esquerda para a direita ^ esquerda para a direita | esquerda para a direita && esquerda para a direita || esquerda para a direita ?: direita para a esquerda = += -= *= /= %= &= ^= |= <<= >>= direita para a esquerda

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

Acções de um algoritmo computacional Manipular dados

Receber dados Guardar dados Imprimir dados

Executar instruções Fazer operações aritméticas Fazer operações lógicas Escolha entre várias instruções. Repetir um conjunto de instruções

Introdução à programação Computadores e programação I

© M@nso 2004

ExercíciosExercícios

Construa um programa que calcule a área de um rectangulo

Ler lado1Ler lado1

Area := lado1*lado2Area := lado1*lado2

InicioInicio

Programa Área do rectânguloPrograma Área do rectângulo

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ double Lado1, lado2, area;double Lado1, lado2, area; scanf(“%lf”, &lado1);scanf(“%lf”, &lado1); scanf(“%lf”, &lado2);scanf(“%lf”, &lado2); area = lado1 * lado2;area = lado1 * lado2; printf(“ area = %lf ”, area);printf(“ area = %lf ”, area);

}}

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ double Lado1, lado2, area;double Lado1, lado2, area; scanf(“%lf”, &lado1);scanf(“%lf”, &lado1); scanf(“%lf”, &lado2);scanf(“%lf”, &lado2); area = lado1 * lado2;area = lado1 * lado2; printf(“ area = %lf ”, area);printf(“ area = %lf ”, area);

}}

fimfim

Ler lado2Ler lado2

Escrever Area

Introdução à programação Computadores e programação I

© M@nso 2004

ExercíciosExercícios

Construa um programa que leia a nota teórica e a nota prática e imprima a nota final (não arredondada) da disciplina de IP

Nota de IPNota de IP#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ float nTeorica, nPratica, nFinal;float nTeorica, nPratica, nFinal; printf(“ introduza a nota teórica :“);printf(“ introduza a nota teórica :“); scanf(“%f”, &nTeorica);scanf(“%f”, &nTeorica); printf(“printf(“ introduza a nota prática:“);introduza a nota prática:“); scanf(“%f”, &nPratica);scanf(“%f”, &nPratica); nFinal = nTeorica * 0.6 + nPratica * 0.4;nFinal = nTeorica * 0.6 + nPratica * 0.4; printf(“A nota final e: %f “,nFinal);printf(“A nota final e: %f “,nFinal);}}

#include <stdio.h>#include <stdio.h>int main(int argc, char* argv[])int main(int argc, char* argv[]){{ float nTeorica, nPratica, nFinal;float nTeorica, nPratica, nFinal; printf(“ introduza a nota teórica :“);printf(“ introduza a nota teórica :“); scanf(“%f”, &nTeorica);scanf(“%f”, &nTeorica); printf(“printf(“ introduza a nota prática:“);introduza a nota prática:“); scanf(“%f”, &nPratica);scanf(“%f”, &nPratica); nFinal = nTeorica * 0.6 + nPratica * 0.4;nFinal = nTeorica * 0.6 + nPratica * 0.4; printf(“A nota final e: %f “,nFinal);printf(“A nota final e: %f “,nFinal);}}

Ler nTeoricaLer nTeorica

nFinal = nTeorica*0.6 +nPratica * 0.4

nFinal = nTeorica*0.6 +nPratica * 0.4

InicioInicio

fimfim

Ler nPraticaLer nPratica

Escrever nFinal

© M@nso 2003

Introdução à programação Computadores e programação I

Selecção de intruçõesSelecção de intruções

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção SimplesSelecção Simples

. . .

Se <condição> então

Instruções

fim_se

. . .

Se <condição> então

Instruções

fim_se

CondiçãoCondição

Bloco deInstruções

Bloco deInstruções

FluxogramaFluxograma

Se x > 0 então

escrever “numero:”

ler numero

fim_se

Se x > 0 então

escrever “numero:”

ler numero

fim_se

ExemploExemplo

V

C++C++

If (condição)If (condição){{ intrução;intrução; intrução;intrução; intrução;intrução; . . .. . .}}

If (condição)If (condição){{ intrução;intrução; intrução;intrução; intrução;intrução; . . .. . .}}

Um “Bloco de instruções” é limitado por chavetas { }

Um “Bloco de instruções” é limitado por chavetas { }

Linguagem estruturadaLinguagem estruturada

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção Simples (exemplo)Selecção Simples (exemplo)

A empresa X faz um desconto de 15% em todas as facturas cujo total ultrapasse 1000 euros. Construa um programa que receba o total da factura e imprima o valor a pagar

A empresa X faz um desconto de 15% em todas as facturas cujo total ultrapasse 1000 euros. Construa um programa que receba o total da factura e imprima o valor a pagar

ExemploExemploInicioInicio

totalFactura>10000

totalFactura>10000

Ler totalFacturaLer totalFactura

totalFactura =totalFactura *0.85

totalFactura =totalFactura *0.85

FimFim

v

totalFactura

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção Simples (exemplo)Selecção Simples (exemplo)

Calculo do total da facturaCalculo do total da factura

#include <stdio.h>#include <stdio.h>int main(int argc, char* int main(int argc, char* argv[])argv[]){{ float totalFactura; scanf(“%f”, &totalFactura); if( totalFactura > 1000.0) { totalFactura*= 0.85; } printf(“ %f “, totalFactura);}}

#include <stdio.h>#include <stdio.h>int main(int argc, char* int main(int argc, char* argv[])argv[]){{ float totalFactura; scanf(“%f”, &totalFactura); if( totalFactura > 1000.0) { totalFactura*= 0.85; } printf(“ %f “, totalFactura);}}

NOTANOTASe o bloco tiver apenas uma instrução podem omitir-se as chavetas

Se o bloco tiver apenas uma instrução podem omitir-se as chavetas

Introdução à programação Computadores e programação I

© M@nso 2004

Visibilidade das variáveisVisibilidade das variáveis

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura); if( totalFactura > 1000){ double desconto = totalFactura* 0.85; totalFactura -= desconto; } printf(“%f”, totalFactura); return 0;}

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura); if( totalFactura > 1000){ double desconto = totalFactura* 0.85; totalFactura -= desconto; } printf(“%f”, totalFactura); return 0;}

Visibilidade das variáveis:•Desde que são declaradas•Até final do bloco

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção em AlternativaSelecção em Alternativa

. . .

Se <condição> entao

Instruções

Senao

Instruções

Fim_se

. . .

Se <condição> entao

Instruções

Senao

Instruções

Fim_se

Linguagem estruturadaLinguagem estruturada

CondiçãoCondição

InstruçõesInstruções

FluxogramaFluxograma

Se numero>0 então

escreve “positivo”

Senão

escreve “negativo”

Fim_se

Se numero>0 então

escreve “positivo”

Senão

escreve “negativo”

Fim_se

ExemploExemplo

V

InstruçõesInstruções

F

C++C++

if (condição)if (condição){{ intrução1;intrução1; . . .. . .}}else else {{ intrução2;intrução2; . . .. . .}}

if (condição)if (condição){{ intrução1;intrução1; . . .. . .}}else else {{ intrução2;intrução2; . . .. . .}}

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção em Alternativa (exemplo)Selecção em Alternativa (exemplo)

25 205 12

1

Construa um programa que imprima “Par” ou “Impar” consoante o número introduzido pelo utilizador o é ou não.

Construa um programa que imprima “Par” ou “Impar” consoante o número introduzido pelo utilizador o é ou não.

ExercícioExercício

128 64 32 16 8 4 2 1

0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 1 10 0 0 0 0 0 1 0 20 0 0 0 0 0 1 1 30 0 0 0 0 1 0 0 40 0 0 0 0 1 0 1 50 0 0 0 0 1 1 0 6

0 0 0 0 0 0 0 1&

0 0 0 0 0 0 0 X

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção Simples (exemplo)Selecção Simples (exemplo)

Programa par ou imparPrograma par ou impar

main()main(){{ int numero; printf( “ numero :”); scanf(“%d”,&numero); if( numero % 2 == 0) printf(“ O numero é par”); else printf(“ o número é impar”); }}

main()main(){{ int numero; printf( “ numero :”); scanf(“%d”,&numero); if( numero % 2 == 0) printf(“ O numero é par”); else printf(“ o número é impar”); }}

25 205 12

1

n % 2 = 0n % 2 = 0

VF

Fim

Inicio

Ler nLer n

ImparPar

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção encadeadaSelecção encadeada

Construa um programa que imprima o maior de três número introduzido pelo utilizador

Construa um programa que imprima o maior de três número introduzido pelo utilizador

ExercícioExercício

V1 > v2 eV1 > v3

V1 > v2 eV1 > v3

Maior=v1Maior=v1

V2>v3V2>v3

Maior=v2

Maior=v2 Maior=v3Maior=v3

ss

ss

nn

nn

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção encadeada (exemplo)Selecção encadeada (exemplo)

Programa maior de trêsPrograma maior de três

int main(int argc, char* argv[])int main(int argc, char* argv[]){{ int v1, v2; v3;int v1, v2; v3; int maior;int maior; scanf(“ %d %d %d “, &v1, &v2, &v3);scanf(“ %d %d %d “, &v1, &v2, &v3); ifif( v1 > v2 && v1 > v3)( v1 > v2 && v1 > v3) maior= v1;maior= v1; elseelse {{ ifif( v2 > v3)( v2 > v3) maior= v2;maior= v2; elseelse maior=v3;maior=v3; }} printf(“ O maior é %d :”, maior);printf(“ O maior é %d :”, maior); return 0;return 0;}}

int main(int argc, char* argv[])int main(int argc, char* argv[]){{ int v1, v2; v3;int v1, v2; v3; int maior;int maior; scanf(“ %d %d %d “, &v1, &v2, &v3);scanf(“ %d %d %d “, &v1, &v2, &v3); ifif( v1 > v2 && v1 > v3)( v1 > v2 && v1 > v3) maior= v1;maior= v1; elseelse {{ ifif( v2 > v3)( v2 > v3) maior= v2;maior= v2; elseelse maior=v3;maior=v3; }} printf(“ O maior é %d :”, maior);printf(“ O maior é %d :”, maior); return 0;return 0;}}

Introdução à programação Computadores e programação I

© M@nso 2004

ExercícioExercício

Contrua um programa que solicite ao utilizador a letra correspondente ao estado civil (S C D V ) e imprima por extenso o mesmo ou erro no caso de não ser um caractér válido

Contrua um programa que solicite ao utilizador a letra correspondente ao estado civil (S C D V ) e imprima por extenso o mesmo ou erro no caso de não ser um caractér válido

ecivilecivil

InicioInicio

ecivil=secivil=s

nãonão

Estado = SolteiroEstado = Solteiro

simsim

ecivil=cecivil=c

Estado = casadoEstado = casado

ecivil=decivil=d

Estado =divorciadoEstado =divorciado

simsimnãonão

ecivil=vecivil=v

Estado = viuvoEstado = viuvo

simsim

Estado = ERROEstado = ERRO

naonao

nãonão simsim

estado FimFim

Introdução à programação Computadores e programação I

© M@nso 2004

ExercícioExercício

Estado civilEstado civilmain()main(){{ char ECivil; scanf(“%c”,&ECivil); if( ECivil ==‘S’) printf( “ Solteiro”); else if (ECivil ==‘C’ )

printf(“ Casado”); else if ( ECivil == ‘D)

printf(“Divorciado”); else if(ECivil == ‘V’)

printf(“Viuvo”); else

printf(“ERRO”); }}

main()main(){{ char ECivil; scanf(“%c”,&ECivil); if( ECivil ==‘S’) printf( “ Solteiro”); else if (ECivil ==‘C’ )

printf(“ Casado”); else if ( ECivil == ‘D)

printf(“Divorciado”); else if(ECivil == ‘V’)

printf(“Viuvo”); else

printf(“ERRO”); }}

ecivilecivil

InicioInicio

ecivil=secivil=s

nãonão

Estado = SolteiroEstado = Solteiro

simsim

ecivil=cecivil=c

Estado = casadoEstado = casado

ecivil=decivil=d

Estado =divorciadoEstado =divorciado

simsimnãonão

ecivil=vecivil=v

Estado = viuvoEstado = viuvo

simsim

Estado = ERROEstado = ERRO

naonao

nãonão simsim

estado FimFim

Introdução à programação Computadores e programação I

© M@nso 2004

Selecção MúltiplaSelecção Múltipla

switchswitch

switch ( expressão)switch ( expressão){{ case constante1 :case constante1 : intruções;intruções; break;break; case constante2 :case constante2 : intruções;intruções; break;break; . . . . . . case constanten :case constanten : intruções;intruções; break;break; default:default: intruções;intruções;

}}

switch ( expressão)switch ( expressão){{ case constante1 :case constante1 : intruções;intruções; break;break; case constante2 :case constante2 : intruções;intruções; break;break; . . . . . . case constanten :case constanten : intruções;intruções; break;break; default:default: intruções;intruções;

}}

ecivilecivilss cc …… defeitodefeito

estado

ecivilecivil

InicioInicio

Estado = solteiroEstado = solteiro

Estado = casadoEstado = casado

Estado = ERROEstado = ERRO

FimFim

Estado = …Estado = …

Introdução à programação Computadores e programação I

© M@nso 2004

ExercícioExercícioEstado civilEstado civil

#include <iostream.h>#include <iostream.h>main(){main(){ char ECivil;char ECivil; scanf(“%c”,&ECivil); switch ( ECivil)switch ( ECivil) {{ case ‘S’ :case ‘S’ : printf( “solteiro”);printf( “solteiro”); break;break;

case ‘C’ :case ‘C’ : printf(printf(“casado”);“casado”);

break;break;case ‘D’ :case ‘D’ :

printf(printf(“Divorciado”);“Divorciado”); break;break;

case ‘V’ :case ‘V’ : printf(printf(“Viuvo”);“Viuvo”); break;break;

default :default : printf(printf(“ERRO”);“ERRO”); }}}}

#include <iostream.h>#include <iostream.h>main(){main(){ char ECivil;char ECivil; scanf(“%c”,&ECivil); switch ( ECivil)switch ( ECivil) {{ case ‘S’ :case ‘S’ : printf( “solteiro”);printf( “solteiro”); break;break;

case ‘C’ :case ‘C’ : printf(printf(“casado”);“casado”);

break;break;case ‘D’ :case ‘D’ :

printf(printf(“Divorciado”);“Divorciado”); break;break;

case ‘V’ :case ‘V’ : printf(printf(“Viuvo”);“Viuvo”); break;break;

default :default : printf(printf(“ERRO”);“ERRO”); }}}}

Introdução à programação Computadores e programação I

© M@nso 2004

ExercícioExercício

Estado civilEstado civilswitch ( ECivil)switch ( ECivil) {{

. . . . . . case ‘d’ :case ‘d’ :

case ‘D’ :case ‘D’ : printf(printf( “Divorciado”); “Divorciado”); break;break; . . .. . . }}

switch ( ECivil)switch ( ECivil) {{

. . . . . . case ‘d’ :case ‘d’ :

case ‘D’ :case ‘D’ : printf(printf( “Divorciado”); “Divorciado”); break;break; . . .. . . }}

NOTANOTAA escolha termina:

•quando chegar ao fim

•quando encontrar a instrução break

A escolha termina:

•quando chegar ao fim

•quando encontrar a instrução break

Introdução à programação Computadores e programação I

© M@nso 2004

ExercíciosExercícios

Construa um programa que indique se dois números introduzidos pelo utilizador são múltiplos um do outro.

Construa um programa que calcule as raízes de uma equação de 2º grau.

Altere o programa anterior para calcular as raízes reais e imaginárias.

© M@nso 2003

Introdução à programação Computadores e programação I

ErrosErros

Introdução à programação Computadores e programação I

© M@nso 2004

Erros programasErros programas Erros de especificação

Não compreendemos o problema Erros Lógicos

O algoritmo está errado Erros de sintaxe

O algoritmo está mal programado Erros de ligação

Bibliotecas referenciadas que não existem Erros de execução

Dados mal introduzidos

Os erros são a base da experiência.

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de especificaçãoErros de especificação

Construir um programa que as calcule as interacções do spin de um electrão num campo gravitacional desconhecido dado o número de mesões e fermiões pertencentes ao meio.

Introdução à programação Computadores e programação I

© M@nso 2004

Erros LógicosErros Lógicos

Solteiro casado ou erro

ecivilecivil

InicioInicio

ecivil=secivil=s

nãonão

Estado = SolteiroEstado = Solteiro

simsim

nãonão

estado

FimFim

ecivil=cecivil=c

Estado = casadoEstado = casado

simsim

Estado = casadoEstado = casado

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Escrita ambígua

if(m == 0)     if(n == 0)         printf("m e n são zero.“); else     printf("m não é zero.“);

if(m == 0)     if(n == 0)         printf("m e n são zero.“); else     printf("m não é zero.“);

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Esquecer as chavetas

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura); if( totalFactura > 1000) double desconto = totalFactura* 0.85; totalFactura -= desconto; printf(“%f”, totalFactura); return 0;}

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura); if( totalFactura > 1000) double desconto = totalFactura* 0.85; totalFactura -= desconto; printf(“%f”, totalFactura); return 0;}

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Colocar um ; a seguir ao if ou else

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura);

if( totalFactura > 1000) ; { double desconto = totalFactura* 0.85; totalFactura -= desconto; } printf(“%f”, totalFactura); return 0;}

int main(int argc, char* argv[]){ float totalFactura; sacanf(“ %f “, &totalFactura);

if( totalFactura > 1000) ; { double desconto = totalFactura* 0.85; totalFactura -= desconto; } printf(“%f”, totalFactura); return 0;}

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Esquecer o break; no ciclo switch

Estado civilEstado civil

switch ( ECivil)switch ( ECivil) {{ case ‘S’ :case ‘S’ : printf( “solteiro”);printf( “solteiro”);

case ‘C’ :case ‘C’ : printf(printf(“casado”);“casado”);case ‘D’ :case ‘D’ :

printf(printf(“Divorciado”);“Divorciado”);case ‘V’ :case ‘V’ :

printf(printf(“Viuvo”);“Viuvo”);default :default :

printf(printf(“ERRO”);“ERRO”); }}

switch ( ECivil)switch ( ECivil) {{ case ‘S’ :case ‘S’ : printf( “solteiro”);printf( “solteiro”);

case ‘C’ :case ‘C’ : printf(printf(“casado”);“casado”);case ‘D’ :case ‘D’ :

printf(printf(“Divorciado”);“Divorciado”);case ‘V’ :case ‘V’ :

printf(printf(“Viuvo”);“Viuvo”);default :default :

printf(printf(“ERRO”);“ERRO”); }}

© M@nso 2003

Introdução à programação Computadores e programação I

ConclusãoConclusão

Introdução à programação Computadores e programação I

© M@nso 2004

Construção de programasConstrução de programas Especificação do problema

Compreender o problema Desenvolvimento do algoritmo

Especificar as entradas, saídas e uma forma de transformar as entradas em saídas

Tradução do algoritmo para uma linguagem de programação programar

Tradução do programa para linguagem máquina Compilar e linkar

Executar o programa testar