Baixe o app para aproveitar ainda mais
Prévia do material em texto
ITEGO Célio Domingos Mazzonetto (62) 3307-1700 T é c n i c o e m M a n e S u p d e I n f o r m á t i c a Linguagem script SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 2 Caro estudante! Este caderno apresenta conteúdos importantes sobre a disciplina de Linguagem script, com objetivo de: proporcinar noções de criação de sistemas estruturados; executar ferramentas de processamento criada em sistemas compiladores; chegar ao resultado de um problema usando algorítimos e rotinas pre-determinadas; e identificar através de raciocínio lógico o melhor caminho para o resultado. Conteúdo indispensável para o exercício profissional daqueles que pretendem-se inserir no mercado de trabalho. Na área de tecnologia, a compreenção da linguagem de programação é fundamental, pois sabemos que nossa linguagem não é a mesma do computador, com isso, é necessário o uso de métodos lógicos para que possam chegar ao resultado desejado. É imprescindível, para alcançar sucesso na disciplina, que você busque estudar este material, consultar outros materiais sobre o assunto trabalhado na aula e solicitar ajuda do tutor, sempre que surgirem dúvidas. Empenhe-se em seus estudos e lembre-se: o seu sucesso só depende de você. Um curso à distância não acontece se o aluno não tomar a iniciativa. Atenciosamente, Heder Vieira de Lima Professor SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 3 Os ícones são elementos gráficos utilizados para ampliar as formas de linguagem e facilitar a organização e a leitura hipertextual. Atenção: indica pontos de maior relevância no texto. Saiba mais: oferece novas informações que enriquecem o assunto ou “curiosidades” e notícias recentes relacionadas ao tema estudado. Atividades: apresenta atividades em diferentes níveis de aprendizagem para que o estudante possa realizá-las e conferir o seu domínio do tema estudado. Mídias integradas: sujestões de vídeos e filmes relacionado ao conteúdo aplicado. Dicas: Métodos inteligentes e alternativos que facilitam a sua vida. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 4 Sumário 1. ALGORITMOS ..................................................................................................................... 9 1.1. Definição de algoritmo .................................................................................................. 9 1.2. Algoritmos em Portugol ............................................................................................... 11 2. PORTUGOL ........................................................................................................................ 12 2.1. Introdução Portugol ..................................................................................................... 12 2.2. Variáveis e constantes ................................................................................................. 13 2.2.1. Declaração de Variáveis ........................................................................................... 13 2.2.1.1. Tipos de Variáveis .................................................................................................. 13 2.2.1.2. Identificadores de Variáveis ................................................................................ 14 2.2.2. Constantes ................................................................................................................... 17 2.3. Estrutura do Algoritmo em Portugol ........................................................................ 18 2.3.1. Comando de Atribuição (<-) ................................................................................... 18 2.3.2. Operadores Aritméticos .......................................................................................... 20 2.3.3. Entrada e Saída de Dados ....................................................................................... 22 2.3.4. Regras para escrever algoritmos em portugol .................................................... 23 Exercícios ................................................................................................................................... 24 2.4. Comandos de Controle............................................................................................... 29 2.4.1. Desvio Condicional .................................................................................................. 29 2.4.1.1. Operadores Lógicos ............................................................................................. 29 2.4.1.2. Operadores Relacionais ...................................................................................... 30 2.4.1.3. Desvio Condicional Simples e Composta........................................................ 30 Exercícios ................................................................................................................................... 32 2.4.2. Laços de Repetição (loop) ....................................................................................... 33 2.4.2.1. Comando: enquanto/faça ................................................................................... 35 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 5 2.4.2.2. Comando: para / até / faça .................................................................................. 37 Exercício .................................................................................................................................... 39 3. PROGRAMAÇÃO EM LINGUAGEM C ........................................................................ 40 3.1. INTRODUÇÃO A PROGRAMAÇÃO EM LINGUAGEM C ..................................... 40 3.1.1. Declaração de Variáveis .......................................................................................... 40 3.1.2. Comando de atribuição: ..........................................................................................42 3.2. ENTRADA E SAÍDA DE DADOS FORMATADA .......................................................42 3.2.1. FORMATAÇÃO DE CAMPOS PARA EXIBIÇÃO .................................................. 46 3.3. OPERADORES ARITMÉTICOS ................................................................................... 47 Exercício .................................................................................................................................... 48 3.4. COMANDOS DE DECISÃO ........................................................................................ 49 3.4.1. EXPRESSÕES LÓGICAS .......................................................................................... 49 Exercício .................................................................................................................................... 50 3.5. DECISÃO SIMPLES ....................................................................................................... 51 Exercício .....................................................................................................................................54 3.5.1. OPERADOR CONDICIONAL ................................................................................... 55 Exercício .................................................................................................................................... 56 3.5.2. CONDICIONAIS ANINHADOS E ENCADEADOS .............................................. 57 Exercício .................................................................................................................................... 59 3.6. DECISÃO MÚLTIPLA ...................................................................................................60 Exercício .................................................................................................................................... 64 3.7. COMANDOS DE REPETIÇÃO ................................................................................... 65 3.7.1. EXPRESSÕES COMPACTAS ................................................................................... 65 3.7.2. OPERADORES ARITMÉTICOS DE ATRIBUIÇÃO ............................................... 65 Exercício: .................................................................................................................................... 67 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 6 3.7.3. INCREMENTO E DECREMENTO .......................................................................... 68 Exercício: ................................................................................................................................... 70 3.8. REPETIÇÃO COM CONTADOR ................................................................................... 71 Exercício: .................................................................................................................................... 72 Exercício: .................................................................................................................................... 75 Exercício ..................................................................................................................................... 78 3.9. REPETIÇÃO COM PRECONDIÇÃO ........................................................................... 79 Exercício ..................................................................................................................................... 81 3.10. REPETIÇÃO COM POSCONDIÇÃO ...................................................................... 82 Exercício .................................................................................................................................... 84 Referência ............................................................................................................................. 85 Currículo do Professor ....................................................................................................... 86 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 7 Apresentação da disciplina Disciplina: Linguagem script (carga horária: 40h). Ementa: Todas as aulas (teorias e práticas) 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. Tem como conteúdo programático: Algoritmos: Introdução; Algoritmos: Portugol; Introdução a Linguagem C. E lembre-se: Aprofunde seus conhecimentos compartilhando suas dúvidas e conhecimentos com seus tutores e colegas. Use esse material como base e busque conhecimentos em outras fontes. Bom Estudo! SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 8 1. ALGORITMOS Definição de algoritmo 10 horas 2. PORTUGOL Introdução Portugol, variáveis, constantes, estrutura e operações 10 horas 3. PROGRAMAÇÃO EM LINGUAGEM C Introdução a linguagem C, variáveis, constantes, estrutura e operações 20 horas Total 40 horas SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 9 1. ALGORITMOS 1.1. Definição de algoritmo Várias definições de algoritmos estão presentes na literatura (ver bilbliografia indicada). De forma geral um algoritmo pode ser definido como 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: Seqüência de ações para chegar ao trabalho/universidade: O que é Algoritmos 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. Acordar Levantar Tomar café Pegar o ônibus ou Pegar o carro Chegar ao destino SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 10 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). Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 11 1.2. Algoritmos em Portugol Como no item 1 ".... 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...” a descrição deve ser finita, e os passos devem ser bem definidos sem ambiguidades. 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. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 12 2. PORTUGOL 2.1. Introdução 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 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: algoritmo <declarações de variáveis> <comandos> fim_algoritmo SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 13 2.2. Variáveis e constantes 2.2.1. 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: 2.2.1.1. 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: · numerico: Qualquer número inteiro (negativo, nulo ou positivo). Exemplo: -100, 0, 1, 2, 1250. · literal: Caracteres alfanuméricos. Exemplo: “casa”, “Win31”, “123”, “alfa#2”, etc... · logico: valor lógico verdadeiro ou falso Exemplo: x > y ?SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 14 2.2.1.2. 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); exemplo: causaria erro na programação, como palavra reservada repetida. O correto seria: “n” reservado para valor numérico e “t” reservado para texto b) Tomar alguns cuidados em relação à sintaxe da linguagem, por exemplo, não é possível nomear variável como: O correto seria: SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 15 c) .Letras maiúsculas e minúsculas são tratadas de forma diferente, então “Valor” é diferente de “valor”, como também de “VALOR”. 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): SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 16 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*); Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 17 2.2.2. 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: Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 18 2.3. Estrutura do Algoritmo em Portugol 2.3.1. Comando de Atribuição (<-) A sintaxe do comando é dada por: Exemplos: a) Atribuição de valor constante em texto: identificador <- expressão nome_aluno <- "Heder Vieira" SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 19 b) Atribuição de valor constante em número: c) Atribuição de valor entre variáveis: d) Resultado de expressões SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 20 2.3.2. 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 + (soma) ; Exemplo: z <- x + y; · A subtração é dada através do operador – (subtração); Exemplo: z <- x - y; · A divisão para real será dada por / (divisão); 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 xy é dado pelo comando potencia() . Exemplo: z <- potencia(x, y); · A raiz de uma valor é extraída através do comando raiz() . Exemplo: z <- raiz(x); SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 21 Exemplo: a) Desenvolva um algoritmo em portugol para somar dois valores inteiros (10 + 5): 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. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 22 2.3.3. 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: SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 23 2.3.4. 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; · Alinhar os comandos facilita a legibilidade do algoritmo e reduz a possibilidade de erros. Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 24 Exercícios 1. Desenvolva um algoritmo em portugol para calcular xy. Os valores de x e y serão fornecidos pelo usuário do programa; SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 25 2. Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usuário. [ V = 4 3 𝜋 R 3 ] SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 26 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)] SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 27 4. Desenvolva um algoritmo para calcular a média entre 4 valores fornecidos pelo usuário. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 28 5. Desenvolva um algoritmo para encontrar as raízes de uma equação do tipo Ax2 + Bx + C. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 29 2.4. 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). 2.4.1. 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. 2.4.1.1. Operadores Lógicos 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 OU NÃO (Var1) V V V V F V F F V F F V F V V F F F F V SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 30 2.4.1.2. Operadores Relacionais Permitem realizar a comparação de conteúdos das variáveis: A igualdade é dada por A disigualdade é dada por <> Maior que, pelo símbolo > Menor que, pelo símbolo < Maior ou igual, pelo símbolo >= Menor ou igual, pelo símbolo <= 2.4.1.3. Desvio Condicional Simples e Composta 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, entao e senao. 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. Exemplo:SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 31 Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 32 Exercícios 1 – Desenvolva um programa 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 T0 ≤ T ≤ T1. Dados T0 = 5, T1 = 10, V0 = 1, V1 = 2; 3 – Dado o gráfico do exercício 2, desenvolva um programa que apresente o valor de V para um dado valor de T, fornecido pelo usuário. 4 – Modifique os exercícios 2 e 3. para utilizar um desvio condicional composto, se for o caso. Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 33 2.4.2. 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: Neste caso o loop será infinito. Isso é um problema porque o algoritmo não termina, portanto, não pode ser um algoritmo já que todo algoritmo deve ter um fim. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 34 Exemplo 2: Exemplo 3: 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... Anotações SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 35 2.4.2.1. 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: Suponha os algoritmos abaixo que calculam o valor de x10, 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): a) Sem laço: SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 36 b) Com laço: Repetição constante Repetição variável Problema loop infinito Teste de Mesa Início: n = 0 1º loop: n = 0 2º loop: n = 0 3º loop: n = 0 4º loop: n = 0 ... nº loop: n = 0 Obs: O programa ficará travado, pois a condição de saída do loop nunca será satisfeita ou seja: a variável n nunca será maior que 5 Teste de Mesa n = 0 e i = 5 Início: 0 <= 5 1º loop: 1 <= 5 2º loop: 2 <= 5 3º loop: 3 <= 5 4º loop: 4 <= 5 5º loop: 5 <= 5 6º loop: 6 <= 5 ? SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 37 2.4.2.2. 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: Exemplos: a) Loop para/faça com passo crescente igual a 1. Obs: No loop do tipo para/faça o valor da variável de controle do loop é incrementada automaticamente de 1 a cada loop 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 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 38 b) Loop para/faça com passo decrecente: SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 39 Exercício 1) Escreva um algoritmo para gerar uma PA (progressão aritmética) 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. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 40 3. PROGRAMAÇÃO EM LINGUAGEM C 3.1. INTRODUÇÃO A PROGRAMAÇÃO EM LINGUAGEM C 3.1.1. Declaração de Variáveis As diferenças entre os tipos de variáveis do portugol para o C são: inteiro = int real = float, double caracter = char lógico = bool (normalmente não é necessário tipos booleanos para testes lógicos) Para alterar a precisão dos valores podem ser utilizados modificadores: C ANSI Exemplos: char char x; (x é um texto ou sequência de caracteres) int int y; (y é um inteiro sem sinal) unsigned int y (y é um inteiro com sinal) float float z; (z números com ponto flutuante (reais) com precisão simples) double double v; (v armazena números com ponto flutuante, com precisão dupla, ou seja normalmente possui o dobro da capacidade de uma variável do tipo float.) Exemplos: a) signed int (ou simplesmente int): Tipo de variável que se refere a um número inteiro com sinal. Ou seja, se um variável int ocupa dois bytes na memória, então, o maior valor decimal que pode ser armazenado neste tipo de variável deve estar entre –32.767 a 32.767 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 41 O primeiro bit (mais significativo) representa o sinal (0 positivo e 1 negativo). Então o maior valor decimal que pode ser armazenado em 15 bits é 32.767. b) unsigned int; Tipo de variável que se refere a um número inteiro sem sinal. Ou seja, se um variável int ocupa dois bytes na memória, então, o maior valor decimal que pode ser armazenado neste tipo de variável deve estar entre 0 a 65.535. O primeiro bit (mais significativo) não representa mais o sinal. Então o maior valor decimal que pode ser armazenado em 16 bits é 65.535. O tamanho em bytes de cada tipo de variável no C, é apresentado na tabela abaixo. Tipo Tamanho em Bits Faixa de valores Char 8 -127 a 127 unsigned char 8 0 a 255 signed char 8 -127 a 127 int 16 -32767 a 32767 unsigned int 16 0 a 65.535 signed int 16 mesmo que int short int 16 mesmo que int unsigned short int 16 mesmo que unsigned int signed short int 16 mesmo que short int long int 32 -2.147.483.647 a 2.147.483.647 signed long int 32 Mesmo que long int SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 42 unsigned long int 32 0 a 4.294.967.295 float 32 seis dígitos de precisão double 64 dez dígitos de precisão long double 80 dez dígitos de precisão 3.1.2. Comando de atribuição: O comando de atribuição em linguagem é dado pelo símbolo = (igual). Exemplo: float A, B, C; A = 10; B = 20; C = A + B; Obs: na linguagem C o símbolo = (igual) substitui o símbolo <- de portugol 3.2. ENTRADA E SAÍDA DE DADOS FORMATADA A função scanf() permite que um valor seja lido do teclado e armazenado numa variável. Sua sintaxe consiste numa cadeia de formatação seguida de uma lista de argumentos, cada um deles sendo o endereço de uma variável: scanf(“formatação”, arg1, arg2, ..., argn); A cadeia de formatação é composta por códigos especiais, denominados especificadores de formato, que indicam a quantidade e os tipos dos dados que serão lidos pela função.“scanf()” em C assume a mesma operação do portugol “leia”. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 43 Exemplo: Lendo dados com a função scanf() Enquanto isso em portugol Como podemos observar, a cada especificação de formato na cadeia de formatação corresponde um endereço de variável na lista de argumentos. O operador & informa o endereço de memória em que uma variável foi alocada. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 44 Expecificador Representa %c um único caracter %o, %d, %x um número inteiro em octal, decimal ou hexadecimal %u um número inteiro em base decimal sem sinal %ld um número inteiro longo em base decimal %f, %lf um número real de precisão simples ou dupla %s uma cadeia de caracteres (string) %% um único sinal de porcentagem A função printf() nos permite exibir informações formatadas no vídeo. A sua sintaxe é essencialmente idêntica àquela da função scanf(). A principal diferença é que agora a lista de argumentos deve conter os valores a serem exibidos e não seus endereços: printf(“formatação”, arg1, arg2, ..., argn); Além disso, a cadeia de formatação pode conter também texto, que é exibido normalmente, e caracteres de controle, cuja exibição causa efeitos especiais. Os principais caracteres de controle utilizados com a função printf() são: Caracter de controle Efeito \a soa o alarme do microcomputador \b o cursor retrocede uma coluna \f alimenta página na impressora \n o cursor avança para uma nova linha \r o cursor retrocede para a primeira coluna da linha \t o cursor avança para próxima marca de tabulação \” \’ exibe uma única aspa ou apóstrofo \\ exibe uma única barra invertida SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 45 Desses caracteres, o mais usado é \n. Através dele podemos indicar quando uma nova linha deve ser utilizada ao se exibir alguma informação na tela. Exemplo: Exibindo dados com a função printf() Enquanto isso em portugol SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 46 3.2.1. FORMATAÇÃO DE CAMPOS PARA EXIBIÇÃO A função printf() permite que os campos de exibição sejam formatados. As formatações mais usadas são o preenchimento com zeros à esquerda, para inteiros, e a especificação do número de casas decimais, para reais. Exemplo: Formatação de campos com printf(). ------------------------------------- | 678| |000678| | 12.346| | 12.35| ------------------------------------ SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 47 3.3. OPERADORES ARITMÉTICOS C oferece operadores para as quatro operações aritméticas e também um operador para calcular o resto da divisão entre dois números inteiros. Operador Resultado + soma de dois números quaisquer - diferença entre dois números quaisquer * produto de dois números quaisquer / quociente da divisão de dois números % resto da divisão de dois número inteiros Destes operadores, apenas dois merecem atenção especial. Os demais funcionam conforme as regras usuais estabelecidas na matemática básica. • Divisão: o operador de divisão fornece resultado inteiro apenas quando ambos os operandos são inteiros. Por exemplo, 7 / 2 ⇒ 3 e 7.0 / 2 ⇒ 3.5. • Resto: o operador de resto somente pode ser utilizado com operandos inteiros. Por exemplo, 7 % 2 ⇒ 1 e 7.0 % 2 ⇒ erro. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 48 Exercício a) Dadas as duas notas de um aluno, informe a sua média final. b) Dados uma distância e o total de litros de combustível gasto por um automóvel para percorrê-la, informe o consumo médio. c) Dado um caracter, informe o seu código ASCII em octal, decimal e hexadecimal. d) Dada um temperatura em graus Fahrenheit, informe o valor correspondente em graus Celsius. [Dica: C = (F – 32) ∗ (5 / 9)]. e) Dadas as medidas dos catetos de um triângulo retângulo, informe a medida da hipotenusa. [Dica: para calcular a raiz quadrada use a função sqrt(), definida no arquivo math.h]. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 49 3.4. COMANDOS DE DECISÃO Nesse capítulo introduzimos os conceitos básicos relacionados à tomada de decisão, tais como valores lógicos, operadores relacionais e conectivos, e apresentamos os comandos condicionais oferecidos na linguagem C. 3.4.1. EXPRESSÕES LÓGICAS Em C, não existe um tipo específico para a representação de valores lógicos. Entretanto, qualquer valor pode ser interpretado como um valor lógico: “zero representa falso e qualquer outro valor representa verdade”. Por exemplo, os valores 5, –3, 1.2 e 'a' são verdadeiros, enquanto 0 e 4–4 são falsos. Para gerar um valor lógico, usamos os operadores relacionais. Através deles podemos comparar dois valores de diversas formas. O resultado da avaliação de um operador relacional é 0 se a comparação é falsa e 1 se verdadeira. Operador relacional Resultado x == y verdade se x for igual a y x != y verdade se x for diferente de y x < y verdade se x for menor que y x > y verdade se x for maior que y x <= y verdade se x for menor ou igual a y x >= y verdade se x for maior ou igual a y Em C, 0 representa o valor lógico "falso" e 1 representa o valor lógico "verdade". SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 50 Exemplo: Operadores relacionais e valores lógicos. ... printf("%d %d", 5 < 6, 6 < 5); ... A saída produzida pela instrução será “1 0”. Além dos operadores relacionais, C oferece também operadores lógicos. Com eles, podemos criar expressões lógicas compostas. Os operadores lógicos funcionam conforme as regras definidas na lógica matemática. Operador lógico Resultado !x verdade se e só se x for falso x && y verdade se e só se x e y forem verdade x || y verdade se e só se x ou y for verdade Numa expressão contendo operadores aritméticos, relacionais e lógicos, a avaliação é efetuada na seguinte ordem: ① primeiro avaliam-se todos os operadores aritméticos; ② em seguida, avaliam-se os operadores relacionais; ③ só então, avaliam-se os operadores lógicos. Exercício Qual a saída produzida pela instrução a seguir? printf("%d %d %d %d", !3, !0, 3+'a'>'b'+2 && !'b', 1 || !2 && 3); Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 51 3.5. DECISÃO SIMPLES A estrutura condicional ou de decisão simples serve para escolher um entre dois comandos alternativos, conforme ilustrado na figura abaixo. Em C, a estrutura condicional é codificada da seguinte forma: if(condição) comando1; else comando2; e funciona, conforme ilustrado na figura abaixo, da seguinte maneira: ① avalia a condição, que deve ser uma expressão lógica; ② se a condição for verdadeira, executa apenas o comando1; ③ senão, executa apenas o comando2. Exemplo: Uso de decisão simples #include <stdio.h> main() { float a, b, m; printf(“\n Informe as duas notas obtidas: ”); scanf(“%f %f”, &a, &b); m = (a+b)/2; if( m >= 7.0 ) printf(“\n Aprovado”); else printf(“\n Reprovado”); } SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 52 O programa solicita as duas notas obtidas pelo aluno, calcula sua média e, em função desse valor, decide se o aluno está ou não aprovado. Pode ser que um dos comandos alternativos, ou ambos, seja composto por mais de uma instrução.Por exemplo, se o programa anterior tivesse que exibir Aprovado em azul e Reprovado em vermelho, então cada alternativa seria composta por duas instruções: uma para selecionar a cor e a outra para exibir a situação do aluno. Nesse caso, teríamos que usar blocos, agrupando as instruções em cada alternativa dentro de um par de chaves. Exemplo: O uso de blocos de instruções. #include <stdio.h> #include <conio.h> main() { float a, b, m; clrscr(); printf(“\n Informe as duas notas obtidas: ”); scanf(“%f %f”, &a, &b); m = (a+b)/2; if( m >= 7.0 ) { textcolor(BLUE); cprintf(“\n Aprovado”); } else { textcolor(RED); cprintf(“\n Reprovado”); } getch(); } SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 53 Anotação A função textcolor() seleciona a cor do texto e a função cprintf(), cuja sintaxe é idêntica à da printf( ), exibe o texto na cor selecionada. Essas funções, assim como as constantes BLUE e RED, estão declaradas no arquivo conio.h. Alguns comandos alternativos ou adicionais podem não funcionar em alguns compiladores. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 54 Exercício 1) Dados dois números distintos, informe qual dele é o maior. 2) Uma empresa determinou um reajuste salarial de 5% a todos os seus funcionários. Além disto, concedeu um abono de R$ 100,00 para aqueles que recebem até R$ 750,00. Dado o valor do salário de um funcionário, informar para quanto ele será reajustado. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 55 3.5.1. OPERADOR CONDICIONAL C oferece também um operador que proporciona uma forma mais compacta de se representar decisões simples. O operador condicional, cuja sintaxe é condição ? expressão1 : expressão2, funciona da seguinte maneira: ① avalia a condição; ② se ela for verdadeira, o resultado final é o valor da expressão1; ③ senão, o resultado final é o valor da expressão. Exemplo: O uso do operador condicional. ... abs = n>0 ? n : -n; ... A instrução acima atribui à variável abs o valor absoluto da variável n. A expressão n>0 é avaliada: se for verdadeira, abs recebe o próprio valor de n; caso contrário, abs recebe o valor de n com o sinal invertido. Exemplo: O uso do operador condicional como argumento de função. #include <stdio.h> main() { int x, y; printf("\nInforme dois valores: "); scanf("%d %d", &x, &y); printf("\n Máximo = %d", x>y ? x : y); } A instrução acima seleciona e exibe o máximo entre dois valores x e y. Note que não seria possível usar um if-else como argumento na função printf(). Uma vantagem no uso do operador condicional é que, sendo um operador, podemos utilizá-lo em qualquer contexto em que uma expressão é permitida. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 56 Exercício 1) Seja e uma variável contendo o número de erros detectados num certo processo. Codifique uma instrução capaz de exibir saídas como: 1 erro detectado. 5 erros detectados. 2) Codifique uma instrução para exibir valores lógicos como true e false. Para o valor 0 deve aparecer false e para qualquer outro, true. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 57 3.5.2. CONDICIONAIS ANINHADOS E ENCADEADOS Como vimos, a estrutura condicional serve para selecionar e executar um entre dois comandos alternativos. É possível que, algumas vezes, um destes comandos alternativos (ou ambos) sejam também condicionais. Nesse caso, dizemos que o primeiro condicional é o principal e o outro está aninhado ou encadeado, conforme indicado a seguir: if(condição) /* principal */ if ... /* aninhado */ else if ... /* encadeado */ Para exemplificar o uso desses condicionais, vamos considerar o seguinte problema: “Dados três números verificar se eles podem representar as medidas dos lados de um triângulo e, se puderem, classificar o triângulo em equilátero, isósceles ou escaleno”. Para codificar o programa, devemos lembrar das seguintes definições: • Para que três números representem os lados de um triângulo é necessário que cada um deles seja menor que a soma dos outros dois. • Um triângulo é equilátero se tem os três lados iguais, isósceles se tem apenas dois lados iguais e escaleno se tem todos os lados distintos. Exemplo: O uso de condicionais aninhados e encadeados. #include <stdio.h> #include <conio.h> main() { float a, b, c; clrscr(); printf(“\nInforme três números: “); scanf(“%f %f %f”, &a, &b, &c); if( a<b+c && b<a+c && c<a+b ) { printf(“\nÉ um triângulo: ”); if( a==b && b==c ) printf(“equilátero”); else if( a==b || a==c || b==c ) printf(“isósceles”); SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 58 else printf(“escaleno”); } else printf(“\nNão é um triângulo”); getch(); } Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 59 Exercício 1) Numa faculdade, os alunos com média pelo menos 7,0 são aprovados, aqueles com média inferior a 3,0 são reprovados e os demais ficam de recuperação. Dadas as duas notas de um aluno, informe sua situação. Use as mensagens aprovado, reprovado e recuperação, respectivamente. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 60 3.6. DECISÃO MÚLTIPLA A estrutura de decisão múltipla é bastante adequada quando precisamos escolher uma entre várias alternativas previamente definidas, por exemplo, num menu. A decisão múltipla tem a seguinte forma básica: switch( expressão ) { case constante1 : comando1; break; case constante2 : comando2; break; ... case constanten : comandon; break; default : comando; } e funciona da seguinte maneira: ① Avalia a expressão, que deve ser do tipo char ou int; ② Encontra o case cuja constante é igual ao valor da expressão e executa todos os comandos seguintes até encontrar um comando break; ③ Se não existe tal caso, executa as instruções associadas ao caso default. Note que, embora o comando break seja quase sempre usado juntamente com o comando switch, ele não faz parte da sintaxe desse comando. Se dois casos não são separados por um comando break, dizemos que o controle "vaza" de um caso para o outro, ou seja, quando o primeiro caso é selecionado para execução, não apenas o comando associado a ele é executado, mas também o comando associado ao segundo. O caso default é opcional e, embora seja geralmente posicionado no final do bloco switch, ele pode aparecer em qualquer posição entre os case´s especificados. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 61 Exemplo: O uso da estrutura de decisão múltipla com vazamentos. #include <stdio.h> main() { int n; printf(“\n Digite um número: ”); scanf(“%d”, &n); switch( n ) { case 1: putchar('A'); break; case 3: putchar('B'); case 4: putchar('C'); break; default: printf('*'); case 5: putchar('D'); } putchar('.'); } A tabela ao lado mostra as saídas produzidas pelo programa para alguns valores atribuídos à variável n. Note que, como não há um caso rotulado com a constante 2, para n=2, o caso default é selecionado. Como o caso default não é finalizado com um break, o controle "vaza" para o caso seguinte, produzindo a saída *D.. A seguir, a estrutura de decisão múltipla é usada para implementar uma simples calculadora: o usuário digita uma expressão da forma val1 oper val2 e o programa fornece-lhe seu valor como resposta. N Saída 1 A. 2 *D. 3 BC. 4 C. 5 D. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação62 Exemplo: O uso da estrutura de decisão múltipla. #include <stdio.h> main() { float x, y; char op; printf(“\n Expressão? ”); scanf(“%f %c %f”, &x, &op, &y); switch( op ) { case ‘+’: printf(“\n valor = %.2f”, x+y); break; case ‘-’: printf(“\n valor = %.2f”, x-y); break; case ‘*’: printf(“\n valor = %.2f”, x*y); break; case ‘/’: printf(“\n valor = %.2f”, x/y); break; default : printf(“\n Operador inválido: %c”,op); } } Não existe restrição alguma quanto aos tipos de comandos que podem estar associados a um determinado case dentro do comando switch. Por exemplo, suponha que antes de efetuar uma divisão seja necessário verificar se o divisor é realmente diferente de zero. Nesse caso, teríamos que incluir um comando if dentro do switch; isso pode ser feito sem nenhum problema. Exemplo: Usando if dentro do switch. ... case ‘/’ : if( y == 0 ) { printf(“\n Impossível dividir por zero!”); exit(1); } z = x/y; break; ... Quando executada, a função exit() interrompe a execução do programa. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 63 Como toda a estrutura switch é envolvida por chaves, não é necessário usar bloco quando há mais que uma instrução associada a um determinado case. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 64 Exercício 1) Escreva um programa utilizando o comando switch que imprima um mês de acordo com o número digitado pelo usuário. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 65 3.7. COMANDOS DE REPETIÇÃO Nesse capítulo introduzimos os operadores aritméticos de atribuição, de incremento e decremento, que nos permitem escrever expressões de forma mais compactas, e apresentamos os comandos de repetição e de interrupção de laço oferecidos em C. 3.7.1. EXPRESSÕES COMPACTAS Quando codificamos um programa, freqüentemente temos a necessidade de escrever expressões da forma variável = variável operador expressão. Para facilitar, C oferece um grupo especial de operadores de atribuição que nos permitem escrever essas expressões numa forma mais compacta. 3.7.2. OPERADORES ARITMÉTICOS DE ATRIBUIÇÃO Os operadores aritméticos de atribuição combinam, num único operador, uma operação aritmética e uma atribuição. Por exemplo, a expressão x = x+3 pode ser escrita como x += 3. O operador += adiciona o valor da expressão à sua direita ao valor da variável à sua esquerda e armazena o resultado nessa mesma variável. Em geral, os compiladores geram um código executável mais rápido quando essas abreviações são utilizadas. Porém, a maior vantagem desses operadores é evitar erros decorrentes de redundância. Por exemplo, considere a expressão v[i+w[2∗j]] = v[i+w[2∗j]]+3. Para manter a consistência, toda alteração feita na variável1 do lado esquerdo deverá também ser feita na variável do lado direito. Evidentemente, escrevendo-a como v[i+w[2∗j]] += 3, garantimos que toda alteração será sempre consistente. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 66 Expressão Forma compacta Objetivo x = x + y x += y Atribui a soma de x x = x − y x −= y Atribui a subtração de x x = x ∗ y x ∗= y Atribui a multiplicação de x x = x / y x /= y Atribui a divisão de x x = x % y x %= y Atribui ao módulo de x SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 67 Exercício: 1) Explique por que motivo a expressão x = x ∗ 2 + y não pode ser escrita como x ∗= 2 + y. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 68 3.7.3. INCREMENTO E DECREMENTO Se uma expressão incrementa ou decrementa o valor da variável, podemos então escrevê-la numa forma ainda mais compacta. Para incrementar usamos o operador ++ e para decrementar usamos o operador −−. Esses operadores são unários e podem ser usados tanto na forma prefixa quanto posfixa. • forma prefixa: ++variável, −−variável • forma posfixa: variável++, variável— Exemplo: Operadores de incremento e decremento. ... int x=5, y=5; ++x; y––; printf(“\n x=%d y=%d”, x, y); ... Como esperado, a saída produzida pelo código acima será x=6 y=4. A diferença entre usar um operador na forma prefixa ou posfixa aparece somente quanto ele é utilizado numa expressão, juntamente com outros operadores. Neste caso, o funcionamento é o seguinte: na forma prefixa, a variável é alterada e, depois, seu valor é usado. na forma posfixa, o valor da variável é usado e, depois, ela é alterada. Exemplo: Operadores de incremento e decremento. ... int x=5, y=5, v, w; v = ++x; w = y––; printf(“\n x=%d y=%d v=%d w=%d”, x, y, v, w); ... Agora, a saída produzida pelo código será x=6 y=4 v=6 w=5. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 69 Anotação Os operadores de incremento e decremento não podem ser aplicados a valores constantes, já que x++ equivale, de certa forma, a x = x+1 ou x += 1. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 70 Exercício: 1) Seja x=5 e considere a instrução y = x++ + ++x. Quais os valores das variáveis x e y após a execução dessa instrução? Por quê?. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 71 3.8. REPETIÇÃO COM CONTADOR A estrutura de repetição com contador tem seu funcionamento controlado por uma variável que conta o número de vezes que o comando é executado. Em C, essa estrutura é implementada pelo comando for, cuja forma básica é a seguinte: for( inicialização; condição; alteração) comando; A inicialização é uma expressão que atribui um valor inicial ao contador, a condição verifica se a contagem chegou ao fim e a alteração modifica o valor do contador. Enquanto a contagem não termina, o comando associado ao for é repetidamente executado. O funcionamento dessa estrutura pode ser acompanhado na figura a seguir: Exemplo: Uma contagem progressiva. #include <stdio.h> main() { int c; for(c=1; c<=9; c++) printf(“%d ”, c); } //A saída produzida pelo código será 1 2 3 4 5 6 7 8 9. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 72 Exercício: 1) Dado um valor n, exiba uma contagem regressiva. 2) Exiba uma tabela de conversão de polegadas em centímetros, variando as polegadas de 0 a 10 de meio em meio. [Dica: 1" = 2,54 cm] 3) Dados um número real x e um natural n, exiba a potência xn. 4) Dados um número natural n, exiba seu fatorial n!. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 73 O exemplo anterior tem uma única instrução dentro do for. Porém, usando um bloco, podemos executar qualquer número de instruções. O vetor é uma estrutura de dados indexada, que pode armazenar uma determinada quantidade de valores do mesmo tipo. Os dados armazenados em um vetor são chamados de itens do vetor. Para localizar a posição de um item em um vetor usamos um número inteiro denominado índice do vetor. Exemplo: sendo o vetor de preco representado por x, será escrito preco[x]. Matriz é a uma estrutura de dados do tipo vetor com duas ou mais dimensões. Os itens de uma matriz tem que ser todos do mesmo tipo de dado. Na prática, as matrizes formam tabelas na memória. Exemplo: sendo a matriz preco representada por x = linha e y = coluna será escrito preco[x][y] SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 74 Exemplo: Exibindo tabuadas. #include <stdio.h> #include <conio.h> main() { int n, c, r; clrscr(); printf(“\nDigite um número entre 1 e 10: ”); scanf(“%d”, &n); for(c=1; c<=10; c++) { r = n*c; printf(“\n %d x %2d = %3d”,n, c, r); } getch(); } Supondo que o usuário digite o número 7, o programa exibirá: 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70 SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 75 Exercício: 1) O quadrado de um número natural n é dado pela soma dos n primeiros números ímpares consecutivos. Por exemplo, 12=1, 22=1+3, 32=1+3+5, 42=1+3+5+7, etc. Dado um número n, calcule seu quadrado usando a soma de ímpares ao invés de produto. 2) A série de Fibonacci é 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Os dois primeiros termos são iguais a 1 e, a partir do terceiro, o termo é dado pela soma dos dois termos anteriores. Dado um número n≥3, exiba o n-ésimo termo da série de Fibonacci. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 76 O próximo exemplo mostra o uso de um comando if dentro do comando for. Exemplo: Exibe a tabela ASCII com pausas a cada 23 linhas. #include <stdio.h> #include <conio.h> main() { int c, n=0; for(c=0; c<=255; c++) { printf(“\n%c ==> %d”, c, c); n++; if( n==23 ) { printf(“\n\nPressione uma tecla ...”); n=0; getch(); } } } O contador de linhas n é iniciado com o valor 0 e incrementado a cada linha exibida na tela. Quando seu valor torna-se igual a 23, o programa reinicia seu valor em 0 e aguarda o usuário pressionar uma tecla para prosseguir. O próximo exemplo mostra o uso de um for aninhado dentro de outro. O programa exibe um tabuleiro de xadrez cujo tamanho é indicado pelo usuário. Para determinar a cor dos quadros do tabuleiro, basta observar na figura a seguir que os quadros brancos correspondem a posições cuja soma de suas coordenadas é par e aqueles de cor preta, a posições cuja soma é ímpar. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 77 Exemplo: Exibe um tabuleiro de xadrez. #include <stdio.h> #include <conio.h> main() { int lin, col, n; clrscr(); printf("\n Qual o tamanho do tabuleiro? "); scanf("%d", &n); for(lin=1; lin<=n; lin++) { printf("\n"); for(col=1; col<=n; col++) { if((lin+col)%2 == 0) textcolor(YELLOW); else textcolor(GREEN); cprintf("%c%c",219,219); } } getch(); } O código ASCII 219 corresponde ao caracter '❚'. Como sua altura é o dobro de sua largura, precisamos exibir dois deles para formar um quadrado. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 78 Exercício 1) Dados dois números naturais m e n, exiba um retângulo com m caracteres de altura e n caracteres de largura. Por exemplo, se forem dados os números 3 e 6, deverá ser exibido o seguinte desenho: 1 2 3 4 __ __ __ __ 1 |__|__|__|__| 2 |__|__|__|__| 3 |__|__|__|__| 4 |__|__|__|__| Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 79 3.9. REPETIÇÃO COM PRECONDIÇÃO A estrutura de repetição com precondição, ilustrada na figura abaixo, é mais genérica que aquela com contador. Em C, ela tem a seguinte forma: while(condição) comando; Seu funcionamento é controlado por uma única expressão, sua condição, cujo valor deve ser verdadeiro para que o comando seja repetido. A repetição com precondição pára somente quando sua condição torna-se falsa. Para exemplificar o uso de repetição com precondição, vamos resolver o seguinte problema: “dado um número natural, exibir os seus dígitos”. Por exemplo, dado o número 8503 como entrada, o programa deverá exibir como saída os dígitos 3, 0, 5 e 8. A estratégia será dividir o número sucessivamente por 10 e ir exibindo os restos obtidos, um a um. O processo se repete enquanto o número for diferente de zero, conforme ilustrado a seguir: SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 80 Exemplo: Exibe os dígitos de um número. #include <stdio.h> #include <conio.h> main() { unsigned n, d; clrscr(); printf(“\n Digite um número: ”); scanf(“%u”, &n); printf(“\n Os seus dígitos são: ”); while( n != 0 ) { d = n % 10; n /= 10; printf(“%u ”, d); } getch(); } Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 81 Exercício 1) Faça um programa que receba dois números X e Y, sendo X a quantidade de produtos e Y o preço unitario. Calcule e mostre o valor total de cada produto. 2) Faça um programa que, para um número indeterminado de pessoas: leia a idade de cada uma, sendo que a idade 0 (zero) indica o fim da leitura e não deve ser considerada. A seguir calcule: • o número de pessoas; • a idade média do grupo; • a menor idade e a maior idade. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 82 3.10. REPETIÇÃO COM POSCONDIÇÃO A estrutura de repetição com poscondição é bastante semelhante àquela com precondição. A diferença é que nessa última a condição é verificada antes que o comando seja executado, enquanto na primeira a condição é verificada somente depois que o comando é executado. Conseqüentemente, a repetição com poscondição garante que o comando seja executado pelo menos uma vez. do{ comando; }while( condição ); Vamos criar um programa que simula o movimento de uma bola de pingpong batendo nas bordas da tela, conforme ilustrado a seguir: Não é preciso usar chaves quando há um único comando a ser repetido, entretanto, elas são geralmente incluídas para evitar confusão entre while e do...while. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 83 O movimento da bola se repete até que uma tecla seja pressionada, fato que será verificado através da função kbhit(). Esta função, definida em conio.h, devolve 1 se alguma tecla foi pressionada e 0 em caso contrário. Também, para simular o som da bola batendo na borda da tela, usaremos as seguintes funções definidas em conio.h: • sound(n): emite som com freqüência de n hertz; • nosound( ): cessa o som emitido pelo alto-falante; • delay(m) : gera uma pausa de m milissegundos. Exemplo: Dada uma série de números positivos (finalizada com um valor nulo) que representam o n!. #include <stdio.h> #include <conio.h> main() { int n, v; //clrscr(); printf("\nDigite um número: "); scanf("%d", &n); v = n; do{ n -= 1; v *= n; }while(n > 1); printf("Vetorial: %d\n", v); getch(); } Estes comandos sound(), nosound(), delay(), clrscr()e gotoxy() não funcionam na plataforma para sistema operacional windows e é necessário uma biblioteca específica. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 84 Exercício 1) Escreva um programa em C que receba um número X que representa um número inteiro, e imprima o seu calculo de 1 a 10 e mostre o valor total de cada produto. 2) Escreva um programa em C que calcule a média dos números reais digitados pelo usuário. Termine a leitura se o usuário digitar zero. Anotação SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 85 Referência H. SCHILDT, C – The Complete Reference, 3rd edition, McGraw-Hill, 1995. K. JAMSA, Microsoft C – Secrets, Shortcuts and Solutions, Microsoft, 1989. S. HOLZNER, C Programming, Brady, 1991. SEDI Secretaria de Estado de Desenvolvimento Econômico e Inovação 86 Currículo do Professor Heder Vieira de Lima, Graduado em Gestão de Tecnologia da Informação na Universidade Paulista, Pós-Graduado em Gestão de Tecnologiada Informação e Marketing Digital na Universidade Anhanguera, Técnico em TI, Webdesign e Programador Senior em PHP, JQuery, JSon e JavaScript.
Compartilhar