Академический Документы
Профессиональный Документы
Культура Документы
Modularidade
Modularizar um programa consiste em dividir em mdulos o programa; Dependendo da linguagem a modularizao pode ser implementada atravs de funes, procedimentos, rotinas, etc; A linguagem C/C++ utiliza funes para modularizao;
Funes- definio
Conjunto de comandos agrupados em um bloco que recebe um nome e atravs deste pode ser ativado. Porque usar funes ? reaproveitamento de cdigo j construdo(por voc ou por outros programadores); evitar que um trecho de cdigo que seja repetido vrias vezes;
Funes
Porque usar funes ? a alterao de um trecho de cdigo de uma forma mais rpida - alterar apenas dentro da funo que se deseja; Para que os blocos do programa no fiquem grandes demais e, por conseqncia, mais difceis de entender; Para facilitar a leitura do programa-fonte de uma forma mais fcil;
Funes
Porque usar funes ? Para separar o programa em partes(blocos) que possam ser logicamente compreendidos de forma isolada.
#include <conio.h> #include <dos.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <iostream> using namespace std;
// Chamada da funo definida antes // Chamada da funo definida antes // Chamada da funo definida antes
void EsperaEnter() // Definio da funo "EsperaEnter" { int tecla; printf("Pressione ENTER\n"); do { tecla = getch(); if (tecla !=13) // Se nao for ENTER { Beep(523,500); // Ativa a emisso de um BEEP } } while(tecla != 13); // 13 e' o codigo ASCII do ENTER }
Parmetros
A fim de tornar mais amplo o uso de uma funo, a linguagem C permite o uso de parmetros. Estes parmetros possibilitam que se definida sobre quais dados a funo deve operar. A funo Beep(523,500), a freqncia do som e o tempo de durao (ms)
Parmetros
Para definir os parmetros de uma funo o programador deve explicit-los como se estive declarando uma varivel, entre os parnteses do cabealho da funo. Caso precise declarar mais de um parmetro, basta separ-los por vrgulas. No exemplo a seguir temos a funo SOMA que possui dois parmetros, sendo o primeiro um float e o segundo um int.
Parmetros
void SOMA(float a, int b) // basta separar por vrgulas { float result; // a declarao de variveis igual ao que // se faz na funo main result = a+b; printf("A soma de %6.3f com %d %6.3f\n, a,b,Result); }
Os parmetros da funo na sua declarao so chamados parmetros formais. Na chamada da funo os parmetros so chamados parmetros atuais.
Parmetros
Os parmetros so passados para uma funo de acordo com a sua posio. Ou seja, o primeiro parmetro atual(da chamada) define o valor o primeiro parmetro formal (na definio da funo, o segundo parmetro atual define o valor do segundo parmetro formal e assim por diante. Os nomes dos parmetros na chamada no tem relao com os nomes dos parmetros na definio da funo.
Parmetros
No cdigo a seguir, por exemplo, a funo SOMA chamada recebendo como parmetros as variveis "b" e "a", nesta ordem.
#include <stdio.h> void SOMA(float a, int b) // basta separar os parmetros por vrgulas { float result; // a declarao de variveis igual ao que // se faz na funo main result = a+b; printf("A soma de %d com %6.3f %6.3f\n, a,b,Result); }
Parmetros
void main() { int a; float b; a = 10; b = 12.3; SOMA(b,a); // Chamada da funo SOMA(12.3,10) } O resultado do programa a impresso da seguinte mensagem: A soma de 12.300 com 10 22.300
No caso de voc declarar corretamente a funo antes de us-la, a converso de tipos feita como no caso de variveis.
No exemplo a seguir a funo SOMA chamada com os parmetros reais dos tipos int e float, nesta ordem. Como na declarao da funo o primeiro parmetro float e o segundo int, feita uma converso de int para float no caso do primeiro parmetro e de float para int no caso do segundo parmetro.
#include <stdio.h> void SOMA(float a, int b); // Prottipo da funo SOMA void main() { float f; f = 20.7 SOMA(16,f); }
Neste exemplo o primeiro parmetro convertido para 16.0 e o segundo para 20. O que ocorre, de fato, que a chamada da funo feita como se mesma fosse substituda por: SOMA((float)16,(int)f);
Escopo de Variveis
Por escopo de uma varivel entende-se o bloco de cdigo onde esta varivel vlida. Com base nisto, temos as seguintes afirmaes: as variveis valem no bloco que so definidas; as variveis definidas dentro de uma funo recebem o nome de variveis locais; os parmetros formais de uma funo valem tambm somente dentro da funo; uma varivel definida dentro de uma funo no acessvel em outras funes, MESMO ESTAS VARIVEIS TENHAM NOME IDNTICOS.
No trecho de cdigo a seguir tem-se um exemplo com funes e variveis com nomes iguais.
#include <stdio.h> #include <conio.h> void FUNC1() { int B; B = -100; printf("Valor de B dentro da funo FUNC1: %d\n", B); } void FUNC2() { int B; B = -200; printf("Valor de B dentro da funo FUNC2: %d\n", B); }
void main() { int B; clrscr(); B = 10; printf("Valor de B: %d\n", B); B = 20; FUNC1(); printf("Valor de B: %d\n", B); B = 30; FUNC2(); printf("Valor de B: %d\n", B); getch(); }
SADA Valor de B: 10 Valor de B dentro da funo FUNC1: -100 Valor de B: 20 Valor de B dentro da funo FUNC2: -200 Valor de B: 30
Passagem de parmetros
Os subprogramas (procedimentos, funes...) podem ou no ter passagem de parmetros. Parmetros so valores utilizados pelos subprogramas
Estru turas de Dado se Ling linha uage ns Prof. Dan bia Esp ndola
15/08/2011
26
Passagem de parmetros
A passagem de parmetros feita entre parnteses aps o nome do subprograma em linha de comando A passagem de parmetros pode ser por ou por referncia
Estru turas valor de Dado se Ling uage ns Prof. Dan bia Esp ndola
15/08/2011
27
Passagem de parmetros
#include <stdio.h> #include <stdlib.h> void troca(int a,int b) { int temp; temp=a; a=b; b=temp; }
main() { int num1, num2; num1=5; num2=6; troca(num1,num2); printf("%d %d",num1,num2); 15/08/2011 28 }
Estru turas de Dado se Ling uage ns Prof. Dan bia Esp ndola
15/08/2011
29
Diferena entre procedimento e funes: as funes necessitam de uma varivel para retornar o valor do tipo da funo.
15/08/2011
30
Estru turas de Dado se Ling uage ns Prof. Dan bia Esp ndola
Passagem de parmetros
* modifica parmetro; & chama parmetro;
float seno (float ang) float cosseno (float ang) { float s,c; s=seno (ang); c=cosseno(ang); return s/c; }
Se os ngulos fossem Estru turas passados por de referncia, o que Dado se aconteceria?
15/08/2011
31
Passagem de parmetros
Na passagem por referncia o endereo da varivel deve ser passado na chamada da funo. Dessa forma a funo pode modificar a Estru varivel diretamente.
turas de Dado & indica que os parmetros so modificados s e Ling pela funo e retornam os valores apropriados. uage ns Prof. Dan bia Esp 15/08/2011 32 ndola
Passagem de parmetros
* modifica parmetro; & chama parmetro;
Estru turas de Dado se Ling uage ns Prof. Dan bia Esp ndola
15/08/2011
33
Passagem de parmetros
* modifica parmetro; & chama parmetro;
void complexo2 (float *r, float *t) { float real; real = (*r * *r) (*t * *t); *t = 2* *r * *t; *r = real; }
c = r +it
O simbolo *, na definio Estru turas dos parmetros real e de Dado imaginrio da funo se complexo2, indica que Ling esses parmetros PODEM uage ns ser modificados dentro Prof. Dan da funo bia
Esp ndola
15/08/2011
34
Passagem de parmetros
* modifica parmetro; & chama parmetro;
void complexo2 (float *r, float *t) { float real; real = (*r * *r) (*t * *t); *t = 2* *r * *t; *r = real; }
c = r +it Estru turas de Dado se Ling uage ns Prof. Dan bia Esp ndola
Passagem de parmetros
Implemente o programa para a chamada do complexo2...
#include <stdio.h> #include <stdlib.h> void complexo2(float *r,float *t); main() { float a,b; printf (entre com um nro complexo <int>:) scanf(%f %f, &a,&b); complexo2(&a,&b); printf (O quadrado do nro complexo <%f +i%f> ,a,b); }
15/08/2011
36
Estru turas de Dado se Ling uage ns Prof. Dan bia Esp ndola