A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação e Sistemas de Informação

Apresentações semelhantes


Apresentação em tema: "Programação e Sistemas de Informação"— Transcrição da apresentação:

1 Programação e Sistemas de Informação
Programação Estruturada 1 Conceitos básicos 2 Variáveis locais e globais 3 Passagem de parâmetros 4 Estrutura de subprogramas 5 Procedimentos e funções 6 Recursividade 7 Construção de bibliotecas Apêndice - Programação em C Módulo fundamental! Índice

2 1 Conceitos básicos Programação estruturada Subalgoritmos Para resolver um problema complexo, comece por decompô-lo em pequenos subproblemas. Permitem organizar a complexidade de um programa; Reduzir custos de desenvolvimento de sistemas; Criação de blocos de instruções que podem ser chamadas várias vezes no mesmo programa ou em vários programas. Filosofia: “Dividir para conquistar”. O objectivo de um subalgoritmo é proporcionar componentes de computação que sejam executados quando for necessário, sob o controlo do algoritmo principal. 1

3 1 Conceitos básicos Função SQRT Algoritmo principal .
Controlo de execução do programa Algoritmo principal . Y  SQRT (X) Controlo transferido para a função SQRT Instruções que definem a função Função SQRT Retorno do controlo O controlo de execução do programa principal é transferido para o subprograma (função ou procedimento) e, no fim, retorna. Compare com o refrão de uma canção. Parâmetros = valores a receber; Argumentos = valores a enviar. Para executar as instruções da função SQRT (square root ) é fornecido um valor como argumento para corresponder ao parâmetro à custa do qual a função está definida. 1

4 1 Conceitos básicos Exemplo: 1 Função MEDIA(VAL1, VAL2, VAL3)
M  (VAL1+ VAL2 + VAL3)/3 Retornar (M) Algoritmo TESTE Início Ler (A, B, C) D  MEDIA(A, B, C) Escrever (D) E  MEDIA(C, A, B) + MEDIA (A+1, B, 10) Escrever (E) Fim Função MEDIA tem 3 parâmetros A, B e C são os argumentos para a função MEDIA da primeira vez que é chamada neste algoritmo: VAL1=A, VAL2=B e VAL3=C VAL1=C, VAL2=A e VAL3=B VAL1=A+1, VAL2=B e VAL3=10 1

5 2 Variáveis locais e globais
Abrangência (scope ) de uma variável A maior parte das variáveis usadas num programa são variáveis locais; Uma variável local (privada) só é reconhecida dentro do subalgoritmo em que é usada; Uma variável global é reconhecida em todo o algoritmo. As variáveis globais valem em qualquer parte do algoritmo, excepto no caso de ser novamente declarada como variável local. As variáveis locais mantém-se em memória apenas durante a execução do subprograma. 2

6 2 Variáveis locais e globais
Exemplo Algoritmo TESTEVAR Variável I inteiro [I variável global] Procedimento TESTE Variável I inteiro [I variável local] Início I  5 Fim [Programa principal] I  1 TESTE Escrever (I) O output do programa será 1: A variável I declarada dentro do procedimento ignora a variável global e perde a validade ao terminar o procedimento. Se retirássemos a declaração da variável I do procedimento TESTE, o output seria 5. 2

7 3 Passagem de parâmetros
Passagem por valor É o método mais directo de fazer corresponder um argumento a um parâmetro de uma função; Cada um dos argumentos é atribuído ao respectivo parâmetro, pela mesma ordem; O argumento pode ser uma variável, uma expressão ou uma constante. Os parâmetros recebem os valores dos argumentos, mas não há maneira de os ligar. Assim, alterações dos parâmetros durante o procedimento, não afectam os argumentos. A  3 B  6 PROC( A, 17 , B^2-1 ) . procedimento PROC(X, Y, Z) 3 17 35 3

8 3 Passagem de parâmetros
Passagem por referência (ou por endereço - como variável) Em vez de passar o valor, passa a própria variável, possibilitando que possa ser modificada durante o procedimento; Pode ser feito de 2 maneiras: 1. Copiar o valor do argumento, no momento em que é chamado o procedimento, e, no fim, copiar os valores dos parâmetros, antes de retornar; 2. Passar o endereço do argumento. Pode provocar efeitos indesejados nas variáveis. A  3 B  6 PROC( A, 17 , B^2-1 ) . procedimento PROC(X, Y, Z) Local de armazenamento em memória 3 17 35 Argumentos passados por valor são apenas de leitura. Argumentos passados por variável são de leitura/escrita. 3

9 3 Passagem de parâmetros
Exemplo N é passado por valor procedimento DOBRO(X ) X X+X retornar Algoritmo PRINCIPAL N  5 DOBRO(N) Escrever(N) Fim procedimento DOBRO(X ) X X+X retornar Algoritmo PRINCIPAL N  5 DOBRO(N) Escrever(N) Fim N é passado por referência X=5 X=10 N=X=5 N=X=10 DOBRO(5) DOBRO(N) 5 10 3

10 4 Estrutura de um subprograma
Estrutura de um programa em C # include <bibliotecas.h> # define constantes tipo funcao( tipo param1, …) { declaração de variáveis; instruções; } main() # Directivas do pré-processador Uma ou mais funções: main() e outras… Cabeçalho (header ) Cada função tem de ter Um header nome da função seguido ou não de uma lista de argumentos/ parâmetros { Declaração das variáveis Bloco de instruções } ; termina cada instrução elementar /* para comentários */ 4

11 5 Procedimentos e funções
Predefinidas: ROUND, TRUNC, INT, SQRT, ABS, SIN, COS, TAN, etc. Construídas pelo programador Uma função é definida em termos de um ou mais parâmetros e retorna um valor. É importante ver uma função (e também um procedimento) como um componente independente de um programa ou algoritmo, pelo que deverá ser definida separadamente do algoritmo principal. Exemplo: Y=SQRT(X) SQRT calcula a raiz quadrada de X e retorna um valor que será atribuído a Y. 5

12 5 Procedimentos e funções
Exemplo: São executadas as instruções mas não há retorno de valores. Procedimento TROCA(VAL1, VAL2) TMP  VAL1 VAL1  VAL2 VAL2  TMP Retornar Algoritmo ORDENAR2 Início Ler (A, B) Se A>B então TROCA(A,B) Escrever (A,B) Fim Na prática, não é tão simples... Ver implementação em C: «troca.c» Cuidado na passagem de argumentos!! Um procedimento é definido em termos de parâmetros de input e/ou de output. 5

13 6 Recursividade Um subalgoritmo é recursivo se ele chama-se a si próprio. Exemplo Função FACT_RECURSIVO(N) Se N=0 então Retornar(1) Senão Retornar(N*FACT_RECURSIVO(N-1)) Fim se 6

14 6 Recursividade Traçagem de FACT_RECURSIVO(4) 6
Resultado final FACT_RECURSIVO(4) = 4 * FACT_RECURSIVO(3) = 24 FACT_RECURSIVO(3) = 3 * FACT_RECURSIVO(2) = 6 FACT_RECURSIVO(2) = 2 * FACT_RECURSIVO(1) = 2 FACT_RECURSIVO(1) = 1 * FACT_RECURSIVO(0) = 1 FACT_RECURSIVO(0) = 1 6

15 7 Construção de bibliotecas
#include <math.h> #include <stdio.h> Exemplos: A linguagem C é muito compacta. Muitas das funções que fazem parte de outras linguagens não estão directamente incluídas na linguagem C. Temos como exemplo as operações de entrada/saída, a manipulação de strings e certas operações matemáticas. A funcionalidade correspondente a estas e outras operações não faz parte integrante da linguagem, mas está incluída numa biblioteca externa, bastante rica e standard. Todas essas operações são executadas por via da invocação de funções externas definidas nessa biblioteca standard. Qualquer programador poderá desenvolver a sua própria biblioteca de funções, podendo até substituir algumas das funções standard, e também utilizar outras bibliotecas comerciais já existentes (p. ex. NAG, PHIGS, etc). 7

16 Programação em C Criação do programa fonte (texto)
Compilação e execução de um programa em C Criação do programa fonte (texto) Compilação desse programa, para a sua tradução para código executável; Execução do código produzido. No caso da detecção de qualquer erro em qualquer dos estados, todos eles deverão ser repetidos desde o início. Apêndice

17 Programação em C Pré-processador Compilador Assembler Linker Apêndice
Código fonte remover os comentários de um programa; interpretar directivas especiais a si dirigidas, que começam pelo carácter #. Pré-processador Compilador traduzir o código fonte para linguagem assembly (texto); traduzir o código assembly para código objecto (instruções em binário). Código assembly Assembler Bibliotecas externas Código objecto combinar todos os objectos com o resultado compilado dessas funções num único ficheiro com código executável. Linker Código executável Apêndice

18 Programação em C Funções em C Apêndice #include <stdio.h>
main() { float raio, area; printf("raio = ?"); scanf("%f", &raio); area = *raio*raio; printf("Area = %f", area); } #define PI float processa(float r) { float a; a = PI*r*r; return(a); area = processa(raio); Apêndice

19 Programação em C Funções em C Apêndice #include <stdio.h>
#define PI float processa(float r) { float a; a = PI*r*r; return(a); } main() { float raio, area; printf("raio = ?"); scanf("%f", &raio); area = processa(raio); printf("Area = %f", area); int cont; printf("para sair,introduza 0"); printf("\nraio = ?"); scanf("%f", &n); for(cont=1;raio !=0;cont++) { Apêndice

20 Programação em C Funções em C Apêndice #include <stdio.h>
#define PI main() { float raio, area; int cont; float processa(float raio); printf("para sair,introduza 0"); printf("\nraio = ?"); scanf("%f", &n); for(cont=1;raio !=0;cont++) { area = processa(raio); printf("Area=%f",area); printf("\nraio=?"); scanf("%f",&raio); } float processa(float r) { float a; a = PI*r*r; return(a); while(raio !=0) { scanf("%f", &raio); Apêndice

21 Resumo Em C, um programa inclui sempre uma função main().
Um conjunto de instruções é colocado entre {}. Cada instrução é seguida de ;. A disposição do programa é arbitrária. O C é Case Sensitive. printf pertence a uma biblioteca de funções. Os comentários são escritos entre /* e */ e são ignorados pelo compilador (ou // até ao fim da linha). Apêndice

22 Tipos de dados Declaração de variáveis tipo var1 [, var2, …, varn];
int 2 a 4 bytes %d (formato de leitura/escrita) char 1 byte %c (ou em formato ASCII %d) float 4 bytes %f, %e, %E double 8 bytes %f, %e, %E short int 2 bytes %hd entre e 32767 long int 4 bytes %ld unsigned %u Atribuição de valores às variáveis var = valor; &var endereço da variável var 2^8=256 2^16=65536 2^32= Apêndice

23 Tipos de dados unsigned char signed char Tipo Tamanho Menor Maior char
1 byte -128 127 int 2 bytes -32768 32767 unsigned int 65535 long int 4 bytes float 3,4x10-38 3,4x1038 unsigned char Exercício: 1. Imprimir o tamanho de cada tipo de dados; sizeof(tipo_de_dados); Ex. 5b 2. Escrever 1 carácter e o seu código ASCII “O Carácter ‘a’ tem código ASCII n.º 97” signed char -128 127 255 Apêndice

24 Resumo Depois de declarada, uma variável assume um valor aleatório.
A atribuição de valores a uma variável é feita pelo sinal =. Uma variável pode ser inicializada assim que é declarada, colocando o sinal de atribuição seguido do valor a atribuir. As operações +, -, *, /(divisão inteira) e %(resto da divisão inteira) entre inteiros é um número inteiro. A leitura e escrita de valores pode fazer-se através das funções printf e scanf, usando os formatos adequados a cada tipo. No caso do scanf, cada variável deve ser precedida por &. Sempre que é necessário (des)promover uma variável a um determinado tipo utiliza-se o casting (tipo). Esta promoção é temporária. Não se deve realizar a leitura de variáveis de um determinado tipo, usando um formato de leitura que não corresponda a esse tipo. Apêndice

25 Funções Um programa em C tem sempre a função main().
As variáveis declaradas dentro de um bloco, são locais a esse bloco, não sendo conhecidas fora dele. O nome de uma função é único, num programa. Uma função pode ser chamada dentro de outra função. Uma função pode retornar um valor. Quando um programa chama uma função, pode enviar argumentos, que são recebidos e armazenados em variáveis locais que são automaticamente inicializadas com esses valores. A estas variáveis dá-se o nome de PARÂMETROS. Se uma função não retorna valores chama-se procedimento. Apêndice

26 Funções main() { … void funcao(‘A’, 123, 23.456); … }
{ … void funcao(‘A’, 123, ); } void funcao(char ch, int n, float x) { … return; ch, n e x são parâmetros da função. Esta função não retorna um valor, diz-se um procedimento. Apêndice

27 Funções printf, scanf e getchar
Exemplos de leitura e escrita de variáveis printf(“O caracter ‘%c’ tem código ASCII n.o %d\n”, ch, ch); printf(“O caracter ‘%c’ tem código ASCII n.o %d\n”, ch, (int) ch); scanf(“%d”,&num); char ch=getchar(); (CASTING) Apêndice

28 Estruturas de repetição
CICLOS (RESUMO) WHILE FOR DO … WHILE Sintaxe while (condição) instrução; for(inic;cond;posinst) do while (condição); Executa a instrução Zero ou mais vezes Uma ou Testa a Condição Antes da Depois da Utilização Frequente Pouco frequente Apêndice

29 Estruturas de repetição
break continue Pode ser usada para terminar uma sequência de instruções dentro de um switch ou para parar um ciclo. Pode ser utilizada dentro de um ciclo para fazer avançar o ciclo para a próxima iteração. Apêndice

30 Operadores ++ e – – Modo Posfixo Modo Prefixo Y= X++ ++X =Y
++ Incremento de 1 -- Decremento de 1 Modo Posfixo Modo Prefixo Y= X++ ++X =Y 1.º O valor de X é atribuído a Y; incrementado; 2.º O valor de X é incrementado. atribuído a Y. Apêndice

31 VAR = VAR OP (EXPRESSÃO)
Atribuição composta VAR OP= EXPRESSÃO é equivalente a VAR = VAR OP (EXPRESSÃO) EXEMPLO SIGNIFICADO X += 1 X = X + 1 Y *= 2+3 Y = Y * (2+3) A –= B+1 A = A – (B+1) R %= 2 R = R % 2 Apêndice

32 Resumo Em C, não existe um tipo específico para armazenar valores lógicos: 0 equivale a FALSO; qualquer valor diferente de 0 equivale a VERDADE. O teste de condições pode ser realizado através das instruções if-else e switch. Na instrução if-else, a condição é avaliada e caso seja Verdadeira (isto é, diferente de zero) é executada a instrução associada ao if. A componente else é executada quando a condição devolve o valor lógico Falso (zero). A componente else do if é opcional. É possível operar valores lógicos através dos operadores && (AND), || (OR) ou ! (NOT). O operador && tem maior precedência que o operador ||. Apêndice

33 Resumo A instrução if-else pode ser evitada sempre que uma mesma variável, dependendo de uma condição, possa receber dois valores diferentes. Neste caso, pode ser substituída pelo operador condicional ?:. A fim de eliminar conjuntos de if-else encadeados, pode usar-se a instrução switch. Ao contrário do if, que permite definir intervalos de valores (x>=10 && x<=120), o switch só admite valores constantes predefinidas do tipo int ou char. A instrução break permite parar um conjunto de instruções dentro de um switch, continuando o programa na instrução imediatamente a seguir. Apêndice

34 Macros const tipo nome_var=valor; #define nome_var valor
A definição de constantes deve ser feita fora das funções, de forma bem visível const #define Sintaxe: const tipo nome_var=valor; Sintaxe: #define nome_var valor Outras bibliotecas standard #include <string.h> //funções de manipulação de strings #include <mem.h> //funções de manipulação de memória (RAM) Apêndice

35 Referências TREMBLAY, Jean-Paul & BUNT, Richard B., Introduction to Computer Science: An Algorithmic Approach, 2.ª Ed. Lisboa: McGraw-Hill, 1989. AZUL, Artur A., Bases de Programação – Curso Tecnológico de Informática – 10.º ano, Porto: Porto Editora, 2004. MARQUES DE SÁ, Joaquim P., Fundamentos de Programação Usando C, Lisboa: FCA, 2004. KERNIGHAN, Brian & RITCHIE, Dennis, The C Programming Language, 2nd Ed. New Jersey: Prentice Hall, 1988.


Carregar ppt "Programação e Sistemas de Informação"

Apresentações semelhantes


Anúncios Google