Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I
Exercícios Variáveis compostas homogêneas Multidimensionais (matrizes e outras abstrações)
Manipulação de Strings e caracteres Problema Contar o número de ocorrências de uma palavra em uma frase Solução Pode-se percorrer cada posição da variável do tipo String e, a partir da posição corrente, extrair uma sub-string com o mesmo comprimento da palavra buscada comparando cada sub-string extraída com a palavra buscada. A cada igualdade, conta-se uma ocorrência da palavra buscada.
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Solução Exemplo: Contar o número de ocorrências da palavra ana na frase Joana e fabiana gostam muito de banana Começando na posição da frase teremos:
Manipulação de Strings e caracteres Solução Exemplo: Contar o número de ocorrências da palavra ana na frase Joana e fabiana gostam muito de banana Começando na posição da frase teremos: Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: JOA Sub-cadeia é igual?: Falso
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: OAN Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: += Palavra buscada: ANA Sub-cadeia extraída: ANA Sub-cadeia é igual?: Verdadeiro Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: NA Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: A E Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: E Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: E F Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Solução Omitindo alguns passos da simulação da execução, vamos direto à posição Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual:xx Tamanho da palavra: Tamanho da frase: Contador: X Palavra buscada: ANA Sub-cadeia extraída:??? Sub-cadeia é igual?: XXX
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: BAN Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: += Palavra buscada: ANA Sub-cadeia extraída: ANA Sub-cadeia é igual?: Verdadeiro Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: NAN Sub-cadeia é igual?: Falso Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: Tamanho da palavra: Tamanho da frase: Contador: += Palavra buscada: ANA Sub-cadeia extraída: ANA Sub-cadeia é igual?: Verdadeiro Solução
Manipulação de Strings e caracteres Contar o número de ocorrências de uma palavra em uma frase J O A N A E F A B I A N A G O S T A M M U I T O D E B A N A N A Posição atual: =(-+)=FIM Tamanho da palavra: Tamanho da frase: Contador: Palavra buscada: ANA Sub-cadeia extraída: ANA Sub-cadeia é igual?: Verdadeiro Solução
Manipulação de Strings e caracteres program contapalavras; var frase,palavra,segmento: string; i,conta:integer; begin write('digite a frase: '); readln(frase); write('digite a palavra a ser contada na frase: '); readln(palavra); conta:=; Contar o número de ocorrências de uma palavra em uma frase if length(frase)>=length(palavra) then {se a frase for maior ou igual a palavra - processar} begin for i:= to length(frase)-length(palavra)+ do begin segmento:=copy(frase,i,length(palavra)); if segmento=palavra then inc(conta); end; writeln('numero de ocorrencias = ',conta); end {if frase>=palavra} else writeln('a frase deve possuir ao menos o mesmo numero de caracteres que a palavra'); end.
Matrizes Definiremos uma matriz, sem perda de generalidade, como uma tabela de m x n símbolos que representam valores de algum domínio. As linhas horizontais de uma matriz são chamadas linhas, e as linhas verticais são chamadas colunas.
Matrizes Uma matriz com m linhas e n colunas é chamada de uma matriz m -por- n (escreve-se m x n) e m e n são chamadas de suas dimensões, tipo ou ordem.
Matrizes Um elemento de uma matriz A que está na i- ésima linha e na j-ésima coluna é chamado de elemento i,j ou (i,j)-ésimo elemento de A. Ele é escrito como a i,j ou a[i,j].
Matrizes Uma matriz onde uma de suas dimensões é igual a é geralmente chamada de vetor. Uma matriz n (uma linha e n colunas) é chamada de vetor linha ou matriz linha, e uma matriz m (uma coluna e m linhas) é chamada de vetor coluna ou matriz coluna.
Matrizes Nas linguagens de programação, os elementos da matriz podem estar indexados a partir de (Fortran, MATLAB, R, etc) ou a partir de (C e seus dialetos). Por exemplo, o elemento a(,) em Fortran corresponde ao elemento a[][] em C. No pascal, pode-se utilizar qualquer faixa contínua de valores ordinais (caracteres, números inteiros) como índices das matrizes (da mesma forma que ocorre com os vetores)
Matrizes Uma matriz é útil para modelar dados que serão usados por exemplo para armazenar tabelas, fazer cálculos matemáticos como resolução de sistemas lineares e transformações lineares, fazer desenhos, etc.
Matrizes Aplicações Exemplo de aplicação: Suponha que desejamos guardar no computador uma lista de alunos com suas respetivas notas em todas as disciplinas cursadas durante o ano.
Matrizes Aplicações Exemplo de aplicação: Por exemplo a seguinte tabela mostra a lista de alunos e as notas em disciplinas. Notas por disciplina Média Disciplinas Nomes Joãozinho........ Dorinha,,,,,,,, Luizinho,,,,,,,, Mariazinha,,,,,,,, Pedrinho,,,,,,,, Marquinho,,,,,,,,
Matrizes Aplicações Gostaríamos de fazer um programa para armazenar essa tabela no computador e depois poder calcular a média de todas as notas de todos os alunos. Para saber o desempenho da turma poderíamos calcular a média das médias.
Matrizes Aplicações Para começar vamos pensar apenas em como armazenar as notas na memoria do computador. Para isso vamos utilizar uma matriz. Em Pascal, uma matriz é definida de maneira muito similar a um vetor, usando a seguinte sintaxe: <variável> : array [LI d..ls d,li d..ls d ] of <tipo>; Onde LI = limite inferior LS = Limite superior d denota a dimensão (linhas) e d a dimensão (colunas)
Matrizes Aplicações Para a codificação de nosso problema de notas de alunos, a declaração será: Var notas : array [..,..] of real; Onde o número indica o número máximo de linhas da matriz e o número indica o número máximo de colunas. Se não soubermos com antecedência qual será o tamanho de nossa matriz podemos reservar um número grande como foi feito com vetores.
Matrizes Aplicações Para manter a informação completa da tabela no computador, poderíamos armazenar também os nomes dos alunos em um vetor de String e as médias dos alunos num vetor de números reais. O próximo slide mostra o código fonte de um programa que faz a leitura das notas dos alunos, calcula as medias, guarda num vetor e exibe os resultados na tela do computador.
Matrizes Aplicações Program Turma; Var notas: array [..,..] of real; Media: array [..] of real; Soma: real; i,j: integer; Begin {Entrada de Dados} For i:= to do Begin For j:= to do Begin {ler as notas dos alunos em cada disciplina} Read (notas[i,j]); End; End; {Processamento dos Dados} For i:= to do Begin Soma:=; For j:= to do Begin {somar as notas do aluno i} Soma:=Soma + notas[i,j] End; Media[i]:=Soma/; End; {Saída de Resultados} soma:=; For i:= to do Begin Writeln( A media do aluno ',i,' : ',Media[i]); soma:=soma+media[i]; End; writeln( A media da turma e : ',soma/); End.
Matrizes Aplicações Soma de duas matrizes: Dadas duas matrizes A e B, determinar a soma de A e B. A soma de duas matrizes é bastante simples, apenas deve-se somar os elementos correspondentes de cada matriz e o resultado pode ser armazenado em uma outra matriz.
Matrizes Aplicações Exemplo de soma de duas matrizes A e B de dimensões x: A B C + =
Matrizes Aplicações Solução: Para cada linha i e coluna j o elemento da matriz resultante será calculado como: C[i,j] A[i,j] + B[i,j]; Logo, deve-se elaborar um programa que: Leia as dimensões das matrizes Leia as matrizes Calcule a matriz soma conforme a expressão acima. Exiba o resultado
Matrizes Aplicações A primeira entrada são as dimensões da matriz. Para poder somar duas matrizes, elas devem ter as mesmas dimensões.
Matrizes Aplicações Os elementos de cada linha devem ser digitados deixando um espaço, como mostra o seguinte exemplo: Exemplo de entrada: digite a dimensão das matrizes: digite os elementos da matriz A: digite os elementos da matriz B:
Matrizes Aplicações Program soma_matrizes; Var A,B,C: array[..,..] of integer; i,j: integer; M,N: integer; Begin Writeln('digite as dimensoes das matrizes:'); Readln(M,N); Writeln('digite os elementos da matriz A:'); For i:= to M do Begin For j:= to N do Begin Read(A[i,j]); End; Readln; end; Writeln('digite os elementos da matriz B:'); For i:= to M do Begin For j:= to N do Begin Read(B[i,j]); End; Readln; end; {calcular a soma de A + B} For i:= to M do Begin For j:= to N do Begin C[i,j]:=A[i,j]+B[i,j]; End; End; {imprimir o resultado} Writeln('O resultado da soma de A+B:'); For i:= to M do Begin For j:= to N do Begin Write(C[i,j],' '); {deixar espaço entre números} End; Writeln; { quebra linha } End; End.
Matrizes Aplicações Produto matricial Matematicamente, o produto de duas matrizes é definido somente quando o número de colunas da primeira matriz é igual ao número de linhas da segunda matriz. Dessa forma, se A é uma matriz mxn e B é uma matriz nxp, então seu produto é uma matriz mxp definida como AB (ou por A B).
Matrizes Aplicações Produto matricial O produto é dado por: n (AB) i,j = a i,r b rj = a i, b,j + a i, b,j + a i, b,j +... + a i,n b n,j r=
Matrizes Aplicações Produto matricial Na figura abaixo é ilustrado como calcular o elemento (,) e o elemento (,) de AB se A é uma matriz, e B é uma matriz (AB), = a,r b r, = a, b, + a, b, r= (AB), = a,r b r, = a, b, + a, b, r=
Referências FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Algoritmos estruturados. ed, Ed. LTC,. ISBN:. GUIMARÃES, A. M.; LAGES, N. A. C.; Algoritmos e estruturas de dados. ed, Ed. LTC,. ISBN:. FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Pascal estruturado. ed, Ed. LTC,. ISBN:. Velloso, F. C.; Informática: Conceitos Básicos. ed, Ed. Campus,. ISBN:. http://www.hkbu.edu.hk/~bba_ism/ism/index.htm http://pt.wikipedia.org/wiki/matriz_%matem%c%atica% Ajuda do turbo pascal.