Вы находитесь на странице: 1из 82

DCC 119

Algoritmos

Um conceito simples seria: Subrotina um parcela de cdigo

computacional que executa uma tarefa bem definida, sendo que essa tarefa pode ser executada (chamada) diversas vezes num mesmo programa.

Necessidade de dividir um problema computacional em pequenas partes. Os programadores verificaram que muitas destas pequenas partes se repetiam. Ex.: Impresso de mensagens, zerar um vetor, fazer uma operao matricial, etc.

Deve-se usar subrotinas sempre que: Utilizar uma parte do cdigo em vrias partes do programa;

Vrios programas iro utilizar os mesmos cdigos (bibliotecas);

Abstrair a complexidade e facilitar o entendimento do programa.

Facilita a programao estruturada:


dada as fases previstas nos refinamentos sucessivos decompe-se o programa em mdulos funcionais tais mdulos podem ser organizados/programados como subrotinas Ou seja: viabiliza a modularizao

Executam uma tarefa bem definida

No funcionam sozinhas: devem ser chamadas por um programa principal ou por outra subrotina

Permite a criao de variveis prprias e a manipulao de variveis externas (devidamente parametrizadas)

Facilita a legibilidade do cdigo atravs da: estruturao (subrotinas so agrupadas fora do programa principal) enxugamento (atravs de diversas chamadas da mesma subrotina)

Existem dois tipos de subrotinas:


Procedimentos: no retornam nenhum valor. So usadas para realizar alguma operao que no gera dados.

Funes: retornam valor. So utilizadas para realizar uma operao e retornam alguma resposta relativa operao realizada.

A sintaxe de declarao de um procedimento :


Nome que identifique a ao a ser executada no procedimento (sem espaos em branco!) Ex.: imprimeMedia

<nome do procedimento> (<lista de parmetros>) { <declarao de variveis locais> <comandos> }

A sintaxe de declarao de um procedimento :


Valores recebidos como parmetro. Ex.: (A,B,20,30)

<nome do procedimento> (<lista de parmetros>) { <declarao de variveis locais> <comandos> }

A sintaxe de declarao de um procedimento :

<nome do procedimento> (<lista de parmetros>) { <declarao de variveis locais> <comandos> } Variveis necessrias para a
codificao do procedimento, alm das passados na lista de parmetros.

A sintaxe de declarao de um procedimento :

<nome do procedimento> (<lista de parmetros>) { <declarao de variveis locais> <comandos> }


Comandos que implementam o procedimento desejado.

imprimeMaior(inteiro X, inteiro Y)

se (X > Y) { imprima(X); } seno { imprima(Y); }


}

imprimeMaior(inteiro X, inteiro Y) { se (X > Y) { imprima(X); } seno { imprima(Y); } } principal { inteiro A, B; leia(A,B); imprimeMaior(A,B); }

Toda varivel pertencente ao procedimento chamada de varivel local, pois ela s pode ser utilizada dentro do escopo do procedimento. Fazem parte das variveis locais de um procedimento: - as variveis declaradas no procedimento; - todos os parmetros recebidos pelo procedimento.

Chamada por valor: passado uma cpia da varivel para a subrotina, ou seja, feito uma cpia do argumento para o parmetro. Qualquer alterao feita no parmetro no reflete em alterao no argumento. Chamada por referncia: todas as alteraes realizadas no parmetro, refletem em alteraes no argumento, ou seja, ambas as variveis apontam para o mesmo endereo de memria. Para isso, necessrio utilizar o modificar ref, indicando que ser uma referncia a uma varivel.

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } Linha principal seno A B C { P1 imprima(Y); P8 P2 Z Y; P3 P9 P4 } P5 } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } Linha principal seno A B C { P1 imprima(Y); P8 P2 Z Y; P3 P9 P4 } P5 } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z -

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } Linha principal seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 P9 P4 } P5 } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z -

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 } P5 } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z -

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z -

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10

imprimeMaior X Y Z -

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 11 lixo

imprimeMaior X Y Z 22 11 lixo

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) // (22 > 11) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 22 11 11 lixo lixo

imprimeMaior X Y Z 22 11 lixo 22 11 lixo

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); // imprima (22) P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 22 22 11 11 11 lixo lixo lixo

imprimeMaior X Y Z 22 11 lixo 22 11 lixo 22 11 lixo

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; // Z 22 P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 22 22 22 11 11 11 11 lixo lixo lixo

imprimeMaior X Y Z 22 11 lixo 22 11 lixo 22 11 lixo 22 11 22

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; // Z 22 P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 22 22 22 11 11 11 11 lixo lixo lixo 22

imprimeMaior X Y Z 22 11 lixo 22 11 lixo 22 11 lixo 22 11 22

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); }
P6 P7 P8 P9 P8 P9 P10 22 22 22 22 11 11 11 11 lixo lixo lixo 22

imprimeMaior X Y Z 22 11 lixo 22 11 lixo 22 11 lixo 22 11 22

P6 imprimeMaior(inteiro X, inteiro Y,ref inteiro Z) { se (X > Y) P7 { imprima(X); P8 Z X; P9 } principal Linha seno A B C { P1 imprima(Y); P8 P2 lixo lixo lixo Z Y; P3 22 lixo lixo P9 P4 22 11 lixo } P5 22 11 lixo } P1 principal { P2 inteiro A, B, C; 22; P3 A 11; P4 B P5 imprimeMaior(A,B,C); P10 imprima(C); //imprima(22) }
P6 P7 P8 P9 P8 P9 P9 22 22 22 22 11 11 11 11 lixo lixo lixo 22

imprimeMaior X Y Z 22 11 lixo 22 11 lixo 22 11 lixo 22 11 22

22

11

22

Em C, para que uma subrotina atue como um procedimento devemos declarar algo do tipo:
void imprime (int val) { printf( %d ,val); }

Parmetros de uma subrotina em C


Passados atravs da lista de parmetros Estes parmetros podem ser cpia dos dados do programa (quando eles no sero alterados) ou pode-se permitir que a subrotina altere os dados do programa diretamente.

Parmetros de uma subrotina em C Exemplo


#include <stdio.h> void ParImpar(int a) { int resto; resto=a%2; if (resto==0) printf( par ); else printf( } int main() { int x; scanf( %d ,&x); ParImpar(x); return 0; } mpar );

Parmetros de uma subrotina em C Exemplo


#include <stdio.h> void ParImpar(int a) { int resto; resto=a%2; if (resto==0) printf( par ); else printf( } int main() { int x; scanf( %d ,&x); ParImpar(x); return 0; } mpar );

Variveis do main: x

Parmetros de uma subrotina em C Exemplo


#include <stdio.h> void ParImpar(int a) { int resto; resto=a%2; if (resto==0) printf( par ); else printf( } int main() { int x; scanf( %d ,&x); ParImpar(x); return 0; } mpar );

Variveis locais: a (cpia da varivel x) resto

Parmetros de uma subrotina em C Exemplo


Chamada por valor: Qualquer alterao feita no parmetro no reflete em alterao no argumento. Chamada por referncia: Todas as alteraes realizadas no parmetro, refletem em alteraes no argumento, ou seja, ambas as variveis apontam para o mesmo endereo de memria. Para isso, necessrio que seja passado o endereo do argumento e o parmetro receba-o na forma de ponteiro.

imprimeMaior(inteiro X, inteiro Y, ref inteiro Z) { se (X > Y) { imprima(X); Z X; } seno { imprima(Y); Z Y; } }

void imprimeMaior(int X, int Y, int *Z)

{ if (X > Y) { printf( %d ,X); *Z = X; } else { printf( %d ,Y); *Z = Y; } }

principal { inteiro A, B, C; A 22; B 11; imprimeMaior(A,B,C); imprima(C); }

main() { int A, B, C; A = 22; B = 11; imprimeMaior(A,B,&C); printf( %d ,C); }

um tipo especial de procedimento Retorna como resultado o valor calculado pela funo, que deve ser do tipo bsico definido.

A sintaxe de declarao de uma funo :


Tipo do dado a ser retornado como resultado da execuo da funo. <tipo bsico> <nome da funo> (<lista de parmetros formais>) { <declarao de variveis locais> <comandos> retorne <valor de retorno>; }

A sintaxe de declarao de uma funo :


Nome que identifique a ao a ser executada na funo (sem espaos em branco!) Ex.: calculaMedia

<tipo bsico> <nome da funo> (<lista de parmetros formais>) { <declarao de variveis locais> <comandos> retorne <valor de retorno>; }

A sintaxe de declarao de uma funo :


Valores recebidos como parmetro. Ex.: (A,B,20,30)

<tipo bsico> <nome da funo> (<lista de parmetros formais>) { <declarao de variveis locais> <comandos> retorne <valor de retorno>; }

A sintaxe de declarao de uma funo :

<tipo bsico> <nome da funo> (<lista de parmetros formais>) { <declarao de variveis locais> <comandos> retorne <valor de retorno>; } Declarao das variveis locais e sequencia de comandos para a realizao da funo.

A sintaxe de declarao de uma funo :

<tipo bsico> <nome da funo> (<lista de parmetros formais>) { <declarao de variveis locais> <comandos> retorne <valor de retorno>; } A funo permite retornar um valor, resultado das aes nela programadas. Este valor deve ser do <tipo bsico> declarado antes do nome da funo.

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A D

valorAbsoluto X Y

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A D -

valorAbsoluto X Y -

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo D lixo

valorAbsoluto X Y -

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 D lixo lixo

valorAbsoluto X Y -

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 D lixo lixo ???

valorAbsoluto X Y -

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 D lixo lixo ??? ???

valorAbsoluto X -40 Y -

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 D lixo lixo ??? ??? ???

valorAbsoluto X -40 -40 Y lixo

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo ??? ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo ??? ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo ??? ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

-40

???

-40

40

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo ??? ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

-40 -40

??? 40

-40 -40

40 40

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo 40 ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

-40 -40

??? 40

-40 -40

40 40

Funes

exemplo

P5 real valorAbsoluto ( real X ) { P6 real Y; P7 se (X 0) // (-40 0) { Linha P8 Y X; } P1 seno P2 { P3 P8 Y - X; P4 } P5 P9 retorne Y; P6 } P1 principal P7 { P8 P2 real A,D; P8 P3 A -40; P9 P4 D valorAbsoluto(A); P10 P10 imprima (D); }

principal A lixo -40 -40 -40 -40 -40 D lixo lixo 40 ??? ??? ???

valorAbsoluto X -40 -40 -40 Y lixo lixo

-40 -40 -40

??? 40 40

-40 -40

40 40

Funes: retornam valor. So utilizadas para realizar uma operao e retornam alguma resposta relativa operao realizada.

Exemplo:
int soma (int a, int b) { return (a+b); }

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
25 50 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
25 50 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&a a1 &b b1 25 50 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&a a1 &b b1 25 aux 25 50 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&a a1 &b b1 25 aux 50 50 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&a a1 50 25 75 a b c

&b b1 25 aux

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
50 25 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&b a1 &c b1 50 25 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&b a1 &c 25 b1 aux 50 25 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&b a1 &c 25 b1 aux 50 75 75 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
&b a1 &c 25 b1 aux 50 75 25 a b c

Mem ria
#include <stdio.h> void Troca(int *a1, int *b1) { int aux=*a1; *a1=*b1; *b1=aux; } int main() { int a=25, b=50, c=75; Troca(&a,&b); Troca(&b,&c); printf( %d,%d,%d ,a,b,c); return 0; }
50 75 25 a b c

Variaes na implementao de subrotinas em C


#includes.....
#includes.....

int Func1(int a); //prottipo main() { ...... x=Func1(10); ..... } int Func1(int a) { ........ }

int Func1(int a) { ........ } main() { ...... x=Func1(10); ..... }

Exerccios
1) O que ser impresso no programa abaixo?
#include <stdio.h> void calculo (int *p, int *q) { *p = *p * 10; *q = *q + 10; } int main() { int x = 2, y = 5; calculo(&x,&y); printf("%d - %d",x,y); return 0; }

Exerccios
2) Qual a sada do programa abaixo:
#include <stdio.h> int calculo (int p, int q) { p = p * 10; q = q + 10; return(p + q); } int main() { int x = 2, y = 5; printf( %d %d %d ,x,y,calculo(x,y)); return 0; }

Exerccios
3) Qual a sada do programa abaixo:
#include <stdio.h> int calculo (int p, int *q) { p = p * 10; *q = *q + 10; return(p); } int main() { int x = 2, y = 5, z; z = calculo(x,&y); printf( %d %d %d ,x,y,z); return 0; }

Exerccios
4) Qual a sada do programa abaixo:
#include <stdio.h> int cal(int p, int *q, int *r) { p = p * 10; *q = *q + 10; *r = *r - 10; return(p); } int main() { int x = 2, y = 5, z = 3, r; r = cal(x,&y,&z); printf( %d %d %d %d ,x,y,z,r); return 0; }

Subrotinas
DCC 120

REVISO: Forma Geral A forma geral de uma subrotina : especificador_tipo nome ( lista parmetros ) { corpo da subrotina; return xxx; }

REVISO: Tipos de Subrotinas procedimentos


void ImprimeSoma (int a, int b) {
printf( %d , a+b); }

funes
int Soma (int a, int b) { return (a+b); }

REVISO: Como implementar Subrotinas


#includes.....
#includes.....

int Func1(int a); //prottipo main() { ...... x=Func1(10); ..... } int Func1(int a) { ........ }

int Func1(int a) { ........ } main() { ...... x=Func1(10); ..... }

Exerccios
1) Escreva um procedimento que receba como parmetro dois valores inteiros n1 e n2 e imprima o intervalo fechado entre eles, do menor para o maior. Por exemplo: se n1 = 2 e n2 = 5, o procedimento ir imprimir 2, 3, 4, 5. 2) Faa um procedimento que receba por parmetro o tempo de durao de um experimento expresso em segundos e imprima na tela esse mesmo tempo em horas, minutos e segundos. 3) Faa uma funo que receba por parmetro o raio de uma esfera e calcula o seu volume: v = (4 * PI * R3) /3. 4) Faa uma funo que receba a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias.

Exerccios
5) Faa um programa que apresente o seguinte Menu para o usurio: Escolha uma opo de clculo para dois nmeros: 1) Soma 2) Produto 3) Quociente 4) Sair Opo:__

O Menu acima deve ser apresentado para o usurio enquanto ele no escolher a opo 4 (sair do programa). O usurio fornecer 2 nmeros se escolher as opes de clculo 1, 2 ou 3. Para cada opo de clculo deve existir (obrigatoriamente) uma funo definida (soma, produto e quociente dos dois nmeros fornecidos pelo usurio). O resultado do clculo deve ser escrito na tela.

Exerccios
6) Idem ao exerccio 1, agora com o seguinte Menu Escolha uma opo de clculo para um nmero: a) Fatorial b) Exponencial c) Raiz quadrada d) Sair Opo: __

Nas opes b e c pode-se utilizar funes predefinidas do C.