Prévia do material em texto
Programação para Mainframe Aula 03 Prof. Claudio Benossi Curso de Análise de Desenvolvimento de Sistemas 1. Unidade Operadores aritméticos e Estrutura de Controle Introdução ao COBOL Para criação dos exemplos aplicados a aula de hoje vamos usar o OpenCobolIDE. https://launchpad.net/cobcide/+download 3 https://launchpad.net/cobcide/+download Introdução ao COBOL O OpenCobolIDE 4 Introdução ao COBOL Vamos colocar o nome do nosso primeoro programa como PROGRAMA_EX02 e selecionar o local onde deve ser salvo. 5 6 Introdução ao COBOL O nosso OpenCobolIDE já traz as 4 divisões, vamos ajustando o nosso código durante a nossa aula. 7 Introdução ao COBOL Vamos fazer a identificação do nosso programa. 8 Introdução ao COBOL Agora vamos criar as nossas variáveis. WS-NUM1, WS-NUM2, WS-RESUL sendo variáveis do tipo numérica com 9 casas decimais e WS-OP como variável do tipo alfanumérica com uma posição. 9 Introdução ao COBOL Comando INITIALISE Efetua a inicialização (atribuição de valores) de uma variável (ou um conjunto de variáveis), de acordo com o formato da cada uma. Variável numérica é inicializada com zero e variável alfanumérica ou alfabética é inicializada com espaços (brancos). 10 Introdução ao COBOL Comando INITIALISE Se a variável especificada for um item de grupo, todos os seus subitens serão inicializados de acordo com seus formatos. 11 Introdução ao COBOL Comando INITIALISE Se a variável especificada for um item de grupo, todos os seus subitens serão inicializados de acordo com seus formatos. 12 Comando DISPLAY Exibição de valores em uma tela ou em um arquivo. Normalmente é o dispositivo assinalado pelo ddname SYSOUT no JOB de execução: //SYSOUT DD SYSOUT=* Formato: DISPLAY [identificador-1 | literal-1] ... 13 Comando DISPLAY Exemplos: 14 Introdução ao COBOL Comando INITIALISE Se a variável especificada for um item de grupo, todos os seus subitens serão inicializados de acordo com seus formatos. 15 Introdução ao COBOL Comando ACCEPT Esta declaração torna disponíveis os dados fornecidos pelo sistema operacional ou fornecido diretamente via teclado pelo Usuário. É provável que o Identifier seja uma variável definida na WORKING-STORAGE SECTION. 16 Introdução ao COBOL Comando ACCEPT A declaração ACCEPT transfere dados para um identificador especificado. Não há nenhuma verificação de edição ou erro dos dados de entrada. 17 Introdução ao COBOL Comando ACCEPT Usado para receber informações através da entrada padrão e de registrador especial do COBOL. Entrada padrão: informação é transferida diretamente do ddname SYSIN no JCL para a área de memória identificador-1. Registrador especial do COBOL: informação é transferida do registrador para a área de memória identificador-1. 18 Introdução ao COBOL Comando ACCEPT Formato: [SYSIN ] [DATE ] [YYYYMMDD] ACCEPT identificador-1 [FROM [DAY ] [YYYYDDD] [DAY-OF-WEEK] [TIME ] Quando a opção FROM é omitida o padrão FROM SYSIN é assumido. 19 Introdução ao COBOL 20 Introdução ao COBOL Vamos recuperar as informações recebidas via teclado e armazenar nas variáveis. 21 Introdução ao COBOL Vamos repetir o processo para solicitar os valores de WS-NUM1 e WS-NUM2. 22 Introdução ao COBOL Agora vamos fazer as operações básicas de Adição, Subtração, Multiplicação e Divisão no nosso programa e para isso vamos usar a estrutura de controle e decisão IF. 23 Comando IF Efetua teste de condições especificadas, e efetua os desvios necessários de acordo com o resultado. Formato: IF condição instruções (para condição verdadeira) ELSE instruções (para condição não verdadeira)] END–IF 24 Comando IF O END-IF indica o fim da especificação da instrução, ou seja, as instruções que estão após o END-IF são executadas tanto para os casos de condição satisfeita quanto para os casos de condição não satisfeita. O ponto ‘.’ pode ser usado em substituição ao END-IF para indicar o fim da especificação da instrução IF, mas deve ser evitado pois o END-IF é a forma adotada para manter a aderência com lógica estruturada. 25 Operadores Relacionais 26 DESCRIÇÃO SÍMBOLO NOTAÇÃO COBOL Igual = EQUAL Diferente != ou <> NOT EQUAL Maior que > GREATER Menor que < LESS Maior ou igual a >= NOT LESS Menor ou igual a <= NOT GREATER Operadores Lógicos 27 OPERADOR DESCRIÇÃO AND Se os dos operandos ou expressões são verdadeiros, o resultado será verdadeiro. Se um deles é falso, o resultado será falso. OR Se um dos dois operandos é verdadeiro, o resultado será verdadeiro. Se os dois operandos são falsos, o resultado será falso NOT Inverte o valor de um operando. Se o operando é verdadeiro o resultado será falso. Se o operando é falso o resultado será verdadeiro. Testes de Categorias 28 CATEGORIA NOTAÇÃO COBOL Teste de Sinal IS POSITIVE IS NEGATIVE IS ZERO Teste de Classe IS MUMERIC IS ALPHABETIC Exemplos 29 Exemplos 30 Exemplos 31 Introdução ao COBOL Agora que já entendemos como funciona a estrutura de controle IF, vamos voltar ao nosso programa, onde já recebemos as informações via teclado e armazenamos nas variáveis (WS-NUM1, WS-NUM2 E WS-OP). Precisamos verificar qual será a operação selecionado pelo usuário (WS-OP) que pode ser + (Adição), - (Subtração), * (Multiplicação) ou / (Divisão). 32 Introdução ao COBOL Aqui usamos estrutura simples do IF os comandos COMPUTE e DISPLAY como bloco de instruções. 33 Comando COMPUTE A instrução COMPUTE usa símbolos em vez de comandos aritméticos. A principal vantagem do comando COMPUTE é que pode realizar várias operações aritméticas com uma única instrução. A instrução COMPUTE atribui o valor de uma expressão aritmética de um ou mais itens de dados. 34 Comando COMPUTE Ele permite que você combine operações aritméticas sem as restrições na recepção de itens de dados que as regras para as declarações ADD, SUBTRACT, MULTIPLY e DIVIDE impõem. Quando você precisa combinar operações aritméticas, usar a instrução COMPUTE pode ser mais eficiente do que escrever uma série de declarações aritméticas separadas. 35 Comando COMPUTE Símbolos usados em uma instrução COMPUTE: 36 SÍMBOLO SIGNIFICADO + ADD - SUBTRACT * MULTIPLY / DIVIDE ** Exponenciação (não há comando correspondente no COBOL) Introdução ao COBOL Já podemos testar nosso programa, para verificar se ele está realizando a soma entre os dois valores. Primeiro vamos compilar. 37 Introdução ao COBOL Se estiver tudo OK vamos executar. 38 Introdução ao COBOL 39 Introdução ao COBOL 40 Introdução ao COBOL OK até aqui funcionou! 41 Introdução ao COBOL Falta fazer as outras operações – (Subtração), * (Multiplicação) e / (Divisão). 42 Introdução ao COBOL Conferindo: 43 Introdução ao COBOL Agora vamos melhorar nosso programa com casas decimais e uma mascara de exibição para os valores. 1º Passo alterar as nossas variáveis. 44 Introdução ao COBOL Na linha 17 aparece como erro, e para corrigir isso, vamos modificar do padrão americano (99,999.99) para nosso padrão (99.999,00). 45 Introdução ao COBOL Para resolver esse problema vamos na ENVIRONMENT DIVISION na CONFIGURATION SECTION e vamos criar um item de nomes especiais. 46 Introdução ao COBOL Após fazer essa alteração a indicação de erro não existe mais. 47 Introdução ao COBOL Agora vamos usar o comando MOVE para transferir o valor da variável WS-RESUL para a variável WS-MASCARA (que já tem o formato correto) e pedimos agora para exibir a variável WS- MASCARA. 48 Introdução ao COBOL Conferindo o resultado! 49 Introdução ao COBOL Vamos fazer outro teste, desta vez vamos fazer 823,50 – 1257,48 Note que o resultado não aparece como negativo. Vamos corrigir isso! 50 Introdução ao COBOL Para corrigir o problema de não exibir os valores negativos, vamos sinalizar os números, e para isso vamos fazer alguns ajustes na declaração de variáveis. Inserir o S nas variáveis numéricas e sinal de menos (-) namascara. 51 Introdução ao COBOL Vamos testar novamente com os mesmos valores: 823,50 – 1257,48 52 Introdução ao COBOL Para esse programa usamos o COMPUTE para realizar os cálculos, porém podemos fazer de outra maneira com os Comandos aritméticos. 53 Introdução ao COBOL As instruções COBOL para efetuar cálculos aritméticos são: ▹ ADD somar ▹ SUBTRACT subtrair ▹ MULTIPLY multiplicar ▹ DIVIDE dividir ▹ COMPUTE calcular Obs.: Utilizar, preferencialmente, variáveis numéricas compactadas, como operando das operações aritméticas. 54 Introdução ao COBOL Para obter resultados arredondados, a opção ROUNDED pode ser especificada, após o nome de dados resultante, em qualquer instrução aritmética. O arredondamento é clássico: valores menores que 5 são truncados e os maiores são arredondados para cima. Exemplo: ADD VALOR1-E TO WRK-AC-VALOR1 ROUNDED 55 Introdução ao COBOL Quando a variável que recebe o resultado da operação aritmética não tem tamanho suficiente para conter o resultado, o COBOL trunca o resultado (o valor perde algarismos à esquerda) e não emite avisos ou código de erro. Para detectar esta situação é necessário codificar na instrução aritmética a clausula ON SIZE ERROR, na qual é possível tratar a ocorrência, conforme especificação. 56 Introdução ao COBOL Exemplo com ON SIZE ERROR. 57 Comando ADD Acumula dois ou mais operandos numéricos e armazena resultados. Formato: ADD { identificador-1 ... literal-1 ...} TO | GIVING { identificador-de-resultado ...} 58 Comando ADD Regras do comando ADD 1. Todos os literais e campos que são parte da adição devem ser numéricos. Após a palavra GIVING, contudo, o campo pode ser um item de relatório. 2. O campo identificador-de-resultado, após TO ou GIVING, deve ser um nome de dados e não um literal. 59 Comando ADD Regras do comando ADD 3. Pelo menos dois operandos deverão anteceder a palavra GIVING. 4. Ao usar TO, o conteúdo inicial do identificador-de-resultado, numérico, é somado junto ao dos outros campos (identificador-1 ... literal-1...). 60 Comando ADD Regras do comando ADD 5. Ao usar o formato GIVING, o campo identificador-de- resultado receberá a soma, mas seu conteúdo inicial não será parte da instrução ADD e pode ser um campo numérico ou um item de relatório. 61 Comando ADD 62 Comando SUBTRAC Subtrai um ou mais operandos numéricos e armazena resultados. Formato 1: SUBTRACT { identificador-1 ... literal-1 ...} FROM identificador-de-resultado … Formato 2: SUBTRACT { identificador-1 ... literal-1 ...} FROM identificador-2 literal-2 GIVING identificador-de-resultado ... 63 Comando SUBTRAC Regras do comando SUBTRACT 1. Observar a colocação das reticências (...) no Formato 1. O primeiro conjunto depois do identificador-1 significa que dois ou mais operandos podem ser subtraídos do identificador-2. Além disso, os operandos podem ser subtraídos do identificador-de-resultado-1, do identificador-resultado-2, e assim por diante. 64 Comando SUBTRAC Regras do comando SUBTRACT 2. O Formato 2 aceita qualquer número ou identificadores imediatamente após a palavra SUBTRACT ou da palavra GIVING, mas depois da palavra FROM é permitido um único identificador ou literal. 3. Todos os literais e campos que são parte da instrução SUBTRACT devem ser numéricos. Depois da palavra GIVING, contudo, o campo pode ser um item de relatório. 65 Comando SUBTRAC Regras do comando SUBTRACT 4. O campo identificador-de-resultado, após FROM ou GIVING, deve ser um nome de dados, e não um literal. 5. Com a opção GIVING, o campo identificador-de-resultado receberá o resultado da subtração, mas seu conteúdo inicial não será parte da instrução SUBTRACT. Ele pode ser tanto um campo numérico como um item de relatório. 66 Comando SUBTRAC 67 Comando DIVIDE Efetua uma divisão com o quociente como resultado e, se indicado, informa o resto. Formato 1: DIVIDE {(divisor) identificador-1 literal-1} INTO {(dividendo) identificador-2 literal-2} GIVING identificador-de-resultado … Formato 2: DIVIDE {(dividendo) identificador-1 literal-1} BY {(divisor) identificador-2 literal-2} GIVING identificador-de-resultado ... [ REMAINDER identificador-de-resto ] 68 Comando DIVIDE Regras do comando DIVIDE 1. Observar que GIVING é opcional com INTO, mas obrigatório com BY. 2. No formato 1, quando a opção GIVING não é utilizada o resultado da divisão é colocado dentro do indentificador-2 logo após a palavra INTO. 69 Comando DIVIDE Regras do comando DIVIDE 3. O Formato 2 com a opção REMAINDER é utilizado quando se faz necessário guardar o resto da divisão em outro identificador. 70 Comando DIVIDE 71 Comando MULTIPLY Comando MULTIPLY Efetua a multiplicação entre variáveis. Formato: MULTIPLY {identificador-1 literal-1} BY {identificador-2 literal-2} [ GIVING identificador-de-resultado ...] 72 Comando MULTIPLY Regras do comando MULTIPLY 1. Sem a opção GIVING o indentificador-1 ou literal será multiplicado pelo indentificador-2 (não usar literal) e o resultado ficará no identificador-2. 2. Com a opção GIVING o indentificador-1 ou literal será multiplicado pelo indentificador-2 ou literal e o resultado será armazenado em todos os identificadores-de-resultado após GIVING. 73 Comando MULTIPLY 74 Exercício Vamos elaborar um sistema para calcular o IMC, onde o IMC é realizado com o seguinte calculo: IMC = peso / (altura*altura) Efetuar a classificação utilizando a tabela ao lado: 75 IMC Classificação < 18.5 Desnutrido 18.5 – 24.9 Adequado 25.0 – 29.9 Pré-obeso 30.0 – 34.9 Obesidade grau I 35.0 – 39.9 Obesidade grau II "Nossos fracassos, às vezes, são mais frutíferos do que os êxitos" Henry Ford Obrigado! Se precisar … Prof. Claudio Benossi claudio.benossi@fatec.sp.gov.br