Você está na página 1de 37

___________________________________________________________________________________________

ALGORITMOS EM DELPHI E C++ ___________________________________________________________________________________________

1. CONCEITOS BSICOS
1.1. Viso Geral de um Computador

Hardware Software de controle Sistema operaciona l Computador Software Aplicativo Linguagem de programa o
Linguagem de mquina L.P. Linguagem de baixo nivel Assembly Linguagens de alto nivel Pascal, Delphi, Fortran, Visual Basic, C, C + +, Java, etc
1.2. Termos Freqentemente Usados
1.2.1. Algoritmo Descrio passo a passo do processo a ser utilizado na soluo de um problema. Ex. 1: Calcular a rea de um tringulo Comandos: Ler, Calcular, Escrever Ler o valor da base Ler o valor da altura Calcular a rea Escrever o resultado Ex. 2: Rob vai comprar po Comandos: ir, pegar e entregar Pegar o dinheiro Ir a padaria Entregar o dinheiro Pegar o po Ir para casa Entregar o po

1.2.2. Programa Codificao de um algoritmo em uma linguagem de programao. Linguagem de Programao Programa Executvel (Aplicativo)

Problema Algoritmo Programa Fonte

Soluo

1.2.3. Sintaxe Conjunto de regras que constituem a linguagem de programao, palavras utilizadas, operadores, etc. 1.2.4. Fluxo de Informaes Seqncia em que as instrues de um algoritmo so realizadas para resolver um problema. Ler as informaes Entrada de dados Processar as informaes Mostrar os resultados Sada de dados

1.3. Desenvolvimento de Algoritmos


necessrio conhecer o que o computador dispe para a formulao de um algoritmo.

1.3.1. Constantes So valores especficos que no se modificam durante a execuo de um algoritmo. a) Constantes inteiras: Ex.: b) Constantes reais: Ex.: 0 32 -651 SEM Expoente 100.0 0.45 -0.357

COM Expoente 1.0 E +2 4.5 E -1 -357.0 E -3

c) Constantes caracteres: Ex.: J 1 ?

d) Constantes literais (strings): Utiliza-se aspas simples em Delphi e aspas dupla em C++. Ex.: Jos Uma frase qualquer 570

e) Constantes lgicas: Ex.: Verdadeiro (1) Falso (0)

1.3.2. Variveis So valores armazenados na memria do computador que podem ser alterados durante a execuo do algoritmo. A memria do computador pode ser vista como um armrio com diversas gavetas, onde as informaes so guardadas. Cada gaveta possui um nome que identifica a informao armazenada, chamada de varivel.

As variveis armazenadas na memria podem ser dos seguintes tipos: a) Inteiro: b) Real: c) Caractere: d) String: e) Lgico: Notao: Algoritmo Delphi C++ Real Real double Inteiro Integer int Caractere Char char String String char[] Lgico Boolean Verdadeiro True 1 ( 0) Falso False 0
2

qualquer nmero Z.

Ex.: -3; 5; 1000; 1; 0 Ex.: 1.5; 3.2; -3.1415; 2.0 Ex.: *; -; A ... Z; a ... z; 0 ... 9 Ex.: vasco; flamengo ; Ex.: True ( 1 ), False ( 0 )

qualquer nmero R. qualquer smbolo do teclado. conjunto de caracteres. verdadeiro ou falso.

1.3.3. Operadores So smbolos representando funes que podem ser realizadas com constantes e variveis. a) Operadores Aritmticos: implementam as funes aritmticas. Delphi + * / div mod C++ + * / / % ++ Funo Adio Subtrao Multiplicao Diviso real Diviso inteira Resto da diviso inteira Incremento Decremento Delphi R, C, S R R R C++ I, R, C I, R, C I, R, C R I, C I, C I, R, C I, R, C

I, I, I, I, I I

Exemplos em Delphi Exemplos corretos: 2+3=5 2.3 + 3.4 = 5.7 2 + 3 = 23 A + 2 = A2 bota + fogo = botafogo 3.0 + 2 = 5.0 ABC + D = ABCD 2 - 3 = -1 5.2 - 1.2 = 4.0 3 * 4 = 12 4 / 3 = 1.333 7 mod 2 = 1 7 div 2 = 3 Erros: botafogo - fogo 12 - 1 1 * 3 VASCO * 5 PELE / XUXA 5.2 mod 2 10 div 3.5 RIO + 2004 Resumo: I+I I+R R+R C+C C+S S+S I-I I-R R-R I*I I*R R*R I/I I/R R/R I mod I I div I = = = = = = = = = = = = = = = = = I R R S S S I R R I R R R R R I I

Exemplos em C++ Exemplos corretos: 2+3=5 2.3 + 3.4 = 5.7 2 + 3 = 101 A + 2 = 115 3.0 + 2 = 5.0 2 - 3 = -1 5.2 - 1.2 = 4.0 3 * 4 = 12 4/3=1 7%2=1 7/2=3 8++ = 9 8-- = 7 Erros: bota + fogo = botafogo botafogo fogo 12 - 1 ABC + D = BCD VASCO * 5 PELE / XUXA 5.2 % 2 RIO + 2004 Resumo: I+I I+R R+R C+C I-I I-R R-R I*I I*R R*R I/I I/R R/R I%I = = = = = = = = = = = = = = I R R I I R R I R R I R R I

b) Operadores Relacionais: so usados para comparao entre tipos compatveis de dados. Delphi = <> >= <= > < C++ == != >= <= > < Funo Igual Diferente Maior ou igual Menor ou igual Maior Menor Delphi Todos Todos Todos Todos Todos Todos C++ R, C R, C R, C R, C R, C R, C

I, I, I, I, I, I,

Obs.: Em Delphi, o resultado por operadores relacionais sempre um valor lgico Verdadeiro ou Falso. Em C++, o resultado um valor inteiro 0 ou 1. Exemplos em Delphi Exemplos corretos: 2=3 2 <> 3 3.5 > 4 6.2 <= 8.5 a > b A < a macaco > banana macaco > macaca M > MACACO AB > A Exemplos em C++ Exemplos corretos: 2 == 3 2 != 3 3.5 > 4 6.2 <= 8.5 a > b A < a 1 == 1 3 >= a 0 1 0 1 0 1 0 0 Erros: 3.5 < macaco 4 == abc macaco > banana macaco > macaca M > MACACO AB > A F V F V F V V V F V Erros: 1 = 1 3.5 < macaco 3 >= a 4 = abc

c) Operadores Lgicos: implementam as funes lgicas bsicas. Delphi and or not C++ && || ! Funo E (Conjuno) OU (Disjuno) NO (Negao) Delphi Lgico Lgico Lgico C++ I, R, C I, R, C I, R, C

Obs.: Em Delphi, o resultado por operadores relacionais sempre um valor lgico Verdadeiro ou Falso. Em C++, o resultado um valor inteiro 0 ou 1. CONJUNO - Operador E X F F V V Y F V F V XEY F F F V

DISJUNO - Operador OU X F F V V NEGAO - Operador NO X F V Exemplos em Delphi (3 > 2) and (B < C) (5.3 < 3) or (eu > EU) (2 <> 2) or (20 < 10) (2 > 3) or (10 < 20) True or (10 > 20) Not (10 > 20) Not (macaco > banana) Not (True) Exemplos em C++ 3 > 2 && B < C 2 != 2 || 20 < 10 2 > 3 || 10 < 20 1 || 10 > 20 ! (10 > 20) !1 1 0 1 1 1 0 V V F V V V F F NO X V F Y F V F V X OU Y F V V V

1.4. Prioridade nas Operaes


1.4.1. Delphi As operaes aritmticas, relacionais e lgicas so executadas obedecendo a uma certa ordem de prioridade, conforme a seguir: a) As operaes comeam a ser executadas da esquerda para a direita. b) So resolvidas primeiramente as operaes entre parnteses, partindo do mais interno para o mais externo. c) Graus de prioridade dos operadores Operadores Aritmticos e Lgicos Negao (Lgico) Multiplicao e diviso Quociente da diviso inteira e resto da diviso inteira Conjuno (Lgico) Adio e Subtrao Disjuno (Lgico) Operadores Relacionais Todos no mesmo nvel ( not ) (* /) ( div ) ( mod ) ( and ) (+ -) ( or )

1.4.2. C++ As operaes aritmticas, relacionais e lgicas so executadas obedecendo a uma certa ordem de prioridade, conforme a seguir: a) As operaes comeam a ser executadas da esquerda para a direita. b) So resolvidas primeiramente as operaes entre parnteses, partindo do mais interno para o mais externo. c) Graus de prioridade dos operadores Operadores Aritmticos e Lgicos Negao (Lgico) Multiplicao e diviso Adio e Subtrao Operadores Relacionais Menor, Menor Igual, Maior, Maior Igual Igual, Diferente Operadores Lgicos Conjuno (Lgico) Disjuno (Lgico)

(!) (* /%) (+ -)

(< <= > >=) (== !=)

( && ) ( || )

1.5. Declarao de Variveis


No incio dos algoritmos (e dos programas), necessrio informar ao computador as variveis que sero utilizadas no decorrer do algoritmo. Cada varivel deve possuir um nome (chamado de identificador) e um tipo de dado, que informa o tipo de valor armazenado na memria. A operao de informar as variveis do algoritmo chamada de declarao de variveis. Ex.: Declarao de variveis base, altura, area nome teste i, j : Real; : String; : Lgico; : Inteiro;

Regras bsicas para formao de nomes de variveis: Iniciar-se por uma letra ou pelo caractere underscore _ Ter um tamanho definido e constante Conter letras ou algarismos No conter espaos em branco Obs: Em C++, as variveis e os comandos da linguagem so sensveis ao caso, ou seja, h diferena entre variveis com identificadores em maisculo e em minsculo.

1.6. Comandos Bsicos


1.6.1. Comando de Atribuio usado para dar um valor a uma varivel. Comando de Atribuio Algoritmo Delphi C++ Smbolo := =

Ex.:

Declarao de variveis X, Y A P, Q, U K S X 0; Y X + 1; P 1.0; Q Y; U raiz(P); S Brasil; A ; K Falso; : Inteiro; : Caractere; : Real; : Lgico; : String; // X recebe o valor zero inteiro // Y recebe o valor de x mais um // P recebe o valor um real // Q recebe o valor, inteiro, de Y // U recebe o valor da raiz quadrada de P // S recebe a string Brasil // A recebe o espao em branco // K recebe o valor lgico F

1.6.2. Comando de Entrada de Dados usado para ler um valor do teclado e armazenar em uma varivel. Entrada de Dados Algoritmo Delphi C++ Ex.: Leia (base); Leia (altura); Smbolo Leia(Variavel) Readln(Variavel) cin >> Variavel

1.6.3. Comando de Sada de Dados usado para mostrar na tela um texto (constante string) ou o valor de uma varivel. Sada de Dados Algoritmo Delphi C++ Ex.: Escreva (Eu sou eu, jacar um bicho); Escreva (area); Smbolo Escreva(Varivel ou Texto) Writeln(Variavel ou Texto) cout << Variavel ou Texto

1.7. Comentrios
So informaes acrescentadas a um algoritmo com o objetivo de identific-lo ou de esclarecer alguns de seus trechos. Delphi Comentrio de linha: // Comentrio de bloco: { } C++ Comentrio de linha: // Comentrio de bloco: /* */

1.8. Exemplos de Algoritmos


1.8.1. Algoritmo para calcular a rea de um tringulo, dados a base e a altura. Algoritmo 01 Declarao de variveis base, altura, area : Real; Incio Escreva (Digite o valor da base); Leia (base); Escreva (Digite o valor da altura); Leia (altura); Area base * altura / 2; Escreva (A area = , area); Fim. Delphi program Delphi_Alg01; {$APPTYPE CONSOLE} uses SysUtils; var base, altura, area : real; begin writeln('Digite a base'); readln(base); writeln('Digite a altura'); readln(altura); area := base * altura / 2; writeln('Area = ', area:0:2); readln; end. // Trs variveis do tipo real

// Lendo o valor da base // Lendo o valor da altura // Calculando a rea // Mostrando o resultado

C++ #pragma hdrstop #include <condefs.h> #include <iostream.h> // cin, cout #include <conio.h> // getch #pragma argsused double base, altura, area; int main(int argc, char **argv) { cout << "Digite a base \n"; cin >> base; cout << "Digite a altura \n"; cin >> altura; area = base * altura / 2; cout << "Area = " << area; getch(); return 0; }

1.8.2. Algoritmo para calcular a mdia aritmtica de duas notas. Algoritmo 02 Declarao de variveis n1, n2, m : Real; Incio Escreva (Digite a nota 1); Leia (n1); Escreva (Digite a nota 2); Leia (n2); m (n1 + n2) / 2; Escreva (Media = , m); Fim. Delphi program Delphi_Alg02; {$APPTYPE CONSOLE} uses SysUtils; var n1, n2, m : real; begin writeln('Digite a nota 1'); readln(n1); writeln('Digite a nota 2'); readln(n2); m := (n1 + n2) / 2; writeln('Media = ', m:0:2); readln; end. // Trs variveis do tipo real

// Lendo a primeira nota // Lendo a segunda nota // Calculando a mdia // Mostrando o resultado

C++ #pragma hdrstop #include <condefs.h> #include <iostream.h> // cin, cout #include <conio.h> // getch #pragma argsused double n1, n2, m; int main(int argc, char **argv) { cout << "Digite a nota 1 \n"; cin >> n1; cout << "Digite a nota 2 \n"; cin >> n2; m = (n1 + n2) / 2; cout << "Media = " << m; getch(); return 0; }

1.9. Exerccios
1. Mostrar o resultado das operaes abaixo. Indicar se a operao pode ou no ser executada e, tambm, o tipo do resultado (real, inteiro, caractere, string ou lgico). a) b) c) d) e) f) g) h) i) j) k) l) m) n) o) p) q) r) 5*3 5 * 3,0 2.0 / 2 2/2 Fla + mengo x + x xx - x 11 - 1 5.3 >= 5 5 = 5.0 2 > 2 A > 2 CEFET > UFRN CEFET <= E (E>F) ou (2 < 1) No ( 10,0 < 3) No ( No (10,0 < 3)) (2 > 3) ou ( 3 > 2)

2. Implementar algoritmos para a) Calcular a rea e o permetro de um retngulo. Dados: base e altura. b) Calcular a mdia final de uma disciplina. Dados: notas dos 4 bimestres. c) Calcular a nota necessria para passar por mdia no 4 bimestre. Dados: notas dos 3 primeiros bimestres. d) Calcular a quantidade de dinheiro gasta por um fumante. Dados: o nmero de anos que ele fuma, o n de cigarros fumados por dia e o preo de uma carteira.

10

2. ESTRUTURAS DE CONTROLE DE FLUXO


So utilizadas para controlar o fluxo de execuo dos comandos em um algoritmo ou programa.

2.1. Estruturas Condicionais


Permitem controlar a execuo ou no de um comando ou bloco de comandos. 2.1.1. Alternativa Simples (SE) Realiza um teste para determinar se um comando ou um bloco de comandos executado. Algoritmo Se Teste Ento Comando; Se Teste Ento Incio Bloco de Comandos Fim; Delphi if Teste then Comando; if Teste then begin Bloco de Comandos end; C++ if (Teste) Comando; if (Teste) { Bloco de Comandos; }

Algoritmo 03: Verifica se um valor maior que zero. Declarao de variveis X : Inteiro; Incio Escreva (Digite um nmero); Leia (X); Se X > 0 Ento Escreva (Nmero maior que zero); Fim. Delphi program Delphi_Alg03; {$APPTYPE CONSOLE} uses SysUtils; var x : integer; begin writeln('Digite um numero'); readln(x); if x > 0 then writeln('Numero maior que zero'); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int x; int main(int argc, char **argv) { cout << "Digite um numero \n"; cin >> x; if (x > 0) cout << "Numero maior que zero"; getch(); return 0; }
11

2.1.2. Alternativa Dupla (SE SENO) Executa um ou outro comando (ou bloco de comandos) de acordo com um teste realizado. Algoritmo Se Teste Ento Comando1 Seno Comando2; Se Teste Ento Incio Bloco de Comandos 1; Fim Seno Incio Bloco de Comandos 2; Fim Delphi if Teste then Comando1 else Comando2; if Teste then begin Bloco de Comandos 1; end else begin Bloco de Comandos 2; end; C++ if (Teste) Comando1; else Comando2; if (Teste) { Bloco de Comandos 1; } else { Bloco de Comandos 2; }

Algoritmo 04: Testa se um nmero natural par ou impar. Declarao de variveis X : Inteiro; Incio Escreva (Digite um nmero); Leia (X); Se X RestoDivisao 2 = 0 Ento Escreva (Nmero Par) Seno Escreva (Nmero mpar); Fim. Delphi program Delphi_Alg04; {$APPTYPE CONSOLE} uses SysUtils; var x : integer; begin writeln('Digite um numero'); readln(x); if x mod 2 = 0 then writeln('Numero par') else writeln('Numero impar'); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int x; int main(int argc, char **argv) { cout << "Digite um numero \n"; cin >> x; if (x % 2 == 0) cout << "Numero par"; else cout << "Numero impar"; getch(); return 0; }
12

2.1.3. Alternativa Mltipla (CASO) Executa um comando (ou bloco de comandos) de acordo com um valor especfico de uma varivel. ALGORITMO
Caso ( Varivel ) Seja <valor1> : Comando1; <valor2, valor3> : Comando2; Seno ComandoN; Fim;

Delphi
Case ( Varivel ) Of <valor1> : Comando1; <valor2, valor3> : Comando2; Else ComandoN; End;

C++
switch ( Varivel ) { case <valor1> : Comando1; break; case <valor2> : case <valor3> : Comando2; break; default : ComandoN; } switch ( Varivel ) { case <valor1>: Bloco de Comandos 1; break; case <valor2>: case <valor3>: Bloco de Comandos 2; break; default : Bloco de Comandos N; }

Caso (Varivel) Seja <valor1> : Incio Bloco de Comandos 1; Fim; <valor2, valor3> : Incio Bloco de Comandos 2; Fim; Seno Incio Bloco de Comandos N; Fim; Fim;

Cas e (Varivel) Of <Valor1> : Begin Bloco de Comandos 1; End; <Valor2, valor3> : Begin Bloco de Comandos 2; End; Else Begin Bloco de Comandos N; End; End;

Obs: A varivel que possui o valor testado deve ser do tipo inteiro, caractere ou lgico. Algoritmo 05: Testa diferentes valores para o cdigo DDD e imprime o nome da cidade correspondente de acordo com a lista abaixo; para um DDD fora da lista, imprime a mensagem Cidade no cadastrada. { 11 So Paulo 21 Rio de Janeiro 61 Braslia 84 Natal } Declarao de variveis DDD : Inteiro; Incio Escreva (Digite o cdigo DDD da cidade); Leia (DDD); Caso (DDD) Seja 11 : Escreva ('So Paulo'); 21 : Escreva ('Rio de Janeiro'); 61 : Escreva ('Braslia'); 84 : Escreva ('Natal'); Seno Escreva ('Cidade no cadastrada'); Fim; Fim.

13

Delphi program Delphi_Alg05; {$APPTYPE CONSOLE} uses SysUtils; var x : integer; begin writeln('Digite o DDD da cidade'); readln(x); case x of 11 : writeln('Sao Paulo'); 21 : writeln('Rio de Janeiro'); 61 : writeln('Brasilia'); 84 : writeln('Natal'); else writeln('Cidade nao cadastrada'); end; readln; end.

C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int x; int main(int argc, char **argv) { cout << "Digite o DDD da cidade \n"; cin >> x; switch (x) { case 11 : cout << "Sao Paulo"; break; case 21 : cout << "Rio de Janeiro"; break; case 61 : cout << "Brasilia"; break; case 84 : cout << "Natal"; break; default : cout << "Cidade nao cadastrada"; } getch(); return 0; } possvel substituir uma estrutura de alternativa mltipla por estruturas de alternativa dupla. O algoritmo DDD ficaria da seguinte maneira:

14

Algoritmo 06: Implementao de uma estrutura de alternativa mltipla utilizando alternativas duplas. Declarao de variveis DDD : Inteiro; Inicio Escreva (Digite o cdigo DDD da cidade); Leia (DDD); Se DDD = 11 Ento Escreva ('So Paulo') Seno Se DDD = 21 Ento Escreva ('Rio de Janeiro') Seno Se DDD = 61 Ento Escreva ('Braslia') Seno Se DDD = 84 Ento Escreva ('Natal') Seno Escreva ('No Cadastrada'); Fim. Delphi program Delphi_Alg06; {$APPTYPE CONSOLE} uses SysUtils; var x : integer; begin writeln('Digite o DDD da cidade'); readln(x); if x = 11 then writeln('Sao Paulo') else if x = 21 then writeln('Rio de Janeiro') else if x = 61 then writeln('Brasilia') else if x = 84 then writeln('Natal') else writeln('Cidade nao cadastrada'); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int x; int main(int argc, char **argv) { cout << "Digite o DDD da cidade \n"; cin >> x; if (x == 11) cout << "Sao Paulo"; else if (x == 21) cout << "Rio de Janeiro"; else if (x == 61) cout << "Brasilia"; else if (x == 84) cout << "Natal"; else cout << "Cidade nao cadastrada"; getch(); return 0; }
15

2.1.4. Exerccios 3. Implementar algoritmos para: a) Ler trs nmeros reais e verificar se o primeiro maior que a soma dos outros dois. b) Ler dois nmeros reais e imprimir o maior deles, ou a mensagem "Nmeros iguais", se forem iguais. c) Ler dois nmeros inteiros do teclado. Se o segundo for diferente de zero, calcular e imprimir o quociente do primeiro pelo segundo. Caso contrrio, imprimir a mensagem: "Diviso por zero". d) Ler trs valores e dizer se eles formam um tringulo. Caso afirmativo, dizer seu tipo (equiltero, issceles ou escaleno). e) Calcular as razes reais da equao aX2 + bX + c = 0, dados a, b e c. f) Ler trs valores e apresent-los em ordem crescente. g) Ler o ltimo nmero da placa de um veculo e identificar o ms de pagamento do IPVA de acordo com a lista a seguir: 1 janeiro; 2 fevereiro; 3 maro; 4 abril; ...; 9 setembro; 0 outubro. h) Ler o nmero do ms (1 janeiro; 2 fevereiro; ...; 12 dezembro) e identificar em que trimestre o ms est includo.

2.2. Estruturas de Repetio


Permitem controlar a repetio de um comando ou bloco de comandos. 2.2.1. Repetio com Teste no Incio Repete vrias vezes um comando ou um bloco de comandos enquanto o teste for verdadeiro. Algoritmo Enquanto Teste Faa Comando; Enquanto Teste Faa Incio Bloco de Comandos Fim; Delphi while Teste do Comando; while Teste do begin Bloco de Comandos end; } while (Teste) { Bloco de Comandos; C++ while (Teste) Comando;

Algoritmo 07: Imprime os nmeros mpares menores que 20, efetuando a soma. Declarao de variveis N, S : Inteiro; Incio N 1; S 0; Enquanto N < 20 Faa Incio Escreva (N); S S + N; N N + 2; Fim; Escreva (Soma = , S); Fim.
16

Delphi program Delphi_Alg07; {$APPTYPE CONSOLE} uses SysUtils; var n, s : integer; begin n := 1; s := 0; while n < 20 do begin writeln(n); s := s + n; n := n + 2; end; writeln('Soma = ', s); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int n, s; int main(int argc, char **argv) { n = 1; s = 0; while (n < 20) { cout << n << "\n"; s = s + n; n = n + 2; } cout << "Soma = " << s; getch(); return 0; } 2.2.2. Repetio com Teste no Fim Delphi: Repete vrias vezes um comando ou um bloco de comandos at que o teste seja verdadeiro. C++: Repete vrias vezes um comando ou um bloco de comandos enquanto o teste for verdadeiro. Algoritmo Repita Comando; At que (Teste); Repita Incio Bloco de Comandos Fim At que (Teste); Delphi repeat Comando; until Teste; repeat Bloco de Comandos until Teste; C++ do Comando; while (Teste); do { Bloco de Comandos; } while (Teste);
17

Algoritmo 08: Calcula a mdia de N nmeros lidos do teclado, utilizando o zero como finalizador. Declarao de variveis N, X, S, M : Real; Incio N 0; S 0; Repita Leia (X); S S + X; N N + 1; At que X = 0; M S / (N 1); Escreva (Media = , M); Fim. Delphi program Delphi_Alg08; {$APPTYPE CONSOLE} uses SysUtils; var n, x, s, m : real; begin n := 0; s := 0; repeat readln(x); s := s + x; n := n + 1; until x = 0; m := s / (n-1); writeln('Media = ', m); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> double n, x, s, m; int main(int argc, char **argv) { n = 0; s = 0; do { cin >> x; s = s + x; n++; } while (x); m = s / (n-1); cout << "Media = " << m; getch(); return 0; }
18

2.2.3. Repetio com Variao Fixa Repete um comando ou um bloco de comandos um nmero determinado de vezes, controlado por uma varivel chamada de varivel de controle (Var). Comando Algoritmo Para Var de <Incio> at <Fim> faa Comando; Bloco de Comandos Para Var de <Incio> at <Fim> faa Incio Bloco de Comandos; Fim; Delphi for Var := <Incio> to <Fim> do Comando; for Var := <Incio> to <Fim> do begin Bloco de Comandos; end; C++ for (Var = <Inicio>; Var <= <Fim>; Var++) Comando; for (Var = <Inicio>; Var <= <Fim>; Var++) { Bloco de Comandos; }

Algoritmo 09: Calcula o fatorial de um nmero. Declarao de variveis I, N, F : Inteiro; Incio F 1; Escreva(Digite um nmero); Leia (N); Para I de 1 at N Faa F F * I; Escreva (Fatorial = , F); Fim. Delphi program Delphi_Alg09; {$APPTYPE CONSOLE} uses SysUtils; var i, n, f : integer; begin f := 1; writeln('Digite um numero'); readln(n); for i := 1 to n do f := f * i; writeln('Fatorial = ', f); readln; end.
19

C++ #pragma hdrstop #include <condefs.h> #include <conio.h> #include <iostream.h> #pragma argsused int i, n, f; int main(int argc, char **argv) { f = 1; cout << "Digite um numero \n"; cin >> n; for (i = 1; i <= n; i++) f = f * i; cout << "Fatorial = " << f; getch(); return 0; }

2.2.4. Exerccios 4. Implementar algoritmos para: a) Mostrar os nmeros de 100 at 200 variando de 10 em 10. b) Mostrar os mltiplos positivos de 7 menores que 100. c) Calcular e mostrar a soma dos termos da srie: 6, 9, 12, 15, ..., 60. d) Calcular e mostrar a soma dos termos da srie: 7, 9, 11, 13, ..., 99. e) Ler um conjunto de valores inteiros positivos e determinar a quantidade de nmeros pares e mpares entrados. Considerar o valor Zero como finalizador. f) Ler dois valores e calcular o MDC e o MMC entre eles. g) Calcular o valor de S, dado abaixo

1 3 5 7 99 S = + + + +... + 1 2 3 4 50
h) Imprimir os N primeiros termos da srie de Fibonacci, vista abaixo, dado N. 1, 1, 2, 3, 5, 8, 13, ... (cada termo a soma dos dois anteriores)

i) Calcular o valor de S, dado abaixo: S = 10 - 15 + 20 - 25 + ... + 100 j) Ler um nmero e verificar se ele ou no um nmero primo.

20

3. VETORES , MATRIZES E STRINGS


3.1. Vetores
Vetor um tipo de dado utilizado para representar uma coleo de valores de um mesmo tipo. Uma varivel do tipo vetor armazena diversos valores que so referenciados por um nmero denominado de ndice. O ndice, em geral um nmero inteiro, indica a posio de um valor dentro do vetor. 3.1.1. Declarao de Vetores Na declarao de um vetor necessrio informar a quantidade de elementos que o compe. Para isso, utilizase a sintaxe apresentada a seguir: Delphi array[1..N] of Tipo onde: C++ Tipo[N]

Tipo um tipo de varivel que indica o tipo de cada elemento do vetor, N uma constante inteira que indica o nmero de elementos do vetor.

Exemplo: Declarao de um vetor com 5 elementos inteiros: Delphi: var X : array[1..5] of integer; C++: int X[5]; Exemplo: Declarao e iniciao de um vetor com 5 elementos inteiros Delphi: var X : array[1..5] of integer = ( 0, 0, 0, 0, 0 ); C++: int X[5] = { 0, 0, 0, 0, 0 }

3.1.2. Referenciando os Elementos do Vetor Cada elemento do vetor referenciado individualmente por meio do seu ndice indicado entre colchetes []. Quando um elemento referenciado, as operaes de escrita e leitura podem ser realizadas de forma anloga utilizada para as variveis de tipos primitivos. Exemplo: Atribuio do valor 10 ao primeiro elemento do vetor X: Delphi: X[1] := 10; C++: X[0] = 10; Exemplo: Leitura de segundo valor do vetor pelo teclado: Delphi: Readln( X[2] ); C++: cin >> X[1]; Exemplo: Escrita do ltimo elemento do vetor na tela: Delphi: Writeln( X[5] ); C++: cout << X[4]; Obs. Conforme se observa nos exemplos, a indexao na linguagem Delphi inicial normalmente em 1 e em C++, em 0. Desta forma, o ltimo elemento em um vetor C++ possui sempre o ndice dado pela quantidade de elementos menos um.

21

Algoritmo 10: Calcula a mdia das notas de 20 alunos e mostra as notas acima e abaixo da mdia. Delphi program Delphi_Alg10; {$APPTYPE CONSOLE} uses SysUtils; var i : integer; media : real; notas : array[1..20] of real; begin media := 0; for i := 1 to 20 do begin writeln('Digite a nota do aluno ', i, ' :'); readln (notas[i]); media := media + notas[i]; end; media := media / 20; writeln('Media = ', media); writeln('Notas acima da media'); for i := 1 to 20 do if notas[i] > media then writeln(notas[i]); writeln('Notas abaixo da media'); for i := 1 to 20 do if notas[i] < media then writeln(notas[i]); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int i; double media, notas[20]; int main(int argc, char **argv) { media = 0; for (i = 0; i < 20; i++) { cout << "Digite a nota do aluno " << i+1 << " : "; cin >> notas[i]; media = media + notas[i]; } media = media / 20; cout << "Media = " << media << "\n"; cout << "Notas acima da media \n"; for (i = 0; i < 20; i++) if (notas[i] > media) cout << notas[i] << "\n"; cout << Notas abaixo da media \n; for (i = 0; i < 20; i++) if (notas[i] < media) cout << notas[i] << "\n"; getch(); return 0; }

22

3.2. Matrizes
Matriz um tipo de dado utilizado para representar uma coleo de valores de duas dimenses composta por elementos de um mesmo tipo. Uma varivel do tipo matriz armazena diversos valores que so referenciados por dois ndices, sendo o primeiro o ndice da linha do elemento e o seguindo, o ndice de sua coluna. 3.2.1. Declarao de Matrizes Na declarao de uma matriz necessrio informar a quantidade linha e colunas que a compe. Para isso, utiliza-se a sintaxe apresentada a seguir: Delphi array[1..L, 1..C] of Tipo onde: matriz. Exemplo: Declarao de uma matriz de inteiros com trs linhas e quatro colunas: Delphi: var M : array[1..3, 1..4] of integer; C++: int M[3][4]; Exemplo: Declarao e iniciao de uma matriz de inteiros com trs linhas e quatro colunas: Delphi: var M : array[1..3, 1..4] of integer = ( (1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11 ,12) ); C++: int M[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11 ,12} }; 3.2.2. Referenciando os Elementos da Matriz Cada elemento da matriz referenciado individualmente por meio dos seus ndices indicado entre colchetes []. Quando um elemento referenciado, as operaes de escrita e leitura podem ser realizadas de forma anloga utilizada para as variveis de tipos primitivos. Exemplo: Atribuio do valor 10 ao elemento da primeira linha e segunda coluna da matriz M: Delphi: M[1,2] := 10; C++: M[0][1] = 10; Exemplo: Leitura do valor da segunda linha e primeira coluna da matriz: Delphi: Readln( M[2,1] ); C++: cin >> X[1][0]; Exemplo: Escrita do elemento da terceira linha e quarta coluna da matriz: Delphi: Writeln( X[3,4] ); C++: cout << X[2][3]; Obs. Novamente importante perceber que a indexao na linguagem C++ inicia em 0, tanto para as linhas quanto para as colunas das matrizes. Tambm fundamental no extrapolar os limites declarados para as variveis dos tipos vetores e matrizes. Isto porque a utilizao de ndices maiores que os declarados acarretam no uso de locais de memria no reservados para o programa e podem ocasionar problemas de execuo como o travamento do computador. C++ Tipo[L,C]

Tipo um tipo de varivel que indica o tipo de cada elemento da matriz, L e C so constantes inteiras que indicam o nmero de linhas e de colunas, respectivamente, da

23

Algoritmo 11: L uma matriz 3 x 4, mostra a matriz lida e sua transposta. Delphi program Delphi_Alg11; {$APPTYPE CONSOLE} uses SysUtils; var i, j : integer; M : array[1..3, 1..4] of integer; begin for i := 1 to 3 do for j := 1 to 4 do begin writeln('Digite o elemento [' , i, ',' , j, ']: '); readln (M[i,j]); end; writeln('Matriz original'); for i := 1 to 3 do begin for j := 1 to 4 do write(M[i,j], ' '); writeln; end; writeln('Matriz transposta'); for i := 1 to 4 do begin for j := 1 to 3 do write(M[j,i], ' '); writeln; end; readln; end. C++ int i, j, m[3][4]; int main(int argc, char **argv) { for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) { cout << "Digite o elemento [" << i+1 << "," << j+1 << "]: "; cin >> m[i][j]; } cout << "Matriz original \n"; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) cout << m[i][j] << " "; cout << "\n"; } cout << "Matriz transposta \n"; for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) cout << m[j][i] << " "; cout << "\n"; } getch(); return 0; }

24

3.3. Strings
String um tipo de dado utilizado para representar um vetor de caracteres. De forma anloga aos vetores numricos, cada caractere da string referenciado por um ndice que indica sua posio dentro do vetor. As strings so utilizadas para armazenar textos e so sempre finalizadas por um caractere com cdigo ASCII zero, denominado de finalizador, que indica o ltimo caractere vlido da string. 3.3.1. Declarao de Strings Na declarao de uma string em C++, necessrio informar a quantidade mxima de elementos que a compe, reservando inclusive um caractere para o finalizador. Em Delphi, a quantidade de caracteres controlada pela linguagem, dispensando com isso a determinao prvia da quantidade de elementos. Para declarar strings em C++ e Delphi, utiliza-se a sintaxe apresentada a seguir: Delphi string onde: N o nmero mximo de caracteres da string. C++ char[N]

Exemplo: Declarao de uma string: Delphi: var s : string; C++: char s[30]; Exemplo: Declarao e iniciao de uma string: Delphi: var s : string = 'Algoritmos'; C++: char s[30] = "Algoritmos"; 3.3.2. Referenciando os Caracteres da String Cada caractere da matriz pode ser referenciado individualmente por meio do seu ndice indicado entre colchetes []. Exemplo: Atribuio do caractere 'a' ao primeiro caractere de s: Delphi: s[1] := 'a'; C++: s[0] = 'a'; Exemplo: Leitura de uma string. Em geral, a string lida inteira e no caractere por caractere. Delphi: Readln( s ); C++: gets ( s ); Exemplo: Escrita do segundo caractere da string: Delphi: Writeln( s[2] ); C++: cout << s[1]; Exemplo: Escrita da string completa: Delphi: Writeln( s ); C++: cout << s;

25

Algoritmo 12: L o seu nome e mostra 10 vezes a mensagem "Bom dia, <nome>".

Delphi program Delphi_Alg12; {$APPTYPE CONSOLE} uses SysUtils; var i : integer; s : string; begin writeln('Digite seu nome'); readln(s); for i := 1 to 10 do writeln('Bom dia, ', s); readln; end.

C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int i; char s[100]; int main(int argc, char **argv) { cout << "Digite seu nome\n"; gets(s); for (i = 0; i < 10; i++) cout << "Bom dia, " << s << "\n"; getch(); return 0; }

3.3.3. Tamanho de uma String Para o obter o tamanho de uma string, isto , o nmero de caracteres vlidos pertencentes a ela, utiliza-se as funes abaixo: Delphi Length C++ strlen

Exemplo: Atribuir a uma varivel inteira o nmero de caracteres de uma string; Delphi: var i : integer; s : string; s := 'Algoritmos'; i := Length(s); // Atribui 10 a varivel i C++: int i; char s[30] = "Algoritmos"; i = strlen(s); // Atribui 10 a varivel i
26

Algoritmo 13: L o seu nome e calcula o nmero de letras 'a' que ele possui. Delphi: program Delphi_Alg13; {$APPTYPE CONSOLE} uses SysUtils; var i, n : integer; s : string; begin writeln('Digite seu nome'); readln(s); n := 0; for i := 1 to Length(s) do if (s[i] = 'A') or (s[i] = 'a') then n := n + 1; writeln('Seu nome posssui ', n, ' letra(s) A'); readln; end. C++ #include <condefs.h> #include <iostream.h> #include <conio.h> int i, n; char s[100]; int main(int argc, char **argv) { cout << "Digite seu nome\n"; gets(s); n = 0; for (i = 0; i < strlen(s); i++) if (s[i] == 'a' || s[i] == 'A') n++; cout << "Seu nome posssui " << n << " letra(s) A"; getch(); return 0; }

3.3.4. Concatenao de String A concatenao de strings, que significa unir duas ou mais strings em uma, realizada no Delphi com o operador "+" e no C++ com a funo strcat. Delphi + Exemplo: Concatenar as strings "Bota" e "Fogo": Delphi: var x : string = 'Bota'; var y : string = 'Fogo'; x := x + y; // Atribui 'BotaFogo' a x C++: char x[10] = "Bota"; char y[10] = "Fogo"; strcat(x, y); // Atribui 'BotaFogo' a x C++ strcat

27

3.3.5. Atribuio ou Cpia de String Para atribuir valor a uma string ou copiar o valor de uma string para outra, utilizamos em Delphi o operador "=". No C++, estas operaes so realizadas com a funo strcpy. Delphi = C++ strcpy

Exemplo: Atribuir os valores "Bota" e "Fogo" a duas strings e em seguida concatena-las. Delphi: var x, y : string; x := 'Bota'; y := 'Fogo'; x := x + y; // Atribui 'BotaFogo' a x C++: char x[10], y[10]; strcpy(x, "Bota"); strcpy(y, "Fogo"); strcat(x, y); // Atribui 'BotaFogo' a x

3.3.6. Comparao de Strings Para comparar duas strings em Delphi utilizamos os operadores relacionais (<, <=, >, >=, = e <>). No C++, a comparao entre strings realizada com a funo strcmp. Esta funo compara duas strings, retornando zero se elas so iguais, um nmero maior que zero se primeira string vem depois da segunda em ordem alfabtica ou um nmero menor que zero se a primeira string vem antes da segunda. Delphi Operadores Relacionais Exemplo: Comparar os valores "Bota" e "Fogo". Delphi: var x : string = 'Bota'; var y : string = 'Fogo'; if x = y then writeln('As strings so iguais'); C++: char x[10] = "Bota"; char y[10] = "Fogo"; if (strcmp(x, y) == 0) cout << "As strings so iguais"; C++ strcmp

3.4. Exerccios
5. Implementar algoritmos para: a) Ler um vetor com 10 inteiros e mostrar os nmeros na ordem direta e inversa a que foram lidos. b) Ler um vetor com 10 inteiros e calcular o maior e o menor elemento do vetor. c) Ler uma matriz 4 x 4 e calcular a soma do maior com o menor elemento da matriz. d) Ler uma matriz 4 x 4 e calcular a soma dos elementos da diagonal principal. e) Ler duas matrizes 4 x 4 e calcular a soma das matrizes. f) Ler duas matrizes 4 x 4 e calcular o produto entre as matrizes. g) Ler uma string e contar quantas palavras tem nela. Ex.: Programar eh moleza 3 palavras. h) Ler uma string e mostrar de trs para frente. Ex.: Programar eh moleza azelom he ramargorP.
28

i) Ler uma string e mostrar as iniciais de cada palavra. Ex.: Programar eh moleza Pem j) Ler uma string com vrios espaos entre as palavras e mostrar com somente um espao entre as palavras. Ex.: Programar eh moleza Programar eh moleza. k) Ler uma string e modificar todas as letras da seguinte forma: Letra Modificar por a z b y c x d w e v f u g t h s ... ... v e w d x c y b z a

l) Ler uma string e escrever cada palavra desta de trs para frente. Ex.: Programar eh moleza ramargorP he azelom.

4. STRINGS EM C++ BUILDER


4.1. AnsiString
AnsiString ou String um tipo do C++ Builder comumente utilizado para representar strings em aplicativos desenvolvidos para o ambiente Windows. A vantagem de utilizar o tipo AnsiString est na maior facilidade em realizar tarefas que so normalmente necessrias quando se trabalha com tais tipos de dados. As principais caractersticas do tipo AnsiString so apresentadas a seguir.

4.1.1. Declarao de AnsiString Para declarar variveis do tipo AnsiString, utiliza-se os tipos AnsiString ou String definidos no C++ Builder. Para esses tipos de string no necessrio informar a quantidade mxima de elementos que compe o vetor de caracteres. De forma anloga s variveis strings do Delphi, a quantidade de caracteres controlada pelo C++ Builder, dispensando com isso a determinao prvia da quantidade de elementos. Exemplo: Declarao de uma varivel AnsiString: AnsiString s; String x; Nota: o C++ Builder sensvel ao caso, logo existe diferena entre letras minsculas e maisculas, portanto os tipos AnsiString e String devem ser escritos como apresentado anteriormente. Exemplo: Declarao e iniciao de uma varivel AnsiString: AnsiString s = "Algoritmos"; String x = "C++ Builder";

4.1.2. Referenciando os Caracteres da AnsiString Cada caractere da string pode ser referenciado por meio do seu ndice indicado entre colchetes []. Para variveis do tipo AnsiString, o primeiro caractere tem ndice igual a um. Exemplo: Atribuio do caractere 'a' ao primeiro caractere de s: s[1] = 'a';

29

4.1.3. Tamanho de uma AnsiString: Mtodo Length Para o obter o tamanho de uma AnsiString, isto , o nmero de caracteres vlidos pertencentes a ela, utilizase o mtodo Length. Exemplo: Atribuir a uma varivel inteira o nmero de caracteres de uma AnsiString; AnsiString s = "Algoritmos"; int i; i = s.Length( );

4.1.4. Concatenao de AnsiString: Operador + A concatenao de AnsiStrings, que significa unir duas ou mais strings, realizada com o operador "+". Exemplo: Concatenar as strings "Bota" e "Fogo": AnsiString x = "Bota"; AnsiString y = "Fogo"; x = x + y; // Atribui "BotaFogo" a x;

4.1.5. Atribuio ou Cpia de AnsiStrings: Operador = Para atribuir um valor a uma AnsiString, ou copiar o valor de uma string para outra, utiliza-se o operador "=". Exemplo: Atribuir os valores "Bota" e "Fogo" a duas AnsiStrings e em seguida concatena-as. AnsiString x; AnsiString y; x = "Bota"; y = "Fogo"; x = x + y; // Atribui "BotaFogo" a x;

4.1.6. Comparao de AnsiStrings: Operadores Relacionais Para comparar duas AnsiStrings utilizamos os operadores relacionais (<, <=, >, >=, == e !=). Uma AnsiString menor que outra quando vem "antes" considerando a ordem alfabtica. Exemplo: Comparar os valores "Bota" e "Fogo". AnsiString x; AnsiString y; x = "Bota"; y = "Fogo"; if (x == y) Edit1->Text = "As strings so iguais";

30

4.1.7. Substrings de uma AnsiStrings: Mtodo SubString Para obter uma substring, isto , uma parte de uma string, utilizamos o mtodo SubString. Exemplo: Obter os 4 ltimos caracteres da string "BotaFogo". AnsiString x; AnsiString y; x = "BotaFogo"; y = x.SubString(5, 4); // Atribui "Fogo" a y; A AnsiString y recebe a string formada pelos caracteres de x, tomados a partir da posio 5 com comprimento de 4 caracteres. Algoritmo 14: L uma data no formato "dd/mm/aaaa" e apresentar no formato "dd de ms de aaaa". O aplicativo que implementa o algoritmo apresentado a seguir. Na caixa de texto Edit1, o usurio deve digitar a data no formato "dd/mm/aaaa". Quando o boto Algoritmo for clicado, a data no formato "dd de ms de aaaa" deve ser apresentada na caixa de texto Edit2.

O algoritmo apresentado abaixo: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Data; AnsiString d, m, a; int mes; Data = Edit1->Text; d = Data.SubString(1, 2); m = Data.SubString(4, 2); a = Data.SubString(7, 4); mes = StrToInt(m); switch (mes) { case 1 : m = "Janeiro"; case 2 : m = "Fevereiro"; case 3 : m = "Maro"; case 4 : m = "Abril"; case 5 : m = "Maio"; case 6 : m = "Junho"; case 7 : m = "Julho"; case 8 : m = "Agosto"; case 9 : m = "Setembro"; case 10 : m = "Outubro"; case 11 : m = "Novembro"; case 12 : m = "Dezembro"; } Edit2->Text = d + " de " + m }
31

break; break; break; break; break; break; break; break; break; break; break; break; + " de " + a;

Resultado da execuo do algoritmo:

4.2. Exerccios
6. Implementar algoritmos para: a) Ler uma string e trocar todas as letras r e R por l e L, respectivamente.

b) Ler um nome e mostrar na forma de bibliografia: ltimo sobrenome, vrgula, cada inicial maiscula seguida de ponto.

5. FUNES EM C++
5.1. Funes
Uma funo um conjunto de instrues escrito para cumprir uma tarefa especfica e referenciado por um identificador. Ou seja, funo o nome dado a um conjunto de comandos que executado quando o nome da funo chamado dentro de um programa. O objetivo das funes dividir um problema em problemas menores, simplificando e organizando a escrita de um programa como um todo. Seqncias de comandos que aparecem repetidas vezes dentro de um mesmo programa so fortes candidatas a virarem funes. Por exemplo, os comandos para ler uma matriz podem se tornar uma funo em um programa para calcular a soma de duas matrizes; desta forma, esta seqncia de instrues escrita uma nica vez no programa. As funes devem ter propsitos especficos e independentes do programa em que so utilizadas, de forma que possam ser mais facilmente aproveitadas em programas diferentes. Uma funo para ler matrizes, por exemplo, deve poder ser utilizada tanto em um programa para calcular a soma de duas matrizes quanto em outro para calcular a inversa de uma matriz; caracterizando sua independncia em relao ao programa em que utilizada. A escrita de funes independentes pode tornar mais rpido o desenvolvimento de novos programas, pois quando um grande nmero de funes est disponvel provvel que vrias delas sejam aproveitadas no novo programa em desenvolvimento.

32

5.2. Declarao de Funes


A declarao de uma funo inicia por um tipo de dado seguido do nome da funo e de uma lista de parmetros. A declarao abaixo mostra, por exemplo, o cabealho ou prottipo da funo AreaTriangulo que ser utilizada para calcular a rea de um tringulo. double AreaTriangulo(double base, double altura); O tipo double no incio da declarao indica que esta funo retorna ao programa que a chamar um nmero real, no caso, a rea de um tringulo. O identificador AreaTriangulo, em seguida, define o nome da funo que deve ser utilizado para invoc-la. Finalmente, os identificadores entre parnteses, chamados de parmetros, so utilizados para passar informaes necessrias a funo. De fato, para calcular a rea de um tringulo necessrio saber a base e a altura dele.

5.3. Implementao de Funes


A implementao de uma funo inicia pelo seu prottipo, sem ponto e vrgula no final, seguido da seqncia de comandos necessrios para realizar a tarefa atribuda funo. A implementao da funo AreaTriangulo apresentada abaixo. double AreaTriangulo(double base, double altura) { double area; area = base * altura / 2; return area; } Inicialmente, a varivel area declarada. Toda varivel declarada dentro de uma funo chamada de varivel local. Em seguida, o valor da rea calculado com base nos parmetros base e altura que devem obrigatoriamente ser fornecidos a funo. Finalmente, o valor da rea retornado para o local onde a funo foi invocada, utilizando o comando return.

5.4. Chamando Funes


Para chamar ou invocar uma funo basta utilizar seu nome (identificador) e fornecer os parmetros necessrios a ela. O exemplo abaixo mostra o clculo da rea de dois tringulos: o primeiro com base 10 e altura 20, o segundo com base 5 e altura 8. Algoritmo 15: Exemplo de Funo double AreaTriangulo(double base, double altura) { double area; area = base * altura / 2; return area; } int main(int argc, char **argv) { double x, y; x = AreaTriangulo(10, 20); y = AreaTriangulo(5, 8); cout << x << "\n"; cout << y << "\n"; getch(); return 0; }
33

5.5. Bibliotecas de Funes


Conjuntos de funes com propsitos semelhantes so normalmente agrupados em arquivos distintos do programa principal chamados de bibliotecas. Uma biblioteca formada por dois arquivos: o primeiro arquivo com extenso ".h" chamado de cabealho e contm o prottipo de todas as funes da biblioteca. O segundo arquivo com extenso ".cpp" deve conter a implementao das funes pertencentes biblioteca. O exemplo abaixo mostra uma biblioteca de funes relacionadas ao clculo de reas de figuras geomtricas. Algoritmo 16: Exemplo de Biblioteca Arquivo 1: C_Alg16b.h double AreaCirculo (double raio); double AreaRetangulo(double base, double altura); double AreaTriangulo(double base, double altura); Arquivo 2: C_Alg16b.cpp #include "C_Alg16b.h" double AreaCirculo(double raio) { double area; area = 3.14 * raio * raio; return area; } double AreaRetangulo(double base, double altura) { double area; area = base * altura; return area; } double AreaTriangulo(double base, double altura) { double area; area = base * altura / 2; return area; } O programa abaixo mostra o clculo da rea de um crculo de raio 3, um retngulo com base 10 e altura 20; um tringulo com base 5 e altura 8. #include "C_Alg16b.h" int main(int argc, char **argv) { double x, y, z; x = AreaCirculo(3); y = AreaRetangulo(10, 20); z = AreaTriangulo(5, 8); cout << x << "\n"; cout << y << "\n"; cout << z << "\n"; getch(); return 0; }
34

Note que a diretiva include com o nome d biblioteca entre aspas deve listado no incio do programa que a utiliza a biblioteca.

5.6. Passagem de Parmetros por Valor e por Referncia


Nos exemplos apresentados at o momento, os parmetros das funes foram passados por valor. Quando a passagem de parmetros por valor, a funo cria uma varivel local para receber a informao passada como parmetro. Nestes tipos de parmetros, nenhuma alterao realizada em seus valores refletida para o programa onde a funo foi invocada.

Algoritmo 17: Passagem de Parmetros por Valor void Inverter(int x, int y) { int z; z = x; x = y; y = z; } int main(int argc, char **argv) { int a, b; a = 10; b = 20; Inverter(a, b); cout << a << "\n"; cout << b << "\n"; getch(); return 0; } Neste exemplo, os valores de a e b so passados para a funo Inverter. A funo cria duas novas variveis para receber tais valores. Dentro da funo, os valores de x e y so trocados mas a alterao no se reflete nas variveis a e b. Por isso, os valores impressos na tela so os valores originais das variveis. Quando a passagem de um parmetro por referncia, a funo no cria uma varivel local para armazenar o valor passado como parmetro. Nestes casos, a funo tem acesso ao local de memria onde a varivel est armazenada e acessa esta varivel atravs do nome do parmetro. Desta forma, qualquer alterao realizada no parmetro dentro da funo refletida para a varivel do programa. // Escreve 10 // Escreve 20

Algoritmo 18: Passagem de Parmetros por Referncia void Inverter(int& x, int& y) { int z; z = x; x = y; y = z; }

35

int main(int argc, char **argv) { int a, b; a = 10; b = 20; Inverter(a, b); cout << a << "\n"; cout << b << "\n"; getch(); return 0; } Para passar um parmetro por referncia, utilizamos o operador de referncia "&" na declarao dos parmetros. Nestes casos, no possvel passar uma constante como parmetro. // Escreve 20 // Escreve 10

5.7. Passagem de Parmetros do Tipo Matriz


Quando o parmetro de uma funo uma matriz, a passagem de parmetros realizada por referncia, mesmo sem a utilizao do operador "&". Isto significa que uma alterao no parmetro realizada dentro da funo refletida na varivel original. Algoritmo 19: Passagem de Parmetros do Tipo Matriz void Inverter(int& x, int& y) { int z; z = x; x = y; y = z; } void Ordenar(int v[10]) { int j, k; for (j = 0; j <= 8; j++) for (k = j + 1; k <= 9; k++) if (v[j] > v[k]) Inverter(v[j], v[k]); } int main(int argc, char **argv) { int i, x[10]; for (i = 0; i <= 9; i++) { cout << "Digite o elemento x[" << i + 1 << "]: "; cin >> x[i]; } Ordenar(x); for (i = 0; i <= 9; i++) cout << x[i] << "\n"; getch(); return 0; }
36

5.8. Exerccios
7. Implementar a biblioteca "Figuras" com as funes abaixo. Implementar um programa que use a biblioteca. double PerimetroQuadrado (double double PerimetroRetangulo (double void AreaPerimetroQuadrado (double void AreaPerimetroRetangulo(double lado); base, double altura); lado, double& a, double& p); base, double altura, double& a, double& p);

As duas primeiras funes calculam e retornam o permetro de um quadrado e de um retngulo, respectivamente. As duas ltimas calculam reas e permetros de quadrados e retngulos, respectivamente, colocando tais valores nos parmetros a e p. 8. Implementar a biblioteca "Matrizes" com as funes abaixo. Implementar um programa que use a biblioteca. void Somar (int a[3][3], int b[3][3], c[3][3]); void Subtrair (int a[3][3], int b[3][3], c[3][3]); int Determinante (int a[3][3]); As funes Somar e Subtrair calculam a soma e a diferena entre as matrizes a e b, respectivamente, colocando o resultado em c. A funo Determinante calcula e retorna o determinante da matriz a.

Bibliografia:
Treinamento em Linguagem C++ Modulo 1 Mizrahi, V. V. Makron Books. Treinamento em Linguagem C++ Modulo 2 Mizrahi, V. V. Makron Books. Introduo ao desenvolvimento de algoritmos e estrutura de dados Pinto, W. S. Editora rica.

37

Você também pode gostar