Você está na página 1de 5

PROGRAMA 1 PROGRAMA COM MENU, CONVERTE LITROS EM GALES E GALES 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".
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".

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.
001000
001100 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.
002000
002100 PERFORM INTRODUCAO-DADOS.
002200 PERFORM CALCULA-AREATOTAL.
002300 PERFORM EXIBE-RESULTADOS.
002400 PROGRAM-DONE.
002500 STOP RUN.
002600
002700 INTRODUCAO-DADOS.
002800 DISPLAY "QUAL A ALTURA DO EDIFICIO?".
002900 ACCEPT ALTURA.
003100
003200

DISPLAY "QUAL A LARGURA DO EDIFICIO?".


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.
003300
003400 CALCULA-AREATOTAL.
003600 COMPUTE AREA1 = (LARGURA *ALTURA)*2.
COMPUTE AREA2 = (COMPRIMENTO * ALTURA) * 2.

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 NECESSRIO E ADICIONA REGISTOS AO


FICHEIRO INTRODUZIDO PELO UTILIZADOR. OS REGISTOS SO 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-TELEFONE
001300* ou SELECT FICHEIRO-TELEFONE
001400
ASSIGN TO "telefone.dat"
001500* ou ASSIGN TO "telefone"
001600
ORGANIZATION IS SEQUENTIAL.
001700
001800 SELECT FICHEIRO-IMPRESSORA
001900
ASSIGN TO "result.txt"
002000
ORGANIZATION IS LINE SEQUENTIAL.
002100
002200 DATA DIVISION.
002300 FILE SECTION.
002400 FD FICHEIRO-TELEFONE
002500 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).
003100
003200 FD FICHEIRO-IMPRESSORA
003300 LABEL RECORDS ARE OMITTED.
003400 01 REGISTO-IMPRESSORA PIC X(80).
003500
003600 WORKING-STORAGE SECTION.
003700
003800* Variveis para entrada atravs 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 "Nmero Telefone".
004200 01 ENTRADA-4
PIC X(8) VALUE "Exteno".
004300
004400 01 SIM-NAO
PIC X.

004500 01 ENTRADA-OK
PIC X.
004600
004700 PROCEDURE DIVISION.
004800 MAIN-LOGIC SECTION.
004900 PROGRAM-BEGIN.
005000
005100 PERFORM METODO-ABERTURA.
005200 MOVE "S" TO SIM-NAO.
005300 PERFORM ADD-REGISTOS
005400
UNTIL SIM-NAO = "N".
005500 PERFORM METODO-FECHO.
005600
005700 PROGRAM-DONE.
005800 STOP RUN.
005900
006000* Abertura e Fecho
006100
006200 METODO-ABERTURA.
006300 OPEN EXTEND FICHEIRO-TELEFONE.
006400 OPEN OUTPUT FICHEIRO-IMPRESSORA.
006500
006600 METODO-FECHO.
006700 CLOSE FICHEIRO-TELEFONE.
006800 MOVE SPACE TO REGISTO-IMPRESSORA.
006900 WRITE REGISTO-IMPRESSORA BEFORE ADVANCING PAGE.
007000 CLOSE FICHEIRO-IMPRESSORA.
007100
007200 ADD-REGISTOS.
007300 MOVE "N" TO ENTRADA-OK.
007400 PERFORM ADQUIRE-CAMPOS
007500
UNTIL ENTRADA-OK = "S".
007600 PERFORM ADD-ESTE-REGISTO.
007700 PERFORM REPETE.
007800
007900 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.
009000
009100 VALIDA-CAMPOS.
009200 MOVE "S" TO ENTRADA-OK.
009300 IF ULTIMO-NOME = SPACE
009400
DISPLAY " necessrio introduzir o ltimo nome"
009500
MOVE "N" TO ENTRADA-OK.
009600
009700 ADD-ESTE-REGISTO.
009800 MOVE REGISTO-TELEFONE TO REGISTO-IMPRESSORA.
009900 WRITE REGISTO-TELEFONE.
010000 WRITE REGISTO-IMPRESSORA BEFORE ADVANCING 1.
010100

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.
010900
011000