ENGENHARIA DE PRODUÇÃO ICC 1 – TÉCNICAS DE PROGRAMAÇÃO – 04/06/2009 1. INTRODUÇÃO O que é um programa? Programa constitui uma seqüência lógica de passos para solução de um problema. Um programa pode ser codificado em linguagem de baixo nível (ex: assembly) ou em linguagens de alto nível (ex: Pascal, C, ...). Por exemplo: a linguagem de programação Pascal foi criada por Niklaus With de Technical University em Zurich, para ser uma ferramenta educacional. Programas escritos em Turbo Pascal 7 têm código-fonte com extensão .PAS e devem ser salvos no diretório \BIN. Uma alternativa é utilizar o PascalZim! Neste caso, não é necessário usar a instrução uses fdelay, crt; A execução de programas pode ser feita por dois processos: pela interpretação e pela compilação. Pela interpretação, a avaliação da sintaxe e a execução são feita no mesmo momento ... quando se submete o prgrama para execução. Na compilação, os programas são executados por meio do seguinte esquema: 2. ESTRUTURA DO PROGRAMA program NOME_DO_PROGRAMA; uses fdelay, crt; var { definição de variáveis procedure begin } NOME_DA_PROCEDURE; { se houver ... } ....................................... end; { fim da procedure function begin end; begin } NOME_DA_FUNCTION; { se houver ... ....................................... { fim da function } } { corpo principal do programa } CLRSCR; ................................ aqui se codifica o algoritmo ... aqui se usam comandos FOR, WHILE, REPEAT, READ/READLN, WRITE/WRITELN, IF, CASE ... ................................ READKEY end. { fim do programa } Página 1 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== Comentários: Todo programa começa com a declaração PROGRAM seguido de um nome do programa. Após deve-se declarar as units por meio do comando uses . Declarar as variáveis. O algorítmo em si começa com BEGIN e termina com END. Em princípio, todas as instruções terminam com ; Não se esqueça, para todo BEGIN deverá sempre ter um END. Exemplo: Program example; Uses fdelay, crt; ……………….. Só usado no Turbo Pascal 7 Var x : integer; y : real; Begin {Aqui vai o algorítmo} End. 3. VARIÁVEIS 3.1 - Tipos de VARIÁVEIS Boolean do tipo lógico, ocupa 1 byte, só pode ter os valores True ou False (Verdadeiro ou Falso) Integer do tipo inteiro e numérico, ocupa 2 bytes, seus valores vão de -32768 até 32767, do tipo inteiro Longint do tipo inteiro e numérico, ocupa 4 bytes, valores vão de -2147483648 a 2147483647 Real Shortint do tipo fracionário e numérico, ocupa 6 bytes, seus valores vão de 1E-38 até 1E+38 .... tem vírgula do tipo inteiro e numérico, inteiros de -128 a 127 Word do tipo inteiro e numérico, ocupa 2 bytes, inteiro de 0 a 65535 Byte do tipo inteiro e numérico, ocupa 1 byte, tipo inteiro de 0 a 255 Char do tipo caracter, ocupa 1 byte, tipo alfanumérico, seu conteúdo é qualquer valor da tabela ASCII String do tipo literal e alfanumérico, ocupa de 2 a 256 bytes, seu conteúdo é qualquer valor da tabela ASCII Obs: Em azul os tiposs primitivos utilizados no PascalZim! 3.2 - Outros tipos de VARIÁVEIS Single tipo real com 7 digitos Double tipo real com 15 digitos Extended tipo real com 19 digitos Comp inteiros de -10E18 até 10E18 3.3 - Atribuição de valores às VARIÁVEIS é feita por meio de Ex: K:=0; := Página 2 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 4. UNITs As units são rotinas separadas do programa principal. Para usar uma unit deve se declarar Uses. FDELAY UNIT para corrigir "bug" do Turbo Pascal 7. CRT rotinas de vídeo e som DOS controles do SO GRAPH rotinas gráficas PRINTER define LST como arquivo de texto direcionado para impressora 5. COMANDOS BÁSICOS DE ENTRADA E SAÍDA Comandos básicos: WRITE ou WRITELN READ ou READLN CLRSCR (Clear Screen) GOTOXY READKEY DELAY escreve algo num dispositivo de saída. Se o dispositivo não for especificado o default será a tela do micro. Ex: WriteLn('Isto é uma string e sairá na tela'); Permite a entrada de dados via teclado Ex: Write('Digite um valor para X: '); Readln(x); Permite limpar a tela, posicionando o cursor no canto superior esquerdo --- posição (0,0). Posiciona o cursor em qualque parte da tela Sintaxe: GOTOXY(coluna,linha); Possibilita a visualização do resultado do processamento, quando inserida da última instrução END. do programa. Sintaxe: READKEY END. Permite uma pausa no programa em milisegundos. (Este comando funciona conforme o clock do computador, sendo diferente em cada tipo de computador). Sintaxe: DELAY(3000); 6. ESTRUTURAS DE CONTROLE 6.1 – SEQÜÊNCIA Página 3 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 6.2 - ESTRUTURAS CONDICIONAIS As estruturas condicionais imnpõem uma condição para que uma tarefa seja realizada. 6.2.1 - Seleção a um ramo ------ IF.. Then.. (Se.. Então.. ) A instrução só é executada se a condição for satisfeita. ou, quando a condição sendo verdadeira, cabe executar mais de uma instrução (C1 e C2) 6.2.2 - Seleção a dois ramos ------ IF.. Then.. Else (Se.. Então.. Senão) A instrução C1 é excutada se a a condição for satisfeita. Caso contrário, a instrução C2 é executada. ou, quando a condição sendo verdadeira, cabe executar mais de uma instrução (C1 e C2) e quando a condição sendo falsa, cabe executar mais de uma instrução (C3 e C4). Página 4 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 6.2.3 - Estrutura CASE .... substitui um ninho de IF´s CASE constitui um seletor de opções, executando a opção que for igual a expressão. 6.3 - ESTRUTURAS DE REPETIÇÃO - LOOP Uma estrutura de repetição repete um bloco até que a condição seja satisfeita. 6.3.1 - FOR ... DO ... 6.3.1.1 – FOR ... TO ... DO Exemplo: Página 5 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 6.3.1.2 – FOR ... DOWNTO ... DO Exemplo: 6.3.2 - REPEAT ... UNTIL ... 6.3.3 - WHILE ... DO ... Página 6 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 7. EXERCÍCIOS 1. Analise o quadro abaixo, referente às estruturas de controle repeat ... until e while ... do. NÚMERO I II III IV V VI DESCRIÇÃO O teste de controle é realizado no início da estrutura de controle. O teste de controle é realizado no fim da estrutura de controle. A condição de saída do loop ocorre quando o teste é FALSE. A condição de saída do loop ocorre quando o teste é TRUE. Se o resultado do teste for TRUE, a execução do programa permanece no loop. Se o resultado do teste for FALSE, a execução do programa permanece no loop. a. Quando se trata da estrutura de controle repeat ... until ..., são afirmativas verdadeiras as de números: ____, _____ e _____. b. Quando se trata da estrutura de controle while ... do ..., são afirmativas verdadeiras as de números: ____, _____ e _____. 2. Analise o programa abaixo: program prg71; uses fdelay, crt; var B : boolean; S : string; begin { corpo do programa } CLRSCR; B:=FALSE; S:=’ENGENHARIA DE PRODUÇÃO’; repeat writeln(S); B:=NOT B; until( NOT B ); READKEY end. A variável S será impressa uma quantidade de vezes igual a ______ 3. Observe o programa abaixo. program ENGPROD; uses fdelay, crt; var N, K, Y : integer; begin clrscr; N:=4; Y:=10; for K:=2 to N do Y:=Y * K; writeln(Y); readkey; end. Ao final do processamento, será impresso para a variável Y o seguinte valor: _________ Página 7 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== 4. Analise o programa abaixo: program prg72; uses fdelay, crt; var X, I : integer; B : boolean; begin { corpo do programa } CLRSCR; X:=1; for I:=0 to 7 do begin X:=X+1; if (X MOD 2) = 0 then B:=TRUE else B:=FALSE; end; S:='UNIVERSO'; writeln(X:3,I:3,S:20); READKEY end. 5. Analise o programa abaixo: program prg73; uses fdelay, crt; var A, B, X, Y : integer; begin { corpo do programa } CLRSCR; write('Digite dois números : '); readln(X,Y); A:=X; B:=Y; while A < > B do if A > B then A:=A - B else B:=B - A; writeln('O valor de A e igual a ',A:3); READKEY end. Ao final do processamento, as variáveis X, I e B serão iguais, respectivamente, a ___, ___ e __________ Ao final do processamento, as variáveis X, I e B serão iguais, respectivamente, a ___, ___ e __________ 6. Elaborar um programa em Turbo Pascal que imprima o fatorial de todos os números inteiros entre 0 e 5, inclusive, conforme abaixo: NUMERO FATORIAL 1 1 2 2 3 6 4 24 5 120 Solução 1 : Utilizando a estrutura for ... to ... PROGRAM FATORIAL_FOR; USES FDELAY, CRT; VAR K, N, FAT : INTEGER; BEGIN CLRSCR; WRITELN('NUMERO FATORIAL'); FOR N:=1 TO 5 DO BEGIN FAT:=1; FOR K:=2 TO N DO FAT:=FAT * N; WRITELN(N:3,FAT:10); END; READKEY; END. Página 8 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== Solução 2 : Utilizando a estrutura REPEAT... UNTIL ... PROGRAM FATORIAL_REPEAT; USES FDELAY, CRT; VAR K, N, FAT : INTEGER; BEGIN CLRSCR; WRITELN('NUMERO FATORIAL'); N:=0; REPEAT N:=N+1; FAT:=1; K:=0; REPEAT K:=K+1; IF K > 1 DO FAT:=FAT * K; UNTIL K = N; WRITELN(N:3,FAT:10); UNTIL N = 5; READKEY END. Solução 3 : Utilizando a estrutura REPEAT... UNTIL ... e FOR … TO … PROGRAM FATORIAL_REPEAT; USES FDELAY, CRT; VAR K, N, FAT : INTEGER; BEGIN CLRSCR; WRITELN('NUMERO FATORIAL'); N:=0; REPEAT N:=N+1; FAT:=1; FOR K:=2 TO N DO FAT:=FAT * N; WRITELN(N:3,FAT:10); UNTIL N = 5; READKEY END. Solução 4 : Utilizando a estrutura WHILE ... DO... PROGRAM FATORIAL_WHILE; USES FDELAY, CRT; VAR K, N, FAT : INTEGER; BEGIN CLRSCR; WRITELN('NUMERO FATORIAL'); N:=0; WHILE N < 5 DO BEGIN N:=N+1; FAT:=1; K:=0; WHILE K < N DO BEGIN K:=K+1; IF K > 1 DO FAT:=FAT * K; END; WRITELN(N:3,FAT:10); END; READKEY END. Página 9 de 10 ICC1 - TÉCNICAS DE PROGRAMAÇÃO – PASCALZIM! ==================================================================================================== Solução 5 : Utilizando a estrutura WHILE... DO ... e FOR … TO … PROGRAM FATORIAL_WHILE; USES FDELAY, CRT; VAR K, N, FAT : INTEGER; BEGIN CLRSCR; WRITELN('NUMERO FATORIAL'); N:=0; WHILE N< 5 DO BEGIN N:=N+1; FAT:=1; FOR K:=2 TO N DO FAT:=FAT * N; WRITELN(N:3,FAT:10); END; READKEY END. FIM Página 10 de 10