Curso de C Introdução Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Introdução Roteiro: • • • • • • Recordando Algoritmos Linguagem de Programação O computador Instruções de Máquina Níveis de Abstração Compilação Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Algoritmos Recordando: Algoritmo: conjunto finito de instruções – – – – Começa com a primeira instrução Execução seqüencial, uma instrução de cada vez Possibilidade de saltos para outras instruções Sempre alcança a instrução PARE, que termina o algoritmo. Utiliza dados (entrada) e gera um resultado (saída) Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Algoritmos Exemplo: Calcular o máximo divisor comum Algoritmo em Português Início Condição Fim Salto 1. 1. Leia Leia dois dois números. números. 2. 2. Divida Divida oo primeiro primeiro pelo pelo segundo segundo ee guarde guarde oo resto. resto. 3. 3. Se Se oo resto resto for for 00 (zero), (zero), então então escreva escreva oo segundo segundo número número ee PARE. PARE. 4. 4. Substitua Substitua oo primeiro primeiro número número pelo pelo segundo. segundo. 5. 5. Substitua Substitua oo segundo segundo número número pelo pelo resto resto da da divisão. divisão. 6. 6. Retorne Retorne ao ao passo passo 2. 2. Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Entrada Saída Curso C - IC/UNICAMP Algoritmos Características: • Cada instrução do algoritmo precisa ser: – Não ambígua – Uma única operação bem definida – Tecnologicamente viável • Necessidade de representação: – Diagramas – Uma linguagem específica para escrever algoritmos – Linguagens de programação Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Algoritmos Exemplo: Calcular o máximo divisor comum Algoritmo em Português 1. 1. Leia Leia dois dois números. números. 2. 2. Divida Divida oo primeiro primeiro pelo pelo segundo segundo ee guarde guarde oo resto. resto. 3. 3. Se Se oo resto resto for for 00 (zero), (zero), então então escreva escreva oo segundo segundo número número ee PARE. PARE. 4. 4. Substitua Substitua oo primeiro primeiro número número pelo pelo segundo. segundo. 5. 5. Substitua Substitua oo segundo segundo número número pelo pelo resto resto da da divisão. divisão. 6. 6. Retorne Retorne ao ao passo passo 2. 2. Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Potencialmente ambíguo Instrução não está bem definida Curso C - IC/UNICAMP Linguagem de Programação Opções de representar algoritmos: • Diagramas • Uma linguagem específica para escrever algoritmos • Linguagens de programação Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Linguagem de programação Conceitos: • A linguagem de programação é um veículo para se escrever algoritmos. • Características: – Vocabulário restrito – Regras de sintaxe – Recursos automáticos de verificação da sintaxe da linguagem Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Exemplo Exemplo: Calcular o máximo divisor comum Linguagem de Programação Início Entrada Saída Fim int int a, a, b, b, r; r; scanf(“%d scanf(“%d %d”, %d”, &a, &a, &b); &b); do do {{ rr == aa %% b; b; if if (r (r == == 0) 0) break; break; aa == b; b; bb == r; r; }; }; printf(“O printf(“O MDC MDC éé %d”, %d”, a); a); return; return; Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Palavra chave Símbolos específicos de operações Regra: ponto-e-virgula após cada operação Curso C - IC/UNICAMP O Computador Conceitos: • Realiza processamento sobre dados armazenados no computador. • Executa operações matemáticas e lógicas sobre dados. • Recebe dados do meio externo (entrada) • Apresenta os resultados para o meio externo (saída) Armazenamento memória, fitas, discos, CDs Processamento Entrada Teclado, mouse, rede, scanner, webcam, câmera digital... Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Saída Monitor, impressora, caixa de som Curso C - IC/UNICAMP O Computador Instruções de Máquina: • Representam operações sobre dados. • Encontram-se em formato digital (código de máquina) O computador é uma máquina rápida e eficiente para simular algoritmos! Armazenamento dados Processamento Entrada Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber resultados instruções Saída Curso C - IC/UNICAMP O Computador Exemplo: Calcular o máximo divisor comum Início Entrada Condição Salto Saída Fim Instruções de Máquina IN IN ax ax IN IN bx bx divisao: divisao: MOV MOV dx, dx, 00 DIV DIV bx bx CMP CMP dx, dx, 00 JE JE fim fim MOV MOV ax, ax, bx bx MOV MOV bx, bx, dx dx JMP JMP divisao divisao fim: fim: OUT OUT bx bx HLT HLT Detalhes do computador: Controle de circuito eletrônico Descrição detalhista Representação pouco intuitiva Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Curso C - IC/UNICAMP Níveis de Abstração Dois casos extremos: • Português: – Complexo e trabalhoso – Única forma aceita pelo computador – Preciso, bem definido – Envolve detalhes específicos do computador, irrelevantes para o algoritmo Ling. Programação Instrução Computador Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Código de Máquina abstração • Código de máquina: Português complexidade – Fácil, intuitivo – Computador não entende – Ambíguo, mal definido Curso C - IC/UNICAMP Níveis de Abstração Objetivos: complexidade Português Ling. Programação Instrução Computador Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Código de Máquina abstração • Descrição precisa do algoritmo • Independente das características do computador • Nível de complexidade intermediário! Curso C - IC/UNICAMP Construção do Programa Construir: • Passo 1: Elaborar um algoritmo • Passo 2: Reescrever o algoritmo em C • Passo 3: Acionar o compilador para gerar o programa executável. Algoritmo Programador Programa C Compilador Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Programa Executável Curso C - IC/UNICAMP Construção do Programa Testar: • Passo 4: Testar o programa • Erros? Verificar programa em C • Continuam erros? Verificar o algoritmo! Algoritmo Programador Programa C Compilador Programa Executável Erros? Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber Introdução Fim do Capítulo Copyright @ 2005 by Arnaldo V. Moura e Daniel F. Ferber