Linguagens de programação Introdução ao C
Sumário Execução de programas Linguagem Erros em programação 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
Interpretação de Programas interpretador Programa que converte as instruções da linguagem de alto nível em instruções máquina e as executa. Basic, Java, Portugol
Compilação de programas Compilador (compiler) Programa que converte as instruções da linguagem de alto nível em instruções máquina formando um programa objecto Ligador (linker) Programa que reúne todos os programas objecto e faz um programa executável C,C++, Pascal Programas Executados pelo sistema operativo
Introdução à linguagem 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
Ola mundo #include <stdio.h> int main(int argc, char* argv[]) Biblioteca de funções de entrada e saida de dados int main(int argc, char* argv[]) Função principal { } Definição de um bloco de instruções printf("ola mundo"); escrever return 0; Retorno do programa Olá mundo #include <stdio.h> int main(int argc, char* argv[]) { printf("ola mundo"); return 0; }
Algoritmos 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
Tipos de dados em C Variáveis Simples Compostos Um nome Um Tipo Numéricos inteiros reais Caracter Lógico Compostos Matrizes Estruturas Uniões Variáveis Um nome Um Tipo Um só valor
Declaraçã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, . . .; Exemplos int soma; float saldo = 0.0; doule x, y, z; NOTA A declaração das variáveis deve ser feita antes da sua utilização
Regras 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
Palavras reservadas do C
Atribuição de Valores – operador = variavel = expressão; Exemplos soma = 10 ; saldo = soma + 1; area = lado1 * lado2; NOTA 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)
Atribuição de valores Valores na Base: 00 02 077 0123 Decimal numeração normal 0 2 63 83 Octal Começam por 0 (zero) 00 02 077 0123 Hexadecimal Começam por 0x (zero xis) 0x0 0x2 0x3f 0x53 atribuição do valor doze a x X = 12; X = 014; X = 0xC;
Inteiros - int NOTA Sinal Tamanho Exemplos 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; NOTA por defeito os inteiros são: signed 16 bits short 32 bits long
Alcance dos inteiros
exemplos 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;
Números Reais notação Tipo Representação 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 NOTA Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação Exemplo float raio = .50; long double taxa = 5E-2 ;
Erro nos Números Reais NOTA Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação
Caracteres (char) Caracteres especiais Modificadores \a Sinal sonoro 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 enter =‘\n’ Utilização directa do código ASCII 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
Tabela ASCII Exemplo char sexo; Sexo = ‘M’; Sexo = 77;
Definição de tipos - Enumerações Definição de nomes para valores Cores , Dias da semana , Meses, etc. enum semana{ segunda=2, terca=3, quarta=4, quinta=5, sexta=6, sabado=7, domingo=8 }; Exemplo enum semana teoricaIP, praticaIP; teoricaIP = segunda; praticaIP = teoricaIP +1 ;
Definição de tipos - Enumerações enum novo_tipo {nome_1=valor_1, nome_2, . . .,nome_n}; novo_tipo nome_variavel = nome_x; enum Cores {verde= 0 , amarelo = 1, vermelho =2 }; enum Cores semaforo = verde; enum logica {falso, verdadeiro }; enum logica condicao=verdadeiro; NOTAS Quando omitimos o valor a enumeração toma o valor da anterior mais uma unidade. Por defeito começam em zero
Valores lógicos (bool) Dois valores definidos false (valor zero) true (um ou qualquer outro valor) Exemplo bool aprovado, trabEstudante; aprovador = true; trabEstudante = false;
Definiçã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
Tipos de dados do c++ Builder tamanho (bits) Mínimo Máximo unsigned char 8 255 char -128 127 short int 16 -32,768 32,767 unsigned int 32 4,294,967,295 int -2,147483648 2,147,483,647 unsigned long enum long float 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
Exercí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.
Entrada e saída de dados
Entrada 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);
Formato de dados (I/O) c u s l d h f o e x caracter sem sinal cadeia de caracteres d inteiro f real no formato numérico e real no formato cientifico u sem sinal l grande h pequeno o octal x Hexadecimal
Programa gentil Exemplo #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); }
Ficheiros gerados
Algoritmos 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
Operadores
Qualquer operação entre inteiros devolve um inteiro Operadores unários - (sinal) Operadores binários + (Soma) - (Subtracção) / (Divisão inteira) % (Módulo) Exemplo 25 - 2 = 23 -3 - 2 = -5 25 / 2 = 12 25 + 2 = 27 25 % 2 = 1 25 * 2 = 50 NOTA Qualquer operação entre inteiros devolve um inteiro
Operadores unários – Pós fixo ++ (incremento) -- (decremento) Nota X++ X = X+1 Nota X-- X = X-1 Nota y = x++ y = x x = x+1 Nota y = x-- y = x x = x-1 x 3 y expressão y = x++; 4
Operadores unários – Pré fixo ++ (incremento) -- (decremento) Nota ++X X = X+1 Nota --X X = X-1 Nota y = ++x x = x+1 y = x Nota y = --x x = x-1 y = x x 3 y expressão y = --x; 2
Operadores bit a bit Manipulam directamente a representação binária dos números e (and) & ou (or) | ou exclusivo (Xor) ^ Deslocamento à esquerda << Deslocamento à direita >> E 1 OU 1 Multiplicação Lógica Soma Lógica xor 1 diferença Lógica
Operadores bit a bit - OR OU 1 x 91 y 128 expressão z = x | y ; z 219 Soma Lógica
Operadores bit a bit - AND 1 x 90 y 20 expressão z = x & y ; z 16 Multiplicação Lógica
Operadores bit a bit - XOR 1 x 90 y 20 expressão z = x ^ y ; z 78 diferença Lógica
Operadores bit a bit - Deslocamento x 20 y expressão y = x << 2; 80 Algoritmo deslocam-se os bites para a esquerda os últimos bites perdem-se introduzem-se zeros no inicio
Operadores bit a bit - Deslocamento x 20 y expressão y = x >> 2; 5 Algoritmo deslocam-se os bites para a direita os primeiros bites perdem-se introduzem-se zeros no fim
Operadores sobre reais Aritméticos multiplicação divisão soma subtracção expoente mantissa
Operadores compostos Variavel = variavel operador expressão += , -=,%=, *=, /=, >>=, <<=, &=, |=, ^= variável Operador= expressão Variavel = variavel operador expressão exemplos X+= 3; X = X+3; exemplos x/=y; x = x /y; exemplos X*= 3; X = X*3; exemplos X|= y; X = X | y;
Operadores sobre lógicos RELACIONAIS Maior > Menor < Igual == Maior ou igual >= Menor ou igual <= Diferente != LÒGICOS Conjunção && Disjunção || Negação !
Associatividade z 4 r 1 x 2 y 1 Associatividade direita => esquerda matriculado teste x 2 y 1 false false Associatividade direita => esquerda r =x + y + z 7 r = 7 teste = !matriculado teste = true x = -z x=-4 Associatividade esquerda=> direita x + y + z 3 + z 7 z / x * y 2 * z 2
Prioridade dos operadores
Algoritmos 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
Exercícios Construa um programa que calcule a área de um rectangulo Inicio Ler lado1 Programa Á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); } Ler lado2 Area := lado1*lado2 Escrever Area fim
Exercí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 Inicio Ler nTeorica Nota 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); } Ler nPratica nFinal = nTeorica*0.6 + nPratica * 0.4 Escrever nFinal fim
Selecção de intruções
Linguagem estruturada Selecção Simples Linguagem estruturada C++ If (condição) { intrução; . . . } . . . Se <condição> então Instruções fim_se Fluxograma Condição V Exemplo Se x > 0 então escrever “numero:” ler numero fim_se Bloco de Instruções Um “Bloco de instruções” é limitado por chavetas { }
Selecção Simples (exemplo) Inicio Exemplo Ler totalFactura 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 totalFactura >10000 v totalFactura = totalFactura *0.85 totalFactura Fim
Selecção Simples (exemplo) Calculo 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); NOTA Se o bloco tiver apenas uma instrução podem omitir-se as chavetas
Visibilidade 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; Visibilidade das variáveis: Desde que são declaradas Até final do bloco
Selecção em Alternativa Linguagem estruturada Fluxograma C++ if (condição) { intrução1; . . . } else intrução2; . . . Se <condição> entao Instruções Senao Fim_se Condição V F Instruções Instruções Exemplo Se numero>0 então escreve “positivo” Senão escreve “negativo” Fim_se
Selecção em Alternativa (exemplo) Exercício Construa um programa que imprima “Par” ou “Impar” consoante o número introduzido pelo utilizador o é ou não.
Selecção Simples (exemplo) Programa 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”); } Inicio Ler n n % 2 = 0 V F Impar Par Fim
Selecção encadeada Exercício V1 > v2 e V1 > v3 Maior=v1 V2>v3 Maior=v2 Maior=v3 s n Exercício Construa um programa que imprima o maior de três número introduzido pelo utilizador
Selecção encadeada (exemplo) Programa maior de três int 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; maior=v3; } printf(“ O maior é %d :”, maior); return 0;
Exercí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
Exercício Estado civil main() { char ECivil; scanf(“%c”,&ECivil); if( ECivil ==‘S’) printf( “ Solteiro”); else if (ECivil ==‘C’ ) printf(“ Casado”); if ( ECivil == ‘D) printf(“Divorciado”); if(ECivil == ‘V’) printf(“Viuvo”); printf(“ERRO”); }
Selecção Múltipla switch switch ( expressão) { case constante1 : intruções; break; case constante2 : . . . case constanten : default: }
Exercício Estado civil #include <iostream.h> main(){ char ECivil; scanf(“%c”,&ECivil); switch ( ECivil) { case ‘S’ : printf( “solteiro”); break; case ‘C’ : printf(“casado”); case ‘D’ : printf(“Divorciado”); case ‘V’ : printf(“Viuvo”); default : printf(“ERRO”); }
Exercício Estado civil NOTA . . . case ‘d’ : switch ( ECivil) { printf( “Divorciado”); break; } NOTA A escolha termina: quando chegar ao fim quando encontrar a instrução break
Exercí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.
Erros
Erros programas Os erros são a base da experiência. 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.
Erros 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. Não compreendo o problema !!!
Algoritmo ERRADO !!! Erros Lógicos Solteiro casado ou erro sim não não Inicio Solteiro casado ou erro ecivil sim ecivil=s não Estado = Solteiro Algoritmo ERRADO !!! não sim ecivil=c Estado = casado Estado = casado estado Fim
Erros 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.“); Má identação
Erros 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; }
Erros 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;
Erros de sintaxe mais comuns Esquecer o break; no ciclo switch Estado civil switch ( ECivil) { case ‘S’ : printf( “solteiro”); case ‘C’ : printf(“casado”); case ‘D’ : printf(“Divorciado”); case ‘V’ : printf(“Viuvo”); default : printf(“ERRO”); }
Conclusão
Construçã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