programação i

59
Programação I Ameliara Freire [email protected]

Upload: kimberley-hanson

Post on 14-Mar-2016

53 views

Category:

Documents


0 download

DESCRIPTION

Programação I. Ameliara Freire [email protected]. Modularização. Dividir para Conquistar. Modularização. Situação. Problema. Parte 1. Parte 2. Parte 3. Parte 4. Modularização. Solução. Problema. Parte 1. Parte 1. Parte 2. Parte 2. Parte 3. Parte 3. Parte 4. Parte 4. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação I

Programação IAmeliara Freire

[email protected]

Page 2: Programação I

Modularização

Page 3: Programação I

Dividir para Conquistar

Page 4: Programação I

Situação

Modularização

Parte 1

Parte 2

Parte 3

Parte 4

Problema

Page 5: Programação I

Solução

Modularização

Parte 1

Parte 2

Parte 3

Parte 4

Parte 1Parte 2

Parte 3

Parte 4

Problema

Page 6: Programação I

Solução

Modularização::Subprograma

Parte 1

Parte 2

Parte 3

Parte 4

Subprograma 1Subprograma 2

Subprograma 3

Subprograma 4

Programa

Page 7: Programação I

A solução do problema original é implementada através da composição dos subprogramas.

Subprogramas podem ser vistos como blocos de construção com os quais montamos um programa.

Esta técnica de construção de programas é chamada de MODULARIZAÇÃO.

Modularização::Subprograma

Page 8: Programação I

Um bloco consiste em um conjunto de declarações e um conjunto de comandos delimitados por indicadores de início e fim de bloco.

Em C, os delimitadores de bloco são { e }.

Modularização::Bloco

Comandos

Declarações de variáveis

Page 9: Programação I

Um subprograma é um bloco de programa constituído por um conjunto de declarações e por um conjunto de comandos e identificado por um nome.

Exemplo:

Modularização::Subprograma

Comandos

Declarações de variáveis

Page 10: Programação I

Existem dois tipos de subprograma:

◦ Procedimentos Executam tarefas

◦ Funções Calculam Valores

Modularização::Subprograma

Page 11: Programação I

Funções e Procedimentos◦ Toda função ou procedimento deve ser pelo

menos declarada antes da função principal main(). Declara a função/procedimento antes da main() e a

implementa depois. Implementa a função/procedimento diretamente

antes da main().

Modularização::Subprograma

Page 12: Programação I

Funções e Procedimentos◦ Exemplo: Procedimento que não recebe

parâmetros e não retorna valor.

Modularização::Subprograma

#include <stdio.h>

void desenha();

main(){ printf(”Usando procedimento."); desenha( );}

void desenha(){ int i; for (i = 0; i <= 10; i++) printf("--\n");}

Assinatura ou protótipo

do procediment

o

Implementacao do

procedimento

Page 13: Programação I

Procedimento

Page 14: Programação I

Sintaxe:void nome_procedimento(lista_parâmetros){ declarações_de_variáveis_do_procedimento; lista_de_comandos_do_procedimento;}

Procedimento

Page 15: Programação I

Exemplo:◦ Exibir na tela uma linha com 20 asteriscos.

Procedimento

void linha(){ int i; for (i = 1; i <= 20; i++) printf(‘*’); printf(‘\n’); }

Page 16: Programação I

A definição de um procedimento associa um nome a um bloco de declarações e comandos.

Os comandos que compõem o bloco do procedimento têm a “missão” de executar uma determinada tarefa para o programa.

Procedimento

Page 17: Programação I

Exemplo de chamada a um procedimentovoid main(){ int i; linha(); /* escreve uma linha de asteriscos */ puts(“Numeros entre 1 e 5”); linha(); /* escreve outra linha de asteriscos */ for(i = 1; i <= 5; i++) printf(“%d\n”, i); linha(); /* escreve outra linha de asteriscos */}

Procedimento

Page 18: Programação I

Chamada (Execução) de um Procedimento

◦ Uma referência a um nome de procedimento dentro de um programa provoca a execução do bloco de comandos do procedimento.

◦ Ao término da execução do procedimento, a execução do programa continua a partir do ponto onde este foi chamado.

Procedimento

Page 19: Programação I

Chamada (Execução) de um Procedimento

Procedimento

void linha(){ int i; for (i = 1; i <= 20; i++) printf(‘*’); printf(‘\n’); }

void main(){ int i; linha(); puts(“Numeros entre 1 e 5”); linha(); for(i = 1; i <= 5; i++) printf(“%d\n”, i); linha();}

Page 20: Programação I

#include <stdio.h>#include <conio.h>

void linha(){ int i; for (i = 1; i <= 20; i++) printf("*"); printf("\n"); }

main(){ int i; linha(); puts("Numeros entre 1 e 5"); linha(); for(i = 1; i <= 5; i++) printf("%d\n", i); linha(); getche();}

Page 21: Programação I

Função

Page 22: Programação I

Sintaxe:tipo_retorno nome_função (lista_parâmetros){ declarações_de_variáveis_da_função; lista_de_comandos_da_função;}

Exemplo:◦ Calcular o valor da soma de dois números reais.

float soma(float a, float b) { float aux; aux = a + b; return aux; }

Função

Page 23: Programação I

Chamada a uma funçãofloat soma(float a, float b) { float aux; aux = a + b; return aux; }void main () { float x,y,z; printf(“Digite X:”); scanf (“%f”, &x); printf(“Digite Y:”); scanf (“%f”, &y); z = soma(x,y); printf(“Soma: %f”,z);}

Função

Page 24: Programação I

#include <stdio.h>#include <conio.h>

float soma(float a, float b) { float aux; aux = a + b; return aux; }main () { float x,y,z; printf("Digite X:"); scanf ("%f", &x); printf("Digite Y:"); scanf ("%f", &y); z = soma(x,y); printf("Soma: %f",z); getche();}

Page 25: Programação I

Definição:

◦ A definição de uma função associa um nome a um bloco de declarações e comandos.

◦ Os comandos que compõem o bloco da função têm a “missão” de calcular um valor que deve ser retornado pela função.

Função

Page 26: Programação I

Chamada (execução) de Função:

◦ Uma referência a um nome de função dentro de um programa provoca a execução do bloco de comandos da função.

◦ Ao término da execução da função, a execução do programa continua a partir do ponto onde a função foi chamada.

Função

Page 27: Programação I

Escopo de variáveis

Page 28: Programação I

Definição de Escopo◦ O escopo de uma variável é a parte do código do

programa onde a variável é visível e, portanto, pode ser utilizada.

◦ Com relação ao escopo, as variáveis se dividem em: Globais Locais

Escopo de variáveis

Page 29: Programação I

Variáveis Globais:◦ São as variáveis declaradas fora dos

procedimentos e das funções;◦ São visíveis e podem ser utilizadas em toda a

extensão do programa; Variáveis Locais:

◦ São as variáveis declaradas dentro dos procedimentos e das funções;

◦ São visíveis e podem ser utilizadas apenas dentro do subprograma que as declarou.

Escopo de variáveis

Page 30: Programação I

Exemplo de Escopo em uma Função:

Escopo de variáveis

Page 31: Programação I

Parâmetros

Page 32: Programação I

Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.

Parâmetros

Page 33: Programação I

Parâmetros Formais◦ Parâmetros formais são as variáveis declaradas

no cabeçalho do subprograma.

Parâmetros Reais◦ Parâmetros reais são as variáveis passadas no

instante da chamada do subprograma.

Parâmetros

Page 34: Programação I

Exemplo:

ParâmetrosParâmetros

Formais

Parâmetros Reais

Page 35: Programação I

1. Desenvolva uma função que recebe as três notas do aluno como parâmetro e retorne a sua média. 2. Desenvolva uma função que recebe dois números inteiros como parâmetro, e retorna o resto da divisão do primeiro parâmetro pelo segundo. 3. Desenvolva uma função que receba três números inteiros como parâmetros e retorne o menor valor. 4. Desenvolva uma função que recebe o ano de nascimento do usuário e retorna a sua idade. Faça o cálculo usando o ano atual. 5. Desenvolva uma função que recebe como parâmetro o mês atual e retorna quantos meses faltam para o final do ano. 6. Desenvolva uma função que recebe como parâmetros o dia do mês, o mês e o ano e retorna quantos dias faltam para o final do mês. Lembrem que os meses que têm 28, 29, 30 ou 31 dias.

Page 36: Programação I

#include <stdio.h>#include <conio.h>

float media(float nota1, float nota2, float nota3) { float aux; aux = (nota1 + nota2 + nota3)/3; return aux; } main () { float x,y,z, w; printf("Digite tres notas:"); scanf ("%f %f %f", &x, &y, &z); w = media(x,y,z); printf("Soma: %f",w); getch();

}

int resto(int num1, int num2) { int aux; aux = num1 % num2; return aux; } main () { int x,y,w; printf("Digite dois numeros:"); scanf ("%d %d", &x, &y); w = resto(x,y); printf("resto da divisao: %d",w); getch();

}

Page 37: Programação I

#include <stdio.h>#include <conio.h>

int menor_valor(int a, int b, int c) { int aux; if((a == b) && (b == c) && (a == c)) aux = a-1; else { if ((a < b) && (a < c)) aux = a; else if ((b < a) && (b < c)) aux = b; else aux = c; } return aux; } main () { int x,y,z,w; printf("Digite tres numeros:"); scanf ("%d %d %d", &x, &y, &z); w = menor_valor(x,y,z); if(w == (x-1)) printf("\n os numeros sao iguais"); else printf("o menor numero eh: %d",w); getch();}

#include <stdio.h>#include <conio.h>

int calcular_idade(int ano) { int aux; if (ano >= 2013 || ano < 1) aux = -1; else aux = 2013-ano; return aux; }main () { int x,y; printf("Digite o seu ano de nascimento:"); scanf ("%d", &x); y = calcular_idade(x); if(y == -1) printf("\n ano invalido"); else printf("a sua idade eh: %d",y); getch();}

Page 38: Programação I

#include <stdio.h>#include <conio.h>

int meses_restantes(int mes) { int aux, mes_atual = 6; if (mes < mes_atual || mes > 12) aux = -1; else aux = 12-mes; return aux; }main () { int x,y; printf("Digite o mes do ano:"); scanf ("%d", &x); y = meses_restantes(x); if(y == -1) printf("\n mes invalido"); else printf("meses para o final do ano: %d",y); getch();}

#include <stdio.h>#include <conio.h>

int dias_restantes_meses(int dia, int mes, int ano) { int aux;

if (((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 9) || (mes == 10) || (mes == 12)) && (dia > 0) && (dia <= 31)) aux = 31 - dia; else if (((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11)) && (dia > 0) && (dia <= 30)) aux = 30 - dia; else if ((mes == 2) && (dia > 0) && (dia <= 29)) { if ((ano % 4) == 0) aux = 29 - dia; else aux = 28 - dia; } else aux = -1; return aux; }main () { int x,y,z,w; printf("Digite o dia o mes e o ano:"); scanf ("%d/%d/%d", &x,&y,&z); w = dias_restantes_meses(x,y,z); if(w == -1) printf("\n data invalida"); else printf("dia para o final do mes: %d",w); getch();}

Page 39: Programação I

Passagem de parâmetro por valor

Page 40: Programação I

No instante da chamada do subprograma, o parâmetro formal recebe uma cópia do valor do parâmetro real correspondente.

Alterações feitas nos parâmetros formais não refletem nos parâmetros reais correspondentes.

Caracteriza-se por ser um mecanismo de entrada de dados para o subprograma.

Passagem de parâmetro por valor

Page 41: Programação I

Exemplo:

Passagem de parâmetro por valor

Page 42: Programação I

Introdução a Ponteiro

Page 43: Programação I

Organizacao da memória (variável inteira)

Memória

int x; 0000000

(0xFF02)x

Page 44: Programação I

Organizacao da memória (variável inteira)

Memória

int x;x = 5;

5

(0xFF02)x

Page 45: Programação I

Ponteiros (ou apontadores) são variáveis que, ao invés de guardar um dado (valor), guardam um endereço de memória, associada a outra variável;

Dessa forma, ponteiros fazem referência a uma outra variável;

Exemplo:

Abstração:

Ponteiros (apontadores)

0x3287ABx40x3287AB

x

Page 46: Programação I

Sintaxe: ◦ Variáveis que são ponteiros são representadas da

seguinte forma: tipo *nome_variavel;◦ Exemplo:

Ponteiros (apontadores)

NULLxint *x;

Page 47: Programação I

Sintaxe: ◦ Variáveis que são ponteiros são representadas da

seguinte forma: tipo *nome_variavel;◦ Exemplo:

Ponteiros (apontadores)

NULLxint *x;int y = 5;

5(0xAD036)y

Page 48: Programação I

Sintaxe: ◦ Variáveis que são ponteiros são representadas da

seguinte forma: tipo *nome_variavel;◦ Exemplo:

Ponteiros (apontadores)

0xAD036xint *x;int y = 5;x = &y; 5(0xAD036)y

Page 49: Programação I

Toda declaração de ponteiros, inicia o ponteiro com o valor default NULL;

É sempre bom testar se o ponteiro na é NULL antes de acessá-lo;

p – representa o endereço armazenado no ponteiro;

Trabalhando com ponteiros

NULL(0x3847CD)xint *x;

int *x;printf(“Endereco da variavel x: %d”,&x);printf(“Endereco guardado em x: %d”,x);

if (x != NULL) { ...}

Page 50: Programação I

Atribuição de ponteiros.◦ Só podemos jogar dentro do ponteiro um

endereço;

*p – representa o conteúdo final do ponteiro;

Trabalhando com ponteiros

0x32496(0x3847CD)xint *x;int y = 35;x = &y;

int *x;printf(“Conteudo final de x: %d”,*p);*x = 28;printf(“Conteudo final de x: %d”,*p);

35(0x32496)y

Page 51: Programação I

O que acontece no seguinte programa?

Trabalhando com ponteiros

int y = 5;int *x;x = &y;printf("Valor armazenado na variavel y: %d\n", y);printf("Endereco de y: %d\n",&y);printf("Valor do conteudo do ponteiro x: %d\n",*x);printf("Valor do endereco armazenado no ponteiro x: %d\n", x);printf("Valor do endereco de x: %d\n",&x); printf("Alterando o valor armazenado na variavel x\n");*x = *x + 1;printf("Novo valor do conteudo do ponteiro x: %d\n",*x);printf("Valor do endereco armazenado no ponteiro x: %d\n", x);printf("Valor via y: %d\n",y);

Page 52: Programação I

Toda variável vetor é um ponteiro! Exemplo: ponteiro para vetor de caracteres.

◦ E se tivéssemos feito c = &vetor[2]?

Ponteiros e vetores

char vetor[6]={‘a’,‘e’,‘i’,‘o’,‘u’};char *c;c = vetor;printf(“%s”,c);//Saida: aeiouprintf(“%c”,c[0]);//Saida: a

Page 53: Programação I

Qual o efeito do seguinte código?

Operações aritméticas também podem ser feitas com endereços!

Aritmética de Ponteiros

char vetor[5]={‘a’,‘e’,‘i’,‘o’,‘u’};char *c;c = &vetor[2];printf(“Caractere: %c”,*c);c = c + 1;printf(“Caractere: %c”,*c);

Page 54: Programação I

Expressões com ponteiros:◦ Os ponteiros podem aparecer normalmente no

lugar das variáveis.◦ O operador * dos ponteiros tem maior

precedência que as operações matemáticas:

//y recebe a soma de 1 ao conteúdo de *px y = *px + 1;

// y recebe o conteúdo do ponteiro (px + 1) y = *(px + 1);

Ponteiros

Page 55: Programação I

Passagem de parâmetro por

referência

Page 56: Programação I

Caracteriza-se por ser um mecanismo de comunicação bidirecional com o subprograma, ou seja, é um mecanismo de entrada e saída de dados.

Qualquer modificação feita em um parâmetro formal implica em alteração no parâmetro real correspondente.

Passagem de parâmetro por referência

Page 57: Programação I

Na passagem por referência utiliza-se um tipo de dados especial chamado ponteiro, que representa o endereço da variável passada por parâmetro. Representado pelo * após o tipo da variável e antes do seu nome.

Exemplo:

Passagem de parâmetro por referência

Page 58: Programação I

Passagem de parâmetro por referência

Page 59: Programação I

Passagem de parâmetro por referência