pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte:...

20
Programação Imperativa Lição n.º 1 Preliminares

Transcript of pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte:...

Page 1: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Programação Imperativa

Lição n.º 1Preliminares

Page 2: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Preliminares• Apresentação.• A programação na LEI.• O que é um computador?• O que é um programa?• Linguagens de programação.• A linguagem de programação C.• Bibliografia.

9/22/16 Programação Imperativa 2

Page 3: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Apresentação• Aulas teóricas às segundas-feiras, das 8:30 às

10:00, e às quintas-feiras, das 9:00 às 10:00, no anfiteatro 1.8.1, no edifício 8.

• Aulas práticas para várias turmas.• Professor das teóricas: Pedro Guerreiro.• Professores das práticas: Amine Berqia e Pedro

Guerreiro.• Avaliação por frequência e exame final.• Página na tutoria: https://goo.gl/UEwBpF.

9/22/16 Programação Imperativa 3

Page 4: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

A programação na LEI• Programação Imperativa.• Laboratório de Programação.• Programação Orientada por Objetos.• Algoritmos e Estruturas de Dados.• Bases de Dados.• Computação Gráfica.• Desenvolvimento de Aplicações para a Web.• Compiladores.• Inteligência Artificial.• ...9/22/16 Programação Imperativa 4

Page 5: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um computador?

9/22/16 Programação Imperativa 5

ENIAC (1946)

UNIVAC I (1951)

ENIAC: o primeiro computador eletrónico de uso geral.

UNIVAC I: o primeiro computador comercial americano.

Page 6: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um computador? (2)

9/22/16 Programação Imperativa 6

IBM 360 (1965)

DG Eclipse MV/8000 (1980)DEC VAX-11/780 (1978)

PDP 11/70 (1975)

Page 7: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um computador? (3)

9/22/16 Programação Imperativa 7

IBM PC 5150(12 de Agosto de 1981)

Apple Macintosh(24 de Janeiro de 1984)

Page 8: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um computador? (4)

9/22/16 Programação Imperativa 8

Computador “torre” Computador “laptop”

Page 9: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um computador? (5)

9/22/16 Programação Imperativa 9

Macbook Air Microsoft Surface Pro 3

Page 10: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

E ainda...

9/22/16 Programação Imperativa 10

Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994).

I'm sorry, Dave. I'm afraid I can't do that..

HAL 9000

Page 11: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

“Definição” de computador

A device that consists of one or more associated processing units and peripheral units, that is controlled by internally stored programs, and that can perform substantial computations, including numerous arithmetic operations, or logic operations, without human intervention during a run.

9/22/16 Programação Imperativa 11

Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994).

Page 12: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

O que é um programa?• Um programa é uma sequência de instruções

que um computador executará automatica-mente, para levar a cabo uma determinada tarefa.

• As instruções são executadas sequencial-mente, primeiro a primeira instrução do programa, depois a segunda, e assim por diante até ao fim do programa, exceto no caso das instruções de salto, as quais permitem “saltar” (condicionalmente ou não) para outra instrução, mais à frente ou mais atrás.

9/22/16 Programação Imperativa 12

Page 13: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Como são os programas?• Os programas são texto, isto é, sequências de

frases, formadas por palavras, formadas por carateres.

• Os programas são escritos por pessoas ou por outros programas.

• Cada programa é escrito numa linguagem de programação.

• Os compiladores são programas que traduzem um programa escrito numa linguagem para outra linguagem que o computador é capaz de processar mais eficientemente.

9/22/16 Programação Imperativa 13

Page 14: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Programação imperativa• A programação imperativa é um estilo de

programação que reflete a ideia fundamental de que as instruções constituem ordens que o computador deve cumprir: read, write, call, stop, wait, add, connect, perform, etc.

• À programação imperativa contrapõe-se a programação funcional, para a qual um programa é a descrição de uma função (no sentido da matemática); executar o programa é avaliar a função para argumentos dados, a fim de obter os correspondentes resultados.

9/22/16 Programação Imperativa 14

Page 15: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Linguagens de programação• Os programas são escritos usando linguagens

de programação.• Cada linguagem de programação é um

conjunto de regras definidas inequivocamente num documento de referência.

• Há regras sintáticas (que exprimem as maneiras válidas de escrever programas) e regras semânticas (que exprimem o significado operacional dos programas).

• Há ainda regras de estilo, peculiares de cada organização.

9/22/16 Programação Imperativa 15

Page 16: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Principais linguagens

9/22/16 Programação Imperativa 16

Page 17: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

A linguagem de programação C• Em Programação Imperativa programaremos

em C.• A linguagem C foi inventada por Dennis

Ritchie, nos Laboratórios Bell, em 1972.• A linguagem C provém da linguagem B, a qual

provinha da linguagem BCPL, a qual provinha da linguagem CPL, a qual provinha do Algol 60.

• A linguagem C influenciou diretamente as linguagens C++, Java, Objective C, C# e, mais ou menos diretamente, muitas outras.

9/22/16 Programação Imperativa 17

Page 18: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Evolução do C• 1972: invenção do C.• 1989: normalização ANSI C, ou C89.• 1990: normalização ISO C, ou C90, igual à

anterior.• 1999: normalização ISO, C99.• 2011: normalização ISO, C11.

9/22/16 Programação Imperativa 18

Page 19: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Bibliografia

9/22/16 Programação Imperativa 19

Page 20: pi 1617 01 - w3.ualg.ptw3.ualg.pt/~pjguerreiro/sites/27_pi_1617/lessons/pi_1617_01.pdf · Fonte: IEEE Standard Glossary of Computer Hardware Terminology (1994). I'm sorry, Dave. ...

Aspeto

9/22/16 Programação Imperativa 20

#include <stdio.h>#include <math.h>#define MY_PI 3.14159265358979323846 /* pi */

double magnitude(double x, double y){return sqrt(x * x + y * y);

}

void test_magnitude(){double x;double y;while (scanf("%lf%lf", &x, &y) != EOF){double z = magnitude(x, y);printf("%f\n", z);

}}

double inner_product(double x1, double y1, double x2, double y2){return x1 * x2 + y1 * y2;

}

void test_inner_product(){double x1;double y1;double x2;double y2;while (scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2) != EOF){double z = inner_product(x1, y1, x2, y2);printf("%f\n", z);

}}

double angle(double x1, double y1, double x2, double y2){return acos(inner_product(x1, y1, x2, y2) / (magnitude(x1, y1) * magnitude (x2, y2)));

}

double degrees(double a){return a * 180 / MY_PI;

}

void test_angle(){double x1;double y1;double x2;double y2;while (scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2) != EOF){double z = angle(x1, y1, x2, y2);printf("%.12f\n", z);double z2 = degrees(z);printf("%.2f\n", z2);

}}

int main(int argc, char **argv){char x = 'A';if (argc > 1)x = *argv[1];

if (x == 'A')test_magnitude();

else if (x == 'B')test_inner_product();

else if (x == 'F')test_angle();

elseprintf("%c Invalid option.\n", x);

return 0;}

Como exemplo, um programa C para calcular a medida do ângulo definido por dois segmentos, determinados, cada um deles, pela origem e por um ponto dado.