INTRODUÇÀO COMPUTAÇÀO
Transcrição
INTRODUÇÀO COMPUTAÇÀO
CURSO DE INTRODUÇÃO À COMPUTAÇÃO 2002 O X Template <class GS> void Stack<GS>::push( G O X O X X X C A B X X UTILIZADO NA UNIVERSIDADE FEDERAL DE SÃO CARLOS Roberto Ferrari CURSO DE INTRODUÇÃO À COMPUTAÇÃO ROBERTO FERRARI 2002 2 Edição do autor. Copyright 1999, 2002 Roberto Ferrari. Todos os direitos reservados. Publicação não destinada à exploração comercial. Direitos autorais reservados. Informações adicionais com o autor. [email protected] www.dc.ufscar.br/~ferrari/ Ferrari, Roberto. Curso de introdução à Computação/ Roberto Ferrari - Sâo Carlos, 2002. p. Inclui bibliografia. 1. Programação. I. Título 3 APRESENTAÇÃO Este Curso de Introdução à Computação contém um resumo das notas de aula, exercícios, trabalhos e provas de anos anteriores. Seu objetivo não é substituir o livro texto, mas mostrar aos alunos o curso que os aguarda, possibilitando um planejamento prévio do estudo e do aprendizado. 4 CONTEÚDO Módulo 1- Algoritmos e Programas 6 Módulo 2- Elementos Fundamentais 14 Módulo 3- Estruturas de Dados 28 Módulo 4- Modularização 36 Módulo 5- Arquivos 40 Especificação dos trabalhos do curso 45 Provas de Anos Anteriores 48 Referências Bibliográficas 50 5 Módulo 1: Algoritmos e Programas Objetivos de aprendizado neste módulo... • o conceito de algoritmo e de programa • técnica básica para desenvolvimento de algoritmos • a contextualização de algoritmos e programas em relação à tecnologia atual e aos objetivos profissionais dos alunos • executar um programa exemplo Texto base para este módulo: Farrer e outros, "Algoritmos Estruturados", cap. 0. 1- Evolução Tecnológica dos Computadores • • • manuais (ex. ábaco) mecânicos (ex. máquina de somar à manivela) eletrônica digital • válvulas e relés • transístores (semicondutores), Bell Labs., 1948 => menor, menos consumo de energia • circuitos integrados (semicondutores) => menor ainda => computador de uso pessoal 2- A Tecnologia Digital diferença: analógico X digital • dispositivo analógico: funciona por analogia, por comparação, por proporção. • ex.: termômetro (varia a temperatura, varia a dilatação do mercúrio, ou corrente elétrica) • ex.: válvula reguladora de pressão ou do escoamento de fluidos (varia a corrente enviada à válvula, varia a pressão ou escoamento de fluidos) • lida com grandezas contínuas • dispositivo digital: trabalha com as grandezas discretas e absolutas: "1"s, ligado e desligado, com corrente e sem corrente. "0"s e Bit (Binary Digit) Menor unidade de informação, que pode assumir um dentre dois estados: "0" ou "1". Byte Conjunto de 8 bits -- capaz de identificar um caractere do alfabeto . 0 bi 0 1 0 0 0 0 0 1 byte 6 Representação de números em decimal (base 10) e em binário (base 2) representação decimal 0 1 2 3 4 5 6 7 8 9 10 ... representação em binário 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 ... Conversão binário-decimal e decimal-binário binário --> decimal 1101 = (2 3 * 1) + (2 2 * 1) + (2 1 * 0) + ( 2 0 * 1) = 8 + 4 + 0 + 1 = 13 decimal --> binário 13 1 2 6 2 0 3 2 1 1 2 1 0 resposta = restos das divisões sucessivas por 2, na ordem inversa => 1101 Representação de caracteres (alfabéticos e outros) caractere A B C ... + 4 ... 0 1 2 ... representação em ASCII 01000001 01000010 01000011 ... 00101011 00100100 ... 00110000 00110001 00110010 ... Capacidades de representação 7 Variando o estado (0 ou 1) de cada bit de 1 byte, quantas combinações posso ter ? 28 = 256 8 • • • N (1 byte) 16 32 ... 2 N 256 65536 4,2 x 10 ... 9 1 Kbyte (Kilobyte) = 1024 Bytes 1Mbyte (Megabyte) = 1024 Kbytes 1 Gbyte (Gygabyte) = 1024 MBytes 3- Evolução dos Tecnológica dos Computadores - Continuação hardware capacidade custo aplicações • tendência inicial... mainframes, grande porte pequena $$$$$$$$$$$$$$$ científicas, grandes empresas com o tempo... microcomputadores cresceu muito $ escritório, casa, escola anos 80: microcomputadores, várias arquiteturas, nenhuma padrão • IBM abriu a arquitetura ( IBM PC) • terceirizou a fabricação do sistema operacional ao estudante Bill Gates • virou padrão, aumentaram os fabricantes, a concorrência, competitividade, abaixou o custo... Comparação • Mark I, 1944, 5 toneladas. • ENIAC 1946 19.000 válvulas, consumia grande energia, podia registrar um máximo de 20 números de até 10 dígitos. A programação era feita com com fios e pinos, como em um antigo painel de telefonista. • anos 80: XT 4,77 MHz, 20 Mbytes disco, 256 Kbytes RAM vídeo monocromático. • atualmente: Pentium 600 MHz, 64 Mbytes RAM, 6 Gbytes disco, CD, video SVGA color... 4- Conceitos Básicos sobre Programação de Computadores 1 computador: Máquina capaz de executar processos de acordo com regras precisamente definidas. • Existe um repertório finito de instruções elementares que o computador entende e é capaz de executar. • Os elementos desse repertório finito podem ser agrupados (ou programados) de modo a dar origem a um número infinito de combinações. Exemplos: • Música (composta pela combinação das 7 notas musicais) • Representação decimal de números reais (a partir de dígitos de 0 a 9) • Coreografia de um ballet clássico (a partir de um conjunto limitado de passos básicos). Programação (de computadores, de uma coreografia, etc.) É o ato de agrupar instruções em seqüências de forma que, quando seguidas, produzem um resultado esperado. 1 alguns conceitos e exemplos foram adaptados do texto experimental de Catto e outros, de data desconhecida 8 Ação Acontecimento de duração finita, com um efeito previsível e bem definido. • executada sobre um objeto. • interesse é pelo efeito da ação no objeto. • a ação leva o objeto de um estado inicial a um estado final. • a execução de uma ação é chamada de processo. • o agente que executa o processo é chamado de processador. exemplo: descascar uma banana • ação = descascar • objeto = banana • efeito = banana descascada contra-exemplos • viver (duração indeterminada) • disputar um jogo de azar (imprevisível) • esperar (não parece algo bem definido) Ações primitivas São ações que o processador é capaz de entender e executar (sobre objetos bem determinados). Algoritmo • (Abib) seqüência ordenada e sem ambiguidade de passos que levam à solução de um dado problema. • (Farrer) Descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações. • (Catto e outros) Definição de um padrão de comportamento em termos de um conjunto finito, bem conhecido e bem definido de ações primitivas, que se supõe possam ser executadas sobre objetos bem determinados, produzindo o efeito desejado. Linguagem de programação Um conjunto finito, conhecido e bem definido de ações primitivas. Programa (Abib) Um algoritmo escrito numa linguagem de programação qualquer (Pascal, C, C++ etc.). Técnica de desenvolvimento de algoritmos: refinamentos sucessivos • Descrever o conjunto de ações que, executadas, levam à obtenção de um efeito desejado. • Se uma ação não pertencer ao conjunto das ações primitivas ela deverá ser decomposta em ações mais simples e específicas, e assim sucessivamente até que todas as ações pertençam ao conjunto de ações primitivas. Problema 1: ensinar robô a fazer um bolo "Bata no liquidificador 2 cenouras, 4 ovos e 1 chícara de óleo. Já na batedeira, adicione fermento e açucar a gosto. Leve ao forno como um bolo normal" Identificar ambiguidades, indefinições e efeitos não previsíveis... 1º refinamento 1. bata no liquidificador 2 cenouras, 4 ovos e 1 chícara de óleo por 2 minutos. 2. colocar na batedeira e acrescentar um tablete de fermento e 1 chícara de açucar, bata por 3 minutos. 9 3. leve ao forno por 1 hora. Identificar indefinições... Refinamento do passo1 1. pegar o liquidificador 2. inserir 2 cenouras 3. inserir 4 ovos 4. inserir 1 chícara de óleo 5. ligar o liquidificador 6. esperar por 2 menutos 7. desligar o liquidificador Identificar indefinições... Refinamento do passo 1.1 1. ir até o armário 2. abrir a porta do armário 3. estender as mãos até o liquidificador 4. segurá-lo 5. ir até a mesa 6. posicionar o liquidificador sobre a mesa 7. soltá-lo e assim por diante... até que todas as ações possam ser compreendidas pelo robô. Problema 2 (introdução ao conceito de variáveis, em um programa) : "programar o robô, de modo que este aprenda a fazer o tal bolo em diferentes quantidades para 3 pessoas, para 10, etc. solução: Seja X o nº de cenouras, Y o nº de ovos, e Z o nº de chícaras de óleo. Descrever o algoritmo em função de X, Y e Z. Definir X, Y e Z no momento da execução do processo. Problema 3 (introdução ao conceito de tipos de dados e de linguagem de programação): Sejam conhecidos os seguintes tipos, ações e regras: • • tipo coisa = sacola, panela, liquidificador, batedeira tipo fruta = banana, mamão, laranja, maçã, goiaba ação pegar descascar guardar válida sobre objetos do tipo... coisa, fruta fruta coisa, fruta Exemplos de ações (verificar se são válidas): • pegar panela • descascar banana • descascar sacola (não) • descascar pera (não) • etc. Linguagems de programação - exemplos • Pascal • C • C++ S N Fluxograma (flowchart) 10 • • Uma outra forma de descrever algoritmos. Mostra o "fluxo" (seqüência) de ações, e seus relacionamentos com os objetos que estão sendo processados 5- Hardware, Software, Aplicativos, Compiladores, Linguagens Contextualizando o conceito de algoritmos e programas na tecnologia atual ... • • • IBM PC MAC Sun Sparc Station AS 400 • • • • • • • C++ Pascal Java • • • • • • • • • • • Borland C++ Turbo Pascal Delphi • • • • • • • • • • • • sistema para clínicas médicas folha de pagamentos contabilidade SAP • • • • netscape director video maker bug do ano 2000 virus hacker windows 98 windows NT Unix MacOS • • • RAM disco rígido CD ROM scanner access oracle sybase informix hardware sistema operacional software Linguagens de programação: conjunto de ações primitivas e regras de sintaxe. Exemplos: pascal, C, C++ Compiladores e geradores de aplicações ou geradores de programas: programas que traduzem instruções de uma linguagem mais acessível ao homem (mais fácil) em uma linguagem compreendida pela máquina. Ex.: Turbo Pascal, Borland C++... Hardware: máquina Software: programas Sistema Operacional: programa usado para controlar funções básicas da máquina como gerenciamento do sistema de arquivos, gerenciamento da memória, etc. Exemplos: Windows, Unix, MacOS 11 • • • • Memória RAM: memória temporária (as informações se perdem assim que o equipamento é desligado) Disco rígido, CD ROM, Floppy disc: armazenam informações mesmo após desligar o equipamento. Dispositivos de entrada de informações: teclado, mouse, scanner... Dispositivos de saída: vídeo, auto-falante, impressora... 6- Exemplo de um Programa program Exemplo; uses crt; var a,b, soma:integer; begin clrscr; write('a= '); readln(a); write('b= '); readln(b); soma := a + b; writeln( a, ' + ', b, ' = ', soma ); writeln( 'pressione enter para continuar'); readln end. d b l 0 7- Atividade Extra-Classe: Executar e Alterar um Programa O objetivo da atividade é "quebrar o gelo", ou seja, ter um primeiro contato com programação (aos alunos que ainda não tiveram), com a linguagem e com o compilador que serão utilizados neste curso. Roteiro 1. Vá até o laboratório e, tendo dificuldades, peça ajuda ao monitor. 2. Execute o programa Turbo Pascal. 3. Acione a opção File/New para criar um novo arquivo, digite (como em um editor de texto) o programa dado como exemplo. 4. Acione a opção Run para executar o programa. 5. Altere o programa, segundo seus próprios critérios, e execute novamente. 6. Execute outros programas-exemplo, eventualmente existentes no laboratório. 7. Consulte o "help" do turbo pascal e procure se familiarizar com o ambiente de trabalho. Aqueles que pretendem estudar em seu próprio computador podem adquirir e instalar uma versão completa do Turbo Pascal ou, alternativamente, copiar uma versão compacta do laboratório, que só poderá ser utilizada para fins de aprendizado e desenvolvimento de pesquisas. 8- Temas para Debate: • • • Quais podem ser as aplicações da informática na sua futura profissão? Que conhecimentos de informática você precisa ter para manter a competitividade profissional? Que contribuições este curso pode trazer para a sua formação? 9- Exercícios de Fixação 1. O computador que você usa é dito ´digital´. O que é um dispositivo digital? Qual a diferença entre um dispositivo digital e um dispositivo analógico? 2. Qual a representação em binário dos decimais 7, 12 e 1240? 3. Qual a representação decimal dos binários 11001 e 10111 ? 12 4. Quantos caracteres distintos seria possível representar com apenas 4 bits? 5. O que significa 64 MBytes de memória? 6. Qual a diferença entre armazenar uma informação na memória RAM e armazenar uma informação no disco rígido? 7. Que é um algoritmo? 8. Que é um programa de computador? 9. Qual a técnica básica para desenvolvimento de algoritmos? 10. No contexto de programação, para que serve um fluxograma? 11. Qual a diferença entre linguagem de programação e compilador? 10- Leituras Recomendadas • • sobre o módulo 1, leia o Capítulo 0 do livro de Farrer e outros, Estruturados". "Algoritmos sobre o módulo 2, como preparação para a próxima aula, leia o Capítulo 1 de ambos os livros de Farrer e outros, entitulados "Ítens Fundamentais". 13 Módulo 2: Elementos Fundamentais Objetivos de aprendizado neste módulo... • apresentar ao estudante os elementos básicos de um programa: variáveis, tipos, estruturas de controle, entrada e saída, etc. • praticar o desenvolvimento de algoritmos com a utilização de tais elementos Texto base para este módulo • • Farrer e outros, "Algoritmos Estruturados", cap. 1. Farrer e outros, "Pascal Estruturado", cap. 1. Tópicos 1. Constantes, variáveis e tipos • Identificadores • Tipos de dados • Declaração de variáveis • Declaração de constantes • Declaração de tipos 2. Comentários 3. Comandos de atribuição, entrada e saída • Atribuição • Comandos de entrada • Comandos de saída 4. Expressões • Expressões aritméticas • Expressões lógicas 5. Estruturas básicas de controle • Estrutura seqüencial • Estrutura condicional • Estrutura de repetição 1- Constantes, variáveis e tipos Conceito de variável 2 => 4X + 3X + 9 => constantes: 4, 3, 9 X 2 Y 4 X Y contém vinho contém água 14 => variáveis: X Variáveis podem assumir diversos valores. .. • em uma equação aritmética, X pode assumir diversos valores. • uma variável pode ser comparada a um copo que pode receber água ou vinho (ou outro líquido), ou ainda a uma caixinha que pode abrigar diferentes objetos. • exemplo de utilização em um programa: X pode representar o número de colheres de fermento em um bolo, Y o número de ovos e Z o nº de bananas. 1.1- Identificadores Variáveis são identificadas por nomes, ou identificadores. Nos exemplos acima, X é um identificador. Em • • • • • • Pascal os identificadores podem ser formados basicamente por... uma combinação de letras a-z, A-Z e números 0-9 não pode começar com número não pode usar uma palavra reservada do Pascal (como read, write, program..) Turbo Pascal permite a utilização do caractere especial ´_´ (underscore) nenhum outro caractere ( +, -, *, &, $ etc..) pode ser utilizado em um identificador, Pascal não faz diferença entre letras maiúsculas e minúsculas. Exemplos de identificadores válidos • Aluno • X • A34 • NotaDoAluno Exemplos de identificadores não válidos • 23 • Nota do Aluno • 1treco 1.2- Tipos de Dados Recordação • tipo coisa = sacola, panela, liquidificador, batedeira • tipo fruta = banana, mamão, laranja, maçã, goiaba ação pegar descascar guardar válida sobre objetos do tipo... coisa, fruta fruta coisa, fruta O que é um tipo? Um tipo define um padrão de comportamento para constantes e variáveis. Por exemplo, objetos do tipo fruta podem ser descascados, objetos do tipo coisa não. 15 Principais tipos pré-definidos no Pascal tipo descrição Integer Real Char String[size] Boolean valores inteiros valores reais um caractere cadeia de caracteres valores lógicos faixa -32.768 a +32.767 (2 bytes) +/- 10 38 (4 bytes) qualquer caractere qualquer cadeia que caiba no tamanho definido True, False exemplos de constantes desse tipo • 01, 12, -15, 6.678 • 2.43, -5.678, 1x10 6, etc • A, C, 8, &, *, , -, etc • String[3] = ‘ABC´, ´6T$´, ‘o´, .. • String[5] = ´a´, ´´, ´pares´, .. • True, False Cada variável é definida como sendo de um tipo específico, e pode assumir somente valores válidos a esse tipo. • se X é do tipo Integer, pode assumir valores inteiros: 2, 15, 5555, -4, etc. • se X é do tipo Boolean, pode assumir os valores True ou False • etc. 1.3- Declaração de variáveis Podemos definir variáveis através da seguinte declaração: Var lista de identificadores : tipo ; Exemplos: • Var X : Integer; • Var Y, Z : Real; • Var Disciplina : String[10]; • Var Turma : Char; • Var Status : Boolean; 1.4- Declaração de constantes É possível definir novas constantes através da seguinte declaração Const identificador : valor ; Exemplos: • Const NumerodeBananas = 10; • Const Pi = 3,1416; • Const Status = False; • Const Tamanho = 30; • Const Nome = ´Jose da Silva´; • Const Turma = ´C´; 1.5- Declaração de tipos É possível acrescentar novos tipos de dados (como tipo fruta, tipo coisa etc.) ao conjunto de tipos conhecidos do Pascal (Integer, Real etc.). Esse tema será tratado posteriormente. 2- Comentários Podemos inserir comentários em um programa, sob a forma de texto, sem que isso interfira em sua lógica. O objetivo dos comentários é proporcionar maior clareza ao programa. Comentários podem ser expressos da seguinte forma. { texto } 16 ou ainda (* texto *) Exemplos: • Var NomeDoIndividuo : String[ 20 ] ; { armazena o nome do indivíduo } • Var EstadoCivil : Boolean; { True significa casado, False solteiro } 3- Comandos de atribuição, entrada e saída 3.1- Comando de atribuição É possível atribuir um valor qualquer a uma variável. • valor atribuído pode ser um valor constante, o valor de uma variável ou ainda o valor de uma expressão. • valor atribuído precisa ser compatível com o tipo da variável. O comando de atribuição é expresso da seguinte forma: identificador := expressão ; onde a expressão pode simplesmente ser uma constante ou variável. Exemplos: Var X : Integer; Var Y, Z : Real; Var Disciplina : String[10]; Var Turma : Char; Var Status : Boolean; {casos válidos } X := 5; X := X + 1; Y := Z; Z := Y + 5 + X; Turma := ‘B’; Status := True; Disciplina := ‘Química I’; X 2 Y 4,5 Z { Casos não válidos… } X := Y; Z + Y := 5; 5 := X; 3.2- Comandos de entrada Entrada de dados, ou ainda leitura de dados, seria análogo a atribuir a uma variável um valor obtido externamente. O exemplo mais natural para leitura de dados é pedir ao usuário fornecer valores via teclado. Mas pode-se também ler dados de arquivos, ou ainda de outros dispositivos de entrada. Considerando-se a entrada de dados via teclado, os comandos seriam: Read ( identificador ); ou ainda 17 Readln ( identificador ) ; Observações: • A diferença entre ambos é que o Readln considera que a próxima leitura, se houver, será realizada na linha seguinte. • Não é possível ler variáveis do tipo Boolean. • Na verdade é possível usar um único comando Read ou Readln para ler uma lista de identificadores. Exemplos: { considere as seguintes variáveis… } Var X : Integer; Var Y, Z : Real; Var Disciplina : String[10]; Var Turma : Char; Var Status : Boolean; { casos válidos } Read ( X ); Read ( Y ); Readln ( Z ); Readln ( Disciplina ); Read ( Turma ); Readln( X, Y, Z ); { casos não válidos } Read ( Status ); Read( 55 ); 3.3- Comandos de saída A saída de dados significa mostrar tais dados em um dispositivo de saída, como vídeo, impressora ou arquivo. A forma mais simples de saída de dados ocorre quando se escreve valores de variáveis, constantes ou expressões no vídeo. Considerando-se a saída de dados no vídeo, os comandos seriam: Write ( lista de identificadores, constantes ou expressões ); ou ainda Writeln (lista de identificadores, constantes ou expressões) ; Observações: • A diferença entre ambos é que o Writeln escreve a lista de valores e considera que a próxima operação de escrita, se houver, será realizada na linha seguinte. Exemplos: { considere as seguintes variáveis… } Var X : Integer; Var Y, Z : Real; Var Disciplina : String[10]; Var Turma : Char; Var Status : Boolean; 18 { casos válidos } Write ( X ); Write ( ‘O valor de X é:’, X ); Writeln ( ‘pressione uma tecla para continuar’ ); Writeln ( ‘A soma de ‘, Y, ‘ com ‘, Z, ‘ resulta em ‘, Y + Z ); Writeln ( Disciplina, ‘- ‘, Turma ); { casos não válidos } Writeln ( O valor de X é… X ); Writeln ( X Y Z ); Writeln ( X, Y, Z ); { válido porém os espaços não aparecem } Formatação de saída Opcionalmente, os comandos de saída podem ser expressos da seguinte forma: Write ( p1, p2, p3… pn ); ou ainda Writeln ( p1, p2, p3… pn ) ; Cada parâmetro pi sendo expresso em uma das 3 formas abaixo… • e • e:e1 • e:e1:e2 Onde • e é uma expressão (que pode ser simplesmente uma constante ou variável). • e1 é um valor inteiro positivo que indica o número de caracteres que será utilizado na escrita de e. • e2 é um inteiro positivo que determina o número de casas decimais que devem ser utilizadas na escrita de e (que, neste caso, só pode ser do tipo Real). Exemplos: Var X : Integer; Var Y, Z : Real; Var Disciplina : String[10]; Var Turma : Char; { casos válidos } Write ( X:1 ); { se X vale 5, a saída será: 5 } Write ( X:4 ); { se X vale 5, a saída será: 5 } Writeln ( Y:6:2, Z:6:2 ); { 6 caracteres, 2 casas decimais } Writeln ( Disciplina:10, ‘- ‘, Turma:4 ); { casos não válidos } Writeln ( X:5:2 ); 4- Expressões conceitos A+B Seno ( X ) A<B • • • • A e B são operandos + é o operador Seno é uma função < é uma relação 19 4.1- Expressões aritméticas Operadores • *, /, DIV, MOD • +, - { maior prioridade } Observações • DIV = divisão inteira e MOD = resto da divisão inteira. • A prioridade pode ser alterado com o uso de ( e ). Funções Ln( x ) Exp( x ) Abs( x ) Trunc( x ) Round( x ) Sqr( x ) Sqrt( x ) Sin( x ) Cos( x ) Arctan( x ) Logaritmo neperiano Número e elevado a x Valor absoluto Pega a parte inteira Arredonda Quadrado de x Raiz quadrada de x Seno de x Co-seno Arco tangente real Real Integer ou real Integer Integer Real ou integer Real Real Real Real Exemplos: • 11 DIV 4 • 11 MOD 4 • 2 * X + 10 • (A + B) * C • X / N + Sqr ( Z ) 4.2- Expressões lógicas Relações • =, <>, <=, >=, <, > Operadores • AND, OR, NOT Expressões lógicas podem envolver expressões aritméticas. Neste caso, a prioridade de execução obedece a seguinte tabela: Prioridade 1a 2a 3a 4a Operadores NOT *, /, DIV, MOD, AND +, -, OR =, <>, <, <=, >=, > Exemplos: • A<B • A=B • A=0 • 2=6 • D <> 6 • (A = 1) AND ( (B + C <> 0) OR (K <=2) ) • NOT ( (total >= 5) AND (A <> B) ) OR Teste 20 5- Estruturas básicas de controle Estruturas de controle: • Controlam a (ordem, seqüência… de) execução de um programa Estruturas básicas • Estrutura seqüencial • Estrutura condicional • Estrutura repetitiva 5.1- Estrutura seqüencial Os comandos de um programa são executados na seqüência em que aparecem. Um programa Pascal segue a sintaxe definida abaixo. Program identificador; Declarações Begin Comandos End. Exemplo de um programa Pascal program Exemplo1; { faz a soma de dois inteiros } uses crt; { crt = “biblioteca” de funções. Na prática, acrescenta novos comandos ao elenco de comandos do Pascal } var a,b,soma:integer; { declara as variáveis a, b e soma } begin clrscr; { limpa a tela, comando da biblioteca crt } write('a= '); readln(a); write('b= '); readln(b); soma := a + b; { soma recebe o valor de A + B } writeln( a, ' + ', b, ' = ', soma ); writeln( 'pressione enter para continuar'); readln end. 5.2- Estrutura condicional A estrutura condicional simples é expressa da forma: If condição Then comando ; Neste caso, o comando só seria executado se a condição for verdadeira. A estrutura condicional composta é expressa da forma abaixo: 21 If condição Then comando1 Else comando2; Se a condição for verdadeira, o comando1 é executado. Caso contrário será executado o comando2. Exemplos: If A > B Then C := A; If A < B Then C := A Else C := B; If C <> 0 Then C := C + 1 Else If A > C Then C := A; Agrupamento de comandos É possível agrupar comandos em blocos da forma abaixo: Begin Comando 1 Comando 2 … comando n End; Além de agrupar comandos, Begin e End podem funcionar como uma espécie de parêntesis, alterando o controle da execução do programa ou ainda resolvendo ambiguidades. Exemplos: If C <> 0 Then Begin B := C; Read( C ); G := Sqr( C ); Writeln( B, C, G ); End Else If A > C Then C := A; If C <> 0 Then Begin If A > B Then C := A Else C := B; End; Definição: Identação Significa alinhar os comandos de forma a facilitar a visualização do programa, como nos exemplos acima. Exercícios para fazer durante a aula Resolva as questões abaixo com a técnica de refinamentos sucessivos. Refine até chegar a um programa Pascal. 1. Ler três valores inteiros e determinar o menor deles. 22 2. Ler dois valores A e B, troque os valores e escreva A e B. 3. Ler o preço de venda de um produto, o seu preço de custo. Calcular o imposto a ser pago (30% sobre o lucro). 4. Ler cinco valores inteiros e escrever os dois maiores. 5. Ler três valores reais e escrevê-los em ordem crescente. 6. Faça um programa chamado ‘Calculadora’, onde o usuário fornece dois valores e o operador ( um dentre +, -, * e /), e o programa faz a conta. Atividades extra classe • Já é possível fazer o primeiro trabalho • Já é possível fazer vários dos exercícios propostos no capítulo 1 do Farrer. • Ler sobre estruturas de repetição Resolução dos exercícios de aula Exercício 1: Ler três valores inteiros e determinar o menor deles. Algoritmo Program EscolheMenor; 1. declare 3 inteiros A, B e C e um 4 inteiro Menor Var A, B, C, Menor : Integer; 2. Leia A, B e C Begin Write( ‘forneça A’); Readln( A ); Write( ‘forneça B’); Readln( B ); Write( ‘forneça C’); Readln( C ); 3. Menor ! A Menor := A; 4. Se C < Menor If C < Menor Então Menor! C Then Menor := C; 5. Se B < Menor If B < Menor Então Menor ! B Then Menor := B; 6. Escreva o Menor Writeln ( ‘O menor valor é: ‘, Menor ); End. Exercício 2: Ler dois valores A e B, troque os valores e escreva A e B. " para trocar o valor de duas variáveis é preciso usar uma terceira variável como auxiliar. Algoritmo 1. declare inteiros A, B e auxiliar 2. Leia A e B 3. Salve o valor de A em Auxiliar 4. Passe o valor de B para A 5. Passe o valor de Auxiliar para B 6. Escreva os valores A e B Program Troca; Var A, B, Auxiliar : Integer; Begin Write( ‘forneça A’); Readln( A ); Write( ‘forneça B’); Readln( B ); Auxiliar := A; A := B; B := Auxiliar; Writeln ( ‘Novo A =’, A:6, ‘Novo B = ‘, B:6 ); End. Exercício 3: Ler o preço de venda de um produto e o seu preço de custo. Calcular o imposto a ser pago (30% sobre o lucro). Algoritmo Program Leao; 1. declare PrecoVenda, Custo, Lucro, Imposto Var PrecoVenda, Custo, Lucro, Imposto : Real; 2. Leia PrecoVenda e Custo Begin Write( ‘forneça o Preco de Venda’); Readln( PrecoVenda ); Write( ‘forneça o custo’); Readln( Custo ); 3. Calcule Lucro = PrecoVenda - Custo Lucro := PrecoVenda – Custo; 4. Calcule Imposto = Lucro x 30% Imposto = Lucro * 0,3; 5. Escreva o imposto a ser pago Writeln ( ‘O imposto a ser pago = ‘, Imposto:10:2 ); End. 23 Exercício 4: Ler cinco valores inteiros e escrever os dois maiores. " Vamos usar duas variáveis auxiliares, Maior1 e Maior2, para indicar o primeiro e o segundo maior. " Maoir1 e Maior2 começam com os valores de A e B ( ou B e A, o que for apropriado). " Vamos passar pelos 3 valores restantes primeiramente verificando se eles são maiores que o segundo maior. Se forem, o Maoir2 deve ser atualizado. A seguir verificamos se o Maior2 é maior que o Maior1. Se for, devemos trocar os valores. Algoritmo 1. declare A, B, C, D, E, Maior1, Maior2 2. Leia os 5 valores 3. Escolhe o maior entre A e B e atribui a Maoir1, o outro valor vai para Maior2 4. Verifique se C é maior que Maior2, se for, Atualiza maior2 com C. Se Atualizou, verifique se Maior2 é maior que Maior1: se for, troque. Obs.: repetir o processo para D e E 5. Escreva os 2 maiores Program DoisMaiores; Var A, B, C, D, E, Maior1, Maior2 : Real; Begin Write( ‘forneça A: ’); Readln( A ); { idem para B, C, D e E } If A > B Then Begin Maior1 := A; Maior2 := B; End Else Begin Maior1 := B; Maior2 := A; End; If C > Maior2 Then Begin Maior2 := C; If Maior2 > Maior1 Then { troca, ver exercício 2 } End; { idem para D e E } Writeln ( ‘O maoir é:‘, Maior1:8:2, ‘e o 2o maior é: ‘, Maior:8:2 ); End. Exercício 5: Ler três valores reais e escrevê-los em ordem crescente. " uma das maneiras de resolver este problema é através de expressões lógicas. Algoritmo 1- declare a, b, c 2- leia a, b, c 3- se A >= B e A >= C então se B >= C então escreva A, B, C senão escreva A, C, B 4- senão se B >= A e B >= C então se A >= C então escreva B, A, C senão escreva B, C, A senão se A >= B então escreva C, A, B 24 senão escreva C, B, A Exercício 6: Faça um programa chamado ‘Calculadora’, onde o usuário fornece dois valores e o operador ( um dentre +, -, * e /), e o programa faz a conta. " o principal desafio deste exercício é a escolha do operador que será utilizado. Para isso, podemos usar um conjunto de ‘if’s aninhados. Algoritmo 1- declare A, B inteiros, Resultado Real e Operador tipo caractere 2- leia A, B e Operador 3- de acordo com o operador lido, execute A + B, A – B, A * B ou A / B. Atualiza Resultado 4- escreva o resultado Refinamento 3 Se Operador = ‘+ Éntão Resultado ! A + B Senão Se Operador = ‘Éntão resultado ! A – B Senão se Operador = ‘* Éntão Resultado ! A * B Senão se Operador = ‘/’ e B <> 0 Éntão resultado ! A / B Senão resultado ! 0 Refinamento 4 Writeln( A:5, Operador:3, B:5, ‘= ‘, Resultado:7:2 ); 5.3- Estrutura repetitiva A estrutura repetitiva permite que uma seqüência de comandos sejam executados um número determinado de vezes, ou até que uma condição seja (ou deixe de ser) satisfeita. A estrutura repetitiva pode ser expressa de 3 maneiras: " comando For, " comando Repeat e " comando While. For identificador := valor1 To/Downto valor2 Do comando ; { escolher entre To e Downto } { ou bloco de comandos, usando Begin e End } " Note que o comnando For executa um número determinado de vezes, dependendo apenas de valor1 e valor2. Exemplo: fatorial de N (inteiro maior que 1) Readln( N ); Fat := 1; For I := N downto 1 do Fat := Fat * I; Writeln( ‘O fatorial de ‘, N:5, ‘ é ‘, Fat : 5 ); Repeat Comando1 25 Comando2 … Comandon Until condição; { não precisa usar Begin e End para delimitar o bloco de comandos } " Note que o comando Repeat executa Comando1, Comando2 etc. pelo menos uma vez, pois a condição de parada é no fim. " Note também que se a condição de parada nunca ocorrer, o comando nunca será encerrado. Diz-se que o programa entra em “loop”. " Ao contrario do For, o número de repetições pode não ser determinado Exemplo: ler uma lista de valores (e fazer alguma coisa com eles) até encontrar um valor inválido. Total := 0; NroElementos := 0; Writeln(‘Digite os elementos. Querendo acabar, digite 99999’); Repeat Readln( Elemento ); If Elemento <> 99999 Then Begin NroElementos := NroElementos + 1; Total := Total + Elemento; End; Until Elemento = 99999; Media := Total / NroElementos; Writeln (‘ A média dos ‘, NroElementos:4, ‘ que você digitou é ‘, Media:7:2 ); While Condição Do Comando; { ou bloco de comandos, usando begin e end } " A diferença entre o While e o Repeat é que no While a condição de parada é no início. Assim, pode ser que o Comando não seja executada nem uma vez. Exemplo: ler uma lista de valores (e fazer alguma coisa com eles) até encontrar um valor inválido. Total := 0; NroElementos := 0; Writeln(‘Digite os elementos. Querendo acabar, digite 99999’); Readln( Elemento ); While Elemento <> 99999 Do Begin NroElementos := NroElementos + 1; Total := Total + Elemento; Readln( Elemento ); End; Media := Total / NroElementos; Writeln (‘ A média dos ‘, NroElementos:4, ‘ que você digitou é ‘, Media:7:2 ); Exercícios para fazer durante a aula (continuação) " Resolva as questões abaixo com a técnica de refinamentos sucessivos. Pense na solução do problema, descreva e refine até chegar a um programa Pascal. 7. Ler uma taxa de juro Taxa (tipo 1,3% ao mes) e calcular o valor final de um valor aplicado Valor após Meses meses. 8. Calcule o fatorial de N com While e com Repeat (com For já fizemos) 9. Uma pesquisa sobre dados da população anotou o sexo, a cor dos cabelos e a idade das pessoas. Leia um conjunto de valores (sexo, idade, cor do cabelo) e determine: 26 • a maior idade • percentual de homens e mulheres • quanto porcento das mulheres são loiras 10. Fazer um programa que ofereça opções ao usuário (exemplo da calculadora: soma, subtração, multiplicação e divisão, e sair do programa). O usuário escolhe. Se a opção for válida, executa; se for inválida da uma mensagem de erro ao usuário. Fica oferecendo ao usuário e (eventualmente) executando até que este escolha a opção para sair do programa. 11. Faça um programa para calcular as contas de água de uma cidade. O valor da conta para consumo até 500 mil litros é 0.04 * consumo (em mil litros). O valor da conta para consumo maior que 500 mil litros é 0.06 * consumo (em mil litros). Os dados serão lidos da forma abaixo. Rua São Sebastião • Nro da casa, consumo • Nro da casa, consumo • Nro da casa, consumo Rua Celso Junqueira • Nro da casa, consumo • Nro da casa, consumo • Nro da casa, consumo Etc. Exercícios de Fixação: já dá para fazer todos os do capítulo 1 do Farrer. 27 Módulo 3: Estruturas de Dados Objetivos de aprendizado neste módulo... • apresentar ao estudante os conceitos de variáveis compostas homogêneas (vetores, matrizes) e heterogêneas (registros) • praticar o desenvolvimento de algoritmos com a utilização de tais conceitos Texto base para este módulo • • Farrer e outros, "Algoritmos Estruturados", seções 2.1, 2.2 e 2.3. Farrer e outros, "Pascal Estruturado", seções 2.1, 2.2 e 2.3. Tópicos 1. 2. 3. 4. 5. conceito de variáveis estruturadas (variáveis compostas) variáveis compostas homogêneas unidimensionais - vetores variáveis compostas homogêneas bidimensionais - matrizes variáveis compostas homogêneas multidimensionais variáveis compostas heterogêneas - registros 1- conceito de variáveis estruturadas (variáveis compostas) Variável estruturada (ou composta): conjunto de dados referenciável por um mesmo identificador. 60 50 70 12 -1 0 0 2 8 51 10 Vetor V 31 77 2 14 -6 2 5 90 0 Matriz M Nome Roberto Nº 6345-2 P1 9 P2 10 Sub -- média 9.5 Registro R 28 Variáveis compostas podem ser • Homogêneas = todos os elementos do conjunto são do mesmo tipo • Unidimensionais = vetores • Bidimensionais = matrizes • … • multidimensionais = N dimensões • Heterogêneas (registros) = os elementos do conjunto são de tipos diferentes 2- Variáveis compostas homogêneas unidimensionais - vetores 60 50 70 12 -1 0 0 10 Vetor V Declaração: Var identificador : Array [Li..Lf] of tipo ; Onde: • Li = limite inferior (valor inteiro) • Lf = limite superior (valor inteiro) Exemplos: • Var Vetor : Array [ 1 .. 8 ] of Integer; Vetor 60 50 70 12 -1 0 0 10 1 2 3 4 5 6 7 8 • Var Vet1 : Array [ 1 .. 19 ] of Char; Vet1 A 1 • D G H + - L N * R Y U I O $ P 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 U Y 18 19 Var Vet2 : Array [ 20 .. 25 ] of String [ 5 ] ; Vet2 XICO 20 Ratos ASDFG 21 22 23 TT #$%¨* 24 25 29 Referência a todo o vetor • Atribuição de um vetor para o outro Exemplo • V1 := V2; { V1 do mesmo tipo que V2, todos os valores de V1 recebem seus equivalentes em V2 } Referência a um único elemento do vetor • Atribuição • Leitura • Uso em expressões Exemplos: • V1 [ 5 ] := 2; • V1 [ 5 ] := V1 [ 2 ] + 30; • V1 [ I + 1 ] := V1 [ I ]; • Read ( V1 [ 1 ] ); • Write ( V1 [ I ] ); • For I := 1 to N do Read ( V1 [ I ] ) ; { sendo ´V1´ um vetor de inteiros } Exemplo de uso: fazer um programa para ler 50 valores, armazená-los em um vetor, calcular e escrever a média dos valores. Algoritmo 1- declare variáveis Soma, Média, Vetor, I 2- leia os elementos, armazenando-os no vetor 3- calcule a média 4- escreva a média Refinamento 2: leia os elementos For I := 1 to 50 do Begin Write( ´ Entre o valor para Vetor [ ´, I , ´ ] ` ); Readln ( Vetor [ I ] ); End; Refinamento 3: calcule a média Soma := 0; For I := 1 to 50 do Soma := Soma + Vetor [ I ]; Media := Soma / 50; Programa Program Calcula_Media; Var I : integer; Soma, Media : Real; Vetor : Array [ 1 .. 50 ] of Integer; Begin { 2- leitura dos elementos } For I := 1 to 50 do Begin Write( ´ Entre o valor para Vetor [ ´, I , ´ ] Readln ( Vetor [ I ] ); ` ); 30 End; { 3- cálculo da média } Soma := 0; For I := 1 to 50 do Soma := Soma + Vetor [ I ]; Media := Soma / 50; { 4- escrevendo a média } Writeln ( ´A média dos elementos é Readln; End. ´, Média ); 3- Variáveis compostas homogêneas bidimensionais - matrizes 2 8 51 31 77 2 14 -6 2 5 90 0 Matriz M Declaração: Var identificador : Array [Li..Lf , Li, Lf ] of tipo ; Onde: • Li = limite inferior (valor inteiro) • Lf = limite superior (valor inteiro) Exemplos: • Var Matriz : Array [ 1 .. 3, 1 .. 2 ] of Integer; 1 2 31 77 14 -6 5 90 1 2 3 Matriz Referência a toda matriz • Atribuição de uma matriz para outra Exemplo • M1 := M2; { M1 do mesmo tipo que M2, todos os valores de M1 recebem seus equivalentes em M2 } Referência a um único elemento da matriz • Atribuição • Leitura • Uso em expressões Exemplo: • V1 [ 1, 2 ] := 2; • V1 [ 2, 1 ] := V1 [ 2, 2 ] + 30; • V1 [ I + 1 , j ] := V1 [ I , j ]; • Read ( V1 [ I, j ] ); • Write ( V1 [ I, j ] ); • For I := 1 to N do For J := 1 to M do Begin { sendo ´V1´ um vetor de inteiros } 31 Write ( ´ Entre o elemento M [ ´, I, ´ , ´, j, ´ ] ´); Readln ( M [ i, j] ) ; End; Exemplo de uso: fazer um programa para ler 2 matrizes 5 x 4, calcular e escrever a matriz soma entre elas. Algoritmo 1- declare variáveis Matrizes A, B e Soma, I e j inteiros 2- ler a matriz a 3- ler a matriz b 4- calcule a matriz soma 5- escreva a matriz soma Refinamento 2: leia a matriz A For I := 1 to 5 do For J := 1 to 4 do Begin Write ( ´ Entre o elemento A [ ´, I, ´ , ´, j, ´ ] ´); Readln ( A [ i, j] ) ; End; Refinamento 3: leia a matriz B For I := 1 to 5 do For J := 1 to 4 do Begin Write ( ´ Entre o elemento B [ ´, I, ´ , ´, j, ´ ] ´); Readln ( B [ i, j] ) ; End; Refinamento 4: calcule a matriz soma For I := 1 to 5 do For J := 1 to 4 do Soma [ I, j ] := A [ I, j ] + B [ I, j ] ; Refinamento 5: escreva a matriz soma For I := 1 to 5 do begin For J := 1 to 4 do Write ( Soma [ I, j ] : 6 ); Writeln ( ´´ ) ; End; { muda de linha} Programa Program Soma_matrizes; Var I, j : integer; A, B, Soma : array [ 1..5, 1..4 ] of integer; Begin { lendo a matriz A } For I := 1 to 5 do For J := 1 to 4 do Begin Write ( ´ Entre o elemento A [ ´, I, ´ , ´, j, ´ ] ´); Readln ( A [ i, j] ) ; End; 32 { Refinamento 3: leia a matriz B } For I := 1 to 5 do For J := 1 to 4 do Begin Write ( ´ Entre o elemento B [ ´, I, ´ , ´, j, ´ ] ´); Readln ( B [ i, j] ) ; End; { Refinamento 4: calcule a matriz soma } For I := 1 to 5 do For J := 1 to 4 do Soma [ I, j ] := A [ I, j ] + B [ I, j ] ; { Refinamento 5: escreva a matriz soma } For I := 1 to 5 do begin For J := 1 to 4 do Write ( Soma [ I, j ] : 6 ); Writeln ( ´´ ) ; { muda de linha} End; Readln; End. 4- Variáveis compostas homogêneas multidimensionais Declaração: Var identificador : Array [Li1..Lf1 , Li2 Lf2, … Lin..Lfn ] of tipo ; Onde: • Li1 e Lf1 = limites inferior e superior da primeira dimensão (valors inteiros) • Li2 e Lf2 = limites inferior e superior da segunda dimensão (valors inteiros) … • Lin e Lfn = limites inferior e superior da n-ésima dimensão (valors inteiros) Exemplo: • Var Matriz : Array [ 1 .. 4, 1 .. 4, 1 .. 4 ] of Integer; { um " cubo" de valores } 5- Variáveis compostas heterogêneas - registros Nome Roberto Nº 6345-2 P1 9 P2 10 Sub -- média 9.5 Registro R Declaração: Var identificador : Record 33 Campo1 : tipo1; Campo2 : tipo2; ….. CampoN : tipoN; End; Onde: • Campo1, campo2, … campoN = identificadores; • Tipo1, tipo2, tipoN = tipos associados aos campos. Exemplo: Var Aluno = Record Nome : string [ 20 ]; Numero : string [ 6 ]; P1 : real; P2 : real; Sub : real ; Media : real; End; { desenho acima } Referência a todo o registro • Atribuição de um registro para o outro Exemplo • V1 := V2; { V1 é registro do mesmo tipo que V2} { todos os valores de V1 recebem seus equivalentes em V2 } Referência a um único elemento do vetor • Atribuição • Leitura • Uso em expressões Exemplos: • Aluno.nome := ´Roberto´; { sendo Aluno um registro como declarado acima } • Aluno.numero := ´6345-2´; • Aluno.Media := (Aluno.P1 + Aluno.P2)/2; • Readln ( Aluno.p1 ); • Writeln ( Aluno.nome ); Exemplo de uso: fazer um programa para ler os dados de 41 alunos (modelo acima), suas notas, calcular e escrever nome do aluno e sua respectiva média. Use um vetor de registros para armazenar temporariamente os valores. Algoritmo 1- declare variáveis Tabela (vetor de registros), I tipo inteiro 2- leia os dados (nome, nro, notas…), armazenando-os na tabela 3- calcule a média para cada aluno 4- escreva o nome e a média de cada aluno 34 Programa Program Calcula_Medias; var i : integer; Tabela : Array [1..4] of Record nome : string; numero: string; p1 : real; p2 : real; media : real; end; begin { ref. 2 leitura dos dados } For i := 1 to 4 do begin write( 'nome = '); readln( Tabela[i].nome ); write( 'nro = '); readln ( tabela[i].numero ); write( 'p1 = ' ); readln ( Tabela[i].p1 ); write( 'p2 = ' ); readln ( Tabela[i].p2 ); writeln; end; { ref. 3 calculo das médias } For i := 1 to 4 do Tabela[ i ].media := (tabela[i].p1 + tabela[i].p2)/2; { ref. 4 escrever nomes e m‚dias } writeln(' nome medias '); For i := 1 to 4 do Writeln( Tabela[i].nome:10, tabela[i].media:10:2); writeln; Writeln( 'pressione enter para continuar '); readln; end. Exercícios de fixação 1- Ler um conjunto de 50 inteiros e escreve-los na ordem inversa à ordem de leitura. 2- Ler 30 elementos inteiros, colocar em um vetor. Depois, calcule e escreva o maior elemento, a soma de todos e a média. 3- Ler 2 vetores a e b, de inteiros, montar o vetor soma = a + b. 4- Ler dois vetores a e b, de char, montar um vetor que intercale os elementos de a (todos os ímpares) e b (os pares). 5- Ler um vetor e, em seguida, ordenar os valores (monte um novo vetor), escreva o resultado: ambos os vetores, lado a lado. 6- Multiplicação de matrizes: leia a e b (4x4), crie C = A*B, escreva C. Nas questões abaixo, preocupe-se, antes de começar a fazer o algoritmo, em definir a estrutura de dados mais adequada para resolver o problema. 7- Gabarito vestibular. Faça um programa para corrigir provas de vestibular. Primeiramente leia (e armazene temporariamente em um vetor) um gabarito (alternativas a-e, 50 questões). Depois leia um conjunto indeterminado de provas, calcule e escreva o número de acertos para cada uma delas. Não é necessário armazenar os valores de cada prova. Ao final da correção de cada prova, pergunte ao usuário se existem mais provas a serem corrigidas. Se não existirem mais, encerre o programa. 8- Loteria esportiva. Faça um programa para ler um "gabarito" com os resultados dos jogos da loteria esportiva (coluna 1, coluna2, coluna do meio, 13 jogos), armazenando em um vetor. Depois leia um 35 conjunto indeterminado de jogos e verifique se ganhou o prêmio. Ao final da verificação, pergunte se o usuário quer entrar mais jogos. Ao final do programa, informe quantos ganharam o prêmio. 9- Estoque de supermercado. Faça um programa para controlar o estoque de um supermercado. Para cada produto armazene: nome, estoque, preço, e estoque mínimo. Leia dados para o estoque e guarde em um vetor. Depois percorra o vetor e escreva o nome e as demais informações de todos os produtos que estão com estoque abaixo do estoque mínimo. 10- Folha de pagamentos. Monte um vetor para armazenar o nome, cargo, salário bruto de cada funcionário de uma empresa. Depois execute a folha de pagamentos da seguinte forma: Para cada funcionário, imprima nome, salário bruto, salário líquido (para salários menores que 1000 o salário líquido é o próprio salário bruto; para salários maiores ou iguais a 1000 o salário líquido é cerca de 87% do salário bruto). Módulo 4: Modularização Objetivos de aprendizado neste módulo... • apresentar ao estudante o conceito de subprograma e considerações sobre modularização • praticar o desenvolvimento de algoritmos com a utilização de tais conceitos e considerações. Texto base para este módulo • • Farrer e outros, "Algoritmos Estruturados", capítulo 3. Farrer e outros, "Pascal Estruturado", capítulo 3, e capítulo 4 (sobre declaração de tipos). Tópicos 1. Conceito de modularização 2. Subprogramas em Pascal • procedimentos • funções • Abrindo um parêntesis: declaração de tipos 3. exercícios 1- Conceito de modularização O que é um ´sistema modular´? O que é um aparelho de som modular? Conceito de módulo: porção do sistema com função bem definida. Conceito de módulo (no contexto de programação): trecho de um programa com função bem definida. Na fase de projeto do programa (refinamentos sucessivos, algoritmo), deve-se buscar o projeto de um programa modular. 36 Visão de um programa na fase de projeto: programa principal e vários módulos. Programa Principal A Program Principal; A1 B C A2 Begin A; B; C; End. Procedure A; Begin A1; A2; End; { refinamento A? } 2- Subprogramas em Pascal Subprograma • Trecho de programa com função bem definida • Variáveis próprias • Parâmetros de entrada e saída (para comunicação com o o programa principal e demais subprogramas) • Acionado pelo nome, como se fosse um comando da linguagem. Tipos • Procedimentos (procedure) • Funções (function): tem pelo menos um resultado Sintaxe de um programa com subprogramas… Program identificador; Declaração de variáveis Declaração de subprogramas Begin Comandos End. 2.1- Procedimentos sintaxe: Procedure identificador [ (declaração dos parâmetros de entrada e saída) ] ; Declaração das variáveis, constantes e tiops locais ao subprograma em questão Declaração de subprogramas locais ao subprograma em questão Begin Comandos End; 37 Exemplo: Program troca_troca; Var a, b : integer; Procedure Troca (var A, B : integer ) ; Var aux : integer; Begin Aux := a; A := b; B := aux; End; Begin { programa principal } Read( a ); Read( b ); Troca( a, b ); Write( a ); Write( b ); End. Parâmetros • Entrada • Entrada e saída (são precedidos por ´var´ Variáveis com nomes iguais • Dentro de subprogramas, a referência prioritária é a uma variável local Variáveis locais e parâmetros • Conhecidos somente dentro do subprograma no qual foram declarados 2.2- Funções sintaxe: Function identificador [ (declaração dos parâmetros de entrada e saída) ] : tipo ; Declaração das variáveis, constantes e tiops locais ao subprograma em questão Declaração de subprogramas locais ao subprograma em questão Begin Comandos End; Exemplo: Program Calcula_Media; Var a, b : integer; Var med: real; Function Media ( a, b : integer ) : real; Begin Media := (a + B)/2; End; Begin Readln( a ); Readln( b ); Med := media( a, b ); 38 Writeln( med ); End. 2.3- Abrindo um parêntesis: declaração de tipos Sintaxe Type identificador = descrição de tipo válida em pascal ; Exemplo: … Type matriz = array[1..3, 1..3] of integer; Var a, b : matriz; … 3- Exercícios Refazer os seguintes exercícios, agora usando subprogramas para tornar o programa mais modular. 1. Fazer um programa que leia dois valores A e B, calcule e escreva a sua média aritmética. Subprograma para calcular a média. 2. Fazer um programa que leia dois valores A e B, determine e escreva o maior entre eles. Subprograma para calcular o maior. 3. Escrever um procedimento para leitura de um valor inteiro entre 1 e 100. Se o usuário fornecer um valor for a desta faixa, deve-se repetir o processo até que seja fornecido um valor válido. 4. A conversão de graus Farenheit para centígrados segue a fórmula C = 5/9 ( F – 32 ). Fazer um programa para gerar uma tabela mostrando temperaturas em F e em C, variando F de 1 em 1 grau de 40 até 160 F. Use uma função para fazer a conversão. 5. Leia 50 valores do tipo (nome, Notap1, Notap2, Nota_trabalhos, Percentual_de_presença), e determine quantos alunos foram aprovados e quantos foram reprovados. Para aprovação é preciso ter média maior ou igual a 6 e 75% de presença. A média é calculada pela expressão: Media = (P1 + P2) * 70% + Nota1Trabalhos * 30%. Use uma função para calcular a média. 6. Programa que le dois vetores A e B e apresenta o vetor Soma. Use subprogramas para ler os vetores e para somar os vetores. 7. Fazer programa para ler duas matrizes e apresentar a soma. Subprogramas para ler, somar e escrever as matrizes. 8. Fazer procedimento para multiplicar 2 matrizes A (MxN) e B (NxK) e retornar a matriz resultado (MxK). Obs: A (M x N) * B (N x K) = Mult (M x K) For I := 1 to M do For J := 1 to K do Mult (I, j) := ∑ A ( I, x) * B(x,j) { x variando de 1 a N } 39 Módulo 5: Arquivos Objetivos de aprendizado neste módulo... • apresentar ao estudante o conceito e as operações básicoas sobre arquivos • praticar o desenvolvimento de algoritmos com a utilização de tais conceitos e comandos. Texto base para este módulo • • Farrer e outros, "Algoritmos Estruturados", seção 2.4. Farrer e outros, "Pascal Estruturado", seção 2.4. Tópicos 1. 2. 3. 4. 5. 6. conceito de arquivo arquivos com tiipo - operações básicas visão geral de arquivos sequenciais visão geral de arquivo texto exercícios comandos adicionais 1- Conceito de Arquivo Nos programas que fizemos até o moment, se desligarmos o computador, todos os dados armazenados são perdidos. Arquivo: depósito de dados em memória permanente (disco rígido, disquete, etc.) Tipos • Arquivo com tipo: armazena dados de um único tipo (inteiros, vetores, registros, etc.), sequencialmente • Arquivo texto : armazena textos (como em um editor de texto) Exemplos 40 Esquema de um arquivo de inteiros 0 1 2 3 4 5 6 5 4 54 10 6 0 12 Esquema de um arquivo do tipo Aluno (registro) 0 1 2 3 4 5 Nome José Xico Tiago Mané Maria Julia Nro 34344 23 2324 234 232 23123 P1 10 9 8 9 8 0 P2 5 5 6 7 8 6 media 7 8 9 8 7 8 2- Arquivos com tipo Operações sobre arquivos • Declarar • Associar com um nome físico • Criar • Abrir • Fechar • Escrever • Ler Declarar Var identificador : file of tipo; Exemplo Var F : File of integer; Associar com um nome físico… Assign( identificador, nome físico); Exemplos Assign( F, ´a:dados.dat´); Assign( F, ´c:\progs\ic\quinto.xxx´); Criarum arquivo vazio (exemplo) Rewrite( F ); Abrir um arquivo já existente (exemplo) Reset( F ); Fechar um arquivo (exemplo) Close( F ); Ler um registro de um arquivo (exemplo) Read( F, I ); { sendo F um arquivo de inteiros e I variável tipo inteiro } Escrever um registro em um arquivo (exemplo) Write( F, I ); { sendo F um arquivo de inteiros e I variável tipo inteiro } Exemplo de programa: ler e armazenar uma tabela de Alunos, notas e médias Program Alunos; Type Tabela = array[1..41] of record Nome : tring[10]; 41 Numero: string[5]; P1:real; P2:real; Media: real; End; Var T Var Arquivo Var I : Tabela; : File of Tabela; : integer; Begin For I := 1 to 41 do Readln( T.nome, T.numero, T.p1, T.p2 ); Assign( arquivo, ´c:\progs\myfile.dat´ ); Rewrite( arquivo ); Write( arquivo, T ); Close( arquivo ); End. 1 2 3 4 … 40 41 Nome José Xico Tiago Mané Maria Julia Nro 34344 23 2324 234 232 23123 P1 10 9 8 9 8 0 P2 5 5 6 7 8 6 media 3- Visão geral de arquivos seqüenciais Arquivo do tipo Aluno = registro (nome, numero, p1, p2, media) Nome Nro P1 P2 media 0 José 34344 10 5 7 1 Xico 23 9 5 8 2 Tiago 2324 8 6 9 3 Mané 234 9 7 8 4 Maria 232 8 8 7 5 Julia 23123 0 6 8 Operações • EOF ( F ); { end of file? Função de resultado boolean } • Filesize( F ); { retorna o tamanho do arquivo, em número de registros } • Filepos( F ); { retorna a posição corrente para leitura ou escrita } • Seek( F, posição ); { posiciona o indicador de posição corrente na posição indicada } Exemplo1: cópia de arquivos Program Copia; Type aluno : record Nome : tring[10]; Numero : string[5]; P1, p2, media : real; End; 42 Var A, B : file of Aluno; Aux : aluno; Begin Assing( a, ´origem.pas´); Assign( b, ´destino.pas´); Reset( a ); Rewrite( b ); Read( a, aux); While not eof( a ) do Begin Write( b, aux); Read( a, aux ); End; Close( a ); Close( b ); End. Outros exemplos… Altera a nota de um aluno… Reset( b ); Seek( b, 4 ); Read( b, aux ); Aux.p1 := 10; Seek( b, 4 ); Write( b, aux ); Close( b ); Inclui um novo registro no final do arquivo… Reset( b ); Readln( aux.nome, aux.numero, aux.p1, aux.p2 ); Seek( b, filesize( b ) ); Write( b, aux ); Close( b ); 4- Visão geral de arquivo texto Program Exemplo_de_arquivo_texto; Var f : text; Linha : string [ 80 ] ; Begin Assign ( F, ´texto.txt´); Rewrite( F ); Linha := ´xxx´; While linha <> ´´ do Begin Readln( linha ); If linha <> ´´ Then Writeln ( F, Linha ); End; Close( F ); End. 43 5- Exercícios 1. Listar no vídeo um arquivo existente, com registros do tipo inteiro. 2. Dado um arquivo existente, com registros com os dados: nome, sexo, endereço, idade… criar 2 arquivos, um só com os homens e outro só com as mulheres. 3. Criar um arquivo de alunos (nome, nro, p1, p2, media), armazenar elementos (quantos o usuário quiser) . Abrir o arquivo, a seguir, a atualizá-lo com as médias dos alunos. A seguir, liste nome e média de cada aluno. 6- Comandos adicionais Comando Case (seleção múltipla) Case <variável de tipo enumerável. Of Valor1 : comando; Valor2: comando; … Valorn : comando; [ else bloco de comandos ] end; Exemplo Program Seleciona_opcao; Uses crt; Var opcao : integer; Fim : boolean; Begin Fim := false; Repeat Clrscr; Writeln (´Opções 1=incluir, 2=excluir, 3=alterar, 4=terminar´); Readln( opcao ); Case Opcao of 1 : incluir; 2: excluir; 3: alterar; 4: fim := true; else writeln (´opção inválida´); end; until fim; end. 44 Trabalhos Os trabalhos a seguir serão considerados na avaliação do aluno, conforme o descrito no plano de ensino. Para melhor cumprirem seus objetivos os trabalhos devem ser desenvolvidos no momento certo. O calendário do curso estabelece uma data máxima para entrega de cada trabalho. O resultado do trabalho é um relatório contendo: a (1) listagem do programa, (2) cópia da tela de execução (demonstrando que o programa funciona) e (3) algoritmo. Coloque na capa ou primeira folha do relatório, em destaque, o nome do aluno, número, nome da disciplina, turma e período (1º 2002, 2º 2002), bem como o número e o título do trabalho. Não é necessário entregar a versão digital (em disquete, CD), mas guarde uma versão digital de cada um de seus trabalhos até o final do curso. O professor poderá solicitar, em algum momento até o final do curso, a apresentação do trabalho em uma entrevista. Os trabalhos devem ser compilados por uma versão qualquer do Turbo Pascal da Borland inc. Na home page do curso existe uma versão para download. Possíveis Problemas nos Trabalhos... 1. Trabalho incompleto ou diferente do especificado. 2. Erro nos algoritmos. 3. Execução inexistente ou insuficiente,. 4. Algoritmo inexistente ou insuficiente 5. Usar nomes não significativos para variáveis, tipos ou subprogramas. 6. Ausência de identação ou comentários implicando em complexidade de leitura. 7. Não entregar no prazo. 8. Trabalhos notadamente duplicados. Primeiro Trabalho: Imposto de Renda. Alvo de aprendizado: estrutura básica de um programa, estrutura condicional, expressões aritméticas, variáveis, tipos, comandos de entrada e saída. Fazer um programa que leia o salário bruto de um trabalhador, calcule e escreva o seu salário líquido e o valor do desconto. O desconto refere-se exclusivamente ao Imposto de Renda Retudo na Fonte (IRRF). O cálculo do IRRF ocorre da seguinte forma: salários brutos até R$900 são isentos (desconto = 0). O IRRF para salários maiores que R$900 e menores ou iguais a R$1800 é de 15% do que exceder a R$900 (o que equivale a 15% do salário 45 bruto menos R$135,00). Para salários maiores que R$1800 o IRRF é de 27,5% menos 247,50 (R$135 + R$112,5). A tabela abaixo resume a forma de cálculo do IRRF. Tabela do IRRF (até 2002) Faixa salarial (R$) 0,01 a 900,00 900,01 a 1800,00 1800,01 ou maior Segundo Trabalho: alíquota isento 15% 27,5% Menos (R$) 135,00 247,00 Juro Composto. Alvo de aprendizado: estruturas de repetição. Enunciado: Fazer um programa que leia uma taxa de juros mensal, um valor inicial, e o número de meses. Calcule e escreva o valor final, calculado pela aplicação da taxa de juros mês a mês. Use uma estrutura de repetição (REPEAT ou WHILE. Não use o comando FOR) para efetuar os cálculos. Terceiro Trabalho: Matrizes. Alvo de aprendizado: vetores e matrizes. Enunciado: Fazer um programa para ler duas matrizes A e B, quadradas de ordem N, e apresentar de forma organizada (como no desenho de uma matriz) as matrizes A, B , Soma e Mult (multiplicação). • N deve ser definido como constante. Use N pequeno - 3, 4 - para facilitar a formatação. • Preocupe-se com a formatação da entrada e saída de dados, e com a validação dos dados fornecidos pelo usuário. Quarto Trabalho: Controle Acadêmico. Alvo de aprendizado: registros e subprogramas. Enunciado: Fazer um programa para ler os nomes e as notas de N alunos (N como constante, como 5, 10), armazenar em um vetor, calcular as médias de cada aluno e então escrever de forma organizada (uma lista) os nomes, notas e médias de cada um. • Deve ser definido o tipo Aluno, um registro contendo nome, número, e as notas p1, p2, sub e trabalhos, e também a média final. O vetor, no caso, será um vetor de registros do tipo aluno. • A média deve ser calculada por uma função chamada MediaDoAluno. Essa função calcula a média de 1 (um) aluno. As informações necessárias (as notas do aluno) devem ser passadas como parâmetro. 46 • • Deve-se primeiramente ler todos os dados, só então efetuar o cálculo de todas as médias, e só então escrever tudo. Preocupe-se com a validação da entrada de dados, e com a formatação da saída. Quinto Trabalho: Controle Acadêmico com Arquivos. Alvo de aprendizado: arquivos. Enunciado: Fazer um programa para cadastro e gerenciamento do aproveitamento de alunos em um determinado curso. • Definir um registro tipo aluno, com nome, número, notas individuais e média. • Definir um arquivo para armazenar registros do tipo aluno • Fazer um programa que forneça ao seu usuário opções para 1. incluir aluno, 2. excluir aluno, 3. alterar as notas de um aluno, 4. (re)calcular as médias. 5. mostrar a lista de nomes, notas e médias e 6. sair do programa • Preocupe-se com a modularização do programa, definindo subprogramas quando conveniente. • Preocupe-se com a validação da entrada de dados, e com a formatação da saída. 47 Provas de Anos Anteriores Objetivos destas informações • dar ao estudante uma noção do tipo de questão que será utilizada para avaliação de seu aprendizado Fontes de consulta para este módulo: Provas aplicadas nos cursos de Introdução à Computação, na UFSCar, em anos anteriores 1. O que é um compilador? 2. Faça um programa que calcule a área de uma região retangular a partir de sua base e altura. Leia a base e a altura, calcule o valor da área e escreva o resultado. Método de cálculo: Área = base * altura. 3. Faça um programa que leia o valor do salário bruto de um trabalhador, calcule e escreva o salário líquido. O salário líquido é calculado da forma abaixo: • liquido = bruto - descontos • desconto = 10% do bruto para salários bruto menor que R$ 800,00 • desconto = 25% do bruto para salários maiores ou iguais a R$ 800,00 4. Faça um programa que escreva os números de 100 a 500 seguidos de seu quadrado. 5. No contexto de programação, o que é e para que serve um arquivo de dados? 6. Seja um arquivo de números inteiros de tamanho desconhecido, de nome dados.dat. Faça um programa que encontre e escreva o maior número do arquivo. 7. Faça um programa que leia duas matrizes A e B, ambas N x N, e escreva a matriz C onde C = A + B. Considere prontos (e use!) os seguintes subprogramas: • procedure Le_matriz (var M : Matriz ); • procedure Escreve_Matriz( M : Matriz ); 48 onde o tipo Matriz é definido da forma: • const N = <não interessa>; • type Matriz = array[1..n] of real; 8. Fazer uma função para calcular a média de um aluno a partir das notas de suas 2 provas normais e 1 substitutiva. Deve-se calcular a média aritmética das duas notas maiores. Segue a definição da função: • function Media( p1, p2, sub : real ) : real; 49 REFERÊNCIAS BIBLIOGRÁFICAS • Abib, S.; Material do curso de introdução à computação. • Catto, A. J.; e outros; "Uma Introdução à Programação Estruturada". Texto experimental editado em data desconhecida. • Farrer, H.; "Algoritmos Estruturados". Editora Guanabara, Rio de Janeiro, 1989. • Farrer, H.; "Pascal Estruturado". Editora Guanabara, Rio de Janeiro, 1985. 50 X getnode( P ) info( P ) <-- X next( P ) <-- P L <-- P X O X X O X X X O X O O X X X O X O X X O X X X O O X X 51
Documentos relacionados
[java] Sequencia de escape,[ras.] A experiência da ALMG com o uso
Writeln('Byeee'); end; end; END.
Leia maisTexto retirado e adaptado da apostila “A Linguagem Pascal
programa que será construído a seguir, o campo FLAG poderá guardar um de dois valores, o asterisco "*" para remoções lógicas ou um espaço em branco " " para determinar que o registro é ativo. Vale ...
Leia mais1 conceitos básicos da linguagem pascal
do programa. Os labels são utilizados em conjunto com a instrução goto. Isso o que eu particularmente, não recomendo para nenhum programa de computador desenvolvido. Na subárea Const, definimos tod...
Leia maisprograma em Pascal - Index of - Universidade Federal de Alagoas
Em Maceió, no mês de maio do ano de 2004. Jaime Evaristo
Leia maisApostila de Pascal da UNICAMP - muito boa!
Imprima o resultado x. Algoritmo de Euclides Estilizado.
Leia mais