Linguagens de programação - DEI/DEE - Intra Web...
Transcript of Linguagens de programação - DEI/DEE - Intra Web...
© M@nso 2003
Introdução à programação Computadores e programação I
Linguagens de programaLinguagens de programaççãoão
Introdução ao C
Introdução à programação Computadores e programação I
© M@nso 2004
SumSumááriorio
Execução de programasinterpretadores, compiladores
LinguagemManipulação de informação
Variáveistipos de dados
Operadoresaritméticos, lógicos
Leitura e escritaentrada e saída de dados
Selecção de instruçõesInstrução ifInstrução Switch
Erros em programação
Introdução à programação Computadores e programação I
© M@nso 2004
InterpretaInterpretaçção de Programasão de Programas
Basic, Java, Portugol
interpretadorinterpretadorPrograma que converte as instruções da linguagem de alto nível em instruções máquina e as executa.
Programa que Programa que converte as converte as instruinstruçções da ões da linguagem de linguagem de alto nalto níível em vel em instruinstruçções ões mmááquina e as quina e as executa.executa.
Introdução à programação Computadores e programação I
© M@nso 2004
CompilaCompilaçção de programasão de programas
C,C++, Pascal
Compilador (compiler)Compilador (compiler)
Programa que converte as instruções da linguagem de alto nível em instruções máquina formando um programa objecto
Programa que Programa que converte as converte as instruinstruçções da ões da linguagem de alto linguagem de alto nníível em instruvel em instruçções ões mmááquina formando quina formando um programa objectoum programa objecto
Ligador (linker)Ligador (linker)
Programa que reúne todos os programas objecto e faz um programa executável
Programa que rePrograma que reúúne ne todos os programas todos os programas objecto e faz um objecto e faz um programa executprograma executáávelvel
ProgramasProgramas
Executados pelo sistema operativo
Executados pelo Executados pelo sistema operativosistema operativo
© M@nso 2003
Introdução à programação Computadores e programação I
IntroduIntroduçção ão àà linguagem Clinguagem C
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 estandardizadaMuitos programas escritos em C / C++
È uma linguagem genéricaServe para vários fins
É disciplinadoraProgramar com método
É eficienteExistem bons compiladores
Introdução à programação Computadores e programação I
© M@nso 2004
OlaOla mundomundo
#include#include <<stdio.hstdio.h>>Biblioteca de funções de entrada e saida de dados
intint main(intmain(int argcargc, , char*char* argv[argv[])])FunFunçção principalão principal
{ }{ }DefiniDefiniçção de um bloco de instruão de um bloco de instruççõesões
printf(printf(""olaola mundo");mundo");escreverescrever
returnreturn 0;0;Retorno do programaRetorno do programa
Olá mundoOlá mundo
#include <stdio.h>int main(int argc, char* argv[]){
printf("ola mundo");return 0;
}
#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{
printf(printf(""olaola mundo")mundo");;returnreturn 00;;
}}
Introdução à programação Computadores e programação I
© M@nso 2004
Algoritmos computacionaisAlgoritmos computacionais
• Acções de um algoritmo computacionalManipular dados
Receber dadosGuardar dadosImprimir dados
Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha 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
SimplesNuméricos
inteirosreais
CaracterLógico
CompostosMatrizesEstruturasUniões
D0 variável
11100 11100
D0 variável lógico
VERDADEIRO0100 0001
D0 variável caracter
A0100 0001Variáveis
Um nomeUm TipoUm 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
DeclaraDeclaraçção de varião de variááveisveisTipo_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
ExemplosExemplosint soma;float saldo = 0.0;doule x, y, z;
intint somasoma;;floatfloat saldosaldo = = 0.00.0;;douledoule x, y, zx, y, z;;
Introdução à programação Computadores e programação I
© M@nso 2004
Regras dos nomes de variRegras dos nomes de variááveisveisPode ser constituído por letras do alfabeto por dígitos e pelo caracter _ (underscore)O primeiro caracter não pode ser um dígitoAs letras maiúsculas e minúsculas representam caracteres diferentesNã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 acentuadosComeç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
AtribuiAtribuiçção de Valores ão de Valores –– operador =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 = 10 ;
saldo = soma + 1;
area = lado1 * lado2;
soma soma == 10 ;10 ;
saldo saldo == soma + 1;soma + 1;
areaarea == lado1 * lado2;lado1 * lado2;
variavel = expressão;
Introdução à programação Computadores e programação I
© M@nso 2004
AtribuiAtribuiçção de valoresão de valores
Valores na Base:Decimal
numeração normal00 22 6363 8383
Octal Começam por 0 (zero)
0000 0022 007777 00123123Hexadecimal
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 = 014;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 Inteiros -- intint
Sinalsigned – positivos e negativos
1 bit para representar o sinal
unsigned – apenas números positivos
Tamanhoshort – menor dimensão em bytes
2 bytes
long – maior dimensão em bytes4 bytes
Exemplosunsigned 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 IPunsigned short int nota;unsigned short nota;
Soma das notas das disciplinas de uma alunounsigned short int somaNotas;unsigned short somaNotas;
Número de segundos de vida de uma pessoaunsigned long int numMinutos;unsigned long numMinutos;
Diferença entre o número de segundos de duas pessoassigned long difSegundos;long difsegundos;
Diferença entre o número de anos de duas pessoassigned short int difAnos;short difAnos;
Introdução à programação Computadores e programação I
© M@nso 2004
NNúúmeros Reaismeros Reais
Tipofloatdouble
Representação Base e Mantissa
notaçãoNotação corrente
1.23 .23 0.23 1. 1.0
Notação científica
1.2E10 1.23e-15
Modificadoreslong
ExemploExemplofloat raio = .50;long double taxa = 5E-2 ;floatfloat raio = .50;raio = .50;longlong doubledouble taxa = 5Etaxa = 5E--2 ;2 ;
base mantissa
102.8NOTANOTA
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 NErro nos Núúmeros Reaismeros 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 (Caracteres (charchar))Ocupam um byte
256 caracteres disponíveis
Representados por um númeroTabela ASCII
AtribuiçãoUtilização do caracter plica (‘)
charchar sexo = sexo = ‘‘mm’’;;charchar enterenter ==‘‘\\nn’’
Utilização directa do código ASCIIcharchar letra = 98; letra = 98;
Modificadoressignedunsigned
Caracter 0xff ASCII\0xffBackspace\bCaracter “\”Caracter ‘\’Caracter \\\
Horizontal tabulation
\tVertical tabulation\vCarriage return\rNew line\nSinal sonoro\a
Caracteres especiais
Introdução à programação Computadores e programação I
© M@nso 2004
Tabela ASCIITabela ASCII
ExemploExemplo
char sexo;
Sexo = ‘M’;
Sexo = 77;
charchar sexo;sexo;
Sexo = Sexo = ‘‘MM’’;;
Sexo = 77;Sexo = 77;
Introdução à programação Computadores e programação I
© M@nso 2004
DefiniDefiniçção de tipos ão de tipos -- EnumeraEnumeraççõesõ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 valoresCores , Dias da semana , Meses, etc.
ExemploExemplo
enum semana teoricaIP, praticaIP;teoricaIP = segunda;praticaIP = teoricaIP +1 ;
enum semana teoricaIPteoricaIP, , praticaIPpraticaIP;;teoricaIPteoricaIP = segunda;= segunda;praticaIPpraticaIP = = teoricaIPteoricaIP +1 ;+1 ;
Introdução à programação Computadores e programação I
© M@nso 2004
DefiniDefiniçção de tipos ão de tipos -- EnumeraEnumeraççõesõ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 lValores lóógicos (gicos (boolbool))
Dois valores definidosfalse (valor zero)true (um ou qualquer outro valor)
VE
RD
AD
EIR
O
VE
RD
AD
EIR
O
VE
RD
AD
EIR
O
FALS
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
VE
RD
AD
EIR
O
-3 -2 -1 0 1 2 3 4 5 6 7 8
Nome
Valor
ExemploExemplo
bool aprovado, trabEstudante;aprovador = true;trabEstudante = false;
boolbool aprovado, aprovado, trabEstudantetrabEstudante;;aprovador = aprovador = truetrue;;trabEstudantetrabEstudante = = falsefalse;;
Introdução à programação Computadores e programação I
© M@nso 2004
DefiniDefiniçção de tipos ão de tipos -- TypedefTypedef
Definição de nomes para tipos
typedef tipo_de_dado novo_nome_do_tipo ;
Exemplostypedef 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++ Tipos de dados do c++ BuilderBuilder
3.37 10^-4932 < |X| < 1.18 10^493280long double
2.23 10^-308 < |X| < 1.79 10^30864double
1.18 10^-38 < |X| < 3.40 10^3832float
2,147,483,647-2,14748364832long
2,147,483,647-2,14748364832enum
4,294,967,295032unsigned long
2,147,483,647-2,14748364832int
4,294,967,295032unsigned int
32,767-32,76816short int
127-1288char
25508unsigned char
MáximoMínimotamanho(bits)tipo
Introdução à programação Computadores e programação I
© M@nso 2004
ExercExercíícoscos
Defina variáveis em C para manipularA média das notas de um ano lectivoO salário de um trabalhadorO número de alunos de um paísO saldo de uma conta bancáriaNúmero de dias entre duas datasO sexo de um alunoFactor rhesus do sangue (+ e -)A situação de uma aluno relativo à aprovaçãoA situação de uma aluno relativo á matrícula.
© M@nso 2003
Introdução à programação Computadores e programação I
Entrada e saEntrada e saíída de dadosda de dados
Introdução à programação Computadores e programação I
© M@nso 2004
Entrada e Entrada e saidasaida de dadosde dados
scanfEntrada de dados pelo teclado
printfSaí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
caractercaracters s
cadeia de caracterescadeia de caracteresd d
inteirointeirof f
real no formato numreal no formato numééricoricoe 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>int main(int argc, char* argv[]){
int idade;printf(“qual a sua idade:”);scanf(“ %d ” , &idade);printf(“parabens, voce tem %d anos“, idade);
}
#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{
intint idade;idade;printf(printf(““qualqual a sua idade:a sua idade:””););scanf(scanf(““ %d%d ”” , , &idade&idade););printf(printf(““parabensparabens, , vocevoce tem tem %d%d anosanos““, , 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 computacionalManipular dados
Receber dadosGuardar dadosImprimir dados
Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha entre várias instruções.Repetir um conjunto de instruções
Introdução à programação Computadores e programação I
© M@nso 2004
25 205 121
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 -3 - 2 = -525 / 2 = 12 25 + 2 = 2725 % 2 = 1 25 * 2 = 50
25 25 -- 2 = 23 2 = 23 --3 3 -- 2 = 2 = --5525 / 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 unOperadores unáários rios –– PPóós fixos fixo
Operadores unários++ (incremento)-- (decremento)
NotaNotaX++X = X+1X++X++X = X+1X = X+1
NotaNotaX--X = X-1XX----X = XX = X--11
NotaNotay = x++
y = xx = x+1
y = x++y = x++
y = xy = xx = x+1x = x+1
NotaNotay = x--
y = xx = x-1
y = y = xx----
y = xy = xx = xx = x--11
xx333
yy
expressãoexpressãoy = x++;y = x++;y = x++;
xx444
yy333
Introdução à programação Computadores e programação I
© M@nso 2004
Operadores unOperadores unáários rios –– PrPréé fixofixo
Operadores unários++ (incremento)-- (decremento)
NotaNota++XX = X+1++X++XX = X+1X = X+1
NotaNota--XX = X-1----XXX = XX = X--11
NotaNotay = ++x
x = x+1y = x
y = ++xy = ++x
x = x+1x = x+1y = xy = x
NotaNotay = --x
x = x-1y = x
y = y = ----xx
x = xx = x--11y = xy = x
xx333
yy
expressãoexpressãoy = --x;y = y = ----x;x;
xx222
yy222
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>>
11110010OU
10100010E
MultiplicaçãoLógica
MultiplicaçãoLógica Soma
Lógica
SomaLógica
01110010xor
diferençaLógica
diferençaLógica0 0 0 0 0 1 1 0
Introdução à programação Computadores e programação I
© M@nso 2004
Operadores bit a bit Operadores bit a bit -- OROR
xx919191
yy128128128
expressãoexpressão
z = x | y ;z = x | y ;z = x | y ;
xx919191
yy128128128
zz
zz219219219
11110010OU
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 Operadores bit a bit -- ANDAND
xx909090
yy202020
expressãoexpressão
z = x & y ;z = x & y ;z = x & y ;
xx909090
yy202020
zz
zz161616
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
10100010E
MultiplicaçãoLógica
MultiplicaçãoLógica
Introdução à programação Computadores e programação I
© M@nso 2004
Operadores bit a bit Operadores bit a bit -- XORXOR
xx909090
yy202020
expressãoexpressão
z = x ^ y ;z = x ^ y ;z = x ^ y ;
xx909090
yy202020
zz
zz787878
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
01110010xor
diferençaLógica
diferençaLógica
Introdução à programação Computadores e programação I
© M@nso 2004
Operadores bit a bit Operadores bit a bit -- DeslocamentoDeslocamento
xx202020
yy
expressãoexpressão
y = x << 2;y = x << 2;y = x << 2;
xx202020
yy808080
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 Operadores bit a bit -- DeslocamentoDeslocamento
xx202020
yy
expressãoexpressão
y = x >> 2;y = x >> 2;y = x >> 2;
xx202020
yy555
•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éticosmultiplicaçãodivisãosomasubtracçã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ãoVariavel = variavel operador expressão
exemplosexemplos
X+= 3;X = X+3;X+= 3;X+= 3;X = X+3;X = X+3;
exemplosexemplos
x/=y;x = x /y;x/x/=y=y;;x = x /y;x = x /y;
exemplosexemplos
X*= 3;X = X*3;X*= 3;X*= 3;X = X*3;X = X*3;
exemplosexemplos
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 lOperadores sobre lóógicosgicos
RELACIONAISMaior
>
Menor<
Igual==
Maior ou igual>=
Menor ou igual<=
Diferente!=
LÒGICOSConjunção
&&
Disjunção||
Negação!
Introdução à programação Computadores e programação I
© M@nso 2004
AssociatividadeAssociatividade
Associatividadeesquerda=> direita
x + y + z3 + z
7z / x * y
2 * z2
xx222
yy111
zz444
rr111
Associatividade direita => esquerda
r =x + y + z7
r = 7teste = !matriculado
teste = true
x = -zx=-4
matriculadomatriculado
falsefalsefalsetesteteste
falsefalsefalse
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 computacionalManipular dados
Receber dadosGuardar dadosImprimir dados
Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha entre várias instruções.Repetir um conjunto de instruções
Introdução à programação Computadores e programação I
© M@nso 2004
ExercExercíícioscios
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>int main(int argc, char* argv[]){
double Lado1, lado2, area;scanf(“%lf”, &lado1);scanf(“%lf”, &lado2);area = lado1 * lado2;printf(“ area = %lf ”, area);
}
#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{
doubledouble Lado1, lado2, Lado1, lado2, areaarea;;scanf(scanf(““%lf%lf””, &lado1);, &lado1);scanf(scanf(““%lf%lf””, &lado2);, &lado2);areaarea = lado1 * lado2;= lado1 * lado2;printf(printf(““ areaarea = %= %lflf ””, , areaarea););
}}
fimfim
Ler lado2Ler lado2
Escrever Area
Introdução à programação Computadores e programação I
© M@nso 2004
ExercExercíícioscios
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>int main(int argc, char* argv[]){
float nTeorica, nPratica, nFinal;printf(“ introduza a nota teórica :“);scanf(“%f”, &nTeorica);printf(“ introduza a nota prática:“);scanf(“%f”, &nPratica);
nFinal = nTeorica * 0.6 + nPratica * 0.4;printf(“A nota final e: %f “,nFinal);
}
#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{
floatfloat nTeoricanTeorica, , nPraticanPratica, , nFinalnFinal;;printf(printf(““ introduza a nota teintroduza a nota teóórica :rica :““););scanf(scanf(““%f%f””, , &nTeorica&nTeorica););printf(printf(““ introduza a nota introduza a nota prpráática:tica:““););scanf(scanf(““%f%f””, , &nPratica&nPratica););
nFinalnFinal = = nTeoricanTeorica * 0.6 + * 0.6 + nPraticanPratica * 0.4;* 0.4;printf(printf(““AA nota final e: %f nota final e: %f ““,,nFinalnFinal););
}}
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
SelecSelecçção de ão de intruintruççõesões
Introdução à programação Computadores e programação I
© M@nso 2004
SelecSelecçção Simplesã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){
intrução;intrução;intrução;. . .
}
IfIf (condi(condiçção)ão){{
intruintruççãoão;;intruintruççãoão;;intruintruççãoã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
SelecSelecçção Simples (exemplo)ã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
SelecSelecçção Simples (exemplo)ão Simples (exemplo)
Calculo do total da facturaCalculo do total da factura#include <stdio.h>int main(int argc, char* argv[]){
float totalFactura;scanf(“%f”, &totalFactura);if( totalFactura > 1000.0)
{totalFactura*= 0.85;
}
printf(“ %f “, totalFactura);}
#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*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 variVisibilidade das variááveisveis
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
SelecSelecçção em Alternativaã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){
intrução1;. . .
}else{
intrução2;. . .
}
ifif (condi(condiçção)ão){{
intruintruçção1;ão1;. . .. . .
}}elseelse{{
intruintruçção2;ão2;. . .. . .
}}
Introdução à programação Computadores e programação I
© M@nso 2004
SelecSelecçção em Alternativa (exemplo)ã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
SelecSelecçção Simples (exemplo)ão Simples (exemplo)Programa par ou imparPrograma par ou impar
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
Impar Par
Introdução à programação Computadores e programação I
© M@nso 2004
SelecSelecçção encadeadaã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=v2Maior=v2Maior=v3Maior=v3
ss
ss
nn
nn
Introdução à programação Computadores e programação I
© M@nso 2004
SelecSelecçção encadeada (exemplo)ão encadeada (exemplo)
Programa maior de trêsPrograma maior de trêsint main(int argc, char* argv[]){
int v1, v2; v3;int maior;scanf(“ %d %d %d “, &v1, &v2, &v3);if( v1 > v2 && v1 > v3)
maior= v1;else
{if( v2 > v3)
maior= v2;else
maior=v3;}printf(“ O maior é %d :”, maior);return 0;
}
intint main(intmain(int argcargc, , char*char* argv[argv[])]){{
intint v1, v2; v3;v1, v2; v3;intint maior;maior;scanf(scanf(““ %d %d %d %d %d %d ““, &v1, &v2, &v3);, &v1, &v2, &v3);ifif(( v1 > v2 && v1 > v3)v1 > v2 && v1 > v3)
maior=maior= v1;v1;elseelse
{{ifif(( v2 > v3)v2 > v3)
maior=maior= v2;v2;elseelse
maior=v3;maior=v3;}}printf(printf(““ O maior O maior éé %d :%d :””, maior);, maior);returnreturn 0;0;
}}
Introdução à programação Computadores e programação I
© M@nso 2004
ExercExercííciocio
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=snã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
ExercExercííciocio
Estado civilEstado civilmain(){
char ECivil;scanf(“%c”,&ECivil);if( ECivil ==‘S’)
printf( “ Solteiro”);else
if (ECivil ==‘C’ )printf(“ Casado”);
elseif ( ECivil == ‘D)
printf(“Divorciado”);else
if(ECivil == ‘V’)printf(“Viuvo”);
elseprintf(“ERRO”);
}
main(main()){{
char ECivil;scanf(“%c”,&ECivil);if( ECivil ==‘S’)
printf( “ Solteiro”);else
if (ECivil ==‘C’ )printf(“ Casado”);
elseif ( ECivil == ‘D)
printf(“Divorciado”);else
if(ECivil == ‘V’)printf(“Viuvo”);
elseprintf(“ERRO”);
}}
ecivilecivil
InicioInicio
ecivil=secivil=snã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
SelecSelecçção Mão Múúltiplaltipla
switchswitchswitch ( expressão){
case constante1 :intruções;break;
case constante2 :intruções;break;
. . . case constanten :
intruções;break;
default:intruções;
}
switchswitch ( expressão)( expressão){{
case constante1 :case constante1 :intruintruççõesões;;breakbreak;;
case constante2 :case constante2 :intruintruççõesões;;breakbreak;;
. . . . . . case case constantenconstanten ::
intruintruççõesões;;breakbreak;;
default:default:intruintruççõesõ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
ExercExercííciocio Estado civilEstado civil#include <iostream.h>main(){
char ECivil;scanf(“%c”,&ECivil);switch ( ECivil){
case ‘S’ :printf( “solteiro”);break;
case ‘C’ :printf(“casado”);break;
case ‘D’ :printf(“Divorciado”);break;
case ‘V’ :printf(“Viuvo”);break;
default :printf(“ERRO”);
}}
#include#include <<iostream.hiostream.h>>main(main(){){
charchar ECivilECivil;;scanf(“%c”,&ECivil);switchswitch ( ( ECivilECivil)){{
case case ‘‘SS’’ ::printf(printf( ““solteirosolteiro””););breakbreak;;
case case ‘‘CC’’ ::printf(printf(““casadocasado””););breakbreak;;
case case ‘‘DD’’ ::printf(printf(““DivorciadoDivorciado””););breakbreak;;
case case ‘‘VV’’ ::printf(printf(““ViuvoViuvo””););breakbreak;;
default :default :printf(printf(““ERROERRO””););
}}}}
Introdução à programação Computadores e programação I
© M@nso 2004
ExercExercííciocio
Estado civilEstado civilswitch ( ECivil)
{. . .
case ‘d’ :case ‘D’ :
printf( “Divorciado”);break;
. . .}
switchswitch ( ( ECivilECivil)){{
. . . . . . case case ‘‘dd’’ ::case case ‘‘DD’’ ::
printf(printf( ““DivorciadoDivorciado””););breakbreak;;
. . .. . .}}
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
ExercExercíícioscios
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.
Introdução à programação Computadores e programação I
© M@nso 2004
Erros programasErros programasErros de especificação
Não compreendemos o problema
Erros LógicosO 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 especificaErros de especificaççãoão
Construir um programa que as calcule as interacções do spin de um electrão num campo gravitacional desconhecidodado o número de mesões e fermiõespertencentes ao meio.
Introdução à programação Computadores e programação I
© M@nso 2004
Erros LErros Lóógicosgicos
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 switchEstado civilEstado civil
switch ( ECivil){
case ‘S’ :printf( “solteiro”);
case ‘C’ :printf(“casado”);
case ‘D’ :printf(“Divorciado”);
case ‘V’ :printf(“Viuvo”);
default :printf(“ERRO”);
}
switchswitch ( ( ECivilECivil)){{
case case ‘‘SS’’ ::printf(printf( ““solteirosolteiro””););
case case ‘‘CC’’ ::printf(printf(““casadocasado””););
case case ‘‘DD’’ ::printf(printf(““DivorciadoDivorciado””););
case case ‘‘VV’’ ::printf(printf(““ViuvoViuvo””););
default :default :printf(printf(““ERROERRO””););
}}
Introdução à programação Computadores e programação I
© M@nso 2004
ConstruConstruçção de programasã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