Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
alexandra.aguiar@unilasalle.edu.br
Baseado no material cedido pelo prof Paulo Wagner
Introduo
Muitos problemas com solues complexas podem ser divididos, sucessivamente em problemas menores, com lgica mais simples e de compreenso mais fcil. Em vez de escrever um algoritmo grande, escrevem-se vrios algoritmos menores, os quais em conjunto resolvem o problema proposto.
Modularidade a tcnica de programar desenvolvendo um programa a partir de pequenas partes ou mdulos.
Vantagens
Subdiviso de programas complexos:
facilita o entendimento, pois o cdigo fica mais organizado.
Economia de cdigo:
quando o mesmo conjunto de comandos executado em vrios pontos do programa, geralmente sobre valores diferentes.
Facilidade de manuteno:
os erros so mais fceis de isolar e corrigir, as alteraes ficam limitadas ao mdulo, ao invs de interferir em todo o programa.
Reutilizao:
construo de uma biblioteca.
Tipos de funes
Um programa em C um conjunto de funes, em que a main a principal funo e por onde inicia a execuo do programa;
Funes pr-definidas (disponveis na biblioteca padro do C):
math.h clculos matemticos: pow, sqrt, ... string.h manipulao de strings: strcpy, strcmp, ... stdio.h entrada e sada de dados: printf, scanf, ...
}
tipo_retorno:
Tipo de retorno da funo: pode ser int, float, double, char, etc mais o tipo especial void (no retorna nenhum valor);
nomef:
Nome da funo
return:
Indica o trmino da funo. Retorna o controle para o local onde a funo foi ativada (chamada). O tipo de dado da <expresso> deve ser do mesmo tipo que o definido no <tipo_retorno> da funo. Se o <tipo_retorno> da funo for void (no retorna nada) ento o valor da <expresso> deve ser omitido. O comando return tem capacidade de retornar apenas UM valor.
Incorretos
void func1( ) { <comandos> return 0; } int func2( ) { <comandos> return; }
Primeiro exemplo
#include <stdio.h>
void funcao_teste(){ printf(Eu sou a funcao teste!!\n\n); } void main(){ printf(Sou a funcao principal e vou chamar a funca_teste\n); funcao_teste(); printf(Agora sou eu, a funcao principal de novo!\n\n); }
Escopo de variveis
Representa a rea do programa em que a varivel pode ser utilizada. As variveis podem ser classificadas em:
Locais:
So as variveis declaradas dentro do corpo da funo. So visveis somente nesta funo. O programa principal (main) e as demais funes no podem utilizar esta varivel. Tempo de vida: durao da funo
Globais:
So as variveis declaradas fora das funes. Estas variveis so visveis por todas as funes do programa. Tempo de vida: enquanto o programa estiver sendo executado
9
Primeiro exemplo
#include <stdio.h> int y=20; //variavel global void funcao_teste(){ int x=80, z=30; //variaveis locais funcao_teste printf(Somos as variaveis x e z da funcao_teste: %d, %d\n, x, z); y = 55; printf(Sou a variavel y, global, na funcao_teste! %d\n,y); } void main(){ int x=10, z=15; //variaveis locais funcao principal printf(Somos as variaveis x e z da funcao principal: %d, %d\n, x, z); printf(Sou a variavel y, global, na funcao principal antes de chamar a funcao teste! %d\n,y); funcao_teste(); printf(Somos, de novo, as variaveis x e z da funcao principal: %d, %d\n, x, z); printf(Sou a variavel y, global, na funcao principal depois de chamar a funcao teste! %d\n,y); }
10
Parmetros
As funes podem se comunicar de duas formas:
atravs das variveis globais: no recomendvel, evitar; atravs dos parmetros existentes nas funes.
Parmetros reais:
So os parmetros utilizados na chamada da funo. Podem ser tanto variveis quanto valores. Os parmetros reais so utilizados para inicializar os parmetros formais. 11
Parmetros
Os parmetros formais e reais devem se corresponder em:
Nmero Tipo de dado Ordem
#include <stdio.h> float media(float x, float y, float z) { return (x+y+z)/3; } main() { float n1,n2,med; printf (Entre com duas notas:); scanf (%f %f, &n1, &n2); med = media(n1, n2, 8.5); printf (Media = %.2f \n, med); }
parmetros formais
parmetros reais
12
13
Exemplo - Procedimento
#include <stdio.h>
void funcao_teste(int a, int b){ printf(A soma dos parametros eh %d\n,a+b); } void main(){ int x=10, z=15; printf(Somos as variaveis x e z da funcao principal: %d, %d\n, x, z); funcao_teste(x, z); printf(Sou a funcao principal de novo!\n\n); }
14
Exemplo de Funo:
int soma(int a, int b) { return a + b; }
Em uma condio
if ( soma(x,y) > 10 )
15
Exemplo - Funo
#include <stdio.h>
int funcao_teste(int a, int b){ int soma; soma = a + b; return soma; } void main(){ int x=10, z=15, resultado; printf(Somos as variaveis x e z da funcao principal: %d, %d\n, x, z); resultado = funcao_teste(x, z); printf(Sou a funcao principal de novo e o resultado da soma eh %d!\n\n, resultado); }
16
Passagem de parmetros
Existem dois mecanismos de passagem de parmetros:
Passagem por valor (by value) Passagem por referncia (by reference)
17
Passagem de parmetros
Passagem por referncia:
Passa o endereo de memria da varivel da chamada para o argumento. As alteraes realizadas nos argumentos afetaro as variveis na chamada.
Os argumentos so de entrada e sada: recebem e devolvem valores
19
* na funo
& na chamada
20
& na funo
normal
chamada normal
21
Qual a diferena?
Na passagem por VALOR, as variveis que foram como parmetro de quem EST CHAMANDO a funo PERMANECEM COM OS MESMOS VALORES! Na passagem por REFERNCIA, as variveis que foram como parmetro de quem EST CHAMANDO a funo PODEM SER MUDADAS PELA FUNO CHAMADA!
22
int main(){ int x=100, z=200; printf("Somos x = %d e z = %d da funcao principal ANTES de chamar pass_valor.\n", x, z); pass_valor(x, z); printf("Somos x = %d e z = %d da funcao principal DEPOIS de chamar pass_valor.\n\n", x, z);
printf("Somos x = %d e z = %d da funcao principal ANTES de chamar pass_ref.\n", x, z); pass_ref(&x, &z); printf("Somos x = %d e z = %d da funcao principal DEPOIS de chamar pass_ref.\n\n", x, z); getch(); return 0; }
23
Definio da funo
main() { int x, y, resultado; printf (Informe dois numeros inteiros); scanf (%d %d, &x, &y); resultado = soma(x, y); printf (%d + %d = %d\n, x, y, resultado); }
Chamada da funo 24
Prottipo da funo
main() { int x, y, resultado; printf (Informe dois numeros inteiros); scanf (%d %d, &x, &y); resultado = soma(x, y); printf (%d + %d = %d\n, x, y, resultado); } int soma(int a, int b) { return = a + b; }
Chamada da funo
Definio da funo
25
Exerccios
1) Faa uma funo que recebe por parmetro um valor inteiro e retorna o valor lgico Verdadeiro caso o valor seja maior do que zero e Falso caso o valor seja menor do que zero. (Para usar tipo bool, programa tem que ser em c++. Se fizer em C, usar int e atribuir 1 para Verdadeiro e 0 para falso)
2) Faa uma funo que recebe trs nmeros por parmetro e retorna o maior deles. 3) Faa uma funo que l 50 valores inteiros e retorna a mdia dos valores lidos.
26
Exerccios
4) Analise o programa abaixo e mostre exatamente o que aparecer na tela do computador.
#include <stdio.h> #define NUM 3 int Triplica(int x) { return(3*x); } int SomaQuadrado(int x, int y) { return( (x * x) + (y * y) ); } main() { int x, y=15, z; x = y / NUM; z = Triplica(2); y = SomaQuadrado(x,z); z = ++x - y + (NUM * x) + Triplica(x); printf("\n x = %d, y = %d, z = %d ", x, y, z); }
27
Exerccios
5) Faa um exerccio que receba dois nmeros positivos por parmetro e retorne a soma dos N nmeros inteiros existentes entre eles. 6) Crie uma funo que receba trs nmeros inteiros a, b e c, sendo a maior que 1. A funo dever somar todos os inteiros entre b e c que sejam divisveis por a (inclusive b e c) e retornar o resultado para a funo principal, onde ser impresso. 7) Faa uma funo que receba um nico valor representando segundos. Essa funo dever convert-la para horas minutos e segundos. Todas as variveis devem ser passadas como parmetro, no havendo variveis globais.
28
Exerccios
8) Elabore um programa contendo uma sub-rotina que receba as trs notas de um aluno como parmetros e uma letra. Se a letra for A, a sub-rotina dever calcular a mdia aritmtica das notas do aluno; se for P, dever calcular a mdia ponderada, com pesos 5, 3 e 2. A mdia calculada dever ser devolvida ao programa principal para, ento, ser mostrada. 9) Faa uma sub-rotina que leia cinco valores inteiros, determine e mostre o maior e o menor deles. 10) Faa uma funo que receba um valor inteiro como referncia e retorne o resto da diviso deste nmero por 10. Altere tambm o valor da varivel passada por referncia, dividindo-a por 10. Mostre, na funo principal, o valor da varivel passada ANTES e DEPOIS da chamada funo.
29