590 likes | 778 Views
Programação I. Ameliara Freire Ameliara.fjn@gmail.com. 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.
E N D
Programação I Ameliara Freire Ameliara.fjn@gmail.com
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
Modularização::Subprograma • Solução Programa Parte 1 Subprograma 1 Subprograma 2 Parte 2 Parte 3 Subprograma 3 Parte 4 Subprograma 4
Modularização::Subprograma • 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::Bloco • 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 }. Declarações de variáveis Comandos
Modularização::Subprograma • 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: Declarações de variáveis Comandos
Modularização::Subprograma • Existem dois tipos de subprograma: • Procedimentos • Executam tarefas • Funções • Calculam Valores
Modularização::Subprograma • 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 • Funções e Procedimentos • Exemplo: Procedimento que não recebe parâmetros e não retorna valor. Implementacao do procedimento #include <stdio.h> void desenha(); main() { printf(”Usando procedimento."); desenha( ); } Assinatura ou protótipo do procedimento void desenha() { int i; for (i = 0; i <= 10; i++) printf("--\n"); }
Procedimento • Sintaxe: void nome_procedimento(lista_parâmetros) { declarações_de_variáveis_do_procedimento; lista_de_comandos_do_procedimento; }
Procedimento • Exemplo: • Exibir na tela uma linha com 20 asteriscos. void linha(){ int i; for (i = 1; i <= 20; i++) printf(‘*’); printf(‘\n’); }
Procedimento • 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 • Exemplo de chamada a um procedimento voidmain(){ 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 • 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 • Chamada (Execução) de um Procedimento • voidmain(){ • int i; • linha(); • puts(“Numeros entre 1 e 5”); • linha(); • for(i = 1; i <= 5; i++) • printf(“%d\n”, i); • linha(); • } • void linha(){ • int i; • for (i = 1; i <= 20; i++) • printf(‘*’); • printf(‘\n’); • }
#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(); }
Função • Sintaxe: tipo_retornonome_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) { floataux; aux = a + b; returnaux; }
Função • Chamada a uma função float soma(float a, float b) { floataux; aux = a + b; returnaux; } voidmain () { float x,y,z; printf(“Digite X:”); scanf (“%f”, &x); printf(“Digite Y:”); scanf (“%f”, &y); z = soma(x,y); printf(“Soma: %f”,z); }
#include <stdio.h> #include <conio.h> float soma(float a, float b) { floataux; aux = a + b; returnaux; } main () { floatx,y,z; printf("Digite X:"); scanf ("%f", &x); printf("Digite Y:"); scanf ("%f", &y); z = soma(x,y); printf("Soma: %f",z); getche(); }
Função • 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 • 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.
Escopo de variáveis • 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 • 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 • Exemplo de Escopo em uma Função:
Parâmetros • Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Parâmetros • 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 • Exemplo: Parâmetros Formais Parâmetros Reais
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.
#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("Digitetresnotas:"); scanf ("%f %f %f", &x, &y, &z); w = media(x,y,z); printf("Soma: %f",w); getch(); } intresto(int num1, int num2) { int aux; aux = num1 % num2; return aux; } main () { intx,y,w; printf("Digitedoisnumeros:"); scanf ("%d %d", &x, &y); w = resto(x,y); printf("resto da divisao: %d",w); getch(); }
#include <stdio.h> #include <conio.h> intmenor_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 () { intx,y,z,w; printf("Digitetresnumeros:"); scanf ("%d %d %d", &x, &y, &z); w = menor_valor(x,y,z); if(w == (x-1)) printf("\n osnumerossaoiguais"); else printf("o menornumero eh: %d",w); getch(); } #include <stdio.h> #include <conio.h> intcalcular_idade(intano) { int aux; if (ano >= 2013 || ano < 1) aux = -1; else aux = 2013-ano; return aux; } main () { intx,y; printf("Digite o seuano de nascimento:"); scanf ("%d", &x); y = calcular_idade(x); if(y == -1) printf("\n anoinvalido"); else printf("a suaidade eh: %d",y); getch(); }
#include <stdio.h> #include <conio.h> intmeses_restantes(intmes) { int aux, mes_atual = 6; if (mes < mes_atual || mes > 12) aux = -1; else aux = 12-mes; return aux; } main () { intx,y; printf("Digite o mes do ano:"); scanf ("%d", &x); y = meses_restantes(x); if(y == -1) printf("\n mesinvalido"); else printf("meses para o final do ano: %d",y); getch(); } #include <stdio.h> #include <conio.h> intdias_restantes_meses(intdia, intmes, intano) { 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 () { intx,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(); }
Passagem de parâmetro por valor • 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 • Exemplo:
Memória • Organizacao da memória (variável inteira) (0xFF02)x 0000000 int x;
Memória • Organizacao da memória (variável inteira) (0xFF02)x 5 int x; x = 5;
Ponteiros (apontadores) • 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: x 0x3287AB 0x3287AB 4 x
Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: x int *x; NULL
Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: int *x; int y = 5; x NULL (0xAD036)y 5
Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: int *x; int y = 5; x = &y; x 0xAD036 (0xAD036)y 5
Trabalhando com ponteiros • 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; (0x3847CD)x int *x; NULL if (x != NULL) { ... } int *x; printf(“Endereco da variavel x: %d”,&x); printf(“Endereco guardado em x: %d”,x);
Trabalhando com ponteiros • Atribuição de ponteiros. • Só podemos jogar dentro do ponteiro um endereço; • *p – representa o conteúdo final do ponteiro; (0x3847CD)x int *x; int y = 35; x = &y; 0x32496 (0x32496)y 35 int *x; printf(“Conteudo final de x: %d”,*p); *x = 28; printf(“Conteudo final de x: %d”,*p);