Partilhar: WhatsApp
aulify
UC UC02840 · T. Desenv. Software

Ficha 01 · COBOL fundamentos

Estrutura, PIC, controlo, paragraphs
Versão · Aluno
Tempo · 45 minutos
Aluno(a)
Turma
Data

Exercício 1 · Hello World

Cria hello.cob em formato clássico (com colunas) que imprime "Olá mundo!" e o teu nome. Compila com cobc -x e corre.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.
       AUTHOR. JOAO SILVA.

       PROCEDURE DIVISION.
           DISPLAY "Olá mundo!".
           DISPLAY "Sou o João Silva.".
           STOP RUN.
cobc -x hello.cob -o hello
./hello

Exercício 2 · Input e cálculo

Programa que pede idade ao utilizador e responde: - "Adulto" se >= 18. - "Adolescente" se >= 13. - "Criança" caso contrário.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CLASSIFICAR-IDADE.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-IDADE PIC 9(3).

       PROCEDURE DIVISION.
           DISPLAY "Idade: ".
           ACCEPT WS-IDADE.

           IF WS-IDADE >= 18
               DISPLAY "Adulto"
           ELSE
               IF WS-IDADE >= 13
                   DISPLAY "Adolescente"
               ELSE
                   DISPLAY "Criança"
               END-IF
           END-IF.

           STOP RUN.

Exercício 3 · Conversor temperatura

Pede uma temperatura em Celsius e converte para Fahrenheit (F = C × 9/5 + 32). Usa COMPUTE.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CELSIUS-FAHRENHEIT.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-CELSIUS    PIC S9(3)V99.
       01 WS-FAHRENHEIT PIC S9(3)V99.

       PROCEDURE DIVISION.
           DISPLAY "Celsius: ".
           ACCEPT WS-CELSIUS.

           COMPUTE WS-FAHRENHEIT = WS-CELSIUS * 9 / 5 + 32.

           DISPLAY WS-CELSIUS " C = " WS-FAHRENHEIT " F".

           STOP RUN.

Exercício 4 · Tabuada com PERFORM

Pede um número e imprime a sua tabuada de 1 a 10. Usa PERFORM VARYING.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. TABUADA.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-N         PIC 9(2).
       01 WS-I         PIC 9(2).
       01 WS-RES       PIC 9(4).

       PROCEDURE DIVISION.
           DISPLAY "Número: ".
           ACCEPT WS-N.

           PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10
               COMPUTE WS-RES = WS-N * WS-I
               DISPLAY WS-N " x " WS-I " = " WS-RES
           END-PERFORM.

           STOP RUN.

Exercício 5 · Cliente record

Define um record WS-CLIENTE com nome (30), email (50), telefone (9), idade (3). Preenche, e imprime cada campo + o record inteiro.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CLIENTE-RECORD.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-CLIENTE.
          05 WS-NOME       PIC X(30).
          05 WS-EMAIL      PIC X(50).
          05 WS-TELEFONE   PIC 9(9).
          05 WS-IDADE      PIC 9(3).

       PROCEDURE DIVISION.
           MOVE "Ana Silva"             TO WS-NOME.
           MOVE "ana.silva@example.pt"  TO WS-EMAIL.
           MOVE 912345678               TO WS-TELEFONE.
           MOVE 25                      TO WS-IDADE.

           DISPLAY "Nome:     " WS-NOME.
           DISPLAY "Email:    " WS-EMAIL.
           DISPLAY "Telefone: " WS-TELEFONE.
           DISPLAY "Idade:    " WS-IDADE.
           DISPLAY "---".
           DISPLAY "Record: " WS-CLIENTE.

           STOP RUN.

Exercício 6 · Notas dos alunos

Cria array (OCCURS) com 5 notas. Lê todas via ACCEPT, calcula e imprime média.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. MEDIA-NOTAS.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NOTAS.
          05 WS-NOTA OCCURS 5 TIMES PIC 99.
       01 WS-I         PIC 9.
       01 WS-SOMA      PIC 999.
       01 WS-MEDIA     PIC 99V99.

       PROCEDURE DIVISION.
           MOVE 0 TO WS-SOMA.

           PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
               DISPLAY "Nota " WS-I ": "
               ACCEPT WS-NOTA(WS-I)
               ADD WS-NOTA(WS-I) TO WS-SOMA
           END-PERFORM.

           COMPUTE WS-MEDIA = WS-SOMA / 5.

           DISPLAY "Soma: " WS-SOMA.
           DISPLAY "Média: " WS-MEDIA.

           STOP RUN.

Exercício 7 · EVALUATE

Pede o número do mês (1-12) e responde com a estação: - 12, 1, 2: Inverno - 3, 4, 5: Primavera - 6, 7, 8: Verão - 9, 10, 11: Outono

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ESTACAO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-MES PIC 99.

       PROCEDURE DIVISION.
           DISPLAY "Mês (1-12): ".
           ACCEPT WS-MES.

           EVALUATE WS-MES
               WHEN 12
               WHEN 1
               WHEN 2
                   DISPLAY "Inverno"
               WHEN 3 THRU 5
                   DISPLAY "Primavera"
               WHEN 6 THRU 8
                   DISPLAY "Verão"
               WHEN 9 THRU 11
                   DISPLAY "Outono"
               WHEN OTHER
                   DISPLAY "Mês inválido"
           END-EVALUATE.

           STOP RUN.

Exercício 8 · Modularização com paragraphs

Cria programa que faz uma simulação de caixa registadora simples: - MAIN: chama os outros. - INICIALIZAR: zera total, imprime cabeçalho. - ADICIONAR-ITEM: pede preço, adiciona ao total (PERFORM até preço = 0). - FECHAR: imprime total + IVA 23%.

Resposta:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAIXA.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-PRECO     PIC 9(5)V99.
       01 WS-TOTAL     PIC 9(7)V99.
       01 WS-IVA       PIC 9(7)V99.
       01 WS-FINAL     PIC 9(8)V99.

       PROCEDURE DIVISION.
       MAIN.
           PERFORM INICIALIZAR.
           PERFORM ADICIONAR-ITENS.
           PERFORM FECHAR.
           STOP RUN.

       INICIALIZAR.
           DISPLAY "=== CAIXA REGISTADORA ===".
           DISPLAY "Introduz 0 para terminar".
           MOVE 0 TO WS-TOTAL.

       ADICIONAR-ITENS.
           MOVE 1 TO WS-PRECO.    * inicializa não-zero
           PERFORM UNTIL WS-PRECO = 0
               DISPLAY "Preço: "
               ACCEPT WS-PRECO
               IF WS-PRECO > 0
                   ADD WS-PRECO TO WS-TOTAL
                   DISPLAY "  Subtotal: " WS-TOTAL
               END-IF
           END-PERFORM.

       FECHAR.
           COMPUTE WS-IVA = WS-TOTAL * 0.23.
           COMPUTE WS-FINAL = WS-TOTAL + WS-IVA.

           DISPLAY "---".
           DISPLAY "Subtotal: " WS-TOTAL.
           DISPLAY "IVA 23%:  " WS-IVA.
           DISPLAY "TOTAL:    " WS-FINAL.