PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE - EXERCÍCIOS

5
PROGRAMA 1 – PROGRAMA COM MENU, CONVERTE LITROS EM GALÕES E GALÕES EM LITROS. 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID.CONVERSAOLITRGALO. 000300*--------------------------------------------------------------- -- 000700 ENVIRONMENT DIVISION. 000800 DATA DIVISION. 000900 WORKING-STORAGE SECTION. 001000 001100 01 OPCAO PIC 9. 001200 01 LITROS PIC 9(4)V9(2). 001300 01 GALOES PIC 9(4)V9(2). 001300 01 TOTALLITROS PIC 9(4)V9(2). 001300 01 TOTALGALOES PIC 9(4)V9(2). 001300 01 TOTAL PIC ZZZ,ZZZ.ZZ. 001300 01 QUANTIDADE PIC ZZZ,ZZZ.ZZ. 001300 001300 001400 PROCEDURE DIVISION. 001500 PROGRAM-BEGIN. 001600 001700 PERFORM ACEITA-RESPOSTA. 001800 PERFORM EDITA-RESPOSTA. 002000 PROGRAM-DONE. 002100 STOP RUN. 002200 002300 ACEITA-RESPOSTA. 002400 DISPLAY "QUAL A CONVERSAO QUE DESEJA FAZER?". DISPLAY "1 - LITROS -> GALOES". DISPLAY "2 - GALOES -> LITROS". 002500 ACCEPT OPCAO. 002600 002700 EDITA-RESPOSTA. 002800 IF OPCAO = 1 PERFORM LITROSGALOES ELSE IF OPCAO = 2 PERFORM GALOESLITROS. LITROSGALOES. DISPLAY "INTRODUZA A QUANTIDADE DE LITROS: ". ACCEPT LITROS. 002900 COMPUTE TOTALGALOES ROUNDED = LITROS / 3.7854. MOVE LITROS TO QUANTIDADE. MOVE TOTALGALOES TO TOTAL. 003800 DISPLAY "A QUANTIDADE DE "QUANTIDADE" LITROS, CORRESPONDE A " - TOTAL " GALOES".

Transcript of PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE - EXERCÍCIOS

Page 1: PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE  - EXERCÍCIOS

PROGRAMA 1 – PROGRAMA COM MENU, CONVERTE LITROS EM GALÕES E GALÕES EM LITROS.

000100 IDENTIFICATION DIVISION.000200 PROGRAM-ID.CONVERSAOLITRGALO.000300*-----------------------------------------------------------------000700 ENVIRONMENT DIVISION.000800 DATA DIVISION.000900 WORKING-STORAGE SECTION.001000001100 01 OPCAO PIC 9.001200 01 LITROS PIC 9(4)V9(2).001300 01 GALOES PIC 9(4)V9(2).001300 01 TOTALLITROS PIC 9(4)V9(2).001300 01 TOTALGALOES PIC 9(4)V9(2).001300 01 TOTAL PIC ZZZ,ZZZ.ZZ.001300 01 QUANTIDADE PIC ZZZ,ZZZ.ZZ.001300001300001400 PROCEDURE DIVISION.001500 PROGRAM-BEGIN.001600001700 PERFORM ACEITA-RESPOSTA.001800 PERFORM EDITA-RESPOSTA.

002000 PROGRAM-DONE.002100 STOP RUN.002200002300 ACEITA-RESPOSTA.002400 DISPLAY "QUAL A CONVERSAO QUE DESEJA FAZER?". DISPLAY "1 - LITROS -> GALOES". DISPLAY "2 - GALOES -> LITROS".002500 ACCEPT OPCAO.002600002700 EDITA-RESPOSTA.002800 IF OPCAO = 1 PERFORM LITROSGALOES ELSE IF OPCAO = 2 PERFORM GALOESLITROS.

LITROSGALOES. DISPLAY "INTRODUZA A QUANTIDADE DE LITROS: ". ACCEPT LITROS.002900 COMPUTE TOTALGALOES ROUNDED = LITROS / 3.7854. MOVE LITROS TO QUANTIDADE. MOVE TOTALGALOES TO TOTAL.003800 DISPLAY "A QUANTIDADE DE "QUANTIDADE" LITROS, CORRESPONDE A " - TOTAL " GALOES".003100 GALOESLITROS. DISPLAY "INTRODUZA A QUANTIDADE DE GALOES: ". ACCEPT GALOES.002900 COMPUTE TOTALLITROS ROUNDED = GALOES * 3.7854. MOVE GALOES TO QUANTIDADE. MOVE TOTALLITROS TO TOTAL.003800 DISPLAY "A QUANTIDADE DE " QUANTIDADE - " GALOES, CORRESPONDE A "TOTAL " LITROS".

Page 2: PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE  - EXERCÍCIOS

PROGRAMA 2 – PROGRAMA QUE CALCULA E APRESENTA A QUANTIDADE DE LITROS E O VALOR TOTAL A GASTAR PARA PINTAR DETERMINADO EDIFICIO, SENDO DADOS DO EDIFICIO E DA TINTA PEDIDOS AO UTILIZADOR.

000100 IDENTIFICATION DIVISION.000200 PROGRAM-ID.TINTAS.000300*----------------------------------------------------------000400*000500*000600*----------------------------------------------------------000700 ENVIRONMENT DIVISION.000800 DATA DIVISION.000900 WORKING-STORAGE SECTION.001000001100 01 ALTURA PIC S9(5)V99.001200 01 LARGURA PIC S9(5)V99.001300 01 COMPRIMENTO PIC S9(5)V99.001400 01 PRECO_LITRO PIC S9(5)V99.001500 01 M2_TINTA PIC S9(5)V99.001600 01 AREA1 PIC S9(5)V99.001600 01 AREA2 PIC S9(5)V99. 01 AREATOTAL PIC S9(5)V99. 01 LITROS_TINTA PIC S9(5)V99. 01 CUSTO PIC S9(5)V99.001600 01 AREATOTAL1 PIC -9(5).99.001600 01 LITROS_TINTA1 PIC -9(5).99.001600 01 CUSTO1 PIC -9(5).99.

001800 PROCEDURE DIVISION.001900 PROGRAM-BEGIN.002000002100 PERFORM INTRODUCAO-DADOS.002200 PERFORM CALCULA-AREATOTAL.002300 PERFORM EXIBE-RESULTADOS.002400 PROGRAM-DONE.002500 STOP RUN.002600002700 INTRODUCAO-DADOS.002800 DISPLAY "QUAL A ALTURA DO EDIFICIO?".002900 ACCEPT ALTURA.

003100 DISPLAY "QUAL A LARGURA DO EDIFICIO?".003200 ACCEPT LARGURA.

003100 DISPLAY "QUAL O COMPRIMENTO DO EDIFICIO?".003200 ACCEPT COMPRIMENTO.003100 DISPLAY "QUAL O PRECO DO LITRO DE TINTA?".003200 ACCEPT PRECO_LITRO.

DISPLAY "QUAL A COBERTURA DA TINTA POR METRO QUADRADO?".003200 ACCEPT M2_TINTA.003300003400 CALCULA-AREATOTAL.

003600 COMPUTE AREA1 = (LARGURA *ALTURA)*2. COMPUTE AREA2 = (COMPRIMENTO * ALTURA) * 2.

Page 3: PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE  - EXERCÍCIOS

COMPUTE AREATOTAL = AREA1 + AREA2. MOVE AREATOTAL TO AREATOTAL1. COMPUTE LITROS_TINTA = AREATOTAL / M2_TINTA. MOVE LITROS_TINTA TO LITROS_TINTA1. COMPUTE CUSTO = LITROS_TINTA * PRECO_LITRO. MOVE CUSTO TO CUSTO1.

004200 EXIBE-RESULTADOS.004300 DISPLAY "A QUANTIDADE DE TINTA NECESSARIA E: " LITROS_TINTA1 " LITROS". DISPLAY "O CUSTO TOTAL DE TINTA PARA A AREA DE: " AREATOTAL1 " E DE " CUSTO1 " EUROS".

PROGRAMA 3 – ESTE PROGRAMA CRIA UM NOVO FICHEIRO, SE NECESSÁRIO E ADICIONA REGISTOS AO FICHEIRO INTRODUZIDO PELO UTILIZADOR. OS REGISTOS SÃO ESCRITOS NO FICHEIRO E DEPOIS ENVIADOS PARA A IMPRESSORA (ECRÃ).

000100 IDENTIFICATION DIVISION.000200 PROGRAM-ID. TELADD03.000300*-----------------------------------------------------------------000900 ENVIRONMENT DIVISION.001000 INPUT-OUTPUT SECTION.001100 FILE-CONTROL.001200 SELECT OPTIONAL FICHEIRO-TELEFONE001300* ou SELECT FICHEIRO-TELEFONE001400 ASSIGN TO "telefone.dat"001500* ou ASSIGN TO "telefone"001600 ORGANIZATION IS SEQUENTIAL.001700001800 SELECT FICHEIRO-IMPRESSORA001900 ASSIGN TO "result.txt"002000 ORGANIZATION IS LINE SEQUENTIAL.002100002200 DATA DIVISION.002300 FILE SECTION.002400 FD FICHEIRO-TELEFONE002500 LABEL RECORDS ARE STANDARD.002600 01 REGISTO-TELEFONE.002700 05 ULTIMO-NOME PIC X(20).002800 05 PRIMEIRO-NOME PIC X(20).002900 05 NUM-TELEFONE PIC X(15).003000 05 EXTENCAO-TELEF PIC X(5).003100003200 FD FICHEIRO-IMPRESSORA003300 LABEL RECORDS ARE OMITTED.003400 01 REGISTO-IMPRESSORA PIC X(80).003500003600 WORKING-STORAGE SECTION.003700003800* Variáveis para entrada através do ecrã003900 01 ENTRADA-1 PIC X(11) VALUE "Último Nome".004000 01 ENTRADA-2 PIC X(13) VALUE "Primeiro Nome".004100 01 ENTRADA-3 PIC X(15) VALUE "Número Telefone".004200 01 ENTRADA-4 PIC X(8) VALUE "Extenção".004300004400 01 SIM-NAO PIC X.

Page 4: PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE  - EXERCÍCIOS

004500 01 ENTRADA-OK PIC X.004600004700 PROCEDURE DIVISION.004800 MAIN-LOGIC SECTION.004900 PROGRAM-BEGIN.005000005100 PERFORM METODO-ABERTURA.005200 MOVE "S" TO SIM-NAO.005300 PERFORM ADD-REGISTOS005400 UNTIL SIM-NAO = "N".005500 PERFORM METODO-FECHO.005600005700 PROGRAM-DONE.005800 STOP RUN.005900006000* Abertura e Fecho006100006200 METODO-ABERTURA.006300 OPEN EXTEND FICHEIRO-TELEFONE.006400 OPEN OUTPUT FICHEIRO-IMPRESSORA.006500006600 METODO-FECHO.006700 CLOSE FICHEIRO-TELEFONE.006800 MOVE SPACE TO REGISTO-IMPRESSORA.006900 WRITE REGISTO-IMPRESSORA BEFORE ADVANCING PAGE.007000 CLOSE FICHEIRO-IMPRESSORA.007100007200 ADD-REGISTOS.007300 MOVE "N" TO ENTRADA-OK.007400 PERFORM ADQUIRE-CAMPOS007500 UNTIL ENTRADA-OK = "S".007600 PERFORM ADD-ESTE-REGISTO.007700 PERFORM REPETE.007800007900 ADQUIRE-CAMPOS.008000 MOVE SPACE TO REGISTO-TELEFONE.008100 DISPLAY ENTRADA-1 " ? ".008200 ACCEPT ULTIMO-NOME.008300 DISPLAY ENTRADA-2 " ? ".008400 ACCEPT PRIMEIRO-NOME.008500 DISPLAY ENTRADA-4 " ? ".008600 ACCEPT EXTENCAO-TELEF.008700 DISPLAY ENTRADA-3 " ? ".008800 ACCEPT NUM-TELEFONE.008900 PERFORM VALIDA-CAMPOS.009000009100 VALIDA-CAMPOS.009200 MOVE "S" TO ENTRADA-OK.009300 IF ULTIMO-NOME = SPACE009400 DISPLAY "É necessário introduzir o último nome"009500 MOVE "N" TO ENTRADA-OK.009600009700 ADD-ESTE-REGISTO.009800 MOVE REGISTO-TELEFONE TO REGISTO-IMPRESSORA.009900 WRITE REGISTO-TELEFONE.010000 WRITE REGISTO-IMPRESSORA BEFORE ADVANCING 1.010100

Page 5: PROGRAMAÇÃO EM COBOL - FICHEIROS DE INTERATIVIDADE  - EXERCÍCIOS

010200 REPETE.010300 DISPLAY "Quer repetir? (S/N)".010400 ACCEPT SIM-NAO.010500 IF SIM-NAO = "s"010600 MOVE "S" TO SIM-NAO.010700 IF SIM-NAO NOT = "S"010800 MOVE "N" TO SIM-NAO.010900011000