Manual UFCDs6051e6052
Manual UFCDs6051e6052
Manual UFCDs6051e6052
Manual
UFCD 6051
e 6052
Curso Técnico de Eletrónica,
Automação e Computadores
Professora Ana Reis
0
Escola Profissional Vasconcellos, Lebre
Curso Técnico de Eletrónica, Automação e Comando
Índice
1. OS COMPUTADORES E AS LINGUAGENS DE PROGRAMAÇÃO .................................. 3
1.1. Linguagens de Programação ........................................................................................ 3
1.2. Classificação das Linguagens de Programação ............................................................. 3
1.3. Programas ................................................................................................................... 3
1.3.1. Fases de Elaboração de um Programa....................................................................................... 4
1.3.2. Programas Tradutores ............................................................................................................... 4
3. ESTRUTURAS DE DADOS....................................................................................... 30
3.1. Vetores e Matrizes .................................................................................................... 30
3.1.1. Operações Com Matrizes ........................................................................................................ 32
Exercícios ......................................................................................................................... 37
4.1. CADEIAS DE CARACTERES – STRING ........................................................................... 38
Não são mais do que um conjunto de palavras utilizadas na escrita de programas, de acordo com
léxico próprio sujeito a uma determinada estrutura. Tal como a linguagem escrita que nós
utilizamos diariamente, como por exemplo este texto, que obedece a uma determinada sintaxe,
de forma a ser compreendido por quem o lê.
Exemplos de linguagens de programação: Pascal, Fortran, Cobol, C, ADA, APL, Lisp, Basic, PL/1,
Assembly.
Pascal – É uma linguagem estruturada, permite criar bons hábitos de programação, bem como
desenvolver programas claros, concisos e estruturados.
Nível Linguagens
Alto Cobol, PL/1, Basic, Logo, ADA, RPG, Lisp, …
Baixo Assembly, C, Algol, Fortran …
Esta classificação é feita de acordo com a aproximação que têm ou não, com a nossa linguagem,
entenda-se linguagem humana. Sendo assim, uma linguagem de baixo nível é aquela que se
aproxima da linguagem-máquina ou das instruções do processador. Enquanto as linguagens de
alto nível aproximam-se da linguagem corrente.
1.3. Programas
Programa – Conjunto de instruções organizadas de uma forma lógica e previamente
estabelecida. Permitindo ao computador executar as tarefas que lhe são pedidas.
Vantagens Desvantagens
- Execução mais rápida; - Várias etapas de tradução;
- Permite estruturas de - Programa final é maior, necessitando
programas mais de
Compilador
completos; mais memória para ser executado;
- Permite otimização do - Processo de correção de erros e
programa-fonte. depuração é mais demorado.
- A depuração do programa
é
- Execução do programa é mais lenta;
mais simples;
- Estrutura de dados mais simples;
Interpretador - Consome menos memória;
- É necessário fornecer o programa-fonte
- Resultado imediato do
ao utilizador
programa ou rotina
desenvolvida.
• Dados – São a representação de tudo aquilo que nos rodeia: dos objetos, dos seres, dos
fenómenos, etc.
• Informação – Os dados depois de sujeitos a um tratamento adequado, podendo a
informação obtida, ser origem para nova informação.
A distinção entre tipos de dados também pode ser feita da seguinte forma:
Tipo de dados Exemplo
Numéricos 78, 45, …
Alfabéticos Escola, Turma, Alunos, …
Alfanuméricos RS232, LPT1, V60c, …
Lógicos Verdadeiro / Falso, 1 / 0
1.5. Operadores
Existem vários tipos de operadores, aos quais recorremos no nosso dia-a-dia, por exemplo,
quando queremos fazer cálculos utilizamos operadores aritméticos:
Operadores Aritméticos
+ Adição
- Subtração
X Multiplicação
/ Divisão
MOD * Resto da Divisão
DIV * Divisão inteira
* Só com números inteiros
Exemplos:
5 X 3 = 15
8 MOD 2 = 0
8 DIV 2 = 4
1 / 2 = 0,5
Quando estamos a comparar dois ou mais objetos, por exemplo, utilizamos operadores
relacionais:
Operadores Relacionais
= Igual
> Maior
< Menor
>= Maior ou Igual
<= Menor ou Igual
<> Diferente
Exemplos:
1<4
O João é MAIOR que o António
15 >= 2
A aula de matemática É DIFERENTE da aula de inglês
4+5=5+4
Como resultado de uma comparação entre dois objetos, dois factos, duas proposições ou duas
afirmações obtém-se sempre um valor lógico ( Verdadeiro / Falso ).
Por vezes, termos necessidade de efetuar comparações múltiplas, como a que se segue:
O João é MAIOR que o António E que o Nuno.
Para tal, além dos operadores atrás citados, utilizamos também operadores lógicos ou
booleanos:
Operadores Lógicos
E (and) Conjunção
OU (or) Disjunção
Negação (not) Negação
1.6. Expressões
Exercícios
1. Explique a utilidade das linguagens de programação.
2. Explique a diferença entre uma linguagem de alto nível e uma linguagem de baixo nível,
apresentando exemplos de cada uma.
3. Indique, caso exista, a diferença entre interpretador e compilador.
4. Que operadores lógicos conhece?
5. Que operadores lógicos aritméticos?
6. Que operadores lógicos relacionais?
7. Numa expressão qual a prioridade dos operadores?
8. Indique as fases da elaboração de um programa, desde a análise do problema até ao programa
acabado.
9. Diga o que entende por programa-fonte e programa-objeto.
10. Distinga constante de variável.
11. Diga o que entende por identificador.
No nosso dia-a-dia somos confrontados com trabalhos, mais ou menos complicados, que temos
de realizar. Para tal, executamos determinadas ações com o objetivo de as terminar. Não
implicando que as ações por nós realizadas, bem como a sua ordem, sejam a única forma de as
concluir. Pois pode muito bem outra pessoa, executar outras ações, ou por outra ordem, que
conduzam também à conclusão das mesmas.
No século XIX viveu na Alemanha um grande matemático: Gauss.
Aos cinco anos, Gauss andava na escola primária. Um dia, o professor deu, a todos os alunos,
um problema longo e aborrecido.
Calculem a soma dos 100 primeiros números inteiros.
Os alunos começaram o cálculo lento e laborioso.
Mas, poucos minutos depois, Gauss apresentou o resultado final:
E, perante o professor admirado, explicou o seu raciocínio:
É fácil. Escrevi os números inteiros de 1 a 100… E depois reparei que a soma de 0 com 100 dava
100… e que a soma (1 + 99) também dava 100… e 2 + 98 = 100 e 3 + 97 = 100… e assim
sucessivamente até 49 + 51 = 100.
Ao todo, há só destas somas ficando o número 50 por somar.
O resultado final é, pois: 50 X 100 + 50.
E não é que está certo?
- preencher um impresso
- trabalhar com eletrodomésticos
- indicação de uma rua
- instalação de um programa
…
Receita culinária: Ingredientes + Modo de preparação.
2.1. Algoritmo
É uma sequência finita de ações que descrevem um modo ou forma de resolução de um
problema.
2.2.1. Fluxogramas
São diagramas que representam os fluxos das ações contidas num programa, utilizando para
tal símbolos. Estes representam os diversos tipos de ações e o seu inter-relacionamento na
sequência de um programa.
Exemplo:
Pretende-se obter a soma de dois valores lidos a partir do teclado.
Vantagens:
- Como são baseados numa representação gráfica é mais fácil e agradável de visualizar, em
termos de estrutura geral, do que em pseudocódigo;
- Os símbolos utilizados são normalizados e universais;
- Como os símbolos têm implícito um significado, simplificam a resolução de um problema em
termos de estrutura geral;
- São fáceis de testar, permitem uma rápida deteção e correção de erros de lógica.
Desvantagens:
- Caso se tenham que efetuar alterações são pouco práticos;
- Os dados têm que ser definidos à parte, pois, os fluxogramas não permitem representar a
estrutura dos dados;
- Quando os programas são muito grandes, os fluxogramas, para os esquematizar, também se
tornam grandes e complexos.
2.2.2. Pseudocódigo
É uma forma de representar os algoritmos utilizando a linguagem escrita como se usam termos
convencionais para representar as ações a desenvolver por um programa. Os termos utilizados
são normalmente uma mistura da linguagem corrente com notações e palavras inerentes às
linguagens de programação.
Exemplo;
Início
ler (A);
ler (b);
CßA+B
escrever (C)
fim
Vantagens:
- Como é baseado na linguagem corrente é fácil de elaborar;
- Pode atingir vários níveis de complexidade conforme o detalhe com que se escrever;
- Permite acompanhar o tratamento dos dados facilitando o teste do programa;
- Permite implementar as estruturas elementares da programação estruturada;
- Serve de base à própria documentação.
Desvantagens:
- Não possui regras padrão pois depende do estilo de escrita de cada programador;
- Não permite uma rápida visualização de pormenores, porque utiliza a linguagem escrita, o que
obriga à sua leitura geral;
- Para problemas mais complicados, a linguagem pode tornar-se muito complexa e de difícil
compreensão.
uma forma eficiente. Pode dizer-se que, não se consegue obter programas estruturados sem o
seu uso.
Permite a seleção entre duas alternativas dependendo de uma dada condição / expressão. A
semântica desta estrutura é definida do seguinte modo:
• Se um dos blocos incluir mais que uma instrução é necessária delimitá-las com as
instruções de início e fim.
1. Ler um valor e enviar para o ecrã uma mensagem se o valor for negativo.
Esta estrutura permite a escolha entre várias alternativas. É selecionada uma instrução ou blocos
de instruções com base num valor ou numa expressão designada seletor. Pode-se obter o
mesmo resultado utilizando uma estrutura SE encadeada. No entanto, quando se utilizam vários
níveis de encadeamento, pode conduzir a instruções difíceis de compreender.
Tal como na estrutura SE a cláusula SENÃO não é obrigatória e também se um dos blocos incluir
mais que uma instrução é necessária delimitá-los com as instruções de início e fim.
A estrutura CASE adequa-se melhor a seleções baseadas em variáveis que têm valores discretos,
por sua vez a estrutura Se … ENTÃO … SENÃO adequa-se mais a seleções baseadas em
expressões com valores lógicos.
Exemplificando, supondo que introduzíamos um valor compreendido entre 1 e 6,
correspondente aos meses do primeiro semestre do ano, e pretendemos apresentar no ecrã por
extenso o mês correspondente.
Início
Ler (valor);
Caso valor
1: Escrever (‘Janeiro’);
2: Escrever (‘Fevereiro’)
3: Escrever (‘Março’);
4: Escrever (‘Abril’);
5: Escrever (‘Maio’);
6: Escrever (‘Junho’);
Senão
Escrever (‘Valor não permitido’);
Fim.
Início
Ler(valor)
Se valor = 1 Então
Escrever(‘Janeiro’)
Senão
Se valor = 2 Então
Escrever(‘Fevereiro’)
Senão
Se valor = 3 Então
Escrever(‘Março’)
Senão
Se valor = 4 Então
Escrever(‘Abril’)
Senão
Se valor = 5 Então
Escrever(‘Maio’)
Senão
Se valor = 6 Então
Escrever(‘Junho’)
Senão
Escrever(‘Valor não permitido’);
Fim.
Como é fácil constatar, nesta situação, a utilização de uma estrutura CASO apresenta um
algoritmo mais simples e mais legível.
É possível definir intervalos para os valores assumidos pelo seletor, por exemplo:
Início
Ler(Num)
Caso Num
1 ..100 : escrever (‘Número compreendido de 1 a 100’);
101 …200: Escrever (‘Número compreendido de 101 a 200’)
201 …50: Escrever (‘Número compreendido de 201 a 500’);
Fim;
Fim
Início
Ler(Num);
Caso Num
‘A’ .. ‘D’ : escrever (‘ABCD’);
‘E’ .. ‘H’ : escrever (‘EFGH’);
‘I’ .. ‘K’ : escrever (‘IJKL’);
Fim;
Fim
Como se pode ver por estes exemplos para definir o intervalo deve-se indicar o valor inicial
deste, seguido de dois pontos e o valor final do limite. Caso se tratem de valores do tipo caracter
é necessário delimitá-los por dois apóstrofos (por exemplo ‘R’).
O tipo de valores possíveis para seletor são do tipo ordinal.
Por vezes é necessário ter que repetir uma instrução ou um bloco de instruções. Para esse efeito,
temos à disposição as estruturas de repetição ou também designadas por ciclos.
Um ciclo é constituído por uma sequência de instruções – corpo do ciclo – e, por uma estrutura
que controla a execução dessas instruções, especificando o número de vezes que o corpo do
ciclo é executado. As instruções incluídas no corpo do ciclo podem ser executadas qualquer
número de vezes, mas esse número tem que ser finito.
Dispomos das seguintes estruturas de repetição ou ciclos.
1. O corpo do ciclo pode não ser executado nenhuma vez, caso o valor da condição /
expressão seja falso, visto essa condição / expressão ser verificada antes que se inicie o
ciclo.
2. Normalmente não é possível determinar, à partida, o número de vezes que o corpo
de ciclo é executado, porque o valor da condição que especifica o término do ciclo é
alterado durante a execução desse ciclo, não se sabendo que valor lhe vai ser
atribuído. Para melhor compreensão, apresenta-se o pseudocódigo:
Início
Ler (Numero)
Enquanto Numero > 0 Fazer
Inicio
Escrever (‘O número é maior que zero’);
Ler (Numero);
Fim
Fim.
Como se pode observar, o corpo do ciclo é executado enquanto o valor da variável Número for
maior que zero. Mas não é possível dizer qual o número de vezes que o corpo do ciclo é
executado, tanto pode ser nenhuma como uma infinidade de vezes.
REPETIR
Instrução1
… Corpo do Ciclo
Instrução n
ATÉ condição
Esta estrutura permite repetir uma ou várias instruções, até que uma determinada
condição/expressão, do tipo lógico, tenha valor verdadeiro.
1. Ler continuamente números a partir do teclado, até que seja digitado o valor 1.
Início
Contador ‘’ 1;
Soma 0;
Repetir
Ler (Valor);
Soma ß Soma + Valor;
Contador ß Contador + 1;
Até Contador > 5;
Escrever (Soma);
Fim
Início
Instrução1
…
Instrução
Fim
A estrutura PARA é utilizada para efetuar ciclos incondicionais ao contrário das outras estruturas
de repetição estudadas. A execução das instruções, do corpo do ciclo, é controlada por uma
variável – variável de controlo, que tem que ser um tipo enumerável. O corpo do ciclo é
executado para uma sequência de valores da variável de controlo.
Quando o computador encontra uma estrutura PARA inicializa a variável de controlo com o
primeiro valor da sequência. Se seguida executa as instruções incluídas no corpo do ciclo, depois
atualiza a variável de controlo com o próximo valor da sequência. A execução do ciclo termina
com o último valor da sequência.
Antes de o ciclo ser executado já se sabe qual o número de vezes que este irá ser executado, ao
contrário das outras estruturas de repetição.
Como exemplificação desta estrutura, apresenta-se o seguinte problema:
Início
Para Numero ß 20 ATÉ 200 FAZER
Escrever (Numero);
Fim.
Início Início
Numero <<- 20 Numero ß20;
Enquanto Numero <= 200 fazer Repetir
Início Escrever (Numero)
Escrever (Numero); Numero ß Numero + 1;
Numero ß Numero + 1; Até Numero > 200
Fim Fim
Fim Fim
Nesta situação, a utilização de estrutura PARA conduz à solução mais simples. Pois, a variável é
inicializada na declaração da estrutura e não é necessário incrementá-la, como é característica
desta estrutura. O incremento da variável é sempre de uma unidade.
O valor inicial da sequência deve ser menor que o valor final, caso contrário o corpo do ciclo não
é executado. Algumas linguagens de programação, por exemplo a linguagem PASCAL, permitem
que o valor inicial seja maior que o final, havendo necessidade de alterar uma das cláusulas da
estrutura. Exemplifica-se utilizando o problema anterior.
Exercícios Resolvidos
1. Deseja-se saber qual o montante a pagar, no final do mês, relativo ao consumo de
eletricidade. Para tal, deve ser pedido:
• O preço do KWh;
• A quantidade de KWhs consumidos durante o mês.
Resolução:
Início
Ler (Preco);
Ler (Consumo);
TotalPagar ß Preco x Consumo;
Escrever (TotalPagar);
Fim.
2. Calcular o volume de uma esfera, sabendo que o volume é dado pela seguinte fórmula:
4
V = ´p ´ r3
3
Resolução:
Início
Ler (Raio);
Volume ß 4/3 x Raio x Raio x Raio;
Escrever (Volume);
Fim.
Resolução:
Início
Ler (NumAlunos);
Ler (NumRapazes);
PercentaRapazes ß NumRapazes / NumAlunos x 100;
PercentaRaparigas <<- 100 – PercentaRapazes;
(ou então: PercentaRaparigas ß (NumAlunos – NumRapazes) / NumAlunos x 100;)
Fim.
Resolução:
Início
Ler (Num);
Horas ß Num DIV 3600;
Num ß Num MOD 3600;
Minutos ß Num DIV 60;
Num ß Num MOD 60;
Escrever (Horas);
Escrever (Minutos);
Escrever (Num);
Fim.
5. Pretende-se obter o valor da soma, dos números pares compreendidos entre 100 e 200
(inclusive).
Resolução:
Início
Soma ß 0;
NumPar ß 100;
Repetir
Soma ß Soma + NumPar;
NumPar ß NumPar + 2;
Até NumPar > 200;
Escrever (Soma);
Fim.
Início
Quadrado ß 0;
Para Num ß 1 Até 20 Fazer
Início
Quadrado ß Num x Num;
Escrever (Quadrado);
Fim
Fim
6.1. Resolva o mesmo exercício utilizando outra estrutura.
7. Pedir ao utilizador dez números e no final mostrar no ecrã o maior e o menor número digitado.
Resolução:
Início
NumMaior ß 0;
NumMenor ß 0;
Para Contador ß 1 Até 10 Fazer
Início
Ler (Numero);
Se Numero > NumMaior Então
NumMaior ß Numero;
Se Numero < NumMenor Então
NumMenor ß Numero;
Fim
Escrever (Maior);
Escrever (Menor);
Fim
8. Calcular a média de uma série de valores pedidos ao utilizador. Deverá ser pedido também o
número de valores.
Resolução:
Início
Contador ß 0;
Soma ß 0;
Media ß 0;
Ler (NumValores);
Enquanto Contador < NumValores Fazer
Início
Ler (Valor);
Soma ß Soma + Valor;
Contador <- Contador + 1;
Fim
Media ß Soma / NumValores;
Escrever (Media);
Fim
9. Numa loja de eletrodomésticos são vendidos televisores. O vendedor recebe o salário mais
uma comissão pelo número de aparelhos vendidos mensalmente, segundo a seguinte tabela:
Resolução:
Início
Ler (Salario);
Ler (NumTv);
Se NumTv > 6 Então
Vencimento ß Salario + Salario x 0,05
Senão
Se (Num >= 4) E (Num <= 6) Então
Vencimento ß Salario + salario x 0,03
Senão
Se (Num >= 1) E (Num <= 4) Então
Vencimento ß Salario + Salario x 0,01
Senão
Vencimento ß Salario;
Escrever (Salario);
Fim.
9.1. Alterar o algoritmo obtido de forma a apresentar também o valor das comissões recebidas.
10. Supondo que o dia da semana é representado por 1, se for domingo; 2 se for segunda e
assim sucessivamente. Pedir ao utilizador que digite um valor e apresentar no ecrã o dia da
semana correspondente.
Resolução:
Início
Ler (Dia);
Caso Dia
1: Escrever (‘Domingo’);
2: Escrever (‘Segunda’);
3: Escrever (‘Terça’);
4: Escrever (‘Quarta’);
5: Escrever (‘Quinta’);
6: Escrever (‘Sexta’);
7: Escrever (‘Sábado’);
Senão
Escrever (‘Não existe dia da semana para esse valor’);
Fim.
11. Calcular a variação de volume de um cubo, sabendo que o volume é dado pela fórmula:
A3
A aresta varia entre 10 e 100 cm.
Resolução:
Início
Para A ß 10 Até 100 Fazer
Início
Volume ß A x A x A;
Escrever (Volume);
Fim;
Fim.
12. Ler um número, diferente de zero, e escrever no ecrã POS ou NEG consoante se trate de um
número positivo ou negativo respectivamente.
Resolução:
Início
Ler (Numero);
Se Numero > 0 Então
Escrever (‘Positivo’)
Senão
Escrever (‘Negativo’)
Fim.
13. Dado uma série de valores representando as notas de alunos, elabore um algoritmo que
determine quantos tiveram nota positiva.
Resolução:
Início
Ler (NumNotas);
Para índice ß 1 Até NumNotas Fazer
Início
Ler (Nota);
Se Nota >= 10 Então
ContaPositivas ß ContaPositivas + 1;
Fim;
Fim.
2. escreva um programa que peça uma série de números, ao utilizador, até que a soma desses
números atinja ou ultrapasse um limite máximo, indicado também pelo utilizador.
3. Calcular e apresentar no ecrã, o número de grãos de trigo que se podem colocar num tabuleiro
de xadrez. Se fosse colocado 1 na primeira casa, 2 na segunda, 4 na terceira, 8 na quarta e, assim
sucessivamente. Sabendo ainda que um tabuleiro de xadrez tem 63 casas.
4. Ler uma série de valores, a partir do teclado, até que seja digitado um valor compreendido
entre 1 e 10.
7. Escreva um algoritmo que receba uma quantia em euros, inferior a 500€, e determine o
número de moedas de 2€, 1€, 50 cêntimos, 20 cêntimos, 10 cêntimos, 5 cêntimos, 2 cêntimos e
1 cêntimo necessárias para perfazer esse valor. Devem ser sempre utilizadas as moedas de maior
valor.
8. Um número primo é um número que apenas é divisível por ele próprio e pela unidade. Escreva
um algoritmo que receba um número e determine se ele é um número primo.
8.1. Utilizando o algoritmo da alínea anterior, escreva um algoritmo que receba um número e
calcule todos os números primos menores que ele próprio.
3. ESTRUTURAS DE DADOS
Até agora, nos algoritmos desenvolvidos, só foram utilizados dados do tipo simples – dados
padrão. As utilizações sós deste tipo de dados limitam a resolução de problemas.
Todos os dados do tipo simples têm a característica comum de cada variável representar um
único valor. Os dados do tipo estruturado têm a característica comum de um único identificador
poder representar vários elementos, e os seus elementos serem acedidos rapidamente. Os
elementos do tipo estruturado podem ser manipulados coletivamente ou individualmente,
dependendo dos requisitos do problema.
Nesta unidade irá ser feita uma abordagem exaustiva de todos eles.
Tal como em linguagem Pascal, para distinguir os índices, utilizamos a mesma notação,
colocamo-los entre parênteses retos.
A[2,1] = 8
Um outro aspeto é a designação dada às matrizes de acordo com a relação entre o número de
linha e colunas, podendo salientar-se as seguintes:
• Quando uma matriz tem o número de linhas diferente do número de colunas, designa-
se por matriz RECTANGULAR.
11 12 13
21 22 23
• Quando uma matriz tem o número de linhas igual ao número de colunas, designa-se por
matriz QUADRADA.
11 12 13
21 22 23
31 32 33
Atribuição de Valores
A atribuição é feita como para qualquer variável, por exemplo:
MatrizA[3,1] ß 77
Ao elemento da linha 3 coluna 1, da MatrizA é atribuído o valor 77.
Leitura de Valores
A leitura de uma matriz é feita como qualquer variável, tendo também que se referenciar o
elemento que se pretende ler. Por exemplo:
Ler (Matriz[2,1]);
Ler (Vector[5]);
Escrita de Valores
Tal como na leitura de valores, além da instrução de escrita, é necessário referenciar o elemento.
Por exemplo:
Escrever (Matriz[2,1]);
Escrever (Vetor[5]);
As matrizes são variáveis que permitem guardar vários valores, para que o processo de escrita
e leitura de dados não tenha uma infinidade de instruções. Normalmente utilizam-se estruturas
de repetição para esse fim. Supondo que tínhamos uma matriz, de inteiros, com 3 linhas e 2
colunas e pretendíamos escrever o seu conteúdo. Se não utilizássemos nenhuma estrutura de
repetição teríamos qualquer coisa como:
Início
Escrever (Matriz[1,1]);
Escrever (Matriz[1,2]);
Escrever (Matriz[2,1]);
Escrever (Matriz[2,2]);
Escrever (Matriz[3,1]);
Escrever (Matriz[3,2]);
Fim.
Exemplo:
Dadas as matrizes A e B
Exemplo prático:
Dadas as matrizes A e B
é1 2 ù é5 6 ù
A=ê ú B = ê ú Calcular A + B
ë3 4 û ë 7 8û
Então será:
é1 + 5 2 + 6ù é 6 8 ù
A+ B = ê ú=ê ú
ë3 + 7 4 + 8 û ë10 12û
é1 2 ù é 2 ´1 2 ´ 2 ù é 2 4ù
2´ ê ú = ê ú=ê ú
ë3 4 û ë 2 ´ 3 2 ´ 4 û ë 6 8 û
Inversamente, divide-se uma matriz por um escalar, dividindo todos os elementos da matriz por
esse escalar.
Multiplicação De Matrizes
Multiplicam-se linhas por colunas, sendo necessário que o número de linhas da primeira matriz
seja igual ao número de colunas da segunda matriz.
Considerando as matrizes A e B
éb11 b12 ù
é a11 a12 a 13 ù
A=ê ú B = êêb21 b22 úú
ë a21 a22 a23 û êëb31 b32 úû
é a11 ´ b11 + a12 ´ b21 + a13 ´ b31 a11 ´ b12 + a12 ´ b12 + a13 ´ b32 ù
C=ê
ë a21 ´ b11 + a22 ´ b21 + a23 ´ b31 a21 ´ b12 + a22 ´ b22 + a23 ´ b32 úû
Como se vê, cada elemento de C é igual à soma dos produtos dos elementos de uma linha de
A , pelos correspondentes elementos de uma coluna de B .
Exemplo:
Sendo:
é1 2ù é5 6ù
A=ê B=ê Calcular A ´ B
ë3 4úû ë7 8úû
Então será:
é1´ 5 + 2 ´ 7 1´ 6 + 2 ´ 8 ù é19 22 ù
C=ê =
ë3 ´ 5 + 4 ´ 7 3 ´ 6 + 4 ´ 8úû êë43 50 úû
Matriz Transposta
Determinar a transposta de uma matriz é reescrevê-la de forma que suas linhas e colunas
troquem de posições ordenadamente, isto é, a primeira linha é reescrita como a primeira coluna,
a segunda linha é reescrita como a segunda coluna e assim por diante, até que se termine de
reescrever todas as linhas na forma de coluna.
Exemplo:
Determinar a matriz transposta da matriz A dada a seguir:
é1 3ù
A = êê 2 5úú
êë -4 0úû
Temos três linhas na matriz dada, a linha 1, composta pelos números 1 e 3, a linha 2, composta
pelos números 2 e 5 e a linha 3 composta pelos números -4 e 0.
é1 2 - 4ù
AT = ê
ë3 5 0 úû
3.3. Ficheiros
São conjuntos de registos, do mesmo tipo, contexto e, geralmente, do mesmo formato.
Exemplo:
• Ficheiro de alunos;
• Ficheiro de turmas;
• Ficheiro de notas;
• …
• Indexada – Nos ficheiros que tenham este tipo de organização, os ficheiros estão
organizados segundo um ou mais campos. Campos esses que constituem a chave de
indexação, que se encontra armazenada numa tabela separada do ficheiro. Os registos
desta tabela estão relacionados com os registos do ficheiro.
Exercícios
1. Dadas as matrizes
é2 1 ù é4 3ù
A=ê ú B=ê ú
ë4 2û ë -5 9û
Mostre que A + B = B + A
2. Dadas as matrizes
é1 ù é5 ù
A = êê3 úú B = êê 4 úú C = [ 2 6 8]
êë 4 úû êë3 úû
Determine:
a) A + B
b) A ´ B
c) C T
3. Determine para as seguintes matrizes
é2 - 5ù é1 0ù
A=ê B=ê
ë9 8 úû ë4 - 5úû
a) A´ B
b) B´ A
c) A+ B
d) B- A
é2 4 0ù
A = êê1 0 2 úú
êë3 4 5úû
é2 5 1ù
é3 2 ù é0 1 ù
A=ê ú B=ê ú C = êê -3 -1 - 2úú
ë5 1 û ë3 2 û êë3 4 5 úû
é2 1 2ù é3 ù
D = êê 4 3 4 úú E = êê 2 úú F =[ 4 7 8]
êë6 5 6 úû êë1 úû
Determine:
a) A + B
b) 3A
c) 2 A - 3B
d) 1/ 2 A
e) A + F
f) C - D
g) E T
h) F T
i) DT
j) A ´ B
k) ( A ´ B )
T
l) AT ´ BT
m) C ´ D
n) D ´ C
o) E ´ C
q) A ( A + B )
O Pascal fornece o tipo de dados predefinido string, para trabalhar com matrizes de caracteres,
como uma extensão aos tipos existentes. O tipo de dados string é idêntico aos tipos de
sequências de caracteres existentes noutras linguagens de programação. Permite uma fácil
manipulação de sequências de caracteres com tamanho variável.
Declaração:
Type
IdentificadorTipo = String[tamanho];
Var
Identificador : IdentificadorTipo;
Ou
Var
Identificador = String[tamanho];
Exemplo:
Type
Str50 = String[50];
Var
Cadeia : Str50;
O valor delimitado por parêntesis, tamanho, indica o tamanho máximo da sequência. O tamanho
das variáveis string não pode ultrapassar os 255 caracteres, caso contrário, ocorrerá um erro de
compilação. Por outro lado, se o tamanho atribuído à sequência de caracteres exceder o
tamanho declarado, essa sequência será truncada.
Uma sequência de caracteres pode ser entendida como uma matriz, definida da seguinte forma:
Var
Identificador : Array[0..Tamanho] Of Char;
Program ExemploString1;
Var Frase: string[35];
Begin
Frase:= 'ISTO É UMA SEQUÊNCIA DE CARACTERES';
Writeln(Frase); {escreve no ecrã ISTO É UMA SEQUÊNCIA DE
CARACTERES}
Writeln(Frase[3]); {escreve no ecrã a letra T}
Writeln(Frase[6]); {escreve no ecrã a letra É}
Writeln;
Writeln;
Writeln('Digite ENTER para sair do programa');
End.
Const
Mensagem=’Pascal’;
A sequência de caracteres é delimitada por apóstrofos. O Pascal cria uma constante compatível
com o tipo de dados string, mas os seus elementos não poderão ser acedidos individualmente.
Program ComparaString1;
Uses
Crt;
Begin
Clrscr;
If ‘Linguagem’ < ‘Linguagem Pascal’ Then
Writeln(‘Verdadeiro’)
Else
Writeln(‘Falso’);
Readln;
End.
Neste exemplo, a sequência de caracteres Linguagem é menor que Linguagem Pascal, porque
é menor em comprimento.
Program ComparaString2;
Uses
Crt;
Begin
Clrscr;
If ‘pascal’ < ‘PASCAL’ Then
Writeln(‘VERDADEIRO’)
Else
Writeln(‘FALSO’);
Readln;
End.
Se for necessário comparar duas sequências de caracteres e quisermos ignorar se as letras são
maiúsculas ou minúsculas, existe a função upcase() que faz a conversão de minúsculas para
maiúsculas. A utilização desta função é bastante útil, mas obriga a que os elementos de uma
sequência sejam lidos individualmente ou que sejam convertidos individualmente.