Baixe o app para aproveitar ainda mais
Prévia do material em texto
Professor Leonardo Luiz Vieira da Silva leovieira@gmail.com Qual a sua expectativa sobre a disciplina? • Participação ativa nos exercícios • Celular no silencioso • Transparência (tirem suas dúvidas) • Foco no aprendizado – É uma disciplina TOTALMENTE “prática” Qual expectativa do Professor? Introdução a Lógica de Programação • Lógica de Programação – É a técnica de encadear pensamentos para atingir determinado objetivo. • Sequencia Lógica – São passos executados até atingir um objetivo ou solução de um problema. • Instruções – Conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma ação elementar a executar. • Algoritmo – Sequência de instruções para... Introdução a Lógica de Programação Exercício 1 Passo a passo pra Chupar uma Bala 1)Pegar a bala 2)Retirar o papel 3)Chupar a bala 4)Jogar o papel no lixo Exercício 2 Somar dois números quaisquer 1)Escreva o primeiro número no retângulo A 2)Escreva o segundo número no retângulo B 3)Some o número do retângulo A com o número do retângulo B e coloque o resultado no retângulo C • Programas de Computador – São algoritmos escritos em uma linguagem de computador (C, Java, C#, Cobol, Python entre outras...) – Submetidos a uma rigorosa interpretação Programas Exercício 3 • Crie uma sequencia lógica para trocar o pneu do carro. Seja muito detalhista. Exercício 4 • Faça um algoritmo para somar dois números e multiplicar o resultado pelo primeiro. Desenvolvendo Algoritmos • Aplicação de um pseudocódigo • Regras para construção do pseudocódigo – Usar somente um verbo por frase Exemplo a) COMO FAZER ARROZ DOCE b) CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE – Qualquer pessoa irá conseguir entender (não apenas o programador!) – Usar frases curtas e simples (ser objetivo) – Evitar palavras com sentido dúbio Estrutura São os dados de entrada do algoritmo São os procedimentos utilizados para chegar ao resultado final São os dados já processados Nome Idade Execute o comando Resultado do cálculo Relatórios Exibição de tela Realização de cálculos Busca de Informações Validações Calcular a média final dos alunos da 3ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4. Exemplo de Algoritmo a) Quais são os dados de entrada? R: Os dados de entrada são P1, P2, P3 e P4 b) Qual será o processamento a ser utilizado? R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro) c) Quais serão os dados de saída? R: O dado de saída será a média final Exemplo de Algoritmo • Receba a nota da prova1 • Receba a nota de prova2 • Receba a nota de prova3 • Receba a nota da prova 4 • Some todas as notas e divida o resultado por 4 • Mostre o resultado da divisão Trocando uma lâmpada Exercício 5 • Crie uma sequencia lógica para trocar o pneu do carro. Seja muito detalhista, pense nos condicionais e na repetição. Diagrama de Bloco • Constante: O conteúdo se mantem “fixo”. • Variável: O conteúdo pode sofrer modificações. Constantes e Variáveis Tipos de Variáveis • Numéricas • Poderão ser utilizados para cálculos • Inteiro: 1 • Reais: 1,00 • Caracteres • Não contém números. Ex: nomes • Alfanuméricas • Letras e números • Não é possível realizar operações matemáticas • Lógicas • Somente dados lógicos VERDADEIRO OU FALSO Para fazer uso de uma variável você tem que declará-la. Caracter: nome; Real: dinheiro; Operadores Operadores Aritméticos Operadores Relacionais Operadores Lógicos Operadores Aritméticos Operadores Relacionais Operadores Lógicos Operadores Lógicos Exercício Operações Lógicas Diagrama de Bloco Diagrama de Bloco Diagrama de Bloco Diagrama de Bloco Estrutura de Decisão SE ENTÃO / IF ... THEN SE ENTÃO SENÃO / IF... THEN... ELSE ESCOLHA CASO / SELEC CASE Estrutura de Repetição ENQUANTO x, FACA (DO WHILE ... LOO) REPITA ATE x (REPEAT UTIL) PARA ... ATE ... FACA (FOR ... TO ... DO) SE MEDIA >= 5.0 ENTÃO ALUNO APROVADO SE ENTÃO / IF ... THEN SE MEDIA >= 5.0 ENTÃO ALUNO APROVADO SENÃO ALUNO REPROVADO SE ENTÃO SENÃO / IF... THEN... ELSE ESCOLHA / SELEC CASE TITULO = “” LEIA (OP) ESCOLHA OP CASO 1: TITULO = “OPÇÃO 1” CASO 2: TITULO = “OPÇÃO 2” CASO 3: TITULO = “OPÇÃO 3” CASO 4: TITULO = “OPÇÃO 4” CASO 5: TITULO = “OPÇÃO 5” CASO CONTRARIO: TITULO = “OPÇÃO ERRADA” FIMESCOLHA VAMOS PROGRAMAR... algoritmo "Números de 1 a 10 (com enquanto...faca)“ var j: inteiro inicio j <- 1 enquanto j <= 10 faca escreva (j) j <- j + 1 fimenquanto fimalgoritmo Enquanto x, faca (Do While ... Loop) a)Imprima apenas os números pares (Utilize o algoritmo anterior) b)Fazer um algoritmo que leia três valores inteiros, determine e imprima o menor deles c)Dado três valores X, Y, Z, verificar se eles podem ser os comprimentos dos lados de um triângulo e, se forem, verificar se é um triângulo equilátero, isósceles ou escaleno. Se eles não formarem um triângulo, escrever uma mensagem. Propriedade - O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos outros dois lados. Definição 1 - Chama-se triângulo equilátero o triângulo que tem os comprimentos dos três lados iguais. Definição 2 - Chama-se triângulo isósceles o triângulo que tem os comprimentos de dois lados iguais. Portanto, todo triângulo equilátero também é isósceles. Definição 3 - Chama-se triângulo escaleno o triângulo que tem os comprimentos de seus três lados diferentes. Exercício d)Fazer um algoritmo que calcule o valor de N!(fatorial de N), sendo que o valor inteiro de N encontra-se disponível em uma unidade de entrada e que: N! = 1 x 2 x 3 x ... x(N - 1) x N; 0! = 1, por definição. e)Num frigorífico existem 6 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Fazer um algoritmo que escreva o número e peso do boi mais gordo e do boi mais magro. algoritmo "Peso_do_Boi" var BOIS,GORDO,MAGRO,MAIORPESO,MENORPESO,CARTAO,PESO: inteiro inicio BOIS <- 0 MAIORPESO <- 0 MENORPESO <- 100000 repita escreval ("Digite o CARTÃO e PESO do boi!") leia (CARTAO,PESO) se (PESO > MAIORPESO) entao MAIORPESO <- PESO GORDO <- CARTAO fimse se (PESO < MENORPESO) entao MENORPESO <- PESO MAGRO <- CARTAO fimse BOIS <- BOIS + 1 ate BOIS = 4 escreval ("Boi mais GORDO:", GORDO, " / PESO:", MAIORPESO, " arrobas") escreval ("Boi mais MAGRO:", MAGRO, " / PESO:", MENORPESO, " arrobas") fimalgoritmo algoritmo "Números de 1 a 10“ var j: inteiro inicio j := 1 enquanto j <= 10 faca se (j = 2) ou (j = 6) ou (j = 8) ou (j = 10) entao escreva (j) fimse j := j + 1 fimenquanto fimalgoritmo a) Imprima apenas os números pares a)Imprima apenas os números pares (Otimizado) algoritmo "Números de 1 a 10“ var j: inteiro inicio j <- 1 enquanto j <= 10 faca se j mod 2 = 0 entao escreva (j) fimse j := j + 1 fimenquanto fimalgoritmo algoritmo "Menor_Numero" var A,B,C,MENOR: inteiro inicio leia (A,B,C) se (A < B) e (A < C) entao MENOR <- A senao se (B < C) entao MENOR <- B senao MENOR <- C fimse fimse escreva ("O MENOR número é: ", menor) fimalgoritmo b)Leia três números e determine o menor deles c)Determine o triângulo algoritmo "Tipo_do_Triângulo" var X,Y,Z: inteiro Inicio leia (X,Y,Z) se (X <Y + Z) e (Y < X + Z) e (Z < X + Y) entao se (X = Y) e (X = Z) entao escreva ("Triângulo EQUILÁTERO") senao se (X = Y) ou (X = Z) ou (Y = Z) entao escreva ("Triângulo ISÓSCELES") senao escreva ("Triângulo ESCALENO") fimse fimse senao escreva ("NÃO EXISTE TRIÂNGULO") fimse fimalgoritmo algoritmo "Fatorial" var FATORIAL,I,N: inteiro inicio leia (N) se N = 0 entao escreval ("FATORIAL DE 0 = 1 POR DEFINIÇÃO") senao FATORIAL := 1 I := 1 repita FATORIAL := (FATORIAL * I) escreval ("FATORIAL DE", I, " =", FATORIAL) I := I + 1 ate I > N fimse fimalgoritmo d)Calcule o fatorial Exercícios em Sala 1)Implemente um algoritmo que receba 4 notas e imprima a média aritmética. Caso a nota seja maior ou igual que 7, exiba na tela que o aluno está aprovado, caso contrário exiba que ele está reprovado. 2)Implemente o algoritmo que receba as 4 notas de 2 alunos, imprima a média de cada aluno e informe o aluno (nome) com a maior nota. 2.1 As notas do segundo aluno estão em número com decimais. 2)Vamos incrementar o algoritmo abaixo: algoritmo "Números de 1 a 10“ var j: inteiro inicio j := 1 enquanto j <= 10 faca se j mod 2 = 0 entao escreva (j) fimse j := j + 1 fimenquanto fimalgoritmo a)imprima os números de 10 para 0 b)ao imprimir o número 2, escreva, "Esse é o número 2". 3)Implemente um algoritmo que exiba 4 opções de menu 1-Inclusão, 2-Consulta, 3-Alteração, 4- Exclusão. Ao selecionar a opção desejada do menu imprima na tela a opção escolhida. 4)Incremente o algoritmo acima com a opção de 5 - Sair. Enquanto não for selecionada essa opção o menu deve ser apresentado e a opção escolhida exibida. Exercícios em Sala algoritmo "Números de 1 a 100“ var x: inteiro inicio PARA x de 1 ATE 100 FACA escreva (x) FIMPARA fimalgoritmo Utilizando o PARA DE ATE FAÇA (FOR) a)Altere o algoritmo para ler um número e imprimir na tela até o número informado (via teclado) algoritmo "Números de 1 a 100“ var x,z: inteiro inicio leia(z) PARA x de 1 ATE z FACA escreva (x) FIMPARA fimalgoritmo b)Altere o algoritmo onde serão impressos apenas números pares. algoritmo "Números de 1 a 100“ var x,z: inteiro inicio leia(z) PARA x de 1 ATE z FACA se x mod 2 = o entao escreva (x) fimse FIMPARA fimalgoritmo Implemente os algoritmos abaixo: 1)Leia 2 números e imprima na tela o resultado da soma, multiplicação e subtração. Exiba uma mensagem para cada resultado. Exemplo: Resultado da soma: X. Multiplicação Z Subtração: W. 2)Leia 4 números e imprima na tela o maior deles. Na sequencia descubra se é um número PAR ou ÍMPAR e imprima o resultado. 3) Num frigorífico existem 4 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Fazer um algoritmo que escreva o número e peso do boi mais gordo e do boi mais magro. 4)Leia 3 três valores distintos e imprima na tela em ordem crescente. Exercícios em Sala Ferramenta Laboratório Visualg Vetores • Tipos primitivos não são suficientes para representar toda a informação • Necessário criar estrutura de dados • Uma variável é um elemento, uma estrutura de dados um conjunto • Vetores são estruturas unidimensionais homogêneas Vamos ao quadro! “Calcule e apresente a média geral de uma turma de 8 alunos. A média a ser obtida deve ser a média geral das médias de cada aluno obtida durante o ano letivo”. Veja a tabela a seguir que apresenta o número de alunos, suas notas bimestrais e respectivas médias anuais. OBS: O cálculo das médias da turma deverá ser baseado na soma das médias de cada aluno e depois dividi-las por 8. Entendendo melhor Tabela de notas Aluno Nota 1 Nota 2 Nota 3 Nota 4 Média 1 4,0 6,0 5,0 3,0 4,5 2 6,0 7,0 5,0 8,0 6,5 3 9,0 8,0 9,0 6,0 8,0 4 3,0 5,0 4,0 2,0 3,5 5 4,0 6,0 6,0 8,0 6,0 6 7,0 7,0 7,0 7,0 7,0 7 8,0 7,0 6,0 5,0 6,5 8 6,0 7,0 2,0 9,0 6,0 Estrutura de dados Elabore um programa que efetue a leitura de cada nota, a soma delas e a divisão do valor da soma por 8, e escreva o valor da média obtida. Defina as seguintes variáveis para armazenar os valores das médias: MD1 = ? MD2 = ? MD3 = ? MD4 = ? MD5 = ? MD6 = ? MD7 = ? MD8 = ? SOMA = ? MEDIA = ? Vamos para a prática algoritmo "MEDIA_TURMA_SEM_VETOR" var MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8: real SOMA, MEDIA: real inicio SOMA := 0 leia (MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8) SOMA <- (MD1 + MD2 + MD3 + MD4 + MD5 + MD6 + MD7 + MD8) MEDIA <- SOMA / 8 escreva ("A média geral é:", MEDIA) fimalgoritmo Exemplo Após a execução do programa deveremos ter os seguintes valores em cada variável. MD1 = 4,5 MD2 = 6,5 MD3 = 8,0 MD4 = 3,5 MD5 = 6,0 MD6 = 7,0 MD7 = 6,5 MD8 = 6,0 SOMA = 48,0 MEDIA = 6,0 Existe uma forma melhor de fazer! Qual? Resultado vetor MD com 8 posições Manipulação acontece através de um índice. Não confundir índice com elemento. MD [6] := 28 Leia (MD[6]) Escreva (MD[6]) Exemplo LI – representa o limite inicial do vetor LF – representa o limite final do vetor Tipo primitivo: representa qualquer um dos tipos básicos ou tipos anteriormente definidos. Declaração VARIÁVEL : vetor [<dimensão>] de <tipo de dado>, sendo que vetor é uma palavra reservada (no nosso caso específico porque utilizamos o VisuAlg), <dimensão> será a indicação dos valores inicial e final do tamanho do vetor e <tipo de dado> se o vetor irá utilizar valores inteiros, caracteres, lógicos ou reais. Ex: MD: vetor[1..40] de real Declaração A leitura de um vetor é processada passo a passo, um elemento por vez usando a instrução leia seguida da variável mais o índice. Ex: para I de 1 ate 8 faca leia (MD[I]) fimpara Leitura dos dados de um Vetor OBS: Tenha cuidado para não confundir o índice com o elemento! Índice é o endereço de alocação de uma unidade da matriz, enquanto elemento é o conteúdo armazenado em um determinado endereço. Estrutura do Vetor MD Para o processo de escrita de uma matriz deverá ser utilizada a instrução escreva seguida da indicação da variável e seu índice. Ex: para I de 1 ate 8 faca escreval ("A média do aluno", I, " é:", MD[I]) fimpara Escrita dos dados de um Vetor algoritmo "MEDIA_TURMA_COM_VETOR" var MD: vetor[1..8] de real SOMA, MEDIA: real I: inteiro inicio SOMA := 0 para I de 1 ate 8 faca leia (MD[I]) SOMA <- SOMA + MD[I] fimpara MEDIA :=- SOMA / 8 para I de 1 ate 8 faca escreval ("A média do aluno", I, " é:", MD[I]) fimpara escreval ("A média geral é:", MEDIA) fimalgoritmo Exemplo 1) Desenvolver um programa que efetue a leitura de dez elementos de um vetor tipo A. Construir uma vetor B de mesmo tipo, observando a seguinte lei de formação: se o valor do índice for par, o valor deverá ser multiplicado por 5, sendo ímpar, deverá ser somado com 5. Ao final mostrar o conteúdo da matriz B. 2) 2) Desenvolver um programa que efetue a leitura de cinco elementos de um vetor. No final, apresente o total da soma de todos os elementos que sejam ímpares. Exercícios Matrizes • Vetores são estruturas unidimensionais homogêneas • Matrizes são estruturas bidimensionais homogêneas – Estruturas de dados bidimensionais • Na prática iremos aprender a utilizar um Vetor com mais uma dimensão • Iremos “percorrer” no sentido horizontal e vertical • Para percorrer um Vetor utilizamos apenas um looping (comando para, enquanto ou repita) • No caso de matrizes, deverá ser utilizado o número de looping de acordo com número de dimensões • Exemplo: Matrizes de 2 dimensões: 2 loopings(objetivo) Matrizes de 3 dimensões: 3 loopings Matrizes • Para “percorrer” uma matriz de duas dimensões utilizamos 2 índices. • O primeiro para indicar a linha e o segundo para indicar a coluna. • A tabela[2,3] indica que está sendo feita uma referência a: linha 2, coluna 3 Matrizes Matriz • Representamos uma matriz de duas dimensões por meio de linhas e colunas? • TABELA[1..8,1..5], onde seu nome é TABELA, possui um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja, é uma matriz 8 por 5 (8 x 5). • Isto significa que podem ser armazenados na matriz TABELA até 40 elementos? Matrizes de duas dimensões (também chamados de Arrays) • Matriz TABELA (8 x 5) = 40 elementos Coluna 1 2 3 4 5 Linha 1 2 3 4 5 6 7 8 • VARIÁVEL : vetor [<dimensão1:dimensão2>] de <tipo de dado>, em que <dimensão1> e <dimensão2> são a indicação do tamanho da tabela e <tipo de dado> o tipo da matriz, que poderá ser formada por valores inteiros, caracteres, lógicos ou reais. • OBS: Lembrem-se que vetor é uma palavra reservada no nosso caso específico, porque utilizamos o VisuAlg. • Ex: TABELA: vetor[1..8,1..5] de real Matriz - Declaração Leitura dos dados de uma Matriz A leitura de uma matriz de duas dimensões, assim como das matrizes de uma dimensão é processada passo a passo, um elemento por vez, sendo utilizada a instrução leia seguida da variável mais os seus índices. Ex: para I de 1 ate 8 faca para J de 1 ate 5 faca leia (TABELA[I,J]) fimpara fimpara Matriz - Leitura Escrita dos dados de uma Matriz Para o processo de escrita de uma matriz deverá ser utilizada a instrução escreva seguida da indicação da variável e seu índice. Ex: para I de 1 ate 8 faca para J de 1 ate 5 faca escreval (“Matriz de duas dimensões:", TABELA[I,J]) fimpara fimpara Matriz - Escrita • Tomemos como exemplo a leitura das 4 notas de 8 alunos. Assim sendo, a tabela em questão armazenará 32 elementos. Um detalhe a ser considerado é a utilização de duas variáveis para controlar os dois índices de posicionamento de dados na tabela. • Quando usamos matriz de uma dimensão, anteriormente, utilizamos apenas a variável I para controlar as posições dos elementos dentro da matriz, ou seja, a posição em nível de linha. • Agora a variável I continuará tendo o mesmo efeito porém surge a segunda variável J que irá controlar a posição da coluna. Entendendo melhor... • Observe que, ao serem iniciados os valores para o preenchimento da tabela, eles são colocados na posição NOTAS[1,1]. • Assim sendo, será então digitado para o primeiro aluno a sua primeira nota. Depois é incrementado mais 1 em relação à coluna, sendo colocada para a entrada a posição NOTAS[1,2], linha 1 e coluna 2. Desta forma, será digitado para o primeiro aluno a sua segunda nota. Entendendo melhor... • Quando o contador de coluna, o looping da variável J, atingir o valor 4, ele será encerrado. Em seguida o contador da variável I será incrementado com mais 1, tornando-se 2. Será então inicializado novamente o contador J em 1, permitindo que seja digitado um novo dado na posição NOTAS[2,1]. • O mecanismo de preenchimento será executado até que o contador de linhas atinja seu último valor, neste caso 8. Esse looping é o principal tendo a função de controlar o posicionamento na tabela por aluno. O segundo looping, mais interno, controla o posicionamento das notas. Entendendo melhor... algoritmo "Notas_Com_Matrizes_Duas_Dimensões" var NOTAS: vetor[1..8,1..4] de real I,J: inteiro inicio para I de 1 ate 8 faca para J de 1 ate 4 faca leia (NOTAS[I,J]) fimpara fimpara para I de 1 ate 8 faca escreva (“Aluno ", I, “ |”) para J de 1 ate 4 faca escreva (NOTAS[I,J], “ |”) fimpara escreval (“ ") escreval (“ ------------------") fimpara fimalgoritmo Exemplo Ler duas matrizes A e B, cada uma de duas dimensões com 5 linhas e 3 colunas (a leitura da segunda matriz só deve ser iniciada após a leitura completa da primeira matriz). Construir uma matriz C de mesma dimensão, que é formada pela soma dos elementos da matriz A com os elementos da matriz B e apresentar o resultado na tela seguindo a formatação a seguir: Matriz A - Linha 1 | Coluna 1 = 5 + Matriz B - Linha 1 | Coluna 1 = 4 -> SOMA = 9 • OBS: Utilize os dados a seguir para preencher as matrizes A e B. Exercício • Encontre o resultado para Matriz “C” Matriz A 1 2 3 1 3 2 7 2 4 5 1 3 7 6 7 Matriz C 4 1 3 1 1 2 3 5 3 1 2 1 2 Matriz B 3 1 2 3 4 1 2 8 1 5 2 3 5 2 3 3 4 3 4 5 7 1 5 6 9 2 Exercício • Resultado da Matriz “C” Matriz A 1 2 3 1 3 2 7 2 4 5 1 3 7 6 7 Matriz C 4 1 3 1 1 2 3 5 3 1 2 1 5 10 8 2 7 10 3 Matriz B 3 10 10 10 1 2 3 4 6 10 2 1 2 8 1 5 9 10 4 2 3 5 2 3 3 4 3 4 5 7 1 5 6 9 2 Resultado algoritmo "ABC_Com_Matrizes_Duas_Dimensões" var A,B,C: vetor[1..5,1..3] de real I,J: inteiro inicio para I de 1 ate 5 faca para J de 1 ate 3 faca leia (A[I,J]) fimpara fimpara para I de 1 ate 5 faca para J de 1 ate 3 faca leia (B[I,J]) C[I,J] <- A[I,J] + B[I,J] fimpara fimpara para I de 1 ate 5 faca para J de 1 ate 3 faca escreval ("Matriz A - Linha", I, " | Coluna", J, " =", A[I,J], " +", " Matriz B - Linha", I, " | Coluna", J, " =", B[I,J], " -> SOMA =", C[I,J]) fimpara escreval ("-------------------------------------------------------------------------------------") fimpara fimalgoritmo Algoritmo Registros • Já estudamos estrutura de dados de uma dimensão (Vetor) e duas dimensões (Matrizes). Observamos que somente era possível trabalhar com um tipo de dado. • No momento que for preciso trabalhar com dois tipos de dados diferentes, precisamos utilizar duas matrizes, sendo cada uma de um tipo. • Ex: Imagine um algoritmo para armazenar o nome e a nota do aluno. Para tanto deveríamos usar uma matriz NOME tipo CARACTERE e uma matriz NOTA tipo REAL. • Quando usamos registros podemos trabalhar com vários dados de tipos diferentes (os campos) em uma mesma estrutura. Portanto podemos chamá-los de tipos de dados heterogêneos. • Tomemos como base um exemplo onde pretendemos cadastrar 4 nomes e 4 notas dos alunos de uma faculdade. Sendo assim, o registro será formado pelos campos: Nome 1, Nota 1, Nome 2, Nota 2, Nome 3,Nota 3, Nome 4, Nota 4. • Observe a tela a seguir: Registros Nome Nota Nome Nota Nome Nota Nome Nota Cadastro 1 2 3 4 Criando um Registro Os tipos registro devem ser declarados antes das variáveis, porque pode ocorrer a necessidade de declarar uma variável com o tipo do registro definido. Para declarar um tipo registro, deve ser usada a instrução tipo mais a instrução registro..fimregistro. Observe a seguir: tipo <identificador> = registro <lista dos campos e seus tipos> fimregistro var <variaveis> : <identificador> Registros Criando um Registro Vamos definir um registro tomando como exemplo a criação do registro de alunos. tipo cad_aluno = registro NOME: caractere NOTA: real fimregistro var ALUNO : cad_aluno Registros Leitura do Registro A leitura de um registro é efetuada com a instrução leia seguida do nome da variável registro e seu campo correspondente separado por um caractere “.” (ponto). inicio leia (ALUNO.NOME) leia (ALUNO.NOTA) fimalgoritmo Registros algoritmo “ALUNO“ tipo CAD_ALUNO = registro NOME: caractere NOTA1: real NOTA2: real NOTA3: real NOTA4: real fimregistro var ALUNO : cad_aluno inicio leia (ALUNO.NOME) leia (ALUNO.NOTA1) leia (ALUNO.NOTA2) leia (ALUNO.NOTA3) leia (ALUNO.NOTA4) escreva (ALUNO.NOME) escreva (ALUNO.NOTA1) escreva(ALUNO.NOTA2) escreva (ALUNO.NOTA3) escreva (ALUNO.NOTA4) fimalgoritmo Registros Podemos definir uma matriz vetor (uma dimensão) ou array (mais de uma dimensão) dentro de um registro? Sim. Vamos observar como funciona essa definição seguindo o mesmo exemplo do registro de alunos. Considere que temos o campo NOME tipo caractere e mais quatro campos tipo real para o armazenamento de suas notas. Podemos otimizar definindo um vetor chamado NOTA com quatro índices, um para cada nota. Observe a mudança na tela a seguir: Estrutura de um Registro de Conjuntos Criando um Registro de Conjuntos Vamos definir um registro tomando como exemplo a criação do registro de alunos, cujas notas serão armazenadas em um vetor. tipo cad_aluno = registro NOME: caractere NOTA: bimestre fimregistro var ALUNO: vetor[1..4] de cad_aluno Estrutura de um Registro de Conjuntos algoritmo “ALUNO“ tipo cad_aluno = registro NOME: caractere NOTA: real fimregistro var ALUNO : vetor[1..4] de cad_aluno I,J: inteiro inicio para I de 1 ate 4 faca leia (ALUNO[I].NOME) leia(ALUNO[I].NOTA) fimpara para I de 1 ate 4 faca escreva (ALUNO[I].NOME) escreva (ALUNO[I].NOTA) fimpara fimalgoritmo Estrutura de um Registro de Conjuntos 1)Faça uso do algoritmo anterior e imprima na tela os alunos a identificação com a orientação abaixo: a) XXXXXXX -> Aluno aprovado <Nota igual ou maior que 7.00> b)XXXXXXXXX -> Aluno reprovado. <Nota menor que 7.00> 2)Crie um vetor que armazene apenas o nome dos alunos aprovados e imprima na tela. Exercício Procedimentos e Funções Procedimentos e Funções Para tornar a tarefa de programação mais fácil de ser resolvida, podemos utilizar módulos, ou seja, partes que podem ser alteradas sem que seja necessário mexer no programa principal. Podemos utilizar procedimentos, funções e parâmetros para tornar os algoritmos mais eficientes e possibilitar a reutilização de códigos. Procedimentos Um procedimento (procedure), também conhecido como sub-rotina, é um conjunto de instruções que realiza uma determinada tarefa. Um algoritmo de procedimento é criado da mesma maneira que outro algoritmo qualquer: Deve ser identificado, possui variáveis, operações e até funções. procedimento nome_do_procedimento (lista de parâmetros) var declaração dos objetos (objetos locais) inicio instruções do procedimento fimprocedimento Procedimentos algoritmo “MENU” var opcao: inteiro inicio leia (opcao) escolha opcao caso 1 ModAdicao caso 2 ModSubtr caso 3 ModMultip caso 4 ModDiv outrocaso escreva (“Fim de Programa”) fimescolha fimalgoritmo Procedimentos procedimento ModAdicao var v1, v2, res: real inicio leia (v1, v2) res v1 + v2 escreva (res) fimprocedimento procedimento ModSubtr var v1, v2, res: real inicio leia (v1, v2) res v1 - v2 escreva (res) fimprocedimento procedimento ModMultip var v1, v2, res: real inicio leia (v1, v2) res v1 * v2 escreva (res) fimprocedimento procedimento ModDiv var v1, v2, res: real inicio leia (v1, v2) res v1 / v2 escreva (res) fimprocedimento Escopo de Variáveis Os exemplos apresentados utilizam variáveis locais – variáveis que podem ser utilizadas somente no escopo do algoritmo/programa no qual foram declaradas. Para resolver o problema da redundância, existe a possibilidade de as variáveis serem declaradas globais. As variáveis globais são declaradas no algoritmo principal e podem ser utilizadas por todos os algoritmos hierarquicamente inferiores. Parâmetros Parâmetros são variáveis ou valores que podem ser transferidos do algoritmo principal para um módulo que está sendo chamado. Funcionam como comunicadores entre os módulos. Existem dois tipos de parâmetros: Formais; Reais. Parâmetros Formais São declarados nos módulos e tratados como as variáveis. algoritmo "MULTIPLICA" var n, m, res: real procedimento multiplica(a, b: real) inicio res <- (a * b) fimprocedimento inicio n <- 3 m <- 7 multiplica(n,m) escreva("A resposta é:", res) fimalgoritmo Parâmetros Reais São os valores que substituem os parâmetros formais. algoritmo "MULTIPLICAR" var res: real num1, num2: real procedimento multiplicar (a, b: real) inicio res <- (a * b) escreva("A resposta é:", res) fimprocedimento inicio leia (num1, num2) multiplicar (num1, num2) fimalgoritmo Passagem de Parâmetros A passagem de parâmetros ocorre por meio da correspondência argumento/parâmetro, em que os argumentos são valores constantes ou variáveis informados no módulo chamador; Os argumentos devem ser fornecidos na mesma ordem dos parâmetros; Os parâmetros podem ser passados por valor ou por referência. Passagem de Parâmetros Na passagem por valor, o valor do parâmetro real é copiado no parâmetro formal na chamada do módulo, e o parâmetro é de entrada; Na passagem por referência, toda alteração feita nos parâmetros formais refletem-se nos parâmetros reais, e o parâmetro é de entrada e saída. Procedimento sem Parâmetros algoritmo "PROCEDIMENTO_SEM_PARAMETROS" var aux, n, m, res: inteiro procedimento soma inicio // n, m e res são variáveis globais aux <- n + m res <- aux fimprocedimento inicio n <- 5 m <- 10 soma escreva("A resposta é:", res) fimalgoritmo Procedimento com Parâmetros algoritmo "PROCEDIMENTO_COM_PARAMETROS" var n, m, res: inteiro procedimento soma (x,y: inteiro) inicio // x e y são variáveis locais // res é variável global res <- x + y fimprocedimento inicio n <- 4 m <- 10 soma(n,m) escreva("A resposta é:", res) fimalgoritmo Funções As funções são criadas e chamadas da mesma maneira que os procedimentos. A diferença entre eles é que as funções podem ser utilizadas em expressões, como se fossem variáveis, pois as funções retornam valores associados ao seu nome e para esses valores se faz necessária a declaração do tipo de dado a ser retornado. função <nome_da_função> (lista de parâmetros): tipo_de_dado da função var declaração dos objetos pertencentes a esta função (objetos locais) inicio instruções da função retorne (variavel) fimfuncao Funções algoritmo “SOMA_SEM_PARAMETROS" var n, m, res: inteiro funcao soma: inteiro var aux: inteiro inicio // n, m e res são variáveis globais aux <- n + m retorne aux fimfuncao inicio n <- 4 m <- 12 res <- soma escreva("A resposta é:",res) fimalgoritmo Funções algoritmo "SOMA_COM_PARAMETROS_PASSADOS_POR_VALOR" var n, m, res: inteiro funcao soma (x,y: inteiro): inteiro inicio retorne x + y fimfuncao inicio n <- 4 m <- 12 res <- soma(n,m) escreva("A resposta é:",res) fimalgoritmo Arquivos Arquivos Um arquivo é um local reservado para guardar informações escritas. Um bom exemplo são os “arquivos de aço” utilizados para armazenar fichas contendo dados de clientes, produtos e pacientes, entre outros; O arquivo de computador é uma maneira de armazenar informações em memória secundária. Exemplos desses meios magnéticos: hard disk, discos flexíveis, CD-ROM, entre outros; Os arquivos podem armazenar imagens, textos, sons etc. Nome: ____________________ Endereço: _________________ Cep: ________ tel: __________ Nome Endereço Cep tel João Ninguém Rua do Bosque, 10 0800010 67867766 Maria Bonita Rua da Gruta, 247 0900990 31237788 José Mane Av. Sul, 3196 0798999 78966998 Interface Campos Registros Arquivo-texto Contém informações organizadas em registros; os registros, por sua vez, são organizados em campos, onde são“inseridas” as informações. OBS: O VisuAlg não aceita a declaração do tipo arquivo. Arquivos • O fato do arquivo ser armazenado em memória secundária o torna independente de qualquer algoritmo. Isto é, um arquivo pode ser criado, consultado, processado e eventualmente removido por algoritmos distintos. • Sendo o arquivo uma estrutura fora do ambiente do algoritmo, é necessário a operação de leitura e escrita do registro no arquivo. Tipos de Arquivos Arquivos Seqüenciais: Os arquivos sequenciais armazenam informações em formato ASCII na ordem em que foram digitadas. Alguns inconvenientes: – As informações são lidas na mesma ordem em que foram inseridas; – É necessário que o arquivo todo seja percorrido até que a informação desejada seja localizada; – As informações não podem ser alteradas diretamente no arquivo; é necessário copiar todas as informações, do arquivo anterior, já com as alterações; – Esse tipo de arquivo não é recomendado para trabalhos com grande volume de informações, pois é lento. Tipos de Arquivos Arquivos de Acesso Aleatório (ou Randômico): também usam o formato ASCII. Cada registro é armazenado em uma posição específica e pode ser recuperado sem a leitura das informações anteriores. Essa posição é referenciada por um campo chave. O campo chave de um registro não pode ter o conteúdo repetido; ele deve ser único no arquivo para que possibilite a identificação do registro. Por meio do campo chave, o registro pode ser localizado diretamente, sem que haja necessidade de se percorrerem todos os registros anteriores. O campo chave deve ser declarada juntamente com as demais variáveis que irão compor o registro. Operações de Manipulação de Arquivos As informações dos arquivos, por estarem armazenadas em um dispositivo físico, podem ser manipuladas, isto é, o arquivo pode ser atualizado ou simplesmente consultado. Quatro operações básicas podem ser realizadas: • Inserção de dados: trata-se da inclusão de novos registros; • Consulta aos dados: trata-se da leitura dos dados já armazenados; • Alteração de dados: trata-se da possibilidade de alteração de um ou mais campos do conjunto; • Exclusão de dados: trata-se da eliminação de registros. Operações de Manipulação de Arquivos Para que seja possível manipular arquivos seqüenciais, será necessário: – Declarar o registro e o arquivo; – Declarar as variáveis de arquivo e registro; – Abrir o arquivo; – Fechar o arquivo. Para declarar um arquivo seqüencial, deve-se usar a instrução tipo. É necessário declarar um identificador do arquivo, mencionando o tipo de arquivo que será utilizado. Observe a seguir no exemplo de uma agenda que armazena nome, endereço e telefone das pessoas. tipo reg_agenda = registro nome: caracter end: caracter tel: caracter fimregistro tipo arq_agenda: arquivo seqüencial de reg_agenda var auxiliar : reg_agenda agenda: arq_agenda Arquivo Seqüencial - Declaração Para que seja possível a manipulação do arquivo, esse deve ser aberto com a instrução abra: abra (agenda) Será disponibilizado o primeiro registro armazenado. Para acessar os próximos registros, utiliza-se a instrução avance: repita avance (agenda) até EOF (agenda) OBS: EOF significa “end of file” ou fim de arquivo. Arquivo Seqüencial - Declaração Para leitura é necessário que os campos sejam preenchidos na mesma ordem e com os mesmos nomes declarados no arquivo, utiliza-se a instrução leia: leia (auxiliar.nome, auxiliar.end, auxiliar.tel) Depois de representar o preenchimento dos campos, será necessário representar o armazenamento do conteúdo no arquivo, utiliza-se a instrução guarde: guarde (agenda, auxiliar) OBS: A variável de arquivo Agenda receberá o conteúdo da variável de registro Auxiliar. Por último, o arquivo deve ser fechado, utiliza-se a instrução feche: feche (agenda) Arquivo Seqüencial - Declaração algoritmo “INCLUSAO_AGENDA“ tipo reg_agenda = registro nome: caracter end: caracter tel: caracter fimregistro tipo arq_agenda: arquivo seqüencial de reg_agenda var auxiliar : reg_agenda agenda: arq_agenda Arquivo Seqüencial - Operação de Inclusão Inicio abra (agenda) repita avance (agenda) até EOF (agenda) leia (auxiliar.nome, auxiliar.end, auxiliar.tel) guarde (agenda, auxiliar) feche (agenda) fimalgoritmo Iremos utilizar uma variável que receberá a informação a ser encontrada no arquivo e, por meio de uma estrutura de repetição, é provocado o avanço pelos registros até que seja encontrado o registro desejado. Vejamos o exemplo a seguir utilizando uma variável chamada busca, que receberá o nome a ser consultado: Arquivo Seqüencial - Operação de Consulta algoritmo “CONSULTA_AGENDA“ tipo reg_agenda = registro nome: caracter end: caracter tel: caracter fimregistro tipo arq_agenda: arquivo seqüencial de reg_agenda var auxiliar : reg_agenda agenda: arq_agenda buscar: caractere Arquivo Seqüencial - Operação de Consulta Inicio abra (agenda) leia (buscar) repita avance (agenda) até (auxiliar.nome = buscar) ou (EOF (agenda)) se (auxiliar.nome = buscar) entao escreva (auxiliar.end, auxiliar.tel) senao escreva (“Nome não cadastrado”) fimse feche (agenda) fimalgoritmo algoritmo “ALTERACAO_AGENDA“ tipo reg_agenda = registro nome: caracter end: caracter tel: caracter fimregistro tipo arq_agenda: arquivo seqüencial de reg_agenda var auxiliar : reg_agenda agenda: arq_agenda buscar: caractere novo_end: caractere novo_tel: caractere Arquivo Seqüencial - Operação de Alteração Inicio abra (agenda) leia (buscar) copie (agenda, auxiliar) enquanto (auxiliar.nome <> buscar) e (nao EOF(agenda)) faca avance (agenda) copie (agenda, auxiliar) fimenquanto se (auxiliar.nome = buscar) entao escreva (auxiliar.end, auxiliar.tel) escreva (“Novo endereço: “) leia (novo_end) auxiliar.end := novo_end escreva (“Novo telefone: “) leia (novo_tel) auxiliar.tel :=- novo_tel guarde (agenda, auxiliar) senao escreva (“Nome não cadastrado”) fimse feche (agenda) fimalgoritmo algoritmo “EXCLUSAO_AGENDA“ tipo reg_agenda = registro nome: caracter end: caracter tel: caracter fimregistro tipo arq_agenda: arquivo seqüencial de reg_agenda var auxiliar : reg_agenda agenda: arq_agenda buscar: caractere resposta: caractere Arquivo Seqüencial - Operação de Exclusão Inicio abra (agenda) leia (buscar) repita copie (agenda, auxiliar) avance (agenda) ate (auxiliar.nome = buscar) ou (EOF(agenda)) se (auxiliar.nome = buscar) entao escreva (auxiliar.end, auxiliar.tel) escreva (“Deseja exluir? (Digite S ou N) “) leia (resposta) se (resposta = “S”) entao delete (agenda) fimse senao escreva (“Nome não cadastrado”) fimse feche (agenda) fimalgoritmo Livros da Biblioteca Referências • Apostila Curso Básico de Lógica de Programação. Paulo Sérgio de Morais. Unicamp – Centro de Computação. Acesso em 06/08/2017 http://www.inf.ufsc.br/~vania.bogorny/teaching/ine5231/Logica.pdf • Lógica de Programação: A Construção de Algoritmos e Estruturas de Dados. André Luiz Villar. 3º Ed. MAKRON, 1993. • Algoritmos e Programação para Computadores, Dilermando Piva Junior. CAMPUS, 2013.
Compartilhar