APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO - PDF
Download "APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO"
Manuela de Santarém Paranhos
1 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO CURITIBA JANEIRO/2002
2 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO ELABORAÇÃO: PROFESSOR MARCELO RUDEK COLABORAÇÃO: GELSON LUIZ CARNEIRO ADRIANO ZELAZOWSKI PEREIRA CURITIBA JANEIRO/2002 1
3 Capítulo 1 APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO...0 APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO...1 I. CONTRATO DIDÁTICO...8 I. INFORMAÇÕES GERAIS...8 II. SISTEMA DE AVALIAÇÃO...8 III. O PROGRAMA DE APRENDIZAGEM (P.A.)...9 II. APRESENTAÇÃO DO PROGRAMA DE APRENDIZAGEM (P.A.)...10 I. CONTEÚDO PROGRAMÁTICO:...10 II. BIBLIOGRAFIA RECOMENDADA: INTRODUÇÃO À PROGRAMAÇÃO: ALGORITMOS EXEMPLOS ALGORITMOS EM PORTUGOL PORTUGOL VARIÁVEIS DECLARAÇÃO DE VARIÁVEIS Tipos de Variáveis Identificadores de Variáveis CONSTANTES ESTRUTURA DO ALGORITMO EM PORTUGOL COMANDO DE ATRIBUIÇÃO (<-) OPERADORES ARITMÉTICOS ENTRADA E SAÍDA DE DADOS REGRAS PARA ESCREVER ALGORITMOS EM PORTUGOL EXERCÍCIOS COMANDOS DE CONTROLE DESVIO CONDICIONAL Operadores Lógicos Operadores Relacionais Desvio Condicional Simples Desvio Condicional Composto LAÇOS DE REPETIÇÃO (LOOP) Comando: enquanto/faça Comando: para / até / faça PROGRAMAÇÃO EM LINGUAGEM C INTRODUÇÃO A PROGRAMAÇÃO EM LINGUAGEM C
4 Capítulo DECLARAÇÃO DE VARIÁVEIS COMANDO DE ATRIBUIÇÃO: BLOCOS DE COMANDOS: BORLAND C++ BUILDER O AMBIENTE DE DESENVOLVIMENTO A INTERFACE DE DESENVOLVIMENTO Barra de Componentes Formulário (form) Barra de Propriedades A CRIAÇÃO DE PROGRAMAS...33 A) ENTRADA DE DADOS...34 B) ATRIBUIÇÃO...35 C) SAÍDA DE DADOS...35 E) OPERADORES RELACIONAIS PASSOS PARA CRIAR UMA APLICAÇÃO EM C...35 a) Abrindo o C++ Builder...36 b) Adicionando Formulário...36 c) Inserindo Componentes no Formulário...36 d) Codificação do Programa...37 e) Compilando um Programa...38 f) Executando um Programa...38 g) Salvando o Programa EXERCÍCIOS ESCOPO DE VARIÁVEIS VARIÁVEIS LOCAIS...40 EXEMPLO VARIÁVEIS GLOBAIS DESVIO CONDICIONAL EM C DESVIO CONDICIONAL SIMPLES DESVIO CONDICIONAL COMPOSTO IF S ANINHADOS EXEMPLO...43 SOLUÇÃO SEM O USO DE IF EXERCÍCIO LAÇOS DE REPETIÇÃO EM C LOOP PARA/FAÇA (FOR) LOOP ENQUANTO/FAÇA (WHILE) LOOP FAÇA/ENQUANTO (DO/WHILE) EXEMPLO EXERCÍCIOS PROCEDIMENTOS EM C DEFINIÇÃO EXEMPLO PROTÓTIPO PARÂMETROS EXEMPLO FUNÇÂO EM C DEFINIÇÃO
5 Capítulo DECLARAÇÃO PARÂMETROS E RETORNO EXEMPLO EXEMPLO EXERCÍCIOS INCREMENTOS E DECREMENTOS INCREMENTO/DECREMENTO A POSTERIORI INCREMENTO/DECREMENTO A PRIORI EXERCÍCIO ATRIBUIÇÃO COMPOSTA EXERCÍCIO ATRIBUIÇÃO MÚLTIPLA EXEMPLO OPERADOR INTERROGAÇÃO (?) NÚMEROS ALEATÓRIOS SINTAXE DO COMANDO EXEMPLO COMANDO SWITCH/CASE SINTAXE DO COMANDO EXEMPLO TIMER O COMPONENTE TIMER NO C++ BUILDER AS PROPRIEDADES DO TIMER EXEMPLO EXERCÍCIO ESTRUTUAS HOMOGÊNEAS DE DADOS MATRIZES UNIDIMENSIONAIS (VETORES) EXEMPLOS INDEXAÇÃO EXEMPLO EXERCÍCIO ORDENAÇÃO DE VETORES ALGORITMO DE ORDENAÇÃO (BOLHA) EXERCÍCIO STRINGS EXEMPLO EXEMPLO COPIANDO STRINGS COMPARAÇÃO DE STRINGS TAMANHO DE STRINGS COMPARAÇÃO DE ELEMENTOS DA STRING CONVERSÃO DE TIPOS convertendo valores numéricos para caracter convertendo string para valores numéricos EXERCÍCIOS MATRIZES
6 Capítulo MATRIZES BIDIMENSIONAIS MATRIZES MULTIDIMENSIONAIS MATRIZES DE STRINGS EXERCÍCIOS ) DESENVOLA UM PROGRAMA QUE PERMITA MOVIMENTAR O ELEMENTO 1 DA MATRIZ ABAIXO EM UMA DIREÇÃO ALEATÓRIA A CADA 1S. O MOVIMENTO DO ELEMENTO NÃO PODE EXTRAPOLAR OS LIMITES DA MATRIZ PONTEIROS EM C DEFINIÇÃO DECLARAÇÃO DE UM PONTEIRO EXEMPLOS PONTEIROS PARA MATRIZ VETORES DE PONTEIROS EXEMPLO EXERCÍCIO EXEMPLO EXERCÍCIOS ALOCAÇÃO DINÂMICA DE MEMÓRIA INTRODUÇÃO COMANDO DE ALOCAÇÃO EXEMPLO DE ALOCAÇÃO USANDO O COMANDO MALLOC() MELHORANDO O USO DE PONTEIROS EXERCÍCIOS PORTABILIDADE EXEMPLO DO USO DE SIZEOF EXERCÍCIOS ARQUIVOS EM C PONTEIRO DE ARQUIVO ABRINDO ARQUIVOS ARQUIVOS TIPO TEXTO ARQUIVOS BINÁRIOS ABRINDO UM ARQUIVO PARA ESCRITA OBSERVAÇÕES ABRINDO UM ARQUIVO PARA LEITURA FECHANDO UM ARQUIVO COMANDOS DE ESCRITA E LEITURA FPUTC() FGETC() EXERCÍCIO COM FPUTC() E FGETC() GRAVAÇÃO DE STRINGS COM FPUTS()
7 Capítulo LEITURA DE STRINGS COM FGETS() EXERCÍCIOS COM FPUTS() E FGETS() LEITURA COM FREAD() GRAVAÇÃO COM FWRITE() GRAVAÇÃO COM FPRINTF() LEITURA COM FSCANF() EXERCÍCIOS REGISTROS DEFINIÇÃO INICIALIZAÇÃO EXEMPLO EXEMPLO ACESSO AOS ELEMENTOS DA ESTRUTURA EXERCÍCIO MATRIZES DE ESTRUTURAS EXEMPLO EXERCÍCIO USO DE TYPEDEF EXEMPLO EXEMPLO GRAVAÇÃO E LEITURA DE REGISTROS EXEMPLO EXERCÍCIO PONTEIROS PARA REGISTROS EXEMPLO GRÁFICOS EM C INTRODUÇÃO DESENHANDO LINHAS USANDO O PAINTBOX COMPONENTE PANEL DESENHANDO RETÂNGULOS DESENHANDO ELIPSES DESENHANDO PONTOS (PIXELS) EXEMPLO EXERCÍCIOS LISTAS LINEARES FILA DEFINIÇÃO OBJETIVO EXEMPLO
8 Capítulo FILA CIRCULAR PILHA DEFINIÇÃO EXEMPLO EXERCÍCIOS LISTAS ENCADEADAS EXEMPLO EXERCÍCIO EXEMPLO OPERAÇÕES COM LISTA ENCADEADA EXEMPLO LISTAS DUPLAMENTE ENCADEADAS EXEMPLO EXEMPLO RECURSIVIDADE INTRODUÇÃO EXEMPLO EXERCÍCIOS EXERCÍCIOS COM VETORES EXERCÍCIOS COM MATRIZES EVENTOS DE FORMULÁRIO E VARIÁVIES EXTERNAS EXERCÍCIO PROPOSTO LISTAGEM DO PROGRAMA UMEDIA1.CPP UMEDIA.CPP ROTINAS DE ORDENAÇÃO COMPONENTES DO C++ BUILDER E SUAS PRINCIPAIS PROPRIEDADES BITBTN PRINCIPAIS PROPRIEDADES EXEMPLO CHECKBOX PRINCIPAIS PROPRIEDADES EXEMPLO COMBOBOX PRINCIPAIS PROPRIEDADES EXEMPLO
9 Capítulo LISTBOX PRINCIPAIS PROPRIEDADES EXEMPLO PAGECONTROL PRINCIPAIS COMANDOS EXEMPLO RADIOBUTTON PRINCIPAIS PROPRIEDADES EXEMPLO RADIOGROUP PRINCIPAIS PROPRIEDADES EXEMPLO SCROLLBAR PRINCIPAIS PROPRIEDADES EXEMPLO SPEEDBUTTON PRINCIPAIS PROPRIEDADES EXEMPLO STRINGGRID PRINCIPAIS PROPRIEDADES EXEMPLO TABCONTROL PRINCIPAIS PROPRIEDADES EXEMPLO
10 Capítulo 1 I. Contrato Didático i. INFORMAÇÕES GERAIS Todas as aulas (teoria e prática) serão em laboratório; então todos deverão estar familiarizados com o manuseio dos computadores, pois o conteúdo da aula será fornecido pela internet através do endereço Trazer disquetes para armazenar os trabalhos de aula; Quem necessitar pode (e deve) usar os laboratórios da PUC para aprender a usar o computador; cada laboratório possui um monitor responsável que pode ajudar nas dúvidas, fora dos horários de aula; Observar as normas de utilização do laboratório e das aulas de TP1, principalmente em relação ao zelo pelos equipamentos e atenção às atividades de aula; Informações sobre o curso de Engenharia de Controle e Automação (ECA) e de atividades do Laboratório de Automação e Sistemas (LAS) podem ser obtidas diretamente no site do LAS através do endereço ii. SISTEMA DE AVALIAÇÃO A avaliação é contínua durante todo o curso. Será composta de provas, trabalhos, exercícios em sala (participação); A nota semestral será composta de 3 notas parciais:, sendo: o 1.ª parcial : prova (80%) + exercícios (20%); o 2.ª parcial: prova (60%) + exercícios (10%) + trabalhos (30 %); o 3.ª parcial: prova (50%) + exercícios (20%) + trabalhos (30 %); OBS: a forma de avaliação das parciais, pode variar de acordo com o andamento das aulas e nível de aprendizado0 da turma. Os trabalhos serão divulgados na minha página; Trabalhos entregues com atraso não serão cosiderados, ou terão nota reduzida (2,0 pts por dia de atraso), de acordo com critério do professor. Faltas: no máximo 12 faltas (4 dias de aula). Mais de 12 faltas o aluno estará automaticamente reprovado por falta, independente das notas que possua. 8
11 Capítulo 1 iii. O PROGRAMA DE APRENDIZAGEM (P.A.) Este programa de aprendizagem explora o estudo de algoritmos e programação em linguagem C. Para aprovação neste semestre o aluno deverá estar apto a raciocinar e desenvolver a sua capacidade de abstração, para a criação de algoritmos e programas elementares. As técnicas de programação serão vistas através da utilização de uma pseudolinguagem em português, denominada "Portugol". Assim, o aluno poderá escrever algoritmos e aplicar as técnicas de desenvolvimento para serem usadas com qualquer linguagem de programação. Para este P.A., será utilizada a linguagem C padrão, em ambiente Windows. Na seção seguinte será apresentado o conteúdo programático de Técnicas de Programação I e II (TPI e TPII ). 9
12 Capítulo 1 II. Apresentação do Programa de Aprendizagem (P.A.) i. CONTEÚDO PROGRAMÁTICO: - Conceitos de Informática e Programação;. Princípios de funcionamento;. Sistemas Operacionais (DOS e WINDOWS );. Sistemas Numéricos;. Memória e Dispositivos de Armazenamento;. Linguagens de Programação; - Algoritmos: Introdução; - Algoritmos: Portugol; - Introdução a Linguagem C : Principais comandos e programação para Windows; - OBS: Conteúdo das aulas em ii. Bibliografia Recomendada: 1. Algoritmos e Estruturas de Dados; Guimarães e Lages; LTC Livros Técnicos e Científicos. 2. Estruturas de Dados Usando C; A. Tanenbaum; Makron Books 3. Dominando Algoritmos com C; Kyle Loundon; Ed. Ciência Moderna. 4. C Completo e Total; Herbert Schildt; Makron Books; 5. C A Linguagem de Programação Padrão Ansi; Brian W. Kerninghan, Dennis M. Ritchie; Editora Campus; 6. C++ Builder 5 - Guia Prático; César A Mateus. Ed. Érica (www.erica.com.br); 7. C++ Builder 5 Developer s Guide; J. Hollinworth, D. Butterfield, et al. Ed. SAMS; 8. C Completo e Total; Herbert Schildt; Makron Books; 9. Internet. 10
13 Capítulo 1 1. INTRODUÇÃO À PROGRAMAÇÃO: ALGORITMOS Várias definições de algoritmos estão presentes na literatura (ver bilbliografia indicada). De forma geral um algoritmo pode ser definido como: Um algoritmo representa de forma estruturada, um padrão de comportamento de eventos ou sequência de ações, que levam a um resultado esperado. Resumindo: algoritmo = como definir o problema, esquematizar, exercício do raciocínio; técnicas de programação = como operacionalizar, recursos, exercício da implementação Exemplos a) Seqüência de ações para chegar ao trabalho/universidade: Acordar levantar tomar café pegar o ônibus Ou pegar o carro chegar ao destino Note que, para cada ação acontecer, é necessário que a ação imediatamente anterior tenha sido executada. Note também que, cada ação pode conter outros eventos associados (outros algoritmos). b) Manuais de montagem e utilização de equipamentos; c) Qual o padrão de comportamento utilizado para gerar a sequência abaixo? 1, 5, 9, 13, 17, 21, resposta: 11
14 Capítulo ALGORITMOS EM PORTUGOL Como no item 1 "... um algoritmo é de forma geral, uma descrição passo a passo de como um problema pode ser solucionado. A descrição deve ser finita, e os passos devem ser bem definidos sem ambiguidades" [Terada]. A razão da existência do algoritmo vem da dissonância entre um estado desejado e aquele observado na realidade. Algoritmo não é a solução de um problema, mas é o meio de obtê-la. A resolução de um problema envolve vários parâmetros que devem ser organizados através de alguma técnica formal. As técnicas de desenvolvimento estruturado de algoritmos, tem o objetivo de: Facilitar o desenvolvimento de algoritmos; Facilitar o seu entendimento pelos operadores; Antecipar a correção; Facilitar manutenção e modificações; Permitir que o desenvolvimento seja feita por uma equipe de pessoas. Uma técnica formal afasta a possibilidade de uma ambiguidade. Ou seja, a partir de dadas condições iniciais a execução do algoritmo será realizada por um mesmo "caminho" (sequência de ações), que deve resultar num mesmo estado final. Uma destas técnicas é o portugol PORTUGOL Portugol é uma pseudolinguagem que permite ao programador pensar no problema em si e não no equipamento que irá executar o algoritmo. Devem ser considerados a sintaxe (em relação à forma) e a semântica (em relação ao conteúdo ou seu significado). Em portugol a sintaxe é definida pela linguagem e a semântica depende do significado que quer se dar ao algoritmo. No portugol e nas linguagens de programação, basicamente têm-se comandos e variáveis que operacionalizam a execução de um algoritmo. Estes comandos são 12
15 Capítulo 1 executados sequencialmente, de forma que um comando só será executado após a finalização do comando anterior. A estrutura de um algoritmo em portugol pode ser dada como: Exemplo: início <declarações de variáveis> <comandos> fim 1.4. Variáveis Declaração de Variáveis Uma variável é um local (área na memória do computador) que armazena um tipo específico de conteúdo. Uma variável contém um valor que se modifica durante a execução do programa. A variável possui um identificador (nome), que pode ser representado da seguinte forma: 13
16 Capítulo Tipos de Variáveis Variáveis são componentes das linguagens de programação, que identificam os valores que estão sendo manipulados pelos programas. Uma variável, como o próprio nome sugere, contém valores que variam de acordo com a execução do programa. Uma variável deve possuir um tipo específico. As variáveis em portugol, são divididas em 4 tipos principais, (embora na linguagem C existam modificações para estes tipos principais). No portugol, os tipos básicos de variáveis são: Inteiro: Qualquer número inteiro (negativo, nulo ou positivo). Exemplo: -100, 0, 1, 2, Real: Qualquer número real, nulo ou positivo. Exemplo: -10, -1.5, 11.2, 0,1, 2, 50. Caracter: Caracteres alfanuméricos. Exemplo: casa, Win31, 123, alfa#2, etc... Lógico: valor lógico verdadeiro ou falso Exemplo: x > y? Exemplos: inteiro: valor; // a variável valor é do tipo inteiro real: media; // a variável media é do tipo real caracter: nome_aluno; // a variável nome_aluno é do tipo caracter lógico: maior; // a variável maior é do tipo booleano Identificadores de Variáveis O identificador de uma variável, se refere ao nome de como ela vai ser conhecida no programa. È importante não esquecer que: a) Não é possível definir variáveis de diferentes tipos com o mesmo identificador (nome); O exemplo: real A; inteiro A; causaria erro na programação, mas pode ser 14
17 Capítulo 1 usado real A1; inteiro A2; ou normalmente um nome mais significativo, como real media, inteiro valor, caracter nome, etc. b) Tomar alguns cuidados em relação à sintaxe da linguagem, por exemplo, não é possível ter identificador como: caracter?nome, real valor*, inteiro 1x,. c).letras maiúsculas e minúsculas são tratadas de forma diferente, então Media é diferente de media, como também de MEDIA. Cada variável definida no programa usa um local da memória, que é acessada através do nome dado a variável. O espaço de memória ocupado pelo conteúdo da variável, depende do tamanho destes tipos de dados, que variam de acordo com o tipo do processador a com a implementação do compilador. Como referência inicial para este estudo sobre variáveis, pode-se considerar pelo ANSI C, o seguinte: Tipo Inteiro com 2 bytes; Tipo real com 4 bytes; Tipo caracter com 1 byte; Exemplo: Pode-se supor a memória como uma matriz, como a figura abaixo, onde cada célula possui tamanho de 1 byte (8 bits): área ocupada por outros programas. A B Para armazenar o valor inteiro A= 1, necessita-se de 2 bytes (1 inteiro = 2 bytes na memória * ); Para armazenar o valor real B= 1, necessita-se de 4 bytes (1 real = 4 bytes na memória * ); * no C ANSI; no C++ Builder os tamanhos das variáveis são diferentes. 15
18 Capítulo Constantes Uma constante é um valor fixo, que não se modifica ao longo do tempo, durante a execução do programa. Em algoritmos representaremos constantes pelo tipo const, constante ou #define (eventualmente, na elaboração dos algoritmos, alguns elementos da linguagem C podem ser escritos no algoritmo). Exemplo: const M 10; 1.5. Estrutura do Algoritmo em Portugol Comando de Atribuição (<-) A sintaxe do comando é dada por: Exemplos: a) atribuição de um valor constante inteiro valor; valor <- 10; b) atribuição entre variáveis inteiro valor; inteiro x; x <- 10; valor <- x; c) resultado de expressões: inteiro valor; inteiro x, y; x <- 10; y <- 5; valor <- x + y * 2; 16
19 Capítulo Operadores Aritméticos Os símbolos das operações básicas são: A multiplicação é dada através do operador * (asterisco); Exemplo: z <- x * y; A soma é realizada através do operador + ; Exemplo: z <- x + y; A subtração é dada através do operador -; Exemplo: z <- x - y; A divisão para real será dada por / ; Exemplo: z <- x / y; A divisão para inteiro será dada por div ; Exemplo: z <- x div y; O resto de uma divisão é dada pelo comando mod. Exemplo: z <- x mod y; O cálculo de x y é dado pelo símbolo ^. Exemplo: z <- x^y; A raiz de uma valor é extraída através do comando raiz(). Exemplo: z <- raiz(x); Exemplos a) Desenvolva um algoritmo em portugol para somar dois valores inteiros (10 + 5) inicio inteiro x,y,z; x = 10; y = 5; z <- x + y; fim Reservar 3 espaços de memória do tipo inteiro, chamados x, y e z. Atribuição de valores iniciais às variáveis. O resultado da soma de x + y será armazenado no espaço de memória z 17
20 Capítulo 1 Obs: - O incoveniente deste algoritmo é que sempre fornecerá o mesmo resultado, o que não é interessante. De maneira mais correta, os valores de x e y podem ser fornecidos pelo usuário, permitindo ao algoritmo que efetue a soma de dois números quaisquer. - Neste exemplo podemos observar que o resultado da soma de x + y será armazenado em z. Como o usuário ficará sabendo da resposta? É necessário usar comandos de escrita, para apresentar os resultados Entrada e Saída de Dados Na construção de algoritmos, é conveniente que o usuário possa informar dados externos, para serem operados pelo programa. Assim, um programa pode receber um dado informado por um operador através de um comando de leitura. Da mesma forma, pode ser necessário conhecer o resultado de determinada operação executada pelo computador, então será necessária uma forma de exibir os dados. Cada linguagem tem uma forma específica para entrada e saída de dados. Em algoritmos usaremos os comandos genéricos leia() e escreva(), para realizar a interface com o usuário. Exemplo: início real A, B, C; leia(a); leia(b); c <- A + B; escreva(b); fim Lê os valores fonecidos pelo usuário e armazena em A e B. Apresenta a resposta (tela, impressora, arquivo, etc) 18
21 Capítulo Regras para escrever algoritmos em portugol Incluir comentários pelo menos nas linhas mais importantes do programa; Usar nomes significativos para as variáveis e constantes, que possam identificar o conteúdo; Grifar as palavras chaves do portugol; Alinhar os comandos facilita a legibilidade do algoritmo e reduz a possibilidade de erros Exercícios 1 Desenvolva um algoritmo em portugol para calcular x y. Os valores de x e y serão fornecidos pelo usuário do programa; 2 Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usuário. [ V = 4 / 3 π R 3 ] 3 Desenvolva um programa que transforme um valor de temperatura fornecido pelo usuário, de Farenheit ( F ) para Graus Celcius ( ºC ). [V = 5 / 9 (F 32)] 4 Desenvolva um algoritmo para calcular a média entre 4 valores fornecidos pelo usuário. 5 Desenvolva um algoritmo para encontrar as raízes de uma equação do tipo Ax 2 + Bx + C Comandos de Controle Os comandos de controle permitem alterar a direção tomada por um programa (desvio), ou fazer com que partes específicas de um algoritmo seja executada mais de uma vez (loop) Desvio Condicional Muitas vezes será necessário desviar a execução do programa segundo uma condição. (Exemplo: ir a universidade de carro ou de ônibus?). Para se testar condições é necessário utilizar operadores lógicos e relacionais Operadores Lógicos 19
22 Capítulo 1 Os operadores "e", "ou" e "não" permitem realizar a combinação lógica de variáveis do tipo booleana (lógico). Para isto utilizam-se as tabelas verdade: Var1 Var2 E Var1 Var2 OU Var1 Não V V V V V V V F V F F V F V F V F V F F V V F F F F F F Operadores Relacionais Permitem realizar a comparação de conteúdos das variáveis: A igualdade é dada por = ; Maior ou igual, pelo símbolo >=; A desigualdade é dada por <> ; Menor ou igual, pelo símbolo <=; Maior que, pelo símbolo >; Não!; Menor que, pelo símbolo <; Desvio Condicional Simples Para que a execução de um algoritmo seja desviada para uma outra ação, é necessário um comando de desvio. Este comando é dado pelas palavras reservadas se e fim se. Dentro deste bloco podemos ter vários comandos de atribuição, operações lógicas e aritméticas, e também novos blocos de desvio condicional. se (condição) então fim se lista de comandos... 20
23 Capítulo 1 Desvio Condicional Simples início inteiro A, B; A <- 100; B <- 20; se A > B então A <- B; B <- 0; fim se fim Exercícios 1 Desenvolva um algoritmo em portugol para calcular x y. Os valores de x e y serão fornecidos pelo usuário do programa, e o maior valor deve estar em x e o menor em y; 2 Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usuário. Observe que R não pode ser menor que 0 (zero). [ V = 4 / 3 π R 3 ]. 3 Desenvolva um programa que transforme um valor de temperatura fornecido pelo usuário, de Farenheit ( F ) para Graus Celcius ( ºC ), ou Graus Celcius para Farenheit, de acordo com uma opção fornecida pelo usuário. [V = 5 / 9 (F 32)] 4 Desenvolva um algoritmo para encontrar as raízes de uma equação do tipo Ax 2 + Bx + C. Observe que o valor de A não pode ser 0 (zero) e o valor do delta não pode ser menor que Desvio Condicional Composto Neste caso as condições, verdadeiro ou falso, podem gerar ações através de um único comando de desvio condicional, adicionando-se o operador senão na estrutura condicional, como apresentado abaixo: se (condição) então lista de comandos... senão lista de comandos... fim se 21
24 Capítulo 1 Desvio Condicional Composto... se A > B então A <- B; B <- 0; senão B <- A; A <- 1; fim se... Exercícios 1 Desenvolva um algoritmo que apresente como resposta se um valor inteiro fornecido pelo usuário é par ou ímpar; 2 Dado o gráfico abaixo, testar se um valor T qualquer fornecido pelo usuário, pertence ao intervalo T 0 T T 1. Dados T 0 = 5, T 1 = 10, V 0 = 1, V 1 = 2; V V1 V0 T0 T1 T 3 Dado o gráfico do exercício 2, desenvolva um algoritmo que apresente o valor de V para um dado valor de T, fornecido pelo usuário. 4 Modifique os exercícios 3 e 4 do item para utilizar um desvio condicional composto, se for o caso. 22
25 Capítulo Laços de Repetição (loop) Uma sequência de ações é repetida por um número específico de vezes, até que uma condição seja satisfeita. Enquanto a condição for verdadeira, as instruções serão executadas. O laço de repetição também pode ser chamado de loop. Exemplo 1: Durante uma semana, um mês, etc, vc pode realizar a mesma seqüência de ações, como no exemplo: 1 º Dia Acordar levantar tomar café pegar o ônibus Ou chegar ao destino pegar o carro 2 º Dia Acordar levantar tomar café pegar o ônibus Ou chegar ao destino pegar o carro... N ésimo Dia Acordar levantar tomar café pegar o ônibus Ou pegar o carro chegar ao destino Como as ações se repetem durante um período ou até que um evento ocorra (chegar ao fim de semana), pode-se melhorar escrita da sequência do exemplo acima, como: 23
26 Capítulo 1 Exemplo 2: Enquanto ( não chegar ao fim de semana) faça Acordar levantar tomar café pegar o ônibus Ou pegar o carro chegar ao destino Exemplo 3: Enquanto ( dia < N) faça Acordar levantar tomar café pegar o ônibus Ou pegar o carro chegar ao destino Então, pode-se observar que as construções dos exemplos 2 e 3, representam as N repetições do exemplo 1. Em termos práticos da programação, a forma dos exemplos 2 e 3, de escrever ações que se repetem, são corretas. A forma de escrever as ações do exemplo 1 que se repetem é incorreta, apesar de levar o mesmo resultado, pois imagine reescrever as mesmas ações para 365 dias, ou mais Comando: enquanto/faça Em portugol, escreve-se o comando enquanto / faça, da forma apresentada abaixo. Note que se forma um bloco de comandos, delimitado ente o início e o fim do loop. Veja o exemplo: enquanto (condição) faça fim enquanto... lista de comandos;... A condição se refere a um critério de parada do loop, ou seja, até quando o loop vai ser executado. Um ou mais comandos que serão executados enquanto a condição for verdadeira. 24
27 Capítulo 1 Suponha os algoritmos abaixo que calculam o valor de x 10, sendo x fornecido pelo usuário. Em termos de programação, pode-se ver a diferença na escrita dos programas a seguir, com e sem o uso de um laço de repetição (loop): Exemplo sem loop inicio inteiro x,y; leia (x); y <- x; y <- y * x; y <- y * x; y <- y * x; y <- y * x; y <- y * x; escreva (y); fim Exemplo com loop inicio inteiro x,y,z; leia (x); y <- x; z <- 1; enquanto (z < 10) faça y <- y * x; z <- z + 1; fim enquanto escreva (y); fim Exemplos: a) O problema do loop infinito: inicio inteiro I; I <- 0; enquanto (I < 5) faça escreva (I); fim enquanto Teste de Mesa inicio I = 0 1ª iteração I = 0 2ª iteração I = 0 3ª iteração I = infinitas iterações I = 0 Obs: O programa ficará travado, pois a condição de saída do loop nunca será satisfeita fim 25
28 Capítulo 1 b) Corrigindo o problema do loop infinito: inicio inteiro I; I <- 0; enquanto (I < 5) faça I <- I + 1; escreva (I); fim enquanto fim Teste de Mesa inicio I = 0 1ª iteração I = 1 2ª iteração I = 2 3ª iteração I = 3 4ª iteração I = 4 5ª iteração I = 5 5 < 5? sai do loop Comando: para / até / faça Em portugol, escreve-se o comando para / até / faça, da forma apresentada abaixo. Note que se forma um bloco de comandos, delimitado ente o início e o fim do loop. Veja a sintaxe do comando: para variável de valor inicial até valor final faça fim para... lista de comandos;... Variável que será incrementada a cada iteração do loop. Valor final do loop (critério de parada. Valor inicial da variável Exemplos: a) Loop para/faça com passo crescente igual a 1. inicio inteiro I; para I de 1 até 5 faça escreva (I); fim para fim Teste de Mesa inicio 1ª iteração I = 1 2ª iteração I = 2 3ª iteração I = 3 4ª iteração I = 4 5ª iteração I = 5 5 < 5? sai do loop Obs: No loop do tipo para/faça o valor da variável de controle do loop é incrementada automaticamente de 1 a cada loop. 26
29 Capítulo 1 b) Loop para/faça com passo diferente de 1 (incremento): inicio inteiro I; para I de 1 até 5 passo 2 faça escreva (I); fim para fim Teste de Mesa inicio 1ª iteração I = 1 2ª iteração I = 3 3ª iteração I = 5 5 < 5? sai do loop Obs: No loop do tipo para/faça o valor da variável de controle do loop é incrementada automaticamente de 2 em 2 a cada loop. c) Loop para/faça com passo decrescente: inicio inteiro I; para I de 5 até 1 passo -2 faça escreva (I); fim para fim Teste de Mesa inicio 1ª iteração I = 5 2ª iteração I = 3 3ª iteração I = 1 1 < 1? sai do loop Obs: No loop do tipo para/faça o valor da variável de controle do loop é decrementada automaticamente de 2 em 2 a cada loop. Exercícios: 1 Escreva um algoritmo para gerar uma PA de razão qualquer, com uma série de 10 termos. 2 Modifique o exercício 5.1 para uma PA de N termos. 3 Escreva um algoritmo para gerar a sequência de Fibonacci da forma abaixo, até o vigésimo termo: 1,1,2,3,5,8,13,... 4 Sejam dados P(X1,Y1) e Q(X2,Y2) dois pontos quaisquer no plano. Escreva um algoritmo que leia os pares de coordenada x e y e calcule a distância entre estes dois pontos. 5 Escreva um algoritmo que gere uma tabela com a conversão de graus para Fahrenheit para Celsius e vice versa, com valores variando de 1 em 1 grau, de 0 a 100 graus Celsius. 27
Capítulo 1 1. INTRODUÇÃO À PROGRAMAÇÃO: ALGORITMOS Várias definições de algoritmos estão presentes na literatura (ver bilbliografia indicada). De forma geral um algoritmo pode ser definido como: Um algoritmo