Sumário Computador Noção de algoritmo Linguagem de programação Léxico, sintaxe e semântica Gramáticas Fluxogramas 02-1 Computador Máquina Memória Armazena dados Dispositivos de entrada/saída Permite a interacção com os utilizadores leitura e escrita de dados Unidade Funcional Acede a posições de memória Executa sequencialmente instruções muito simples 02-2 Processador Unidade Funcional de um computador Acede a posições de memória Sítio onde armazena dados Dados escalares Executa sequencialmente instruções muito simples Lê valor, armazena valor Soma, Subtrai Compara Saltos condicionais 02-3
Programa (código máquina) 7F454C46010101000000000000000000020003000100000080800408340 00000F40000000000000034002000020028000600050001000000000000 0000800408008004089D0000009D000000050000000010000001000000A 0000000A0900408A09004080E0000000E00000006000000001000000000 00000000000000000000BA0E000000B9A0900408BB01000000B80400000 0CD80B801000000CD8000000048656C6C6F2C20776F726C64210A000000 546865204E65747769646520417373656D626C657220302E39382E33390 0002E7368737472746162002E74657874002E64617461002E627373002E 636F6D6D656E74000000000000000000000000000000000000000000000 00000000000000000000000000000000000000B00000001000000060000 0080800408800000001D000000000000000000000010000000000000001 10000000100000003000000A0900408A00000000E000000000000000000 00000400000000000000170000000100000001000000AE900408AE00000 002000000000000000000000001000000000000001C0000000100000000 00000000000000B00000001F00000000000000000000000100000000000 00001000000030000000000000000000000CF0000002500000000000000 000000000100000000000000 02-4 Programa (Linguagem máquina).cstring incl -4(%rbp) LC0: L2: cmpl $99, -4(%rbp).ascii "%d \0" jle L3.text movl $0, %eax.globl _main leave _main: ret LFB3: pushq %rbp LCFI0: movq %rsp, %rbp LCFI1: subq $16, %rsp LCFI2: movl $0, -4(%rbp) jmp L2 L3: movl -4(%rbp), %esi leaq LC0(%rip), %rdi movl $0, %eax call _printf 02-5 Programa em C #include <stdio.h> int main(){ int i; i=0; while (i <100){ printf("%d ", i); i ++; return 0; 02-6
Programa Algoritmo escrito numa linguagem de programação ordena = 1; while (ordena == 1) { ordena = 0; i = 0; while (i<(numvec-1)){ if (v[i] > v[i+1]){ aux = v[i+1]; v[i+1] = v[i]; v[i] = aux; ordena = 1; i++; n= 1; soma= 0; while(true){ sn = a*pow(r, n-1); soma += sn; n++; 02-7 Algoritmo Definição informal: Sequência de instruções para atingir um fim Exemplos: Receitas Instruçoes de montagem de kits Instruções para lavar as mãos 02-8 Algoritmo 02-9
Algoritmo Definição formal: Sequência finita de instruções bem definidas e não ambíguas Instruções com execução precisa, em tempo finito e com esforço finito Exemplo Sequência de instruções para ordenar uma lista de inteiros Contra Exemplo Instruções para cálculo da soma de uma série geométrica por adições exaustivas 02-10 Linguagem de Programação Notação sistemática que permite descrever uma sequência de instruções que o computador pode executar Linguagem máquina Instruções elementares Dependentes do processador Linguagens de alto nível Instruções complexas Independentes do processador Exemplo Se (a<0) imprime( negativo ) 02-11 Linguagem Léxico Palavras da linguagem Durante a noite o aluno leo atemtamemte o relatorio Sintaxe Regras que determinam as relações entre as palavras da linguagem A o o durante relatório atentamente aluno noite leu Semântica Significado dado às frases Durante o relatório a noite leu o aluno atentamente 02-12
Sintaxe e Gramática Gramática Descrição formal das regras de sintaxe de uma linguagem Incumprimento das regras da Gramática Erro de compilação Descrição: BNF (Backus Naur-Form) Diagramas sintáticos 02-13 Gramática Simbolos terminais If, while, for, Palavras, sinais de pontuação, Simbolos não terminais Função, instrução Sintagmas, complementos Símbolos inicial Programa Frase Regras de Produção Combinações válidas dos vários elementos 02-14 Instrução condicional instrucao: instrucao_se instrucao_enquanto instrucao_se: se (condicao) instrucoes instrucoes : instrucao+ instrucao instrucao_se instrucao_enquanto instrucao_se se ( condicao ) instrucoes instrucoes instrucao 02-16
Implicações Gramáticas Bem definidas Regras de construção obrigatórias Necessidade de decorar sintaxe Programação Erros sintáticos Necessidade de os evitar!!!! Necessidade de os compreender Solução: Ler e escrever muitos programas!!!!!! 02-17 Algoritmos Sequencia de instruções Com saltos... Representação formal Fluxogramas 02-18 Fluxograma Representação gráfica Operação Decisão Leitura/escrita Fluxo de execução Indicador de início/fim 02-19
Fluxogramas Indicador início / fim Indicador de início Sai uma seta indicadora de fluxo início Indicador de fim Entra uma setas indicadoras de fluxo fim 02-20 Fluxogramas Operação Representamoperação relizada Manipulação de valor Atribuição de valor Conta Entra uma seta indicadoras de fluxo Sai uma seta indicadoras de fluxo i 0 i i+1 02-21 Fluxogramas Leitura/ escrita Representauma intração com o utilizador Leitura de um valor (do teclado ou ficheiro) Escrita de um valor (no ecran ou ficheiro) Entra uma seta indicadoras de fluxo Sai uma seta indicadoras de fluxo lê dia imprime i 02-22
Fluxogramas Decisão Divisão do fluxo de execução Avcaliação de condição Selecção de operaçoes Entra uma seta indicadora de fluxo Saiem várias setas indicadoras de fluxo lê dia imprime i 02-23 Fluxograma início i 0 i < 100? imprime i i i+1 fim 02-24 Fluxograma + Programa início i 0 #include <stdio.h> int main(){ int i; i=0; Não i < 100? Sim imprime i while (i <100){ printf("%d ", i); i i+1 i ++; fim return 0; 02-25
Próximos capítulos Estrutura de um programa Comentários Constantes Variáveis Declaração Atribuição Inteiros, reais e caracteres Leituras e escritas Booleanos 02-26 Marques de Sá Capítulo 2 Arquitectura de Computadores (Arroz) Capítulo 1 Kerninghan enad Ritchie Capítulos 1.1 1.2 02-27