You are on page 1of 30

Pontifcia Universidade Catlica de Minas Gerais

Instituto de Informtica / Instituto Politcnico


Engenharia Mecnica - nfase em Mecatrnica
Tcnicas de Programao para Engenharia
Notas de Aula
Prof. Joo Leonardo Ribeiro Neto
segundo semestre de 2008
Sumrio
1 Reviso - Estruturas de dados homogneas 4
1.1 Ordenao de vetores . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Ordenao por seleo direta . . . . . . . . . . . . . . . . 5
1.1.2 Ordenao por permutao - Bubblesort . . . . . . . . . . 7
1.2 Intercalao de vetores . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Reviso - Modularizao de programas 13
2.1 Passagem de parmetros para funes . . . . . . . . . . . . . . . 13
2.2 Tipos de retorno da funo . . . . . . . . . . . . . . . . . . . . . 18
2.3 Funes recursivas . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Ponteiros em C 23
3.1 Passagem de parmetro para funo utilizando ponteiros . . . . . 25
3.2 Alocao dinmica de memria . . . . . . . . . . . . . . . . . . . 26
3.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Referncias Bibliogrcas 29
1
Lista de Figuras
1.1 Esquema da estrutura de dados homognea de uma dimenso(vetor) 4
1.2 Esquema da estrutura de dados homognea com2 dimenses(matriz) 5
1.3 Exemplo de ordenao por seleo direta . . . . . . . . . . . . . 6
1.4 Cdigo em C de ordenao por seleo direta . . . . . . . . . . . 6
1.5 Exemplo de ordenao Bubblesort . . . . . . . . . . . . . . . . . 7
1.6 Cdigo em C de ordenao por permutao(Bubblesort) . . . . . 8
1.7 Exemplo de intercalao de dois vetores ordenados gerando um
terceiro ordenado . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8 Cdigo em C da intercalao de dois vetores ordenados gerando
um terceiro ordenado . . . . . . . . . . . . . . . . . . . . . . . . 10
1.9 Cdigo em C da multiplicao de duas matrizes . . . . . . . . . . 11
2.1 Cdigo em C de passagem de parmetro por valor . . . . . . . . . 14
2.2 Ilustrao da passagem de parmetro por valor . . . . . . . . . . . 14
2.3 Cdigo em C de passagem de parmetro por referncia . . . . . . 15
2.4 Ilustrao da passagem de parmetro por referncia . . . . . . . . 15
2.5 Ilustrao da passagem de parmetro por referncia utilizando vetor 16
2.6 Cdigo em C de passagem de parmetro por referncia utilizando
vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Cdigo em C de passagem de parmetro por referncia utilizando
matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8 Primeiro exemplo de retorno de funo . . . . . . . . . . . . . . . 18
2.9 Segundo exemplo de retorno de funo . . . . . . . . . . . . . . . 18
2.10 Clculo do fatorial utilizando recurso . . . . . . . . . . . . . . . 19
2.11 Clculo do somatrio utilizando recurso . . . . . . . . . . . . . 20
2.12 Clculo do termo de bonacci utilizando recurso . . . . . . . . . 21
2.13 Ilustrao das chamadas recursivas para o clculo do terceiro termo
de bonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1 Primeiro exemplo de cdigo em C utilizando ponteiros . . . . . . 23
3.2 Segundo exemplo de cdigo em C utilizando ponteiros . . . . . . 24
2
LISTA DE FIGURAS 3
3.3 Terceiro exemplo de cdigo em C utilizando ponteiros . . . . . . 24
3.4 Primeiro exemplo de passagem de parmetro por referncia com
ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5 Segundo exemplo de passagem de parmetro por referncia com
ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.6 Primeiro exemplo de alocao dinmica de memria . . . . . . . 26
3.7 Segundo exemplo de alocao dinmica de memria . . . . . . . 27
3.8 Primeiro exemplo de alocao dinmica de memria com struct . 27
3.9 Segundo exemplo de alocao dinmica de memria com struct . 28
Captulo 1
Reviso - Estruturas de dados
homogneas
Uma estrutura de dados homognea consiste de componentes do mesmo tipo,
o tipo base. Assim uma estrutura composta de uma dimenso (vetor) pode ser
classicado como uma estrutura homognea. Pode tambm ser chamada de es-
trutura aleatria, j que todos os seus componentes so igualmente acessveis
a qualquer momento, podendo ser escolhidos aleatriamente. Para o acesso a
um componente individual, a estrutura completa constituda de um argumento
chamado ndice(s), que obtm o componente (WIRTH, N., 1989).
A primeira estrutura de dados homognea que revisaremos o vetor. Das
estruturas compostas homogneas, esta a estrutura mais simples, composta por
uma nica dimenso (Vide ilustrao FIG. 1.1).
Dentre as possibilidades de implementao de estruturas compostas de mais de
uma dimenso temos as matrizes, com duas dimenses (Vide ilustrao FIG. 1.2).
Observar que a referncia de incio do ndice em estruturas desta natureza, na
linguagem C, 0(zero).
FIGURA1.1: Esquema da estrutura de dados homognea de uma dimenso(vetor)
4
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 5
FIGURA 1.2: Esquema da estrutura de dados homognea com 2 dimen-
ses(matriz)
1.1 Ordenao de vetores
importante ressaltar, que a questo mais importante em relao aos mtodos
de ordenao de vetores, corresponde ao uso econmico de memria disponvel.
Isto implica que a permutao de elementos, responsvel por levar o elemento
ordem desejada, deve ser in situ, e que portanto so de menor interesse os mtodos
que efetuam o transporte fsico dos elementos de um vetor origem para um vetor
resultante (WIRTH, N., 1989).
1.1.1 Ordenao por seleo direta
Segundo Wirth em (WIRTH, N., 1989), este mtodo se baseia no seguinte
princpio (Vide FIG. 1.3):
Selecionar o elemento que representa a chave de menor valor;
Troc-lo com o primeiro elemento da seqncia a
1
;
Repetir estas operaes, envolvendo agora apenas os n1 elementos restantes,
depois os n 2 elementos, etc., at restar um s elemento, o maior deles.
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 6
FIGURA 1.3: Exemplo de ordenao por seleo direta
A FIGURA 1.4, ilustra o cdigo em linguagem C do algoritmo de ordenao
por seleo direta:
FIGURA 1.4: Cdigo em C de ordenao por seleo direta
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 7
1.1.2 Ordenao por permutao - Bubblesort
Efetuam-se varreduras repetidas sobre o vetor, deslocando-se, a cada passo,
para a sua extremidade esquerda, o menor dos elementos do conjunto que restou.
Se, para uma troca, o vetor for visualizado na posio vertical ao invs da horizon-
tal, e com o auxlio da imaginao - os elementos forem bolhas em um tanque de
gua, com densidades proporcionais ao valor das respectivas chaves, ento cada
varredura efetuada sobre o vetor resultaria na asceno de uma bolha para o nvel
apropriado, de acordo com sua densidade (WIRTH, N., 1989)(Vide FIG. 1.5).
FIGURA 1.5: Exemplo de ordenao Bubblesort
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 8
A FIGURA 1.6, ilustra o cdigo em linguagem C do algoritmo de ordenao
por permutao(bubblesort):
FIGURA 1.6: Cdigo em C de ordenao por permutao(Bubblesort)
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 9
1.2 Intercalao de vetores
A FIGURA 1.8, exemplica o cdigo em linguagem C do algoritmo de inter-
calao de dois vetores ordenados gerando um terceiro vetor tambm ordenado
(Vide tambm FIG. 1.7).
FIGURA 1.7: Exemplo de intercalao de dois vetores ordenados gerando um
terceiro ordenado
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 10
FIGURA 1.8: Cdigo em C da intercalao de dois vetores ordenados gerando
um terceiro ordenado
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 11
1.3 Manipulao de matrizes
Matrizes so estruturas compostas homogneas comduas dimenses (linha,coluna).
Para acessar um endereo na matriz necessrio instanciar os ndices relativos
linha e coluna (Vide FIG. 1.2 na seo 1). A seguir descrito cdigo em lin-
guagem C de um algoritmo de multiplicao matricial de duas matrizes (FIG. 1.9).
FIGURA 1.9: Cdigo em C da multiplicao de duas matrizes
CAPTULO 1. REVISO - ESTRUTURAS DE DADOS HOMOGNEAS 12
1.4 Exerccios
1. Desenvolver um programa em linguagem C que leia n notas referentes
disciplina de TPE (n 20). O valor das notas so inteiros que variam
variam de 0 a 10. Calcule a freqncia absoluta e freqncia relativa das
notas. Freqncia absoluta a quantidade de vezes que uma determinada
nota ocorre no conjunto e freqncia relativa a razo entre a freqncia
absoluta e a quantidade de notas (FARRER, H. et al., 1999).
2. Desenvolva um programa em linguagemC que leia uma matriz nm(n
50 e m 60), gerando e escrevendo o vetor resultante da soma das colunas
da matriz.
3. Desenvolva um programa em linguagem C que leia uma matriz 5 5. Gere
e escreva a matriz transposta.
4. Desenvolver um programa em linguagem C que leia uma matriz 4 4,
calcule e escreva a soma dos elementos acima da diagonal principal.
5. Desenvolva um programa em linguagem C que leia uma matriz 3 3, cal-
cule e escreva o elemento de menor valor abaixo da diagonal secundria.
Captulo 2
Reviso - Modularizao de
programas
A modularizao de programas permite a criao de programas estruturados e
modulares. Na linguagem C, a implementao destes mdulos e feita atravs da
criao de funes, que podem receber ou no parmetros de entrada e retornar
ou no valores aps a sua execuo.
2.1 Passagem de parmetros para funes
Na linguagem C, os parmetros podem ser passados de duas maneiras:
Por valor: quando uma cpia da(s) varivel(is) (so) passada(s) para a
funo (Vide ilustrao FIG. 2.2);
Por referncia: quando o(s) endereo(s) da varivel(is) (so) passado(s)
para a funo (Vide ilustrao FIG. 2.4);
Obs: no caso de estruturas de dados, a passagem de parmetro na linguagem
C s possvel por referncia(Vide ilustrao FIG. 2.5).
13
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 14
A FIGURA 2.1 exemplica o cdigo em C de passagem de parmetro por
valor(Vide tambm FIG. 2.2):
FIGURA 2.1: Cdigo em C de passagem de parmetro por valor
FIGURA 2.2: Ilustrao da passagem de parmetro por valor
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 15
A FIGURA 2.3 exemplica o cdigo em C de passagem de parmetro por
referncia(Vide tambm FIG. 2.4):
FIGURA 2.3: Cdigo em C de passagem de parmetro por referncia
FIGURA 2.4: Ilustrao da passagem de parmetro por referncia
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 16
As FIGURAs 2.6 e 2.7 exemplicamcdigos emC compassagemde parmetro
por referncia utilizando estruturas de dados homogneas(Vide tambm FIG. 2.5):
FIGURA 2.5: Ilustrao da passagem de parmetro por referncia utilizando vetor
FIGURA 2.6: Cdigo em C de passagem de parmetro por referncia utilizando
vetor
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 17
FIGURA 2.7: Cdigo em C de passagem de parmetro por referncia utilizando
matriz
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 18
2.2 Tipos de retorno da funo
Em C + + os tipos de retorno possiveis para as funes so: int, oat, dou-
ble, char e void. Os exemplos das FIGURAS 2.8 e 2.9, exemplicam o uso de
retorno na funo. Observar que a varivel de retorno tem que ser do mesmo tipo
declarado no prottipo da funo.
FIGURA 2.8: Primeiro exemplo de retorno de funo
Na FIGURA 2.9, a funo retorna nulo (tipo void).
FIGURA 2.9: Segundo exemplo de retorno de funo
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 19
2.3 Funes recursivas
Um objeto dito recursivo se ele consistir parcialmente ou for denido em ter-
mos de si prprio (WIRTH, N., 1989). Como exemplo, o cdigo da FIGURA 2.10
calcula o fatorial de um nmero utilizando recurso.
FIGURA 2.10: Clculo do fatorial utilizando recurso
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 20
Na FIGURA 2.11, o somatrio da srie S =
1
1
+
3
2
+
5
3
+. . ., com o nmero de
termos n passado como parmetro para a funo, calculado utilizando recurso.
FIGURA 2.11: Clculo do somatrio utilizando recurso
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 21
Oexemplo da FIGURA2.12, ilustra uma funo recursiva comduas chamadas,
para o clculo do termo da srie de bonacci. A FIGURA 2.13, ilustra o processo
de chamada da funo recursiva para o clculo do terceiro termo da srie de -
bonacci (DEITEL, H.M. & DEITEL, P.J., 1999).
FIGURA 2.12: Clculo do termo de bonacci utilizando recurso
FIGURA 2.13: Ilustrao das chamadas recursivas para o clculo do terceiro
termo de bonacci
CAPTULO 2. REVISO - MODULARIZAO DE PROGRAMAS 22
2.4 Exerccios
1. Escrever uma funo em C que: receba dois strings como parmetro, bem
como um valor inteiro representando uma posio; insira o segundo string
no primeiro, na posio indicada pelo valor. No programa principal leia os
dois strings, o valor da posio, passe para a funo descrita acima e escreva
o resultado na tela.
2. Desenvolva uma funo em C, que transforme um nmero num vetor cor-
respondente sua representao binria.
3. Desenvolva uma funo em C, que recebe como parmetros um inteiro n
e duas matrizes quadradas reais X e Y de ordem n, sendo a dimenso n
lida do teclado. Esta funo calcula soma das matrizes X e Y . Escreva no
mdulo principal, a matriz gerada na funo.
4. Desenvolver uma funo recursiva em C para calcular o valor de S da
seguinte srie: S =
1
1

2
4
+
3
9

4
16
+
5
25

6
36
+ . . .
10
100
(FARRER,
H. et al., 1999).
5. O maior divisor comum dos inteiros x e y o maior inteiro que divide pre-
cisamente x e y. Escreva uma funo recursiva mdc que retorne o maior
divisor comum de x e y. O maior divisor comum de x e y denido recur-
sivamente como se segue: Se y for igual a 0(zero), ento o mdc(x, y) x; de
outra forma, mdc(x, y) mdc(y, x%y) onde % o operador resto(modulus) (DEI-
TEL, H.M. & DEITEL, P.J., 1999).
Captulo 3
Ponteiros em C
As variveis do tipo ponteiro nada mais so do que apontamentos para um
endereo de memria. Quando cria-se uma varivel de memria reservado um
espao para a alocao desta de acordo com o seu tipo. Este espao passa a ter um
endereo. A varivel do tipo ponteiro pode apontar para este endereo, permitindo
o acesso ao contedo da varivel apontada de maneira indireta (Vide FIG. 3.1,
FIG. 3.2 e FIG. 3.3).
FIGURA 3.1: Primeiro exemplo de cdigo em C utilizando ponteiros
23
CAPTULO 3. PONTEIROS EM C 24
FIGURA 3.2: Segundo exemplo de cdigo em C utilizando ponteiros
FIGURA 3.3: Terceiro exemplo de cdigo em C utilizando ponteiros
CAPTULO 3. PONTEIROS EM C 25
Os ponteiros podem ser utilizados para manipular matrizes, paa passar argu-
mentos por referncia para funes, alocar memria dinmicamente e para criar
estruturas de dados encadeadas como listas, pilhas, las e rvores binrias.
3.1 Passagem de parmetro para funo utilizando
ponteiros
AFIGURAS 3.4 e 3.5 ilustrama passagempor referncia utilizando ponteiros.
FIGURA 3.4: Primeiro exemplo de passagem de parmetro por referncia com
ponteiros
CAPTULO 3. PONTEIROS EM C 26
FIGURA 3.5: Segundo exemplo de passagem de parmetro por referncia com
ponteiros
3.2 Alocao dinmica de memria
As FIGURAS 3.6 , 3.7 , 3.8 e 3.9, ilustram cdigos em C utilizando ponteiros
e alocao dinmica de memria.
FIGURA 3.6: Primeiro exemplo de alocao dinmica de memria
CAPTULO 3. PONTEIROS EM C 27
FIGURA 3.7: Segundo exemplo de alocao dinmica de memria
FIGURA 3.8: Primeiro exemplo de alocao dinmica de memria com struct
CAPTULO 3. PONTEIROS EM C 28
FIGURA 3.9: Segundo exemplo de alocao dinmica de memria com struct
3.3 Exerccios
1. Escreva uma funo que inverta a ordem dos caracteres de uma cadeia de
caracteres que ela recebe como argumento. Use ponteiro.
Exemplo: Saudaes resulta seaduaS (MIZARAHI, V.V., 2006b).
2. Escreva um programa que solicite ao usurio o nmero de notas a serem
digitadas, crie uma matriz, com a dimenso especicada, para armazenar as
entradas, solicite as notas e chame um funo que retorne a mdia aritmtica
das notas. Aps imprimir a mdia, o programa libera a memria alocada
para a matriz (MIZARAHI, V.V., 2006b).
3. Desenvolva uma funo que receba uma string como argumento e retorne o
nmero de caracteres desta string. Use ponteiro.
4. Desenvolva uma funo que receba duas strings e copie uma string para a
outra. Use ponteiro.
5. Desenvolva uma funo que receba um vetor de inteiros e ordene-o de
maneira crescente. Use ponteiro e alocao dinmica de memria.
Referncias Bibliogrcas
DEITEL, H.M., & DEITEL, P.J. (1999). Como programar em C. LTC editora.
(Traduo Amir Kurban, Msc. IME)
FARRER, H., BECKER, C.G., FARIA, E.C., MATOS, H.F., SANTOS, M.A., &
MAIA, M.L. (1999). Algoritmos Estruturados. LTC - editora - 3a. edio.
HOLLOWAY, J.P. (2006). Introduo Programao para Engenharia. LTC
editora. (Traduo de Sueli Cunha - Departamento de Matemtica da Uni-
versidade Gama Filho)
LANGSAM, Y., AUGENSTEIN, M. J., & TENENBAUM, A. M. (1996). Data
Structures Using C and C++. Prentice-Hall, Inc.
MIZARAHI, V.V. (2006a). Treinamento em Linguagem C++ mdulo 1. Pearson
Prentice Hall - 2a. edio.
MIZARAHI, V.V. (2006b). Treinamento em Linguagem C++ mdulo 2. Pearson
Prentice Hall - 2a. edio.
TENENBAUM, A. M., LANGSAM, Y., & AUGENSTEIN, M. J. (1995). Estru-
turas de Dados Usando C. Makron Books.
WIRTH, N. (1989). Algoritmos e Estruturas de Dados. Prentice-Hall do Brasil.
ZIVIANI, N. (2004). Projetos de Algoritmos: com implementaes em Pascal e
C. Pioneira Thomson Learning - 2a. edio.
29

You might also like